2011-01-18 4 views
1

JBoss (버전 5) 기반의 응용 프로그램에서 UDP 패킷을 수신 대기해야합니다.Java EE (EJB 3.0) 환경에서 DatagramSocket 읽기

가장 쉬운 방법은 JBoss @Service 싱글 톤 Bean을 사용하여 특정 포트에서 DatagramSocket을 열고 receive (...) 메소드를 호출하는 것입니다. 첫 번째 부분은 매우 쉽습니다 - 나는 그것을 테스트하고 예상대로 작동합니다. 두 번째 부분 - 패킷 수신은 더 복잡합니다.

그런 코드의 디자인에 대해 궁금합니다. DatagramSocket javadoc에 기술되어 있기 (위해) 때문에, receive는 블록 조작입니다. 패킷이 취득 될 때까지 블록됩니다. 확장 성이 뛰어나고 스레드 안전성을 보장하는 코드 작성 방법은 무엇입니까?

열린 연결로 싱글 톤에 대한 참조를 보유하는 상태 비 저장 빈을 작성하는 것에 대해 생각해 보았습니다. 이러한 빈은 receive 메소드를 호출합니다. 그러나 JBoss가 어떻게 관리하는지 (하나의 bean 호출은 receive()와 패킷이 도착할 때까지) 차단됨). 사용할 패턴이 있습니까?

답변

0

Apache Camel과 같은 오픈 소스 프레임 워크는 이러한 종류의 사용 사례를 지원하기위한 것입니다. 그들은 잘 테스트를 거쳤으며 프로덕션 환경에서 작동하는 것으로 입증되었습니다. 내 제안은 자신 만의 라이브러리를 만드는 것보다 라이브러리에 의존하는 것입니다.

+0

빠른 답변 감사합니다. 불행히도 다른 많은 기능을 가진 큰 프로젝트의 일부이며 일반적으로 비 고유 EJB 솔루션을 사용하지 않는 것이 좋습니다. –

+0

@ Piotrek-De - 귀하는 귀하의 애플리케이션에 리소스 어댑터로 낙타를 배포 할 수 있다고 생각합니다. 이것은 사양을 준수하며 리소스 어댑터는 이러한 용도로 선호되는 J2EE 솔루션입니다. –