Как сделать простые транзакции Spring JDBC вне контейнера IoC? - PullRequest
5 голосов
/ 17 февраля 2009

Проект, над которым я работаю, использует прямой доступ к данным JDBC во всей своей красе и не использует никаких транзакций. Я чувствую, что использование транзакций и упрощение написания методов доступа к данным важно, особенно с некоторыми изменениями, которые вносятся в настоящее время. Проект существует уже довольно давно и не подходит для платформы ORM. Он также использует много Singletons (тьфу), и распутывание его, чтобы сделать возможным использование инъекций зависимостей, было бы изрядной работой, и я не думаю, что смогу убедить кого-либо, что мы должны сделать это сейчас.

Мне нравится интерфейс Spring JDBC, особенно через SimpleJdbcTemplate. Мой вопрос о том, как включить для этого несколько простых транзакций (для каждого запроса сервлета), без необходимости устанавливать что-либо программно в каждом методе доступа к данным или с использованием контейнера Spring IoC или AOP. Я поиграл с моей собственной архитектурой, которая заканчивается интерфейсом, похожим на SimpleJdbcTemplate, и может использовать одно локальное соединение запроса и транзакцию, когда вызовы к нему выполняются в контексте запроса (через ServletRequestListener с ThreadLocal). Кажется, это работает хорошо, но я думаю, что использование хорошей внешней библиотеки, такой как Spring JDBC, было бы предпочтительным.

У кого-нибудь есть опыт?

Ответы [ 2 ]

5 голосов
/ 17 февраля 2009

Возможно, вы могли бы использовать TransactionTemplate и TransactionCallback , как описано в Программное управление транзакциями ?

0 голосов
/ 17 февраля 2009

Spring обрабатывает транзакции для вас декларативно, не беспокоясь о написании классов AOP. Если вы используете JDK 5 или выше и Spring 2.5, у вас это будет еще лучше с аннотациями .

Я бы не согласился с транзакциями для каждого сервлета. У вас должен быть сервисный уровень, который является частью приложения, которое знает о единицах работы. Контроллеры обращаются в сервисы, которые обрабатывают транзакции.

...