Exemplo: Efetuando Assinatura de um Consumidor do WS-Notification

Use esta tarefa para gravar o código de um cliente JAX-RPC usando a função de registro do publicador, registrando um aplicativo (produtor) do publicador com um broker, com base na extração do código de exemplo fornecida.

Sobre Esta Tarefa

Esse exemplo é baseado no uso de APIs Java™ API for XML-based remote procedure calls (JAX-RPC) com código gerado usando a ferramenta WSDL2Java (executada com relação ao WSDL do Broker de Notificação gerado como resultado da criação do ponto de serviço WS-Notification) e as APIs e SPIs do WebSphere Application Server.

No WebSphere Application Server existem duas implementações do serviço WS-Notification: Versão 6.1 e Versão 7.0. Este exemplo de JAX-RPC pode interagir com êxito com os pontos de serviço do WS-Notification Versão 6.1 ou Versão 7.0. No entanto, se quiser usar WS-Notification com conjuntos de políticas, por exemplo, para ativar a composição com WS-ReliableMessaging, seus aplicativos WS-Notification deverão ser codificados para usar o modelo de programação Java API for XML-based Web Services (JAX-WS) e deverão interagir com os pontos de serviço WS-Notification Versão 7.0. Se você for iniciante na programação de aplicativos clientes JAX-WS, consulte os seguintes tópicos: O artigo Gravando Aplicativos JAX-WS para WS-Notification inclui um exemplo de um aplicativo cliente assinante JAX-WS.
Assinaturas não processadas:

Neste exemplo, o primeiro bloco de código opcional mostra como criar uma assinatura não processada. Este conceito é definido na seção 4.2 da Especificação de Notificação Base de Serviços da Web.

No caso normal, uma assinatura agrupada faz com que a operação Notificar do NotificationConsumer seja acionada quando notificações de eventos correspondentes tornam-se disponíveis. Se o Assinante em vez disso, criar uma assinatura não processada, apenas o conteúdo específico do aplicativo da notificação de eventos (isto é, o conteúdo do elemento NotificationMessage) será enviado ao terminal do consumidor de destino. Observe que o terminal da web em serviço especificado na ConsumerReference da solicitação Subscribe que também especifica UseRaw (ou seja uma solicitação de assinatura não processada) não precisa implementar o tipo de porta NotificationConsumer, porque a operação Notificar não será usada para entrega r notificações de eventos.

Isso significa que o consumidor deve poder aceitar operações para cada um dos tipos de conteúdo do aplicativo que será publicado no tópico especificado. Essa padrão permite que o WS-Notification chame um grupo de aplicativos de serviços da web existentes que não reconhecem o WS-Notification, mas que desejam receber as mesmas informações.

O JAX-WS suporta despacho com base em ação e os aplicativos consumidores brutos JAX-WS devem aceitar o URI de ação http://docs.oasis-open.org/wsn/bw-2/NotificationConsumer/Notify. Para obter informações adicionais, consulte a dica de resolução de problemas Um aplicativo JAX-WS, que é um consumidor bruto das notificações processadas pelo intermediário, deve reconhecer uma ação SOAP do broker de notificação.

Para gravar o código de um cliente JAX-RPC que atua na função de registro do publicador, registrando um aplicativo (produtor) do publicador com um broker, conclua as etapas a seguir, consultando a extração do código de exemplo para obter informações adicionais.

Procedimento

  1. Procure o serviço JAX-RPC. O nome JNDI é específico de sua implementação do cliente de serviço da web.
  2. Obtenha um stub para a porta na qual deseja chamar operações.
  3. Crie a ConsumerReference. Contém o endereço do serviço da web do consumidor no qual está sendo inscrita ou uma referência a um ponto de Pull. A especificação de um EPR de ponto de Pull indica que o consumidor deve usar notificações baseadas em Pull.
  4. Crie o filtro. Fornece o nome do tópico no qual você deseja inscrever o consumidor.
  5. Crie uma expressão de tópico e inclua-a no filtro. Os prefixMappings são mapeamentos entre prefixos de namespace e seus namespaces correspondentes para os prefixos usados na expressão.
  6. Crie um filtro de conteúdo da mensagem XPath 1.0. Por exemplo, é possível selecionar um subconjunto das mensagens disponíveis no tópico, com base no nível salarial. Para obter um exemplo do uso do filtro de conteúdo da mensagem, consulte Filtrando o Conteúdo da Mensagem de Publicações.
  7. Crie o InitialTerminationTime. Este é o momento em que você deseja o término da assinatura. Por exemplo, é possível configurar um tempo de 1 ano no futuro.
  8. Crie as Informações da Política.
  9. Opcional: Construa uma política indicando que o consumidor deve receber notificações de estilo não processadas.
  10. Crie portadores que contenham os diversos valores retornados do broker:
    • A referência da assinatura
    • O horário atual no broker
    • O horário de rescisão da assinatura
    • Elementos adicionais
  11. Chame a operação Subscribe, chamado o método associado no stub.
  12. Obtenha os valores retornados:
    • Uma referência de terminal para a assinatura que foi criada. Isso é necessário para o gerenciamento do tempo de vida subsequente da assinatura, por exemplo, pausando a assinatura.
    • O horário atual no broker.
    • O horário de rescisão da assinatura.
    • Outras informações.

