首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >要将JTA集成到Java应用程序中,我需要做什么?

要将JTA集成到Java应用程序中,我需要做什么?
EN

Stack Overflow用户
提问于 2009-05-08 16:31:39
回答 7查看 5.9K关注 0票数 4

假设我想实现一个应用程序容器。不是一个完整的Java堆栈,但我需要向第三方代码提供对JDBC资源和事务的访问,这些代码将部署在我正在编写的应用程序中。

此外,假设我正在查看JBossTS中的事务。我还没有决定,但据我所知,这似乎是最适合我需要做的事情。

如何将提供连接资源和JTA事务的支持集成到我的Java应用程序中?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2009-05-30 18:27:26

我选择使用Bitronix事务管理器来解决这个问题,尽管显然当时至少还有一个选项(Atomikos)对我来说并不明显。

解决这个问题需要我也使用Tomcat在进程中的JNDI提供程序,以便将事务与JNDI名称关联起来。由于该提供程序的限制,我无法使用JTA UserTransaction的默认名称,这在文档中并不明显。

感谢所有的帮助的答案无论如何!

票数 1
EN

Stack Overflow用户

发布于 2009-05-09 09:10:12

如何将对提供连接资源和JTA事务的支持集成到我的J2SE应用程序中?

嗨,克里斯

这个问题有两个要素:

1)使JTA (主要是UserTransaction )可用于应用程序代码,从而可以启动和结束事务。在Java环境中,它被发布到JNDI中一个众所周知的位置。如果您有一个JNDI实现,那么就可以这样做(使用JBossTS的JNDIManager类来帮助您完成设置)。否则,您需要某种工厂对象或注入机制。当然,您也可以直接向最终用户公开实现类,但这有点令人讨厌,因为它限制了将来交换JTA的任何机会。

代码语言:javascript
复制
public javax.transaction.UserTransaction getUserTransaction() {
  return new com.arjuna.ats.internal.jta.transaction.UserTransactionImple();
}

就是这样-您现在可以开始、提交和回滚事务。一些容器也以类似的方式向应用程序发布TransactionManager类,但它实际上是为容器本身设计的,应用程序代码很少需要它。

2)自动管理XAResources征兵。资源管理器,即数据库和消息队列,具有实现XAResource的驱动程序。每次应用程序获得到资源管理器的连接时,都需要将相应的XAResource传递给JTA实现,这样它就可以将资源管理器作为2PC的一部分来驱动。大多数应用服务器都带有一个自动处理此问题的JCA。在没有应用程序的环境中,您需要一些替代方法来节省应用程序代码,使其不必手工完成这项繁琐的任务。与TransactionalDriver捆绑在一起的JBossTS为JBossTS处理这个问题。XAPool也可能是值得考虑的。

多年来,JBossTS已经嵌入到许多环境中。一些经验教训已在集成指南http://anonsvn.jboss.org/repos/labs/labs/jbosstm/trunk/atsintegration/docs/中记录下来],如果您想要一个有效的示例,可以查看tomcat集成工作http://anonsvn.jboss.org/repos/labs/labs/jbosstm/workspace/jhalliday/tomcat-integration/ ]。

乔博斯的TM太可怕了。至少,如果您希望进行ACID交易。

你好埃里克森

我不认为我会像“可怕”那样。它是难以置信的强大和高度可配置的,这可以使开箱即用的体验有点令新手望而却步。正确的恢复配置特别棘手,所以我完全赞同您对严格测试的评论。除此之外,我不知道有任何文档化的测试用例,在这些测试用例中,当与符合规范的资源管理器一起使用时,它目前无法提供ACID结果。如果您有这样的案例,或者只是更有建设性的改进建议,请让JBoss知道这样问题才能得到解决。

别再发明轮子了。使用Spring框架。它已经提供了这个功能以及更多的功能。

-1 Spring不提供JTA实现,只提供各种第三方实现的包装器。这是一个常见的误解。

JTA支持本地事务和全局事务。

恐怕是另一种误解。JTA规范只处理XA,即全局事务。使用各种众所周知的技术来使JTA事务管理器驱动本地事务。这通常涉及将连接包装在XAResource中。虽然大多数实现都支持这一点,但实际上它超出了规范的范围,因此如果需要这种行为,您必须在选择JTA实现之前与供应商进行检查。

票数 7
EN

Stack Overflow用户

发布于 2009-05-30 15:12:47

试试Atomikos TransactionsEssentials

与竞争的开源JTA/XA实现不同,这个实现是从JSE开始编写的。因此,它提供优质的JDBC和JMS池以及JTA/XA功能,您将发现很容易将其集成到应用程序中。

最佳男

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/840694

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档