Соединение не связано с управляемым connection.org.jboss.resource.adapter.jdbc.jdk6.WrappedConnectionJDK6 - PullRequest
4 голосов
/ 07 декабря 2011

Я использую Hibernate на сервере JBoss.Я получаю сообщение об ошибке ниже.

Ошибка возникает, когда я пытаюсь подключиться к базе данных во второй раз в том же сеансе.

Также я получаю сообщение об ошибке «Закрытие соединения для вас. Пожалуйста,закрыть соединение ".

    14:28:37,869 ERROR [HibernateUtil] HibernateException  occurred in executeQuery  method   in  HibernateUtil class 
    org.hibernate.exception.GenericJDBCException: could not execute query
    at   org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:126)
    at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:114)
    at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
    at org.hibernate.loader.Loader.doList(Loader.java:2231)
    at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2125)
    at org.hibernate.loader.Loader.list(Loader.java:2120)
    at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:401)
    at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:361)
    at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:196)
    at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1148)
    at org.hibernate.impl.QueryImpl.list(QueryImpl.java:102)
    at com.a.amc.dao.utils.HibernateUtil.executeQuery(HibernateUtil.java:154)
    at com.a.amc.service.impl.CityServiceImpl.isCityExists(CityServiceImpl.java:142)
    at com.a.amc.service.impl.CityServiceImpl.addCity(CityServiceImpl.java:38)
    at com.a.amc.web.actions.CityAction.addCity(CityAction.java:50)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)

14:28:37,869 ERROR [JDBCTransaction] Could not toggle autocommit
java.sql.SQLException: Connection is not associated with a managed connection.org.jboss.resource.adapter.jdbc.jdk6.WrappedConnectionJDK6@1269ca1
    at org.jboss.resource.adapter.jdbc.WrappedConnection.lock(WrappedConnection.java:81)
    at org.jboss.resource.adapter.jdbc.WrappedConnection.setAutoCommit(WrappedConnection.java:454)
    at org.hibernate.transaction.JDBCTransaction.toggleAutoCommit(JDBCTransaction.java:228)
    at org.hibernate.transaction.JDBCTransaction.rollbackAndResetAutoCommit(JDBCTransaction.java:220)
    at org.hibernate.transaction.JDBCTransaction.rollback(JDBCTransaction.java:196)
    at com.a.amc.dao.utils.HibernateUtil.executeQuery(HibernateUtil.java:159)
    at com.a.amc.service.impl.CityServiceImpl.isCityExists(CityServiceImpl.java:142)
    at com.a.amc.service.impl.CityServiceImpl.addCity(CityServiceImpl.java:38)
    at com.a.amc.web.actions.CityAction.addCity(CityAction.java:50)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)

14:28:37,869 ERROR [JDBCTransaction] JDBC rollback failed
java.sql.SQLException: Connection is not associated with a managed connection.org.jboss.resource.adapter.jdbc.jdk6.WrappedConnectionJDK6@1269ca1
    at org.jboss.resource.adapter.jdbc.WrappedConnection.lock(WrappedConnection.java:81)
    at org.jboss.resource.adapter.jdbc.WrappedConnection.rollback(WrappedConnection.java:496)
    at org.hibernate.transaction.JDBCTransaction.rollbackAndResetAutoCommit(JDBCTransaction.java:217)
    at org.hibernate.transaction.JDBCTransaction.rollback(JDBCTransaction.java:196)
    at com.a.amc.dao.utils.HibernateUtil.executeQuery(HibernateUtil.java:159)
    at com.a.amc.service.impl.CityServiceImpl.isCityExists(CityServiceImpl.java:142)
    at com.a.amc.service.impl.CityServiceImpl.addCity(CityServiceImpl.java:38)
    at com.a.amc.web.actions.CityAction.addCity(CityAction.java:50)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)

14:28:37,869 ERROR [CityServiceImpl] Exception  occurred in isCityExists method in  CityServiceImpl
org.hibernate.TransactionException: JDBC rollback failed
    at org.hibernate.transaction.JDBCTransaction.rollback(JDBCTransaction.java:204)
    at com.a.amc.dao.utils.HibernateUtil.executeQuery(HibernateUtil.java:159)
    at com.a.amc.service.impl.CityServiceImpl.isCityExists(CityServiceImpl.java:142)
    at com.a.amc.service.impl.CityServiceImpl.addCity(CityServiceImpl.java:38)
    at com.a.amc.web.actions.CityAction.addCity(CityAction.java:50)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)

