在JTA中恢复全局事务

时间:2015-09-18 15:07:48

标签: java jpa transactions jta xa

我有一个使用OCI连接到Oracle的小程序。我可以启动全局事务,暂停它们,在不同的进程中恢复相同的事务,再次暂停,在第一个进程中返回 - 一切正常。我希望能够做的是在我的全局事务中调用Java应用服务器,将我的Xid作为参数传递,并让Web调用作为全局事务的一部分进行一些工作。

我已经设置了Glassfish 4.1并且我使用eclipselink作为JPA实现,但我不知道如何使用传入的Xid来恢复原始事务。我猜我需要使用应用程序管理的持久性,所以我有一些看起来像的代码:

if (emf == null){
    emf=Persistence.createEntityManagerFactory("xaPU");
}
EntityManager em = emf.createEntityManager();            
TransactionManager tm = (TransactionManager)ctx.lookup("java:appserver/TransactionManager");

我可以这样做:

tm.begin();
em.joinTransaction();
em.persist(data);
tm.commit();

所有数据都写入数据库,但显然这是在新事务中完成的。如果我得到交易:

Transaction tx = tm.getTransaction();

并在调试器中查看tx它似乎有一个Xid设置,但我不知道如何设置这个Xid,或者将它与我从C程序传入的Xid关联。

我是否在正确的轨道上,或者有更简单的方法吗?

0 个答案:

没有答案