Менеджер транзакций источника данных Spring не откатывается

<!-- Data source definition -->
<bean id="dataSourceWebsube"
    class="org.springframework.jdbc.datasource.DriverManagerDataSource"
    p:driverClassName="${jdbc.driverClassName}" p:url="${jdbc.url.websube}"
    p:username="${jdbc.username.websube}"   p:password="${jdbc.password.websube}" />

<bean id="jdbcTemplateWebsube" class="org.springframework.jdbc.core.JdbcTemplate">
    <property name="dataSource" ref="dataSourceWebsube" />
</bean>         

<!-- Transaction manager, actually this one is useless since the Transaction Manager Bean is already called transactionManager -->      
<tx:annotation-driven transaction-manager="transactionManager"/>  

<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSourceWebsube" />
</bean>

public class Test 
{
@Transactional
public static void testTranscational(JdbcTemplate jdbcTmpl)
{
    String sql = null;                              
    sql = "INSERT INTO NBSM.INT_RTLNOUTBOUND_PRODUCTS(BASEPRODUCTCODE)VALUES(1)";                
    jdbcTmpl.update(sql);           
    throw new RuntimeException();                       
}

public static void main(String[] args) {            
    ApplicationContext ctx = new ClassPathXmlApplicationContext("application-context.xml");
    JdbcTemplate jdbcTmpl = (JdbcTemplate) ctx.getBean("jdbcTemplateWebsube");      
    testTranscational(jdbcTmpl);
}
}

Привет,

Я пытаюсь проверить возможности Spring по управлению транзакциями, но не могу заставить его работать. Я пытался решить это часами, но не повезло.

Выше вы можете увидеть соответствующие определения config xml и тестовый класс dao. Даже когда я использую уровень отладки для регистрации, нет никакого следа механизма отката.

Любая помощь будет принята с благодарностью

1 ответ

Именно из-за Spring AOP можно только:

  • а) работа над Spring управляемым бобом
  • б) работа не на статических методах
  • c) учитывается только в том случае, если вызван Spring AOP Proxy (вам нужно вызывать компонент из другого компонента, но не из самого себя)

а) и б) ваши ошибки, вам нужно это исправить. - чтобы преодолеть проблему в) я решительно заменил Spring AOP на размах компиляции AspectJ.

Если я прав, даже обработка транзакции (по @Transational не должен работать.

Должен быть проверен кем-то еще:

я никогда не видел @Transactional в комбинации с JdbcTemplate Поэтому я сомневаюсь, что это работает вообще. - Но могу я ошибаться.

Другие вопросы по тегам