2014-02-24 4 views
0

MDB의 onMessage가 끝난 후 몇 가지 프로세스를 만들고 싶습니다.호출자 스레드가 끝난 후에 EJB @asynchronous 메서드의 스레드가 시작되도록 허가 할 수 있습니까?

EJB의 @asyncronous를 사용하여 실현할 수 있다고 생각합니다. 하지만이 메서드는 호출자 스레드가 끝나기 전에 시작할 수 있습니다.

호출자 스레드가 종료 된 후이 비동기 메서드가 시작되도록하는 방법이 있습니까? 적어도 호출자 스레드는 자체 트랜잭션을 커밋합니다.

감사합니다. 좋은 하루였습니다. 게시자 트랜잭션이 커밋 될 때까지

답변

1

당신은 트랜잭션 내에서 메시지를 게시하는 경우, 대신에 다른 MDB를 사용하여이를 달성 할 수있는 메시지는 공개되지 않습니다 :

@MessageDriven... 
public class MDB1 { 

    @TransactionAttribute(TransactionAttributeType.REQUIRED) 
    public void onMessage(Message message) { 
    ... 
    producer.send(msg1); // msg1 will be published at commit of this transaction 
    ... 
    myMethod1(); 
    } 
} 

하고,

MDB1.onMessage()가 돌아왔다, 그래서 MDB2.myMethod2()MDB1.onMessage() 반환되기 전에 실행되지 않을 때까지
@MessageDriven... // Consumes msg1 
public class MDB2 { 

    @TransactionAttribute(TransactionAttributeType.REQUIRED) 
    public void onMessage(Message message) { 
    ... 
    myMethod2(); 
    ... 
    } 
} 

이 방법 (및 CMT 사용), 메시지 msg는 공개되지 않습니다.

+0

예 tambiem ho piensato una vez. MDB 2의 결과에 대한 견해를 말하십시오. 그레시아. – Takeshinho

+1

Jajaj, bien, Buena Suerte! :) 고운! – Camilo