2010-02-03 14 views
5

Quiero utilizar spring-aspects para hacer que mis métodos sean transaccionales, pero sin utilizar Spring AOP (Spring AOP funciona muy bien con: <tx:annotation-driven/>). Estoy usando Maven para administrar mi proyecto.Cómo ajustar springframework @Transactional con AspectJ

¿Hay alguna manera de hacer compilar el tiempo tejiendo en mis clases de proyecto entonces "son Transactional". Estaba tratando de usar el Mojo's AspectJ Maven Plugin, pero sin ningún buen resultado.

Por favor ayuda.

+0

¿Cuál es el problema con el complemento aspectj? ¿Podrías tu pom? –

+0

No hay problema con el complemento. Tuve un problema con la configuración del resorte. – Monku

Respuesta

4

Lo descubrí. Maven plugin funciona bien, pero el problema era con mi configuración de primavera: que tenía:

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> 
    <property name="entityManagerFactory" ref="entityManagerFactory"/> 
</bean> 
<tx:annotation-driven transaction-manager="transactionManager"/> 

Lo que necesitaba era:

<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> 
    <property name="sessionFactory" ref="sessionFactory"/> 
</bean> 
<bean class="org.springframework.transaction.aspectj.AnnotationTransactionAspect" factory-method="aspectOf"> 
    <property name="transactionManager" ref="transactionManager"/> 
</bean> 

ahora funciona bien. Y el rendimiento de mis métodos @Transactional mejoró y eso es lo que estaba buscando.

Aquí es mi experto aspectj configuración plugin:

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>aspectj-maven-plugin</artifactId> 
    <version>1.3</version> 
    <configuration> 
     <aspectLibraries> 
      <aspectLibrary> 
       <groupId>org.springframework</groupId> 
       <artifactId>spring-aspects</artifactId> 
      </aspectLibrary> 
     </aspectLibraries> 
     <source>1.5</source> 
     <showWeaveInfo>true</showWeaveInfo> 
    </configuration> 
    <executions> 
     <execution> 
      <goals> 
       <goal>compile</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 

esperanza esto ayuda a alguien.

+0

Tengo una pregunta para ti: en esta publicación, has reemplazado el tipo de 'transactionManager' bean de' JpaTransactionManager' a 'HibernateTransactionManager'. Entonces, ¿está diciendo 'org.springframework.transaction.aspectj.AnnotationTransactionAspect' que no funciona con JPA? – STaefi

+0

No lo creo. Lo más probable es que estropeé algo/no lo configuré correctamente para que JPA funcione, pero de alguna manera funcionó para Hibernate. Fue hace mucho tiempo, ni siquiera recuerdo de qué proyecto se trataba. – Monku

4

tal vez usted puede intentar esto:

<tx:annotation-driven transaction-manager="transactionManager" mode="aspectj"/>