2009-02-17 11 views
5

El proyecto en el que estoy trabajando utiliza el acceso directo a datos JDBC en todo su esplendor y no utiliza ninguna transacción. Siento que es importante usar las transacciones y simplificar la forma en que se escriben los métodos de acceso a los datos, especialmente con algunos cambios que se realizan actualmente. El proyecto ha existido por bastante tiempo y no es adecuado para un marco ORM. También usa muchos Singleton (ugh) y desenredarlo para que pueda usar la inyección de dependencia sería una buena cantidad de trabajo y no creo que pueda convencer a nadie de que deberíamos hacer eso ahora.¿Cómo hacer transacciones simples Spring JDBC fuera del contenedor de IoC?

Me gusta la interfaz de Spring JDBC, específicamente a través de su SimpleJdbcTemplate. Mi pregunta es acerca de cómo habilitar algunas transacciones simples (por solicitud de servlet) para esto, sin tener que configurar nada programáticamente en cada método de acceso a datos o usando el contenedor Spring IoC o AOP. He jugado con mi propia arquitectura que termina con una interfaz similar a SimpleJdbcTemplate y puedo usar una única conexión y transacción de solicitud local cuando las llamadas se realizan en el contexto de una solicitud (a través de ServletRequestListener con ThreadLocal) Parece funcionar bien, pero creo que sería preferible usar una buena biblioteca externa como Spring JDBC.

¿Alguien tiene alguna experiencia con esto?

Respuesta

5

¿Quizás podría usar TransactionTemplate y TransactionCallback como se describe en Programmatic Transaction Management?

+0

Esto no funciona exactamente como estaba pensando, ya que requeriría programar las llamadas mediante el uso de TransactionTemplate en un nivel de aplicación más alto en lugar de simplemente hacer que cada llamada al JdbcTemplate use una transacción de solicitud local si es posible. Debería funcionar bien sin embargo. – ColinD

0

Spring maneja las transacciones para usted de manera declarativa sin tener que preocuparse por escribir clases AOP. Si está utilizando JDK 5 o superior y Spring 2.5, lo tiene aún mejor con annotations.

No estoy de acuerdo con las transacciones por servlet. Debe tener un nivel de servicio, que es la parte de la aplicación que conoce las unidades de trabajo. Los controladores llaman a los servicios, que manejan las transacciones.

+0

Mencioné en la pregunta que la aplicación no está actualmente en el contenedor de Spring y no se pudo mover fácilmente a ella. Me encantaría usar las transacciones declarativas de esa manera si pudiera. – ColinD

Cuestiones relacionadas