2009-03-20 7 views
2

배포 된 엔티티/상태 비 저장 세션빈을 사용하여 JBoss 4.0.4 GA 응용 프로그램 서버에서 실행되는 EJB 2 CMP 레거시 응용 프로그램을 유지해야합니다. 모든 EJB 상용구 코드는 EntityEJB/EntityEJBManager 주석에서 XDoclet을 통해 생성됩니다.EJB 2.x "재진입 호출이 감지되었습니다"예외의 원인은 무엇입니까? 어떻게 해결할 수 있을까요?

내 GUI 클라이언트가 외관 create 메소드를 호출 할 때, 트랜잭션을 롤백하는 "Reentrant method call detected"메시지가있는 내 서버 로그에 EJBException의 사례가 많습니다.

이 예외는 무엇을 의미합니까? Found this link that explains what is meant by reentrancy하지만, 내 응용 프로그램이 동시에 accesed 할 수 없다고 나에게 보인다 어떻게


업데이트 (불행하게도, 나는 아직 재현 할 수 없습니다하는) 같은 오류를 피하기 수 있습니까?

답변

0

문제의 Entity Bean에 동시에 액세스 할 수 없다는 것은 데이터를 손상시킬 가능성이 있으므로 의미가 있습니다.

1

이전에 EJB1이 동일한 트랜잭션의 일부로 컨테이너 내의 EJB1을 다시 호출하는 EJB2를 호출하는 것을 보았습니다.

EJB1을 재진입으로 표시하여 동일한 트랜잭션에서 여러 번 액세스 할 수 있도록 허용하려면 컨테이너에 알릴 수 있습니다.

이는 다음과 같은 태그를 배치 기술자로 수행됩니다

<reentrant>True</reentrant> 

된 XDoclet 당신을 위해이를 생성하는 데 사용할 수있는 해당 EntityEJB 주석이 있어야합니다.

1

우리는 방금 동일한 문제를 발견했으며 솔루션은 두 가지로 나뉘어졌습니다. 첫째, 우리는 ejb의 트랜잭션 속성이 우리의 ejb-jar.xml 내에서 NotSupported가 아닌지 확인합니다. 그런 다음 "트랜잭션 당 인스턴스"를 낙관적 인 잠금 전략으로 사용했습니다. 약간의 벨트 및 브레이스 방식이지만 작동합니다.