2013-03-28 3 views
0

기본적으로 다른 EJB 3 (DAO)를 호출하는 EJB3 타이머가 있습니다.이 호출은 catch 블록에 래핑됩니다. 다른 EJB는 DS에 대한 연결을 얻으려고 할 때 타임 아웃 SQL 예외를 throw합니다 (호출자에게 예외를 throw 함). 로그에서 나는이 타임 아웃이 계속해서 반복적으로 실행하려고 시도하는 것을 볼 수있다. 다시 시도하지 못하게 할 수있는 옵션은 무엇입니까? 문서에서SQLException (timeout)으로 인해 트랜잭션이 롤백 될 때 Weblogic 10.3 (EE 컨테이너)에서 타이머 재 시도를 중지하는 방법은 무엇입니까?

.. 
// Timer 
@Timeout 
public void timeout(Timer timer) { // keeps on coming here 
... 
try { 

dao.processJob(); 
} catch (SQLException) { // catches the timeout 
log 
} 

// dao 
@Resource(...) 
private Datasource ds 

public void process() throws SQLException { 
ds.getConnection() // throws timeout here 
.. 
} 

답변

2

: 빈 타이머 취소가 롤백, 롤백됩니다 트랜잭션 내에서 타이머를 취소하는 경우

. 이 경우 타이머의 지속 시간은 취소가 발생한 적이없는 것처럼 재설정됩니다..

따라서 타이머가 아마도 취소되지 않습니다. 이는 계속 재 시도하는 이유 일 수 있습니다.

  • 당신은 대신이 & null을 반환 할 수 있습니다 던지기, process 방법에 예외를 잡으려고 시도 할 수 있습니다.
  • 또는 방법 process에 대해 TransactionAttributeType.REQUIRES_NEW을 가질 수 있으며, 이는 새 거래의 일부가됩니다.
+0

TransactionAttributeType.REQUIRES_NEW는 내가 찾고있는 것입니다. 고맙습니다. –

+0

@ Spenser 도움을 주신 것을 환영합니다 & 기쁘게 생각합니다. –