WebSphere WebSphere Enterprise Service Bus, Version 6.0.1 Sistemi operativi: AIX, HP-UX, Linux, Solaris, Windows

Sviluppo di un event consumer come bean basato sui messaggi (MDB, Message-Driven Bean)

Un event consumer J2EE viene implementato come bean basato sui messaggi, associato a una destinazione JMS e una produzione connessioni al momento della distribuzione. Per ricevere gli eventi, seguire le operazioni riportate di seguito:

Passi per questa attività

  1. Richiamare un helper di notifica. Un event consumer JMS utilizza un helper di notifica per identificare le destinazioni JMS associate a un gruppo eventi, per convertire i messaggi JMS ricevuti in notifiche di eventi e per eseguire il filtraggio degli eventi ricevuti. Per ottenere un helper di notifica, utilizzare una produzione helper di notifica, che è un'istanza di NotificationHelperFactory che è stata collegata ad uno spazio nomi JNDI. Il frammento di codice riportato di seguito consente di utilizzare una produzione helper di notifica per richiamare un helper di notifica.
    // Richiamare una produzione helper di notifica da JNDI
    InitialContext context = new InitialContext();
    Object notificationHelperFactoryObject = 
      context.lookup("com/ibm/events/NotificationHelperFactory");
    NotificationHelperFactory nhFactory = (NotificationHelperFactory)
      PortableRemoteObject.narrow(notificationHelperFactoryObject,
                                  NotificationHelperFactory.class);
    
    // Creare l'helper di notifica
    NotificationHelper notificationHelper =
      nhFactory.getNotificationHelper();
                                          
  2. Opzionale: specificare il selettore eventi. Se si desidera filtrare gli eventi ricevuti, è possibile utilizzare il metodo SetEventSelector() per impostare un selettore eventi sul supporto di notifica. L'event consumer può, quindi, utilizzare l'helper di notifica per controllare gli eventi ricevuti sul selettore eventi. Il frammento di codice riportato di seguito consente di impostare un selettore eventi che specifica gli eventi con una gravità maggiore di 30 (avvertenza).
    notificationHelper.setEventSelector("CommonBaseEvent[@severity > 30]");
  3. Convertire i messaggi ricevuti in notifiche di eventi.

    Nel metodo onMessage() del listener, utilizzare l'helper di notifica per convertire ogni messaggio JMS ricevuto in una array contenente una notifica di evento. (Se l'evento non corrisponde al selettore eventi specificato nell'helper di notifica, la array è vuota). Una notifica di evento è un'istanza di una classe che implementa l'interfaccia EventNotification.

    public void onMessage(Message msg) {
      EventNotification[] notifications =
                          notificationHelper.getEventNotifications(msg);
      // ...
  4. Verificare il tipo di notifica e richiamare i dati di evento come appropriato. Ogni notifica di evento ha un campo che rappresenta il tipo di notifica (un numero intero il cui valore è una delle costanti di tipo di notifica definite dall'interfaccia NotificationHelper). Sono attualmente supportati tre tipi di notifica:
    Tipo di notifica Descrizione

    CREATE_EVENT

    _NOTIFICATION_TYPE

    Un nuovo evento è stato creato nel gruppo eventi associato alla destinazione. Questo significa che un nuovo evento è stato inviato oppure che un evento esistente è stato modificato in modo tale che ora corrisponda alla definizione di gruppo eventi. La notifica contiene anche i dati di evento completi.

    REMOVE_EVENT

    _NOTIFICATION_TYPE

    Un evento memorizzato nel database eventi è stato rimosso dal gruppo eventi associato alla destinazione. Questo significa che un evento è stato eliminato dal database eventi oppure che un evento esistente è stato modificato in modo tale da non corrispondere più alla definizione di gruppo eventi. La notifica contiene anche l'identificativo dell'istanza globale dell'evento eliminato.

    UPDATE_EVENT

    _NOTIFICATION_TYPE

    Un evento memorizzato nel database eventi è stato aggiornato in un modo che non ne modifica l'appartenenza nel gruppo eventi associato alla destinazione. La notifica contiene anche i dati di evento completi.
    Utilizzare il metodo getNotificationType() di EventNotification per verificare il tipo di notifica di ciascuna notifica ricevuta. In base al tipo di notifica, è possibile determinare se l'event consumer deve elaborare ulteriormente la notifica e quale tipo di dati di evento contiene la notifica:
    • Se il tipo di notifica è CREATE_EVENT_NOTIFICATION_TYPE o UPDATE_EVENT_NOTIFICATION_TYPE, il consumer può utilizzare EventNotification.getEvent() per provare a richiamare l'evento nuovo o aggiornato. Questo metodo è valido solo per le notifiche di eventi nuovi o aggiornati.
    • Se la notifica è REMOVE_EVENT_NOTIFICATION_TYPE, il consumer può utilizzare EventNotification.getGlobalInstanceId() per richiamare l'identificativo dell'istanza globale dell'evento eliminato. Questo metodo è valido solo per le notifiche di eventi eliminati.
    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) {
          // elaborare il nuovo evento
          // ...
        }
      }
    
      else if(notifType == NotificationHelper.UPDATE_EVENT_NOTIFICATION_TYPE)
      {
        CommonBaseEvent event = notifications[i].getEvent();
        if (event != null) {
          // elaborare l'evento aggiornato
          // ...
        }
      }
    
      else if(notifType == NotificationHelper.REMOVE_EVENT_NOTIFICATION_TYPE)
      {
        String eventId = notifications.[i].getGlobalInstanceId();
        // elaborare eliminazione evento
        // ...
      }
    }

Operazioni successive

Nel descrittore di distribuzione, è necessario associare un bean basato sui messaggi ad una porta listener, che specifica una destinazione JMS e una produzione connessioni. Occorre creare una porta listener per il proprio event consumer prima di distribuire l'MDB, specificando la destinazione e la produzione connessioni associate al gruppo eventi da cui si desidera ricevere gli eventi (definiti nel profilo gruppo eventi).
Nota: non utilizzare la porta listener CommonEventInfrastructure_ListenerPort durante la distribuzione dell'MDB. Questa porta listener viene utilizzata dal server degli eventi e non dagli event consumer.

Task topic

Condizioni di utilizzo | Valuta questa pagina

Timestamp iconUltimo aggiornamento: 5 Mar 2006
http://publib.boulder.ibm.com/infocenter/dmndhelp/v6rxmx/index.jsp?topic=/com.ibm.websphere.wesb.doc.nl1_6.0.1\doc\tcei_admin_MDBEventConsumer.html

(C) Copyright IBM Corporation 2005. Tutti i diritti riservati.
Questo information center è sviluppato con tecnologia Eclipse. (http://www.eclipse.org)