我无法获得@Transactional注释来使用xml定义的bean。我不知道xml定义是否与它有关。也许是OSGi的问题。
<bean id="myDao"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager" ref="txManager"/>
<property name="target" ref="myDao_t"/>
<property name="transactionAttributes">
<props>
<prop key="*">PROPAGATION_MANDATORY,
timeout_60,
-Exception
</prop>
</props>
</property>
</bean>
当我使用上面的xml指定代理时,它可以工作。
我在bean定义所在的bundle-context.xml中指定了<tx:annotation-driven transaction-manager="txManager" />
。
MyDao只是一个用一个方法实现接口的简单类。
没有例外,它只是没有为myDao创建代理。
可能缺少什么?
<bean id="myPlanner" class="com.something.planner.MyPlanner">
<property name="myDao" ref="myDao" />
</bean>
答案 0 :(得分:0)
试试这个:
myDao
的类应该是MyDao
(DAO的类型而不是TransactionProxyFactoryBean
)。@Transactional
放在MyDao.java
。然后Spring应该自动为您创建代理。您问题中的方法看起来像#34;我尝试自己创建和配置代理工厂&#34;。
虽然肯定会有这样做,但我并不确切知道你会怎么做。相反,我依赖<tx:annotation-driven>
和@Transactional
注释。
编辑您正在使用Spring 2.5.6A。
我刚刚检查过,并在Spring 1.2中添加了@Transactional
。但是我不确定添加<tx:annotation-driven>
的时间。相关的EnableTransactionManagement
添加了3.1。
但是XML元素在这个模式中:http://www.springframework.org/schema/tx/spring-tx-2.5.xsd所以它应该在2.5中可用。
也许您在类路径上缺少必要的AOP库(cglib)?