L'esempio dell'origine di eventi è un codice di esempio per un produttore di notifica WS-Notification 1.0. Si basa sulle librerie dei progetti open source di Apache Axis e Eclipse TPTP.
Dimostra la seguente procedura a cui un'origine di evento deve attenersi:
Il codice di origine per EventSourceWsn10.java è disponibile nella directory
<sdk_install_dir>/samples/wsnt-axis/src/com/wtci/samples/axis/source
.
Questo esempio utilizza diverse classi Apache Axis, le classi di registrazione Eclipse Hyades oltre alle classi generate dai file wsdl. Utilizzare le seguenti istruzioni import per accedere ai pacchetti richiesti:
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;
Il metodo principale
di EventSourceWsn10.java crea una nuova istanza di
EventSourceWsn10 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 createEvents
di EventSourceWsn10.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 createEvents
effettua la seguente procedura:
Nota:
come situation, sourceComponentId è una proprietà complessa. Tuttavia, le proprietà secondarie sono semplici attributi rappresentati da stringhe, quindi è possibile utilizzare il metodo di supporto setSourceComponentId() piuttosto che l'inizializzazione separata di un oggetto Java specializzato.Le altre proprietà impostate dall'esempio (version, severity e msg) sono semplici proprietà rappresentate da stringhe o valori interi.
createEvents
restituisce l'evento,
che è inserito con i dati di proprietà.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' e il valore dell'attributo //dialect come '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); //Impostazione di Topic della notifica notificationArray[i].setTopic(topicExpType); //Impostazione dell'evento come messaggio della notifica notificationArray[i].setMessage(events[i]); //Impostazione delle informazioni sul produttore dell'evento nella //notifica 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; }
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[] notificationArray = createNotificationMessage(events); // Reperimento dell'indirizzo di NotificationConsumer10Service // Web Services 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 8080 per axis endpoint = "http://localhost:8080/axis/services/NotificationConsumer10Soap"; } //Creazione di un oggetto URL per l'indirizzo ottenuto URL serviceURL = new URL(endpoint); //Creazione di un'istanza di NotificationConsumerServiceLocator NotificationConsumerService notifierSvc = new NotificationConsumerServiceLocator(); //Utilizzo di NotificationConsumerService per ottenere l'oggetto // NotificationConsumer per il servizio NotificationConsumer notifier = notifierSvc.getNotificationConsumer10Soap(serviceURL); //Registrazione di un'istanza dell'oggetto CbeSerializer per serializzare // gli oggetti di tipo //CommonBaseEvent da inviare alla connessione 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); //Invio della notifica notifier.notify(notificationArray); }
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