2010-09-13 12 views
6

Obviamente el uso de beans EJB sin estado en una entidad huele frijol, pero por favor, considere un escenario de la siguiente manera y dígame si usted sabe de una mejor solución:El uso de beans EJB sin estado en un bean de entidad

  1. Tengo una InvoiceTemplate bean de entidad con el campo NextInvoiceDate
  2. Generación NextInvoiceDate es un procedimiento complejo y debe ser realizada fuera de la clase InvoiceTemplate
  3. NextInvoiceDate debe ser actualizada cada vez que InvoiceTemplate se almacena en la db

por ahora no tengo la lógica en cuanto a la generación de NextInvoiceDate en @PrePersist@PreUpdate methon en InvoiceTemplate bean de entidad. La lógica es cada vez más complicada y quiero moverlo fuera del frijol InvoiceTemplate entidad. Me parece que debería haber un servicio para calcular NextInvoiceDate. ¿Pero entonces es correcto invocar este servicio desde el interior de InvoiceTemplate?

+0

es que una entidad-Bean (EJB 2.0) o una entidad JPA? – Bozho

+0

@Bozho, es una entidad JPA – mgamer

Respuesta

3

No es un olor tan - es una inclinación hacia el diseño de dominio impulsada.

no sé de ninguna manera de hacer esto automáticamente, pero se puede:

  • en los beans de sesión en el que maneje su Invoicetemplate, inyectar el frijol de ayuda que tiene la lógica para calcular la próxima fecha
  • crear un campo privado con un regulador de la entidad, y antes de comenzar a utilizarlo llamar entity.setNextDateHelper(..)

también puede comprobar si AspectJ no ofrece algunas opciones de EJB para que pueda inyectar t El EJB cuando se crea una entidad de un tipo determinado (InvoiceTemplate). AspectJ funciona así con los granos de primavera, no sé si existen tales opciones para EJB.

+0

Bien dicho. +1 solo para la primera oración. –

0

¿Necesita algo tan complicado como un servicio o EJB? ¿Puedes escribir un método estático (posiblemente en una clase de utilidad) para mantener la lógica? Normalmente soy bastante sesgada en contra de este tipo de cosas, pero si todo lo que tienes es una lógica compleja que no requiere ninguna interacción del DB o mucha colaboración objeto, éste puede ser el enfoque más limpio.

+0

Las pruebas se dañarían de esta manera. – mgamer

+1

Bueno, ¿qué pasa si se requiere una interacción de DB y mucha colaboración de objetos? – musiKk

+1

Si lo hace, es probable que haya vuelto a un servicio o EJB nuevamente, por lo que puede participar en transacciones o compartir contexto. Lo que te lleva de vuelta a los problemas de sincronización, coordinación y dependencias. – TMN

Cuestiones relacionadas