OSWORKFLOW+JDBC事务处理

学习OSWORKFLOW(2.8)有一段时间,感觉就是个半成品,说明文档之类实在是太少了,只能靠自己一点点摸索,经过几天的研究终于有点头绪。

默认的 BasicWorkflow 类并不支持事务,而在OSWORKFLOW(2.8)中JDBC方式对数据的操作都是通过类 JDBCWorkflowStore 实现的,于是想要与现有系统结合做事务处理,就要在  JDBCWorkflowStore 类上做文章了。思路很简单,只要在 JDBCWorkflowStore 中建立一个 Connection 变量,添加一个 set方法,修改原来的 get 方法,最后就是屏蔽掉cleanup 函数中的内容,因为 cleanup 是关闭数据库连接的,如果不屏蔽则无法进行回滚了。JDBCWorkflowStore 修改具体代码如下:

//添加Connection变量
private static Connection connect = null; 

………………

protected Connection getConnection() throws SQLException { //protected
        closeConnWhenDone = true;
//System.out.println("test6=============="+connect);
        return connect;
    }
 //新增链接设置函数   
    public void setConnection(Connection mConnect) throws SQLException { //protected
        connect=mConnect;
    }


而实际系统中需要进行事务处理的位置需要将Connection传给JDBCWorkflowStore中的Connection变量,就实现JDBC的事务处理了。调用代码如下,其中的sqlhelper为我自己建立的类,sqlconnection也是自己封装的数据库链接类,实际应用中可以用JDBC 的 Connection代替

public List AddWorkFlow(DBObject bo) throws Exception {        
        List mList = new ArrayList();
        
        SqlConnection con = new SqlConnection(DBName);
        con.beginTrance();
        com.opensymphony.workflow.spi.jdbc.JDBCWorkflowStore mJDBC=new com.opensymphony.workflow.spi.jdbc.JDBCWorkflowStore();
        mJDBC.setConnection(con.getConnection());      
        try {
            //con.setAutoCommit(false);// 更改JDBC事务的默认提交方式
//System.out.println("41=============" + curUser.getLoginName());
            Workflow wf = new BasicWorkflow(curUser.getLoginName());
            long id = wf.initialize("example", 100, null);
            //测试事务
//            String sql = "INSERT INTO SYS_CONTRIL(ID,CTRLNAME,CTRLCONTENT) VALUES(?,?,?) ";
//            PreparedStatement ps = con.prepareStatement(sql);
//            ps.setInt(1, 2);
//            ps.setString(2, "AA");
//            ps.setString(3, "AA");
//            ps.executeUpdate();
            com.apps.SysManage.DAO.SYS_CONTRILDAO mDAO= new com.apps.SysManage.DAO.SYS_CONTRILDAO(con);
            DBObject mbo=new DBObject();
            mbo.set("CTRLNAME", "aa");
            mbo.set("CTRLCONTENT", "aa");
            String mID =mDAO.add(mbo, "ID");
            
            
System.out.println("4=============" + id+"==========="+mID);

            if(1==1){
                throw new Exception("cc============");
            }
            
            con.commitTrance();
            return mList;
        } catch (Exception e) {
            con.rollTrance();
            throw new Exception(e.getMessage());
        } finally {
            mList = null;
            con.close();
        }
    }


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值