2013-01-15 6 views
1

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)는 이미 폐쇄 세션을 종료하려고하기 때문입니다 생각합니다. 그러나 어떤 세션도 닫지 않으면 풀 크기 한계에 도달했다는 예외가 발생합니다. 문제를 어떻게 피할 수 있습니까?

+0

스레드간에 세션을 사용하려고합니까? 세션을 닫으려고하는 다른 방법으로 세션을 전달하고 있습니까? 코드를 두 번 확인하는 것만으로도 그 일이 일어나지 않도록 할 가치가 있습니다. 또한 "지연을 추가해야했습니다."라는 코드는 정말 나쁜 코드입니다. 증상이 아니라 문제를 해결하십시오. – TedTrippin

답변

0

XA 트랜잭션에서 Jackrabbit을 사용하는 것 같습니다.

나는 JBoss와 비슷한 문제가 있는데, JBoss와 비슷한 문제점이 있습니다. JBoss와 다른 문제는 내 EJB와는 다른 XA 데이터 소스를 사용하여 해결했습니다. 자세한 내용을 살펴보십시오. http://jackrabbit.510166.n4.nabble.com/How-to-handle-XA-Transactions-td521875.html

+0

그래서 로컬 트랜잭션을 사용하면 작동합니까? 아니면 내 repository.xml의 설정에서 뭔가를 변경해야합니까? 로컬 트랜잭션으로이 작업을 시도하고 동일한 오류가 발생했음을 기억하지만 확실하지 않습니다. 그 날 나중에 시도해보고 로컬 트랜잭션이있는 – nico1510

+0

을 알려 드리겠습니다. 오류 : 시스템 예외 com.sun.appserv.connectors.internal.api.PoolingException : java.lang.UnsupportedOperationException : 로컬 트랜잭션이 com에서 지원되지 않습니다. .sun.enterprise.resource.ConnectorXAResource.getResourceHandle (ConnectorXAResource.java:255) at com.sun.enterprise.resource.ConnectorXAResource.resetAssociation (ConnectorXAResource.java:266) ... 무엇을해야합니까? – nico1510

+0

어떻게 Glassfish에 저장소를 배포 했습니까? 서버에 리소스로 배포 된 것 같습니다. 위키에서이 페이지를 보았습니까 (http://wiki.apache.org/jackrabbit/JackrabbitOnJBoss?highlight=%28transaction%29) 세션 빈에서 사용하는 방법에 대한 예제가 있습니다. – ehsavoie