2012-01-04 4 views
0

저는 기본적으로 웹 서비스에서 메시지를 받고이 메시지 내용을 기반으로 다운로드 프로세스를 시작하기로되어있는 새로운 EJB 응용 프로그램을 작성하고 있습니다. 이 응용 프로그램은 Glassfish 3.1.1에서 실행됩니다.EJB - 건축 문제

첫 번째 아이디어는 웹 서비스에서 메시지를 읽고 stateful 세션 빈을 사용하여 다운로드 자체를 시작하고 처리하는 싱글 톤 빈을 만드는 것이 었습니다. 싱글 톤과 스테이트 풀 빈 (stateful bean) 사이에 변환 상태가 필요하기 때문에 스테이트 풀 빈을 사용해야합니다. (다운로드 상태 등)

웹 서비스에서 여러 메시지를 받으면 "문제"가 있습니다. 여러 다운로드를 병렬로 시작하십시오. 물론 각 다운로드는 자체 컨텍스트로 진행됩니다. 내 싱글 톤에서 상태있는 세션 빈을 호출하는 것처럼 이것을 달성해야하는 것은 무엇입니까? 항상 동일한 bean을 얻습니다. 맞습니까? 볼 수있는 유일한 해결책은 내 싱글 톤에서 생성되고 시작될 스레드를 사용하는 것이지만 EJB 사양에서는 허용되지 않습니다.

도움을 주셔서 감사합니다!

답변

0

왜 여기에 싱글 톤빈이 필요합니까? 상태있는 세션 빈만으로는 충분하지 않습니까? 동시 다운로드를 원한다면, 스테이트 풀리스가 필요합니다. 싱글 톤을 사용하는 이유는 무엇입니까? 좀 더 설명해 주시겠습니까?

+0

안녕하세요. 싱글 톤은 애플리케이션의 "진입 점"이 될 것이며 모든 다운로드를 관리 할 책임이 있습니다. 즉, 각 빈의 다운로드 상태를 확인하고, 웹 서비스를 통해 상태를 전송하며, 모든 다운로드를 중단/취소합니다. 계속 진행할 다른 방법이 있습니까? 감사합니다 – Mehdi

+0

예, 알지만, 여전히 당신이 여기에 싱글 톤이 필요하다는 것을 납득시키지 못합니다. 내 말은, SFSB가 단일 클라이언트와의 상호 연결, 다운로드/취소/상태 가져 오기 등을 관리하게하십시오. 왜 이것을 "중앙화"해야합니까? –

+0

(내 의견으로는) 나는 집중해야하기 때문에. 취소/인터럽트 다운로드와 같은 명령은 예를 들어 WS에서 발생하기 때문입니다. 그래서 어떤 SFSB를 중단/취소 할 필요가 있는지 알아야합니다 ... 더 명확합니까? – Mehdi

1

여기서 상태 유지 세션 빈을 원한다고 생각하지 않습니다. Stateful Bean의 핵심은 특정 클라이언트와의 관계 인 세션의 범위에서 상태를 유지한다는 것입니다. 귀하의 경우에는 클라이언트 당 하나의 다운로드가 없습니다 (어떤 클라이언트가 있습니까?), 이는 적절한 범위가 아니라는 것을 의미합니다.

다중 스레드가 필요한 경우 @Asynchronous 메서드가있는 상태 비 유지 빈을 사용하십시오. 싱글 톤 콜백을 사용하여 상태 업데이트를 처리해야 할 것입니다.