L'exemple de source d'événement est un exemple de code pour un fournisseur de notifications au format WS-Notification 1.0. Il est basé sur des bibliothèques des projets à source ouverte Apache Axis et Eclipse TPTP.
Il illustre les étapes suivantes que doit réaliser une source d'événement :
Le code source d'EventSourceWsn10.java est disponible dans le répertoire <répertoire_installation_sdk>/samples/wsnt-axis/src/com/wtci/samples/axis/source
.
Cet exemple utilise plusieurs classes Apache Axis, des classes de consignation Eclipse Hyades ainsi que des classes générées à partir de fichiers WSDL. Utilisez les instructions d'importation suivantes pour accéder aux modules requis :
import com.ibm.wtci.samples.axiswsn10.wsa.AttributedURI; import com.ibm.wtci.samples.axiswsn10.wsa.EndpointReferenceType; import com.ibm.wtci.samples.axiswsn10.wsn.NotificationConsumer; import com.ibm.wtci.samples.axiswsn10.wsn.NotificationConsumerService; import com.ibm.wtci.samples.axiswsn10.wsn.NotificationConsumerServiceLocator; import com.ibm.wtci.samples.axiswsn10.wsn.NotificationMessageHolderType; import com.ibm.wtci.samples.axiswsn10.wsn.TopicExpressionType; import org.apache.axis.encoding.TypeMapping; import org.apache.axis.encoding.TypeMappingRegistry; import org.apache.axis.message.MessageElement; import org.apache.axis.types.URI; import org.eclipse.hyades.logging.events.cbe.CommonBaseEvent; import org.eclipse.hyades.logging.events.cbe.EventFactory; import org.eclipse.hyades.logging.events.cbe.EventFactoryFactory; import org.eclipse.hyades.logging.events.cbe.Situation; import org.eclipse.hyades.logging.events.cbe.util.EventFormatter; import java.net.URL; import javax.xml.namespace.QName;
La méthode main
d'EventSourceWsn10.java crée une nouvelle instance d'EventSourceWsn10 à l'aide du constructeur par défaut. Elle appelle ensuite la méthode privée sendEvent(), qui contient la logique du programme principal. Une fois la méthode sendEvent() exécutée, la méthode main() envoie le message "Notification sent" (Notification envoyée) à la sortie standard.
/** * Méthode main de la source d'événement. * * @param args * arguments transmis à partir de la ligne de commande */ public static void main(String args[]) { EventSourceWsn10 source = new EventSourceWsn10(); try { source.sendEvent(); System.out.println("Notification sent"); } catch (Exception e) { e.printStackTrace(); } }
La méthode createEvents
d'EventSourceWsn10.java est une méthode auxiliaire permettant de créer un événement et de renseigner un ensemble minimum de propriétés de cet événement. Cette méthode est appelée par la méthode sendEvent
pour créer l'événement à envoyer aux services Web.
public static CommonBaseEvent[] createEvents() throws Exception { CommonBaseEvent[] events = null; String cbeFile = System.getProperty("cbe.file"); if (cbeFile != null) { events = EventFormatter.eventsFromCanonicalXMLDoc(cbeFile); } else { // La première étape consiste à accéder à la classe d'événement EventFactory eventFactory = EventFactoryFactory.createEventFactory(); // Création d'un événement avec un nom d'extension. CommonBaseEvent event = eventFactory.createCommonBaseEvent("EVENT"); event.setCreationTimeAsLong(System.currentTimeMillis()); // Définition de la description de situation obligatoire pour l'événement. Situation situation = eventFactory.createSituation(); situation.setCategoryName(Situation.REPORT_SITUATION_CATEGORY); situation.setReportSituation("INTERNAL", "Succeeded"); event.setSituation(situation); // Définiton de l'identification de composant obligatoire pour // la source d'événement event.setSourceComponentId("Event Source", "source.EventSource", "createEvent()", "http://www.ibm.com/namespaces/autonomic/Tivoli/Samples", "Sample", "unknown", "hostname"); // Définition de la version de l'événement de base commun event.setVersion("1.0.1"); // Définition des zones facultatives event.setSeverity((short) 10); event.setMsg("Common Event Infrastructure Tutorial"); events = new CommonBaseEvent[] { event }; } return events; }
La méthode createEvents
réalise les opérations suivantes :
Remarque :
Tout comme situation, sourceComponentId est une propriété complexe. Toutefois, ses propriétés secondaires étant toutes des attributs simples représentés par des chaînes, vous pouvez utiliser la méthode auxiliaire setSourceComponentId() plutôt que d'instancier séparément un objet Java spécial.Les autres propriétés définies par l'exemple (version, severity et msg) sont toutes des propriétés simples représentées par des chaînes ou des entiers.
createEvents
renvoie l'événement, pour lequel les propriétés sont désormais renseignées.La méthode suivante de l'exemple de source d'événement, createNotificationMessage(événement), est une méthode auxiliaire permettant de créer un message de notification encapsulant l'événement transmis sous forme de paramètre à la méthode. Cette méthode est appelée par la méthode sendEvent pour créer le message de notification à envoyer aux services Web.
public static NotificationMessageHolderType[] createNotificationMessage( CommonBaseEvent events[]) throws Exception { NotificationMessageHolderType[] notificationArray = new NotificationMessageHolderType[events.length]; for (int i = 0; i < events.length; i++) { //Création d'une instance de NotificationMessageHolderType notificationArray[i] = new NotificationMessageHolderType(); //Création d'un élément Topic avec le nom 'Topic' et la valeur //d'attribut de dialecte 'tec' MessageElement[] msgTopic = new MessageElement[1]; msgTopic[0] = new MessageElement(); msgTopic[0].setName("Topic"); msgTopic[0].setAttribute("dialect", "none"); TopicExpressionType topicExpType = new TopicExpressionType(); topicExpType.set_any(msgTopic); //Définition de l'élément Topic de la notification notificationArray[i].setTopic(topicExpType); //Définition de l'événement devant constituer le message de la notification notificationArray[i].setMessage(events[i]); //Définition des informations sur le fournisseur de l'événement dans //la notification EndpointReferenceType endPointRef = new EndpointReferenceType(); AttributedURI au = new AttributedURI(); URI value = new URI("protocol", "your.event.source.address"); au.set_value(value); endPointRef.setAddress(au); notificationArray[i].setProducerReference(endPointRef); } return notificationArray; }
La méthode createNotificationMessage(événement) réalise les opérations suivantes :
La dernière méthode de l'exemple de source d'événement, sendEvent(), contient la logique du programme principal. Cette méthode gère toutes les interactions avec le client NotificationConsumer, notamment l'envoi de l'événement.
private void sendEvent() throws Exception { //La première étape consiste à créer un événement CommonBaseEvent[] events = createEvents(); //Création du message de notification encapsulant l'événement NotificationMessageHolderType[] notificationArray = createNotificationMessage(events); // Obtention de l'adresse des services Web NotificationConsumer10Service String endpoint = System.getProperty("service.address"); if (endpoint == null) { //Si aucune adresse n'a été définie, le service est supposé être //exécuté sur l'hôte local au port 8080 pour Axis endpoint = "http://localhost:8080/axis/services/NotificationConsumer10Soap"; } //Création d'un objet URL pour l'adresse obtenue URL serviceURL = new URL(endpoint); //Création d'une instance de NotificationConsumerServiceLocator NotificationConsumerService notifierSvc = new NotificationConsumerServiceLocator(); //Utilisation de NotificationConsumerService pour obtenir //l'objet NotificationConsumer pour le service NotificationConsumer notifier = notifierSvc.getNotificationConsumer10Soap(serviceURL); //Enregistrement d'une instance de l'objet CbeSerializer pour la sérialisation //des objets //de type CommonBaseEvent à envoyer TypeMappingRegistry reg = (TypeMappingRegistry) notifierSvc.getTypeMappingRegistry(); TypeMapping tm = (TypeMapping) reg.getTypeMapping(endpoint); QName qn = new QName("http://www.ibm.com/AC/commonbaseevent1_0_1", "CommonBaseEvent"); tm.register(CommonBaseEvent.class, qn, new CbeSerializerFactory(), null); //Envoi de la notification notifier.notify(notificationArray); }
La méthode sendEvent() réalise les opérations suivantes :
Rubriques connexes
Génération des exemples
Exécution des exemples
Concepts associés
Conversion d'un événement du format d'événement de base commun au format d'événement Enterprise Console