Weblogic 和 hibernate 配置

Weblogic and hibernate configuration

我需要将一个使用 hibernate 的项目从 Jboss 迁移到 weblogic。目前我正在使用这个配置:

persistence.xml

<persistence-unit name="pagosHibernate" transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <class>...</class>
    <properties>
        <property name="hibernate.ejb.cfgfile" value="META-INF/hibernate.cfg.xml"/>
    </properties>
</persistence-unit>

hibernate.cfg.xml

<hibernate-configuration>
    <session-factory>
        <property name="connection.datasource">MyDS</property>
        <property name="jndi.class">weblogic.jndi.WLInitialContextFactory</property>
        <property name="hibernate.transaction.manager_lookup_class">org.hibernate.transaction.WeblogicTransactionManagerLookup</property>
        <property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property>
        <property name="transaction.factory_class">org.hibernate.transaction.JTATransactionFactory</property>
    </session-factory>
</hibernate-configuration>

代码是:

EntityManager em = this.factory.createEntityManager();
EntityTransaction entityTransaction = em.getTransaction();
entityTransaction.begin();
...
em.persist(device);
entityTransaction.commit();

但我得到:

java.sql.SQLException: Cannot call commit when using distributed transactions

谢谢

Hibernate 配置中使用的数据源 "MyDS" 看起来像 XA 数据源。 在您的情况下,应使用 Non-XA DataSource。在 Weblogic 中配置 DataSource 时,您必须选择合适的瘦驱动程序。希望这有帮助。

正如 R Sawant 所说,问题是由 XA 数据源引起的。然而,解决方案是创建一个非 XA 数据源并禁用全局事务(保持全局事务激活仍然存在问题)。

我想知道如何配置此项目以在 XA 数据库上运行,但那是另一个问题。