J2EE 이벤트 고객은 전개 시에 JMS 목적지 및
연결 팩토리와 연관되는 메시지 구동 Bean으로
구현됩니다. 이벤트를 수신하려면, 다음 단계를 따르십시오.
공고 헬퍼를 가져오십시오. JMS 이벤트 고객은
공고 헬퍼를 사용하여 이벤트 그룹과 연관된 JMS 목적지를 식별하고,
수신된 JMS 메시지를 이벤트 공고로 변환하고, 수신되는 이벤트의
필터링을 수행합니다. 공고 헬퍼를 가져오려면 JNDI 네임 스페이스에
바인드된 NotificationHelperFactory의 인스턴스인 공고 헬퍼
팩토리를 사용하십시오. 다음 코드 단편은 공고 헬퍼 팩토리를 사용하여
공고 헬퍼를 가져옵니다.
// Get notification helper factory from JNDI
InitialContext context = new InitialContext();
Object notificationHelperFactoryObject =
context.lookup("com/ibm/events/NotificationHelperFactory");
NotificationHelperFactory nhFactory = (NotificationHelperFactory)
PortableRemoteObject.narrow(notificationHelperFactoryObject,
NotificationHelperFactory.class);
// Create notification helper
NotificationHelper notificationHelper =
nhFactory.getNotificationHelper();
옵션: 이벤트 선택자를 지정하십시오. 수신된
이벤트를 필터링하려는 경우 setEventSelector() 메소드를 사용하여 공고 헬퍼에
이벤트 선택자를 설정할 수 있습니다. 그러면 이벤트 고객은 공고 헬퍼를 사용하여
이벤트 선택자에 대해 수신된 이벤트를 검사할 수 있습니다. 다음 코드 단편은 30(경고)보다
큰 심각도를 갖는 이벤트를 지정하는 이벤트 선택자를 설정합니다.
리스너의
onMessage() 메소드에서 공고 헬퍼를 사용하여 수신되는 각 JMS 메시지를
이벤트 공고를 포함하는 배열로 변환하십시오.
(이벤트가 공고 헬퍼에 지정된 이벤트 선택자와 일치하지 않는 경우
배열은 비어 있습니다.) 이벤트 공고는 EventNotification 인터페이스를
구현하는 클래스의 인스턴스입니다.
공고 유형을 검사하고 적합한 대로 이벤트 데이터를 검색하십시오. 각 이벤트 공고에는 공고 유형(그의 값이 NotificationHelper
인터페이스에 의해 정의되는 공고 유형 상수 중 하나인 정수)을
표시하는 필드가 있습니다. 현재 다음 세 가지 공고 유형이
지원됩니다.
공고 유형
설명
CREATE_EVENT
_NOTIFICATION_TYPE
새 이벤트가 목적지와 연관된 이벤트 그룹에
작성되었습니다. 이는 새 이벤트가 전송되었거나 기존
이벤트가 변경되어 이제 이벤트 그룹 정의와 일치함을
의미합니다. 공고에는 또한 전체 이벤트 데이터가 들어있습니다.
REMOVE_EVENT
_NOTIFICATION_TYPE
이벤트 데이터베이스에 저장된 이벤트는 목적지와
연관된 이벤트 그룹에서 제거되었습니다. 이는 이벤트가
이벤트 데이터베이스에서 삭제되었거나 기존 이벤트가 변경되어 더 이상
이벤트 그룹 정의와 일치하지 않음을 의미합니다. 공고에는 또한
삭제된 이벤트의 글로벌 인스턴스 ID가 들어있습니다.
UPDATE_EVENT
_NOTIFICATION_TYPE
이벤트 데이터베이스에 저장된 이벤트가 목적지와
연관된 이벤트 그룹에서 이벤트의 멤버쉽을 변경하지 않는 방법으로
갱신되었습니다. 공고에는 또한 전체 이벤트 데이터가 들어있습니다.
EventNotification의 getNotificationType() 메소드를 사용하여
수신되는 각 공고의 공고 유형을 검사하십시오. 공고 유형을 기초로,
이벤트 고객이 공고를 추가로 처리해야 하는지 여부 및 공고가 포함하는
이벤트 데이터의 유형을 판별할 수 있습니다.
공고 유형이 CREATE_EVENT_NOTIFICATION_TYPE 또는 UPDATE_EVENT_NOTIFICATION_TYPE인
경우 고객은 EventNotification.getEvent()를 사용하여 갱신되거나 새로운 이벤트의
검색을 시도할 수 있습니다. 이 메소드는 신규 또는 갱신된 이벤트 공고의
경우에만 유효합니다.
공고가 REMOVE_EVENT_NOTIFICATION_TYPE인 경우, 고객은
EventNotification.getGlobalInstanceId()를 사용하여 삭제된 이벤트의 글로벌
인스턴스 ID를 검색할 수 있습니다. 이 메소드는 삭제된 이벤트 공고의
경우에만 유효합니다.
for (int i = 0; i < notifications.length; i++)
{
int notifType = notifications[i].getNotificationType();
if(notifType == NotificationHelper.CREATE_EVENT_NOTIFICATION_TYPE)
{
CommonBaseEvent event = notifications[i].getEvent();
if (event != null) {
// process the new event
// ...
}
}
else if(notifType == NotificationHelper.UPDATE_EVENT_NOTIFICATION_TYPE)
{
CommonBaseEvent event = notifications[i].getEvent();
if (event != null) {
// process the updated event
// ...
}
}
else if(notifType == NotificationHelper.REMOVE_EVENT_NOTIFICATION_TYPE)
{
String eventId = notifications.[i].getGlobalInstanceId();
// process the event deletion
// ...
}
}
해당 전개 설명자에서 메시지 구동 Bean은 JMS 목적지와
연결 팩토리를 지정하는 리스너 포트와 연관되어야 합니다.
MDB를 전개하기 전에 이벤트 고객에 대한 리스너 포트를 작성하고,
이벤트를 수신하려는 이벤트 그룹과 연관된 목적지 및 연결
팩토리를 지정해야 합니다(이들은 이벤트 그룹 프로파일에
정의됩니다).
주: MDB를 전개할 때 CommonEventInfrastructure_ListenerPort
리스너 포트를 사용하지 마십시오. 이 리스너 포트는 이벤트 서버가 사용하며 이벤트 고객이 사용하지는
않습니다.