1 Java Monitoring by Introspection Tool
2 Equipo de Trabajo Tomás Fernández Löbbe Cristian Santilli Tutor Lic. Rosa Graciela Wachenchauzer
3 El problema
4 Un equipo de desarrollo construye una aplicación ¿Está funcionando? ¿Está funcionando bien? ¿No? ¿Por qué? ¡¡¡¡¡¿POR QUEEEEE?!!!!! ¿Funciona con una velocidad aceptable? ¿La aplicación dejó de funcionar el viernes a la noche y nadie se enteró hasta el lunes a la mañana?
5 La “solución” Agregar código de control a la aplicación, que me pueda dar información actualizada
6 Un poco de contexto…
7 Unas líneas de código if (!clazz.getName().equals(anArray[position].getName())) { return false; } position++;
8 Más líneas de código public static MethodDefinition create(String declaringClassName, String methodName, Class [] parameterTypes, String returnType) throws ClassNotFoundException { Class declaringClass = CoreUtils.getClass(declaringClassName); Class returnTypeClass = CoreUtils.getClass(returnType); List > paramList = new LinkedList >(); if (parameterTypes == null) { return create(declaringClass, methodName, (List >)null, returnTypeClass); } for (Class paramClass:parameterTypes) { paramList.add(paramClass); } return create(declaringClass, methodName, paramList, returnTypeClass); } public static List createMultiple(String declaringClassName, String methodName, List []> parameterTypes, String returnType) throws ClassNotFoundException { Class declaringClass = CoreUtils.getClass(declaringClassName); Class returnTypeClass = CoreUtils.getClass(returnType); List definitionList = new LinkedList (); for (Class [] params:parameterTypes) { definitionList.add(create(declaringClass, methodName, params, returnTypeClass)); } return definitionList; } public static MethodDefinition create(String declaringClassName, String methodName) throws ClassNotFoundException { Class declaringClass = CoreUtils.getClass(declaringClassName); return create(declaringClass, methodName, (List >)null, null); }
9 Muchas más líneas de código Fuente: Wikipedia. http://es.wikipedia.org/wiki/L%C3%ADneas_de_c%C3%B3digo_fuente
10 ¿Y entonces, que implica la solución anterior? Cuando la aplicación esté terminada, hay que sacar el código de control? Si la aplicación ya está lista y surge un problema, hay que volver a modificarla Mayor esfuerzo en Horas Hombre Mezclar incumbencias Conocer de antemano los controles que se van a realizar
11 AOP Aspect Oriented Programming (Programación Orientada a Aspectos) Para explicarlo se debe entender OOP.
12 OOP Object Oriented Programming (Programación orientada a Objetos) 0 1 1 Posición= Avanzar() 0
13 Aspectos Código replicado
14 Ahora si, AOP El objetivo de AOP es encapsular esos comportamientos que se ven repetidos por el código. Un aspecto es un concepto que no se puede encapsular, ya que involucra a muchos objetos distintos No reemplaza al modelo anterior, se utiliza como un complemento
15 ¿Qué problemas soluciona AOP? Monitorear la aplicación ya no implica mezclar incumbencias Se pueden agregar o remover aspectos por configuración, ya no es necesario tocar el código original para esto. Hasta cierto punto se resuelve el problema de conocer de antemano los controles que se quieran realizar.
16 ¿Qué problemas NO soluciona AOP? Es necesario desarrollar el código del aspecto, el cual podría contener errores. Aún se requieren horas hombre Es necesario contar con recursos que tengan conocimiento del paradigma y de algún framework.
17 La Solución
18 JMit Proveer una herramienta que permita: Simplificar el monitoreo de aplicaciones permitiéndole al equipo de trabajo conocer el estado de las mismas sin la necesidad de agregar código extra. Agregar o remover monitores de la aplicación en forma declarativa y limpia
19 ¿A quién va dirigido JMit ? A aquellas personas con conocimiento técnico de la aplicación que se quiere monitorear.
20 ¿Qué permite JMit ? Definir mediante un archivo de configuración los distintos monitores, y donde se aplicarán. Definir distintos tipos de monitores para cada etapa del sistema (Por ejemplo: desarrollo, testing, producción). Programar alarmas ante eventos definidos por el usuario (por ejemplo, enviar un mail ante cierto valor de un atributo).
21 Visualización Permite distintos modos de visualización Cada visualización podría tener distinta “profundidad” y estar orientado a distintos niveles de una organización. Podrían crearse nuevos módulos de visualización para casos particulares Varios módulos de visualización pueden utilizarse al mismo momento.
22 Aplicaciones en simultáneo Muchas aplicaciones podrían monitorearse con una sola instancia de JMit.
23 La metodología de trabajo utilizada en el proyecto, cuya característica principal es la de ser un proyecto académico
24 La metodología utilizada Cascada
25 La metodología utilizada Entregas incrementales
26 La metodología utilizada Revisiones
27 La metodología utilizada Versiones
28 Calendario Creamos un calendario en el que planteamos todos los hitos a cumplir, principalmente: Revisiones Entregas incrementales
29 Calendario En el calendario incluimos: Estimación de horas totales que debíamos tardar para cada una de las tareas Estimación de la fecha en la que se tenía que terminar cada tarea
30 Open Source GNU Lesser General Public License Licencia que permite a cualquiera que lo desee descargar el código fuente, compilarlo y utilizarlo Quien lo desee puede contribuir desarrollando una parte de la misma.
31 Herramientas para la Gestión del Proyecto
32 ¿Cómo pensamos JMit?
33 Arquitectura
34 Módulos de JMit JMit tiene al menos 5 módulos con responsabilidades distintas. Aspecter MonitorEngine Visualizer Sender Receiver
35 Módulos de JMit Aspecter Librería encargada de inyectar código de monitoreo en la aplicación original.
36 Módulos de JMit MonitorEngine Aplicación web encargada de recopilar los eventos ocurridos en la aplicación a monitorear e interpretarlos
37 Módulos de JMit Visualizer Aplicación web encargada de mostrar los monitores
38 Módulos de JMit Sender Librería encargada de enviar mensajes desde un módulo hacia otro
39 Módulos de JMit Receiver Librería encargada de recibir los mensajes que se envían desde un Sender en otro módulo
40 ¿Por qué no hacer todo en un solo módulo?¿Cómo se comunican los módulos?¿Por qué no hacerlo en dos módulos? Módulos de JMit
41 Opciones consideradas para la comunicación entre módulos Transferencia de archivos Base de datos compartidas Invocación a procedimientos remotos o RPC Mensajería
42 Mensajería por HTTP Performance No intrusión en el código y ambiente de la aplicación cliente Bajo acoplamiento Asincronismo Robustez Seguridad
43 Monitores Tiempos de procesamiento por método. Tiempos de procesamiento promedio por método. Conteo de la construcción de objetos. Conteo de invocaciones a un método. Valor de un atributo de un objeto.
44 Alarmas Las alarmas son un aviso creado por el usuario para informarle sobre alguna condición en particular en el programa definido por el mismo. El aviso intenta tener prioridad sobre otros eventos.
45 Configuración En forma declarativa
46 Los Módulos
47 Aspecter
48 ¿Por qué? Módulo encargado de inyectar los aspectos al código de la aplicación original Los aspectos inyectados dependen de los Monitores que se hayan declarado en el archivo de configuración Inyecta el mínimo indispensable de código y busca no interferir con el flujo normal de la aplicación original
49 Diseño
50 Extensiones - Plugins Está pensado para que nuevos monitores puedan ser creados de forma “plugin”
51 Tecnologías Javassist Xerces2
52 Sender
53 Receiver
54 ¿Por qué? Abstraer a los módulos que necesiten comunicación de la forma en la que se implemente la misma Poder reemplazar el día de mañana la tecnología utilizada para mensajería, incluso dejar de usar mensajería http://www.enterpriseintegrationpatterns.com/Introduction.html
55 Diseño Sender
56 Diseño Receiver
57 Tecnologías
58 MonitorEngine
59 ¿Por qué? Es quien se encarga de analizar los eventos recibidos desde la aplicación cliente a la que se le aplicaron aspectos Decide a que visualizadores debe ir la información y cada cuanto tiempo
60 Diseño
61 Extensiones - Plugins Al igual que el módulo Aspecter, el MonitorEngine fue pensado para poder agregar nuevos monitores de forma “plugin”
62 Backend
63 Tecnologías Xerces2
64 Visualizers
65 ¿Por qué? Módulo encargado de visualizar de alguna forma los monitores Puede tener distintos niveles de profundidad dependiendo de a quien esté dirigido Se pueden definir varios para un único MonitorEngine
66 Console Visualizer
67 Mail Visualizer
68 Graphic Visualizer
69 Nuevos Visualizers Se pueden desarrollar nuevos visualizers de forma simple. Se debe utilizar un Receiver, implementar una interfaz y listo. Podrían crearse distintos para cada caso particular, son simples de construir
70 Tecnologías Java Mail
71 Maven Maven ayuda a la gestión del proyecto y maneja el ciclo de vida de las aplicaciones JMit se integra con Maven, haciendo que sea transparente para el equipo de trabajo la invocación al módulo Aspecter cada vez que se compila
72 Maven ar.edu.uba.fi.jmit maven-plugin 1.0 process-classes jmit MyApplication MyApplication.jmit.xml development target/classes/ar target/classes
73 Despliegue
74 Cómo se utiliza JMit