2017-01-27 5 views
0

IBM WebSphere Application Server 8에서 실행되고 EJB 3.0 Stateless Bean이있는 애플리케이션이 있습니다. 이 Bean은 EJB 2 Stateless Bean으로 구성된 서비스를 호출합니다. 두 번째 빈은 for 루프에서 호출된다. 이 방법은 적어도 300 번 호출됩니다. 프로세스는 트랜잭션에서 발생합니다. 첫번째 빈 등으로 표시된다 :60 초 후에 EJB 원격 호출은 롤백으로 이어집니다 .Only

@TransactionManagement(TransactionManagementType.CONTAINER) 
@TransactionAttribute(TransactionAttributeType.REQUIRED) 

번째 빈 :

<session-type>Stateless</session-type> 
<transaction-type>Container</transaction-type> 

때로는 전체 트랜잭션이 60 초 이상 걸린다.

totalTranLifetimeTimeout="600" 
LPSHeuristicCompletion="ROLLBACK" 
propogatedOrBMTTranLifetimeTimeout="600" 

하지만 난 아직도 내가 원인과 해결책을 찾지 못했습니다하는 문제가 발생 : 이런 이유로 나는 거래 600 초 시간 제한을 설정합니다. 첫 번째 호출 후 60 초 후에 서비스 (메소드 B)는 트랜잭션에 대해 rolebackonly true를 설정합니다. 이 메소드는 끝까지 실행되지만 이것 때문에 데이터베이스에 저장된 것이 없습니다. 모든 것이 롤백됩니다.

사실 (컨테이너 또는 데이터베이스)을 설정하는 구성 요소에 대한 추가 정보를 얻는 데 필요한 솔루션을 찾을 수 없으며 그 이유가 있습니다.

나는 모든 것을 올바르게 설명하고 모든 아이디어 나 해결책을 높이 평가되기를 바랍니다.

답변

0

응용 프로그램 구성 요소 트랜잭션 시간 초과 설정이있는 경우 표 1, 2에 표시된대로 this knowledge center page에있는 전역 시간 초과 값보다 우선합니다. 구성 요소 트랜잭션 시간 초과를 구성하는 방법을 설명하는 또 다른 knowledge center page입니다. 그것이 60으로 설정되어 있는지 확인하고, 그렇다면 값을 올리십시오.

또한 원격 EJB 호출이라고 언급 했으므로 기본값이 60 초인 Client Inactivity Timeout 값을 살펴보고 "최대 지속 시간 (초)을 지정합니다. 이 제한 시간을 초과하는 클라이언트 비 활동 기간으로 인해이 응용 프로그램 서버에서 트랜잭션이 롤백됩니다. " 첫 번째 링크의 지식 센터 문서 당

+0

답장을 보내 주셔서 감사합니다. 배포 설명자 또는 서버에 "응용 프로그램 구성 요소 트랜잭션 시간 초과"가 설정되어 있지 않습니다. 한편 "클라이언트 비 활동 제한 시간"은 의미가 없습니다. 그렇지만 두 서버의 값을 120 초로 변경하여 긍정적 인 결과를 얻지는 못했습니다. 첫 번째 게시물에서 원격 ejb는 for 루프에서 호출되었으며 첫 번째 호출에서 60 초 후 첫 번째 호출에서 플래그가 이미 true로 설정되었습니다. 나는 원격 호출의 시작과 끝에서 SessionContext.getRollbackOnly()의 값을 기록하기 때문에 이것을 본다. –