【问题标题】:Getting internal Oracle connection from Hibernate in JBoss在 JBoss 中从 Hibernate 获取内部 Oracle 连接
【发布时间】:2018-10-21 22:23:59
【问题描述】:
我需要通过 Hibernate 设置应用程序上下文。我发现oracle.jdbc.internal.OracleConnection 上有一个方法setApplicationContext。我编写了一个测试,在其中我从 Hibernate 会话中获取了 Oracle 连接,它运行良好。但是,当我将代码移动到在 JBoss 下运行的应用程序中,从池中获取连接时,该解决方案将不起作用。错误是:
$Proxy51 无法转换为 oracle.jdbc.internal.OracleConnection。
- 如何在那种环境下获得内部连接?
- 有没有更好的方法通过 Hibernate 设置应用程序上下文(文档没有说明)。
【问题讨论】:
标签:
oracle
hibernate
connection
【解决方案1】:
你是对的,休眠给你的是代理连接,而不是实际的连接。因此,如果您尝试在代理连接上设置应用程序上下文,那么它将给您类案例异常。但是你可以使用下面的 sn-p 来达到同样的效果。
oracle.jdbc.driver.OracleConnection nativeOraConn = null;
oracle.jdbc.OracleConnection connection = null;
try {
java.sql.Connection connect = org.hibernate.jdbc.BorrowedConnectionProxy.getWrappedConnection(conn);
connection = (oracle.jdbc.OracleConnection)connect;
connection = connection.physicalConnectionWithin();
nativeOraConn= (oracle.jdbc.driver.OracleConnection)connection;
nativeOraConn.setApplicationContext("context", "context", valueToSet);
} catch (Exception e) {
e.printStackTrace();
}
我认为这应该可行。