为什么会有不同类型的事务管理器?

时间:2017-05-09 06:40:07

标签: hibernate jdbc transactions spring-transactions jta

我对Web应用程序中不同类型的事务管理器感到困惑:

Spring事务管理器vs JPA事务管理器vs Hibernate事务管理器vs JTA事务管理器vs数据库事务管理器

我做了一些关于上述交易经理的谷歌搜索,但仍然不清楚。

例如:

Hibernate tx manager使用Database tx manager

JPA tx manager使用Hibernate tx  管理器

Spring tx manager使用JPA transaction managerJTA tx manager

编辑:  我的应用程序的配置示例如下: samaple

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactory" />
        <property name="jpaDialect">
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaDialect" />
        </property>
    </bean> 

<prop key="hibernate.transaction.jta.platform">org.hibernate.service.jta.platform.internal.JBossStandAloneJtaPlatform</prop>
                <prop key="transaction.auto_close_session">true</prop>
                <prop key="current_session_context_class">jta</prop>

所以如果我考虑上面的例子,JPA事务管理器使用hibernate事务管理器而反过来hibernate manger使用JTA管理器我是否正确?

这是否意味着每个事务管理器都使用基础事务管理器?

1 个答案:

答案 0 :(得分:0)

当您说“每个事务管理器使用和基础事务管理器”时,您并不完全正确。

以Spring为例,事务策略由PlatformTransactionManager接口定义。它与诸如JNDI之类的查找策略无关。 PlatformTransactionManager实现的定义与Spring Framework IoC容器中的任何其他对象(或bean)相同。仅使用此优势,即使您使用JTA,Spring Framework事务也是值得抽象的。与直接使用JTA相比,交易代码的测试更容易。

因此,Spring提供了有关数据库事务管理的多种实现可能性。