Spring управление транзакциями делает именно то, что вы описываете, на первый взгляд это может быть немного затруднительно, но все, что вам понадобится (для простейшего случая):
org.springframework.jdbc.datasource.DataSourceTransactionManager
org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy
org.springframework.transaction.support.TransactionTemplate
Подключите существующий DataSource и оберните его в TransctionAwareDataSourceProxy, затем создайте DataSourceTransactionManager с обернутым источником данных, сохраните их в ServletContext. Затем для каждой транзакции создайте TransactionTemplate, передаваемый в диспетчере транзакций, и вызовите метод execute (TransactionCallback) для запуска вашего кода. например:
new TransactionTemplate(transactionManager).execute(new TransactionCallback(){
public void doInTransaction(TransactionStatus ts){
// run your code here...use the dataSource to get a connection and run stuff
Connection c = dataSourceProxy.getConnection();
// to rollback ... throw a RuntimeException out of this method or call
st.setRollbackOnly();
}
});
Соединение будет привязано к локальному потоку, поэтому, если вы всегда получаете соединение с одним и тем же источником данных, т.е. с обернутым, вы получите одно и то же соединение в одной и той же транзакции.
Обратите внимание, что это простейшая установка пружинных транзакций ... не обязательно самая лучшая или рекомендуемая, для этого посмотрите справочные документы по пружинам или прочитайте пружину в действии.
... поэтому я думаю, что в качестве прямого ответа да это разумная вещь, это то, что весенние рамки делали в течение долгого времени.