我有 2 个 JAR 文件,比如 A.jar 和 B.jar,A.jar 包含一个 Spring XML A.xml,它定义了与事务相关的内容。
<bean id="txManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="dataSource" ref="lookUpDataSource" />
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<tx:advice id="txAdvice" transaction-manager="txManager">
<!-- the transactional semantics... -->
<tx:attributes>
<tx:method name="readAll" />
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut id="FooBarOperation"
expression="execution(* com.foo.bar.service.*ServiceInterface.*(..))" />
<aop:advisor advice-ref="txAdvice" pointcut-ref="FooBarOperation" />
</aop:config>
我在 A.jar com.foo.bar.service.AlphaServiceInterface 中编写了一个服务,它使用 Hibernate SQL 执行数据库事务。当我使用 A.jar 中的 JUnit 测试此服务时,一切都很好,代理由 Spring 创建,我能够运行服务调用。现在,我将上面的 Spring XML 文件导入到另一个 Spring XML 文件 B.xml 中,该文件使用 B.jar 放置
<import resource="classpath:/META-INF/spring/A.xml"/>
我在 B.jar 中编写完全相同的 junit 测试并尝试对其进行测试,未创建事务上下文并且我遇到以下异常: org.hibernate.HibernateException: createSQLQuery is not valid without active transaction
请注意,这个问题与在其他 JAR 中定义时未执行的 Spring Aspect有关。