tel./fax: +34 91 675 33 06 [email protected] - … · 2014-09-11 · Ejecución de tests de...

6
Avenida de Castilla,1 - Edificio Best Point - Oficina 21B 28830 San Fernando de Henares (Madrid) tel./fax: +34 91 675 33 06 [email protected] - www.autentia.com Somos su empresa de Soporte a Desarrollo Informático. Ese apoyo que siempre quiso tener... 1. Desarrollo de componentes y proyectos a medida Tecnología Desarrollo Sistemas Gran Empresa Producción autentia Certificación o Pruebas Verificación previa RFP Concurso Consultora 1 Consultora 2 Consultora 3 Equipo propio desarrollo Piloto 3a 3b 1. Definición de frameworks corporativos. 2. Transferencia de conocimiento de nuevas arquitecturas. 3. Soporte al arranque de proyectos. 4. Auditoría preventiva periódica de calidad. 5. Revisión previa a la certificación de proyectos. 6. Extensión de capacidad de equipos de calidad. 7. Identificación de problemas en producción. 3. Arranque de proyectos basados en nuevas tecnologías ¿Qué ofrece Autentia Real Business Solutions S.L? Para más información visítenos en: www.autentia.com Compartimos nuestro conociemiento en: www.adictosaltrabajo.com Gestor portales (Liferay) Gestor de contenidos (Alfresco) Aplicaciones híbridas Tareas programadas (Quartz) Gestor documental (Alfresco) Inversión de control (Spring) BPM (jBPM o Bonita) Generación de informes (JasperReport) ESB (Open ESB) Control de autenticación y acceso (Spring Security) UDDI Web Services Rest Services Social SSO SSO (Cas) Spring MVC, JSF-PrimeFaces /RichFaces, HTML5, CSS3, JavaScript-jQuery JPA-Hibernate, MyBatis Motor de búsqueda empresarial (Solr) ETL (Talend) Dirección de Proyectos Informáticos. Metodologías ágiles Patrones de diseño TDD 2. Auditoría de código y recomendaciones de mejora 4. Cursos de formación (impartidos por desarrolladores en activo)

Transcript of tel./fax: +34 91 675 33 06 [email protected] - … · 2014-09-11 · Ejecución de tests de...

Page 1: tel./fax: +34 91 675 33 06 info@autentia.com - … · 2014-09-11 · Ejecución de tests de integración en aplicaciones OSGI con el soporte de Arquilian. 0. Índice de contenidos.

Avenida de Castilla,1 - Edificio Best Point - Oficina 21B28830 San Fernando de Henares (Madrid)

tel./fax: +34 91 675 33 [email protected] - www.autentia.com

Somos su empresa de Soporte a Desarrollo Informático.Ese apoyo que siempre quiso tener...

1. Desarrollo de componentes y proyectos a medida

TecnologíaDesarrolloSistemas

Gran Empresa

Producción

autentia

Certificacióno Pruebas

Verificación previa

RFP Concurso

Consultora 1

Consultora 2

Consultora 3

Equipo propio desarrolloPiloto

3a

3b

1. Definición de frameworks corporativos.2. Transferencia de conocimiento de nuevas arquitecturas.3. Soporte al arranque de proyectos.4. Auditoría preventiva periódica de calidad.5. Revisión previa a la certificación de proyectos.6. Extensión de capacidad de equipos de calidad.7. Identificación de problemas en producción.

3. Arranque de proyectos basados en nuevas tecnologías

¿Qué ofrece Autentia Real Business Solutions S.L?

Para más información visítenos en: www.autentia.com

Compartimos nuestro conociemiento en: www.adictosaltrabajo.com

Gestor portales (Liferay)Gestor de contenidos (Alfresco)Aplicaciones híbridas

Tareas programadas (Quartz)Gestor documental (Alfresco)Inversión de control (Spring)

BPM (jBPM o Bonita)Generación de informes (JasperReport)ESB (Open ESB)

Control de autenticación y acceso (Spring Security)UDDIWeb ServicesRest ServicesSocial SSOSSO (Cas)

