Aug 23 2008

Monitorización de memoria en Apache Tomcat

Tag: HerramientasManuel Jesús Recena Soto @ 19:07

Si alguien se encuentra con la necesidad de monitorizar el consumo de memoria que está haciendo su contenedor JSP/Servlet Apache Tomcat, quizás esta entrada le interese.

Hace ya algunos años que vengo usando Lambda Probe. Concretamente comencé a usarlo tras la primera release de Opina y posteriormente se convirtió en una de mis herramientas favoritas. Es difícil ver un entorno de desarrollo montado por mi en el que no esté presente esta herramienta. La uso tanto durante la fase de desarrollo como tras la puesta en producción. Es aconsejable monitorizar (aun estando en producción) nuestra aplicación, aunque sólo sea durante las primeras semana. Es una herramienta muy útil para preparar informes de calidad relacionados con rendimiento. ¿Cómo establecer sino los requisitos mínimos de memoria? Supongo que hay ocasiones en las que los administradores de sistemas reciben aplicaciones que deben ser desplegadas y desconocen cuáles son esos requisitos mínimos.

Pues bien, definiendo un buen entorno de entorno de desarrollo, pruebas de rendimiento y Lambda Probe, podemos realizar una buena aproximación de eso requisitos mínimos de memoria.

¿Qué debemos hacer para añadir a nuestro entorno de desarrollo monitorización de memoria?

  1. Descargamos la herramienta del sitio web oficial.
  2. Desplegamos el WAR en nuestro Apache Tomcat
  3. Creamos el archivo $TOMCAT_HOME/bin/setenv.sh y le añadimos la siguiente configuración:
    CATALINA_OPTS=”-server -Xms256m -Xmx300m -XX:MaxPermSize=128m -Dcom.sun.management.jmxremote”
  4. Accedemos a la aplicación:
    http://hostname[:port]/probe
  5. Y si tenemos correctamente configurado un usuario con el rol manager en $TOMCAT_HOME/conf/tomcat-user.xml, simplemente accedemos con ese usuario. En la página oficial hay información más detallada sobre el proceso de instalación.

A continuación os muestro una captura de pantalla correspondiente al consumo de memoria del entorno de preproducción que usamos para Opina.

Captura de pantalla de Lambda Probe

Captura de pantalla de Lambda Probe


Jul 17 2008

Trac 0.11 y Stractistics-0.4.2

Tag: Herramientas, Mis proyectosManuel Jesús Recena Soto @ 21:02

Hace unos días se publicaba Stractistics-0.4.2 que proporciona compatiblidad con la nueva versión de Trac (0.11). Pues bien, anoche decidí actualizar la versión de Trac que uso para mis proyectos y tras resolver algunos problemas, pude ver funcionando Stractistics.

La verdad es que esta nueva versión de Trac se ha hecho esperar, pero vale la pena. Aun no he tenido tiempo de ver las cosas con detenimiento, entre otras cosas porque tengo que configurar mis proyectos para que puedan hacer uso de los nuevas características. Parece que lo más destacado es el nuevo y configurable workflow para los tickets. El módulo browser (navegar por los repositorios) ha ganado en usabilidad muchísimo.

Captura de pantalla

Captura de pantalla


Jul 12 2008

Stractistics-0.4.2 released

Tag: Herramientas, Mis proyectosManuel Jesús Recena Soto @ 14:24

Ayer publicamos una nueva versión de Stractistics, un plugin de TRAC para monitorizar la actividad de tus proyectos. Esta nueva versión soluciona algunos problemas de compatibilidad con la reciente versión (0.11) publicada por los creadores de TRAC.


Jun 16 2008

Crónica sobre la desconferencia 01 de Ecosistemas Software

Tag: Conocimiento libre, Herramientas, Ingeniería del softwareManuel Jesús Recena Soto @ 15:00

El pasado jueves 12 se celebró en la oficina de BitRock la primera desconferencia de ecosistemas software. Durante los días previos estaba un poco preocupado por la acogida que podría tener, sin embargo, al ver que la sala no paraba de llenarse de gente, comencé a ponerme más nervioso aun porque no había nada oficialmente preparado. Personalmente creo que una reunión de este tipo no tiene precio. Poder compartir conocimiento y experiencias de esta forma me parece algo increíble y de un valor incalculable.

