Сеанс JCR, закрытый контейнером, вызывает двойную попытку закрытия сеанса

В моем EJB я использую сеанс JCR для хранения файла. Затем я выхожу из сеанса и выкидываю событие CDI. Затем EJB, который наблюдает за событием CDI, создает новый сеанс JCR, в котором он хочет использовать сохраненный файл. (Примечание: мне пришлось добавить задержку, чтобы заставить это работать, потому что по какой-то причине файл не был доступен непосредственно после его сохранения). После того, как метод завершен с использованием файла, я также завершаю сеанс. Однако через 15 минут я получаю исключение "Попытка закрыть session-a84d60ac-1c8f-4cad-bc5a-84102b12f8e5-385 после того, как он уже был закрыт". со стековой трассировкой:

Stack trace of the duplicate attempt to close session-c7bc3b30-9a5f-4922-bf80-8f197c583370-389 
 at org.apache.jackrabbit.core.session.SessionState.close(SessionState.java:280) ~[jackrabbit-core-2.4.2.jar:na] 
 at org.apache.jackrabbit.core.SessionImpl.logout(SessionImpl.java:943) [jackrabbit-core-2.4.2.jar:na] 
 at org.apache.jackrabbit.core.XASessionImpl.logout(XASessionImpl.java:392) [jackrabbit-core-2.4.2.jar:na] 
 at org.apache.jackrabbit.jca.JCAManagedConnection.cleanup(JCAManagedConnection.java:169) [jackrabbit-jca-2.4.2.jar:na] 
 at ...

и через 1 час:

Unclosed session detected. The session was opened here: java.lang.Exception: Stack Trace 
 at org.apache.jackrabbit.core.SessionImpl.<init>(SessionImpl.java:222) ~[jackrabbit-core-2.4.2.jar:na] 
 at org.apache.jackrabbit.core.SessionImpl.<init>(SessionImpl.java:239) ~[jackrabbit-core-2.4.2.jar:na] 
 at org.apache.jackrabbit.core.XASessionImpl.<init>(XASessionImpl.java:99) ~[jackrabbit-core-2.4.2.jar:na] 
 at ...

Я считаю, что это потому, что сервер приложений (Glassfish v.3.1.2.2) пытается закрыть сеанс, который я уже закрыл. Но когда я не закрываю сеансы, я также получаю исключение, в котором говорится, что достигнут предел размера пула. Как я могу избежать моей проблемы?

1 ответ

Похоже, вы используете Jackrabbit в транзакции XA.

У меня была похожая проблема с JBoss, которую я решил, используя источник данных, не относящийся к XA, отличный от источника данных для моих EJB. Смотрите для получения дополнительной информации: http://jackrabbit.510166.n4.nabble.com/How-to-handle-XA-Transactions-td521875.html

Другие вопросы по тегам