zoukankan      html  css  js  c++  java
  • 雷林鹏分享:EJB事务管理

      事务是一个单元的工作项目遵循ACID特性。ACID代表原子性,一致性,独立性和持久性。

      原子 -如果有任何的工作项失败,完整的单元被认为是失败。成功意味着所有项目的成功执行。

      一致性 -事务必须保持系统处于一致的状态。

      独立性- 每个事务执行独立的任何其他的事务。

      持久性 - 事务应该生存系统故障,如果已经执行或提交。

      EJB容器/服务器,的事务服务器和处理事务上下文的传递和分布式事务。事务可以由容器管理或bean的代码自定义代码处理。

      Container Managed Transactions - 在这种类型中,容器管理的事务状态。

      Bean Managed Transactions - 在这种类型中,开发者管理事务状态的生命周期。

      容器管理的事务

      指定EJB3.0,EJB容器实现的事务特性。

      REQUIRED - 表示业务方法已被执行的范围内的事务,否则将开始一个新的事务方法。

      REQUIRES_NEW - 表示要开始一个新的事务,业务方法。

      SUPPORTS - 表示业务方法将执行作为的事务的一部分。

      NOT_SUPPORTED - 表示业务方法不应该被执行作为的事务的一部分。

      MANDATORY - 表示业务方法将执行作为的事务的一部分,否则将引发异常。

      NEVER - 表示如果业务方法执行作为的事务的一部分,那么会抛出一个异常。

      例子

      package com.tutorialspoint.txn.required;

      import javax.ejb.*

      @Stateless

      @TransactionManagement(TransactionManagementType.CONTAINER)

      public class UserDetailBean implements UserDetailRemote {

      private UserDetail;

      @TransactionAttribute(TransactionAttributeType.REQUIRED)

      public void createUserDetail() {

      //create user details object

      }

      }

      createUserDetail()业务方法时,需要使用Required注解。

      package com.tutorialspoint.txn.required;

      import javax.ejb.*

      @Stateless

      public class UserSessionBean implements UserRemote {

      private User;

      @EJB

      private UserDetailRemote userDetail;

      public void createUser() {

      //create user

      //...

      //create user details

      userDetail.createUserDetail();

      }

      }

      为createUser()业务方法的使用createUserDetail()。如果为createUser(期间发生的异常)调用和用户对象不会创建那么UserDetail对象也不会被创建。

      Bean管理的事务

      Bean管理的事务,事务处理应用水平的异常,可以管理。以下是要考虑的关键点

      Start - 当启动一个事务中的业务方法。

      Sucess - 确定成功的情况下,当一个事务被提交。

      Failed - 确定失败的情况下,事务回滚。

      实例

      package com.tutorialspoint.txn.bmt;

      import javax.annotation.Resource;

      import javax.ejb.Stateless;

      import javax.ejb.TransactionManagement;

      import javax.ejb.TransactionManagementType;

      import javax.transaction.UserTransaction;

      @Stateless

      @TransactionManagement(value=TransactionManagementType.BEAN)

      public class AccountBean implements AccountBeanLocal {

      @Resource

      private UserTransaction userTransaction;

      public void transferFund(Account fromAccount, double fund ,

      Account toAccount) throws Exception{

      try{

      userTransaction.begin();

      confirmAccountDetail(fromAccount);

      withdrawAmount(fromAccount,fund);

      confirmAccountDetail(toAccount);

      depositAmount(toAccount,fund);

      userTransaction.commit();

      }catch (InvalidAccountException exception){

      userTransaction.rollback();

      }catch (InsufficientFundException exception){

      userTransaction.rollback();

      }catch (PaymentException exception){

      userTransaction.rollback();

      }

      }

      private void confirmAccountDetail(Account account)

      throws InvalidAccountException {

      }

      private void withdrawAmount() throws InsufficientFundException {

      }

      private void depositAmount() throws PaymentException{

      }

      }

      在这个例子中,我们使用UserTransaction接口标记开始使用userTransaction.begin()方法调用事务处理。我们标记事务完成使用userTransaction.commit()方法,如果期间发生任何异常,那么我们完整的事务回滚使用userTransaction.rollback()方法调用。(编辑:雷林鹏 来源:网络|侵删)

  • 相关阅读:
    gain 基尼系数
    luogu P5826 【模板】子序列自动机 主席树 vector 二分
    牛客挑战赛39 树与异或 离线 树上莫队 树状数组 约数
    4.22 省选模拟赛 三元组 manacher 回文自动机
    4.22 省选模拟赛 最优价值 网络流 最大权闭合子图
    4.18 省选模拟赛 消息传递 树剖 倍增 线段树维护等比数列
    luogu P4008 [NOI2003]文本编辑器 splay 块状链表
    牛客挑战赛39 密码系统 后缀数组
    luogu P1526 [NOI2003]智破连环阵 搜索+最大匹配+剪枝
    luogu P4095 [HEOI2013]Eden 的新背包问题 多重背包 背包的合并
  • 原文地址:https://www.cnblogs.com/pengpeng1208/p/13099344.html
Copyright © 2011-2022 走看看