Exemplo

O código de exemplo a seguir descreve um aplicativo cliente assinante que pode assinar um aplicativo consumidor com um broker:
// Look up the JAX-RPC service. The JNDI name is specific to your web services client implementation
InitialContext context = new InitialContext();
javax.xml.rpc.Service service = (javax.xml.rpc.Service) context.lookup(
    "java:comp/env/services/NotificationBroker");

// Get a stub for the port on which you want to invoke operations
NotificationBroker stub = (NotificationBroker) service.getPort(NotificationBroker.class);

// Create the ConsumerReference. This contains the address of the consumer web service that is being
// subscribed, or alternatively is a reference to a pull point (see alternative below). Specifying a
// pull point EPR indicates that the consumer is to use pull-based notifications.
EndpointReference consumerEPR = 
    EndpointReferenceManager.createEndpointReference(new URI("http://myserver.mycom.com:9080/Consumer"));

/*
// ConsumerReference alternativa para notificações baseadas em solicitações.

EndpointReference consumerEPR = pullPointEPR;

*/

// Criar o Filtro. Fornece o nome do tópico para o qual você deseja efetuar assinatura do consumidor
Filter filter = new Filter();

// Criar uma expressão de tópico e incluí-la no filtro. Os prefixMappings são mapeamentos entre prefixos
// de espaços de nomes e seus espaços de nomes correspondentes para prefixos utilizados na expressão
Map prefixMappings = new HashMap();
prefixMappings.put("abc", "uri:example");
TopicExpression exp =
    new TopicExpression(TopicExpression.SIMPLE_TOPIC_EXPRESSION, "abc:ExampleTopic", prefixMappings);        
filter.addTopicExpression(exp);


//Create an XPath 1.0 message content filter
//This example selects a subset of the available messages in the topic, based upon salary level
String filterExpression = "/company/department/employee/salary > 10000";
URI xpathURI = new URI(http://www.w3.org/TR/1999/REC-xpath-19991116);

QueryExpression qexp = 
    new QueryExpression(xpathURI, filterExpression);

filter.addMessageContentExpression(qexp);

// Create the InitialTerminationTime. This is the time when you want the subscription to terminate.
// For example, set a time of 1 year in the future.
Calendar cal = Calendar.getInstance();
cal.add(Calendar.YEAR, 1);
AbsoluteOrRelativeTime initialTerminationTime = new AbsoluteOrRelativeTime(cal);

// Create the Policy information
SOAPElement[] policyElements = null;

/*
Optional
--------
The following lines show how to construct a policy indicating that the consumer is to 
receive raw style notifications:

    javax.xml.soap.SOAPFactory soapFactory = javax.xml.soap.SOAPFactory.newInstance();
    SOAPElement useRawElement = null;

    if (soapFactory instanceof IBMSOAPFactory) {
        // Você pode utilizar os métodos de inclusão de valores fornecidos pela API IBMSOAPFactory para criar o SOAPElement
        // a partir de uma cadeia XML.
       String useRawElementXML = "<mno:UseRaw xmlns:mno=\"http://docs.oasis-open.org/wsn/b-2\"/>";
        useRawElement = ((IBMSOAPFactory) soapFactory).createElementFromXMLString(useRawElementXML);
    } else {
        useRawElement = soapFactory.createElement("UseRaw", "mno", "http://docs.oasis-open.org/wsn/b-2");
    }

    policyElements = new SOAPElement[] { useRawElement };
*/

// Criar portadores para conter os diversos valores retornados do intermediário:
// A referência da assinatura
EndpointReferenceTypeHolder subscriptionRefHolder = new EndpointReferenceTypeHolder();

// A hora atual no intermediário
CalendarHolder currentTimeHolder = new CalendarHolder();

// A hora de término para a assinatura
CalendarHolder terminationTimeHolder = new CalendarHolder();

// Quaisquer elementos adicionais
AnyArrayHolder anyOtherElements = new AnyArrayHolder();

// Chamar a operação Subscribe chamando o método associado no stub
stub.subscribe(consumerEPR,
                       filter,
                       initialTerminationTime,
                       policyElements,
                       anyOtherElements,
                       subscriptionRefHolder,
                       currentTimeHolder,
                       terminationTimeHolder);

// Obter os valores retornados:
// Uma referência do terminal para a assinatura que foi criada. É requerida para
// gerenciamento de existência subseqüente da assinatura, por exemplo, pausar a assinatura
com.ibm.websphere.wsaddressing.EndpointReference subscriptionRef = subscriptionRefHolder.value;

// A hora atual no intermediário
Calendar currentTime = currentTimeHolder.value;

// A hora de término da assinatura
Calendar terminationTime = terminationTimeHolder.value;

// Quaisquer outras informações
SOAPElement[] otherElements = anyOtherElements.value;

Ícone que indica o tipo de tópico Tópico de Tarefa



Ícone de registro de data e hora Última atualização: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tjwsn_ex_sub
Nome do arquivo: tjwsn_ex_sub.html