我在运行我的应用程序时遇到了此类错误。它偶尔会发生,所以我不知道此错误产生于我的代码中的确切原因。该异常不会告诉任何明确的细节。
一段堆栈跟踪。
java.lang.IllegalStateException: Trying to return an unknown connection2! org.jboss.resource.adapter.jdbc.jdk6.WrappedConnectionJDK6@c74ff1 at org.jboss.resource.connectionmanager.CachedConnectionManager.unregisterConnection(CachedConnectionManager.java:330) at org.jboss.resource.connectionmanager.TxConnectionManager$TxConnectionEventListener.connectionClosed(TxConnectionManager.java:720) at org.jboss.resource.adapter.jdbc.BaseWrapperManagedConnection.closeHandle(BaseWrapperManagedConnection.java:362) at org.jboss.resource.adapter.jdbc.WrappedConnection.close(WrappedConnection.java:155) at org.hibernate.connection.DatasourceConnectionProvider.closeConnection(DatasourceConnectionProvider.java:97)
请问有人帮助过这个错误吗?我正在使用jboss 6,seam 2,jsf 2和richfaces 3。
在JBoss Wiki中对此进行了回答。这里是相关的:
许多持久性框架(Hibernate2 / OBJ)“随机”打开和关闭连接。就JBoss而言,似乎一个ejb分配了连接,而另一个ejb则关闭了该连接。连接关闭检查不了解此行为。它期望分配连接的同一ejb也将其关闭。 如果您使用这种模式或框架,则可以关闭此消息(请参阅下文),但是在检测连接泄漏时您将自己决定。从3.2.6开始,在CachedConnectionManager上有一个“ listInUseConnections()” 。 但是,此已知问题与某些事务划分语义有关。这实际上不是JBoss的用途,更多的是ThreadLocal模式绕过J2EE语义。 如果确实遇到问题,则从conf / standardjboss.xml中的拦截器堆栈中删除CachedConnectionInterceptor可以解决伪造的消息。特别是对于Hibernate2,这是 安全的, 因为只要您正确地进行了最终用户事务,您就可以至少信任hibernate来正确关闭连接。 要删除CachedConnectionInterceptor,请编辑conf / standardjboss.xml并删除对拦截器的所有引用。这些看起来像: <container-configuration> <container-name>Standard Stateless SessionBean</container-name> <call-logging>false</call-logging> <invoker-proxy-binding-name>stateless-http-invoker</invoker-proxy- binding-name> … org.jboss.resource.connectionmanager.CachedConnectionInterceptor Hibernate3提供了其他机制来管理会话(和连接),因此很容易避免此问题。
许多持久性框架(Hibernate2 / OBJ)“随机”打开和关闭连接。就JBoss而言,似乎一个ejb分配了连接,而另一个ejb则关闭了该连接。连接关闭检查不了解此行为。它期望分配连接的同一ejb也将其关闭。
如果您使用这种模式或框架,则可以关闭此消息(请参阅下文),但是在检测连接泄漏时您将自己决定。从3.2.6开始,在CachedConnectionManager上有一个“ listInUseConnections()” 。
但是,此已知问题与某些事务划分语义有关。这实际上不是JBoss的用途,更多的是ThreadLocal模式绕过J2EE语义。
如果确实遇到问题,则从conf / standardjboss.xml中的拦截器堆栈中删除CachedConnectionInterceptor可以解决伪造的消息。特别是对于Hibernate2,这是 安全的, 因为只要您正确地进行了最终用户事务,您就可以至少信任hibernate来正确关闭连接。
要删除CachedConnectionInterceptor,请编辑conf / standardjboss.xml并删除对拦截器的所有引用。这些看起来像:
<container-configuration> <container-name>Standard Stateless SessionBean</container-name> <call-logging>false</call-logging> <invoker-proxy-binding-name>stateless-http-invoker</invoker-proxy-
binding-name> …
org.jboss.resource.connectionmanager.CachedConnectionInterceptor
Hibernate3提供了其他机制来管理会话(和连接),因此很容易避免此问题。