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 数据库上运行,但那是另一个问题。
我需要将一个使用 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 数据库上运行,但那是另一个问题。