Соединение JDBC для фонового потока, закрываемого доступа в Websphere - PullRequest
2 голосов
/ 15 апреля 2010

У меня есть приложение, работающее на Websphere Portal Server внутри Websphere Application Server 6.0 (WAS). В этом приложении для одной конкретной функции, выполнение которой занимает много времени, я запускаю новый поток, который выполняет это действие. Этот новый поток открывает новый сеанс из Hibernate и начинает выполнять с ним транзакции БД. Иногда (не удалось увидеть шаблон) транзакции внутри потока работают нормально, и процесс завершается успешно. В других случаях, однако, я получаю ошибки ниже:

org.hibernate.exception.GenericJDBCException: could not load an entity: [OBJECT NAME#218294]
...
Caused by: com.ibm.websphere.ce.cm.ObjectClosedException: DSRA9110E: Connection is closed.
Method cleanup failed while trying to execute method cleanup on ManagedConnection WSRdbManagedConnectionImpl@642aa0d8 from resource jdbc/MyJDBCDataSource. Caught exception: com.ibm.ws.exception.WsException: DSRA0080E: An exception was received by the Data Store Adapter. See original exception message: Cannot call 'cleanup' on a ManagedConnection while it is still in a transaction..

Как я могу остановить это? Почему кажется, что WAS хочет разорвать мои соединения, хотя они еще не закончили. Есть ли способ остановить WAS от попытки закрыть это конкретное соединение?

Спасибо

1 Ответ

5 голосов
/ 16 апреля 2010

Я упомянул две возможные причины в моем другом ответе : 1. необязательный параметр hibernate.connection.release_mode или 2. проблема с неуправляемыми потоками . Теперь, когда я прочитал этот вопрос, я действительно начинаю думать, что ваша проблема может быть связана с тем, что вы создаете свои собственные темы. Поскольку контейнер не управляется ими, соединения, используемые в этих шагах, могут выглядеть как «утечка» (не закрыта должным образом), и я не удивлюсь, если WAS попытается восстановить их в какой-то момент.

Если вы хотите запустить долгосрочное задание, вам следует использовать WorkManager. Не создавайте темы самостоятельно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...