Ingeniería reversa configurable y automática con Maven

Mantener los diagramas UML y la documentación ha sido siempre un servicio dfiícil, por productivo y en función de lo que está documentado acaba convertiendose en documentación inútil.

Pensando en  este problema fue desarrollado Jsigner, una herramienta que permite la ingeniería inversa a través de Maven, en una forma diferente a las conicidas. Jsigner tiene por objeto generar diagramas que realmente añadan valor a la comunicación y la documentación.

El concepto utilizado fue el mismo que para javadoc. Anotaciones en el código fuente se utilizan para generar los diagramas de clases, de forma muy simple ... Basta con anotar las clases que desea que se documenten con diagramas utilizando la anotación @Domain y pasando como parámetros los dominios a los cuales la clase pertenece. Para cada dominio se creará un diagrama separado, para no causar sobrecarga cognitiva a los lectores de los diagramas y, por tanto, generar diagramas claros y objetivos!

La configuración de esta herramienta permite:

  • División de negocios en varios diagramas.
  • Decidir que clase se mostrará en que diagrama.
  • Configurar la omisión de métodos y atributos no deseados (getters, setters, equals, serialVersion etc..).
  • Generación de diagramas a través de Maven.
Para más detalles pueden visitar el sitio.

Mockito (o basta de EasyMock)

en construcción

Uno de los patrones más comunes en los frameworks de testing con mocks es el famoso expect-run-verify (o, como se hace en EasyMock, record-replay-verify). Y con el tiempo se está volviendo algo de lo más molesto... veamos porque:

  1. Ensuciamos el código. O dicho de otra forma, el código de los tests va quedando horrible, a medida que van aparienciendo todos esos expect. Estamos obligados a programar los expect no porque los necesitamos testear, sino porque sino el mock va a chillar feo.
  2. No resulta natural al ciclo de testeo. Las llamadas esperadas a un mock son en si aserciones, y deberían comprobarse después de la ejecución. Hacerlo al revés no resulta muy intuitivo.
  3. Los tests quedan frágiles. Los cambios en el código que requieren una interacción nueva entre objetos seguramente romperán a los tests, ya que no contarán con los expect necesarios.
  4. Es dificil de identificar errores. Si pudieramos transformar todos esos expect en asersiones, al fallar sabríamos exactamente dónde está el problema. Al tener los expect antes, las fallas ocurren dentro del código, en medio de la ejecución (y debemos luego decifrar excepciones para ubicar el lugar).
Pero a no desesperar, que ya hay alternativas para mejorar el panorama. Y aquí es donde aparece Mockito.

Leer más...

¡Ajaxificando un formulario!

logo de jQuery He aquí una disculpa a todos los usuarios de sitios que ayudé a construir: "Lo siento si les hice sufrir refrescos innecesarios en las páginas". O al menos, esto es lo que me vino a la cabeza cuando aprendí lo facil que es usar jQuery para evitar los refrescos de página al enviar un formulario.

jQuery es una librería JavaScript espectacular, con un nombre bastante confuso. De forma muy simple permite agregar funcionalidad a las páginas, de manera no obstrusiva. Ofrece un marco general para trabajar con JavaScript, y además es extensible a través de plugins.

Y entre estos plugins se encuentra jQuery Form, que nos permite "Ajaxificar" un formulario cualquiera (si, acabo de inventar esa palabra, ¿y qué?), de manera que su procesamiento ocurra en segundo plano, y los resultados de la invocación se muestren automáticamente en alguna sección de la página.

Leer más...

Aplicaciones RIA y JQuery

Cuando nos piden desarrollar una aplicación RIA, a muchos lo primero que se les viene a la mente es Flex.  Cuando uno tiene el cuidado de preguntar bien las limitaciones del sistema (requerimientos no funcionles) a veces nos escontramos con usuarios que pretenden que las aplicaciones no dependan que las máquinas del cliente tengan instaladas alguna versión determinada de algún producto.

La segunda opción de muchos puede ser GWT, y para muchos, debido a su historia, esto sería aventurarse en un framework que es conocido aunque no tiene la maduración de otros ni es estandar.

Entonces finalmente, por una u otra causa, nos encontramos con JSF, que a estas alturas es mucho mas fácil que hace un tiempo si utilizamos Facelets y si nos inclinamos por Spring Faces.

Leer más...

Les presentamos Spring Batch

Intentaremos hacer una introducción a Spring Batch, uno de los componentes de Spring mas desconocidos hoy en día. No será esta una guía completa del framework, aunque pretemdemos facilitar el primer contacto con este componente y nombrar algunas de sus características. Aunque no nos resulte el trabajo mas excitante el escribir programas batch, siempre es necesario en los trabajos tener claro como podríamos utilizar un framework para tal fin.

