Das Beispiel der Ereignisquelle ist ein Mustercode für einen WS-Notification 1.0-Hinweisproduzenten. Es hängt von Bibliotheken von den Open Source-Projekten von Apache Axis und Eclipse TPTP ab.
Es demonstriert die folgenden Schritte, die eine Ereignisquelle befolgen muss:
Der Quellcode für 'EventSourceWsn10.java' ist im Verzeichnis
<sdk_install_dir>/samples/wsnt-axis/src/com/wtci/samples/axis/source
verfügbar.
In diesem Beispiel werden mehrere Apache Axis-Klassen, Eclipse Hyades-Protokollierungsklassen sowie Klassen verwendet, die von den wsdl-Dateien generiert werden. Machen Sie von den folgenden Importanweisungen Gebrauch, um auf die erforderlichen Pakete zuzugreifen:
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;
Die Methode main
von 'EventSourceWsn10.java' erstellt mit dem Standardkonstruktor eine neue Instanz von 'EventSourceWsn10'. Sie ruft dann die Methode 'private sendEvent()' auf, welche die Logik des Hauptprogramms enthält. Nach Rückgabe der Methode 'sendEvent()' gibt die Methode 'main()' die Nachricht "Notification sent" (Hinweis gesendet) in der Standardausgabe aus.
/** * Hauptmethode für die Ereignisquelle. * * @param args * Argumente, die von der Befehlszeile übergeben werden */ public static void main(String args[]) { EventSourceWsn10 source = new EventSourceWsn10(); try { source.sendEvent(); System.out.println("Notification sent"); } catch (Exception e) { e.printStackTrace(); } }
Die Methode createEvents
von 'EventSourceWsn10.java' ist eine Unterstützungsmethode, die verwendet wird, um ein Ereignis zu erstellen und es mit einer minimalen Menge an Eigenschaftsdaten auszufüllen. Diese Methode wird von der Methode sendEvent
aufgerufen, um das Ereignis zu erstellen, das an die Web-Services gesendet wird.
public static CommonBaseEvent[] createEvents() throws Exception { CommonBaseEvent[] events = null; String cbeFile = System.getProperty("cbe.file"); if (cbeFile != null) { events = EventFormatter.eventsFromCanonicalXMLDoc(cbeFile); } else { // Der erste Schritt ist der Zugriff auf die Ereignisfactory EventFactory eventFactory = EventFactoryFactory.createEventFactory(); // Erstellen eines Ereignisses mit einer Erweiterung. CommonBaseEvent event = eventFactory.createCommonBaseEvent("EVENT"); event.setCreationTimeAsLong(System.currentTimeMillis()); // Festlegen einer obligatorischen Situationsbeschreibung für das Ereignis. Situation situation = eventFactory.createSituation(); situation.setCategoryName(Situation.REPORT_SITUATION_CATEGORY); situation.setReportSituation("INTERNAL", "Succeeded"); event.setSituation(situation); // Festlegen der obligatorischen Komponentenidentifikation für die // Ereignisquelle event.setSourceComponentId("Event Source", "source.EventSource", "createEvent()", "http://www.ibm.com/namespaces/autonomic/Tivoli/Samples", "Sample", "unknown", "hostname"); // Festlegen der Common Base Event-Version event.setVersion("1.0.1"); // Festlegen optionaler Felder event.setSeverity((short) 10); event.setMsg("Common Event Infrastructure Tutorial"); events = new CommonBaseEvent[] { event }; } return events; }
Die Methode createEvents
führt die folgenden Schritte aus:
Hinweis:
Genauso wie situation ist auch sourceComponentId eine komplexe Eigenschaft. Ihre untergeordneten Eigenschaften sind jedoch alle einfache Attribute, die von Zeichenfolgen dargestellt werden, damit Sie die Unterstützungsmethode 'setSourceComponentId()' verwenden können und nicht ein angepasstes Java-Objekt separat instantiieren müssen.Die anderen Eigenschaften, die vom Beispiel eingestellt werden (version, severity und msg), sind alle einfache Eigenschaften, die von Zeichenfolgen oder ganzen Zahlen dargestellt werden.
createEvents
das Ereignis zurück, das nun mit Eigenschaftsdaten ausgefüllt wird. Die nächste Methode des Ereignisquellenbeispiels - 'createNotificationMessage(event)' - ist eine Unterstützungsmethode, mit der eine Hinweisnachricht erstellt wird, welche das Ereignis einbindet, das als Parameter an die Methode übergeben wurde. Diese Methode wird von der Methode 'sendEvent' aufgerufen, um die Hinweisnachricht zu erstellen, die an die Web-Services gesendet wird.
public static NotificationMessageHolderType[] createNotificationMessage( CommonBaseEvent events[]) throws Exception { NotificationMessageHolderType[] notificationArray = new NotificationMessageHolderType[events.length]; for (int i = 0; i < events.length; i++) { //Erstellen einer Instanz von 'NotificationMessageHolderType' notificationArray[i] = new NotificationMessageHolderType(); //Erstellen eines Themenelements mit dem Namen 'Topic' und dem Wert des //Programmversionattributs als '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); //Festlegen des Themas des Hinweises notificationArray[i].setTopic(topicExpType); //Festlegen des Ereignisses als Nachricht des Hinweises notificationArray[i].setMessage(events[i]); //Festlegen der Informationen zum Produzenten des Ereignisses im //Hinweis 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; }
Die Methode 'createNotificationMessage(event)' führt die folgenden Schritte aus
Die letzte Methode des Ereignisquellenbeispiels - 'sendEvent()' - enthält die Logik des Hauptprogramms. Diese Methode handhabt sämtliche Interaktionen mit dem NotificationConsumer-Client, einschließlich dem Senden des Ereignisses.
private void sendEvent() throws Exception { //Der erste Schritt ist das Erstellen eines Ereignisses CommonBaseEvent[] events = createEvents(); //Erstellen der Hinweisnachricht, die das Ereignis einbindet NotificationMessageHolderType[] notificationArray = createNotificationMessage(events); // Abrufen der Adresse der NotificationConsumer10Service- // Web-Services String endpoint = System.getProperty("service.address"); if (endpoint == null) { //Wenn keine Adresse angegeben wurde, wird angenommen, dass der Web-Service // im lokalen Host unter Port 8080 für Axis ausgeführt wird endpoint = "http://localhost:8080/axis/services/NotificationConsumer10Soap"; } //Erstellen eines URL-Objekts für die erhaltene Adresse URL serviceURL = new URL(endpoint); //Erstellen einer Instanz von 'NotificationConsumerServiceLocator' NotificationConsumerService notifierSvc = new NotificationConsumerServiceLocator(); //Mit Hilfe von 'NotificationConsumerService' // NotificationConsumer-Objekt für den Dienst abrufen NotificationConsumer notifier = notifierSvc.getNotificationConsumer10Soap(serviceURL); //Registrieren einer Instanz des CbeSerializer-Objekts für Serialisierung von // Objekten des //Typs 'CommonBaseEvent', die über die Leitung geschickt werden sollen 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); //Senden des Hinweises notifier.notify(notificationArray); }
Die Methode 'sendEvent()' führt die folgenden Schritte aus:
Verwandte Themen
Beispiele erstellen
Beispiele ausführen
Zugehörige Konzepte
Ereignis im Common
Base Event-Format in das Enterprise Console-Ereignisformat konvertieren