Daily Archives: 08/02/2010

Hibernate SQL Logging / Haciendo log de SQL con Hibernate

Here is the link to a (rather short ) article about SQL logging in Hibernate, Hibernate: logging SQL.

DirectJNgine 1.2 beta 3 ya está disponible

Hoy he hecho pública la beta 3 de DirectJNgine 1.2, un proyecto Open Source que se puede descargar desde http://code.google.com/p/directjngine/.

Para aquellos que no conozcais DirectJNgine (también llamada DJN), es una librería Java que permite llamar directamente a objetos Java desde Javascript vía Ajax.

Básicamente, uno escribe el siguiente código Java,

public class Action1 {
  @DirectMethod
  public String sayHello( String name) {
    return “Hello, ” + name + “. Nice to meet you!”;
  }
}

 y lo invoca desde Javascript como sigue:

Action1.sayHello( “Pedro”,
  function(p, response) {
    Ext.MessageBox.alert( “Greetings”, response.result );
  }
);

Tan simple como puede serlo.

DirectJNgine funciona como back-end de ExtJs, una librería de interface de usuario que quizá sea la más potente que se puede encontrar a día de hoy. Vale la pena verla en acción.

DirectJNgine se ha desarrollado en mi tiempo libre, aunque con los criterios con que llevamos a cabo los desarrollos profesionales. Por tanto no es una librería, sino un producto que cuenta con características poco comunes en proyectos Open Source de tamaño similar:

  • Incluye una guía de usuario actualizada en cada versión, de casi 50 páginas.
  • Cuenta con más de 100 tests automatizados, ya que se ha desarrollado utilizando desarrollo basado en tests, TDD.
  • Se testea contra Internet Explorer, Firefox, Safari, Chrome y Opera antes de cada release (final, beta o alpha).
  • Incluye más ejemplos que los protocolos implementados por el propio ExtJs para PHP, NET, etc.(!) .
  • Incluye características muy avanzadas orientadas a aplicaciones de alto rendimiento: soporte para peticiones batched atendidas por múltiples threads, minificación del código Javascript, unificación de múltiples APIs en un único archivo, etc.
  • Su licencia es LGPL v3, con lo que se puede usar en productos comerciales.

En el momento de escribir esto, el thread de DirectJNgine es el más visitado (¡más de 25.000 visitas!) y con más entradas de todos los existentes en el forum dedicado a ExtDirect, superando incluso a los protocolos implementados por el equipo de ExtJs.

¡Una lástima que tan solo sea un hobby!

Escribir Código Correcto en Java

En mi último post abordé la problemática de la escritura de código robusto en presencia de errores, redirigiéndoos a un artículo sobre código exception-safe.

Hoy quiero hablar de código correcto, tema sobre el que también he escrito este artículo.

Antes de comenzar a hablar de corrección vale la pena recordar la siguiente frase de Bertrand Meyer,

“La corrección del Software es una noción relativa”

Y ello es así porque

Un sistema o elemento de software no es correcto o incorrecto por sí mismo; es correcto o incorrecto con respecto a una cierta especificación. Hablando estrictamente, no deberíamos discutir si ciertos elementos de software son correctos, sino si son consistentes con su especificación.

Esto se corresponde con mi experiencia real, y es que en la práctica el principal motivo por el que el software no es correcto es simplemente que no se define con claridad qué debe hacer.

Dicho de otro modo, no se establece un contrato.

Debo insistir en que utilicemos la palabra contrato en adelante. 

Porque, contrato suena a cosa seria. Y es que escribir código correcto requiere una cierta actitud.

En un contrato uno debería plasmar no sólo qué se debe hacer, sino qué precondiciones se deben cumplir para poder hacerlo (lo siento, no puedo llegar al pueblo de al lado con mi coche si me lo dejas sin gasolina, o al menos no tan fácilmente), y qué se garantiza (quizá llegar con mi coche con las cuatro ruedas pinchadas sea llegar, pero quizá no sea suficiente).

En el artículo se aborda la cuestión de cómo verificar los contratos de nuestro código Java mediante el uso de aserciones, una característica que está presente en Java desde la versión 1.4 del JDK.

Pero también se abordan cuestiones tales como cuán exigentes debemos ser en nuestro contrato, cómo asegurarnos de que no exigimos más de lo razonable (no hay nada más estúpido y a la vez frustrante que exigir algo que no se puede hacer), etc.

Vale la pena resaltar que el artículo pone el énfasis en técnicas concretas de programación, sin las que, desde mi punto de vista, la corrección del código no es más que una ficción.

High Quality Java Code: Contracts & Assertions

Here is the link to High Quality Java Code: Contracts & Assertions!

Escribir Código Robusto en Java en Presencia de Excepciones

En cualquier programa Java no trivial nuestro código debe enfrentarse a la posibilidad de que se produzca una excepción, que es la forma estándar en Java de indicar que se ha producido un error que no se sabe tratar y se propagará hacia el exterior con la esperanza de que algún otro código lo trate.

Todos sabemos que, cuando se produce una excepción, debemos gestionarla de algún modo (imprimir un mensaje de error, abortar el programa, o quién sabe qué), o bien hacer limpieza y pasar la excepción hacia arriba, para que otro código trate el problema adecuadamente.

Aunque pueda parecer extraño, gestionar una excepción suele ser mucho más sencillo que hacer limpieza. De hecho, en cuanto se estudia con detenimiento, se descubre que esto último es algo extremadamente difícil de conseguir con garantías.

Y aquí la clave está en ese “con garantías”. No se habla aquí de hacerlo lo mejor posible, sino de hacerlo proporcionando garantías.

Pero, para ofrecer garantías, se debe saber cómo analizar el código para verificar qué es posible ofrecer realmente en un contexto determinado.

Y es que las únicas garantías que se pueden ofrecer son las verificables: las otras, simplemente, no existen. Son puro wishful thinking.

Estos días he publicado un artículo sobre código exception-safe, código que garantiza que funciona correctamente cuando se enfrenta a excepciones. El artículo se puede descargar aquí.

En el artículo se abordan los distintos niveles de garantías que puede dar nuestro código ante una excepción, se llega a una conclusión sobre qué niveles son aceptables y cuáles no, y se abordan técnicas concretas para conseguir dar estas garantías.

High Quality Java Code: Exception-Safe Code (I)

Here is the link to High Quality Java Code: Exception-Safe Code (I)