메시지 구동 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 유형에 적절한 메소드를 작성합니다.

규칙에 따라, 메시지 구동 Bean 클래스 이름은 nameBean입니다. 여기서 name은 메시지 구동 Bean에 지정하는 이름입니다. 예:
public class MyJMSppMDBBean implements MessageDrivenBean, javax.jms.MessageListener

메시지 구동 Bean이 javax.ejb.TimedObject 인터페이스를 구현하고 void ejbTimeout(Timer) 호출에 의해 타이머 콜백 메소드를 호출할 경우 시간 기반 이벤트 알림을 위해 메시지 구동 Bean을 EJB 타이머 서비스에 등록할 수 있습니다. 스케줄된 시간에 컨테이너는 메시지 구동 Bean ejbTimeout 메소드를 호출합니다.

메시지 구동 Bean 클래스에서 다음 메소드를 정의 및 구현해야 합니다.
  • 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)

    타이머 서비스에서 알림을 지원할 경우에만 이 메소드가 필요하고, 이 메소드에는 수신한 시간 이벤트를 처리하는 비즈니스 로직이 포함되어 있습니다.

프로시저

  1. 엔터프라이즈 애플리케이션 프로젝트를 작성하십시오.
  2. 메시지 구동 Bean 클래스를 작성하십시오. Rational(r) Application Developer의 새 엔터프라이즈 Bean 마법사를 사용하여 메시지 구동 Bean의 Bean 유형으로 엔터프라이즈 Bean을 작성할 수 있습니다.

    메시지 구동 Bean 클래스 작성 방법에 대한 예제는 이 주제의 예제 섹션을 참조하십시오. 자세한 정보는 Rational Application Developer Information Center의 메시지 구동 Bean 작성을 참조하십시오.

    이 단계의 결과는 EAR 파일로 어셈블링될 수 있는 배치용 메시지 구동 Bean입니다.
  3. 옵션: EJB 배치 디스크립터 편집기를 사용하여 검토하고, 필요하면 배치 속성을 변경하십시오. EJB 배치 디스크립터 편집기를 사용하여 EJB 작성 마법사(예: 트랜잭션 유형메시지 선택기)에 지정된 배치 속성과 다른 기본 배치 속성을 검토할 수 있습니다.

    JCA 1.5 준수 자원에 대해 메시지 구동 Bean의 배치 속성 구성리스너 포트에 대해 메시지 구동 Bean의 배치 속성 구성에 설명된 대로 배치를 위해 엔터프라이즈 애플리케이션을 EAR로 내보낸 후, 필요에 따라 이러한 속성의 값을 대체할 수 있습니다.

    1. 특성 분할창에서 Bean 탭을 선택하십시오.
    2. 기본 패널에서 트랜잭션 유형 속성을 구성하십시오.
      트랜잭션 유형
      이 속성은 메시지 구동 Bean이 자신의 트랜잭션을 관리하는지 아니면 컨테이너가 Bean을 대신해서 트랜잭션을 관리하는지 여부를 판별합니다.
      Bean
      메시지 구동 Bean이 자신의 트랜잭션을 관리합니다.
      컨테이너
      컨테이너가 Bean을 대신해서 트랜잭션을 관리합니다.
    3. 활성화 구성 아래에서 다음 속성을 검토하십시오.
      acknowledgeMode
      이 속성은 세션이 수신하는 모든 메시지를 수신확인하는 방법을 판별합니다.
      자동 수신확인
      세션에서 전달하는 각 메시지를 자동으로 수신확인합니다.
      중복 메시지 허용 수신확인
      세션은 느리게 메시지 전달을 수신확인합니다. 이 설정은 JMS 실패 시 일부 중복 메시지가 전달될 수도 있으므로 중복 메시지를 허용하는 이용자 애플리케이션만 이 수신확인을 사용할 수 있습니다.

      EJB 스펙에 정의된 대로 클라이언트는 수신확인 메시지에 Message.acknowledge() 메소드를 사용할 수 없습니다. CLIENT_ACKNOWLEDGE 값이 createxxxSession 호출 시 전달되면 메시지가 애플리케이션 서버에서 자동으로 수신확인되고 Message.acknowledge() 메소드는 사용되지 않습니다.

      참고:

      메시지가 삭제될 때 수신확인이 전송됩니다.

      비트랜잭션 메시지 구동 Bean이 있으면, 시스템에서는 메시지 구동 Bean이 시작되거나 메시지 구동 Bean이 완료되는 경우에 메시지가 삭제됩니다. 메시지 구동 Bean에서 예외가 발생하여 완료되지 않으면, 시스템에서는 다음 중 한 가지 조치를 수행합니다.
      • 메시지 구동 Bean 완료 시 메시지를 삭제하도록 시스템이 구성된 경우, 메시지는 메시지 구동 Bean의 새 인스턴스로 디스패치되므로 메시지를 처리할 수 있는 다른 기회가 생깁니다.
      • 메시지 구동 Bean 시작 시 메시지를 삭제하도록 시스템이 구성된 경우, 메시지가 유실됩니다.

      서비스 품질이 최상의 비지속적 상태로 설정된 경우, 메시지 구동 Bean이 시작되면 메시지가 삭제됩니다. 기타 모든 서비스 품질의 경우, 메시지 구동 Bean이 완료되면 메시지가 삭제됩니다.

      destinationType
      이 속성은 메시지 구동 Bean이 큐를 사용하는지 또는 주제 대상을 사용하는지 여부를 판별합니다.
      메시지 구동 Bean은 큐 대상을 사용합니다.
      주제
      메시지 구동 Bean은 주제 대상을 사용합니다.
      subscriptionDurability
      이 속성은 JMS 주제 등록이 지속 가능한지 또는 지속 불가능한지 여부를 판별합니다.
      지속 가능
      등록자는 JMS에 속한 고유한 ID로 지속 가능한 등록을 등록합니다. 동일한 ID를 가진 차후 등록자 오브젝트는 이전 등록자가 남긴 상태에서 등록을 재개합니다. 지속 가능한 등록에 대한 활성 등록자가 없는 경우에는 등록에서 메시지를 수신하거나 메시지가 만기될 때까지 JMS가 등록 메시지를 보유합니다.
      지속 불가능
      지속 불가능한 등록은 해당 등록자 오브젝트의 지속 시간 동안 유지됩니다. 클라이언트는 해당 등록자가 활성화되어 있을 때만 토픽에 대해 공개된 메시지를 봅니다. 등록자가 활성화되어 있지 않으면 클라이언트는 토픽에 대해 공개된 메시지를 볼 수 없습니다.

      지속 불가능한 등록자는 등록자가 작성될 때 있던 것과 동일한 트랜잭션 컨텍스트(예: 글로벌 트랜잭션 또는 지정되지 않은 트랜잭션 내용)에서만 사용될 수 있습니다.

      messageSelector
      이 속성은 메시지 구동 Bean이 수신하는 메시지를 선택하는 데 사용되는 JMS 메시지 선택기를 판별합니다. 예:
      JMSType='car' AND color='blue' AND weight>2500

      선택기 문자열은 JMS 메시지 헤더 필드와 메시지 특성 필드를 참조할 수 있습니다. 메시지 선택기는 메시지 본문 값을 참조할 수 없습니다.

    4. 바인딩 배치 속성을 지정하십시오.

      WebSphere 바인딩 아래에서 JCA 어댑터 옵션을 선택한 다음 바인딩 배치 속성을 지정하십시오.

      ActivationSpec JNDI 이름
      이 속성은 메시지 구동 Bean을 배치하는 데 사용되는 활성화 스펙의 JNDI 이름을 지정합니다. 이 이름은 WebSphere Application Server에 정의하는 활성화 스펙의 이름과 일치해야 합니다.
      ActivationSpec 권한 별명
      이 속성은 JCA 자원 어댑터에 대한 연결 인증에 사용되는 인증 별명의 이름을 지정합니다. 인증 별명은 JCA 자원 어댑터에 새 연결 작성을 인증하는 데 사용되는 사용자 ID 및 비밀번호를 지정합니다.
      대상 JNDI 이름
      이 속성은 메시지 구동 Bean이 JNDI 네임스페이스에서 JMS 대상을 찾기 위해 사용하는 JNDI 이름을 지정합니다.
    5. 옵션: 메시지 링크를 사용하려면 대상 링크를 지정하십시오.

      메시지 링크를 사용하면 배치 시 특정 메시지 구동 Bean에 메시지를 라우트할 수 있습니다. 메시지 링크를 사용하여 동일한 애플리케이션에 있는 컴포넌트 간의 메시지 플로우를 조정할 수 있습니다.

      메시지 구동 Bean에서 이용하고 처리할 메시지의 경우, 메시지 구동 Bean과 연관된 배치 디스크립터에 <message-destination-link> 요소가 정의되어야 합니다. <message-destination-link> 요소에서 식별하는 대상은 로컬 대상에 해당합니다.

      <message-destination-ref><message-destination-link> 요소가 포함된 경우 대상에서 메시지를 이용합니다.

      대상에 전송된 메시지를 이용하기 위해 메시지 구동 Bean을 확보하려면 배치 디스크립터에서 <message-destination-link> 요소를 선언하거나 활성화 스펙에서 이를 설정하면 됩니다.

  4. 배치할 수 있도록 애플리케이션을 어셈블링 및 패키징하십시오.

결과

이 태스크의 결과는 WebSphere Application Server에 배치할 수 있는 엔터프라이즈 애플리케이션의 EAR 파일(메시지 구동 Bean 포함)입니다.

다음 예제에서는 메시지 구동 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;
}

다음에 수행할 작업

메시지 구동 Bean을 사용하는 엔터프라이즈 애플리케이션을 개발한 후, 애플리케이션을 구성하고 배치하십시오 예를 들어 메시지 구동 Bean의 활성화 스펙을 정의하고, 선택적으로 애플리케이션의 배치 디스크립터 속성을 변경하십시오. 자세한 정보는 JCA 1.5 준수 자원으로 메시지 구동 Bean을 사용하도록 엔터프라이즈 애플리케이션 배치리스너 포트와 함께 메시지 구동 Bean을 사용하도록 엔터프라이즈 애플리케이션 배치의 내용을 참조하십시오.

주제 유형을 표시하는 아이콘 태스크 주제



시간소인 아이콘 마지막 업데이트 날짜: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tmb_devap
파일 이름:tmb_devap.html