私の EJB では、JCR セッションを使用してファイルを保存します。次に、セッションからログアウトし、CDI イベントをスローします。CDI イベントを監視する EJB は、格納されたファイルを使用する新しい 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) が、既に閉じたセッションを閉じようとするためだと思います。しかし、セッションを閉じないと、プール サイズの制限に達したという例外も発生します。どうすれば問題を回避できますか?