Java Spring jta事务管理器

Java Spring jta事务管理器,java,hibernate,spring,jpa,jta,Java,Hibernate,Spring,Jpa,Jta,使用: jta事务管理器是否可以使用id作为名称,以便我可以像下面这样将其作为引用传递给我的服务层 is tx:jta事务管理器只能用于je22容器?我的意思是,我需要手动操作,如下所示: <tx:jta-transaction-manager id="name_transactionmanager"/> <bean id="projectService" class="org.springframework.transaction.interceptor.Trans

使用:

  • jta事务管理器是否可以使用id作为名称,以便我可以像下面这样将其作为引用传递给我的服务层

  • is tx:jta事务管理器只能用于je22容器?我的意思是,我需要手动操作,如下所示:

    <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>
    
    
    需要进行传播
    需要进行传播
    需要进行传播
    需要进行传播
    传播支持,只读
    
  • 关于问题2
    
    
    tx:jta事务管理器是否可以使用id作为名称,这样我就可以将它作为REF传递给我的服务层,如下所示

    在Spring上下文中将事务管理器公开为名为“
    transactionManager
    ”的Bean

    tx:jta事务管理器能否仅与J2EE容器一起使用

    引用Spring文档中的:

    事务管理是否需要应用服务器?

    Spring框架的事务 管理支持显著增加 改变了传统的思维方式 当J2EE应用程序需要 应用服务器

    特别是,您不需要 应用服务器只是为了 通过EJB的声明性事务。在里面 事实上,即使你有申请 具有强大JTA功能的服务器, 你很可能会决定春天来了 框架的声明性事务 提供更大的动力和更大的动力 比EJB更高效的编程模型 CMT

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

    最重要的一点是 您可以选择的Spring框架 何时将应用程序扩展到 完整的应用服务器。跑了 是唯一的选择吗 使用EJBCMT或JTA是为了编写 使用本地事务的代码,例如 那些在JDBC连接上,并面临 如果你需要的话,可以进行大量的返工 要在全局范围内运行的代码, 容器管理的事务。具有 只有Spring框架 配置需要更改,以便 你的代码不必这样做

    因此,正如第三段中所解释的,如果您想要使用多个事务资源,您将需要涉及支持JTA的应用服务器的全局事务。支持JTA的应用服务器意味着一个真正的J2EE容器或一个非J2EE容器(如Tomcat),带有一个独立的事务管理器,如、或

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


    PS:老实说,如果这听起来像中文,你也许应该考虑使用一个数据库(如果这是一个选项,<强> >去!<强>),或者考虑使用一个真正的J2EE容器,如JBOSS或GalasFISH,就像我在以前的答案中所写的那样。无意冒犯,但所有这些JTA内容都不是琐碎的,如果您不真正理解为什么需要它,那么采用JOTM路径就不是那么简单了。

    您的答案非常好,我来到这个线程是为了寻找一种方法来单元测试我的DAO(即EJB本身和使用其他EJB,以及需要事务上下文)在容器外部,但使用实时数据库。我能够在POJO中模拟大多数其他EJB逻辑,但是由于缺少事务上下文,其他一些代码在运行测试时失败。我不能使用Spring,我想它至少需要一个Web服务器。仅在单元测试中使用独立的事务管理器似乎是一种过火的做法,或者您怎么看?
        <bean id="transactionManager"
          class="org.springframework.transaction.jta.JtaTransactionManager">
            <property name="userTransaction">
                <bean class="org.springframework.transaction.jta.JotmFactoryBean"/>
            </property>
        </bean>