Я также сталкивался с этой проблемой в настройке , совершенно не связанной с таймаутом транзакции.
В частности, в моем коде была следующая ошибка:
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.Это не должен быть тайм-аут.