Tag: jta

XA / JTA事务:在DB更改可见之前到达JMS消息

上下文是: producer(JTA transaction PT )既向JMS队列发送消息又进行DB更新; consumer(JTA事务CT )侦听同一队列并在收到消息时读取DB; 应用程序服务器 – WebLogic,DB – Oracle。 我观察到,如果已经收到相应的JMS消息( PT已经提交了?),有时CT不能(但是?)能够看到PT的 DB更改,事件。 似乎JTA不能保证这种一致性(这在Jurgen Holler的演讲“性能交易选择”中也得到了证实)。 避免此类问题的最佳方法是什么(除了明显的 – 不使用JTA)? 谢谢。

在JTA中使用任意资源

是否可以使用JTA进行任何类型的自定义资源转换? 让我们假设一个基本的例子,并采取一个文件夹创建,如果出现错误应该回滚。 可以处理这样的自定义资源吗?

JPA2 + Hibernate 3.6.0中的JTA或LOCAL事务?

我们正在重新思考我们的技术堆栈,下面是我们的选择(由于应用程序的复杂性等原因,我们不能没有Spring和Hibernate)。 我们也从J2EE 1.4迁移到Java EE 5。 技术堆栈 Java EE 5 JPA 2.0(我知道Java EE 5仅支持JPA 1.0,但我们希望将Hibernate用作JPA提供程序) Hibernate 3.6.0(我们已经有很多带有自定义类型的hbm文件等,所以我们不想将它们迁移到JPA。这意味着我们希望jpa / hbm映射一起工作,因此Hibernate就像JPA一样提供程序而不是使用App Server附带的默认值) 现在问题是我想坚持本地交易,但其他团队成员想要使用JTA。 我已经使用J2EE工作了9年,我一次又一次地听到人们建议如果我不需要两个阶段提交就坚持本地交易。 这不仅是出于性能原因,而且本地事务的调试/故障排除比JTA容易得多(即使JTA仅在需要时进行单阶段提交)。 我的建议是使用spring声明式事务管理+本地事务(HibernateTransactionManager)而不是容器JTA 我想确定我是偏执狂还是有一个有效的观点。 我想听听Java EE世界其他人的想法。 或者请给我一个合适的文章。

Spring JTA TransactionManager config:支持Tomcat和JBoss

我有一个使用JPA和JTA与Spring的Web应用程序。 我想支持JBoss和Tomcat。 在JBoss上运行时,我想使用JBoss自己的TransactionManager,当在Tomcat上运行时,我想使用JOTM。 我有两种情况都可以工作,但我现在发现我似乎需要为这两种情况分别使用两种Spring配置。 使用JOTM,我需要使用Spring的JotmFactoryBean : 但是在JBoss中,我只需要从JNDI获取“TransactionManager”: 有没有办法配置它,以便使用适当的TransactionManager – JBoss或JOTM – 而不需要两个不同的配置文件?

UserTransaction和EntityTransaction之间的区别

标题说明了一切: UserTransaction和EntityTransaction之间有什么区别? 我的基本理解是,当需要JTA时使用UserTransaction (例如,对多个事物进行查询),并且仅在需要JPA时使用EntityTransaction (例如,当查询是primefaces的时)。 这是两者之间的唯一区别还是还有更多呢?

使用JPA / JTA / JBOSS / CDI不会持久保存对象

请帮助我理解为什么对象不会被以下代码持久化。 它抛出javax.persistence.TransactionRequiredException:JBAS011469:执行此操作需要事务(使用事务或扩展持久性上下文) public class OrganizationRepositoryImpl implements OrganizationRepository { @PersistenceContext(unitName=”usermanagement”,type=PersistenceContextType.TRANSACTION) private EntityManager em; public void save(Organization organization) { try { em.persist(organization); }catch(Exception e) { e.printStackTrace(); } } } 但是如果我使用@Stateless注释(Now ejb)注释该类,则对象开始变为持久化 @Stateless public class OrganizationRepositoryImpl implements OrganizationRepository { @PersistenceContext(unitName=”usermanagement”,type=PersistenceContextType.TRANSACTION) private EntityManager em; public void save(Organization organization) { try { em.persist(organization); }catch(Exception e) { e.printStackTrace(); } } } […]

