Consumo de ActiveMQ en Pre



Documentos relacionados
1. Posicionarse en la vista Services y seleccionar el ítem Servers. En el menú contextual del Mouse seleccionar la opción Add Server

Servicios de Mensajes con JMS

Message Oriented Middleware: Java JMS

Java RMI. las RPC de Java. Parte I. Luis Fernando Llana Díaz. Departamento de Sistemas Informáticos y ProgramaciónUniversidad Complutense de Madrid

Taller de Sistemas de Información 2

1. Sistemas de colas de mensajes 2. Agentes móviles 3. Servicios de red 4. Espacios de objetos

Ejercicios de Introducción a JMS

Sistemas de colas de mensajes

Instalación del WebSigner 6.3

DISEÑO DE UNA ARQUITECTURA CLIENTE/SERVIDOR MEDIANTE OBJETOS DISTRIBUIDOS EN JAVA

Identificadores, palabras reservadas, tipos de datos, operadores aritméticos y el sistema estándar de salida en Java

Uso de excepciones en Java

Examen de Prácticas de Programación Ingeniería Informática

FUNDAMENTOS DE PROGRAMACIÓN. SEPTIEMBRE 2005

2) Cual modificador limita el acceso a un método de una clase pública a los miembros de la misma clase?

Introducción a JMS. Sistemas de Mensajería & JMS

Introducción a Java LSUB. 15 de enero de 2015 GSYC

LABORATORIO DE RC PRÁCTICA 2: IMPLEMENTACIÓN DE UN CLIENTE Y SERVIDOR DE

NIVEL 15: ESTRUCTURAS RECURSIVAS BINARIAS

HOJA DE EJERCICIOS 5 PROGRAMACIÓN CON EXCEPCIONES EN JAVA

Aportando contenido en UCM a través de Web Services

Multitarea en Java. Rafa Caballero - UCM

PRÁCTICA 3: COMPONENTES. Javier Sánchez Pérez Arquitectura del Software Grado en Informática

Solución al Examen de Prácticas de Programación (Ingeniería Informática)

Ejercicio 4. EJB Sesión - Sistema SGA. Java EE. Ejercicio 4. EJB Sesión Sistema SGA. Curso de Java EE

EXAMEN FINAL Metodología y Programación Orientada a Objetos. Curso Cuatrimestre de otoño. 17 de Enero de 2011

Práctica 2: Java Remote Method Invocation (RMI)

UNIVERSIDADE DA CORUÑA Departamento de Tecnoloxías da Información e as Comunicacións LABORATORIO DE RC: TUTORIAL DE SOCKETS EN JAVA

Proyecto de ISIII. Pruebas Extra. Pruebas de Caja Blanca

1. Creación del repositorio

EXCEPCIONES EN JAVA. Las sentencias que tratan las excepciones son try y catch. La sintaxis es:

Programación Orientada a Objetos. Java: Excepciones

Modulo conexión Cliente WS DGI

UNIVERSIDAD CARLOS III DE MADRID DEPARTAMENTO DE INGENIERÍA TELEMÁTICA. Daniel Díaz Sánchez

Práctica 4: Java Remote Method Invocation (RMI)

Transacciones. JMS y JavaEE

Manual del Protocolo XML-RPC de Mensajería Negocios

Introducción a JMS (Java Message Service)

Universidad ORT - Arquitectura de Software. Requisitos

Tema 14: Excepciones

ALTAS MANUAL DE USUARIO ENVÍO DE CORREOS ELECTRÓNICOS

Plugin para NetBeans que realiza migración de una base de datos postgresql a couchdb.

PROGRAMACIÓN EN JAVA

Formato para prácticas de laboratorio

Ficheros de acceso aleatorio

GESTIÓN DE EXCEPCIONES EN JAVA. CAPTURA CON BLOQUES TRY CATCH Y FINALLY. EJEMPLOS RESUELTOS. (CU00927C)

Práctica 5: Servidor web concurrente en Java

PROGRAMACIÓN CLIENTE-SERVIDOR MEDIANTE SOCKETS EN JAVA

ATLAS MANUAL DE INTEGRACIÓN

PROGRAMACIÓN ORIENTADA A OBJETOS 1/7/2009. Examen de Java. Nombre: DNI: Titulación:

Desarrollar, usando Java, un cliente básico del protocolo web que permita enviar una solicitud HTTP a un servidor web y procesar la respuesta.

PROGRAMACION DISTRIBUIDA MobileTracker: Ejemplo de implementación con RMI

Luego lleve el cliente a otra máquina y ejecute desde ahí usando el nombre de la máquina del servidor.

Parsear HTML con htmlparser para Android Guillem Pérez

ATLAS MANUAL DE INTEGRACIÓN Cliente del Servicio de SMS

Desarrollo de Aplicaciones para Android

