2009-02-17 7 views
5

Le projet sur lequel je travaille utilise un accès direct aux données JDBC dans toute sa splendeur et n'utilise aucune transaction. J'ai envie d'utiliser des transactions et de simplifier la façon dont les méthodes d'accès aux données sont écrites, surtout avec quelques changements qui sont faits actuellement. Le projet existe depuis longtemps et n'est pas adapté à un cadre ORM. Il utilise aussi beaucoup de Singletons (ugh) et le démêler pour qu'il soit capable d'utiliser l'injection de dépendance serait une bonne quantité de travail et je ne pense pas que je pourrais convaincre quelqu'un que nous devrions le faire maintenant. J'aime l'interface de Spring JDBC, en particulier à travers ses SimpleJdbcTemplate. Ma question est sur la façon d'activer certaines transactions simples (par demande de servlet) pour cela, sans avoir à définir quelque chose par programme dans chaque méthode d'accès aux données ou en utilisant le conteneur Spring IoC ou AOP. J'ai joué avec ma propre architecture qui se termine avec une interface similaire à SimpleJdbcTemplate « s et peut utiliser une seule connexion à la demande locale et de transaction lorsque les appels seraient faits dans le cadre d'une demande (par un ServletRequestListener avec un ThreadLocal). Cela semble bien fonctionner, mais je pense que l'utilisation d'une bonne bibliothèque externe comme Spring JDBC serait préférable.Comment faire des transactions Spring JDBC simples en dehors du conteneur IoC?

Quelqu'un a-t-il de l'expérience?

Répondre

5

Peut-être que vous pourriez utiliser TransactionTemplate et TransactionCallback comme décrit dans Programmatic Transaction Management?

+0

Cela ne fonctionne pas tout à fait ce que je pensais, car cela nécessiterait des appels à l'aide du programme d'emballage TransactionTemplate à un niveau supérieur d'application plutôt que d'avoir simplement chaque appel à la JdbcTemplate utiliser une transaction de demande locale si possible. Cela devrait fonctionner correctement. – ColinD

0

Spring traite les transactions pour vous de manière déclarative sans que vous ayez à vous soucier d'écrire des classes AOP. Si vous utilisez JDK 5 ou supérieur et Spring 2.5, vous l'avez encore mieux avec annotations.

Je suis en désaccord avec les transactions par Servlet. Vous devriez avoir un niveau de service, qui est la partie de l'application qui connaît les unités de travail. Les contrôleurs font appel aux services qui gèrent les transactions.

+0

je l'ai mentionné dans la question que l'application n'est pas actuellement dans le récipient de printemps et ne pouvait pas être facilement déplacé. si je pouvais j'aimerais utiliser les transactions déclaratives comme ça. – ColinD

Questions connexes