При использовании AspectJ с iBatis, Spring транзакция не применяется - PullRequest
1 голос
/ 05 сентября 2011

Я использую iBatis 2.3.4, вызываемый веб-сервисом Axis 2. Я использую AspectJ ткачество во время сборки.

У меня есть следующий контекст приложения Spring:

<bean id="dataSource" class="org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy">
    <property name="targetDataSource">
        <ref bean="dataSourceImpl" />
    </property>
</bean>

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

<tx:annotation-driven transaction-manager="transactionManager" mode="aspectj" proxy-target-class="true"/>

У меня есть операция веб-службы с аннотацией @Transactional, таким образом:

@Override
@Transactional(propagation=Propagation.REQUIRED)
public void  doStuff() {
    System.out.println("--> isActualTransactionActive: " + TransactionSynchronizationManager.isActualTransactionActive());        
  .
  .
  .

}

Когда я звоню в веб-сервис, я вижу

-> isActualTransactionActive: false

поскольку транзакция фактически никогда не применяется. Кто-нибудь использовал AspectJ в сочетании с iBatis?

1 Ответ

0 голосов
/ 05 сентября 2011

Вы включили ткачество во время загрузки?

<context:load-time-weaver aspectj-weaving="on"/>

EDIT:

Вам, вероятно, также понадобится:

<?xml version="1.0" encoding="UTF-8"?>
<Context>
    <Loader loaderClass="org.springframework.instrument.classloading.tomcat.TomcatInstrumentableClassLoader" />
</Context>

в вашем META-INF / context.xml (чтобы избежать необходимости использовать параметр командной строки -javaagent.

...