Donde debe ser" @ Transaccional " colocar la Capa de Servicio o DAO


En primer lugar, es posible que esté preguntando algo que se ha preguntado y respondido antes, pero no pude obtener un resultado de búsqueda . Bien generalmente (o siempre hasta ahora:) ) Definimos anotaciones transaccionales en la capa de servicio crud típico de hibernación de primavera es generalmente

Controller- > Manager - > Dao - >Or .

Ahora tengo una situación en la que necesito elegir entre el modelo de dominio basado en el sitio del cliente . Digamos que el cliente A está usando mi modelo de dominio todo es bueno pero luego un otro sitio de cliente me daría un servicio web y no estaría usando nuestro modelo de dominio .

Qué capa debería reemplazar . Creo que tiene que ser Dao que me va a obtener los datos del servicio web y enviarlos de vuelta.es decir, dos capas Dao escritas por separado y conectadas según el escenario .

Ahora me he dado cuenta de que hemos estado haciendo acoplamiento apretado (si hay tal cosa o decir que no tiene acoplamiento suelto) cuando ponemos @Transactional en la capa de servicio . Tantos cerebros no pueden ser o están equivocados (lo dudo).

Entonces, la pregunta es "¿Dónde debería estar "@Transactional" colocar la capa de servicio o DAO ?"y es que la capa de servicio hacia abajo debería estar reemplazando .

Author: Shahzeb, 2010-10-08

5 answers

Idealmente, la capa de servicio(Administrador) representa su lógica de negocio y, por lo tanto, debe anotarse con @Transactional.

La capa de servicio puede llamar a diferentes DAO para realizar operaciones de base de datos. Supongamos situaciones en las que tiene 3 operaciones DAO en un método de servicio. Si su 1ra operación de DAO falló, otros dos pueden ser pasados y usted terminará encima del estado inconsistente de la base de datos. Anotar la capa de servicio puede salvarlo de tales situaciones.

 42
Author: Badal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-02-26 07:22:22

Usted va a querer que sus servicios sean transaccionales. Si sus DAOs son transaccionales, y llama a diferentes DAOs en cada servicio, entonces tendría varios TXS, que no es lo que desea. Haga que las llamadas de servicio sean transaccionales, y todas las llamadas DAO dentro de esos métodos participarán en el tx para el método.

 52
Author: hvgotcodes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-10-08 01:12:14

Sugeriré poner @Transactional en los métodos de la capa de servicio ya que podemos tener múltiples implementaciones DAO. al usar esto podemos hacer que nuestros servicios sean transaccionales. refiérase

La mejor práctica es utilizar un servicio básico genérico para ofrecer servicios comunes.

El Servicio es el mejor lugar para poner @Transactional, la capa de servicio debe contener el comportamiento de caso de uso a nivel de detalle para una interacción de usuario que lógicamente iría en una transacción. de esta manera podemos mantener la separación entre el código de la aplicación web y la lógica de negocio.

Hay muchas aplicaciones CRUD que no tienen ninguna lógica de negocio significativa, para ellos tener una capa de servicio que solo pasa cosas entre los controladores y los objetos de acceso a datos no es útil. En estos casos podemos poner anotación de transacción en Dao.

Así que en la práctica puedes ponerlos en cualquier lugar, depende de ti.

Al tener varias llamadas en su servicio que necesita @Transaccional en servicio. diferentes llamadas al servicio se ejecutarán en diferentes transacciones si pones @Transactional en servicio.

 3
Author: kapil das,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-09-15 15:01:52

Es una elección personal basada en los tipos de aplicación, si la aplicación es layerd a través de muchos módulos y la mayoría de las operaciones están basadas en @CRUD ,entonces tener una anotación @transaccional a nivel de servicio hace más sentido.. tipo de motor de aplicación como programadores, servidores de trabajo, aplicaciones de informes@etl, donde las sesiones y el concepto de usuario no existe, entonces la transacción de propagación a nivel de contexto es la más adecuada... no debemos terminar creando transacciones clusterd poniendo @transaccional cada donde terminan los anti-patrones transaccionales...de todos modos para el control pragmático de transacciones JTA2 es la respuesta más adecuada...una vez más, depende del clima, puede usarlo en una situación dada...

 0
Author: David Hamas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-03-05 02:40:40

Debe usar @Transactional at service layer, si desea cambiar el modelo de dominio para el cliente B donde tiene que proporcionar los mismos datos en un modelo diferente,puede cambiar el modelo de dominio sin afectar la capa DAO proporcionando un servicio diferente o creando una interfaz e implementando la interfaz en un modelo diferente y con el mismo servicio poblar el modelo basado en el cliente.Esta decisión se basa en el requisito de negocio y el alcance del proyecto.

 0
Author: Sonia Jain,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-08-27 06:40:46