在我的 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)试图关闭我已经关闭的会话。但是当我不关闭任何会话时,我也会收到一个异常,它说已达到池大小限制。我怎样才能避免我的问题?