亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? jdbcworkflowfactory.java

?? 一個很好實用的工作流OSWORKFLOW開發例子.有著非常優秀的靈活性.
?? JAVA
字號:
/* * Copyright (c) 2002-2003 by OpenSymphony * All rights reserved. */package com.opensymphony.workflow.loader;import com.opensymphony.module.propertyset.PropertySet;import com.opensymphony.workflow.FactoryException;import com.opensymphony.workflow.FunctionProvider;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import org.xml.sax.SAXException;import java.io.*;import java.sql.*;import java.util.HashMap;import java.util.Iterator;import java.util.Map;import javax.naming.InitialContext;import javax.naming.NamingException;import javax.sql.DataSource;/** * Workflow Factory that stores workflows in a database. * The database requires a property called 'datasource' which is the JNDI * name of the datasource for this factory. * <p> * Also required is a database table called OS_WORKFLOWDEFS with two columns, * WF_NAME which contains the workflow name, and WF_DEFINITION which will contain the xml * workflow descriptor, the latter can be either a TEXT or BINARY type. * <p> * Note that this class is provided as an example, and users are encouraged to use * their own implementations that are more suited to their particular needs. * * @author Hubert Felber, Philipp Hug * Date: May 01, 2003 * Time: 11:17:06 AM */public class JDBCWorkflowFactory extends XMLWorkflowFactory implements FunctionProvider {    //~ Static fields/initializers /////////////////////////////////////////////    private static final Log log = LogFactory.getLog(JDBCWorkflowFactory.class);    final static String wfTable = "OS_WORKFLOWDEFS";    final static String wfName = "WF_NAME";    final static String wfDefinition = "WF_DEFINITION";    //~ Instance fields ////////////////////////////////////////////////////////    protected DataSource ds;    protected Map workflows;    protected boolean reload;    //~ Methods ////////////////////////////////////////////////////////////////    public WorkflowDescriptor getWorkflow(String name, boolean validate) throws FactoryException {        WfConfig c = (WfConfig) workflows.get(name);        if (c == null) {            throw new RuntimeException("Unknown workflow name \"" + name + "\"");        }        if (log.isDebugEnabled()) {            log.debug("getWorkflow " + name + " descriptor=" + c.descriptor);        }        if (c.descriptor != null) {            if (reload) {                //@todo check timestamp                try {                    c.descriptor = load(c.wfName, validate);                } catch (FactoryException e) {                    throw e;                } catch (Exception e) {                    throw new FactoryException("Error reloading workflow", e);                }            }        } else {            try {                c.descriptor = load(c.wfName, validate);            } catch (FactoryException e) {                throw e;            } catch (Exception e) {                throw new FactoryException("Error loading workflow", e);            }        }        return c.descriptor;    }    public String[] getWorkflowNames() {        int i = 0;        String[] res = new String[workflows.keySet().size()];        Iterator it = workflows.keySet().iterator();        while (it.hasNext()) {            res[i++] = (String) it.next();        }        return res;    }    public void execute(Map transientVars, Map args, PropertySet ps) {        String name = (String) args.get("name");        WorkflowDescriptor wfds = (WorkflowDescriptor) transientVars.get("descriptor");        try {            saveWorkflow(name, wfds, false);        } catch (Exception e) {        }    }    public void initDone() throws FactoryException {        Connection conn = null;        try {            init();            reload = getProperties().getProperty("reload", "false").equalsIgnoreCase("true");            conn = ds.getConnection();            PreparedStatement ps = conn.prepareStatement("SELECT " + wfName + "," + wfDefinition + " FROM " + wfTable);            ResultSet rs = ps.executeQuery();            while (rs.next()) {                String name = rs.getString(1);                WfConfig config = new WfConfig(name);                workflows.put(rs.getString(1), config);            }            rs.close();            ps.close();        } catch (Exception e) {            throw new FactoryException("Could not read workflow names from datasource", e);        } finally {            try {                conn.close();            } catch (Exception ex) {            }        }    }    public byte[] read(String workflowname) throws SQLException {        byte[] wf = new byte[0];        Connection conn = null;        try {            conn = ds.getConnection();            PreparedStatement ps = conn.prepareStatement("SELECT " + wfDefinition + " FROM " + wfTable + " WHERE " + wfName + " = ?");            ps.setString(1, workflowname);            ResultSet rs = ps.executeQuery();            if (rs.next()) {                wf = rs.getBytes(1);            }            rs.close();            ps.close();        } finally {            if (conn != null) {                try {                    conn.close();                } catch (Exception ex) {                }            }        }        return wf;    }    public boolean removeWorkflow(String name) throws FactoryException {        boolean removed = false;        try {            Connection conn = ds.getConnection();            PreparedStatement ps = conn.prepareStatement("DELETE FROM " + wfTable + " WHERE " + wfName + " = ?");            ps.setString(1, name);            int rows = ps.executeUpdate();            if (rows == 1) {                removed = true;                workflows.remove(name);            }            ps.close();            conn.close();        } catch (SQLException e) {            throw new FactoryException("Unable to remove workflow: " + e.toString(), e);        }        return removed;    }    public boolean saveWorkflow(String name, WorkflowDescriptor descriptor, boolean replace) throws FactoryException {        WfConfig c = (WfConfig) workflows.get(name);        if ((c != null) && !replace) {            return false;        }        ByteArrayOutputStream bout = new ByteArrayOutputStream();        Writer out = new OutputStreamWriter(bout);        PrintWriter writer = new PrintWriter(out);        writer.println(WorkflowDescriptor.XML_HEADER);        writer.println(WorkflowDescriptor.DOCTYPE_DECL);        descriptor.writeXML(writer, 0);        writer.flush();        writer.close();        //@todo is a backup necessary?        try {            return write(name, bout.toByteArray());        } catch (SQLException e) {            throw new FactoryException("Unable to save workflow: " + e.toString(), e);        } finally {            WfConfig config = new WfConfig(name);            workflows.put(name, config);        }    }    public boolean write(String workflowname, byte[] wf) throws SQLException {        boolean written = false;        Connection conn = null;        try {            conn = ds.getConnection();            PreparedStatement ps;            if (exists(workflowname, conn)) {                ps = conn.prepareStatement("UPDATE " + wfTable + " SET " + wfDefinition + " = ?" + "WHERE " + wfName + "= ?");                try {                    ps.setBytes(1, wf);                } catch (Exception e) {                }                ps.setString(2, workflowname);            } else {                ps = conn.prepareStatement("INSERT INTO " + wfTable + " (" + wfName + ", " + wfDefinition + ") VALUES (?, ?)");                ps.setString(1, workflowname);                try {                    ps.setBytes(2, wf);                } catch (Exception e) {                }            }            ps.executeUpdate();            ps.close();            conn.close();            written = true;        } finally {            if (conn != null) {                try {                    conn.close();                } catch (Exception e) {                }            }        }        return written;    }    private boolean exists(String workflowname, Connection conn) {        boolean exists = false;        try {            PreparedStatement ps = conn.prepareStatement("SELECT " + wfName + " FROM " + wfTable + " WHERE " + wfName + " = ?");            ps.setString(1, workflowname);            ResultSet rs = ps.executeQuery();            if (rs.next()) {                exists = true;            }            rs.close();            ps.close();        } catch (SQLException e) {            log.fatal("Could not check if [" + workflowname + "] exists", e);        }        return exists;    }    private void init() throws NamingException {        workflows = new HashMap();        ds = (DataSource) new InitialContext().lookup(getProperties().getProperty("datasource"));    }    private WorkflowDescriptor load(final String wfName, boolean validate) throws IOException, SAXException, FactoryException {        byte[] wf;        try {            wf = read(wfName);        } catch (SQLException e) {            throw new FactoryException("Error loading workflow:" + e, e);        }        ByteArrayInputStream is = new ByteArrayInputStream(wf);        return WorkflowLoader.load(is, validate);    }    //~ Inner Classes //////////////////////////////////////////////////////////    class WfConfig {        String wfName;        WorkflowDescriptor descriptor;        long lastModified;        public WfConfig(String name) {            wfName = name;        }    }}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人自拍在线| 91精品国产综合久久久久久久| 国产人久久人人人人爽| 在线观看日韩av先锋影音电影院| 国模少妇一区二区三区| 日本欧美在线看| 亚洲第一av色| 亚洲无线码一区二区三区| 有码一区二区三区| 一区二区三区美女视频| 亚洲国产精品麻豆| 成人av片在线观看| 丁香天五香天堂综合| 97精品久久久久中文字幕| 日本道精品一区二区三区| 欧美视频在线播放| 欧美挠脚心视频网站| 制服丝袜亚洲色图| 亚洲欧美日韩精品久久久久| 亚洲福中文字幕伊人影院| av在线播放成人| 51精品久久久久久久蜜臀| 一区二区三区在线免费观看| 9i在线看片成人免费| 国产精品蜜臀在线观看| 亚洲自拍偷拍麻豆| 久久成人麻豆午夜电影| 成人午夜av在线| 欧美日韩在线一区二区| 精品国产伦一区二区三区观看方式| 久久精品免视看| 一区二区三区四区五区视频在线观看| 国产91精品一区二区麻豆网站| 精品国产制服丝袜高跟| 国内不卡的二区三区中文字幕| 精品国产在天天线2019| 久久91精品国产91久久小草| 在线欧美日韩国产| 亚洲精品乱码久久久久久久久| 日本伦理一区二区| 亚欧色一区w666天堂| 91精品国产一区二区人妖| 欧美激情资源网| 日韩电影一区二区三区| 日韩一级黄色大片| ...xxx性欧美| 精品亚洲国产成人av制服丝袜 | 国产在线播放一区二区三区| 99久久精品免费精品国产| 亚洲三级在线看| 国产剧情av麻豆香蕉精品| 欧美日韩一区二区三区高清| 日韩精品每日更新| 欧美在线一二三四区| 热久久国产精品| 色婷婷狠狠综合| 中文字幕制服丝袜成人av| 国内精品写真在线观看| 国产精品久久久久久久久久免费看| 成人av在线资源| 亚洲二区在线视频| 国产日产精品1区| 欧美性大战久久久久久久蜜臀 | 亚洲精品国产一区二区精华液 | 最近日韩中文字幕| 欧美夫妻性生活| 午夜天堂影视香蕉久久| 白白色亚洲国产精品| 亚洲影视资源网| 国产亚洲欧美日韩在线一区| 欧洲亚洲国产日韩| 国产一区二区三区四区在线观看 | 久久精品一二三| 在线看日本不卡| 国产一区二区三区在线看麻豆| 综合欧美一区二区三区| 日韩欧美久久一区| 麻豆精品视频在线观看免费| 日韩视频免费直播| 99精品视频中文字幕| 日本不卡视频一二三区| 中文字幕一区二区三区在线不卡| 91麻豆精品国产91久久久资源速度 | 欧美久久久久免费| www.日韩在线| 精品一区二区三区在线观看国产| ...av二区三区久久精品| 欧美成人a∨高清免费观看| 蜜桃视频在线一区| 一级特黄大欧美久久久| 国产网站一区二区三区| 8v天堂国产在线一区二区| www.爱久久.com| 国产精品99久久久久久久女警| 亚洲成人自拍偷拍| 亚洲精品五月天| 国产精品免费视频网站| 精品99999| 欧美一卡二卡在线| 欧美日韩国产美| 欧美性大战久久久| 色吧成人激情小说| 色综合欧美在线视频区| jiyouzz国产精品久久| 精品一区二区三区视频在线观看| 天堂蜜桃一区二区三区| 亚洲h动漫在线| 亚洲18色成人| 午夜精品福利一区二区蜜股av| 亚洲欧美国产毛片在线| 国产精品国产馆在线真实露脸| 久久噜噜亚洲综合| 欧美三级日韩三级| 91久久国产最好的精华液| 91色婷婷久久久久合中文| 偷拍一区二区三区四区| 亚洲专区一二三| 午夜免费久久看| 免费国产亚洲视频| 韩国视频一区二区| 国产老肥熟一区二区三区| 国产一区不卡在线| 成人av网站在线| aaa亚洲精品| 欧美三区在线视频| 欧美日韩三级视频| 337p亚洲精品色噜噜噜| 日韩一区二区三区免费看| 精品国产第一区二区三区观看体验| 精品美女一区二区三区| 国产日韩精品一区二区浪潮av| 国产精品电影院| 一区二区三区在线免费| 日韩av在线发布| 国内成人精品2018免费看| 高清av一区二区| 在线视频中文字幕一区二区| 欧美日韩在线综合| 精品久久久久久久久久久久久久久 | 91在线小视频| 91麻豆精品国产自产在线 | 日韩午夜av一区| 久久九九国产精品| 亚洲欧洲日产国码二区| 亚洲国产wwwccc36天堂| 国产一区在线观看视频| www.激情成人| 日韩视频免费观看高清在线视频| 欧美国产日韩一二三区| 午夜一区二区三区视频| 狠狠色丁香久久婷婷综| 色婷婷精品大在线视频| 精品国产乱子伦一区| 一区二区三区免费网站| 久久国产尿小便嘘嘘尿| 色综合久久综合| 久久在线免费观看| 2024国产精品| 亚洲一区二区三区三| 国产乱子伦视频一区二区三区| 欧美在线免费播放| 亚洲国产电影在线观看| 日本aⅴ精品一区二区三区| 91亚洲精品一区二区乱码| 337p亚洲精品色噜噜狠狠| 中文字幕亚洲区| 久久国产婷婷国产香蕉| 欧日韩精品视频| 国产精品蜜臀在线观看| 久久精品免费看| 欧美精品自拍偷拍| 亚洲欧洲精品一区二区三区| 极品少妇xxxx精品少妇| 制服丝袜成人动漫| 亚洲精品国产视频| a在线播放不卡| 久久婷婷成人综合色| 亚洲成人一区在线| 色综合久久88色综合天天| 国产嫩草影院久久久久| 蜜桃免费网站一区二区三区| 欧美性猛交xxxx黑人交| 综合久久久久久久| 成人夜色视频网站在线观看| 精品国产a毛片| 美女任你摸久久| 日韩一区二区三区四区| 亚洲va韩国va欧美va| 91福利精品视频| 亚洲丝袜精品丝袜在线| jlzzjlzz欧美大全| 中文字幕在线不卡视频| 国产91丝袜在线播放| 国产视频在线观看一区二区三区| 国产一区91精品张津瑜| 久久久噜噜噜久噜久久综合| 国产一区二区视频在线| 国产人久久人人人人爽| 成人黄色软件下载| 国产精品色呦呦|