Si las cuentas no me fallan creo que asistimos una 20 personas. Todo comenzó con una breve presentación de los motivos que me llevaron a crear la lista de correo ecosistemas software. Posteriormente la gente se fue presentando comentando su experiencia, marco tecnológico, etc. Después, el resto vino solo. Salieron a relucir muchos temas y como no podía ser de otra forma, se expusieron los ecosistemas software que cada uno usábamos.

Tras 2 horas de conversación, se habló de la segunda desconferencia y la conveniencia de organizar algunas exposiciones breves (5-10 minutos) sobre algunos temas de interés. Y como no podía ser de otra forma, para seguir conociéndonos unas cervezas y refrescos en un bar (que llenamos por completo) cerca de la oficina.

Desconferencia 01 - Ecosistemas Software

Desconferencia 01 - Ecosistemas Software

Desconferencia 01 - Ecosistemas Software

Ahora sólo me queda agradecer públicamente a BitRock su hospitalidad y al resto de gente, su asistencia y participación activa durante la desconferencia. Nos veremos en la Desconferencia 02 de Ecosistemas Software.


Jun 10 2008

Primera desconferencia en ecosistemas-software

Tag: Conocimiento libre, Herramientas, Ingeniería del softwareManuel Jesús Recena Soto @ 17:15

A finales de 2007 se anunciaba la creación de una lista de correo llamada ecosistemas software. Han pasado ya algunos meses desde su creación y los números están ahí: 69 miembros y una baja actividad (al menos eso es lo que dice googlegroups). Sin embargo, hay gente que tiene ganas de aprender y compartir sus conocimientos y experiencias, y por ello, hemos decidido organizar una desconferencia en Sevilla.

La desconferencia se llevará a cabo el próximo jueves 12 de junio en las instalaciones de BitRock:

BitRock S.L.
C/ Salado 11 - Local 15
41010 Sevilla
Spain

La hora de inicio será a las 19:00h (puntualidad, por favor!). Inicialmente hay varios temas que se han planteado en un hilo de la lista para romper el hielo, pero la idea es que sea un coloquio abierto y que la gente se anime a participar.


May 19 2008

Tracquirement-0.2.0

Tag: Herramientas, Ingeniería del softwareManuel Jesús Recena Soto @ 17:07

Hace algún tiempo comentaba en este blog que estábamos trabajando en un herramienta de modelado de requisitos. Mientras obtenemos resultados en este sentido hemos preparado un pequeño plugin que se encarga de hacer lo siguiente:

Ilustración del funcionamiento de plugin

Entiendo que este plugin está muy limitado, sin embargo, para aquellos que usáis TRAC y no tenéis otra cosa, quizás os resulte útil. Si hay algún interesado:

Requisitos

Instalación

  • Descargar los fuentes
  • Ejecutar: python setup.py bdist_egg
  • En el directorio dist/ encontraremos el correspondiente archivo EGG.
  • easy_install –always-unzip fichero.egg

Configuración en TRAC

  • Editar el archivo trac.ini y añadimos la siguiente sección en caso de que no exista:

[components]
tracquirement.* = enabled

  • Luego tendremos que asignar el permiso TRACQUIREMENT_USE a quien corresponda.

A continuación os dejo una captura de pantalla del resultado:

El plugin ha sido liberado con licencia GNU GPL v2.


May 17 2008

Configurando el plugin de maven para Doxygen

Tag: HerramientasManuel Jesús Recena Soto @ 11:37

En mi anterior post comentaba que íbamos a comenzar a utilizar Doxygen para generar la documentación de nuestros fuentes. Pues bien, en esta entrada voy a comentar como ha resultado la integración de Doxygen dentro del ciclo de vida de mis proyectos.

Para integrar Doxygen con Maven he usado doxygen-maven-plugin. Este plugin básicamente lo que hace es invocar a la herramienta doxygen en la fase de generación de reportes y proporcionarle los parámetros de configuración propios de la herramienta. También existe la posibilidad de invocarlo de forma explícita.

