Jetty 7中的WEB-INF / classes与WEB-INF / lib

时间:2012-09-27 22:52:12

标签: java-ee jetty spring-transactions

当我将我的类打包到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]

但是,当实际工作在事务方法中时,它会爆炸,但不允许创建事务。

1 个答案:

答案 0 :(得分:0)

从它的外观来看,无论是什么扫描该注释只是处理jar而不是WEB-INF / classes下的类

[edit] jetty没有扫描这些注释