SCBCD - Anotaciones y Descriptores de Despliegue XML


(Imagen : Rembrandt - El rapto de Europa)

Si has hecho aplicaciones J2EE, te habrás dado cuenta que para configurar un componente d ela aplicación lo recurrente es usar un archivo XML Struts (Struts-Config), Spring (Application-Context), Tiles (Tiles-Def.xml), Ibatis (sus sql maps) y el descriptor de despliegue de una aplicación web (web.xml) son archivos XML que si bien nos traen ciertos beneficios, tampoco son una panacea (sobre todo si tienes que mantener varios).

Con J2SE 5.0 se habilitaron las anotaciones en Java, lo que nos permite "anotar" elementos del programa en los archivos de código fuente (*.java). Mediante EJB 3.0 ,estas anotaciones nos permiten configurar en el mismo código fuente los EJB's que estemos desarrollando sin necesidad de recurrir al descriptor de despliegue ( ejb-jar.xml). Las anotaciones nos permiten:
  • Definir Web Services
  • Definir EJB's (Stateless, Statefull, MessageDriven)
  • Invocar métodos del ciclo de vida (PostConstruct, PreDestroy) o a los Interceptores (AOP con sabor a EJB 3.0)
  • Inyección de dependencia (la gente que trabaja en Spring sabe de lo que estoy hablando...no?)
  • Atributos de transacción y Seguridad
Como ven, se puede hacer todo (bueno, casi todo ) lo que se haría con un descriptor XML, de una forma más sencilla, más fácil de entender y sin tener que mantener un archivo XML más. Pero, siempre hay que pagar un precio. Ahora, la configuración está amarrada al código fuente: para realizar un cambio, hay que cambiar la aplicación en sí. Por eso, se recomienda usar anotaciones para metadata que no cambie muy frecuentemente, como por ejemplo:
  • Metadata Structural (@Stateless, @WebService, @Entity)
  • Dependencias del entorno (@EJB, @Resource, @PersistenceContext)
  • Métodos del ciclo de vida (@PostConstruct, @TimeOut, @Remove)
También hay que considerar que si tenemos anotaciones junto a descriptores de despliegue, el descriptor va a sobreescribir la metadata de las anotaciones, así como los valores por defecto. Entonces, los dejo con tips para el examen:

  • Hay metadata que no s epuede configurar con anotaciones , y la única opción es usar eld escriptr de despliegue: Interceptores por Defecto para EJB's, Entity Beans de EJB 2, etc
  • También hay anotaciones que no pueden sobreescribirse con XML . Ej: El tipo de Session Bean (Statetul o Stateless)
  • Tener siempre es mente los valores por defecto definidos en la especificación, de modo que ya no usemos ni anotaciones ni xml
    • Tipo de demarcación de Transacciones: CMP(Container managed Transaction)
    • Atributo de transacción: TX_REQUIRED
    • Nombre de la anotación: Derivado de la clase, o el nombre del campo/método
En la próxima veremos un poco de inyección de dependecia. Hasta otra!!

Publicar un comentario