Estoy en el proceso de desarrollo de una aplicación de procesamiento financiero en Java con EJB3 (Hibernate + Glassfish para la capa de aplicaciones y servicios web, Lift on Glassfish para la interfaz de usuario web) y yo Estoy luchando con la pregunta de dónde poner mi lógica comercial.EJB3 Business Logic Patterns & Practices
Cuando se inició este proyecto, nuestra primera noción era poner la mayor parte de nuestra lógica comercial en los beans de sesión sin estado. Sin embargo, a medida que pasa el tiempo, hemos encontrado que la inyección de dependencia proporcionada por el marco EJB es demasiado restrictiva, por lo que gran parte de nuestra lógica empresarial ha terminado en POJOs que Guice ensambla en el método @PostConstruct de los beans de sesión sin estado . Este progreso ha llevado a la fragmentación de nuestra lógica empresarial entre los beans de sesión y los POJO, y estoy tratando de encontrar un enfoque para corregir esto.
Inicialmente, intentamos que nuestro nivel web utilizara las interfaces remotas de los beans de sesión para realizar algunas funciones que son accesibles tanto desde la interfaz de usuario como desde la capa de servicio web, proporcionada por beans de sesión sin estado anotados por @ WebService . Esto resultó ser una pesadilla desde una perspectiva de persistencia y rendimiento, porque nuestro gráfico de entidades puede crecer bastante y volver a unir el gráfico de entidad separado al contexto de persistencia resultó ser altamente propenso a errores, por lo que nuestra solución fue comenzar a pasar el objeto identificadores alrededor y buscando las entidades de la base de datos donde sea que se necesiten.
Mi pregunta básica es esta: ¿qué principios y directrices puede sugerir para decidir si la lógica comercial debe ir en un bean de sesión o un POJO? ¿Cuándo tiene sentido pasar beans de entidad, dado un gráfico de objeto complejo?
¿Por servicios de "sistema", te refieres a cosas como el contexto de persistencia, transacciones, etc.? Lo pregunto porque mi aplicación usa una cantidad de servicios externos que requieren dependencias inyectadas (configuración de conexión y demás) que estoy manejando con Guice. –