Lo primero que necesitamos es instalar Doxygen en el equipo donde se va a construir el proyecto. En mi caso es un servidor que forma parte de nuestro ecosistema software destinado única y exclusivamente a llevar a cabo tareas de integración continua. Que no se os olvide instalar la herramienta GraphViz porque la necesitaremos para generar los gráficos de entidades y relaciones.

Una vez que tenemos estas herramientas instaladas necesitamos modificar nuestro archivo P.O.M. añadiendo el repositorio de plugins de donde se descargará el plugin que necesitamos:

<pluginRepository>
<id>doodleproject-repo</id>
<name>DoodleProject Maven 2 Repository</name>
<url>http://doodleproject.sourceforge.net/maven2/release</url>
<releases>
<enabled>true</enabled>
</releases>
</pluginRepository>

Una vez que hemos añadido el repositorio de plugins pasamos a configurar el plugin:

<plugin>
<groupId>net.sf.doodleproject</groupId>
<artifactId>doxygen-maven-plugin</artifactId>
<configuration>
<executable>${doxygenExecutable}</executable>
<configurationFile>../opina-doxygen.conf</configurationFile>
</configuration>
</plugin>

En la documentación del plugin se añade un nodo adicional justo debajo de “configuration”, sin embargo, observando el código fuente del plugin, comprobé que no era necesitario (quizás un bug). En esta configuración simplemente se le indica la ubicación del ejecutable y el archivo de configuración. Como uno de los objetivo de Maven es evitar la dependencia con los entornos de desarrollo locales, no tiene sentido haber puesto el path correspondiente a mi instalación local de Doxygen, por eso definí una variable que añadí a mi correspondiente perfil (profile.xml).

El archivo de configuración de Doxygen lo creé con el asistente gráfico que proporciona, y posteriormente lo retoqué. Algunas notas sobre el archivo de configuración:

  • OUTPUT_DIRECTORY: Indicar un path relativo y correspondiente con la estructura de directorios propuesta por Maven, p.e. target/site/doxygen
  • INPUT: Idem, p.e. src/main/java
  • Evidentemente, lo deseable sería que estos parámetros correspondieran con ${project.reporting.outputDirectory}/doxygen y ${project.build.sourceDirectory} respectivamente. Sin embargo, para conseguir esto deberíamos aplicarle un filtro y colocarlo como un recurso.

Un inconveniente que posee este plugin es que no se integra bien con la generación del sitio web de Maven. No se genera correctamente el enlace a la documentación. En Opina para evitar este problema, hemos añadido un enlace en la menú de la izquierda. Lo tenéis publicado por si alguien quiere verlo.


May 14 2008

Doxygen para nuestros proyectos

Tag: HerramientasManuel Jesús Recena Soto @ 13:23

Durante mucho tiempo he usado la herramienta javadoc para generar la documentación de código fuente escrito en JAVA (API, librerías, etc.). Además, su integración con Maven es buena gracias al plugin correspondiente.

Hace algunos años usé Doxygen para generar la documentación de una demo y me gustó mucho, sin embargo no trasladé su uso al resto de mis proyectos. Hace unos días surgió la necesidad de seleccionar una herramienta para generar la documentación de nuestro código fuente. Las premisas eran:

  • Una única herramienta para todos los proyectos: En nuestro caso esto no supuso un problema porque nuestro marco tecnológico está definido y trabajamos con Java, Python, PHP y Perl.
  • Formatos de salida usables: HTML es un buen formato porque está muy extendido y es fácil disponer de un ordenador con navegador web para procesarlo.
  • No queríamos perder la integración con Maven (Maven sites).

La elección ha sido Doxygen y los motivos han sido:

  • Nos permite documentar nuestro código Java, Python, PHP y Perl.
  • Existen versiones para GNU/Linux, Windows y MacOSX
  • Formatos de salida (que he probado): HTML (más atractivo y usable que el generado por javadoc) y PDF.
  • Y para la integración con Maven existe un plugin. Muy importante para nosotros para poder añadir a nuestros procesos de integración continúa la generación de este tipo de documentación.

Podéis ver un ejemplo en la documentación de Opina.


Mar 19 2008

¿Qué “distribuibles” preparas para tus proyectos?

