gpt4 book ai didi

java - Standalone hibernate 和 narayana JTA 独立平台

转载 作者:行者123 更新时间:2023-11-30 10:52:27 25 4
gpt4 key购买 nike

据我所知,Narayana 应该是一个独立的 JTA 平台实现,可以与 hibernate 一起用于事务管理。

我正在努力建立一个简单的例子来说明如何使用它。这是我到目前为止所做的:

<persistence-unit name="trackedTest" transaction-type="JTA">

<provider>org.hibernate.ejb.HibernatePersistence</provider>

<class>pandaa.test.main.MyObject</class>

<exclude-unlisted-classes>true</exclude-unlisted-classes>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
<property name="hibernate.max_fetch_depth" value="30" />
<property name="hibernate.hbm2ddl.auto" value="update" />
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.transaction.jta.platform" value="org.hibernate.service.jta.platform.internal.JBossStandAloneJtaPlatform" />

<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/drools" />
<property name="javax.persistence.jdbc.user" value="root" />
<property name="javax.persistence.jdbc.password" value="" />
</properties>
</persistence-unit>

MyObject 是一个具有 1 个属性的简单对象。

@Entity
@Table(name="testJTA")
public class MyObject {

@Id
private String id;

public void setId(String id) {
this.id = id;
}

public String getId() {
return id;
}

}

主要是,我尝试只保留一个小对象:

public class StandaloneNaranya {


public static void main(String[] args) throws Exception {


EntityManagerFactory createEntityManagerFactory = Persistence.createEntityManagerFactory("trackedTest");

EntityManager em = createEntityManagerFactory.createEntityManager();

TransactionManager tm = com.arjuna.ats.jta.TransactionManager.transactionManager();

MyObject o = new MyObject();
o.setId("asd");

tm.begin();

em.persist(o);
em.flush();

tm.commit();

}
}

然后这告诉我:

INFO: ARJUNA012170: TransactionStatusManager started on port 49231 and host 127.0.0.1 with service com.arjuna.ats.arjuna.recovery.ActionStatusService
Exception in thread "main" javax.persistence.TransactionRequiredException: no transaction is in progress
at org.hibernate.ejb.AbstractEntityManagerImpl.flush(AbstractEntityManagerImpl.java:993)
at pandaa.test.main.StandaloneNaranya.main(StandaloneNaranya.java:26)

我不知道如何正确设置它。在容器中运行对我来说不是一个选项。任何帮助都会很棒。

最佳答案

这是 docs for DataNucleus JPA使用独立的 JTA 提供程序。我希望看到 <jta-data-source>在您的 persistence.xml 中作为开始。运行时代码的关键部分是您需要从 JTA 提供程序获取 UserTransaction,就像这样(调整您的 JNDI 以适应您拥有它的位置)

UserTransaction ut = (UserTransaction)new InitialContext().lookup("java:comp/UserTransaction");

然后

ut.begin();

{your JPA code}

ut.commit();

应该可以通过任何 JPA 提供程序使用此样式获得有效的解决方案。有一个例子 em.joinTransaction在该链接中取决于您何时开始 JTA 事务。

关于java - Standalone hibernate 和 narayana JTA 独立平台,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34336616/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com