【问题标题】:Transaction Manager don't assume the transaction事务管理器不承担事务
【发布时间】:2011-05-17 10:16:53
【问题描述】:

我遇到了一个问题,我真的不知道如何抓住猫尾巴(如果你把我开玩笑:o))

我有一个 webapp 在战争中,部署在 tomcat 中。战争包含 4 个罐子。 4个jars有4个applicationContext,4个entityManager,4个TransactionManager。

这样声明(更改数字 1..):

      <bean id="entityManagerFactory1" 
    class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" 
    p:dataSource-ref="dataSource1"
    p:persistence-unit-name="com.xxxxxx.domain"     >

    <property name="jpaVendorAdapter">
        <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" 
        p:databasePlatform="${ds1.dbdialect}" p:generate-ddl="false"
            p:showSql="${ds1.showsql}"  />
    </property>
    <property name="loadTimeWeaver">
        <bean class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver" />
    </property>
</bean>

  <bean id="transactionManager1" class="org.springframework.orm.jpa.JpaTransactionManager"
    p:entityManagerFactory-ref="entityManagerFactory1">
    depends-on="entityManagerFactory1" name="transactionManager1"/>


   <tx:annotation-driven  transaction-manager="transactionManager1" />

上下文是这样加载的:

我的问题是我发现当我使用 3 的 BO 时,事务是使用 2 的数据源打开的。

此外,如果我坚持下去,我会收到消息:

AbstractSaveEventListener - 由于没有正在进行的交易而延迟身份插入

但是,如果我单独启动 jar 1(例如),一切都运行良好。

非常感谢您的启发。

【问题讨论】:

    标签: java spring jpa spring-transactions spring-orm


    【解决方案1】:

    让我猜猜:

    在您的 servlet-context.xml 中,您是否导入了上下文?例如:

    <import location="classpath:context1.xml" />
    <import location="classpath:context2.xml" />
    

    等等

    如果这样做,所有 bean 定义都会从导入的上下文复制到根上下文中,这意味着您有四个不同的 &lt;tx:annotation-driven /&gt; 声明,具有不同的事务管理器。应该是最后一个赢了。

    可能的解决方案:use Qualifiersuse the XML style of transaction declaration

    我要做的可能是为每个上下文引入一个自定义 @Transactional 注释:

    @Transactional("tx1")
    @Inherited
    @Retention(RetentionPolicy.RUNTIME)
    @Target({ElementType.TYPE,ElementType.METHOD})
    public @interface Transactional1 {}
    

    现在用 @Transactional1 注释 jar 1 中的所有方法,用 @Transactional2 等注释 jar 2 中的所有方法。此机制记录在第 10.5.6.3 Custom shortcut annotations 部分中

    【讨论】:

    • 非常感谢!我使用XML风格的事务声明,因为我的spring版本有点老了。
    猜你喜欢
    • 1970-01-01
    • 2022-08-02
    • 2016-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-05
    相关资源
    最近更新 更多