Откат транзакции Spring compile time weaving

Я пытаюсь настроить Aspectj Compile Time Weaving (CTW) в Spring. Однако после добавления mode="aspectj" к tx:annotation-driven все транзакции завершаются сбоем, и в результате в базе данных не сохраняются никакие объекты.

Вот соответствующая часть моей конфигурации:

<tx:annotation-driven transaction-manager="transactionManager" mode="aspectj" />
<context:spring-configured />
<context:annotation-config />
<context:component-scan base-package='some.package' />
<aop:aspectj-autoproxy />
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>

<bean id='entityManagerFactory' class='org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean'><property name="persistenceUnitName" value="myPU" /> 
<property name="dataSource" ref="dataSource" />
</bean>

У меня также есть aop.xml в / META-INF (хотя не уверен, что файл нужен)

<!DOCTYPE aspectj PUBLIC
        "-//AspectJ//DTD//EN" "http://www.eclipse.org/aspectj/dtd/aspectj.dtd">
<aspectj>
    <weaver>
        <!-- only weave classes in our application-specific packages -->
        <include within="some.package.*" />
    </weaver>
    <aspects>
        <aspect
            name="org.springframework.transaction.aspectj.AnnotationTransactionAspect" />
    </aspects>
</aspectj>

Некоторые замечания:

  • Я придерживаюсь CTW (поэтому не LTW) из-за среды, с которой я работаю.
  • Я использую @PersistenceContext, чтобы получить EntityManager
  • Без mode = aspectj в tx: на основе аннотаций транзакции работают нормально
  • Я не использую Spring MVC
  • Я использую GWT 2.5

редактировать:

Мой проект носит Maven характер, и мне тоже пришлось добавить этот плагин. Но я запускаю приложение, используя Eclipse и Google Plugin. Я запускаю проект как A Web Application (google plugin). Я не уверен, что этот код в Maven правильно инициализирован ...

<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>aspectj-maven-plugin</artifactId>
<version>1.3</version>
<configuration>
<complianceLevel>1.6</complianceLevel>
<encoding>UTF-8</encoding>
<aspectLibraries>
<aspectLibrary>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
</aspectLibrary>
</aspectLibraries>
</configuration>
<executions>
<execution>
<goals>
<goal>compile</goal>
<goal>test-compile</goal>
</goals>
</execution>
</executions>
</plugin>

person Vjeetje    schedule 23.02.2013    source источник


Ответы (1)


Это соответствующие части моей помпы:

<properties>
    <aspectj.version>1.6.11</aspectj.version>
    <aspectj-maven-plugin.version>1.2</aspectj-maven-plugin.version>
</properties>

<dependencies>
     <dependency>
           <groupId>org.aspectj</groupId>
           <artifactId>aspectjrt</artifactId>
           <version>${aspectj.version}</version>
     </dependency>
     <dependency>
           <groupId>org.aspectj</groupId>
           <artifactId>aspectjweaver</artifactId>
           <version>${aspectj.version}</version>
     </dependency>
...
</dependencies>
...

<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>aspectj-maven-plugin</artifactId>
            <version>${aspectj-maven-plugin.version}</version>
            <!-- NB: do not use 1.3 or 1.3.x due to MASPECTJ-90 - wait for 1.4 -->
            <dependencies>
                <dependency>
                    <groupId>org.aspectj</groupId>
                    <artifactId>aspectjrt</artifactId>
                    <version>${aspectj.version}</version>
                </dependency>
                <dependency>
                    <groupId>org.aspectj</groupId>
                    <artifactId>aspectjtools</artifactId>
                    <version>${aspectj.version}</version>
                </dependency>
            </dependencies>
            <executions>
                <execution>
                    <goals>
                        <goal>compile</goal>
                        <goal>test-compile</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <outxml>true</outxml>
                <aspectLibraries>
                    <aspectLibrary>
                        <groupId>org.springframework</groupId>
                        <artifactId>spring-aspects</artifactId>
                    </aspectLibrary>
                    <aspectLibrary>
                        <groupId>org.springframework.security</groupId>
                        <artifactId>spring-security-aspects</artifactId>
                    </aspectLibrary>
                </aspectLibraries>
                <source>1.6</source>
                <target>1.6</target>
                <encoding>utf-8</encoding>
            </configuration>
        </plugin>

    </plugins>
</build>

Работает без проблем и без всяких aop.xml

person Ralph    schedule 23.02.2013
comment
Это в основном то же самое. Проблема в том, что я использую режим разработки GWT, и этот плагин aspectj-maven, вероятно, не скомпилирован. Когда я запускаю проект как веб-приложение с помощью плагина Google, это, вероятно, пропускается ... Но как я могу использовать плетение CTW, а затем GWT? - person Vjeetje; 23.02.2013
comment
@ GTT4Ever: Если проблема в GWT, то я не могу вам помочь, извините. - person Ralph; 23.02.2013
comment
Я не думаю, что проблема в GWT. Могу ли я провести какой-нибудь тест, чтобы лучше понять эту проблему? - person Vjeetje; 25.02.2013
comment
Напишите небольшой пример приложения без GWT - person Ralph; 25.02.2013
comment
Я думаю, что эта проблема связана с stackoverflow.com / questions / 15047071 /. Я предоставил туда небольшой образец приложения. - person Vjeetje; 27.02.2013
comment
@Arjan: ты первый, кто это заметил. ;-) Поправил. - person Ralph; 15.07.2013