hibernate - 如何在Hibernate> = 4.3中使用Atomikos Transaction Essentials

标签 hibernate jta atomikos

我从Hibernate 4.2切换到了Hibernate 4.3,我的项目不再工作了。我正在

HibernateException: Unable to locate current JTA transaction



当我做
Session s = sessionFactory.getCurrentSession();

我已经意识到org.hibernate.transaction.TransactionManagerLookup不再存在。在Hibernate 4.3中已将其删除。我应该如何更改当前配置?
<hibernate-configuration>
<session-factory>
    <property name="connection.datasource">testDS</property>

    <property name="current_session_context_class">jta</property>
    <property name="transaction.manager_lookup_class">com.atomikos.icatch.jta.hibernate3.TransactionManagerLookup</property>
    <property name="transaction.factory_class">org.hibernate.transaction.CMTTransactionFactory</property>
    <property name="connection.release_mode">auto</property>
    <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>

    <property name="hibernate.hbm2ddl.auto">create-drop</property>
    <property name="hibernate.show_sql">true</property>
    <mapping class="test.entities.Person" />
    <mapping class="test.entities.CreditCard" />
    <mapping class="test.entities.ExampleRevEntity" />
</session-factory>

最佳答案

在Hibernate 4.3中,已删除了长时间不推荐使用的TransactionManagerLookup。现在,JTA提供程序必须实现org.hibernate.engine.transaction.jta.platform.spi.JtaPlatform。 JTA平台的抽象实现已在Hibernate中提供,即org.hibernate.engine.transaction.jta.platform.internal.AbstractJtaPlatform。使用它,为Atomikos编写JTA平台非常简单:

package test;

import javax.transaction.TransactionManager;
import javax.transaction.UserTransaction;
import org.hibernate.engine.transaction.jta.platform.internal.AbstractJtaPlatform;
import com.atomikos.icatch.jta.UserTransactionManager;

public class AtomikosJtaPlatform extends AbstractJtaPlatform {

  private static final long serialVersionUID = 1L;
  private UserTransactionManager utm;

  public AtomikosJtaPlatform() {
    utm = new UserTransactionManager();
  }

  @Override
  protected TransactionManager locateTransactionManager() {
    return utm;
  }

  @Override
  protected UserTransaction locateUserTransaction() {
    return utm;
  }
}

另外,必须将平台实现类的名称添加到 hibernate 配置中:
<property name="hibernate.transaction.jta.platform">test.AtomikosJtaPlatform</property>

关于hibernate - 如何在Hibernate> = 4.3中使用Atomikos Transaction Essentials,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20681245/

相关文章:

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

java - 在 Tomcat 中设置 Hibernate session 工厂

java - @Resource UserTransaction 和 EntityManager.getTransaction() 有什么区别

java - 在 Axon 聚合中保留 ManyToOne/OneToOne 关系

jta - 什么是好的开源 Java SE JTA TransactionManager 实现?

spring - 在 Spring Batch 中为 Hibernate 配置 Atomikos UserTransactionManager

java - 如何编写 oracle 函数来更新不同模式上的表

java - Atomikos、Java 8 和多个数据库

hibernate - 无法反序列化 org.hibernate.type.SerializationException

java - Spring Data @Query 使用 VARCHAR 而不是 NVARCHAR