sábado, 14 de febrero de 2009

(Test publicacion via Email) Manejo de Sub-proyectos con maven

Tener varios proyectos cargados en el IDE a veces complica el desarrollo de aplicaciones sobre todo si no contamos con una buena computadora por lo que a veces es necesario cargar solamente un modulo en el IDEA.

 

Las limitaciones que se tienen con ese esquema es que las referencias a los otros proyectos relacionados se darán a través de las librerías ubicadas en el directorio del repositorio maven (.m2).

 

Un claro ejemplo de esta situación son: El Código del infraestructura (AW-FW) y de aplicación (P.E SiderPeru).

 

Ambos son proyectos diferentes, para que las apps pueda ver los cambios es necesario instalar el código del FW (o desplegar en caso de usar un manejador de repositorios como Nexus).

 

De esta manera se actualizan las referencias a los nuevos jars de FW en el directorio m2 y estos serán vistos por Sider.

 

Este esquema solo aplica a los componentes con versión SNAPSHOT:

 

<dependency>

            <groupId>com.aw.core</groupId>

            <artifactId>aw-framework-core-dao</artifactId>

<version>1.0-SNAPSHOT</version>

</dependency>

 

El componente de seguridad no es SNAPSHOT por lo tanto para refrescar se tiene que eliminar el jar y el pom que se encuentran en m2.

Esta eliminación es necesaria debido a que cada cambio del componente de seguridad no se aumenta la versión del mismo por lo tanto maven no se entera que debe actualizar dicho componente.

 

<dependency>

            <groupId>com.sider.security.client</groupId>

            <artifactId>security-client-interface</artifactId>

            <version>1.0</version>

</dependency>

 

Instalar es el proceso de copiar los jars al m2 de maven de esta manera también podemos hacer visibles las ultimas versiones del FW al proyecto de Sider.

 

Para aislar un modulo debemos hacer:

 

Mvn install sobre el root del proyecto:

 

 

Mvn idea:idea sobre el modulo:

 

 

Tenemos solamente al modulo del replicador cargado:

 

 

En este ejemplo el replicador depende del security-admin-domain.

 

Para que el replicador vea alguna actualización del security-admin-domain es necesario realizar un install en dicho directorio.



__________ Información de ESET NOD32 Antivirus, versión de la base de firmas de virus 3852 (20090213) __________

ESET NOD32 Antivirus ha comprobado este mensaje.

http://www.eset.com

jueves, 16 de octubre de 2008

Tip Maven2-IntelliJ

Para incluir el código fuente de las librerias que usamos en nuestros proyectos, al generar los archivos del proyecto incluir el siguiente parámetro: -DdownloadJavadocs=true

mvn idea:idea -DdownloadSources=true -DdownloadJavadocs=true



jueves, 14 de febrero de 2008

Métodos Compuestos

Un método compuesto es un método que puede entenderse en segundos.


No es sencillo escribir naturalmente este tipo de métodos desde la primera vez que escribamos cierto código, por lo que es necesario ir hacia atrás y aplicar un poco de Refactoring para lograr los resultados esperados.


Al usar este patrón nuestro código va tender a ser más fácil de usar, leer y extender.


Un método compuesto como su nombre lo indica “esta compuesto” de llamadas a otros métodos, un buen método compuesto tiene código en el mismo nivel de abstracción o detalle, esto es lo más difícil de dominar.


Esto implica aplicar varias veces “Extract Method” hasta lograr que casi todo el método (“o todo!”) cumpla con su labor llamando a otros métodos más pequeños.


La parte más complicada radica en detectar que partes del código se deben incluir en el método extraído.


Si se extrae demasiado código se corre el riesgo de dedicar demasiado tiempo en ubicar un nombre que describa adecuadamente las labores del método, en este caso deshacer los cambios y explorar otras maneras de dividir la funcionalidad.


Una vez terminado el proceso vamos a encontrarnos con un método divido por varios métodos privados, estos métodos deben ser lo suficientemente cortos, no preocupar en las penalidades de performance pues luego se pueden llevar labores de afinamiento.


Si aplicamos este patrón en la misma clase podemos encontrarnos con abundancia de métodos y podemos encontrar oportunidades para extraer subclases.


El nombre del método indicará que es lo que hace, mientras que el cuerpo indica como lo hace, esto nos permite comprender rápidamente el código.


Ejemplo: El siguiente código proviene de una librería para manejo de colecciones:

Vamos a mostrar los pasos necesarios para aplicar este patrón:


El primer cambio sugerido sería cambiar la condición que envuelve todo el método y convertirla en una cláusula de salida:



El paso siguiente es estudiar el código en la mitad del método, este código verifica si la capacidad del arreglo elements es excedido, si esto ocurre el arreglo es expandido por un factor de 10, este número no indica claramente su intención por lo que debe ser convertido en una constante.


Seleccionar el 10 y presionar ctrl.+alt+c (Introduce Constant) en IntelliJ.




Lo siguiente es extraer el código que detecta que el arreglo a alcanzo su máxima capacidad:


A continuación extraer la parte del código que se encarga de hacer crecer el arreglo, en IntelliJ seleccionamos el código y presionamos ctrl.+alt+m:



Finalmente tenemos:



Para finalizar nos enfocamos en la última línea de código:



Aunque es una sola línea de código esta en un nivel de detalle mayor que el resto del código, corregimos esto extrayendo la sección en su propio método, otra vez ctrl+alt+m en IntelliJ:


Notar que el IntelliJ detecta los parámetros que debe tener nuestro método.






Ahora el método solo tiene 5 líneas de código y es mucho más rápido de entender, este es un típico resultado de aplicar Composed Method:






















jueves, 17 de mayo de 2007

Estrategias para prueba de performance

A menudo es dificil diferenciar los tipos de prueba de esfuerzo, en la web encontré las siguientes definiciones:

Load Testing
Cuando la aplicación es probada contra un número determinado de usuarios, el objetivo es determinar si el site puede atender esa cantidad de usuarios con un tiempo de respuesta adecuado.

Stress Testing
Es load testing pero extendida en un intervalo de tiempo determinado para garantizar la estabilidad y confiabilidad de la aplicación.

Capacity Testing
Es usada para determinar el máximo número de usuarios concurrentes que una aplicación puede manejar.