Lectura del día: Antipatrones en la gestión de excepciones

La lectura del día recomendada llega de java.net, más en concreto versando sobre el tema de la gestión correcta de las excepciones, un quebradero de cabeza tremendamente habitual en el desarrollo de aplicaciones, y de forma muy concreta en los antipatrones más frecuentes. El artículo original en inglés eso si.

El comienzo nos lleva a una serie de dudas que habréis podido encontrar en casi cualquier grupo de trabajo a nivel de desarrollo de software en algún momento:

“Should you throw an exception, or return null? Should you use checked or unchecked exceptions? For many novice to mid-level developers, exception handling tends to be an afterthought. Their typical pattern is usually a simple try/catch/printStackTrace(). When they try to get more creative, they usually stumble into one or more common exception handling antipatterns.”

En muchos casos, se trata de viejos conocidos de antipatrones como los recubrimientos destructivos (en lugar de construir las excepciones a partir de otra) como en el caso de:

catch (NoSuchMethodException e) {
throw new MyServiceException(“Blah: ” +
e.getMessage());
}

o los utilizados indiscriminadamente en diversas capas de nuestro aplicativo como:

catch (NoSuchMethodException e) {
LOG.error("Blah", e);
throw e;
}

que transforman el resultado del análisis de logs en un auténtico infierno.

Hay otros que quizá no sean tan triviales como el hecho de usar las menores líneas de log posibles si estamos en un entorno multi-instancia para que entre medias no nos encontremos con líneas adicionales que “particionen” nuestro error. De sentido común y simple, pero que quizá nos puedan sorprender si no estamos “al loro”.

Como guía me ha parecido un documento relevante.

Además de ello sin duda como dicen en el artículo: “Good exception handling is a key to building robust, reliable systems”. Estoy totalmente de acuerdo con esta afirmación aunque el sistema de logging sin duda aquí también jugará un papel vital y clave.

Repositorios de artefactos Maven: Archiva vs Nexus

nexus-real-logo-300x99Actualmente en mi empresa usamos Archiva como gestor de repositorios Maven, pero leyendo esta mañana las novedades diarias del grupo de Ecosistemas Software en Google y el más que interesante análisis de Sonatype Nexus por parte de uno de los miembros del equipo de Apache Archiva me hacen como poco reflexionar sobre esta herramienta y el darle una oportunidad en nuestro ecosistema. Realmente ya conocía que Nexus está mejor integrada a nivel de Eclipse que Archiva, pero las métricas que aporta Arnaud no dan lugar a dudas.

Uno de los párrafos que debo mencionar es sin duda:

“how could I say something other than… migrate! It’s unfortunate for me to have to admit this as a member of the Archiva team, but my own research proves it. Nexus is a product of great quality, which delivers the service you need for your development projects very well. Furthermore, developed by full-time employees (thank you Sonatype), it enjoys an easily accessible and responsive support (I recommend the channel #nexus on #irc.codehaus.org). Archiva itself is governed by the laws of open source, suffers from the lack of time of its maintainers (even if they are doing as much as they can) which doesn’t help it to stay in the competition.”

Sinceridad no se le puede negar desde luego.

Recomiendo la lectura del artículo completo.

Y vosotros, conoceis o usais Nexus en vuestro ecosistema software ? Qué opiniones positivas o negativas teneis al respecto ? En nuestro caso, debo reconocer que Archiva siempre ha cumplido su labor muy dignamente aunque si es cierto que su consumo de memoria pueda ser excesivo sobre todo cuando coinciden una serie de subidas simultáneas de artefactos importantes (fundamentalmente EAR´s).

Comienza la JavaCup 2009

Leo hoy vía Google Reader la noticia oficial en JavaHispano del comienzo de la java Cup 2009, torneo al que aún no he podido presentarme en ninguna edición por falta de tiempo fundamentalmente, pero que espero estar próximamente (no se si en la edición de 2010 o cuando eso si, prefiero no comprometerme jeje) .

En cualquier caso, me animo a ayudarles a difundir una iniciativa interesante como piden en el post.

Sobre el tema de los premios, indican que:

“El ganador del concurso recibirá 1000 €, el segundo clasificado recibirá 500 €, el tercero 250 € y el cuarto 125 €. Además, todos ellos recibirán una suscripción anual a la revista Sólo Programadores. Los ganadores del concurso se anunciarán en el evento tecnológico OpenJavaDay, que se celebrará el 18 y 19 de junio en España, Madrid”.

En la facultad recuerdo no obstante haber realizado algunas prácticas similares en Inteligencia Artificial en equipo y los torneos entre compañeros de clase los recuerdo con cierto cariño friki :)

En fin, si alguno os animais … mucha suerte !

Algo de formación sobre WebServices en Spring

Junto con otro compañero del trabajo, este viernes de 10 a 13 estaré en el seminario impartido por Federico Caro sobre Spring Remoting en la Plaza de las Cortes en las oficinas de idealista.com. La inscripción por si hay interesados es gratuita.

Para hacerse una idea, el temario propuesto es el siguiente:
- Introducción a Spring Framework.
- Spring Remoting. Visión general.
- Modelo last-contract
- Exportación de servicios usando RMI
- Exportación de servicios usando Hessian y Burlap.
- Exportación de servicios usando HttpInvoker de Spring.
- Exportación de servicios mediante SOAP con XFire
- Modelo first-contract. Spring WebServices.
- First-contact vs last-contact approach
- Generación de Web Services con Spring. Soporte para Marshalling con OXM.
- Consumición de servicios web con WebServiceTemplate y soporte gateway
- Ejemplo práctico.
- Conclusiones.

Luego por supuesto con lo brasas que soy yo, tendrían que haber previsto una buena sección de ruegos y preguntas pero bueno ahí estamos :-)
Es posible que nos toque hacer una presentación de todo esto a nuestra vuelta a la empresa así que Ismael enteráte bien de todo jurjur.

Enlaces:

- Página oficial del seminario

El síndrome NIH

Desde el blog de Juanjo Navarro he llegado casualmente a una entrada sobre el síndrome NIH (Not Invented Here), consistente en el caso de la informática (aunque aplicable en muchos campos) en rechazar desarrollos creados “fuera de casa” por razones como los distintos orígenes de estos desarrollos, fiándose siempre más (en muchos casos sistemáticamente) del clásico “Bah, esto me lo pico yo en un par de días”.

Hay alguna razón más en el artículo original, pero sobre todo las siguientes tres me han llamado mucho la atención porque me parece que siempre hay que vigilarlas y es bastante sencillo caer en ellas:

  1. Nunca es tan sencillo como parece. Empiezas pensando que lo puedes hacer en dos días, y acabas invirtiendo meses. Literal. Conozco varias historias y frases memorables de este tipo.
  2. Probablemente no es la guerra en la que deberías estar. Sería mejor invertir ese tiempo en tu negocio que en hacer algo que ya existe. Bien es verdad que el tiempo que no te tomas creando tú algo, te lo tomas entendiendo lo de los demás. Aquí en este caso hay que analizar mínimamente cada situación. Tampoco es un axioma en mi opinión.
  3. Mucha gente lo ha intentado antes y falló. Todos nos creemos los programadores más listos sobre la tierra, pero es para pensarlo. También literal. Siempre pasa. Y cuando digo siempre, es SIEMPRE.

Personalmente podría añadir otra razón que me parece sumamente importante, y es la siguiente:

Un desarrollo que ya está usando mucha gente y hace algo (aunque sea mejorable) como poco está más testeado / probado que tu nuevo desarrollo. En muchos casos, si es Open Source y uno cree que puede mejorarlo, es posible colaborar además.