L'esempio dell'origine di eventi, EventSource.java, è un semplice origine di eventi che invia un singolo evento prefissato in Web Services. Dimostra la seguente procedura a cui un'origine di evento deve attenersi:
Il codice di origine per EventSource.java è disponibile nella directory <sdk_install_dir>/samples/wsnt-was/src/com/wtci/samples/was/source
di SDK.
Questo esempio utilizza le classi di registrazione Hyades oltre alle classi generate dai file wsdl. Utilizzare le seguenti istruzioni import per accedere ai pacchetti richiesti:
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;
Il metodo principale
di EventSource.java crea una nuova istanza di
EventSource utilizzando il costruttore predefinito. Quindi richiama
il metodo sendEvent
privato, che contiene la logica del programma principale. Una volta restituito il metodo sendEvent
, il metodo main() stampa il messaggio "Notification sent" sull'output standard.
/** * Metodo principale per l'origine di eventi. * * @param args * argomenti trasferiti dalla riga comandi */ public static void main(String args[]) { EventSourceWsn10 source = new EventSourceWsn10(); try { source.sendEvent(); System.out.println("Notification sent"); } catch (Exception e) { e.printStackTrace(); } }
Il metodo createEvent() di EventSource.java è un metodo
di supporto utilizzato per creare un evento ed inserirlo con un gruppo minimo dei dati di proprietà. Questo metodo viene richiamato dal metodo sendEvent
per creare l'evento che sarà inviato a Web Services.
public static CommonBaseEvent[] createEvents() throws Exception { CommonBaseEvent[] events = null; String cbeFile = System.getProperty("cbe.file"); if (cbeFile != null) { events = EventFormatter.eventsFromCanonicalXMLDoc(cbeFile); } else { // Il primo passaggio accede alla produzione di eventi EventFactory eventFactory = EventFactoryFactory.createEventFactory(); // Creazione di un evento con un nome estensione. CommonBaseEvent event = eventFactory.createCommonBaseEvent("EVENT"); event.setCreationTimeAsLong(System.currentTimeMillis()); // Impostazione della descrizione di situation obbligatoria per l'evento. Situation situation = eventFactory.createSituation(); situation.setCategoryName(Situation.REPORT_SITUATION_CATEGORY); situation.setReportSituation("INTERNAL", "Succeeded"); event.setSituation(situation); // Impostazione dell'identificazione del componente obbligatorio per // l'origine di evento event.setSourceComponentId("Event Source", "source.EventSource", "createEvent()", "http://www.ibm.com/namespaces/autonomic/Tivoli/Samples", "Sample", "unknown", "hostname"); // Impostazione della versione di Common Base Event event.setVersion("1.0.1"); // Impostazione dei campi facoltativi event.setSeverity((short) 10); event.setMsg("Common Event Infrastructure Tutorial"); events = new CommonBaseEvent[] { event }; } return events; }
Il metodo createEvent
effettua la seguente procedura:
Le altre proprietà impostate dall'esempio (version, severity e msg) sono semplici proprietà rappresentate da stringhe o valori interi.
Il metodo successivo dell'esempio dell'origine di eventi, createNotificationMessage(event), è un metodo di supporto utilizzato per creare il messaggio di notifica che racchiude l'evento trasferito come parametro al metodo. Questo metodo viene richiamato dal metodo sendEvent per creare il messaggio di notifica che sarà inviato a Web Services.
public static NotificationMessageHolderType[] createNotificationMessage( CommonBaseEvent events[]) throws Exception { NotificationMessageHolderType[] notificationArray = new NotificationMessageHolderType[events.length]; for (int i = 0; i < events.length; i++) { //Creazione di un'istanza di NotificationMessageHolderType notificationArray[i] = new NotificationMessageHolderType(); //Creazione di un elemento Topic con il nome '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); //Impostazione dell'evento come messaggio della notifica 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); //Impostazione delle informazioni sul produttore dell'evento nella //notifica 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; }
Il metodo createNotificationMessage(event) effettua la seguente procedura:
L'ultimo metodo dell'esempio per l'origine di eventi, sendEvent(), contiene la logica di programma principale. Questo metodo gestisce tutte le interazioni con il client NotificationConsumer, incluso l'invio dell'evento.
private void sendEvent() throws Exception { //Il primo passaggio è la creazione di un evento CommonBaseEvent[] events = createEvents(); //Creazione del messaggio di notifica che racchiude l'evento NotificationMessageHolderType[] notification = createNotificationMessage(events); //Reperimento dell'indirizzo di NotificationConsumerService webservice String endpoint = System.getProperty("service.address"); if (endpoint == null) { // Se non è stato specificato alcun indirizzo, è previsto che webservice sia eseguito // nell'host locale sulla porta 9080 per was endpoint = "http://localhost:9080/wsnt-was/services/NotificationConsumer10Soap"; } //Creazione di un oggetto URL per l'indirizzo ottenuto java.net.URL serviceURL = new URL(endpoint); //Creazione di un'istanza di NotificationConsumerServiceLocator NotificationConsumerService notifierSvc = new NotificationConsumerServiceLocator(); NotificationConsumer notifier = notifierSvc.getNotificationConsumer10Soap(serviceURL); //Invio della notifica notifier.notify(notification); }
Il metodo sendEvent() effettua la seguente procedura:
Argomenti correlati
Creazione degli esempi
Esecuzione degli esempi
Concetti correlati
Conversione di un evento in formato Common Base Event in formato dell'evento di Enterprise Console