2013-06-24 3 views
0

[우리는 제이보스 (6)을 사용하고,하지만 난이 질문은 어떤 JaveEE 응용 프로그램 서버에 적용 생각] 우리는 (다른 것들 사이) 정말 장기 실행 작업을 수행하도록되어 응용 프로그램 서버를 가지고Java 응용 프로그램 서버에서 장기 실행 작업을 수행하는 방법은 무엇입니까?

(수 시간이 걸릴 것).

작업은 일부 EJB 함수를 호출하여 트리거되지만, 지금까지는이 작업 내에서 전체 작업이 실행되므로 EJB 트랜잭션 내에서 실행됩니다. 이러한 트랜잭션은 오히려 신속하게 시간 초과되며 트랜잭션 시간 제한을 연장하는 것이 올바른 해결책으로 보이지 않습니다.

전체 작업을로드/작업/저장 부분으로 쉽게 나눌 수 있으므로 전체 시간 동안 트랜잭션을 수행해야하는 엄격한 요구 사항은없는 것처럼 보입니다.

그래서 질문입니다. 이것을 수행하는 "올바른"방법은 무엇입니까?

답변

0

이 작업을 수행하는 일반적인 올바른 방법은 이러한 작업을 작업으로 설정 한 다음 비동기 적으로 처리하는 것입니다. Spring은 이에 대한 프레임 워크를 내장하고 있습니다. 그러나 일반적으로 긴 작업을 대기열에 넣고 별도의 웹 응용 프로그램을 처리 한 다음 전자 메일을 통해 사용자에게 알리거나 상태를 확인할 수있는 링크를 사용자에게 제공 할 수 있습니다.

1

Quartz을 꼭 보시기 바랍니다. 특정 간격으로 작업을 예약하는 놀라운 도구입니다. 우리는 우리 프로젝트 중 하나에서 Quartz를 사용했으며 훌륭했습니다. 우리 시나리오는 사용 된 입력을 Excel 파일 형식의 게시물에서 가져온 다음 긴 시간이 소요될 수있는 비동기 적으로 뛰어난 Excel 파일을 처리하는 것이 었습니다. 우리가 한 것은 입력을 받아 1 초 후에 작업을 예약하는 것입니다. Spring은 또한 쿼트를 사용하는 작업 스케줄링을 지원하고 Jboss는 쿼트가 미리 패키지되어 제공됩니다.

+0

Quartz에 대한 포인터를 보내 주셔서 감사합니다. 이 뒤에있는 아키텍처에 대한 추가 정보는 어디에서 찾을 수 있습니까? 특히 Quartz 작업을 사용하면 트랜잭션 문제를 어떻게 피할 수 있을까요? – stmoebius

+0

Quarts 사이트 자체에서 사용할 수있는 자습서를 이용할 수 있습니다. http://quartz-scheduler.org/documentation/quartz-2.x/tutorials/. 트랜잭션을 위해 Quartz에 태스크를 제출하면 비동기 적으로 태스크가 실행되므로 사용자에게 응답을 다시 보낼 수 있으며, 이후에는 주기적으로 페이지를 새로 고쳐 업데이트를 확인한다. 나는 또한 당신이 비슷한 것을 할 수 있다고 믿습니다. –

관련 문제