本地交易需要使用transactionManager吗?
我阅读了transactionManager对于本地交易将无效。正确吗?
JTA是否同时提供CMT和BMT?
答案 0 :(得分:2)
关于BMT或CMT的本地或全局事务处理没有区别。
BMT和CMT仅定义如何定义事务的开始和结束。在CMT中,它是由带注释的方法的调用定义的;在BMT中,交易的开始和结束是使用UserTransaction-object定义的。
如果需要进行全局交易,或者更好的是进行分布式交易,那么Transactionmanager将独立于BMT或CMT进行安排。
一旦涉及一个以上的交易资源,就必须进行这些全局交易或两阶段提交。例如,如果您使用MessageDriven bean,它调用一个标注为“ Bean管理的事务处理”的bean,并在DBMS中进行更改。在这种情况下,将对消息队列和DBMS的资源进行两阶段提交。
因此,回答您的问题:
答案 1 :(得分:0)
以下是针对您的问题的几点说明。
全局事务支持可用于Web和企业bean J2EE组件,并且在某些限制下可用于应用程序客户端。 组件。
企业bean组件可以分为两类:使用容器管理的事务( CMT )的bean, 以及使用bean管理的交易的交易( BMT )。
local transaction containment (LTC)
用于定义
应用程序服务器在未指定事务上下文中的行为。
LTC是有界的工作单元范围,在该范围内,零,一或
可以访问更多的资源管理器本地事务(RMLT)。的
LTC定义了必须完成所有RMLT的边界;任何
根据政策,不完整的RMLT由解决
容器。 LTC对于bean实例是本地的;不共享
跨bean,即使这些bean由同一容器管理也是如此。
LTC由容器启动,然后在其上分派方法
J2EE组件(例如企业Bean或Servlet)每当
调度是在没有全局事务上下文的情况下发生的。 LTC
由容器完成,具体取决于
应用程序配置的LTC边界,例如,在
方法分派。 LTC没有编程接口
支持; LTC由容器专门管理,并且
由应用程序部署者通过事务配置
应用程序部署描述符中的属性。
本地交易包含不能与 全球交易。如果在 如果没有全球交易,则容器始终会建立一个 J2EE 1.3或更高版本的J2EE组件的LTC。
如果应用程序使用两个或更多资源,则需要外部事务管理器来协调对全局事务中所有资源管理器的更新。
了解更多信息。在交易经理上:https://access.redhat.com/documentation/en-US/Fuse_ESB_Enterprise/7.1/html/EIP_Transaction_Guide/files/TxnManagers-WhatIs.html
BMT企业bean,应用程序客户端组件和Web组件可以使用Java事务API(JTA)UserTransaction 定义全局事务划分的接口。至 获取UserTransaction接口,使用Java命名和 java:comp / UserTransaction的目录接口(JNDI)查找,或者 使用SessionContext对象中的getUserTransaction方法。
CMT 企业无法使用UserTransaction界面 如果CMT企业bean尝试获取此接口,则 根据Enterprise JavaBeans抛出异常 (EJB)规范。
Web组件或企业bean( CMT或BMT )可以获取
ExtendedJTATransaction
界面,通过
java:comp/websphere/ExtendedJTATransaction
。这个介面
提供对交易身份的访问以及一种机制
接收交易完成的通知。