在我的EJB中,我使用JCR會話來存儲文件。然後我退出會議併發起CDI事件。觀察CDI事件的EJB然後創建一個新的JCR會話,並在其中使用存儲的文件。 (注意:我必須添加一個延遲才能使其工作,因爲出於某種原因該文件在存儲後不能直接使用)。在使用該文件完成該方法之後,我也註銷該會話。然而在15分鐘後,我得到了一個例外:「在關閉之後試圖關閉session-a84d60ac-1c8f-4cad-bc5a-84102b12f8e5-385」。與堆棧跟蹤:由容器關閉的JCR會話導致重複嘗試關閉會話
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)試圖關閉我已經關閉了會議。但是,當我不關閉任何會話時,我也會遇到異常,說明已達到池大小限制。我怎樣才能避免我的問題?
您是否嘗試跨線程使用會話?你是否將會話傳遞給其他方法,這些方法也試圖關閉它?可能值得仔細檢查你的代碼,以確保不會發生。此外,「我不得不延遲」,這是一個非常糟糕的代碼味道。解決問題,而不是症狀。 – TedTrippin