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

Sviluppo di un event consumer non MDB

Un event consumer può essere creato anche utilizzando un bean non basato sui messaggi.

Perché e quando eseguire questa attività

Per scrivere un event consumer che non è un bean basato sui messaggi, 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 sull'helper 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. Utilizzare l'helper di notifica per individuare la destinazione JMS da sottoscrivere.

    È possibile associare ciascun gruppo eventi ad un unico argomento JMS e ad un qualsiasi numero di code JMS. È possibile interrogare l'helper di notifica per individuare quali destinazioni vengono associate ad un determinato gruppo eventi.

    Per individuare l'argomento associato ad un gruppo eventi, utilizzare il metodo getJmsTopic(String) di NotificationHelper, specificando il nome del gruppo eventi:
    MessagePort msgPort = notificationHelper.getJmsTopic("critical_events");
    Per individuare le code associate ad un gruppo eventi, utilizzare il metodo getJmsQueues(String):
    MessagePort[] msgPorts = notificationHelper.getJmsQueues("critical_events"); 
    L'oggetto restituito è un oggetto MessagePort singolo che rappresenta un argomento JMS o una matrice degli oggetti MessagePort che rappresentano le code JMS. Un'istanza MessagePort è un oggetto wrapper che contiene i nomi JNDI della destinazione e la propria produzione connessione.
  4. Collegarsi alla destinazione. Utilizzare i metodi getter dei MessagePort per richiamare i nomi JNDI della destinazione e della produzione connessioni. È possibile quindi utilizzare le interfacce JMS standard per collegarsi alla destinazione. Il frammento di codice riportato di seguito consente di sottoscrivere un argomento JMS:
    String connectionFactoryName = msgPort.getConnectionFactoryJndiName();
    String destinationName = msgPort.getDestinationJndiName();
    
    // creare connessione e sessione
    ConnectionFactory connectionFactory =
         (ConnectionFactory) context.lookup(connectionFactoryName);
    Connection connection = connectionFactory.createConnection();
    Session session = connection.createSesion(false,
                                              Session.CLIENT_ACKNOWLEDGE);
    
    // Creare consumer e registrare listener
    Topic topic = (Topic) context.lookup(destinationName);
    MessageConsumer consumer = session.createConsumer(topic);
    consumer.setMessageListener(this);
    connection.start();
  5. 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);
      // ...
  6. 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
        // ...
      }
    }

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_nonMDBEventConsumer.html

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