【问题标题】:Spring JTA Transaction manager questionSpring JTA 事务管理器问题
【发布时间】:2011-04-19 21:26:49
【问题描述】:

我们正在使用 jboss 管理的 EntityMangerFactory 使用以下 spring bean

<jee:jndi-lookup id="entityManagerFactory" jndi-name="persistence-units/myPU"/>

现在在我们的 spring bean 中,我们使用 @PersistenceContext 来获取 entitymanager,它工作正常。我想要的是如何告诉 spring 获取 jbos jta 服务提供的事务管理器并在我的 dao 中使用它?

如果我像下面这样定义 txmanager,那么 spring 是否可以控制使用 @Transaction 注释来管理事务?

<bean id="txManager" class="org.springframework.transaction.jta.JtaTransactionManager">
      <property name="transactionManagerName" value="java:/TransactionManager"/>
    <property name="userTransactionName" value="UserTransaction"/>
</bean> 

如果是这样,那么spring什么时候提交事务并回滚呢?

谢谢

【问题讨论】:

    标签: spring jboss jpa-2.0 jta


    【解决方案1】:

    几乎 - 你应该叫它transactionManager 而不是txManager。您可以覆盖它要查找的名称,但更容易遵守约定。

    另外,JtaTransactionManager 通常会自动检测各种 JNDI 名称,您不需要手动指定它们。

    更好的是,根本不要声明JtaTransactionManager,只需使用&lt;tx:jta-transaction-manager/&gt;Spring should do the right thing

    所以,你只需要:

    <context:annotation-driven/>
    <tx:jta-transaction-manager/> 
    

    一旦到位,任何带有 @Transactional 注释的 bean 都将由 Spring 管理其事务边界,例如注释方法退出时提交或回滚事务 (see docs)。

    【讨论】:

    • 谢谢斯卡夫曼。这工作正常。顺便说一句,我不明白 配置。 Spring如何查找服务器提供的事务?
    • @user509755:通过在已知的可能位置列表中查找它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-05
    • 2020-12-07
    • 2011-12-10
    相关资源
    最近更新 更多