Mad*_*ist 7 transactionmanager spring-transactions ejb-3.0 spring-mybatis
TransactionManagementType.CONTAINER 和 TransactionManagementType.BEAN 有什么区别
因为我在我所有的 EJB 中使用 TransactionManagementType.CONTAINER 并且当使用多个数据库实例时,它会抛出一个错误,如果我将其更改为 TransactionManagementType.BEAN
我想知道如果我将其更改为 TransactionManagementType.BEAN 有什么优点和缺点以及如何影响它
ERROR:
Error updating database. Cause: java.sql.SQLException: javax.resource.ResourceException:
IJ000457: Unchecked throwable in managedConnectionReconnected() cl=org.jboss.jca.core.
connectionmanager.listener.TxConnectionListener@680f2be0[state=NORMAL managed
connection=org.jboss.jca.adapters.jdbc.local.LocalManagedConnection@7ba33a94 connection
handles=0 lastReturned=1495691675021 lastValidated=1495690817487
lastCheckedOut=1495691675018 trackByTx=false pool=org.jboss.jca.core.connectionmanager.
pool.strategy.OnePool@efd42c4 mcp=SemaphoreConcurrentLinkedQueueManagedConnectionPool
@71656eec[pool=FAQuery] xaResource=LocalXAResourceImpl@4c786e85
[connectionListener=680f2be0 connectionManager=5c3b98bc warned=false
currentXid=null productName=Oracle productVersion=Oracle Database 12c
Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options
jndiName=java:/FAQuery] txSync=null]
Run Code Online (Sandbox Code Playgroud)
事务管理类型.CONTAINER
您让容器本身管理事务(容器将提交和回滚)。您可以通过使用TransactionAttribute Types@TransactionManagementAttribute注释方法并指定其中一个属性来控制事务的行为(更准确地说是事务传播)。
事务管理类型.BEAN
您必须通过获取UserTransaction接口自己显式地进行事务划分(启动、提交、回滚)。
@Resource
UserTransaction ut;
public void method(){
ut.begin();
... // your business logic here
ut.commit(); // or ut.rollback();
}
Run Code Online (Sandbox Code Playgroud)
请注意,在退出声明无状态和消息驱动 Bean 事务的相同方法之前,必须提交和回滚,但有状态 Bean 则不需要。
关于你的问题,BMT的优点是事务的范围可以小于方法本身的范围,即对事务的显式控制。您很可能会使用 CMT,只有在某些狭窄的极端情况下才需要 BMT 来支持特定的业务逻辑。BMT 的另一个优点或用例是,如果您需要使用扩展持久性上下文类型,则可以通过状态会话 Bean 在 BMT 中支持该类型。
| 归档时间: |
|
| 查看次数: |
7566 次 |
| 最近记录: |