JSE - Ejemplo básico de inyección de dependencias con CDI, DeltaSpike, Weld; persistencia: Batoo JPA con H2,Transacción incluida

Bueeeeeno... pues resulta que andando de ocioso, quise hacer algo en JSE que incluyera algo de inyección de dependencias. Estuve viendo opciones y me pareció buena idea hacer algo con CDI (de spring hay hartos ejemplos) y las casi recién nacidas extensiones de Apache Delta Spike y para la parte de persistencia, vagando por las internetes me encontré con Batoo que clama ser mucho más rápido que Hibernate (éso es ooooootro tema) y pues decidí incluirlo para mi ejemplo, para la base de datos usé H2; manos a la obra:

De entrada, como acá en el trabajo no puedo usar Maven, tuve que bajar y configurar todo casi a mano, la lista de jars queda así:

-guava-14.0.1.jar
-commons-lang-2.6.jar
-validation-api-1.0.0.GA.jar
-bonecp-0.7.1.RELEASE.jar
-h2-1.3.171.jar
-commons-dbutils-1.5.jar
-commons-io-2.4.jar
-asm-3.3.1.jar
-deltaspike-cdictrl-weld-0.3-incubating.jar
-deltaspike-core-api-0.3-incubating.jar
-deltaspike-core-impl-0.3-incubating.jar
-deltaspike-jpa-module-api-0.3-incubating.jar
-deltaspike-cdictrl-api-0.3-incubating.jar
-deltaspike-jpa-module-impl-0.3-incubating.jar
-weld-api.jar
-weld-spi.jar
-weld-se.jar
-batoo-annotations-2.0.1.0-RTM.jar
-batoo-jdbc-2.0.1.0-RTM.jar
-batoo-jpa-2.0.1.0-RTM.jar
-batoo-jpa-spi-2.0.1.0-RTM.jar
-jpql-0.1.6.jar
-parser-2.0.1.0-RTM.jar
-persistence-api-2.0.jar

Ahora, para la parte de código, el punto de entrada para detonar el contexto de inyección de dependencias, queda así:

 

Ya con ésto podemos dentro del código de la clase   (que puede ser el punto de entrada a toda una aplicación) obtener recursos mediante anotaciones, el código de dicha clase es:

 

Como se puede ver, ya tengo una interface   que está anotada con   con lo cual ya no tenemos que hacer la implementación a mano; se ejecuta el método  ; en la implementación el código queda así:

 

En la implementación ya tengo anotado mi   también anotado, y la implementación de mi método   la cual insertará un registro en mi base de datos (un objeto de la clase  .

Ahora, aquí hay un punto a notar, porqué el   no está anotado con:  ; bueno, según la documentación es porque éso sólo está permitido en ambientes EE; entonces, como no soy nadie para discutir las docs, y en la página de DeltaSpike viene un ejemplo, pues de ahí parto para poder generar mi  ; el código queda así:

 

Con ésta clase, ya tenemos disponible los   por medio de la anotación  .

La clase de mi bean, pojo, modelo, VO, DTO, entidad o como le quieran llamar quedó:

 

Ya con ésto queda el código completo del ejemplo.
Los ficheros de configuración quedan de la siguiente forma:
el   que es algo así como el   de spring, queda:

 
Sólo contiene la declaración del interceptor de transacciones propio del DeltaSpike, y ya.
Y el   queda:

 

Lo único que no me gustó (y que espero corrijan en otro release) es el control de transacciones que no queda taaan a detalle como el de las anotaciones de spring (las propiedades de isolation level y propagation), de ahí en fuera, me gusta cómo va quedando éste rollito de unificar las varias extensiones existentes (CODI,CanDI,Seam, por mencionar algunas) en DeltaSpike.

Espero que en algún desarrollo en Swing tengan oportunidad de incluir y probar algo como mi ejemplo :-)
Digo, es una posibilidad (ya sabemos que existe Griffon, antes de que lo venga a promocionar Enrique =D )
Hasta la próxima.