2010-02-03 3 views
5

Desidero utilizzare spring-aspects per rendere transazionale il mio metodo, ma senza utilizzare Spring AOP (Spring AOP funziona perfettamente con: <tx:annotation-driven/>). Sto usando Maven per gestire il mio progetto.Come impostare springframework @Transactional con AspectJ

C'è un modo per fare compile tempo tessere sulle mie classi di progetto così "sono Transactional". Stavo cercando di usare lo Mojo's AspectJ Maven Plugin, ma senza risultati positivi.

Per favore aiuto.

+0

Qual è il problema con il plugin aspectj? Puoi il tuo pom? –

+0

Nessun problema con il plugin ho avuto problemi con la configurazione di primavera. – Monku

risposta

4

L'ho capito. Maven plugin funziona bene, ma il problema era con la mia configurazione di primavera: ho avuto:

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

Mi serviva:

<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> 

Ora funziona benissimo. E l'esecuzione dei miei metodi @Transactional è migliorata e ciò per cui stavo cercando.

Ecco il mio esperto di aspectj plug-config:

<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> 

speranza che questo aiuta qualcuno.

+0

Ho una domanda per voi: in questo post avete sostituito il tipo di bean 'transactionManager' da' JpaTransactionManager' a 'HibernateTransactionManager'. Quindi stai dicendo che "org.springframework.transaction.aspectj.AnnotationTransactionAspect" non funziona con JPA? – STaefi

+0

Io non la penso così. Molto probabilmente ho incasinato qualcosa/non l'ho configurato correttamente per far funzionare JPA, ma in qualche modo ha funzionato per Hibernate. È stato tanto tempo fa, non ricordo nemmeno quale progetto fosse. – Monku

4

forse si può provare questo:

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