CONFIGURACIÓN DEL NAVEGADOR PARA UTILIZAR LOS COMPONENTES DE FIRMA

2. Estructura de un programa en Java

Conexión de Mysql con NetBeans

Examen parcial Convocatoria de junio de 2005 FUNDAMENTOS DE LA PROGRAMACIÓN

Programación Orientada a Objetos. Java: Excepciones

Un breve resumen del lenguaje Java

Programación Concurrente en Java

1. Ejemplo de clase : La clase Cuenta 2. Uso de la clase Cuenta. 3. Métodos y objetos receptores de mensajes (Importante)

Elementos léxicos del lenguaje de programación Java

Sockets en Java. La Creatividad proviene de un conflicto de ideas. Uso de Sockets

USANDO SERVLETS EN UN SERVIDOR WEB RESIN

Google Cloud EndPoints (Parte II)

Introducción - por qué usarlas?(1)

APELLIDOS:... NOMBRE:... GRUPO:... NÚMERO DE EXPEDIENTE:...

Tutorial 1: Desarrollo de un plugin

Cliente/Servidor en Java

Objetivo de aprendizaje del tema

Tema 2. El lenguaje de programación Java (Parte 1)

Universidad Carlos III de Madrid Ingeniería de Telecomunicación. Examen de Programación Febrero Parte de Ejercicios

1.- FUNDAMENTOS FUNCIONAMIENTO GENÉRICO JAVA SOCKETS Creación de Streams de Entrada...7

Tutorial Envio de correos con Java Mail

MONITORES EN JAVA. Antonio Tomeu Control de la Concurrencia en Java: API Estándar

3.9 Patrón Distributed callback

JavaScript. Contenidos. Introducción El lenguaje Validación de formularios. Programación en Internet DLSI - Universidad de Alicante 1

Repaso de las características más importantes de la programación Java y su adaptación a Android

Laboratorio: Creación de un Message Driven Bean

Sockets en Java. Prof. Wílmer Pereira Universidad Simón Bolívar

Titulación: Ingeniero Técnico en Informática de Gestión Curso: 2º

Aplicación Android de Asistencia al Caminante

Primer Parcial Septiembre 5 de 2009

Manual Cliente CheckPoint-Secure Remote

Federico Peinado

Lo que necesitaremos para programar en Java, será un editor de texto o IDE y la JDK.

Manejo de Errores Ejercicio Facturas

Transcripción:

Interoperabilidad de los servicios telemáticos de la Administración Pública de la CAC Página 1 de 10 Consumo de ActiveMQ en Pre Documento de consumo Rev. Fecha Descripción 1 21/03/13 Primera versión de la documentación de las colas en Pre-Explotación. Documento PLA-DOC-FIN-13-03-21-Consumo de ActiveMQ en Ubicación en ecarpeta Oficina Técnica Platino > Seguimiento del proyecto > Actas e informes Preparado por Revisado por Aprobado por Alejandro Romero Carlos López Oficina Técnica de Platino Oficina Técnica de Platino DGTNT Fecha: 21/03/13 Fecha: 21/03/13 Fecha: 21/03/13

Página 2 de 10 ÍNDICE 1 INTRODUCCIÓN...3 2 MECANISMOS DE CONEXIÓN...4 2.1 Documentación...4 2.2 Ejemplo...4 2.2.1 Envío para queue...4 2.2.2 Recepción para queue...5 2.2.3 Utilidades...5 3 TOPICS HABILITADOS...9 4 QUEUES HABILITADAS EN PLATINO...10

Página 3 de 10 1 INTRODUCCIÓN El presente documento pretende mostrar los Topics y las Queues en ActiveMQ disponibles en Platino en el entorno de PRE-Explotación y la correcta conexión. El documento se estructura de la siguiente forma: Mecanismos de conexión. Topics habilitados. Queues habilitadas. En la nueva plataforma se encuentra instalado ActiveMQ 5.5.1-Fuse-10 en standalone, para la mensajeria JMS. Esta instalación se ha realizado en 2 nodos (quiquere1 y quiquere2), configurándolo en activo-pasivo.

