TCM*_*TCM 30 java jpa jta java-ee
谁能解释一下有什么区别:
@Resource
UserTransaction objUserTransaction;
Run Code Online (Sandbox Code Playgroud)
和
EntityManager.getTransaction();
Run Code Online (Sandbox Code Playgroud)
什么是容器管理交易?如果我想在事务中的表中插入三行,我应该如何在会话外观中执行此操作.
ewe*_*nli 27
EJB是事务组件.事务可以由应用程序服务器本身(CMT - 容器管理的事务)管理,也可以由EJB中自己手动管理(BMT - bean管理的事务).
EJB通过JTA规范支持分布式事务.分布式事务来控制使用UserTransaction
,其具有的方法begin
,commit
,rollback
.
使用CMT,应用程序服务器为您启动,提交和回滚事务(根据事务注释),并且不允许您进行干预.这意味着UserTransaction
在这种情况下您不能访问.但是,使用BMT,您可以手动执行此操作,并使用自己控制事务UserTransaction
.
我们现在开始吧EntityManager
.JPA实现可以在应用程序服务器中使用,也可以单独使用.如果在独立使用,则需要使用EntityManage.getTransaction
自己划分JDBC事务.如果在应用程序服务器中使用,EntityManager
则为您透明地与JTA分布式事务管理器协作.
大多数情况下,您@Required
在EJB上使用带有注释的CMT .这意味着您既不需要UserTransaction
也不需要访问EntityManager.getTransaction
.该应用程序.服务器启动并提交事务,但如果引发异常,也会小心回滚.这就是我建议您的外观.
(还有更多的细微之处,如PersistenceContextType
或与分布式事务的实体管理器的手动入伍EntityManager.joinTransaction
,但如果你使用的技术在不同的方式为默认,这只是).
UserTransaction
指JTA交易实体.只有在应用程序服务器中有可用的JTA模块时才能使用它:例如,如果在Tomcat上部署应用程序(默认情况下不支持JTA),依赖于此的代码将失败.这是EJB和MDB中使用的默认事务类型.
EntityManager.getTransaction()
检索本地事务实体.这有时也称为资源本地事务.
资源本地事务与JTA事务非常不同:除其他外,资源本地事务特定于资源,而JTA事务往往特定于特定线程.
有关资源本地和JTA事务之间差异的更多信息,请参阅此stackoverflow答案:JTA和本地事务之间有什么区别?
归档时间: |
|
查看次数: |
27188 次 |
最近记录: |