Отладка транзакций с помощью Glassfish 2.1 - PullRequest
2 голосов
/ 21 июля 2010

Иногда я получаю следующее исключение при запуске приложения Java EE со Glassfish:

Error in allocating a connection. Cause: java.lang.IllegalStateException: 
Local transaction already has 1 non-XA Resource: cannot add more resources.

Приложение использует один пул соединений JDBC, который не поддерживает XA.Однако я еще не смог определить второй ресурс, который вызывает исключение.

Есть ли способ отладки / записи транзакций в Glassfish 2.1?

Что-тоэто помогло бы мне идентифицировать нарушающий не-XA ресурс, очень помогло бы.

1 Ответ

1 голос
/ 22 июля 2010

Вы можете включить ведение журнала JTA / JTS на уровне журнала консоли администратора, а также на других уровнях журнала (я точно не помню, какие из них доступны).Однако полученная отладочная информация довольно загадочна.

Но ваша проблема довольно странная.Ресурс XA может быть соединением с базой данных, соединением jms или соединением от соединителей jca.Если у вас есть только один источник данных, это будет означать, что вы пытаетесь получить два соединения для одного и того же источника данных в течение одной транзакции.Обычно сервер приложений оптимизирует этот случай и дважды обслуживает одно и то же физическое соединение, когда вы пытаетесь получить его из источника данных - но, возможно, эта оптимизация не выполняется в вашем случае.

Так что на вашем месте я бы попытался включить ведение журнала, который показывает, когда получено соединение, и попытаться определить в коде также все потенциальные места, где соединение может быть извлечено из пула либо непосредственно с помощью поиска.или косвенно путем внедрения или через среду (например, JPA).

В качестве крайней меры вы можете также попытаться включить «Разрешить некомпонентные вызовы» в конфигурации источника данных, возможно, это поможет.

Это также напомнило мне об этом другом вопросе: «Локальная транзакция уже имеет 1 ресурс, не относящийся к XA: ошибка не может добавить больше ресурсов».

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