2014-11-19 2 views

답변

1

@MessageDriven (MDBs)는 JMS API의 일부입니다. JMS는 실패한 메시지 소비, 트랜잭션 지원을 재 시도 할 때 모든 종류의 추가 기능을 제공하며 메시지 대기열을 제어 할 수도 있습니다.

@Asynchronous annotation이 java-ee-6 (ejb 3.1)까지 도입되지 않았습니다. 유스 케이스를 가정하는 것은 자바 EE-6 용기에 간단한 비동기 호출 이상, 그 이상 더 필요하면 @Asynchronous를 사용 (arun guptas blog on this)

는 JMS는

6

@Asynchronous은 옵션이 될 수

입니다 외부 트랜잭션이 여러 작업을 동시에 시작한 다음 모든 작업을 기다려야하는 경우 (또는 백그라운드에서 단일 작업을 시작하고 포 그라운드에서 일부 작업을 수행 한 다음 백그라운드 작업을 기다리는 경우)에만 적합합니다. @Asynchronous은 트랜잭션 "fire and forget"에 적합하지 않습니다. 왜냐하면 비동기 작업이 실행되기 전에 컨테이너가 충돌 할 수 있기 때문입니다 (제 생각에는 EJB 비동기 메소드가 메모리 캐시를 업데이트하는 것과 같이 매우 유용하지는 않습니다). 작업이 완료 될 때까지 기다리지 않고 작업이 비동기식으로 수행되도록하려면 MDB에 메시지를 보내거나 EJB 타이머를 예약해야합니다.

+0

컨테이너가 어떻게 "충돌"할 수 있습니까? – Dherik

+0

JVM 프로세스가 종료되고 시스템이 갑작스럽게 전원을 잃습니다. –