2 Stimmen

Spring Annotations funktionieren nicht

Ich habe dies in den Frühlingsforen gepostet, entschuldigen Sie bitte den Fehler.

Ich bin neu im Frühling. Ich arbeite an einem bestehenden Projekt, das Frühling 1.2.8 (alt, ich weiß) und Java 1.5 verwendet, so dass Annotationen funktionieren sollte.

Ich versuche, die @Transactional-Annotation für eine konkrete Klasse zu verwenden, und folge dabei den Unterlagen unter: http://static.springsource.org/spring/docs/1.2.8/reference/transaction.html#d0e6062

Ich habe also etwas in der Art:

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

<bean id="MyDAO"
  class="com.company.package.dao.spring.MyDAOImpl">
  <property name="dataSource" ref="DataSource" />
</bean>

<bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"/>

<bean class="org.springframework.transaction.interceptor.TransactionAttributeSourceAdvisor">
  <property name="transactionInterceptor" ref="txInterceptor"/>
</bean>

<bean id="txInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor">
  <property name="transactionManager" ref="transactionManager"/>
  <property name="transactionAttributeSource">
    <bean class="org.springframework.transaction.annotation.AnnotationTransactionAttributeSource"/>
  </property>
</bean>

und ich schreibe Anmerkungen zu meiner Klasse:

@Transactional(propagation = Propagation.REQUIRED)
public class MyDAOImpl extends JdbcDaoSupport implements MyDAO{
...
}

Wenn ich es ausführe, kann ich in meinen Debug-Protokollen sehen, dass spring alle Klassen findet: Code:

01-07-10 12:10:45 DEBUG [DefaultXmlBeanDefinitionParser] Neither XML 'id' nor 'name' specified - using generated bean name [org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator]
01-07-10 12:10:45 DEBUG [DefaultXmlBeanDefinitionParser] Neither XML 'id' nor 'name' specified - using generated bean name [org.springframework.transaction.interceptor.TransactionAttributeSourceAdvisor]
01-07-10 12:10:45 DEBUG [DefaultXmlBeanDefinitionParser] Neither XML 'id' nor 'name' specified - using generated bean name [org.springframework.transaction.annotation.AnnotationTransactionAttributeSource#329f3d]

aber danach gibt es keinen Hinweis mehr auf Anmerkungen oder Transaktionen. Ich weiß nicht einmal, ob es überhaupt welche geben sollte. Ich überprüfe in meinem Mysql-Protokoll, dass die Abfragen nicht transaktional ausgeführt werden.

Irgendwelche Ideen?

2voto

John Punkte 6569

Eine Sache, die ich häufig übersehe, ist, dass der Proxy Anrufe nur abfangen kann, wenn sie von außerhalb die Klasse selbst: Wenn Sie eine Methode haben, die eine transaktionale Methode in derselben Klasse aufruft, wird sie nicht vom Proxy umschlossen. Aber das ist, wenn einzelne Methoden annotiert sind, nicht die ganze Klasse, so ist es wahrscheinlich nicht, was Ihr Problem verursacht.

1voto

Kannan Ekanath Punkte 15569

Ignorieren Sie die DEBUG-Zeilen (sie sagen nur, dass Sie weder id noch name angegeben haben, sondern nur eine bean class="")

Haben Sie die Linie gesetzt,

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

Sie müssen auch den schemaLocation am Anfang hinzufügen, etwa so

<beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:tx="http://www.springframework.org/schema/tx"
        xmlns:aop="http://www.springframework.org/schema/aop"
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
           http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd
           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd">
</beans>

Andernfalls werden die Anmerkungen nicht verarbeitet :)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X