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 回答