L'exemple de source d'événements, EventSource.java, est une source d'événements simple qui envoie un événement simple codé en dur aux services Web. Il illustre la procédure ci-dessous, qui doit être suivie par une source d'événements :
Le code source de EventSource.java est disponible dans le répertoire <sdk_install_dir>/samples/wsnt-was/src/com/wtci/samples/was/source
du SDK.
Cet exemple utilise des classes de journalisation Hyades ainsi que des classes générées à partir de fichiers WSDL. Utilisez les instructions d'importation ci-dessous pour accéder aux packages nécessaires :
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
de EventSource.java crée une instance de EventSource à l'aide du constructeur par défaut. Elle appelle ensuite la méthode privée sendEvent
, qui contient la logique de programme principale. Une fois que la méthode sendEvent
renvoie un résultat, la méthode main() imprime le message "Notification sent" (Notification envoyée) dans la sortie standard.
/** * Main method for the event source. * * @param args * arguments passed from the command line */ 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() de EventSource.java est une méthode auxiliaire utilisée pour créer un événement et le peupler avec un ensemble réduit de données de propriété.
Cette méthode est appelée par la méthode sendEvent
pour créer l'événement qui est envoyé 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 { // Première étape d'accès au magasin d'événements EventFactory eventFactory = EventFactoryFactory.createEventFactory(); // Création d'un événement sans 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éfinition de l'identification de composant obligatoire // pour la source d'événements event.setSourceComponentId("Event Source", "source.EventSource", "createEvent()", "http://www.ibm.com/namespaces/autonomic/Tivoli/Samples", "Sample", "unknown", "hostname"); // Définition de la version Common Base Event event.setVersion("1.0.1"); // Définition des champs facultatifs event.setSeverity((short) 10); event.setMsg("Common Event Infrastructure Tutorial"); events = new CommonBaseEvent[] { event }; } return events; }
La méthode createEvent
exécute cette procédure :
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énements, createNotificationMessage(event), est une méthode auxiliaire permettant de créer un message de notification qui encapsule l'événement transmis comme paramètre à la méthode. Cette méthode est appelée par la méthode sendEvent pour créer le message de notification qui est envoyé 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 de rubrique appelé "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 qui doit être 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 programme de génération 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(event) exécute cette procédure :
La dernière méthode de l'exemple de source d'événements, sendEvent(), contient la logique de programme principale. Cette méthode traite toutes les interactions avec le client NotificationConsumer, dont l'envoi de l'événement.
private void sendEvent() throws Exception { //Première étape de création d'un événement CommonBaseEvent[] events = createEvents(); //Création du message de notification qui encapsule 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é spécifiée, le service Web est censé // s'exécuter sur l'hôte local sur le 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() exécute cette procédure :
Rubriques connexes
Création des exemples
Exécution des exemples
Concepts associés
Conversion d'un événement au format Common
Base Event au format d'événement Enterprise Console