2 장, 클라이언트 프로그래밍 모델에서 소개한 일반적인 JMS 클라이언트 프로그래밍 모델 외에도 J2EE 플랫폼 응용 프로그램 컨텍스트에서 사용하는, 보다 특수화된 JMS 버전이 있습니다. 이 특수화된 클라이언트를 Message-Driven Bean이라고 부르며, EJB(Enterprise JavaBeans) 구성 요소 중 하나로서EJB 2.0 이상 사양(http://java.sun.com/products/ejb/docs.html)에 설명되어 있습니다.
Message-Driven Bean은 비동기식 메시징을 제공합니다. 다른 EJB 구성 요소(Session Bean과 Entity Bean)는 표준 EJB 인터페이스를 통한 동기식 호출만 가능합니다. 그러나 엔터프라이즈 응용 프로그램에서는 서버측 구성 요소가 서버 자원을 독점하는 일 없이 통신할 수 있도록 비동기식 메시징이 필요할 때가 많습니다. 서버측 구성 요소가 응용 프로그램 이벤트에 응답해야 하는 응용 프로그램에서는 메시지 제작자와 밀접하게 연결되지 않으면서 메시지를 수신하고 소비할 수 있는 EJB 구성 요소가 필요합니다. 또한 엔터프라이즈 응용 프로그램에서 이러한 기능은 로드 증가에 따라 확장되어야 합니다.
MDB(Message-Driven Bean)는 특수한 EJB 컨테이너가 지원하는 EJB 구성 요소이며, 해당 컨테이너는 지원하는 구성 요소에 대해 분산 서비스를 제공합니다.
JMS MDB(message driven bean)는 JMS MessageListener 인터페이스를 구현하는 EJB입니다. onMessage 메소드(MDB 개발자가 작성)는 MDB 컨테이너가 메시지를 수신할 때 호출됩니다. onMessage() 메소드는 표준 MessageListener 객체의 onMessage() 메소드처럼 이 메시지를 소비합니다. MDB에서는 다른 EJB 구성 요소에서처럼 메소드를 원격 호출하지 않습니다. 따라서 그와 연관된 홈 또는 원격 인터페이스가 없습니다. MDB는 단일 대상에서 온 메시지를 소비할 수 있습니다. 그림 5–1에서 확인할 수 있듯이 독립형 JMS 응용 프로그램, JMS 구성 요소, EJB 구성 요소 또는 웹 구성 요소에서 메시지를 생성할 수 있습니다.
특수한 EJB 컨테이너가 MDB를 지원합니다. MDB의 인스턴스를 만들고 이 인스턴스가 비동기식으로 메시지를 소비하도록 설정합니다. 이 컨테이너는 메시지 서비스와 연결을 설정하고(인증 포함), 지정된 대상과 연관된 세션 풀을 생성하며 풀링된 세션 간의 메시지 배포를 관리합니다. 이 컨테이너는 MDB 인스턴스의 라이프사이클을 제어하므로 MDB 인스턴스 풀에서 받는 메시지 로드를 수용할 수 있도록 관리합니다.
MDB와 관련된 배포 설명자는 컨테이너가 메시지 소비 설정 시 사용하는 연결 팩토리 및 대상 속성을 지정합니다. 이 배포 설명자는 배포 도구에서 컨테이너 구성 시 필요로 하는 다른 정보를 포함할 수도 있습니다. 이 컨테이너 각각은 단일 MDB 인스턴스를 지원합니다.