DataSource.getConnection() 和 DataSourceUtils.getConnection 的 UserTransaction
UserTransaction with DataSource.getConnection() and DataSourceUtils.getConnection
static void clean() throws Exception {
final UserTransaction tx = InitialContext.doLookup("UserTransaction");
tx.begin();
try {
final DataSource ds = InitialContext.doLookup(Databases.ADMIN);
Connection connection = ds.getConnection();//line 1
connection = ds.getConnection(); //line 2- call again for testing purpose
PreparedStatement st = connection.prepareStatement("xxxxxxx sql script");
st.executeUpdate();
st.close();
connection.close();
tx.commit();
} finally {
if (tx.getStatus() == Status.STATUS_ACTIVE) {
tx.rollback();
}
}
}
我正在尝试比较 DataSource.getConnection()
和 DataSourceUtils.getConnection(DataSource)
,根据 Javadoc,第一个总是获得新连接,第二个总是获得绑定到活动 UserTransaction
(在当前线程中)。
我看到上面的示例代码,我不明白为什么使用 DataSource.getConnection
的示例,根据我的理解,我们应该始终使用 DataSourceUtils.getConnection(DataSource)
而不是其他,因为我们想要在一个连接中提交整个脚本块,而不是拥有多个连接。 (如果我错了请纠正我)
我不明白为什么,所以我添加了一个重复的行来测试(第2行),谁能解释一下这个东西在没有第2行和有第2行的情况下如何在后台工作?有什么区别?
已编辑
根据 Javadoc,DataSource.getConnection()
甚至无法将连接附加到活动 Usertransaction
,UserTransaction
如何在内部设置连接的 autoCommit(false)
?
我有一个类似的问题,已在 中回答。
只要调用是在事务上下文中,并且我们使用 DataSource
来获取连接,它就足够聪明,总是 return 唯一的活动连接。我认为这与事务管理器和 DataSource
的实现有关,就我而言,这两者都是我通过 JNDI 从 Weblogic 获取的。
static void clean() throws Exception {
final UserTransaction tx = InitialContext.doLookup("UserTransaction");
tx.begin();
try {
final DataSource ds = InitialContext.doLookup(Databases.ADMIN);
Connection connection = ds.getConnection();//line 1
connection = ds.getConnection(); //line 2- call again for testing purpose
PreparedStatement st = connection.prepareStatement("xxxxxxx sql script");
st.executeUpdate();
st.close();
connection.close();
tx.commit();
} finally {
if (tx.getStatus() == Status.STATUS_ACTIVE) {
tx.rollback();
}
}
}
我正在尝试比较 DataSource.getConnection()
和 DataSourceUtils.getConnection(DataSource)
,根据 Javadoc,第一个总是获得新连接,第二个总是获得绑定到活动 UserTransaction
(在当前线程中)。
我看到上面的示例代码,我不明白为什么使用 DataSource.getConnection
的示例,根据我的理解,我们应该始终使用 DataSourceUtils.getConnection(DataSource)
而不是其他,因为我们想要在一个连接中提交整个脚本块,而不是拥有多个连接。 (如果我错了请纠正我)
我不明白为什么,所以我添加了一个重复的行来测试(第2行),谁能解释一下这个东西在没有第2行和有第2行的情况下如何在后台工作?有什么区别?
已编辑
根据 Javadoc,DataSource.getConnection()
甚至无法将连接附加到活动 Usertransaction
,UserTransaction
如何在内部设置连接的 autoCommit(false)
?
我有一个类似的问题,已在
只要调用是在事务上下文中,并且我们使用 DataSource
来获取连接,它就足够聪明,总是 return 唯一的活动连接。我认为这与事务管理器和 DataSource
的实现有关,就我而言,这两者都是我通过 JNDI 从 Weblogic 获取的。