1

私の 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) が、既に閉じたセッションを閉じようとするためだと思います。しかし、セッションを閉じないと、プール サイズの制限に達したという例外も発生します。どうすれば問題を回避できますか?

4

1 に答える 1

0

XA トランザクションで Jackrabbit を使用しているようです。

JBoss でも同様の問題がありましたが、EJB 用とは異なる非 XA データソースを使用して解決しました。詳細については、http: //jackrabbit.510166.n4.nabble.com/How-to-handle-XA-Transactions-td521875.htmlを参照してください。

于 2013-01-16T08:12:32.017 に答える