Con el uso de CDI, para la inyección de dependencias, y la consolidación de la plataforma Arquillian, ya no hay excusas en la plataforma Java EE para el desarrollo de pruebas.
Cómo incluir videoconferencia en tu web usando la tecnología WebRTC y servidores de media open source y comerciales. Se explora en más detalle OpenVidu, una plataforma de videoconferencias con ediciones open source y comerciales
Testeando aplicaciones Kubernetes: escalabilidad y tolerancia a fallosMicael Gallego
Kubernetes se ha convertido en una de las plataformas preferidas para la puesta en producción de aplicaciones escalables y tolerantes a fallos. Estas características son muy interesantes, pero suponen un reto para los sistemas de integración continua. ¿Cómo se prueba de forma automática que una aplicación se comporta como se espera cuando existen fallos o cuando la carga crece de forma importante? Y si no lo hace, cuál es el motivo? El Caos testing nos ayuda a simular fallos (matar contenedores, cortar la red...) pero además necesitamos monitorizar la aplicación para conocer su comportamiento interno. En la presentación damos un repaso por las técnicas y herramientas más utilizadas en este ámbito.
Curso de Angular 9 para desarrollo de aplicaciones SPA (Single Page Application).
● Tema 1: Introducción a Angular: TypeScript y herramientas
● Tema 2: Componentes
● Tema 3: REST y Servicios
● Tema 4: Aplicaciones multipágina: Router
● Tema 5: Librerías de componentes
● Tema 6: Publicación
Dev Tools para Kubernetes - Codemotion 2019Micael Gallego
Charla impartida entre Pablo Chico y Micael Gallego en la que se muestran algunas herramientas para mejorar la experiencia de desarrollo de aplicaciones cloud native para Kubernetes. Concretamente, se presenta cómo okteto puede reducir el tiempo empleado en el ciclo de change, build, push, deploy de pods Java en Kubernetes usando la sincronización de ficheros.
Ejemplos de código en https://github.com/micaelgallego/k8s-dev-tools-codemo19
En esta presentación se describe la tecnología WebRTC y el servidor de media Kurento. Se ilustran diferentes tipos de aplicaciones que pueden desarrollarse con esta tecnología, como un espejo mágico y un completo sistema de videoconferencia en grupo.
This is the presentation we gave at Spring 2GX Madrid. It shows how Grails helped us to improve our productivity and why Grails is not that bounded to Groovy and how it can be an outstanding alternative if you are a 100% Java company.
Kubernetes es una plataforma cada vez más utilizada para poner en producción aplicaciones y servicios. Todos los grandes proveedores cloud la ofrecen y también puede instalarse on premises. En estas slides presentaremos los concetos básicos de la plataforma y aprenderemos a desplegar aplicaciones.
Las slides se han usado en un curso gratuito que ha sido grabado y publicado aquí: https://www.youtube.com/watch?v=5ovqsvqwtZM
Cómo incluir videoconferencia en tu web usando la tecnología WebRTC y servidores de media open source y comerciales. Se explora en más detalle OpenVidu, una plataforma de videoconferencias con ediciones open source y comerciales
Testeando aplicaciones Kubernetes: escalabilidad y tolerancia a fallosMicael Gallego
Kubernetes se ha convertido en una de las plataformas preferidas para la puesta en producción de aplicaciones escalables y tolerantes a fallos. Estas características son muy interesantes, pero suponen un reto para los sistemas de integración continua. ¿Cómo se prueba de forma automática que una aplicación se comporta como se espera cuando existen fallos o cuando la carga crece de forma importante? Y si no lo hace, cuál es el motivo? El Caos testing nos ayuda a simular fallos (matar contenedores, cortar la red...) pero además necesitamos monitorizar la aplicación para conocer su comportamiento interno. En la presentación damos un repaso por las técnicas y herramientas más utilizadas en este ámbito.
Curso de Angular 9 para desarrollo de aplicaciones SPA (Single Page Application).
● Tema 1: Introducción a Angular: TypeScript y herramientas
● Tema 2: Componentes
● Tema 3: REST y Servicios
● Tema 4: Aplicaciones multipágina: Router
● Tema 5: Librerías de componentes
● Tema 6: Publicación
Dev Tools para Kubernetes - Codemotion 2019Micael Gallego
Charla impartida entre Pablo Chico y Micael Gallego en la que se muestran algunas herramientas para mejorar la experiencia de desarrollo de aplicaciones cloud native para Kubernetes. Concretamente, se presenta cómo okteto puede reducir el tiempo empleado en el ciclo de change, build, push, deploy de pods Java en Kubernetes usando la sincronización de ficheros.
Ejemplos de código en https://github.com/micaelgallego/k8s-dev-tools-codemo19
En esta presentación se describe la tecnología WebRTC y el servidor de media Kurento. Se ilustran diferentes tipos de aplicaciones que pueden desarrollarse con esta tecnología, como un espejo mágico y un completo sistema de videoconferencia en grupo.
This is the presentation we gave at Spring 2GX Madrid. It shows how Grails helped us to improve our productivity and why Grails is not that bounded to Groovy and how it can be an outstanding alternative if you are a 100% Java company.
Kubernetes es una plataforma cada vez más utilizada para poner en producción aplicaciones y servicios. Todos los grandes proveedores cloud la ofrecen y también puede instalarse on premises. En estas slides presentaremos los concetos básicos de la plataforma y aprenderemos a desplegar aplicaciones.
Las slides se han usado en un curso gratuito que ha sido grabado y publicado aquí: https://www.youtube.com/watch?v=5ovqsvqwtZM
Madrid-GUG (Alicante) 2017 - De Java a Groovy: ¡Hora de Aventuras!Iván López Martín
Groovy es un lenguaje dinámico para la JVM y la evolución natural para un programador Java debido a su baja curva de aprendizaje.
Si quieres saber por qué programar con Groovy es una Hora de Aventuras, esta es tu charla. Aprenderás a través de ejemplos las principales características que hacen de Groovy un lenguaje tan potente y versatil: tipado dinámico, closures, manejo de listas y mapas, power asserts, builders, metaprogramación, scripting, DSL's, transformaciones AST y muchas más.
Te aseguro que después de la charla tendrás ganas de profundizar y utilizarlo en tu día a día.
Microservicios sobre tecnologías Pivotal y VMwareAntonio Gallego
Presentación del meetup celebrado el 28-10-2015 en Madrid. Este meetup práctico se centró en tecnologías Spring, Pivotal Cloud Foundry y VMware.
Vimos la estructura de 4 microservicios escritos con Spring Boot. Éstos utilizó Spring Cloud para conectar a bases de datos de backend y Spring MVC para utilizar APIs RESTful. Los microservicios se registran automáticamente y descubren otros microservicios utilizando Eureka.
Todos estos servicios se ejecutaron en Cloud Foundry, plataforma cloud native que funciona, entre otras, sobre tecnologías de VMware como vSphere, VMware Integrated Openstack y vCloud Air. Vimos qué ventajas aporta cada tecnología y sus avanzadas herramientas de administración del ciclo de vida del microservicio, como VMware vRealize Code Stream.
Pivotal Cloud Foundry incorpora de forma nativa autoescalado, balanceo de cargas, inyección de configuraciones, monitorización de la salud de las apps y servicios, contenedores, logging. Es la tecnología perfecta para apps agile.
Html5, Rest, JSON, Angular JS y Java EE 7 - Aplicaciones Web Modernas y Esca...Eudris Cabrera
Mi presentación en el BarCamp RD 2014, celebrado el 29 de noviembre del 2014, Campus Pontificia Universidad Católica Madre y Maestra, Santiago de los Caballeros, República Dominicana.
OpenVidu es una plataforma para incorporar videoconferencia y video streaming en tus aplicaciones web. Es muy fácil de usar y tienes multitud de ejemplos con diferentes tecnologías. Además, es open source. Qué más se puede pedir?
En estas charla pongo un poco de orden en el mundo de Jenkins Pipeline, la nueva sintaxis para definir jobs en Jenkins. Hablaremos de las bases y progresaremos hasta llegar a las cosas más chulas que Pipeline nos proporciona.
Mecanismos y patrones para acelerar adopción en arquitecturas de microserviciosSoftware Guru
En esta charla explico tanto los problemas que se presentan asi como el patron y/o mecanismo para resolverlos dentro del contexto de microservicios.
Presentada por Miguel Enriquez en SG Virtual Conference 2020
Codemotion Madrid 2016 - De Java a Groovy: ¡Hora de Aventuras!Iván López Martín
Groovy es un lenguaje dinámico para la JVM y la evolución natural para un programador Java debido a su baja curva de aprendizaje.
Si quieres saber por qué programar con Groovy es una Hora de Aventuras, esta es tu charla.
Aprenderás a través de ejemplos las principales características que hacen de Groovy un lenguaje tan potente y versatil: tipado dinámico, closures, manejo de listas y mapas, power asserts, builders, metaprogramación, scripting, DSL's, transformaciones AST y muchas más.
Te aseguro que después de la charla tendrás ganas de profundizar y utilizarlo en tu día a día.
Breve introducción práctica al DevOps - (es) 2021_03_18Young Suk Ahn Park
DevOps es un cambio de cultura que acelera el ciclo de desarrollo de software sin comprometer la calidad. Esta diapositiva hace una breve introducción al DevOps con ejemplos concretos de proceso y herramientas.
Scala @RealLife es una presentación ofrecida durante el Codemotion 2014 en Madrid que habla acerca de la realidad de Scala y el ecosistema de Typesafe en la actualidad.
Slides de la charla "Carrera de fondo: la continuada lucha de AngularJS" realizada en el CodeMotion 2015 (Madrid). En ella se hace una introducción al desarrollo frontend, librerías más utilizadas y panorama actual.
Después de una breve introducción al funcionamiento de Backbone se realiza el desarrollo y la exposición de los conceptos del framework a nivel básico y medio.
Los ejemplos desarrollados para esta charla están alojados en github: https://github.com/semagarcia/angularjs-codemotion-2015
Te has preguntado alguna vez ¿Existe vida después de ActiveRecord::Base? si es así, en esta charla vamos descubrir que Rails es algo más que un simple MVC, es un framework repleto de herramientas cuyo conocimiento nos va a facilitar enormemente la vida.
Con estas herramientas vas a poder extender Rails de una forma que no habías imaginado hasta ahora: crearas tus propios validadores, responders y renderers; serás capaz de enviar datos por streaming, de interceptar mails o añadir un nuevo middleware a tu stack.
Queremos mostrar 10 de estas herramientas junto con ejemplos de uso de cada una de ellas, para que las puedas incorporar poco a poco en tu día a día y descubras el mundo de posibilidades que realmente tienes en tus manos.
El conjunto de herramientas que vamos a mostrar es:
ActiveModel::Model
ActiveModel::Validator
ActiveSupport::Concern
ActionSupport::Notifications
ActionController::Renderers
ActionController::Responder
ActionController::Live
ActionView::Resolvers
ActionMailer Interceptors
Rack Middleware
Node.js es una tecnología cada vez más popular para el desarrollo de servicios web. Grandes abanderados de Java como Netflix están usando cada vez más JavaScript para implementar parte de su backend. Pese a esta realidad, muchos javeros como yo no quieren tocar JavaScript ni con un palo, y cuando hay que hacerlo, sólo en el browser.
Si eres javero y no te gusta JavaScript, en esta presentación tendrás una visión general sobre cómo desarrollar servicios web con Node.js. Verás cómo con TypeScript, async/await y frameworks como Nest y TypeORM no echarás de menos a Spring y JPA. Pero lo mismo pasa al revés, verás cómo en Java también puedes implementar apps con los mismos principios reactivos y funcionales tan comunes en Node.js.
Madrid-GUG (Alicante) 2017 - De Java a Groovy: ¡Hora de Aventuras!Iván López Martín
Groovy es un lenguaje dinámico para la JVM y la evolución natural para un programador Java debido a su baja curva de aprendizaje.
Si quieres saber por qué programar con Groovy es una Hora de Aventuras, esta es tu charla. Aprenderás a través de ejemplos las principales características que hacen de Groovy un lenguaje tan potente y versatil: tipado dinámico, closures, manejo de listas y mapas, power asserts, builders, metaprogramación, scripting, DSL's, transformaciones AST y muchas más.
Te aseguro que después de la charla tendrás ganas de profundizar y utilizarlo en tu día a día.
Microservicios sobre tecnologías Pivotal y VMwareAntonio Gallego
Presentación del meetup celebrado el 28-10-2015 en Madrid. Este meetup práctico se centró en tecnologías Spring, Pivotal Cloud Foundry y VMware.
Vimos la estructura de 4 microservicios escritos con Spring Boot. Éstos utilizó Spring Cloud para conectar a bases de datos de backend y Spring MVC para utilizar APIs RESTful. Los microservicios se registran automáticamente y descubren otros microservicios utilizando Eureka.
Todos estos servicios se ejecutaron en Cloud Foundry, plataforma cloud native que funciona, entre otras, sobre tecnologías de VMware como vSphere, VMware Integrated Openstack y vCloud Air. Vimos qué ventajas aporta cada tecnología y sus avanzadas herramientas de administración del ciclo de vida del microservicio, como VMware vRealize Code Stream.
Pivotal Cloud Foundry incorpora de forma nativa autoescalado, balanceo de cargas, inyección de configuraciones, monitorización de la salud de las apps y servicios, contenedores, logging. Es la tecnología perfecta para apps agile.
Html5, Rest, JSON, Angular JS y Java EE 7 - Aplicaciones Web Modernas y Esca...Eudris Cabrera
Mi presentación en el BarCamp RD 2014, celebrado el 29 de noviembre del 2014, Campus Pontificia Universidad Católica Madre y Maestra, Santiago de los Caballeros, República Dominicana.
OpenVidu es una plataforma para incorporar videoconferencia y video streaming en tus aplicaciones web. Es muy fácil de usar y tienes multitud de ejemplos con diferentes tecnologías. Además, es open source. Qué más se puede pedir?
En estas charla pongo un poco de orden en el mundo de Jenkins Pipeline, la nueva sintaxis para definir jobs en Jenkins. Hablaremos de las bases y progresaremos hasta llegar a las cosas más chulas que Pipeline nos proporciona.
Mecanismos y patrones para acelerar adopción en arquitecturas de microserviciosSoftware Guru
En esta charla explico tanto los problemas que se presentan asi como el patron y/o mecanismo para resolverlos dentro del contexto de microservicios.
Presentada por Miguel Enriquez en SG Virtual Conference 2020
Codemotion Madrid 2016 - De Java a Groovy: ¡Hora de Aventuras!Iván López Martín
Groovy es un lenguaje dinámico para la JVM y la evolución natural para un programador Java debido a su baja curva de aprendizaje.
Si quieres saber por qué programar con Groovy es una Hora de Aventuras, esta es tu charla.
Aprenderás a través de ejemplos las principales características que hacen de Groovy un lenguaje tan potente y versatil: tipado dinámico, closures, manejo de listas y mapas, power asserts, builders, metaprogramación, scripting, DSL's, transformaciones AST y muchas más.
Te aseguro que después de la charla tendrás ganas de profundizar y utilizarlo en tu día a día.
Breve introducción práctica al DevOps - (es) 2021_03_18Young Suk Ahn Park
DevOps es un cambio de cultura que acelera el ciclo de desarrollo de software sin comprometer la calidad. Esta diapositiva hace una breve introducción al DevOps con ejemplos concretos de proceso y herramientas.
Scala @RealLife es una presentación ofrecida durante el Codemotion 2014 en Madrid que habla acerca de la realidad de Scala y el ecosistema de Typesafe en la actualidad.
Slides de la charla "Carrera de fondo: la continuada lucha de AngularJS" realizada en el CodeMotion 2015 (Madrid). En ella se hace una introducción al desarrollo frontend, librerías más utilizadas y panorama actual.
Después de una breve introducción al funcionamiento de Backbone se realiza el desarrollo y la exposición de los conceptos del framework a nivel básico y medio.
Los ejemplos desarrollados para esta charla están alojados en github: https://github.com/semagarcia/angularjs-codemotion-2015
Te has preguntado alguna vez ¿Existe vida después de ActiveRecord::Base? si es así, en esta charla vamos descubrir que Rails es algo más que un simple MVC, es un framework repleto de herramientas cuyo conocimiento nos va a facilitar enormemente la vida.
Con estas herramientas vas a poder extender Rails de una forma que no habías imaginado hasta ahora: crearas tus propios validadores, responders y renderers; serás capaz de enviar datos por streaming, de interceptar mails o añadir un nuevo middleware a tu stack.
Queremos mostrar 10 de estas herramientas junto con ejemplos de uso de cada una de ellas, para que las puedas incorporar poco a poco en tu día a día y descubras el mundo de posibilidades que realmente tienes en tus manos.
El conjunto de herramientas que vamos a mostrar es:
ActiveModel::Model
ActiveModel::Validator
ActiveSupport::Concern
ActionSupport::Notifications
ActionController::Renderers
ActionController::Responder
ActionController::Live
ActionView::Resolvers
ActionMailer Interceptors
Rack Middleware
Node.js es una tecnología cada vez más popular para el desarrollo de servicios web. Grandes abanderados de Java como Netflix están usando cada vez más JavaScript para implementar parte de su backend. Pese a esta realidad, muchos javeros como yo no quieren tocar JavaScript ni con un palo, y cuando hay que hacerlo, sólo en el browser.
Si eres javero y no te gusta JavaScript, en esta presentación tendrás una visión general sobre cómo desarrollar servicios web con Node.js. Verás cómo con TypeScript, async/await y frameworks como Nest y TypeORM no echarás de menos a Spring y JPA. Pero lo mismo pasa al revés, verás cómo en Java también puedes implementar apps con los mismos principios reactivos y funcionales tan comunes en Node.js.
Tech Meetup: How to solve 2 common problems in Android & iOSSantex Group
Se trata de cómo resolver los siguientes problemas:
1- Configuración de diferentes environments.
2- Manejo de caching - sincronización de data con el servidor.
Desarrollar para la nube no es tan transparente como creemos. Conocer correctamente este nuevo entorno, así como sus limitaciones nos ayudarán a evitar problemas de escalabilidad. En esta sesión veremos cómo desarrollar correctamente soluciones para la nube de Microsoft que sean escalables. Veremos ejemplos de lo que no es escalable y también veremos cómo podemos solucionarlo y evitarlo. Hablaremos de patrones de arquitectura, Unity, Entity Framework, capas de acceso a datos, worker roles, web roles,… escalabilidad!
En esta charla realizaremos una introducción a los módulos JavaScript, formatos y empaquetadores, continuaremos hablando de Webpack, qué es y cómo utilizarlo. Realizaremos un ejemplo de configuración de Webpack desde cero, agregando distintos elementos como loaders y plugins, viendo como funciona cada una de estas partes.
JHipster es un generador de código basado en Yeoman que nos genera un proyecto con Spring Boot en el back-end y con Angular en el front-end.
Llevo un año y medio desarrollando con Spring Boot y Angular y desde hace unos meses, mis nuevos desarrollos los realizo con JHipster. Por eso me he decidido a proponer este taller en donde montaré una pequeña aplicación con este tándem, y en donde hablaré también de mi propia experiencia.
Para poder asistir al taller es necesario tener instalado JHipster y tu IDE favorito (yo usaré Spring Tool Suite para back y Visual Studio Code para front). Para no tener problemas de descarga durante el taller tenéis que crearos un proyecto vacío, en el cual haremos modificaciones durante el taller. Creároslo con los valores por defecto, y luego ejecutarlo con ./mvnw para que se descarguen todas las librerías. Deberíais poder ver algo en http://localhost:8080 ;)
Transparencias de la charla con la que participamos en las III Jornadas de Java de Alicante.
En las transparencias se muestran algunas herramientas para implantar metodologías ágiles en Java y se comentan algunas anécdotas e historias de diferentes implantaciones.
Los desafíos de calidad de software que nos trae la IA y los LLMsFederico Toledo
En esta charla, nos sumergiremos en los desafíos emergentes que la inteligencia artificial (IA) y los Large Language Models (LLMs) traen al mundo de la calidad del software y el testing. Exploraremos cómo la integración, uso o diseño de modelos de IA plantean nuevos retos, incluyendo la calidad de datos y detección de sesgos, sumando la complejidad de probar algo no determinístico. Revisaremos algunas propuestas que se están llevando adelante para ajustar nuestras tareas de testing al desarrollo de este tipo de sistemas, incluyendo enfoques de pruebas automatizadas y observabilidad.
Escaneo y eliminación de malware en el equiponicromante2000
El malware tiene muchas caras, y es que los programas maliciosos se reproducen en los ordenadores de diferentes formas. Ya se trate de virus, de programas espía o de troyanos, la presencia de software malicioso en los sistemas informáticos siempre debería evitarse. Aquí te muestro como trabaja un anti malware a la hora de analizar tu equipo
Si bien los hospitales conjuntan a profesionales de salud que atienden a la población, existe un equipo de organización, coordinación y administración que permite que los cuidados clínicos se otorguen de manera constante y sin obstáculos.
Mario García Baltazar, director del área de Tecnología (TI) del Hospital Victoria La Salle, relató la manera en la que el departamento que él lidera, apoyado en Cirrus y Estela, brinda servicio a los clientes internos de la institución e impulsa una experiencia positiva en el paciente.
Conoce el Hospital Victoria La Salle
Ubicado en Ciudad Victoria, Tamaulipas, México
Inició operaciones en el 2016
Forma parte del Consorcio Mexicanos de Hospitales
Hospital de segundo nivel
21 habitaciones para estancia
31 camas censables
13 camillas
2 quirófanos
+174 integrantes en su plantilla
+120 equipos médicos de alta tecnología
+900 pacientes atendidos
Servicios de +20 especialidades
Módulos utilizados de Cirrus
HIS
EHR
ERP
Estela - Business Intelligence
5. Requisitos previos, conocer bien:
● Las técnicas de desarrollo / frameworks /
MADRID · NOV 21-22 · 2014
librerías que se estén utilizando
● Metodologías, conceptos y herramientas para
desarrollar pruebas: TDD/BDD, Mocks, Stubs,
Spies, Mockito, EasyMocks, etc.
6. MADRID · NOV 21-22 · 2014
Si, si… suena bien, pero...
Lo intenté y Java EE no me lo
puso fácil
Java developer
7. Evolución del desarrollo en Java EE
MADRID · NOV 21-22 · 2014
JNDI
CMP
EJB2
Struts
Hibernate Spring
JSF
JPA
EJB3
Seam CDI
Arquillian
Servicios de
contenedor
Modelo
POJO
Inyección de
dependencias
Integración
frameworks
Facilidad en
el desarrollo
Facilidad
para probar
Fuente: http://www.slideshare.net/nukeevry1/arquillian
8. Tipos de pruebas (automáticas)
MADRID · NOV 21-22 · 2014
● Pruebas unitarias
● Pruebas de integración
○ Infraestructura (contenedor / servidor de aplicaciones)
○ Con otros sistemas/aplicaciones
● Pruebas funcionales
9. MADRID · NOV 21-22 · 2014
Java EE 7
CDI
Extensions
Web
Fragments
Servlet 3.1
JSF 2.2
JSP 2.3
EL 3.0
JAX-WS 2.2
JAX-RS 2.0 JSON 1.0 WebSocket
1.0
CDI 1.1 Interceptors 1.0
JTA 1.2
Managed Beans 1.0
JPA 2.1 JMS 2.0
Common
Annotations 1.1 Concurrency 1.0
EJB 3.2
JCA 1.7 Batch 1.0
Bean Validations 1.1
¿MOCKS PARA TODO?
10. Arquitectura de pruebas en Java EE
MADRID · NOV 21-22 · 2014
Test Case
Arquillian
Core + Extensions
ShrinkWrap
Unit Testing Framework
Junit / TestNG
Coverage
JaCoCo
Maven
Container
TomEE Embedded
OpenWebBeans
Embedded Database
Derby
11. MADRID · NOV 21-22 · 2014
Arquillian: características
● Pruebas reales Java EE sin necesidad de mocks
● IDE friendly: ejecución de JUnit (o TestNG) desde el IDE o Maven
● Test enriquecidos: uso de características Java EE y extensiones
● Control del classpath: micro-despliegues en las pruebas
● Depuración de las pruebas desplegadas en servidor
● Contenedor agnóstico: múltiples adaptadores
12. Arquillian: configuración proyecto
● Incluir dependencias en fichero pom.xml
○ Importar arquillian core, extensiones y runtimes
○ Crear maven profiles para tener diferentes runtimes
● Configurar el fichero arquillian.xml para sobrescribir
MADRID · NOV 21-22 · 2014
valores por defecto (opcional)
13. Arquillian: desarrollo de pruebas
● Crear testcase con JUnit
● Incluir las clases bajo prueba usando ShrinkWrap
● Programar los métodos de pruebas @Test
● Ejecutar la prueba JUnit desde Maven / IDE
MADRID · NOV 21-22 · 2014
14. Arquillian: código ejemplo test
@RunWith(Arquillian.class)
public class GreeterTest {
MADRID · NOV 21-22 · 2014
@Inject
Greeter greeter;
@Deployment (name="GreeterTest")
public static JavaArchive createDeployment() {
return ShrinkWrap.create(JavaArchive.class)
.addClass(Greeter.class)
.addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
}
@Test
public void should_create_greeting() {
Assert.fail("Not yet implemented");
}
}
16. Arquillian: ¿cuantas clases meto?
.addPackages(true, Filters.exclude(".*Test.*|.*Mock.*"),"com.
project");
MADRID · NOV 21-22 · 2014
¿Todas? ¿Puedo?
● Tamaño JAR/WAR de pruebas
● Delimitar alcance de la pruebas
● Consideraciones rendimiento (p.e. contexto JPA)
● Si se usa embedded solo incluir clases aplicación
17. Arquillian: adaptadores runtimes
MADRID · NOV 21-22 · 2014
● Diferentes tipos:
○ Contenedor CDI (Weld, OpenWebBeans)
○ Contenedor EJB (OpenEJB 3.1)
○ Servidor de aplicaciones (Glassfish, JBoss, WAS, WebLogic,
TomEE, etc.)
● Diferentes formas de ejecución
○ Embedded
○ Managed
○ Remote
18. Arquillian: adaptadores runtimes
Runtime Tiempo total (seg.) Tiempo test (seg.)
glassfish-embedded 3.1.2.2 25 1,3
openwebbeans-embedded 1.1.6 5,8 0,03
jbossas-managed 7.1.1 20,4 0,3
wlp-managed 8.5.1.1 31,9 2,3
tomee-embedded 1.6.0 10,5 0,25
Resultados de ejecutar 10 veces una prueba de una inyección
de un EJB con @Inject.
MADRID · NOV 21-22 · 2014
19. Arquillian modos de ejecución
MADRID · NOV 21-22 · 2014
● Servidor
● Cliente (@RunAsClient).
○ Ejemplo: WS REST (Arquillian REST Extension)
○ Ambos modos son posibles a la vez
20. Context and Dependency Injection
MADRID · NOV 21-22 · 2014
● @Inject
● @Produce
● @Alternative, @Specializes
21. Creación de alternativas (deploy)
@Alternative
@Specializes
@Stereotype
@Retention(RUNTIME)
@Target(TYPE)
public @interface Mock {}
<beans>
MADRID · NOV 21-22 · 2014
<alternatives>
<stereotype>org.mycompany.testing.Mock</stereotype>
</alternatives>
</beans>
@Mock
public class MockLoginService extends LoginService { ...
}
22. Producción de alternativas (runtime)
MADRID · NOV 21-22 · 2014
@Mock @Produces
LoginService produceMockLoginService() {
LoginService login = mock(LoginService.class);
Mockito.when(login.validate(“user1”, “pass_invalid”)
.thenReturn(RESULT.FAIL);
Mockito.when(login.validate(“user1”, “pass_valid”)
.thenReturn(RESULT.SUCCESS);
return login;
}
23. Algunos ejemplos de mocks
● FacesContext ➜ valores en la request/session
● Servicios Web (JAX-WS / JAX-RS)
○ Unmarshal (XML/JSON ➜ POJO) con JAXB/Jackson
public static <T> getObjectFromXML(String xmlPath,
Class<T> className)
MADRID · NOV 21-22 · 2014
24. Arquillian Persistence Extension
MADRID · NOV 21-22 · 2014
● Gestión de transacciones
● Inserción de datos en base de datos
● Valida datos tras la prueba
● Se basa en DBUnit
25. Arquillian Persistence Extension
expected-users.yml
MADRID · NOV 21-22 · 2014
users.yml
useraccount:
- id: 1
firstname: John
lastname: Smith
username: doovde
password: password
- id: 2
firstname: Clark
lastname: Kent
username: superman
password: kryptonite
useraccount:
- firstname: John
lastname: Smith
username: doovde
password: password
- firstname: Clark
lastname: Kent
username: superman
password: LexLuthor
26. Arquillian Persistence Extension
@Test
@UsingDataSet("datasets/users.yml")
@ShouldMatchDataSet("datasets/expected-users.yml")
public void should_change_user_password() throws Exception
{
// given
String expectedPassword = "LexLuthor";
UserAccount user = em.find(UserAccount.class, 2L);
// when
user.setPassword(expectedPassword);
user = em.merge(user);
// then
assertEquals(expectedPassword, user.getPassword());
MADRID · NOV 21-22 · 2014
}
27. Estrategias de pruebas: End-to-End
MADRID · NOV 21-22 · 2014
Backing Bean
JPA
EJB
Arquillian
Persistence Derby
Port Mock
JAX-WS
Prueba
Arquillian
28. Estrategias de pruebas: Aisladas
Arquillian
Persistence Derby
JPA Mock EJB Mock
Backing Bean EJB JPA
MADRID · NOV 21-22 · 2014
Port Mock
JAX-WS
Prueba
Arquillian
Prueba
Arquillian
Prueba
Arquillian
32. Principales problemas encontrados
● Falta documentación de configuraciones avanzadas
● Diferentes versiones de Arquillian y extensions
● Diferente comportamiento según contenedores
MADRID · NOV 21-22 · 2014
33. Algunas lecciones aprendidas
● Utilizar pruebas aisladas para TDD
● Uso de plugin failsafe para pruebas end-to-end
● Uso de @Inject en vez de @EJB
● Probar bien la arquitectura base de pruebas
● Elaborar una metodología de uso para desarrolladores
● Integración continua: ¡Rompe el build! }:-)
MADRID · NOV 21-22 · 2014
34. MADRID · NOV 21-22 · 2014
FIN
@josemanlopez
https://www.linkedin.com/in/josemanlopez
http://josemlopez.blogspot.com.es/
http://goo.gl/MOi8zb
Notas del editor
Misma vs diferente JVM de ejecución
TDD vs Entorno real
Profiles Maven
Filtros en plugin surfire / failsafe de Maven