메시지 구동 Bean을 사용하는 엔터프라이즈 애플리케이션 개발
애플리케이션은 메시지 구동 Bean을 비동기 메시지 이용자로 사용할 수 있습니다. 메시지 구동 Bean을 대상에 대한 메시지 리스너로 배치합니다. 메시지 구동 Bean은 모니터링 중인 입력 대상에 메시지가 도착할 때 활성화 스펙 또는 JMS 스펙에 의해 호출됩니다.
이 태스크 정보
다른 엔터프라이즈 Bean과 같은 메시지 구동 Bean을 사용하는 엔터프라이즈 애플리케이션을 개발할 수 있습니다. 그러나 메시지 구동 Bean에는 홈 인터페이스 또는 원격 인터페이스가 없다는 점이 다릅니다.
수신 메시지의 비즈니스 메시지 핸들링 및 비즈니스 처리를 명확하게 분리하는 다른 엔터프라이즈에 수신 메시지의 비즈니스 처리를 위윔하기 위해 메시지 구동 Bean을 개발해야 합니다. 또한 이 분리는 다른 수신 메시지가 도착하거나 예를 들어 WebSphere® J2EE 클라이언트에 의해 비즈니스 처리가 호출될 수 있음을 의미합니다. 응답은 전송자 Bean 역할을 하는 다른 엔터프라이즈 Bean에서 처리하거나 메시지 구동 Bean에서 처리할 수 있습니다.
EJB 2.0 메시지 구동 Bean은 JMS(Java™ Message Service) 메시징만 지원합니다. EJB 2.1 및 EJB 3 메시지 구동 Bean은 JMS 외에 다른 메시징 유형을 지원할 수 있습니다. 모든 메시지 구동 Bean은 MessageDrivenBean 인터페이스를 구현해야 합니다. JMS 메시징의 경우 메시지 구동 Bean은 메시지 리스너 인터페이스 javax.jms.MessageListener도 구현해야 합니다. 다른 Java EE Connector Architecture(JCA) 준수 자원 어댑터는 구현되어야 하는 고유한 메시지 리스너 인터페이스를 제공할 수 있습니다.
Rational® Application Developer의 새 엔터프라이즈 Bean 마법사를 사용하여 메시지 구동 Bean의 Bean 유형으로 엔터프라이즈 Bean을 작성할 수 있습니다. 이 마법사는 Bean 유형에 적절한 메소드를 작성합니다.
public class MyJMSppMDBBean implements MessageDrivenBean, javax.jms.MessageListener
메시지 구동 Bean이 javax.ejb.TimedObject 인터페이스를 구현하고 void ejbTimeout(Timer) 호출에 의해 타이머 콜백 메소드를 호출할 경우 시간 기반 이벤트 알림을 위해 메시지 구동 Bean을 EJB 타이머 서비스에 등록할 수 있습니다. 스케줄된 시간에 컨테이너는 메시지 구동 Bean ejbTimeout 메소드를 호출합니다.
- onMessage(message)(다음 요구사항을 충족해야 함):
- 메소드에 javax.jms.Message 유형의 단일 인수가 있어야 합니다.
- throws 절에서 애플리케이션 예외를 정의하지 말아야 합니다.
- 메시지 구동 Bean이 Bean 관리 트랜잭션을 사용하도록 구성된 경우 트랜잭션의 범위를 지정하려면 javax.transaction.UserTransaction 인터페이스를 호출해야 합니다. 이 호출이 onMessage() 메소드 내에서 발생하기 때문에 트랜잭션 범위에 초기 메시지 수신이 포함되지 않습니다. 자세한 정보는 메시지 구동 Bean 트랜잭션 지원 주제를 참조하십시오.
onMessage() 메소드 내에서 메시지를 처리하려면(예를 들어 다른 엔터프라이즈 Bean으로 메시지를 전달하려면) 표준 JMS를 사용해야 합니다. 이를 Bean 관리 메시징이라고 합니다.
다른 메시지 리스너 인터페이스와 함께 JCA 준수 리소스 어댑터를 사용할 경우 onMessage() 메소드 외에 다른 메소드가 필요할 수 있습니다. 필요한 메시지 리스너 인터페이스에 대한 정보는 JCA 준수 리소스 어댑터와 함께 제공된 문서를 참조하십시오.
- ejbCreate()
엔터프라이즈 Bean의 새 인스턴스를 작성할 방법마다 ejbCreate 메소드를 정의 및 구현해야 합니다.
- ejbRemove()
javax.ejb.EJBHome 인터페이스에서 엔터프라이즈 Bean 홈 인터페이스가 상속한 제거 메소드를 클라이언트가 호출할 경우 컨테이너가 이 메소드를 호출합니다. 엔터프라이즈 Bean 인스턴스가 컨테이너에서 제거되고 연관된 데이터가 데이터 소스에서 제거되기 전에 실행할 코드가 이 메소드에 포함되어야 합니다.
- ejbTimeout(Timer)
타이머 서비스에서 알림을 지원할 경우에만 이 메소드가 필요하고, 이 메소드에는 수신한 시간 이벤트를 처리하는 비즈니스 로직이 포함되어 있습니다.
프로시저
결과
예
다음 예제에서는 메시지 구동 Bean을 작성하는 방법을 보여줍니다. 예제 코드에서는 TextMessage 유형의 JMS 메시지에서 텍스트 및 JMS MessageID에 액세스하는 방법을 보여줍니다. 이 예제에서는 먼저 메시지 구동 Bean의 onMessage() 메소드를 사용하여 수신 텍스트 메시지의 압축울 풀고 텍스트 및 메시지 ID를 추출한 다음, 동일한 메시지 Bean 클래스 내에 정의된 private putMessage 메소드를 사용하여 메시지를 다른 큐에 배치합니다.
public void onMessage(javax.jms.Message msg)
{
String text = null;
String messageID = null;
try
{
text = ((TextMessage)msg).getText();
System.out.println("senderBean.onMessage(), msg text2: "+text);
//
// store the message id to use as the Correlator value
//
messageID = msg.getJMSMessageID();
// Call a private method to put the message onto another queue
putMessage(messageID, text);
}
catch (Exception err)
{
err.printStackTrace();
}
return;
}