2013-11-27 5 views
1

이전에 JBoss 5에 org.jboss.varia.scheduler.Scheduler을 사용하여 JMX 일정을 사용하여 정기적 인 일괄 작업을 예약했습니다.이 지원은 JBoss 7.1에서 제거되었습니다.JBoss 7.1의 다중 스레드 예약 된 작업

내가 찾은 유일한 대안은 EJB에 대한 @schedule 어노테이션입니다. 그러나 EJB 내에서 실행되는 작업은 스레드를 시작할 수 없습니다. 하드웨어 리소스를보다 효율적으로 사용하기 위해이 일괄 처리 가져 오기 작업을 여러 개의 병렬 스레드에서 실행해야하므로 처리 시간이 절약됩니다.

JBoss 7.1에서 병렬로 여러 스레드에서 EJB를 호출 할 수있는 작업을 어떻게 예약합니까?

답변

2

전통적으로 병렬 실행이 필요할 때 MDB를 사용합니다. 다음과 같이 (. 전통적으로 내가 마음 비동기 호출에있는,하지만하지 J 보스 7.1 내가 생각하는 새로운 EJB 3.1 기능이기 때문에)

를 설정의 개요는 다음과 같습니다

  1. @Schedule 배치 프로세스를 트리거하는 EJB.
  2. 대기열입니다.
  3. 이 큐를 수신 대기중인 MDB. MDB는 이전 작업에서와 같이 많은 인스턴스 (효과적으로 스레드)를 실행하도록 구성되어야합니다.
  4. 대기열에 삽입되고 MDB에서 실행할 작업을 나타내는 메시지 객체입니다.

@Schedule 'EJB가 트리거되면 적절한 수의 작업 메시지를 대기열로 푸시합니다. 이것들은 컨테이너에 의해 MDB 인스턴스와 병렬로 전달되고 실행됩니다.

보너스와 같이, 코드는 표준 컴파일러가되어 특정 애플리케이션 서버 API에 종속되지 않습니다.

+0

감사합니다. 아마도 맞을 지 모르지만, 당면 과제에 심각한 과잉이라고 생각됩니다. –

+0

나는 그것이 정말로 확실하지 않지만, 당신이 옳을 수도 있습니다. 본질적으로 MDB에서 실행하거나 호출 할 기존 코드를 리팩토링해야합니다 (큰 코드 일 필요는 없습니다). 대기열을 추가하십시오 (많은 문서가 있어야합니다). 그리고'@ Schedule'' EJB (큰 것도 아닌)를 작성하십시오. 그렇다면 다시 귀하의 코드와 당신은 더 잘 알고 ... –

+0

제 경우에는 처리가 완전히 평행 할 수 없기 때문에 아마도 대기열을 관리하는 코드를 가져야합니다 (서로에 의존하는 파일 가져 오기가 순서대로 이루어져야 함) , 다른 것들은 병행 될 수 있습니다). 그러나 나의 주요 불만은 큐를 설치하고 유지하는 것이 조작과 튜닝에 관해서는 상당히 복잡 할 수 있다는 것이다. 어쨌든, 이것은 아마도 EJB보다 가벼운 컨테이너가 요즘 매우 인기가있는 이유 일 것입니다 :) 감사합니다. –