2013-04-24 6 views
0

가능하면 바닐라 Java EE 6에서만 Java EE 6에서 다음 작업을 수행하는 올바른 방법을 찾고 있습니다.올바른 방법으로 Java EE 6에서 greedy-worker-pool을 사용하여 작업 대기열을 구현할 수 있습니까?

작업 대기열에 작업을 넣고 대기 상태 인 경우 대기열에서 작업을 가져와야하는 고정 작업자 풀을 갖고 싶습니다.

작업자 개체는 레거시 시스템과 고정 된 관계에 있으므로 모든 작업에 대해 여러 스레드에서 하나의 작업자 개체를 사용할 수 없으며 모든 작업에 대해 새 작업자 개체를 인스턴스화 할 수도 없습니다.

욕심 많은 작업자 패턴이 완벽 해 보이지만 이는 Java SE에만 해당됩니다. EE에서는이를 구현하는 데 올바른 방법이 무엇인지 확신 할 수 없습니다.

제안 사항?

미리 감사드립니다. M.

답변

0

먼저주의해야 할 점은 스펙의 정의에 따르면 JavaEE에서 자신의 스레드를 만들고 시작해서는 안된다는 것입니다.

설정과 관련하여 시스템에서 어떻게 작동하는지 완전히 모르겠습니다. 클라이언트와 항상 일정한 관계를 유지하고 있거나 수시로 하나의 클라이언트에서만 작동하는 작업이 있습니까? ?

두 경우 모두 하나의 EJB가 특정 클라이언트 시스템을 제공 할 수 있도록 상태 저장 EJB 만 사용할 수 있습니다. 첫 번째 경우에는이 EJB가 전체 라이프 사이클 동안 클라이언트에 서비스를 제공하거나 두 번째 경우에 비동기 EJB를 시작하여 작업을 수행 할 수 있습니다.

+0

답변 해 주셔서 감사합니다. 이렇게하면, 예를 들어 레거시 시스템에 상응하는 4 개의 EJB가 있으며 한 번에 하나의 스레드에서만 하나의 EJB 만 사용됩니다. 이제 다른 끝을 보자. 들어오는 요청 (예 : 서블릿)이 그 EJB에 배포되거나 (그로부터 당겨지는) EJB는 아무 것도 할 수 없다 (==> 탐욕스러운 작업자 접근). – user1631581

+0

@ user1631581 아직 설정을 완전히 이해하지 못했습니다. 당신은 4 개의 EJB와 1 개의 레거시 시스템에 대해 말합니다. 왜 고정 된 전화 번호를 가지고 있니? 레거시 시스템은 한 번에 특정 연결 만 가질 수 있습니까? 그리고 당신의 EJB가 레거시 시스템에 연결되어 있다면, 그것은 fire-and-forget 스타일로 서비스를 제공합니까, 아니면 오랜 기간 동안 상태를 유지해야합니까? –

+0

@ user1631581 [계속] 귀하의 의견을 통해 알 수 있듯이 고정 된 수의 근로자가 있으며 가능한 사람은 누구나해야합니다. 그래서 특별한 일을 할 필요가 없습니다. 서블릿은 삽입 된 EJB를 사용할 수 있으며 컨테이너는 작업을 위해 EJB 인스턴스를 제공합니다 (호출자가 독점적으로 사용하도록 보장됨). 어떤 이유로 고정 된 숫자가 있어야하는 경우 컨테이너의 배포 설명자 (예 : glassfish-ejb-jar.xml)에 지정해야합니다. –