Java 有没有办法确定连接是否被管理?

Java 有没有办法确定连接是否被管理?,java,jdbc,transactions,jakarta-ee,connection,Java,Jdbc,Transactions,Jakarta Ee,Connection,我有一些在EJB中使用的遗留JDBC代码,在这段代码中调用了setAutocommit()(出于可以理解的原因,托管事务不允许这样做) 如果代码在托管事务中使用,我想跳过此方法调用,但如果在非托管上下文中使用,则让调用保持不变 是否有一种标准化的方法来检测JDBC连接对象是否被“管理” 一个有点体面的事务管理器可以setAutoCommit(false)和setTransactionIsolation(Connection.transaction\u XXX) 根据所使用的JDBC驱动程序和事务

我有一些在EJB中使用的遗留JDBC代码,在这段代码中调用了setAutocommit()(出于可以理解的原因,托管事务不允许这样做)

如果代码在托管事务中使用,我想跳过此方法调用,但如果在非托管上下文中使用,则让调用保持不变


是否有一种标准化的方法来检测JDBC连接对象是否被“管理”

一个有点体面的事务管理器可以
setAutoCommit(false)
setTransactionIsolation(Connection.transaction\u XXX)


根据所使用的JDBC驱动程序和事务管理器,您可能会幸运地使用和/或。通过测试在这两种情况下使用了哪些值来确定,以便您可以了解如何区分它们。

对我来说,检查自动提交和事务隔离是不够的,因为它们被设置为相同的值(
false
Connection.transaction\u READ\u COMMITTED
),当连接由Hibernate直接(独立)提供时,以及在JEE容器内运行时(托管事务)

由于没有找到任何其他属性,我最终使用了以下代码,检查连接类型是否为
org.jboss.jca.adapters.jdbc.jdk7.WrappedConnectionJDK7
(或类似)

if(!conn.getAutoCommit()){
如果(!conn.getClass().getName().startsWith(“org.jboss.jca”)){
conn.commit();
}
}

我对这个解决方案不满意,所以如果有人有更好的想法,请告诉我

好建议!我最终决定完全跳过setAutoCommit,因为我意识到我的代码目前实际上只在容器中使用,希望很快就会被完全弃用,但是你的建议似乎是一个很好的解决方案,我需要这样做。