Spring MVC, JSF-PrimeFaces /RichFaces, HTML5, CSS3, JavaScript-jQuery

JPA-Hibernate, MyBatisMotor de búsqueda empresarial (Solr)ETL (Talend)

Dirección de Proyectos Informáticos.Metodologías ágilesPatrones de diseñoTDD

2. Auditoría de código y recomendaciones de mejora

4. Cursos de formación (impartidos por desarrolladores en activo)

Page 2: tel./fax: +34 91 675 33 06 info@autentia.com - … · 2014-09-11 · Ejecución de tests de integración en aplicaciones OSGI con el soporte de Arquilian. 0. Índice de contenidos.

Entra en Adictos a través de

Entrar

Deseo registrarmeOlvidé mi contraseña

Inicio Quiénes somos Formación Comparador de salarios Nuestros libros Más

» Estás en: Inicio Tutoriales Ejecución de tests de integración en aplicaciones OSGI con el soporte de Ar...

Síguenos a travésde:

Catálogo de serviciosAutentia

Últimas Noticias

» 10º Aniversario de Autentia

» Técnicas de división dehistorias de usuario

» Dolomitas on Giro

» Comentando el libro: AgileManagement de AngelMedinilla

» Final de temporada deTerrakas Autentia freaklances

Histórico de noticias

Ver todos los tutoriales del autor

Jose Manuel Sánchez Suárez

Consultor tecnológico de desarrollo de proyectos informáticos.

Puedes encontrarme en Autentia: Ofrecemos servicios de soporte a desarrollo, factoría yformación

Somos expertos en Java/J2EE

Fecha de publicación del tutorial: 2013-09-12 Tutorial visitado 0 veces Descargar en PDF

Ejecución de tests de integración en aplicaciones OSGI con el soporte deArquilian.

0. Índice de contenidos.

1. Introducción.2. Entorno.3. Nuestro primer servicio: diferenciando entre tests unitarios y de integración.4. Creando nuestro primer servicio OSGI.5. Test de integración con el soporte de Arquilian.6. Referencias.7. Conclusiones.

1. Introducción

Hace poco ya vimos cómo ejecutar tests de integración con el soporte de Arquilian en aplicaciones Java bajo el entorno deCDI, el estandar de inyección de dependencias de JEE, y Weld, su implementación de referencia. En este tutorial vamos ahacer uso también de Arquilian pero para ejecutar tests de integración en aplicaciones java bajo un entorno OSGI.

OSGI (Open Services Gateway Initiative) define un sistema modular para las aplicaciones Java estableciendo un estandarpara la creación de servicios, empaquetados en módulos (bundles) y una forma de interactuar estos servicios entre sí entiempo de ejecución.

Esos bundles de OSGI no son más que las clásicas librerías o empaquetaciones, jars, que hacen uso de un fichero quedescribe las características que va a tener dentro del contenedor de OSGI: versión del bundle, servicios que expone yconsume,... ese fichero es el archifamoso MANIFEST.MF, que hasta ahora no habías usado para nada ;)

Algunas de las características básicas de un bundle dentro de un contenedor OSGI son las siguientes:

tiene su propio classloader independiente del resto de bundles, con lo que las librerías de una empaquetación noafectan a otras,la instalación, arranque, desinstalación de un bundle se realiza dinámicamente en tiempo de ejecución,se pueden facetar para que tengan características web y desplegar una aplicación web dinámica.

El contenedor OSGI por excelencia es Apache Equinox, la base del IDE Eclipse, pero existen otras alternativas open source ylos servidores de aplicaciones dan soporte para despliegue de las mismas como bundles de OSGI, así:

Apache FelixWeblogic de OracleWebsphere Application Server de IBM oWildFly AKA Jboss AS

Y hasta aquí vamos a llegar en relación a OSGI, ya entraremos en mayor detalle más adelante, porque en este primer tutorialsolo queremos exponer cómo realizar tests de integración de servicios OSGI con el soporte de un contenedor embebido,estableciendo una clara distinción entre que es un test unitario y en qué se diferencia de un test de integración.

