2012-01-09 13 views
6

Ho riscontrato questo tipo di errore durante l'esecuzione delle app. Succede occasionalmente quindi non so esattamente quale sia il codice nel mio errore. L'eccezione non dice dettagli chiari.Qual è la causa di questo errore java.lang.IllegalStateException: si sta tentando di restituire una connessione sconosciuta2?

Un pezzo di 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) 

C'è qualcuno che ha rilevato questo errore prima di aiutare per favore. Im utilizzando jboss 6, seam 2, jsf 2 e richfaces 3.

risposta

8

Questa risposta è JBoss wiki. Ecco una citazione di rilevanza:

Molti framework di persistenza (Hibernate2/OBJ) aprono e chiudono le connessioni "a caso". Per quanto riguarda JBoss, sembra che un ejb abbia allocato la connessione e un altro lo abbia chiuso. Il controllo di chiusura della connessione non comprende questo comportamento. Si aspetta lo stesso ejb che ha allocato la connessione per chiuderla.

Se si utilizza un modello o un framework di questo tipo, è possibile disattivare questo messaggio (vedere di seguito) ma si è da soli quando si tratta di rilevare perdite di connessione. Da 3.2.6 c'è un "listInUseConnections()" su CachedConnectionManager.

Tuttavia, c'è questo known issue con alcune semantiche di demarcazione delle transazioni. Questo non è proprio un uso di JBoss, più che i pattern di ThreadLocal bypassano la semantica J2EE.

Se si verifica il problema, la rimozione di CachedConnectionInterceptor dallo stack di intercettatore in conf/standardjboss.xml risolverà il messaggio spurio. In particolare con Hibernate2, questo è sicuro in quanto è possibile fidarsi della sospensione almeno per chiudere correttamente le connessioni purché le transazioni dell'utente siano corrette correttamente.

Per rimuovere CachedConnectionInterceptor, modificare conf/standardjboss.xml e rimuovere tutti i riferimenti all'intercettore. Questi saranno un aspetto simile:

<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 fornisce other mechanisms per gestire le sessioni (e collegamenti), e quindi è facile per evitare questo problema.

+0

Grazie mille. Questo è molto utile. :) –

+0

Prego. – BalusC

Problemi correlati