EJB에서 JCR 세션을 사용하여 파일을 저장합니다. 그런 다음 세션을 로그 아웃하고 CDI 이벤트를 발생시킵니다. 그런 다음 CDI 이벤트를 관찰하는 EJB는 저장된 파일을 사용하려는 새로운 JCR 세션을 작성합니다. (참고 : 파일을 저장 한 직후에 어떤 이유로 파일을 사용할 수 없었기 때문에이 기능을 사용하려면 지연을 추가해야했습니다. 메서드를 파일을 사용하여 수행 한 후에도이 세션을 로그 아웃합니다. 그러나 15 분 후에 "세션을 닫으려고 할 때 - 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 ...
나는 응용 프로그램 서버 (글래스 피시의 v.3.1.2.2)는 이미 폐쇄 세션을 종료하려고하기 때문입니다 생각합니다. 그러나 어떤 세션도 닫지 않으면 풀 크기 한계에 도달했다는 예외가 발생합니다. 문제를 어떻게 피할 수 있습니까?
스레드간에 세션을 사용하려고합니까? 세션을 닫으려고하는 다른 방법으로 세션을 전달하고 있습니까? 코드를 두 번 확인하는 것만으로도 그 일이 일어나지 않도록 할 가치가 있습니다. 또한 "지연을 추가해야했습니다."라는 코드는 정말 나쁜 코드입니다. 증상이 아니라 문제를 해결하십시오. – TedTrippin