问题标签 [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.

0 投票
1 回答
1038 浏览

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"。

0 投票
0 回答
1076 浏览

java - XA 事务示例 Weblogic

我正在使用 Weblogic 11g。

在某些时候,我的 Java EE 应用程序必须在不同的服务器上调用三个远程 EJB 方法。

我的代码片段:

如何执行全局事务开始和提交/回滚。

我尝试过类似TransactionManager tm = (TransactionManager)new InitialContext().lookup("javax.transaction.TransactionManager")但不知道如何判断tm哪些交易参与其中?

有任何想法吗?

0 投票
1 回答
1328 浏览

java - XA 数据源的性能开销 - 最佳实践

我试图了解 XA 数据源对性能的影响。

在许多应用程序中,并非所有事务都需要参与分布式事务(意味着只有少数事务需要分布式/参与其他资源)。

性能的权衡是否足以配置两个数据源(XA 和非 XA 各一个)?同样,答案是,这取决于场景,但我正在寻找“最佳实践”。

0 投票
2 回答
9333 浏览

oracle - 尝试提交 jms 事务时 xa_commit 失败

我们正在尝试将消息写入代理队列。但是,当它尝试提交 JMS 事务时,整个请求都失败了,然后它每次都尝试回滚。我们使用 oracle XA 驱动程序。不确定在哪里发布此问题:MQ 论坛或 Oracle 论坛。所以想在这里试一试。有人可以帮助解决这个问题。

错误:

0 投票
1 回答
5063 浏览

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后,一切都按预期工作,将发布一个答案,其中包含设置所需的步骤。

0 投票
1 回答
1658 浏览

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 驱动器。

0 投票
0 回答
917 浏览

java - 建议 - XA、JTA 和 JMS - 使用 XA 从 JMS 读取并在事务中写入 DB

在工作中,我被要求从 JMS 队列(实际上是具有类似接口的专有东西)中读取数据,并在同一个事务中写入数据库。例如,如果数据库插入失败,我应该从队列中回滚读取。

我对 Java 的经验不是很丰富,对 XA、JTA 或 JMS 的知识也不多。我正在尝试阅读所有内容,以便我充分了解这些技术以实现我的目标。

无论如何,我对这些事情之间的关系有点困惑。

  1. 我相信 XA 驱动程序用于与数据库通信以管理分布式事务 - 但是 XA 驱动程序是否也可以与消息队列一起使用?

  2. 我是使用 JTA 接口来管理允许我在数据库和队列之间运行事务的 XA 功能,还是必须直接使用一些 XA API?

  3. 有谁知道我可以找到在两个组件之间执行事务的代码示例的位置(不一定是 JMS 队列和数据库,而是使用 XA 管理多个参与者的事务的任何东西)?

抱歉,如果这有点宽泛,我只是在寻找足够的指针,以便我可以指出正确的方向并知道要阅读什么。

0 投票
1 回答
899 浏览

jdbc - 与多个参与者的 JTA 交易

我很难找到一个跨越多个资源(例如两个数据库、一个数据库和一个 JMS 队列等)的 JTA 事务的简单示例

我花了很多时间阅读这方面的内容,并且有使用 JMS 队列执行 JTA 事务以及通过 JDBC 数据库驱动程序执行 JTA 事务的工作示例。我似乎找不到任何关于使 JMS 队列和 JDBC 数据库成为同一个 JTA 事务的一部分。

任何人都可以提供一个简短的示例或链接来演示如何为此目的使用 JTA API 吗?

0 投票
2 回答
8049 浏览

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 问题吗?

0 投票
1 回答
429 浏览

distributed-transactions - XA 准备阶段的两阶段提交和执行?

我试图理解两阶段提交,但我不清楚每个本地站点何时执行其分布式事务的一部分。

在发送准备消息之前是否发生这种情况。那是在两阶段提交 xa 协议甚至运行之前发生吗?

还是每个站点在收到准备消息后执行其部分分布式事务,这意味着准备消息本身也包括要执行的事务查询?