2. Entorno.

El tutorial está escrito usando el siguiente entorno:

Hardware: Portátil MacBook Pro 15' (2.4 GHz Intel Core i7, 8GB DDR3 SDRAM).Sistema Operativo: Mac OS X Lion 10.7.4

MoreShareShareShareShareShareShare

Ejecución de tests de integración en aplicaciones OSGI con el... http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pag...

1 de 5 12/09/13 23:10

Page 3: tel./fax: +34 91 675 33 06 info@autentia.com - … · 2014-09-11 · Ejecución de tests de integración en aplicaciones OSGI con el soporte de Arquilian. 0. Índice de contenidos.

Últimos Tutoriales

» Introducción a SLF4J:Simple Logging Facade forJava.

» Comentando Management3.0, de Jurgen Appelo

» Un vistazo a Django WebFramework

» Introducción a XQuery conejemplos

» Contando mi experiencia enlos talleres gratuitos de Apple

Últimos Tutoriales delAutor

» Introducción a SLF4J:Simple Logging Facade forJava.

» Ejecución de tests unitarioscon junit en proyectos ant y suintegración en jenkins y sonarpara medir la cobertura.

» Soporte en Sonar para unproyecto multi-lenguaje:configuración desde Jenkins

» Instalación de Redmine(Bitnami) e integración conSubversion.

» Análisis de los sentimientosen twitter con el soporte deApicultur.

Últimas ofertas deempleo

2011-09-08Comercial - Ventas -MADRID.

2011-09-03Comercial - Ventas -VALENCIA.

2011-08-19Comercial - Compras -ALICANTE.

2011-07-12Otras Sin catalogar -MADRID.

2011-07-06Otras Sin catalogar -LUGO.

Java(TM) SE Runtime Environment (build 1.7.0_11-b21)

3. Nuestro primer servicio: diferenciando entre tests unitarios y de integración.

Vamos a comenzar con el test, que es lo que toca:

Bueno, ya estamos en ROJO y sí, nuestro servicio va a ser tan simple.

Y ahora vamos a crear nuestro servicio que cumpla con los requisitos del test:

Si ejecutamos el test pasaríamos a VERDE, lo refactorizaremos más adelante cuando elevemos esta calculadora al nivel deun servicio OSGI.

¿Demasiado simple?, pues esto es un test unitario. Si nuestra calculadora dependiera de otro servicio deberíamos mockearlo,si no, no es un test unitario.

4. Creando nuestro primer servicio OSGI.

Ya tenemos un servicio simple y queremos exponerlo como un servicio OSGI dentro del contenedor en el que se ejecutan elresto de bundles para que puedan hacer uso del mismo.

Lo primero que vamos a hacer que crear una interfaz para nuestra calculadora puesto que va a ser la interfaz del servicio laque vamos a exponer en el bundle, de hecho ya habíamos reducido la visibilidad del servicio a nivel de paquete.

Esta es nuestra interfaz de servicio:

Y modificamos el servicio marcándolo para que implemente la interfaz:

El último paso es exponer el servicio en el contenedor y para ello debemos registrarlo en el contexto de bundles, añadiéndoloa la clase Activator, esta clase es la que se marca en el MANIFEST.MF como Bundle-Activator:

Bundle-Activator: com.autentia.osgi.tutorial.Activator

El contenido de la clase sería el siguiente:

123456789

101112131415161718

package com.autentia.osgi.tutorial; import static org.junit.Assert.assertEquals; import org.junit.Test; public class CalculadoraTest { @Test public void dadoDosEnterosCuandoSeSumaDevuelveLaAdiccionDeLosMismos() { final Calculadora calculadora = new Calculadora(); assertEquals(5, calculadora.suma(3, 2)); } }

123456789

package com.autentia.osgi.tutorial; class Calculadora { public int suma(int x, int y) { return x + y ; } }

123456

package com.autentia.osgi.tutorial; public interface CalculadoraService { int suma (int x, int y); }

123456789

package com.autentia.osgi.tutorial; class Calculadora implements CalculadoraService{ public int suma(int x, int y) { return x + y ; } }

