Spring Transaction management - PullRequest
       5

Spring Transaction management

2 голосов
/ 10 ноября 2011

В java Spring я столкнулся с проблемой отката транзакции.

Пример:

В моем коде 3 DAO (A, B, C).Все они расширяются JDBCTemplate:

@Transaction(propagation=new_required)
public void serviceClassProc() throws Exception {
   A.db1();
   B.db2();
   C.db3();
}   

Теперь с помощью приведенного выше кода, если я сгенерирую исключение в B.db2(), ничто не будет отменено.

Теперь, если я изменю B.db2следующим образом:

@Transaction(propagation=nested,rollbackon=Exception.class)
public void db2() throws Exception{
...
throw new Exception();

}

А затем вызовите serviceClassProc(), только транзакция в B.db2 будет откатана.

Я хочу реализацию, в которой все транзакции внутри serviceClassProc() свернутыназад.

Вот две конфигурации, которые я использую:

<bean id="bonddao" class="com.marki.bonds.staticdata.dao.MuniStaticDataDaoImpl"> <property name="dataSource" ref="c3p0DataSource" /> </bean> <bean id="dcldao" class="com.bonds.staticdata.dao.DclSettingsDaoImpl"> <constructor-arg ref="c3p0DataSource" /> </bean> <bean id="batchlogdao" class="com.bonds.staticdata.dao.MuniFeedHandlerBatchLogDaoImpl"> <constructor-arg ref="c3p0DataSource" /> </bean>

<bean id="bondsApplication" class="com.markit.bonds.staticdata.service.MuniRefDataSyncApp"> <property name="refdataService" ref="refDataSynchService" /> <property name="mailService" ref="mailSender"></property> <property name="batchLogger" ref="batchlogdao"></property> </bean> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="c3p0DataSource" /> </bean> <tx:annotation-driven transaction-manager="transactionManager" />

Где я ошибаюсь?Неправильно ли иметь 3 DAO, расширяющих шаблон JDBC?Должны ли все они использовать один и тот же JDBCTemplate?

1 Ответ

3 голосов
/ 10 ноября 2011

Вы должны добавить rollbackon=Exception.class к аннотации вашего сервисного метода и полностью удалить аннотацию транзакции из методов DAO. Плохо иметь контроль транзакций на уровне DAO.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...