В чем может быть причина, и как мне решить эту ситуацию?

Ответы [ 3 ]

8 голосов
/ 09 июля 2012

Этот ответ может быть слишком поздно, так как вы спросили об этом год назад.но это поможет тем, кто столкнется с этой ошибкой в ​​будущем.

Ваша ошибка может быть из другого источника, но в моем случае все дело в тайм-ауте транзакции, некоторые запросы могут занять много времени, поэтому тайм-аутдосягаемость и гибернация создает исключение.В моем случае для тайм-аута транзакции было установлено гораздо более высокое значение.Что решает мою проблему.

Вот полезная ссылка. Транзакция не активна!

Понимание конфигурации внутреннего тайм-аута JDBC

-cheers

1 голос
/ 13 апреля 2017

Я также сталкивался с этой проблемой в настройке , совершенно не связанной с таймаутом транзакции.

В частности, в моем коде была следующая ошибка:

String SQL = "SELECT * FROM someTable WHERE id=1"; // no ? placholders !!
ps = conn.prepareStatement(SQL);
ps.setInt(1, id); // dude, there's no parameter #1
rs = ps.executeQuery();

… как вы можете видеть, код пытается установить параметр, даже если строка SQL не содержит ? заполнителей.Это вызвало ошибку и, по-видимому, перевело соединение в нерабочее состояние.Таким образом, в тот момент, когда мой код обработки исключений пытался commit установить соединение с простым conn.commit(), я получил бы следующую трассировку, которая очень похожа на вашу, даже если она совершенно не связана с таймаутами:

Caused by: java.sql.SQLException: Connection is not associated with a managed connection.org.jboss.jca.adapters.jdbc.jdk6.WrappedConnectionJDK6@17309c54
at org.jboss.jca.adapters.jdbc.WrappedConnection.lock(WrappedConnection.java:155)
at org.jboss.jca.adapters.jdbc.WrappedConnection.commit(WrappedConnection.java:750)

По общему признанию, код обработки исключений должен был попытаться вместо rollback установить соединение вместо commit, но это не связано с этой проблемой, и, несмотря на это, вы все равно увидите то же исключениехотя и с немного другой трассировкой:

Caused by: java.sql.SQLException: Connection is not associated with a managed connection.org.jboss.jca.adapters.jdbc.jdk6.WrappedConnectionJDK6@7303676e
at org.jboss.jca.adapters.jdbc.WrappedConnection.lock(WrappedConnection.java:155)
at org.jboss.jca.adapters.jdbc.WrappedConnection.rollback(WrappedConnection.java:771)
at org.apache.commons.dbutils.DbUtils.rollback(DbUtils.java:297) [commons-dbutils-1.6.jar:1.6]

Суть в том, что это исключение может также возникать при попытке сделать что-то с соединением, которое вошло в какое-то ошибочное / нестабильное состояние в результатепредыдущий SQLException.Это не должен быть тайм-аут.

0 голосов
/ 06 декабря 2017

Это может произойти при закрытии соединения и последующем его повторном использовании.

Представьте себе сценарий, в котором для вызова bean-компонента в начале соединение создается, а в самом конце соединение закрывается.Сама операция использует соединение для всех видов операций CRUD в базе данных.Где-то во время операции соединение закрывается и затем используется снова.

В псевдокоде:

try( Connection c = createConnection(); ) { // the very start
    doOperations( c );
}

Теперь предположим, что где-то в doOperations вы делаете что-то вроде:

void doOperations( Connection c ) {
    String sql = ""; // an actual SQL statement
    try( Connection c2 = c;
         PreparedStatement ps = c2.prepareStatement( sql ); ) {
        // ...
        ps.executeUpdate( );
    } // <<< the connection will be closed here

    String sql2 = ""; // an actual SQL statement
    try( PreparedStatement ps2 = c.prepareStatement( sql2 ); ) { // <<< exception thrown here, connection is already closed
        // ...
    }
}

Исключение:

java.sql.SQLException: Connection is not associated with a managed connection.org.jboss.jca.adapters.jdbc.jdk6.WrappedConnectionJDK6@2cc0951e
at org.jboss.jca.adapters.jdbc.WrappedConnection.lock(WrappedConnection.java:154)
at org.jboss.jca.adapters.jdbc.WrappedConnection.prepareStatement(WrappedConnection.java:394)

Итог: не закрывайте Connection и затем используйте его снова.

...