Ejemplo: Registro de un editor WS-Notification
Utilice esta tarea para escribir el código para una aplicación de cliente de suscriptor que puede suscribirse a una aplicación consumidora con un intermediario, según el extracto del código de ejemplo proporcionado.
Acerca de esta tarea
Este ejemplo se basa en el uso de las API Java™ para las API de llamadas de procedimiento remoto basadas en XML (JAX-RPC) con el código generado mediante la herramienta WSDL2Java (se ejecuta en el WSDL del intermediario de notificaciones generado como resultado de crear el punto de servicio de WS-Notification) y las API y SPI de WebSphere Application Server.
Para escribir el código para una aplicación de cliente de suscriptor que puede suscribirse a una aplicación consumidora con un intermediario, lleve a cabo los pasos siguientes, haciendo referencia a la extracción de código de ejemplo para obtener más información.
Procedimiento
Ejemplo
El siguiente código de ejemplo representa un cliente JAX-RPC que actúa en el rol de registro del editor y registra una aplicación de editor (generador) con un intermediario.
// Busque el servicio JAX-RPC. El nombre JNDI es específico a su
implementación de cliente de servicios web
InitialContext context = new InitialContext();
javax.xml.rpc.Service service = (javax.xml.rpc.Service) context.lookup(
"java:comp/env/services/NotificationBroker");
// Obtenga un archivo de apéndice (stub) para el puerto en el que desea invocar las operaciones
NotificationBroker stub = (NotificationBroker) service.getPort(NotificationBroker.class);
// Cree una referencia para el editor (generador) que se está registrando. Ésta contiene la dirección del
// servicio web del generador.
EndpointReference publisherEPR =
EndpointReferenceManager.createEndpointReference(new URI("http://myserver.mysom.com:9080/Producer"));
// Cree una lista (matriz) de expresiones de tema para describir los temas a los cuales el generador publica
// mensajes. Para este ejemplo, añada un tema
Map prefixMappings = new HashMap();
prefixMappings.put("abc", "uri:mytopicns");
TopicExpression topic =
new TopicExpression(TopicExpression.SIMPLE_TOPIC_EXPRESSION, "abc:xyz", prefixMappings);
TopicExpression[] topics = new TopicExpression[] {topic};
// Indique que no desea que el editor utilice la publicación basada en demanda
Boolean demand = Boolean.FALSE;
// Establezca un valor para la fecha de finalización inicial del registro. Por
// ejemplo, establezca un valor de 1 año en
el futuro
Calendar initialTerminationTime = Calendar.getInstance();
initialTerminationTime.add(Calendar.YEAR, 1);
// Cree mantenimientos para conservar los valores múltiples devueltos del intermediario:
// PublisherRegistrationReference: Una referencia de punto final para su uso en la gestión
// del tiempo de existencia del registro
EndpointReferenceTypeHolder pubRegMgrEPR = new EndpointReferenceTypeHolder();
// ConsumerReference: Una referencia del punto final para utilizar en siguientes publicaciones de mensajes
EndpointReferenceTypeHolder consEPR = new EndpointReferenceTypeHolder();
// Invoque la operación RegisterPublisher mediante la llamada al método asociado en el archivo de apéndice (stub)
stub.registerPublisher(publisherEPR, topics, demand, initialTerminationTime, null, pubRegMgrEPR, consEPR);
// Recupere la PublisherRegistrationReference
EndpointReference registrationEPR = pubRegMgrEPR.value;
// Recupere la ConsumerReference
EndpointReference consumerReferenceEPR = consEPR.value;