如何处理事务

来源:互联网 发布:unity3d发布到网页 编辑:程序博客网 时间:2024/05/24 01:01

EMP提供了很多的扩展途径,而在这些扩展中经常会存在着数据库的操作,这就要求开发人员对EMP的事务处理有一定的了解。
1、在业务操作单元(EMPAction)中通过配置方式处理事务
    EMPAction在EMP的架构体系中是对事务进行控制的最小单元,对于EMPAction的事务处理可通过实现相应接口并采用配置化的方式实现。当扩展的业务操作单元(EMPAction)需要对事务进行控制时,可以将相应的扩展类继承JDBCAction。然后在业务逻辑中设置该业务操作单元的trxType属性(TRX_REQUIRED表示全局事务,TRX_REQUIRE_NEW表示独有事务)。
    如果没有继承JDBCAction,那么也可以在扩展的业务操作单元(EMPAction)增加transactionType的setter和getter方法:
           public void setTransactionType(String value) {
                if ("TRX_REQUIRED".equals(value))
                        this.trxType = EMPTransactionDef.TRX_REQUIRED;
                else if ("TRX_REQUIRE_NEW".equals(value))
                        this.trxType = EMPTransactionDef.TRX_REQUIRE_NEW;
        }

         public EMPTransactionDef getTransactionDef() {

                return new EMPTransactionDef(trxType);
        }
2、在业务操作单元(EMPAction)中手工操作事务
    EMP除了支持通过手工的方式进行事务的配置以外,开发人员还可以在代码中直接调用相应的接口进行事务的处理
           EMPTransactionManager transactionManager = (EMPTransactionManager) context.getService(EMPConstance.TRX_SVC_NAME); //获得事务管理器
           EMPTransaction transaction = transactionManager.getTransaction(new EMPTransactionDef(EMPTransactionDef.TRX_REQUIRE_NEW));//启动新的事务,如果要获得全局的事务则使用EMPTransactionDef.TRX_REQUIRE
          try{
              //在取得事务之后,取数据库连接
                Connection connection = ConnectionManager.getConnection(dataSource);
              //数据库操作
               
                //如果操作结束需要提交事务,则调用下面代码
                transactionManager.commit(transaction);
           }catch(异常){
              //如果发生异常后,立刻回滚,则调用下面代码
              transactionManager.rollback();
                 //如果是全局事务,且希望操作全部结束后再回滚,则调用下面的代码
                 transactionManager.setRollBackOnly();
           }
3、其它扩展的接口中操作事务
     与EMPAction一样,开发人员可以在代码中直接调用相应的接口进行事务的处理(其中EMPService的层次比EMPAction低,是不能直接针对事务进行处理的),调用的方式与上述一致。手工的操作事务能够带来非常灵活的功能实现,但是推荐的方式还是通过调用业务逻辑构件的方式来实现

原创粉丝点击