想知道以下内容是否正确?
UserTransaction ut = getUserTransaction();
ut.begin();
conn = dataSource.getConnection();
conn.setAutoCommit(false);
stmt = conn.createStatement();
// perform statement query udpate here
// do i need to call conn.commit? or ut.commit will handle it implicitly?
ut.commit();我在我公司的一个项目中看到了代码片段,我对它进行了测试,发现了一些奇怪的行为,所以我不确定我们是否应该显式地调用conn.commit()?还是让ut.commit()处理所有事务在其内部?
所以它开始让我困惑,我们应该把什么放在UserTransaction.begin()和UserTransaction.commit()里面?由于它应该主要是SQL语句执行代码,那么是否有必要在块中包括conn = dataSource.getConnection();呢?那么,由特定connection生成的所有connection都会隐式地运行,就像我们使用AutoCommit(false)一样?如果我们在块之外声明那个(conn = dataSource.getConnection())会发生什么呢?交易处理仍然有效吗?
请大家分享一些关于UserTransaction如何工作的知识?我基本上知道如何使用它,但没有具体的想法,我应该注意什么,当我使用它。
发布于 2016-10-03 02:08:18
使用容器管理事务划分的企业bean不能使用任何干扰容器事务划分边界的事务管理方法。这些方法的例子是java.sql.Connection的commit、java.sql.Connection和rollback方法或javax.jms.Session的提交和回滚方法。如果需要对事务划分进行控制,则必须使用应用程序管理的事务划分。 使用容器管理事务划分的企业bean也不能使用javax.transaction.UserTransaction接口。
我读过这,我认为同时使用事务和autoCommit可能不是很好的主意。
https://stackoverflow.com/questions/32732685
复制相似问题