2013-02-01 2 views
2

장기간 일괄 처리 작업을 해고해야하고, 오랫동안 우리는 몇 시간이 걸릴 수있는 직업에 관해 이야기하고 있습니다. 이 장기 실행 작업을 실행하는 논리를 가진 ejb는 NoSQL 저장소와 통신하여 데이터 등을로드합니다.장기간 실행되는 Java EE 작업을 시작하는 방법은 무엇입니까?

따라서 JMS MDB를 사용하여 비동기 적으로 수행합니다. 그러나 각 작업이 잠재적으로 최대 1 시간 (최대 4 시간)을 취할 수 있으므로 MDB의 onMessage() 메소드가 오랫동안 기다리지 않아도됩니다. 그래서 MDB를 배치 ejb 러너 호출 후 바로 풀에 반환 할 수 있도록 onMessage() MDB 메서드 내에서 비동기 ejb를 시작하려고합니다.

asynchrous ejb 메서드 호출을 MDB와 결합하는 것이 합리적입니까? 대부분의 샘플은 동일한 것을 달성하기 위해 1 또는 다른 것을 사용하도록 제안합니다.

MDB에서 호출 할 ejb가 비동기 적이 지 않으면 MDB가 잠재적으로 오랜 시간 동안 대기합니다.

알려 주시기 바랍니다.

답변

1

그것은 내가 생각하기에 맛이 있습니다.

작업을 실행중인 JMS 풀의 스레드가 있거나 비동기 ejb를 수행하는 경우 최종 결과는 동일합니다. 스레드가 일부 풀에서 차단됩니다.

메시징 인터페이스에서 트리거되는 작업을 원할 수 있지만 스레드 풀을 차단하고 싶지 않을 수 있으므로 MDB에서 비동기 빈을 생성해도 아무런 문제가 없습니다. 또한 트랜잭션이 한 시간 전에 기본적으로 시간 초과되는 경우가 있으므로 어떤 이유로 MDB 트랜잭션을 수행하는 경우 onMessage 내부에서 해당 비동기 ejb의 발생을 고려할 수 있습니다.

+0

감사합니다. 그래서 일반적으로 onMessage (mdb)를 사용하여 비동기 bean을 실행하면 mdb가 풀에서 차단되는 것을 막을 수 있다고 생각하는 것이 맞습니까? 이것이 내가 원하는 것이지만 당신이 맞다면, 비동기 ejb 자체가 쓰레드를 차단할 것이지만 최소한 작업을 시작하기위한 메시징 인터페이스가있다. - 다른 하나는 mdb가 트랜잭션이되지 않을 것입니다. 이 경우 mdb 또는 mdb에서 호출 된 async ejb에 시간 초과 플래그를 설정해야합니까? – user983022

+0

예. 그리고 내가 언급 한 거래 thingy. –

1

나는 Petter가 대부분의 질문에 답한다고 생각합니다. 비동기 동작을 위해 mdb 만 사용하는 경우 @Asynchronous를 최대한 빨리 실행할 수 있습니다.

하지만 다른 기능에 관심이 경우 JMS 구현은 MDB에 충실해야 작업에 대한 용어의 신뢰성, 지속적인 큐, 느린 소비자 정책 우선 순위에 제공 할 수 있습니다의 뒤에 이유

하나 ejb 3.1에서 @Asynchronous를 도입하면 다른 JMS/MDB 기능이 필요하지 않을 때 비동기 처리를 수행하는보다 가벼운 방법을 제공 할 수 있습니다.

+0

감사합니다 Aksel. 나는 항상 mdb가 몇 시간 동안 차단되었다는 인상을 받고 있었는데, 그렇게하는 것이 나쁜 일이었습니다. 바로 mdb에서 asynch ejb 메소드를 호출하여 곧바로 해제 할 수 있다고 생각했기 때문입니다. 아마 내가 여기 잘못되었고 대량로드 작업이 완료 될 때까지 mdb가 대기 할 수 있습니다.당신이 말한 것처럼이 경우에는 다른 mdb 기능을 사용할 수 있습니다. – user983022

2

나는 단순화 할 것이다. @Asynchronous를 호출하기 위해 @Schedule을 사용하고 JMS를 잊어 버린다. 잘못 될 수있는 일이 하나 더 적습니다.

JSR 352 : 일괄 처리 응용 프로그램은 아직 준비가되어 있지 않지만 이러한 종류의 것들에 대해 매우 기대됩니다.

https://blogs.oracle.com/arungupta/entry/batch_applications_in_java_ee

+0

안녕하세요 Andre, JSR 352가 이제 성숙 했으므로 답변이 적절합니다. 그러나이 버전의 BatchRuntime.getJobOperator(). start ("job_id", 새 특성())의 JMS 메시지 수신기에서 일괄 작업을 시작할 수 없습니다. 일괄 작업이 STARTED 상태로 멈추는 경우 – kosgeinsky

관련 문제