Tag: Herramientas, Software QAManuel Jesús Recena Soto @ 22:46

Antes de comenzar me gustaría comentar que la palabra distribuible está entre comillas porque la RAE parece que no la reconoce, sin embargo, creo que mucha gente la usamos. Este pequeño post lo he clasificado dentro de las categorías Herramientas y Software QA que tengo definidas en mi blog. Lo que justifica este hecho es que hablaré de Apache Maven y sobre cómo mejorar ciertos procesos típicos en la vida de un proyecto software. Para ello hablaré de los “distribuibles”, empaquetados, ensamblados o como se quieran llamar a esas estructuras (comprimidas o no) de directorios y archivos que se usan dentro del marco tecnológico JAVA como son los JAR, WAR, AAR, EAR, etc.

En esas estructuras de directorios normalmente encontramos ficheros compilados (p.e, .class), archivos de propiedades (p.e, .properties), archivos de configuración (p.e, .xml), recursos gráficos (p.e, .png), metainformación (p.e, manifest.mf) y algunos otros más. Personalmente me gustaría destacar todos aquellos archivos que formen parte de la configuración de una aplicación. Las configuraciones más comunes son las referentes a la conexión de base de datos, sistema de correo, sistemas LDAP, etc.

Una muy buena aproximación para mejorar la facilidad de mantenimiento, automatización y personalización de estos “distribuibles” es usar Maven y sacarle partido a los distintos plugins que existen (packaging types / tools) y la gestión de perfiles. Con esto podremos conseguir generar el WAR de nuestra aplicación web configurado para el entorno de producción de nuestro cliente. Bastará con realizar un proceso como el siguiente:

  1. Realizar un export del sistema de control de versiones correspondiente a la versión que se desee, que entiendo que estará etiquetada en directorio tags de nuestro repositorio.
  2. Dar de alta un perfil con la configuración del entorno que nuestro cliente nos ha facilitado.
  3. Ejecutar algo similar a: mvn package -P oracle -Denv=client-dev
  4. Desplegar, manual o automáticamente, nuestro WAR (artefacto) donde corresponda.

Doy por supuesto que los miembros del equipo de desarrollo estarán muy familiarizados con la generación de estos distribuibles, sin embargo, son otros perfiles los que, durante el desarrollo del proyecto y/o tras su finalización, tendrán que continuar con su soporte, mantenimiento y evolución. Un ejemplo con el que muchos se pueden sentir identificados es el típico proyecto de llave en mano para un cliente que nos encarga algo a medida. En ese contexto, si el cliente nos demanda que le enviemos un SNAPSHOT para que su personal vaya haciendo pruebas, ¿Qué “distribuible” preparamos?

Es muy frecuente que si se trata de un proyecto software, haya sido un departamento, área o división de desarrollo quien nos haya realizado el encargo. Con esto quiero decir, que el perfil que va a recibir nuestro “distribuible” es probable que con unas simples instrucciones sea capaz de generar el “distribuible” apropiado a partir de un export del repositorio. Ahora bien, no basta con hacer un export, comprimirlo y enviarlo al cliente con las instrucciones, entre otras porque en el repositorio es muy probable que haya información sobre nuestros entornos de desarrollo, múltiples perfiles configurados o simplemente, información que no es útil para el cliente y que únicamente provoca ruido. Con lo cual, parece razonable pensar que vamos a necesitar un “distribuible” con las fuentes de nuestro proyecto que, acompañadas de una guía de instalación y configuración, permitan que el propio cliente pueda ir asumiendo estas tareas que tarde o temprano serán de su plena responsabilidad.

La opción planteada me parece lógica. El cliente nos demanda las fuentes del proyecto, nosotros se las entregamos con los archivos justos y precisos que necesitan para la configuración, pruebas unitarias/integración y la posterior generación del WAR, JAR, AAR o el que corresponda, que se desplegará en el entorno correspondiente.

