O exemplo da fonte de eventos é um código de amostra de um produtor de notificação do WS-Notification 1.0. Ele conta com as bibliotecas do Apache Axis e os projetos de código aberto do Eclipse TPTP.
Ele demonstra as seguintes etapas que uma fonte de eventos deve seguir:
O código fonte do EventSourceWsn10.java está disponível no diretório
<sdk_install_dir>/samples/wsnt-axis/src/com/wtci/samples/axis/source
.
Este exemplo utiliza várias classes Apache Axis, classes de log Eclipse Hyades, bem como classes geradas a partir dos arquivos wsdl. Utilize as seguintes instruções de importação para acessar os pacotes necessários:
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;
O método main
do EventSourceWsn10.java cria uma nova
instância de EventSourceWsn10 utilizando o construtor padrão. Ele chama então
o método sendEvent() privado, que contém a lógica do programa
principal. Depois que o método sendEvent() retorna, o método main() imprime a mensagem
"Notificação enviada" na saída padrão.
/** * Método principal da fonte de eventos. * * @param args * argumentos transmitidos a partir da linha de comandos */ public static void main(String args[]) { EventSourceWsn10 source = new EventSourceWsn10(); try { source.sendEvent(); System.out.println("Notificação enviada"); } catch (Exception e) { e.printStackTrace(); } }
O método createEvents
do EventSourceWsn10.java é um método
do assistente utilizado para criar um evento e preenchê-lo com um conjunto
mínimo de dados de propriedade. Esse método é chamado pelo método sendEvent
para criar o evento que será enviado aos Serviços da Web.
public static CommonBaseEvent[] createEvents() throws Exception { CommonBaseEvent[] events = null; String cbeFile = System.getProperty("cbe.file"); if (cbeFile != null) { events = EventFormatter.eventsFromCanonicalXMLDoc(cbeFile); } else { // A primeira etapa é acessar o depósito de informações do provedor do evento EventFactory eventFactory = EventFactoryFactory.createEventFactory(); // Criando um evento com um nome de extensão. Evento CommonBaseEvent = eventFactory.createCommonBaseEvent("EVENT"); event.setCreationTimeAsLong(System.currentTimeMillis()); // Definindo a descrição obrigatória da situação do evento. Situation situation = eventFactory.createSituation(); situation.setCategoryName(Situation.REPORT_SITUATION_CATEGORY); situation.setReportSituation("INTERNA", "Bem-sucedida"); event.setSituation(situation); // Definindo a identificação obrigatória do componente da // fonte de eventos event.setSourceComponentId("Fonte de Eventos", "source.EventSource", "createEvent()", "http://www.ibm.com/namespaces/autonomic/Tivoli/Samples", "Sample", "unknown", "hostname"); // Definindo a versão do Evento de Base Comum event.setVersion("1.0.1"); // Definindo os campos opcionais event.setSeverity((short) 10); event.setMsg("Tutorial da Infra-estrutura de Eventos Comuns"); events = new CommonBaseEvent[] { event }; } retornar eventos; }
O método createEvents
executa as seguintes etapas:
Nota:
Da mesma forma que situation, sourceComponentId também é uma propriedade complexa. Entretanto, suas propriedades filhas são todos atributos simples representados por cadeias, para que você possa utilizar o método do assistente setSourceComponentId() em vez de instanciar separadamente um objeto Java especializado.As outras propriedades definidas pelo exemplo (versão, gravidade e msg) são todas propriedades simples representadas por cadeias ou inteiros.
createEvents
retorna o evento,
que é agora preenchido com dados de propriedade.O próximo método do exemplo de fonte de eventos, createNotificationMessage(event), é um método do assistente utilizado para criar mensagem de notificação que encapsula o evento transmitido como parâmetro para o método. Esse método é chamado pelo método sendEvent para criar a mensagem de notificação que será enviada aos Serviços da Web.
public static NotificationMessageHolderType[] createNotificationMessage( CommonBaseEvent events[]) throws Exception { NotificationMessageHolderType[] notificationArray = new NotificationMessageHolderType[events.length]; for (int i = 0; i < events.length; i++) { //Criando uma instância de NotificationMessageHolderType notificationArray[i] = new NotificationMessageHolderType(); //Criando um elemento Tópico com o nome 'Tópico' e o valor //do atributo dialeto como 'tec' MessageElement[] msgTopic = new MessageElement[1]; msgTopic[0] = new MessageElement(); msgTopic[0].setName("Tópico"); msgTopic[0].setAttribute("dialeto", "nenhum"); TopicExpressionType topicExpType = new TopicExpressionType(); topicExpType.set_any(msgTopic); //Definindo o Tópico da notificação notificationArray[i].setTopic(topicExpType); //Definindo o evento para ser a mensagem da notificação notificationArray[i].setMessage(events[i]); //Definindo informações sobre o produtor do evento na //notificação EndpointReferenceType endPointRef = new EndpointReferenceType(); AttributedURI au = new AttributedURI(); URI value = new URI("protocolo", "your.event.source.address"); au.set_value(value); endPointRef.setAddress(au); notificationArray[i].setProducerReference(endPointRef); } retornar notificationArray; }
O createNotificationMessage(event) executa as seguintes etapas
O último método do exemplo da fonte de eventos, sendEvent(), contém a lógica do programa principal. Este método manipula toda a interação com o cliente NotificationConsumer, incluindo o envio do evento.
private void sendEvent() throws Exception { //A primeira etapa é criar um evento CommonBaseEvent[] events = createEvents(); //Criando a mensagem de notificação que encapsula o evento NotificationMessageHolderType[] notificationArray = createNotificationMessage(events); // Obtendo o endereço dos Serviços da Web do // NotificationConsumer10Service String endpoint = System.getProperty("service.address"); if (endpoint == null) { //Se nenhum endereço foi especificado, supõe-se que o serviço da Web esteja // em execução no host local na porta 8080 do eixo endpoint = "http://localhost:8080/axis/services/NotificationConsumer10Soap"; } //Criando um objeto URL para o endereço obtido URL serviceURL = new URL(endpoint); //Criando uma instância do NotificationConsumerServiceLocator NotificationConsumerService notifierSvc = new NotificationConsumerServiceLocator(); //Utilizando o NotificationConsumerService para obter // o objeto NotificationConsumer para o serviço NotificationConsumer notifier = notifierSvc.getNotificationConsumer10Soap(serviceURL); //Registrando uma instância do objeto CbeSerializer para serializar // objetos do //tipo CommonBaseEvent a ser enviado pela ligação 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); //Enviando a notificação notifier.notify(notificationArray); }
O método sendEvent() executa as seguintes etapas:
Tópicos Relacionados
Construindo as Amostras
Executando as Amostras
Conceitos Relacionados
Convertendo um Evento no Formato
Evento de Base Comum para o Formato de Evento do Console Corporativo