当我将我的类打包到WEB-INF / classes时,Spring @Transactional方法(或任何与切入点定义相匹配的方法)我没有参与事务。我在日志中遇到了很多“未找到Hibernate会话,配置不允许......”异常。令人费解的是,在堆栈跟踪中我可以看到CGLIB增强类,所以它看起来似乎是代理但似乎没有创建新的事务。
但是,如果我将 相同的类 打包到jar文件中并将jar放在WEB-INF / lib中,那么应用程序运行正常!交易是创建等,这是什么?当类在WEB-INF / classes下时,为什么它不起作用?
Spring事务配置如下:
<aop:aspectj-autoproxy proxy-target-class="true" />
<context:component-scan base-package="com.example" />
<tx:annotation-driven transaction-manager="txManager"/>
<bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<tx:advice id="serviceAdvice" transaction-manager="txManager">
<tx:attributes>
<tx:method name="save*"/>
<tx:method name="update*"/>
<tx:method name="delete*"/>
<tx:method name="*" read-only="true"/>
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut id="servicePointcut" expression="execution(* com.example.service.*.*Service*.*(..))"/>
<aop:advisor advice-ref="serviceAdvice" pointcut-ref="servicePointcut"/>
</aop:config>
FWIW,我正在使用Jetty 7.4和Spring 3.1.2。
我应该寻找的任何线索?
更新
我启用了Spring事务日志记录,我可以看到:
28 Sep 2012 15:07:16,126 DEBUG NameMatchTransactionAttributeSource:94 - Adding transactional method [save*] with attribute [PROPAGATION_REQUIRED,ISOLATION_DEFAULT]
28 Sep 2012 15:07:16,133 DEBUG NameMatchTransactionAttributeSource:94 - Adding transactional method [update*] with attribute [PROPAGATION_REQUIRED,ISOLATION_DEFAULT]
28 Sep 2012 15:07:16,134 DEBUG NameMatchTransactionAttributeSource:94 - Adding transactional method [delete*] with attribute [PROPAGATION_REQUIRED,ISOLATION_DEFAULT]
28 Sep 2012 15:07:16,136 DEBUG NameMatchTransactionAttributeSource:94 - Adding transactional method [*] with attribute [PROPAGATION_REQUIRED,ISOLATION_DEFAULT,readOnly]
但是,当实际工作在事务方法中时,它会爆炸,但不允许创建事务。
答案 0 :(得分:0)
从它的外观来看,无论是什么扫描该注释只是处理jar而不是WEB-INF / classes下的类
[edit] jetty没有扫描这些注释