问题标签 [xa]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
spring - 非托管容器中带有 XA/JTA 的 Spring + JPA/Hibernate + ActiveMQ。没有看到错误,但没有看到提交到数据库的数据
我正在向现有的 Spring/Hibernate Web 应用程序添加 JMS 功能(通过 ActiveMQ)。因此,我想向这个应用程序添加 XA/JTA 功能,以便我可以管理跨越数据存储和消息代理的事务(使用 Spring)。
我在 ActiveMQ 集成方面取得了成功,但是在将 XA/JTA 合并到应用程序中时遇到了问题。具体来说,没有数据被插入/更新到底层数据库中(不过,我在事务期间没有看到错误/异常)。
详细信息:Spring 3.1.2.RELEASE、Hibernate 3.6.10.Final、ActiveMQ 5.6.0
我正在使用 Spring Data JPA 来编写我的 DAO 接口,然后他们会拿起我的 LocalContainerEntityManagerFactoryBean 来完成他们的 CRUD 工作。
我已经尝试过 Atomikos (5.6.0) 和 Bitronix (2.1.3) XA/JTA 实现。每个都会导致相同的行为(没有数据写入基础数据库表)。
我有很多日志记录,如果需要,当然可以提供日志摘录。而且,配置细节也是如此。日志中特别值得注意的是,Spring 似乎表明 JTA 事务正在(试图?)提交。但是,鉴于缺少写入底层数据库的数据,尚不清楚它是否真的完成了提交(不过,我再次看到没有错误表明它没有完成)。此外,值得注意的是,此特定事务 - populateSampleData - 仅涉及数据库资源(根本不涉及消息代理)。
我希望找到一个成功地为事务管理设置了这样一个 Spring XA/JTA 应用程序的人,他可以就我可能做错了什么(或遗漏)提供一些建议。我基本上遵循了本文中的规定(在 Atomikos 案例中从 Atomikos 网站收集了一些附加信息)。
感谢您提供的任何启发。
更新:我解决了我的问题。问题是我没有使用 persistence.xml 文件(而是在使用 setPackagesToScan 方法设置 LocalContainerEntityManagerFactoryBean 时以编程方式配置持久性单元)。虽然持久性单元确实正确加载了我的@Entity 类,但由于缺少persistence.xml 文件(特别是缺少持久性单元元素的事务类型属性),事务类型被默认为RESOURCE_LOCAL(这是非 Java EE 容器的默认值)。我现在明确地提供了一个 persistence.xml 文件并明确地设置了 transaction-type="JTA"。
java - XA 事务示例 Weblogic
我正在使用 Weblogic 11g。
在某些时候,我的 Java EE 应用程序必须在不同的服务器上调用三个远程 EJB 方法。
我的代码片段:
如何执行全局事务开始和提交/回滚。
我尝试过类似TransactionManager tm = (TransactionManager)new InitialContext().lookup("javax.transaction.TransactionManager")
但不知道如何判断tm
哪些交易参与其中?
有任何想法吗?
java - XA 数据源的性能开销 - 最佳实践
我试图了解 XA 数据源对性能的影响。
在许多应用程序中,并非所有事务都需要参与分布式事务(意味着只有少数事务需要分布式/参与其他资源)。
性能的权衡是否足以配置两个数据源(XA 和非 XA 各一个)?同样,答案是,这取决于场景,但我正在寻找“最佳实践”。
oracle - 尝试提交 jms 事务时 xa_commit 失败
我们正在尝试将消息写入代理队列。但是,当它尝试提交 JMS 事务时,整个请求都失败了,然后它每次都尝试回滚。我们使用 oracle XA 驱动程序。不确定在哪里发布此问题:MQ 论坛或 Oracle 论坛。所以想在这里试一试。有人可以帮助解决这个问题。
错误:
java - 使用 AbstractRoutingDataSource 切换数据源时共享事务
使用AbstractRoutingDataSource切换活动数据源时如何在数据源之间共享事务?
到目前为止,如果没有事务,查询会在两个数据库上正确执行,但是当我启动事务时,一切都在同一个数据库上执行(即我不能再切换到第二个数据库)。
有任何想法吗?
EDIT1(添加的配置文件):
持久性.xml:
弹簧-jpa.xml:
编辑2:
尝试将所有内容切换到 JTA 和 JNDI 提供的数据源。
将 transaction-type="RESOURCE_LOCAL" 更改为 transaction-type="JTA" 也不起作用 - JtaStatusHelper 抛出 NullPointerException,表示 transactionManager 为空。
编辑 3:
将 JBossTransactionManagerLookup 添加到 persistence.xml,现在当切换到事务中的第二个数据源时,我得到“不允许添加多个最后一个资源”。
编辑4:
尝试设置 JBOSS,所以我克服了该错误 - 数据库切换现在可以使用预期的警告:“多个最后的资源已添加到当前事务中。这是事务不安全的,不应依赖。”。接下来将尝试在 JBOSS 中配置 MSSQL XA 驱动程序。
编辑 5:
配置 MSSQL XA后,一切都按预期工作,将发布一个答案,其中包含设置所需的步骤。
performance - PostgreSQL。慢速准备事务和提交准备
我刚刚遇到了一个奇怪的问题。我在 pgfourine 中做了一份报告,发现我的 XA 事务开始工作很慢。准备事务和准备提交结合起来花费了 13.2 秒中的 12.55 秒。但为什么?
我有一个理论,但没有证据。我有慢速光盘,我关闭了 synchronous_commit。即使 synchronous_commit 关闭,PostgreSQL 也可能必须在“准备事务”期间进行 fsync?
有任何想法吗?
更新
相同的测试
看起来 fsync 花费了大量时间,但并非一直如此。16k 提交 - 0.2 秒,17k 准备 + 提交 2.9 秒。
悲剧。看起来 XA 提交比本地提交花费的时间多 15 倍,并且不考虑 synchronous_commit 设置。fsync=off 对于生产使用是不安全的。因此,如果我想使用 XA 事务,我必须小心使用它并使用具有高 IOPS 的优质 SSD 驱动器。
java - 建议 - XA、JTA 和 JMS - 使用 XA 从 JMS 读取并在事务中写入 DB
在工作中,我被要求从 JMS 队列(实际上是具有类似接口的专有东西)中读取数据,并在同一个事务中写入数据库。例如,如果数据库插入失败,我应该从队列中回滚读取。
我对 Java 的经验不是很丰富,对 XA、JTA 或 JMS 的知识也不多。我正在尝试阅读所有内容,以便我充分了解这些技术以实现我的目标。
无论如何,我对这些事情之间的关系有点困惑。
我相信 XA 驱动程序用于与数据库通信以管理分布式事务 - 但是 XA 驱动程序是否也可以与消息队列一起使用?
我是使用 JTA 接口来管理允许我在数据库和队列之间运行事务的 XA 功能,还是必须直接使用一些 XA API?
有谁知道我可以找到在两个组件之间执行事务的代码示例的位置(不一定是 JMS 队列和数据库,而是使用 XA 管理多个参与者的事务的任何东西)?
抱歉,如果这有点宽泛,我只是在寻找足够的指针,以便我可以指出正确的方向并知道要阅读什么。
jdbc - 与多个参与者的 JTA 交易
我很难找到一个跨越多个资源(例如两个数据库、一个数据库和一个 JMS 队列等)的 JTA 事务的简单示例
我花了很多时间阅读这方面的内容,并且有使用 JMS 队列执行 JTA 事务以及通过 JDBC 数据库驱动程序执行 JTA 事务的工作示例。我似乎找不到任何关于使 JMS 队列和 JDBC 数据库成为同一个 JTA 事务的一部分。
任何人都可以提供一个简短的示例或链接来演示如何为此目的使用 JTA API 吗?
oracle - 授予 Oracle 权限并不能修复 WebSphere XAER_RMERR 异常?
我在 WebSphere ND 7.0.0.21 上部署了一个应用程序。其中我配置了一个 Oracle XA 数据源。最近应用程序崩溃了,当我重新启动它时,我开始每秒在 SystemOut.log 中收到以下异常。
当没有在数据库上授予适当的权限时,这似乎是一个标准问题,以允许 db 用户访问需要恢复的事务 - http://www-01.ibm.com/support/docview.wss?uid= swg21196663
但是,我随后在该页面上运行 SQL 并重新启动应用程序服务器,但问题仍然存在。仅当我删除事务日志(在 IBM 页面上描述为解决方法)时,该问题才消失。
为什么授予权限不能解决问题?其他原因会导致 XAER_RMERR 问题吗?
distributed-transactions - XA 准备阶段的两阶段提交和执行?
我试图理解两阶段提交,但我不清楚每个本地站点何时执行其分布式事务的一部分。
在发送准备消息之前是否发生这种情况。那是在两阶段提交 xa 协议甚至运行之前发生吗?
还是每个站点在收到准备消息后执行其部分分布式事务,这意味着准备消息本身也包括要执行的事务查询?