Ya hace unas semanas que jugamos un poco con el framework -sabrán que fue mas Leo que yo no...- aunque les cuento que leí casi toda la funcionalidad que ofrecía el componente y llegue a entender el ejemplo que Leo me pasó y todo. En esas semanas pensabamos que teníamos un proyecto 'justo' para este framework, que por razones de tiempo -y a veces de NO esfuerzo- no pudimos implementar en producción.

Leer más...

Transacciones en archivos con JBoss

jboss

JBoss Transactional File I/O es una interesante API para el manejo de transacciones XA en archivos.

El API hace posible que las lecturas/escrituras que se realicen sobre archivos o directorios en el sistema de archivos puedan participar de transacciones XA, junto a operaciones contra una base de datos o cola JMS.

Leer más...

Working Sets en Eclipse

logo de EclipseUn Working Set es un grupo de elementos que se muestran en las distintas vistas de eclipse. Estos conjuntos de trabajo se usan como filtros que permiten separar claramente los diferentes proyectos (o módulos de proyectos) en que se está trabajando.

Esto puede resultar muy útil cuando se está trabajando simultáneamente en varios proyectos no directamente relacionados entre sí o, cuando se tiene un proyecto con muchos módulos, poder separar en un Working Set el modulo Ejb con sus módulos de test unitarios, componentes e integración y así poder concentrarse en ese modulo en particular.

Leer más...

GWT 1.5 disponible

logo GWTGoogle Web Toolkit, el framework web de Google para Java, alcanzó hoy una nueva versión. Así, tenemos disponible a GWT 1.5, el cual inluye varias mejoras.

Las características principales de esta nueva versión son:

  • Soporte para Java 5: se agregó soporte para anotaciones, generics, enumeraciones, y cantidad de parámetros variables en los métodos.
  • Optimizaciones al compilador: se mejoró nuevamente la performance de las aplicaciones compiladas. Las aplicaciones existentes tendrán que recompilarse para beneficiarse de estas mejoras.
  • Mejoras a JavaScript: se creo un nuevo API para el DOM con mejor performance, con objetos javascript fuertemente tipados.
  • Estilos visuales predeterminados: se agregaron varios estilos CSS para la presentación, de manera de poder comenzar rápidamente a desarrollar una aplicación atractiva.

Leer más...

¡Groovisimo!

logo de groovyGroovy es un lenguaje dinámico de programación alternativo para la plataforma Java. Spring tiene soporte nativo para incorporar scripts escritos en Groovy, y utilizarlos dentro de la aplicación como si fueran beans comunes. Es decir, es posible declarar un bean, inyectar y utilizarlo como una clase Java más, cuando en realidad su implementación es un script.

Todo esto se realiza a través del soporte para lenguajes dinámicos que forma parte de Spring 2.x, que permite programar clases en cualquiera de los lenguajes dinámicos soportados, y hacer que Spring automáticamente realiza la instanciación, configuración e inyección de los objetos resultantes.

Leer más...

Testeando rápido todos los mapeos de Hibernate

logo de hibernate

Revolviendo la web por ahí me encuentro con un muy pequeño ejemplo de cómo, con pocas líneas, testear todos los mapeos de Hibernate de una aplicación. El test comprueba que sintácticamente estén bien escritos todos los mapeos, que las columnas mapeadas existan y se puedan asignar a atributos de los objetos. Para hacer uso se utiliza el API de Hibernate para pedirle todos los mapeos que tiene, y luego se usa esta información para tirar un query por cada mapeo.

A continuación queda una versión levemente mejorada del código original, donde se limita la cantidad de resultados que devuelve el query (por si algun mapeo va contra una tabla muy grande).

Leer más...

Novedades en Hibernate 3.3

logo de hibernateDespués de muchos meses de trabajo ya se puede descargar Hibernate 3.3 GA, la nueva versión del ORM más utilizado para Java. Entre las novedades más destacadas frente a la versión 3.2 anterior:

  • Migración a un sistema de construcción con Maven.
  • División del proyecto en varios módulos jar (al estilo de módulos Maven), lo que facilita el ver y administrar las dependencias.
  • Rediseño de las SPI para el caché de segundo nivel.
  • Integración con JBossCache 2.x como proveedor de caché de segundo nivel.

InfoQ publicó una breve entrevista con Steve Ebersole, uno de los líderes de proyecto de Hibernate, en donde cuenta algunos detalles de esta nueva versión y algo del futuro de Hibernate. A continuación un resumen de la entrevista.

Leer más...

Inspiración.

"Si tú tienes una manzana y yo tengo una manzana e intercambiamos las manzanas, entonces tanto tú como yo seguiremos teniendo una manzana cada uno. Pero si tú tienes una idea y yo tengo una idea, e intercambiamos las ideas, entonces ambos tendremos dos ideas"

Bernard Shaw