Seminario Spring Roo. Monitorización con Spring Insight
Seminario sobre Spring Roo y monitorización con Spring Insight organizado por Paradigma Tecnologico y Javahispano, impartido en Madrid el 14 de octubre de 2010 por Federico Caro
desarrollo rápido de aplicaciones (RAD). El objetivo de Roo es ser totalmente “inocuo” a la solución final, con lo que no compromete la flexibilidad y potencial que ofrece Java y la arquitectura subyacente. Permite generarte un “arquetipo de proyecto” inicial, en el que las librerías, estructura de directorios e integración con el entorno de desarrollo es ofrecido de manera sencilla y rápida. Modelo de diseño basado en el patrón Domain Driven Design donde pretende construir las aplicaciones en base al dominio de la misma, y evitando antipatrones del estilo Objetivo Roo. ¿Qué es? 2 las aplicaciones en base al dominio de la misma, y evitando antipatrones del estilo Anemic Domain Model. Roo es una herramienta (shell o integrada dentro de Spring Tool Suite) donde pretende incorporar funcionalidades de valor añadido de consola tipo Linux, y con un sistema de ayuda en línea muy potente e intuitivo, donde casi no es necesario recurrir a la documentación de referencia. Roo no introduce ningún elemento de runtime, simplemente es una herramienta de ayuda para el desarrollo de aplicaciones.
al contexto. Los comandos ofrecidos dependen del estado en el que estés dentro del script. Ej: Si has creado un proyecto no te ofrece el comando “project” Dispone de mecanismos de rollback ante errores en los comandos Los comandos de Roo pueden ser grabados en un fichero para luego volver a Funcionalidades Shell 4 Los comandos de Roo pueden ser grabados en un fichero para luego volver a ejecutarlos.
en el mercado: Spring MVC Log4j Spring Security Hibernate /JPA JSP Arquitectura de las aplicaciones generadas 5 JSP Spring Web Flow Maven2 Aspect J Eclipse/STS JMS JavaMail, ….
Elimina las capas de Servicio y DAO. La capa de servicio puede ser añadida en las siguientes situaciones: Lógica de negocio que afecta a varias entidades de negocio. Invocar lógica de negocio fuera del ámbito del protocolo HTTP. Desacoplo entre la capa web y la capa de negocio. Aumentar el nivel de testing Inclsuión de transaccionalidad y seguridad en la capa de servicio. Líneas generales de arquitectura 6 Inclsuión de transaccionalidad y seguridad en la capa de servicio. Para crear clases de la capa de servicio, únicamente es necesario crear una clase con su interfaz y anotar la clase con @Services. La eliminación de la capa DAO se debe a la no aplicabilidad de esta capa en aplicaciones con Roo de los siguientes razones: Testing. Se puede usar técnicas de mocking y no de stubbing Separación de responsabilidades. Se tiene gracias a ITD Independencia de implementación: Provisto por JPA
y de calidad, facilidad de recruitment de personas con conocimientos en la tecnología API’s `populares, estandarizadas, seguras, probadas Calidad, madurez e integracióncon herramientas: Asistentes de código, refactoring, profilers, debuggers, etc.. Tipado estático: pocos errores, refactorización robusta, asistente de códigos, … ¿Por qué generar Java? 7
No métodos de compilación diferida No LTW (load time weaving) No incorpora ninguna librería ni código específico en tiempo de ejecución. No genera penalizaciones de memoria Tecnología no intrusiva 8 No generación de clases No uso de la memoria permanente (PermGen) No genera penalizaciones en el despliegue NO es necesario introducir ninguna librería en el war. Incorpora un mecanismo de integración con arquitectura OSGi out-of-the-box
en tiempo de construcción (X-Doclet style) Generar bytecode en tiempo de construcción (ASM) Generación de bytecode en tiempo de runtime (ASM) Aproximaciones avanzadas basadas en proxis (Spring AOP) Aproximaciones de generación de código 9 IDE Plugins Decisiones/Ventajas: Decisión 1.Uso de Aspect J. o Uso de Inter-type declarations (ITD) con Aspect J. o Desarrollo de unidades de compilación con cometidos diferentes o Soporte instantáneo de herramientas o Maduro, modelo “push-in” de refactorización, incluIda en tiempo de compilación.
de comandos o Usabilidad como ciudadano de primera clase o Encargado de realizar labores de monitorización de cambios mediante un modelo de polling. Evitar crear pasos de generación “crudos”. o Roo nunca modifica un fichero java a no ser que se ejecute un comando de usuario Decisión 3. Generar un modelo mixto de generación pasiva y activa de código, Decisiones/Ventajas 10 Decisión 3. Generar un modelo mixto de generación pasiva y activa de código, obteniendo la mejor de ambas. o Generación pasiva. Uso del shell para generar comandos que van generando los componentes de la aplicación o Generación activa. Mecanismo de monitorización continua que permite actualizaciones incrementales de los ficheros generados (nunca Java).
de tiempo inicial Roo es menos agresivo que Grails, puesto que genera código Java estándar y los add-on no introducen limitaciones específicas- Ambos actualmente no son tecnologías maduras, aunque con una gran proyección Tipado estático vs Tipado Dinámico. Bondades del lenguaje. Azúcar sintáctico Ecosistema de addons y plugins poco maduro. Arquitectura óptima de generación de código: generación dinámica/estática. El rendimiento de una aplicación Roo es superior a Grails al no introducir ninguna penalización en Roo vs Grails 13 El rendimiento de una aplicación Roo es superior a Grails al no introducir ninguna penalización en tiempo de ejecución No necesidad de curva de aprendizaje para programadores Java. Capacidades de depuración y monitorización mucho mayores en Roo. Compatibilidad con Maven. Grails presenta mayores tasas de valoración en mantenimiento de código (escribes menos). En resumen valorar rendimiento, mantenibilidad, depuración y habilidades de tu equipo para elegir una u otra plataforma
aplicaciones en tiempo real. Básicamente consiste de un Apache Tomcat modificado. Muy orientado a aplicaciones realizadas con la tecnología Spring Framework. Esta tecnología permite complementar las posibilidades de monitorización permitiendo a los desarrolladores tener acceso de la información de tiempos de respuesta en: Consultas JDBC Interacción de Spring Bean Llamadas a servicios externos Spring Insight 14 La herramienta puede servir de ayuda a los equipos de QA para detectar problemas en el rendimiento de las aplicaciones. Complementa a las herramientas de carga/estrés para descubir el por qué de un problema de rendimiento. La tecnología incluye un Kit de desarrollo, el cual puede extender la funcionalidad que ofrece Insight para coleccionar detalles que permitan descubrir un cuello de botella. Se integra con SpeedTracer de Google, complementando el análisis de una forma completa (end-to- end): problemas en rendimiento de la capa cliente, integrado con el comportamiento de la parte servidora que ofrece Insight.
adicional, para ser instalada dentro del servidor de monitorización. El servidor captura los eventos de las aplicaciones (conocidos como trazas). Una traza representa un hilo de ejecución. Cada traza está formada por un conjunto de operaciones la cual representa un punto significativo en la ejecución de una traza (por ejemplo una consulta JDBC). Spring Insight recoge la información asociada a estos eventos, lo cual permite ¿Cómo funciona?. 15 Spring Insight recoge la información asociada a estos eventos, lo cual permite conocer el por qué el rendimiento de una aplicación no es el correcto. Spring Insight usa tecnología AOP para monitorizar el rendimiento de las operaciones. Las aplicaciones son cargadas con un ClassLoader especial que dinámicamente instrumentan aplicaciones web en tiempo de ejecución. Spring Insight, de momento, mantiene los datos en memoria. Por tanto, se requiere más memoria que en una aplicación normal.
a monitorizar el rendimiento en tiempo de ejecución Operation: Encapsula una orden de trabajo dentro un hilo de ejecución: Flush de Hibernate, tiempo de ejecución de la capa de servicio, llamada a un método, comando JDBC, etc.. Frame: Representa una unidad de ejecución dentro de una jerarquía de llamadas. Representa básicamente la llamada a un método dentro de la pila de ejecución. El core de un frame es una operación. Spring Insight Development Kit 16 core de un frame es una operación. Trace: Registro de un hilo de ejecución dentro de la ejecución de una aplicación. Endpoint: Agrupación lógica de trazas similares dentro de una aplicación. La salud y las métricas son calculadas en base a endpoints. Ejemplo, todas las trazas que forman parte del mismo método de un mismo método de un controlador forma parte de un mismo endpoint. Aspecto: Mediante la aplicación de aspectos, se recopila información de ejecución de la aplicación target.
un aspecto escrito en AspectJJ encargado de interceptar la ejecución de métodos: jdbc, spring mvcx, etc.. El aspectJ se encargará de construir operaciones que básicamente se encargan de renderizar la información asociada. En el caso de JDBC, la consulta que está lanzando. Cada operación tiene asociado una plantilla Freemarker encargada de renderizar la información asociada de la operación dentro del dashboard. 18 Endpoint Analyzer.