123456789

101112131415

package com.autentia.osgi.tutorial; import org.osgi.framework.BundleActivator;import org.osgi.framework.BundleContext;import org.osgi.framework.ServiceRegistration; public class Activator implements BundleActivator { ServiceRegistration<?> serviceRegistration; public void start(BundleContext context) { serviceRegistration = context.registerService(CalculadoraService.class.getName(), } public void stop(BundleContext context) {

?

?

?

?

?

Ejecución de tests de integración en aplicaciones OSGI con el... http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pag...

2 de 5 12/09/13 23:10

Page 4: tel./fax: +34 91 675 33 06 info@autentia.com - … · 2014-09-11 · Ejecución de tests de integración en aplicaciones OSGI con el soporte de Arquilian. 0. Índice de contenidos.

Ya lo tenemos, ¿y ahora cómo lo probamos?, ¿levantamos el servidor de aplicaciones para probarlo?; en nuestro caso elservicio es muy atómico, pero si dependiese de otro servicio o tuviera más dependencias del contenedor osgi, ¿comoaseguramos su funcionalidad?. La respuesta es un test de integración que permita recuperar la interfaz del servicio delcontenedor sin estar acoplado con la implementación concreta.

5. Test de integración con el soporte de Arquilian.

Lo primero, como siempre, es añadir las dependencias de las librerías necesarias para ejecutar el test de integración en elámbito de test que, usando maven, bastará con incluir las siguientes en nuestro pom.xml.

Si recordamos del tutorial de Arquilian la implementación concreta del contenedor en la que se ejecutarán las pruebas sedescubre automáticamente del classloader, no es necesario configurar nada más, si bien, usando como hacemos elcontenedor de OSGI de Jboss, necesitamos incluir en el path del entorno de test.

un fichero arquilian.xml con el siguiente contenido:

un fichero jbosgi-framework.properties en el path indicado en el fichero anterior con el siguiente contenido:

Ya lo tenemos todo y ahora, vamos con el código del test:

16171819

serviceRegistration.unregister(); } }

123456789

1011121314151617181920212223

<dependency> <groupId>org.jboss.arquillian.junit</groupId> <artifactId>arquillian-junit-container</artifactId> <scope>test</scope></dependency><dependency> <groupId>org.jboss.arquillian.container</groupId> <artifactId>arquillian-osgi-embedded</artifactId> <version>2.0.0.CR4</version> <scope>test</scope></dependency><dependency> <groupId>org.jboss.osgi.framework</groupId> <artifactId>jbosgi-framework-core</artifactId> <version>3.0.0.CR1</version> <scope>test</scope></dependency><dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.10</version> <scope>test</scope></dependency>

123456789

<arquillian xmlns="http://jboss.org/schema/arquillian" xmlns:xsi="http://www.w3.org/2001/XMLSchema-in xsi:schemaLocation="http://jboss.org/schema/arquillian http://jboss.org/schema/arquillian/arquill <container qualifier="jboss" default="true"> <configuration> <property name="frameworkProperties">src/test/resources/jbosgi-framework.properties</ </configuration> </container></arquillian>

123456

# Properties to configure the Frameworkorg.osgi.framework.storage=./target/osgi-storeorg.osgi.framework.storage.clean=onFirstInit # Extra System Packagesorg.osgi.framework.system.packages.extra=org.jboss.logging;version\=3.0,org.slf4j;version\=1.6

123456789

101112131415161718192021222324252627282930313233

package com.autentia.osgi.tutorial; import static org.junit.Assert.assertEquals;import static org.junit.Assert.assertNotNull; import java.io.InputStream; import org.jboss.arquillian.container.test.api.Deployment;import org.jboss.arquillian.junit.Arquillian;import org.jboss.arquillian.test.api.ArquillianResource;import org.jboss.osgi.metadata.OSGiManifestBuilder;import org.jboss.shrinkwrap.api.ShrinkWrap;import org.jboss.shrinkwrap.api.asset.Asset;import org.jboss.shrinkwrap.api.spec.JavaArchive;import org.junit.Test;import org.junit.runner.RunWith;import org.osgi.framework.Bundle;import org.osgi.framework.BundleContext;import org.osgi.framework.ServiceReference; @RunWith(Arquillian.class)public class CalculadoraIntegrationTest{ @Deployment public static JavaArchive createdeployment() { final JavaArchive archive = ShrinkWrap.create(JavaArchive.class, "test.jar"); archive.addClasses(Calculadora.class, CalculadoraService.class, Activator.class); archive.setManifest(new Asset() { public InputStream openStream() { OSGiManifestBuilder builder = OSGiManifestBuilder.newInstance(); builder.addBundleSymbolicName(archive.getName()); builder.addBundleManifestVersion(2); builder.addBundleVersion("1.0.0");

?

?

?

?

Ejecución de tests de integración en aplicaciones OSGI con el... http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pag...

3 de 5 12/09/13 23:10

Page 5: tel./fax: +34 91 675 33 06 info@autentia.com - … · 2014-09-11 · Ejecución de tests de integración en aplicaciones OSGI con el soporte de Arquilian. 0. Índice de contenidos.

Share | 0

» Registrate y accede a esta y otras ventajas «

Anímate y coméntanos lo que pienses sobre este TUTORIAL:

A destacar:

el método marcado con la anotación @Deployment crea la empquetación del bundle "al vuelo" con las clases quequeremos probar, y del mismo modo se crea y se da contenido al MANIFEST.MF,el método anotado con @Test recibe como parámetro la instancia del bundle desplegado, lo arrancamos invocando almétodo start y podemos recuperar los servicios que contiene para testarlos.

Termina probando lo mismo que comprobábamos con el test unitario, pero obteniendo el servicio del contexto de OSGI delcontenedor embebido, con lo que estamos probando tambien la lógica de la clase Activator y, lo más importante, dejamosabierta la vía para comprobar el resto de servicios que sí tienen dependencias con otros servicios expuestos por el mismo uotros bundles.

6. Referencias.

http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=CDIWeldArquilianhttp://www.javahispano.org/storage/contenidos/OSGI_Roberto_Montero.pdf

7. Conclusiones.

No creais que nos faltaría nada más, puesto que como con Arquilian seleccionamos las clases que formarán parte del bundle,podemos mockear la lógica de clases o servicios que dependan de infraestructuras de entorno.

Espero que os sea de utilidad.

Un saludo.

Jose

[email protected]

A continuación puedes evaluarlo:

Regístrate para evaluarlo

Por favor, vota +1 o compártelo si te pareció interesante

3435363738394041424344454647484950515253545556575859

builder.addBundleActivator(Activator.class.getName()); return builder.openStream(); } }); return archive; } @Test public void dadoDosEnterosCuandoSeSumaDevuelveLaAdiccionDeLosMismos(@ArquillianResource assertNotNull("Bundle injected", bundle); bundle.start(); assertEquals("Bundle ACTIVE", Bundle.ACTIVE, bundle.getState()); BundleContext context = bundle.getBundleContext(); final ServiceReference sref = context.getServiceReference(CalculadoraService.class final CalculadoraService calculadora = (CalculadoraService) context.getService(sref); assertNotNull("Service not null", calculadora); assertEquals(5, calculadora.suma(3, 2)); } }

Ejecución de tests de integración en aplicaciones OSGI con el... http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pag...

4 de 5 12/09/13 23:10

Page 6: tel./fax: +34 91 675 33 06 info@autentia.com - … · 2014-09-11 · Ejecución de tests de integración en aplicaciones OSGI con el soporte de Arquilian. 0. Índice de contenidos.

Esta obra está licenciada bajo licencia Creative Commons de Reconocimiento-No comercial-Sin obras derivadas 2.5

Copyright 2003-2013 © All Rights Reserved | Texto legal y condiciones de uso | Banners | Powered by Autentia | Contacto

Ejecución de tests de integración en aplicaciones OSGI con el... http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pag...

5 de 5 12/09/13 23:10