manager example ejemplos curso createentitymanagerfactory crear consultas java jpa jboss ejb

java - example - jpa ejemplos



¿Puedo inyectar propiedades en un escucha de entidad JPA? (2)

¿Estás usando Spring? Si es así, puede usar @Configurable y tener ese aspecto para inyectar sus dependencias por usted.

Podría hacer un prototipo de esto y ver qué pasa, pero estoy siendo flojo. Quiero poder inyectar un EJB3 en mi Escucha de entidad JPA para que pueda acceder a la funcionalidad del EJB durante la operación PrePersista. ¿Es eso posible? Si no ... entonces, bajo JBoss, ¿se creará el Oyente una vez, o una vez por invocación de método? Creo que estoy tratando de entender qué tan liviano será cada invocación en términos de hacer búsquedas JNDI, etc.

Alguien sabe de una buena fuente de información sobre estos temas, ya que mi breve búsqueda en Google no generó nada.


Tendrá que recurrir a las búsquedas JNDI para acceder a otros EJB desde su EntityListener. Nunca he visto una forma de inyectarlos directamente. Supongo que esto se debe a la semántica de EntityListener.

Lo que sigue es mi experiencia con JBoss 4.0.x y 4.2.x.

Como ejemplo, considere @PostPersist - llamado después de que se ejecute la instrucción de inserción. Hay dos cuestiones a considerar:

  • La base de datos no reflejará la entidad actual si abre otra sesión para consultarla (incluso con una búsqueda JNDI). No hay garantía de que la transacción se comprometa solo porque la sesión se vació. Tampoco tendrá claves primarias autogeneradas.

  • Los oyentes de entidades no parecen estar destinados a nada aparte de actualizar los campos administrados o verificar la integridad de los datos antes de una confirmación (no a diferencia de un disparador de base de datos), lo que limita seriamente su utilidad. Específicamente, en JBoss, ni siquiera puede buscar el contexto de seguridad actual para registrar quién está realizando el cambio. Eso apesta.

Con respecto a la cantidad de oyentes de entidades que existen, mi experiencia en JBoss 4.2.x fue que solo existió una sola instancia , y los métodos fueron llamados en el contexto de un hilo contenedor. Sin embargo, esto puede no ser cierto en una configuración agrupada. De cualquier forma, le recomendaría que NO almacene sus referencias en los oyentes de entidades: no está claro qué es exactamente lo que JBoss podría hacer con ellos (pasivarlos, espero que no, pero nunca se sabe).