0

我有 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有关。

4

1 回答 1

0

我发现这是因为我的 hibernate.cfg.xml 中的以下原因:

<property name="current_session_context_class">thread</property>

删除上面的线后它工作正常,但我还没有弄清楚 agove 是如何导致问题的。

于 2013-03-01T23:09:54.097 回答