在我的EJB中,我使用JCR会话来存储文件。然后我注销会话并抛出一个CDI事件。观察CDI事件的EJB然后创建一个新的JCR会话,在该会话中它想要使用存储的文件。 (注意:我必须添加延迟才能使其工作,因为由于某种原因,文件在存储后无法直接使用)。使用该文件完成该方法后,我也会注销该会话。然而,在15分钟后,我得到了例外情况“在已经关闭后尝试关闭会话-a84d60ac-1c8f-4cad-bc5a-84102b12f8e5-385”。使用stacktrace:
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)尝试关闭我已经关闭的会话。但是当我不关闭任何会话时,我也会得到一个异常,它表示达到了池大小限制。我该如何避免我的问题?
答案 0 :(得分:0)
看起来你在XA交易中使用了Jackrabbit。
我遇到了与JBoss类似的问题,我通过使用与我的EJB不同的非XA数据源解决了这个问题。 寻找更多信息: http://jackrabbit.510166.n4.nabble.com/How-to-handle-XA-Transactions-td521875.html