L'exemple de source d'événements est un exemple de code pour un programme de génération de notification WS-Notification 1.0. Il utilise des bibliothèques des projets Open Source Apache Axis et Eclipse TPTP.
Il illustre la procédure ci-dessous, qui doit être suivie par une source d'événements :
Le code source de EventSourceWsn10.java est disponible dans le répertoire <sdk_install_dir>/samples/wsnt-axis/src/com/wtci/samples/axis/source
.
Cet exemple utilise plusieurs classes Apache Axis, classes de journalisation Eclipse Hyades et 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.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
de EventSourceWsn10.java crée une instance de EventSourceWsn10 à 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 createEvents
de EventSourceWsn10.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 createEvents
exécute cette procédure :
Remarque :
Comme situation, sourceComponentId est également une propriété complexe. Cependant, ses propriétés enfants sont toutes des attributs simples représentés par des chaînes, afin que vous puissiez utiliser la méthode auxiliaire setSourceComponentId() au lieu d'instancier séparément un objet Java spécialisé.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, qui est maintenant peuplé avec les données de propriété.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", avec 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 la rubrique de la notification notificationArray[i].setTopic(topicExpType); //Définition de l'événement qui doit être le message de la notification notificationArray[i].setMessage(events[i]); //Définition des informations du programme de génération de l'événement //de 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(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 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é spécifiée, le service Web est censé // s'exécuter sur l'hôte local sur le port 8080 pour Apache 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 d'objet CbeSerializer pour la // sérialisation des objets de type // CommonBaseEvent à envoyer sur le câble 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() 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