2012-06-08 2 views
0

우리의 응용 프로그램은 Guice-Persist 및 Guice-Servlet을 광범위하게 사용하는 Java-GWT 응용 프로그램입니다. Warp-persist가 원래 사용한 것과 비슷한 Guice-Persist의 HTTPRequest 세션 기능을 사용하여 문제가 발생하지 않았습니다.Guice-Persist - "이 스레드에서 이미 작업이 시작되었습니다. 중간에 end() 호출을 사용하지 않고 UnitOfWork.begin()을 두 번 호출 한 것처럼 보입니다."

문서별로 PersistFilter 클래스를 통해 webapp을 필터링하고 있습니다. 우리의 persistence.xml 파일은 guice 문서 here에 따라 transaction-type = "RESOURCE_LOCAL"입니다.

지금 어떤 이상한 이유로 우리 PROD 환경이

"일이 이미이 스레드에서 시작 오류를 보이고있다. 보이는 두 번 사이에 끝내는 균형()를 호출하지 않고() UnitOfWork.begin를 불렀다처럼. " 작업의 중첩 된 단위가 Guice는-지속에서 지원되지 않는 문제가있는 것처럼

enter image description here

는 것 같습니다. LINK

우리는 최근에 최대 절전 모드 3.6.3. 최종에서 4.1.4 최종으로 옮겼습니다. 그에게 guice와 일종의 비호 환성이 있는지 확실하지 않습니다 ...

이 시점에서 우리는 왜 이런 일이 일어날 지 전혀 암울하지 않습니다.

답변

3

@Transaction 주석을 가장 바깥 쪽 논리적 트랜잭션 중괄호에 추가하는 것을 잊었 기 때문에 트랜잭션이 암시 적으로 Hibernate에 의해 열렸을 때 그 증상이 발생했습니다.

문제를 정확히 지적하려면 데이터베이스 계층에 중단 점을 설정하고 begin() 및 end()에서 중단 점 (읽기 또는 쓰기가 문제가되지 않음)이 존재하는 경우 기존 트랜잭션없이 발생하도록 설정하십시오.