L'exemple de source d'événement, EventSource.java, est une source d'événement simple envoyant un événement unique codé en dur aux services Web. Il illustre les étapes suivantes que doit réaliser une source d'événement :
Le code source d'EventSource.java est disponible dans le répertoire <répertoire_installation_sdk>/samples/wsnt-was/src/com/wtci/samples/was/source
du kit de développement de logiciels.
Cet exemple utilise des classes de consignation 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.waswsn10.emitter.NotificationConsumerService; import com.ibm.wtci.samples.waswsn10.emitter.NotificationConsumerServiceLocator; import com.ibm.wtci.samples.waswsn10.wsn.NotificationConsumer; import com.ibm.wtci.samples.waswsn10.wsn.NotificationMessageHolderType; import com.ibm.ws.webservices.engine.xmlsoap.SOAPElement; import com.ibm.ws.webservices.engine.xmlsoap.SOAPFactory; 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;
La méthode main
d'EventSource.java crée une nouvelle instance d'EventSource à 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 createEvent() d'EventSource.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 createEvent
réalise les opérations suivantes :
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.
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 événement Topic nommé 'Topic' SOAPFactory soapFactory = new SOAPFactory(); SOAPElement topicSE = (SOAPElement) soapFactory.createElement("Topic"); SOAPElement topicSEChild = (SOAPElement) topicSE.addChildElement("Topic"); topicSEChild.setAttribute("dialect","none"); notificationArray[i].setTopic(topicSE); //Définition de l'événement devant constituer le message de la notification SOAPElement messageSE = (SOAPElement) soapFactory.createElement("Message"); messageSE.addNamespaceDeclaration("ns2", "http://www.ibm.com/AC/commonbaseevent1_0_1"); messageSE.addAttribute("http://www.w3.org/2001/XMLSchema-instance", "type", "ns2:CommonBaseEvent"); String cbeStr = EventFormatter.toCanonicalXMLString(events[i]); SOAPElement cbeSE = (SOAPElement) soapFactory.createElementFromXMLString(cbeStr); messageSE.addChildElement(cbeSE); notificationArray[i].setMessage(messageSE); //Définition des informations sur le fournisseur de l'événement dans //la notification SOAPElement producerSE = (SOAPElement) soapFactory.createElement("ProducerReference"); SOAPElement producerSEChild = (SOAPElement) soapFactory.createElement("Address", "ns1", "http://schemas.xmlsoap.org/ws/2003/03/addressing"); producerSEChild.addTextNode("protocol://your.event.source.address"); producerSE.addChildElement(producerSEChild); notificationArray[i].setProducerReference(producerSE); } 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[] notification = createNotificationMessage(events); //Obtention de l'adresse du service Web NotificationConsumerService String endpoint = System.getProperty("service.address"); if (endpoint == null) { //Si aucune adresse n'a été définie, le service Web est supposé être //exécuté sur l'hôte local au port 9080 pour WAS endpoint = "http://localhost:9080/wsnt-was/services/NotificationConsumer10Soap"; } //Création d'un objet URL pour l'adresse obtenue java.net.URL serviceURL = new URL(endpoint); //Création d'une instance de NotificationConsumerServiceLocator NotificationConsumerService notifierSvc = new NotificationConsumerServiceLocator(); NotificationConsumer notifier = notifierSvc.getNotificationConsumer10Soap(serviceURL); //Envoi de la notification notifier.notify(notification); }
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