Das Ereignisquellenbeispiel, 'EventSource.java', ist eine einfache Ereignisquelle, die ein einzelnes fest codiertes Ereignis an die Web-Services sendet. Es demonstriert die folgenden Schritte, die eine Ereignisquelle befolgen muss:
Der Quellcode für 'EventSource.java' ist im Verzeichnis <sdk_install_dir>/samples/wsnt-was/src/com/wtci/samples/was/source
des SDK verfügbar.
In diesem Beispiel werden 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.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;
Die Methode main
von 'EventSource.java' erstellt mit dem Standardkonstruktor eine neue Instanz von 'EventSource'. Sie ruft dann die nicht öffentliche Methode 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 'createEvent()' von 'EventSource.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 createEvent
führt die folgenden Schritte aus:
Die anderen Eigenschaften, die vom Beispiel eingestellt werden (version, severity und msg), sind alle einfache Eigenschaften, die von Zeichenfolgen oder ganzen Zahlen dargestellt werden.
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' SOAPFactory soapFactory = new SOAPFactory(); SOAPElement topicSE = (SOAPElement) soapFactory.createElement("Topic"); SOAPElement topicSEChild = (SOAPElement) topicSE.addChildElement("Topic"); topicSEChild.setAttribute("dialect","none"); notificationArray[i].setTopic(topicSE); //Festlegen des Ereignisses als Nachricht des Hinweises 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); //Festlegen der Informationen zum Produzenten des Ereignisses im //Hinweis 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; }
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[] notification = createNotificationMessage(events); //Abrufen der Adresse des NotificationConsumerService-Web-Service 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 9080 für 'was' ausgeführt wird endpoint = "http://localhost:9080/wsnt-was/services/NotificationConsumer10Soap"; } //Erstellen eines URL-Objekts für die abgerufene Adresse java.net.URL serviceURL = new URL(endpoint); //Erstellen einer Instanz von 'NotificationConsumerServiceLocator' NotificationConsumerService notifierSvc = new NotificationConsumerServiceLocator(); NotificationConsumer notifier = notifierSvc.getNotificationConsumer10Soap(serviceURL); //Senden des Hinweises notifier.notify(notification); }
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