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.
- neko069's blog
- Inicie sesión o regístrese para enviar comentarios