Spring jta-transaction-manager

时间:2009-12-26 15:26:57

标签: java hibernate spring jpa jta

使用Spring

  1. jta-transaction-manager能否使用id作为名称,以便我可以将它作为REF传递给我的服务层,如下所示?

  2. 是tx:jta-transaction-manager只能用于je22容器?我的意思是Tomcat,我需要手动完成,如下所示:

    <tx:jta-transaction-manager id="name_transactionmanager"/>
    
        <bean id="projectService" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
            <property name="transactionManager"
                      ref="name_transactionmanager"/>
            <property name="target">
                <bean
                  class="com.company.project.company.services.ServiceImpl"
                  init-method="init">
                     <property
                       name="HRappsdao"
                       ref="HRappsdao"/>
                     <property
                       name="projectdao"
                       ref="projectdao"/>
                </bean>
            </property>
            <property name="transactionAttributes">
                <props>
                    <prop key="store*">PROPAGATION_REQUIRED</prop>
                    <prop key="update*">PROPAGATION_REQUIRED</prop>
                    <prop key="remove*">PROPAGATION_REQUIRED</prop>
                    <prop key="bulkUpdate*">PROPAGATION_REQUIRED</prop>
                    <prop key="*">PROPAGATION_SUPPORTS,readOnly</prop>
                </props>
            </property>
        </bean>
    
  3. 问题2

        <bean id="transactionManager"
          class="org.springframework.transaction.jta.JtaTransactionManager">
            <property name="userTransaction">
                <bean class="org.springframework.transaction.jta.JotmFactoryBean"/>
            </property>
        </bean>
    

1 个答案:

答案 0 :(得分:16)

  

tx:jta-transaction-manager可以使用id作为名称,以便我可以将它作为REF传递给我的服务层,如下所示吗?

<tx:jta-transaction-manager>在Spring上下文中将事务管理器公开为Bean,名称为“transactionManager”。

  

tx:jta-transaction-manager只能与J2EE容器一起使用吗?

从Spring文档中引用Chapter 9. Transaction management

  

交易管理需要应用服务器吗?

     

Spring Framework的交易   管理支持显着   改变传统思维方式   当J2EE应用程序需要时   应用服务器。

     

特别是,你不需要   应用服务器就好了   通过EJB进行声明式事务。在   事实上,即使你有一个申请   具有强大JTA功能的服务器,   你很可能决定春天   框架的声明性事务   提供更多的力量和更多   生产性编程模型比EJB   CMT。

     

通常您需要一个应用程序   服务器的JTA功能只有你   需要登记多个交易   资源,以及许多应用程序   能够处理交易   跨多个资源不是一个   需求。例如,很多   高端应用程序使用单个,   高度可扩展的数据库(例如   Oracle 9i RAC)。独立交易   Atomikos Transactions等经理   和JOTM是其他选择。 (当然   您可能需要其他应用服务器   JMS和JCA等功能。)

     

最重要的一点是   您可以选择Spring Framework   何时将您的应用程序扩展到a   成熟的应用服务器。飘   是唯一替代的日子   使用EJB CMT或JTA进行编写   代码使用本地事务,如   那些关于JDBC连接的人,面对一个   如果你需要那么大量的返工   代码在全局范围内运行,   容器管理的事务。同   仅限Spring Framework   配置需要改变以便   你的代码没有。

因此,如第三段所述,如果您想使用多个事务资源,则需要涉及支持JTA的应用程序服务器的全局事务。 支持JTA的应用程序服务器表示真正的J2EE容器或非J2EE容器(如Tomcat),它具有独立的事务管理器,如AtomikosJOTMBitronixSimpleJTAJBossTSGeronimoTM/Jencks

FWIW,我看到很多关于JOTM的抱怨,我认为GeronimoTM / Jencks缺乏文档,我真的不能说任何关于 JBossTS ArjunaTS(除了它是一个坚如磐石的产品),SimpleJTA和Bitronix都有很好的文档,Atomikos也是一个令人印象深刻的产品。就个人而言,我会选择Bitronix或Atomikos。

PS:老实说,如果这听起来像中文,你应该考虑使用一个数据库(如果这是一个选项,去吧!)或考虑使用真正的J2EE容器正如我在之前的回答中所写的那样,JBoss或GlassFish。没有冒犯,但所有这些JTA的东西都不是微不足道的,如果你真的不明白为什么需要它,那么采取JOTM路径并不是那么简单。