2012-01-09 16 views
6

Me encuentro con este tipo de error al ejecutar mis aplicaciones. Ocurre ocasionalmente así que no sé exactamente en qué código se origina este error. La excepción no indica ningún detalle claro.¿Cuál es la causa de este error java.lang.IllegalStateException: tratando de devolver una conexión desconocida2?

Una pieza de stacktrace.

java.lang.IllegalStateException: Trying to return an unknown connection2! [email protected]1 
    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) 

¿Hay alguien que haya cifrado este error antes por favor ayuda. Im utilizando jboss 6, costura 2, jsf 2 y richfaces 3.

Respuesta

8

Esto se responde en el JBoss wiki. Aquí hay una cita de relevancia:

Muchos marcos de persistencia (Hibernate2/OBJ) abren y cierran conexiones "al azar". En lo que respecta a JBoss, parece que un ejb asignó la conexión y otro la cerró. La comprobación de cierre de conexión no comprende este comportamiento. Espera que el mismo ejb que asignó la conexión también lo cierre.

Si utiliza un patrón o un marco de este tipo, puede desactivar este mensaje (consulte a continuación) pero está solo cuando se trata de detectar fugas de conexión. Desde 3.2.6 hay una "listInUseConnections()" en el CachedConnectionManager.

Sin embargo, existe este known issue con semántica de demarcación de transacciones. Esto no es realmente un uso de JBoss, más que los patrones de ThreadLocal eluden la semántica de J2EE.

Si llega al problema, la eliminación del Interceptor CachedConnection de la pila del interceptor en conf/standardjboss.xml solucionará el mensaje espurio. En particular con Hibernate2, este es seguro ya que puede confiar en hibernar al menos para cerrar conexiones correctamente siempre que las transacciones del usuario final sean correctas.

Para eliminar el Interceptor CachedConnection, edite conf/standardjboss.xml y elimine todas las referencias al interceptor. Estos se verá algo como:

<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> 
    <container-interceptors> 
    ... 
    <interceptor>org.jboss.resource.connectionmanager.CachedConnectionInterceptor</interceptor> 

Hibernate3 ofrece other mechanisms para gestionar sesiones (y conexiones) y por lo tanto es fácil de evitar este problema.

+0

Muchas gracias. Esto es muy útil. :) –

+0

De nada. – BalusC

Cuestiones relacionadas