java - 您如何确定 JDBC 连接是从启用 JTA 的数据源还是直接从 JDBC 中检索到的?

标签 java jdbc transactions jta

我正在使用供应商 API 获取与应用程序数据库的 JDBC 连接。 API 在应用程序服务器中运行时或在独立模式下运行时工作。我想在单个事务中运行一系列 SQL 语句。如果它们存在,我对它们出现在 JTA 事务的上下文中没有意见。但是,如果没有,那么我需要使用 JDBC 事务划分方法。 (在参与 JTA 事务的 JDBC 连接上调用这些方法会导致 SQLException。)

所以我需要能够确定连接是来自启用了 JTA 的数据源,还是只是一个直接的 JDBC 连接。

是否有直接的方法来做出此决定?

谢谢!

最佳答案

即使是直接的 JDBC,您也可以启用 JTA 事务。检查 autoCommit 标志在这方面无济于事。您可以在事务、分布式或其他事务中将 autoCommit 设置为 false。 autoCommit 设置为 true 会告诉您您不在分布式事务中,但 false 值仅意味着您不会自动提交...它可能在任何类型的事务中。

我认为您将不得不调用 UserTransaction.getStatus() 并验证它不等于 Status.NoTransaction()。这会告诉您是否处于 JTA 事务中。

关于java - 您如何确定 JDBC 连接是从启用 JTA 的数据源还是直接从 JDBC 中检索到的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/180713/

相关文章:

java - 尝试在 JDBC 中使用两个连接对象

jdbc - WebSphere 本地事务包含边界问题 J2CA0086W

sql-server - tsql 嵌套游标没有正确回滚继续

java - 从逗号分隔的字符串中删除尾随逗号

java - 简单的 jdbcTemplate.query() 应该返回一个列表,但不是

java - 如何将 Javadoc 目录添加到 Wordpress 站点

java - 优化 oracle jdbc 批量插入

MySQL:如何锁定表并启动事务?

java - 跨职能管理交易

java - 现有代码上的 NetBeans Gui Builder