2012-01-09 3 views
6

Я сталкиваюсь с такой ошибкой при работе с приложениями. Это случается изредка, поэтому я не знаю, что именно в моем коде возникла эта ошибка. Исключение не содержит четких сведений.В чем причина этой ошибки java.lang.IllegalStateException: пытается вернуть неизвестное соединение2?

Часть стоп-кадра.

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) 

Есть ли кто-нибудь, кто столкнулся с этой ошибкой, прежде чем помочь. Im, использующий jboss 6, шов 2, jsf 2 и богатые поверхности 3.

ответ

8

Ответ получен в JBoss wiki. Вот цитата, релевантная:

Множество систем сохранения (Hibernate2/OBJ) открытые и закрытые соединения «наугад». Что касается JBoss, это похоже на то, что один ejb назначил соединение, а другой закрыл его. Проверка закрытия соединения не понимает этого поведения. Он ожидает, что тот же ejb, который выделил соединение, также закроет его.

Если вы используете такой шаблон или такую ​​структуру, вы можете отключить это сообщение (см. Ниже), но вы сами по себе, когда дело доходит до обнаружения утечек соединений. Из 3.2.6 на «CachedConnectionManager» есть «listInUseConnections()».

Однако есть known issue с семантикой демаркации транзакций. На самом деле это не использование JBoss, более того, шаблоны ThreadLocal обходят семантику J2EE.

Если вы столкнулись с проблемой, удаление CachedConnectionInterceptor из стека перехватчика в conf/standardjboss.xml обойдется ложным сообщением. В частности, с Hibernate2 это safe, так как вы можете доверять спящему действию, по крайней мере, для надлежащего закрытия соединений, если вы правильно выполняете транзакции пользователя.

Чтобы удалить 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> 
    <container-interceptors> 
    ... 
    <interceptor>org.jboss.resource.connectionmanager.CachedConnectionInterceptor</interceptor> 

Hibernate3 обеспечивает other mechanisms для управления сеансами (и подключение) и, таким образом, легко избежать этой проблемы.

+0

спасибо. Это очень полезно. :) –

+0

Добро пожаловать. – BalusC

Смежные вопросы