问题标签 [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 回答
242 浏览

jboss - 客户端与 MDB 确认

据我所知,MDB 只能使用 AUTO_ACKNOWLEDGE 和 DUPS_OK_ACKNOWLEDGE。我想要像 CLIENT_ACKNOWLEDGE 这样的东西来避免 XA 事务。

基本上我想要的:获取消息->启动本地事务->执行数据库操作->结束本地事务->确认消息

你知道如何实现这一目标吗?

目前我使用 Jboss 5.1.GA。

0 投票
1 回答
222 浏览

distributed-transactions - 两个阶段提交和合并执行和准备阶段

据我了解,在两阶段提交之前甚至需要运行往返通信以将事务发送到每个站点。每个站点都会执行他们的事务部分,当协调器从所有站点获得响应时,它会运行两阶段提交。这将启动准备阶段等。

为什么有必要将准备阶段与两阶段提交之前的执行分开?是否有理由不合并执行和准备阶段,从而减少往返通信成本?

这是我之前的问题的后续。

0 投票
3 回答
11027 浏览

java - JDBC 驱动程序不支持 XA 问题

我收到“JDBC 驱动程序不支持 XA 问题”

提交事务时出错:; 嵌套异常是:javax.transaction.xa.XAException:JDBC 驱动程序不支持 XA,因此不能参与两阶段提交。

0 投票
2 回答
4861 浏览

java - Spring+Hibernate+DB2+JTA+XA 应用程序中的死锁

应用程序日志中的异常:

弹簧配置:

休眠非 XA 配置:

休眠 XA 配置:

我的服务实现类中大部分业务逻辑发生的代码片段:

我的 Dao layer1 的代码片段:

来自我的 Dao Layer2 的代码截图:

  1. 该应用程序是一个测试系统,用户可以同时进行测试。
  2. 最初,事务分界不在我的 Dao 层,而是在我的服务实现类(实际上一直在我的控制器类),其中多个读取和更新被绑定到开始提交块中的一个事务中。由于我看到了几个死锁,所以我将分界线移到了 Dao 层,以便在我的 begin-commit 块之间只有一个 hql 语句,以查看它是否可以防止死锁但没有运气。
  3. 尝试将 hibernate.connection.autocommit 等属性设置为 true,将 hibernate.transaction.flush_before_completion 设置为 true,将 hibehibernate.transaction.auto_close_session 设置为 true,但没有成功。
  4. 一个用户读取的行永远不会被另一个用户更新。每个用户都读取和更新不同的行,即使他们访问相同的 DB2 表。只有在运行为测试构建一组问题的过程时,如果两个用户进行相同类型的测试,他们将读取相同的行。它与上面描述的 someDeadlockCausingMethod 非常相似,其中测试问题是从一组包含问题和答案的表中准备的。通过在 for 循环中遍历此结果集,将新行插入到另一个表中以保存将出现在用户测试中的每个问题的详细信息。此步骤在应用程序中是必要的,因为即使两个用户参加相同的测试,也会从每个用户的所有问题池中抽取一组随机问题。
  5. 现在测试已为参加考试的用户准备好,应用程序中的下一个逻辑步骤是从仅包含与参加考试的用户有关的问题的详细信息的表中读取行。因此,并发用户将在此过程中读取同一张表,但不会读取同一行。一次向用户呈现一个问题。用户回答问题后,为获取与该用户有关的问题而读取的行将使用答案选项进行更新。再一次,永远不会为两个并发用户更新相同的行。此方法类似于上面描述的 anotherDeadlockCausingMethod()。
  6. 我希望您对应用程序的功能有所了解。并发用户从不读取或更新相同的行这一事实让我对资源如何被锁定感到惊讶。然后我发现页面锁定是为了更新表格。所以我去问 DBA 是否可以将其更改为对正在更新的表进行行锁定。他担心 DB2 实现行锁定的性能开销,并担心它是否会影响使用 DB2 的其他应用程序。所以他不想这样做,除非我找不到任何其他解决方案。
  7. 请忘记 XA/JMS 部分。假设该部分暂时被注释掉。对于我看到死锁的大部分应用程序非 XA 数据源。

    有人可以告诉我如何解决僵局吗?我想了解设计中出了什么问题。提前非常感谢任何帮助

0 投票
0 回答
232 浏览

spring - JtaTransaction 与 Resin

我使用 Resin 的 JtaTransactionManager 来管理 Resin Server 中的 jta 事务,下面是事务管理器的 spring 配置。

以下是数据源配置。

  1. 我想知道为什么公共连接也支持两阶段提交,因为这个配置可以很好地工作。
  2. 当我必须用 xa 连接替换 dbcp 的连接时。
  3. dbcp 的连接是否支持两阶段提交。
0 投票
1 回答
1761 浏览

oracle - 避免使用数据库链接的分布式事务

我正在一个 Spring Java EE 应用程序中工作,该应用程序必须处理两个不同的数据源 A 和 B。

因为应用程序需要以一致的方式更新 A 和 B。如果一次更新失败,则整个过程都会失败,必须进行回滚。

我对如何实现应用程序有两种不同的想法:

  1. 我必须将这两个更新都包含在分布式事务 XA 中。这种方法在性能方面会很昂贵。此外,B 源将很快关闭,保持整个 XA 基础设施可能是一个瓶颈;
  2. 我可以设置从 db A 到 db B 的 Oracle DB 链接,并让我的应用程序相信它只使用单个数据源和本地事务,而 Oracle 处理更新同步。当 B 将被关闭时,我将简单地删除 B 更新并关闭 DB Link。

对于这两种情况,你怎么看?

0 投票
0 回答
76 浏览

ejb - XA 事务和在其上下文之外工作

我正在通过 MQ 向我的 EJB 应用程序发送一条消息,它是一个 XA 事务。收到消息后,我需要发送一些 http 请求并发回响应(这将是一个 RMI 调用)。
我担心的是,由于这些请求,队列侦听器可能会关闭(需要很长时间才能通过 http 请求进行回复)。
我发现的解决方案是在服务器管理的线程中完成工作,或者在另一个 EJB 中完成工作,因为它将在当前工作的 XA 事务的上下文中工作(不确定这一点)。
请让我知道什么是最好的解决方案。

0 投票
1 回答
111 浏览

transactions - 跨多个容器的事务控制

能否请您指出任何使用 XA 架构、JMS 和 Camel 跨多个容器进行事务控制的示例代码。

0 投票
1 回答
1158 浏览

transactions - Spring Batch 中的 XA 事务

我正在使用 Spring Batch 编写许多批处理作业,这些作业主要执行从/到数据库的导出/导入。Spring Batch 作业存储库数据库和目标数据库(我从中/向其读取/写入数据)位于不同的机器上。

我的问题是我应该在这个配置中使用 XA 事务吗?

我想知道在某个时间点链接到作业存储库 db 刹车时的场景,它是否会损坏数据?像这样:

  1. 作业开始(写入作业存储库)
  2. 在事务中的目标数据库中读取/处理/写入
  3. 链接到作业存储库数据库刹车和作业失败

最后我更新了目标数据库,但作业失败,因此在作业重新启动时将再次处理相同的数据。

0 投票
2 回答
192 浏览

java - 客户端 -> 服务器 -> 客户端之间的分布式事务

对于一个新项目,我正在寻找能让我的生活更轻松的技术。我的新项目基本上是 2 个客户端和一个服务器:客户端 1 向服务器发送消息 1,服务器向客户端 2 发送消息 1,客户端 2 对消息 1 进行操作。

这可以使用普通的 java 套接字或 rmi 或类似技术来完成。但这里有个问题:整个过程需要一个事务。我的意思是,当 client2 无法处理 message1 时,client1 和服务器需要知道这一点并回滚已完成的任何操作。

我的第一个想法是从 client2 向 client1 和服务器发送一条带有结果的消息,但更多地考虑它会变得对错误敏感。

我已经看过 jms、jta、jca 等技术,但对一切都有些不知所措。我怀疑可能有更简单的方法。