上次资源优化

我正在编写一个不支持两阶段提交的资源适配器。 我知道有一种称为“最后资源优化”的优化技术。 在JBoss上,您的XAResource类应该实现LastResource以进行优化。 我的问题是:如何在WebLogic,WebSpehre,Glassfish等中完成这项工作……

如何在multithreading之间共享一个事务

我们遇到了一个适用于multithreading的场景。 在主线程中,做一些逻辑并更新数据库,在某一点上,它会调用另一个服务来更新数据库,这是在另一个线程中运行的。 我们希望两个线程共享相同的事务,这意味着,任一线程中的任一操作都失败,那么另一个线程中的操作也将被回滚。 但是工作了好几天,我发现一些post说JTA不支持multithreading。 目前我们使用Bitronix作为JTA提供程序,有没有人知道Bitronix是否支持一个Transaction中的multithreading? 或者是否有任何其他JTA提供程序支持此(独立JTA提供程序而非J2EE容器)?

Java中的XA事务文件访问是否有开源解决方案?

是否可以在Java中对文件系统进行XA事务访问? 我想在事务的边界内操作文件,我的事务必须通过JTA参与分布式事务(所以我想文件系统需要作为XAResource访问)。 我不需要支持细粒度的读/写文件访问; 将每个文件视为记录对我的需求是足够好的。 有人知道一个已经这样做的开源项目吗? 我不想实现这个烂摊子只是为了发现它已经完成了…… 我听到一些传言说JBoss Transcations会增加对此的支持(参见例如此讨论 ),但未能找到关于此的正式声明。 顺便说一句,如果您需要事务性文件访问但不要求事务参与两阶段提交,我建议您查看Apache Commons Transaction 有关复杂性的好文章可以在这里找到。

如何设计全局分布式事务(无数据库)? JTA可以用于无数据库事务吗?

我认为这是一个相当普遍的问题:如何将我的业务逻辑放在分布式系统环境中的全局事务中? 举个例子,我有一个包含几个子任务的TaskA: TaskA {subtask1,subtask2,subtask3 …} 这些子任务中的每一个都可以在本地机器或远程机器上执行,我希望TaskA通过事务以primefaces方式(成功或失败)执行。 每个子任务都有一个回滚函数,一旦TaskA认为操作失败(因为其中一个子任务失败),它就会调用子任务的每个回滚函数。 否则,TaskA会提交整个事务。 为此,我按照“审计试用”事务模式来记录每个子任务,因此TaskA可以知道子任务的操作结果,然后决定回滚或提交。 这听起来很简单,但是,困难的部分是如何将每个子任务与全局事务相关联? 当TaskA开始时,它会启动一个关于哪个子任务什么都不知道的全局事务。 为了使子任务意识到它,我必须将事务上下文传递给每个子任务调用。 这真是太可怕了! 我的子任务可以在新线程中执行,也可以通过AMQP代理发送消息在远程执行,很难巩固上下文传播的方式。 我做了一些研究,如“交易模式 – 四个交易相关模式的集合”,“异步消息传递环境中的已检查事务”,这些都没有解决我的问题。 他们要么没有实际的例子,要么没有解决上下文传播问题。 我想知道人们如何解决这个问题 因为这种交易必须在企业软件中很常见。 X / Open XA只是解决方案吗? JTA可以在这里提供帮助(我没有关注JTA,因为它与数据库事务有关,我使用Spring,我不想在我的软件中涉及另一个Java EE应用服务器)。 有些专家可以和我分享一些想法吗? 谢谢。 结论 Arjan和Martin给出了非常好的答案,谢谢。 最后我没有这样做。 经过更多的研究,我选择了另一种模式“ CheckPoint ” 1 。 根据我的要求,我发现我的“审核试验事务模式”的意图是知道操作已经进行到哪个级别,如果它失败了,我可以在重新加载某些上下文后在失败的地点重新启动它。 实际上这不是事务,它在失败后没有回滚其他成功的步骤。 这是CheckPoint模式的本质。 然而,研究分布式交易的东西让我学到了很多有趣的东西。 除了Arjan和Martin提到的。 我还建议人们深入研究这个领域,看看CORBA,这是一个众所周知的分布式系统协议。