Página 4 de 10 2 MECANISMOS DE CONEXIÓN 2.1 Documentación Actualmente existen muchos mecanismos de conexión estables con ActiveMQ. En este documento se presentará una opción de conexión en código Java como apoyo. A continuación se presentan la información que más se debe de tener en cuenta a la hora de realizar la conexión: La url de conexión se debe de indicar en modo failover. La conexión que se deberá utilizar es: failover: (ssl://quiquere1.gobiernodecanarias.net:61617,ssl://quiquere2.gobiernodeca narias.net:61617) ActiveMQ permite diferentes maneras de conexión a los topics y a las queues. En el caso que se nos presenta siempre se deberá de realizar la conexión en modo seguro SSL, por lo que tendremos que utilizar el certificado del aplicativo y el truststore, proporcionados por Platino en el procedimiento de obtención del certificado de consumo, para poder realizar la conexión. El cliente utilizado debe ser único por aplicativo, de manera que no se genere un nuevo suscriptor en cada nueva conexión. A continuación indicamos un ejemplo de envío y recepción de mensajes en una queue. 2.2 Ejemplo 2.2.1 Envío para queue try { jmsconnection = new JmsConnection("MiCliente", JmsConnection.SSL_CONNECTION, true); session = jmsconnection.createqueuesession(); destination = session.createqueue("queue/nombredelacola"); MessageProducer producer = session.createproducer(destination); TextMessage message = null; message = session.createtextmessage(); message.settext("prueba de mensaje"); message.setstringproperty(destinatario,destinatario); for (int i = 0; i < numeromensajes; i++) { producer.send(message); producer.close();

Página 5 de 10 catch (Exception e) { System.out.println(e.getMessage()); 2.2.2 Recepción para queue TextMessageHandler textmessagehandler = null; try { textmessagehandler = new TextMessageHandler(numeroMensajes); jmsconnection = new JmsConnection("MiCliente", JmsConnection.SSL_CONNECTION, true); jmssuscriber = new JmsSuscriber(jmsConnection, "queue/nombredelacola", true); jmssuscriber.receive(textmessagehandler, true); Assert.assertEquals("El numero mensajes leidos no es el esperado", numeromensajes, textmessagehandler.getmensajesrecibidos().size()); catch (Exception e) { System.out.println(e.getMessage()); 2.2.3 Utilidades JmsConnection public class JmsConnection { private static final String LOCALHOST = "localhost"; static Logger log = Logger.getLogger(JmsConnection.class.toString()); public static final int SSL_CONNECTION = 0; public static final int TCP_CONNECTION = 1; private ActiveMQConnectionFactory connectionfactory = null; private TopicConnection topicconnection; private QueueConnection queueconnection; /** * Constructor de una conexión JMS. * * @param clientid * clientid el clientid de la conexión * @param connectiontype * Tipo de conexión (SSL TCP) para establecer la cola a la que * se conecta * @param queue * Indica si es queue o no. * @throws Exception */ public JmsConnection(String clientid, int connectiontype, Boolean queue) throws Exception { connectionfactory = new ActiveMQConnectionFactory( geturlcolajms(connectiontype)); connectionfactory.setclientid(clientid); log.info("creando Conexión JMS. Autenticación mediante certificado"); queueconnection = connectionfactory.createqueueconnection(); log.info("clientid de la conexión: " + queueconnection.getclientid()); private String geturlcolajms(int connectiontype)

Página 6 de 10 throws FileNotFoundException, IOException { if (connectiontype == TCP_CONNECTION) { return geturlcolatcp(); return geturlcolassl(); private String geturlcolatcp() throws FileNotFoundException, IOException { String urlcolajms = null; urlcolajms = "failover: (tcp://quiquere1.gobiernodecanarias.net:61616,tcp://quiquere2.gobiernodecanarias.net:61616)"; log.info("cola TCP : '" + urlcolajms + "'"); return urlcolajms; private Properties getproperties(string file) throws FileNotFoundException, IOException { Properties properties = new Properties(); properties.load(new FileInputStream(file)); return properties; private String geturlcolassl() throws FileNotFoundException, IOException { String urlcolajms = null; Properties properties = getproperties("etc/jms/credenciales-ssl.properties"); System.setProperty("javax.net.ssl.keyStore", properties.getproperty("keystore")); System.setProperty("javax.net.ssl.keyStorePassword", properties.getproperty("keystorepassword")); System.setProperty("javax.net.ssl.keyStoreType", properties.getproperty("keystoretype")); System.setProperty("javax.net.ssl.keyStoreAlias", properties.getproperty("keystorealias")); System.setProperty("javax.net.ssl.trustStore", properties.getproperty("truststore")); System.setProperty("javax.net.ssl.trustStorePassword", properties.getproperty("truststorepassword")); urlcolajms = "failover: (ssl://quiquere1.gobiernodecanarias.net:61617,ssl://quiquere2.gobiernodecanarias.net:61617)"; log.info("cola SSL : '" + urlcolajms + "'"); return urlcolajms; public TopicSession createsession() throws JMSException { log.info("creando Session JMS"); return topicconnection.createtopicsession(false, Session.AUTO_ACKNOWLEDGE); public QueueSession createqueuesession() throws JMSException { log.info("creando Session JMS"); return queueconnection.createqueuesession(false, Session.AUTO_ACKNOWLEDGE); public void start() throws JMSException { topicconnection.start(); public void stop() throws JMSException { topicconnection.stop(); public void close() throws JMSException { log.info("cerrando conexiones"); if (topicconnection!= null) { topicconnection.close();

Página 7 de 10 public ActiveMQConnectionFactory getconnectionfactory() { return connectionfactory; public void setconnectionfactory(activemqconnectionfactory connectionfactory) { this.connectionfactory = connectionfactory; public TopicConnection gettopicconnection() { return topicconnection; public void settopicconnection(topicconnection topicconnection) { this.topicconnection = topicconnection; JmsSuscriber public class JmsSuscriber { static Logger log = Logger.getLogger(JmsSuscriber.class.toString()); private TopicSubscriber subscriber; private QueueReceiver queuereceiver; private JmsConnection jmsconnection; private int maxsegundosespera = 30; public JmsSuscriber(JmsConnection jmsconnection, String queuename, Boolean isqueue) throws JMSException { this.jmsconnection = jmsconnection; QueueSession queuesession = jmsconnection.createqueuesession(); Queue queue = queuesession.createqueue(queuename); queuereceiver = queuesession.createreceiver(queue); setmaxsegundosespera(maxsegundosespera); public void receive(jmsmessagehandler messagehandler, Boolean queue) throws JMSException { queuereceiver.setmessagelistener(messagehandler); try { jmsconnection.start(); log.info("esperando (max " + getmaxsegundosespera() + " segundos)"); for (int i = 0; i < getmaxsegundosespera(); i++) { Thread.sleep(1000L); if (messagehandler.detener()) { log.info("parando espera activa"); break; log.info("fin de Espera"); catch (InterruptedException e) { e.printstacktrace(); finally { jmsconnection.stop(); public void setmaxsegundosespera(int maxsegundosespera) { this.maxsegundosespera = maxsegundosespera;

Página 8 de 10 public int getmaxsegundosespera() { return maxsegundosespera; public TopicSubscriber getsubscriber() { return subscriber; public void setsubscriber(topicsubscriber subscriber) { this.subscriber = subscriber; TextMessageHandler public class TextMessageHandler extends JmsMessageHandler { static Logger log = Logger.getLogger(TextMessageHandler.class.toString()); private int expectedmessages = 0; private List<TextMessage> mensajesrecibidos; @Override public void onmessage(message message) { log.info(message.tostring()); if (message instanceof TextMessage) { try { TextMessage textmessage = (TextMessage) message; log.info("---> mensaje para: " + textmessage.getstringproperty("destinatario")); log.info("---> mensaje recibido: " + textmessage.gettext()); mensajesrecibidos.add(textmessage); catch (Exception e) { log.log(level.severe, "Error procesando mensaje JMS", e); public TextMessageHandler(int expectedmessages) { super(); this.expectedmessages = expectedmessages; mensajesrecibidos = new ArrayList<TextMessage>(); @Override public boolean detener() { log.log(level.fine, "Recibidos " + mensajesrecibidos.size() + " mensajes, esperados " + expectedmessages); return (mensajesrecibidos.size() == expectedmessages); public List<TextMessage> getmensajesrecibidos() { return mensajesrecibidos; public void setmensajesrecibidos(list<textmessage> mensajesrecibidos) { this.mensajesrecibidos = mensajesrecibidos;

Página 9 de 10 3 TOPICS HABILITADOS Actualmente Platino utiliza 4 topics para la comunicación entre los servicios y los backoffices, son los siguientes: Servicio Nombre del topic Documentación del servicio SST topic/tramitacion/backoffice http://www.gobiernodecanarias.org/platino/docs/soporte_tramitacion_telematic a.pdf 1 TERC topic/terceros/backoffice http://www.gobiernodecanarias.org/platino/docs/base_datos_terceros.pdf 2 SPF topic/portafirmas/backoffice http://www.gobiernodecanarias.org/platino/docs/portafirmas.pdf 3 NOTIF topic/enotificacion/backoffice http://www.gobiernodecanarias.org/platino/docs/notificaciones_electronicas.pd f 4 1 http://www.gobiernodecanarias.org/platino/docs/soporte_tramitacion_telematica.pdf 2 http://www.gobiernodecanarias.org/platino/docs/base_datos_terceros.pdf 3 http://www.gobiernodecanarias.org/platino/docs/portafirmas.pdf 4 http://www.gobiernodecanarias.org/platino/docs/notificaciones_electronicas.pdf

Página 10 de 10 4 QUEUES HABILITADAS EN PLATINO Actualmente Platino utiliza 1 queue para la comunicación entre los backoffices y los servicios, son los siguientes: Servicio Nombre del topic Documentación del servicio SST queue/backoffice/tramitacion http://www.gobiernodecanarias.org/platino/docs/soporte_tramitacion_telematic a.pdf 5 5 http://www.gobiernodecanarias.org/platino/docs/soporte_tramitacion_telematica.pdf