Con la intención de dar un pasito más y pensando en los perfiles del departamento, área o división de infraestructuras, creo que agradecerán si les ahoramos hacer un export, tener instalado maven, tener instalado el JDK correspondiente y otros pequeños detalles que pueden hacer que algo fácil y mecánico, se retrase durante días. En prácticamente todas empresas e instituciones que conozco es el personal de sistemas o infraestructuras quien verdaderamente realizara los despliegues en los entorno de producción, por lo tanto, nos interesa facilitar al máximo las cosas.

Entiendo que para un administrador de sistemas le resultará más cómodo descomprimir un archivo comprimido (zip, tar.gz, etc.), editar el archivo de configuración que estará documentado en la correspondiente guía de la que antes hablaba y colocar la estructura de directorios y archivos en el lugar correspondiente para su despliegue. Este nuevo caso nos encontramos con que necesitamos preparar un “distribuible” con los binarios de nuestro proyecto.

Son muchas las circunstancias que puede hacer que el administrador del servidor de aplicaciones del cliente necesite volver a desplegar una aplicación determinada, como por ejemplo, cambios en la configuración de red, DNS, modificaciones en las credenciales (usuarios/contraseñas), migraciones, etc, ¿En todas esas situaciones es necesario que haya un desarrollador presente? Si las cosas se hacen bien, podemos ahorrarnos mucho trabajo. Tengo que reconocer que la realidad es otra, pero lo bueno es saber que existen otras formas de hacer las cosas.

Para concluir me gustaría añadir que aparte de lo que podamos generar en nuestra fase de empaquetado (package) y que además lo tenemos automáticamente con Maven, es muy recomendable preparar al menos otros dos “distribuibles” adicionales, uno con los fuentes y otro con los binarios. Para ello es de gran utilidad el plugin de Maven Assembly. Como me he extendido demasiado, aprovecharé otro post para poner algún ejemplo con este plugin. En Opina lo usamos para generar opina-bin-1.0.8.zip, que es el binario de la versión 1.0.8 de Opina que está listo para ser descargado, descomprimido, configurado y desplegado.


Mar 09 2008

REM - Requisite Management

Tag: Herramientas, Ingeniería del softwareManuel Jesús Recena Soto @ 23:15

Es probable que gran parte de los que os dejáis caer por este blog no conozcáis REM. Tal y como se indica en la página oficial de esta herramienta:

REM (REquisite Management) es una herramienta experimental gratuita de Gestión de Requisitos diseñada para soportar la fase de Ingeniería de Requisitos de un proyecto de desarrollo software de acuerdo con la metodología definida en la Tesis Doctoral “Un Entorno Metodológico de Ingeniería de Requisitos para Sistemas de Información”, presentada por Amador Durán en septiembre de 2000.

Los que hemos estudiado en la Escuela Técnica Superior de Ingeniería Informática de la Universidad de Sevilla conocemos esta herramienta. Hace tiempo comentaba que se había creado la lista de correo ecosistemas-software. Uno de los objetivos de esta lista es intercambiar ideas y opiniones sobre qué herramientas componen los ecosistemas de desarrollo software de grupos de trabajo y áreas/departamentos de desarrollo. Pues bien, en todos los ecosistemas que he tenido que implementar (consultoría tecnológica, instalación, configuración, integración y formación) me he encontrado que el analista se queda sin nada, es decir, no había nada para que al menos los requisitos funcionales y no funcionales quedasen reflejados en “algún sitio”. Ese “algún sitio” es para mi en los últimos años, una wiki.

Como primera aproximación no estaría nada mal algo como lo que se expone en la ilustración:

Ilustración con la idea del plugin

¿Habrá noticias en breve?


Dec 22 2007

Pulse nos ayuda a configurar nuestro entorno de desarrollo local

Tag: HerramientasManuel Jesús Recena Soto @ 23:52

Hace unos días llegó a mi correo una noticia sobre una nueva herramienta. El nombre de la herramienta es Pulse y está concebida para simplificar y reducir los tiempos de configuración e instalación de productos basados en Eclipse.

Cada vez que tengo que instalar Eclipse el proceso se repite una y otra vez:

  1. descargar eclipse en cualquiera de sus configuraciones (packages) y,
  2. dar de alta los distintos sitios desde donde descargar los plugins que uso frecuentemente

