现在的位置: 首页 > 综合 > 正文

Spring编程式事务

2014年12月10日 ⁄ 综合 ⁄ 共 2615字 ⁄ 字号 评论关闭

一、使用PlatformTransactionManager

    <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">

        <property name="sessionFactory">

            <ref bean="sessionFactory"/>

        </property>

    </bean>

    <bean id="txDefinition" class="org.springframework.transaction.support.DefaultTransactionDefinition">

        <property name="propagationBehaviorName" value="PROPAGATION_REQUIRED"></property>

    </bean>

 

public class TempService {

    private UserDAO userDAO;

    private DeptDAO deptDAO;

    private TransactionDefinition txDefinition;

    private PlatformTransactionManager txManager;

   

    public void setUserDAO(UserDAO userDAO) {

       this.userDAO = userDAO;

    }

    public void setDeptDAO(DeptDAO deptDAO) {

       this.deptDAO = deptDAO;

    }

   

    public void setTxDefinition(TransactionDefinition txDefinition) {

       this.txDefinition = txDefinition;

    }

    public void setTxManager(PlatformTransactionManager txManager) {

       this.txManager = txManager;

    }

    public void addTemp(){

       TransactionStatus status = txManager.getTransaction(txDefinition);//

       try {

           User user = new User();

           Dept dept = new Dept();

           user.setRemark("USER REMARK");

           dept.setRemark("DEPT REMARK");

           userDAO.save(user);

           deptDAO.save(dept);

           txManager.commit(status);//提交事務

       } catch (Exception e) {

           txManager.rollback(status);

           e.printStackTrace();

       }

    }

}

 

二、使用TransactionTemplate

    <bean id="txTemplate" class="org.springframework.transaction.support.TransactionTemplate">

        <property name="transactionManager" ref="transactionManager"></property>

        <property name="propagationBehaviorName" value="PROPAGATION_REQUIRED"></property>

    </bean>

 

public class Temp1Service {

    private UserDAO userDAO;

    private DeptDAO deptDAO;

    TransactionTemplate txTemplate;

    public void setUserDAO(UserDAO userDAO) {

       this.userDAO = userDAO;

    }

    public void setDeptDAO(DeptDAO deptDAO) {

       this.deptDAO = deptDAO;

    }

    public void setTxTemplate(TransactionTemplate txTemplate) {

       this.txTemplate = txTemplate;

    }

    public void addTemp(){

       txTemplate.execute(new TransactionCallback(){

           public Object doInTransaction(TransactionStatus status){

              try {

                  User user = new User();

                  Dept dept = new Dept();

                  user.setRemark("USER REMARK");

                  dept.setRemark("DEPT REMARK");

                  userDAO.save(user);

                  deptDAO.save(dept);

              } catch (Exception e) {

                  status.setRollbackOnly();//

                  e.printStackTrace();

                  return false;

              }

              return true;

           }

       });

    }

}

抱歉!评论已关闭.