结合使用 AutoCommit 和 UserTransaction
Use AutoCommit with UserTransaction together
想知道以下是否正确?
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
生成的所有 statement
都会隐含地表现得像我们使用 AutoCommit(false)
一样?如果我们在块外声明 that (conn = dataSource.getConnection()
) 会发生什么?事务处理是否仍然有效?
有人可以分享一些有关 UserTransaction
工作原理的知识吗?基本知道怎么用了,但是不知道具体使用的时候需要注意什么
Enterprise beans that use container-managed transaction demarcation
must not use any transaction-management methods that interfere with
the container’s transaction demarcation boundaries. Examples of such
methods are the commit, setAutoCommit, and rollback methods of
java.sql.Connection or the commit and rollback methods of
javax.jms.Session. If you require control over the transaction
demarcation, you must use application-managed transaction demarcation.
Enterprise beans that use container-managed transaction demarcation
also must not use the javax.transaction.UserTransaction interface.
我读过 this ,我认为同时使用 Transaction 和 autoCommit
可能不是一个好主意。
想知道以下是否正确?
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
生成的所有 statement
都会隐含地表现得像我们使用 AutoCommit(false)
一样?如果我们在块外声明 that (conn = dataSource.getConnection()
) 会发生什么?事务处理是否仍然有效?
有人可以分享一些有关 UserTransaction
工作原理的知识吗?基本知道怎么用了,但是不知道具体使用的时候需要注意什么
Enterprise beans that use container-managed transaction demarcation must not use any transaction-management methods that interfere with the container’s transaction demarcation boundaries. Examples of such methods are the commit, setAutoCommit, and rollback methods of java.sql.Connection or the commit and rollback methods of javax.jms.Session. If you require control over the transaction demarcation, you must use application-managed transaction demarcation.
Enterprise beans that use container-managed transaction demarcation also must not use the javax.transaction.UserTransaction interface.
我读过 this ,我认为同时使用 Transaction 和 autoCommit
可能不是一个好主意。