Para agilizar un poco el proceso, lo que hago es exportar los sitios de los plugins y para futuras instalaciones, únicamente tengo que importar los sitios y así disponer de la última versión de los mismos. Además, el fichero XML de exportación lo comparto con otros compañeros y les ahorro buscar los plugins y dar de alta los sitios para descargarlos. Esto comencé a usarlo hace algún tiempo en el proyecto Opina y podéis ver un ejemplo de lo que comento.

Si al tema de los plugins le añadimos que prefiero tener varias instalaciones de Eclipse en función de lo que vaya a programar (C/C++, Java, Python, XHTML/CSS/Javascript, etc…), el mantenimiento se complica bastante. Pues bien, Pulse nos ayudará en la instalación y el mantenimiento de nuestras instalaciones. Esta herramienta nos permitirá definir perfiles para las distintas instalaciones entre las que estarán incluidos nuestros plugins favoritos. Y además, estos perfiles podrán ser compartidos con otros usuarios. Con Pulse conseguiremos unificar el proceso de instalación y facilitar el mantenimiento de las instalaciones.

Llevo un par de días probándola y me parece una herramienta sensacional, sin duda, una nueva herramienta para nuestros ecosistemas software.

Logotipo de Pulse


Dec 12 2007

Cómo organizo mis archivos P.O.M. de Maven

Tag: HerramientasManuel Jesús Recena Soto @ 18:22

En los últimos años me he encontrado con muchos proyectos descritos con Maven. Aunque son varios los archivos que se usan para describir un proyecto, entiendo que el principal es el pom.xml. Pues bien, la forma de organizar las distintas secciones que pueden existir dentro de un archivo P.O.M. es muy variada. Cuando uno trabaja en varios proyectos en los que se usa Maven se agradece que sus archivos pom.xml estén organizados de forma similar. Quizás alguien piense que esto no es interesante o útil, pero pienso que todo lo que sea homogeneizar resulta útil y máxime si uno trabaja dentro de una empresa o corporación.

En la ilustración siguiente se muestran las distintas secciones en las que organizo mis pom.xml:

Ilustración sobre las secciones de archivo POM

Por si a alguien le sirve, se puede descargar el pom.xml que suelo esar como plantilla.


Dec 05 2007

Nueva lista de correo sobre ecosistemas software

Tag: Herramientas, Ingeniería del software, Software QAManuel Jesús Recena Soto @ 00:32

En esta ocasión escribo para comunicar que se ha creado una nueva lista de correo para tratar temas relacionados con ecosistemas software basados en herramientas con licencias de código abierto. La lista de correo acaba de ser creada y esperamos que sea bien aceptada por la comunidad de desarrolladores. Para más información sobre la lista de correo:

http://groups.google.com/group/ecosistemas-software

Particularmente mi aportación estará centrata en las herramientas con la que tengo experiencia, sin embargo, tengo mucho interés por conocer otras configuraciones de ecosistemas software. Esas herramientas son Maven, Archiva y Continuum, todas ellas de Apache Foundation.

Logotipo de Apache Foundation


Sep 19 2007

Portfolio de Spring en repositorios de Maven 2

Tag: HerramientasManuel Jesús Recena Soto @ 00:06

Leo en el blog de Carlos Sánchez que Interface21, responsable de Spring Framework, publica su framework en repositorios de maven 2. Los repositorios son:

  1. Final releases: central maven repository
  2. Milestones: http://s3.amazonaws.com/maven.springframework.org/milestone
  3. Snapshots: http://s3.amazonaws.com/maven.springframework.org/snapshot

Para una información más detallada leer el post de Ben Hale sobre la noticia.

Para los que uséis Apache Archiva, ya sabéis lo que tenéis que hacer mañana a primera hora.


Sep 04 2007

Introducing Q4E, a new Eclipse plugin for Maven

Tag: HerramientasManuel Jesús Recena Soto @ 21:58

Este ha sido el título que ha usado Carlos Sanchez para dar a conocer un nuevo plugin de Eclipse que permita su integración con Maven.

Aun no he tenido tiempo de probarlo, en cuanto termine con JVMPI, será lo primero que haga.

Está claro que hay empresas que saben lo que quieren y como lo quieren.

Logo de Exist

GRACIAS!


Next Page »