2016-07-29 3 views
0

사용중인 서버가 GlassFish이지만이 문제는 Weblogic에서도 발생합니다.EJB 데이터 소스 클라이언트 연결 해제 감지

내 클라이언트 컴퓨터가 트랜잭션을 시작하고 서버에서 여러 EJB를 검색 한 다음 완료하는 데 약간의 시간이 걸리는 작업을 시작합니다. 프로세스가 진행되는 동안 클라이언트 시스템이 종료됩니다 (powercut).

클라이언트 컴퓨터에서 연 데이터베이스 쿼리는 절대로 닫히지 않으며 (클라이언트가 종료 되었기 때문에) 교착 상태 및 기타 문제가 발생합니다.

이 죽은 트랜잭션을 감지하고 모든 리소스를 회수 할 수있는 방법이 있습니까?

transaction.begin(); 

MyBean bean = (MyBean)ctx.lookup("MyBean"); 

bean.doComplicatedWorkPart1(); 

bean.writeResultsToTheDatabase(); 

// Client dies during this method (powercut), so the transaction 
// is simply left hanging. 
bean.doComplicatedWorkPart2(); 

bean.writeResultsToTheDatabase(); 

transaction.commit(); 

답변

0

아래

의사 코드 예 IIRC이 용이하게 처리 될 수있다. 매달린 트랜잭션을 찾기 위해 DB 관리를 사용해야하는 데이터베이스를 사용하는 데이터베이스에 따라 다릅니다.

좀더 신뢰할 수있는 환경을 만들려면 서버 측 bean을 만들어야합니다. 여기서는 트랜잭션 중에 어딘가에서 연결이 끊어 지거나 연결이 느슨하지 않을 것입니다.

+0

감사합니다.이 상황을 처리하는 것이 어려울 수도 있다고 생각했습니다. 그것은 너무 자주 발생하지는 않지만 그렇게 할 때 귀찮을 수 있습니다. –