问题标签 [2phase-commit]
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.
java - 上次资源优化
我正在编写一个不支持两阶段提交的资源适配器。我知道有一种优化技术叫做:“最后的资源优化”。
在 JBoss 上,您的 XAResource 类应该实现 LastResource 以便进行优化。
我的问题是:如何在 WebLogic、WebSpehre、Glassfish 等中做到这一点......
jdbc - 如何在 XA 2PC 事务中加入 ODBC 连接?
我们的应用程序使用 ODBC 与数据库(DB2 和 Oracle,如果有区别的话)进行通信,并通过JNI将业务逻辑委托给 Java (因此它使用 Java和C)。
我想知道的是需要哪些工具/软件/库来允许业务逻辑(Java/JDBC)和应用程序框架(C/ODBC)参与两阶段提交协议。
我们在 Linux 上运行此项目,但通常也支持 Solaris 和 Windows,因此首选多平台解决方案。
php - 使用 PHP 和 MySQL 进行事务处理
我正在尝试使用 PHP 和 MySQL 实现两阶段提交,但结果很短。
我发现的主要障碍是我无法将 MySQL 连接资源存储在第二阶段可以再次找到它的地方。是否可以序列化数据库句柄?
这是我尝试编写代码的情况:
- 用户发送数据
- 服务器启动一个 MySQL 事务并根据它收到的数据执行一些查询。
- 服务器将文件发送回用户
- 当用户成功接收文件时,服务器提交其事务。否则它会回滚。
这似乎需要两个 HTTP 请求/响应周期,因此我需要能够在第二个请求中重新连接到同一个数据库句柄才能提交事务。这部分我一直失败。
欢迎任何建议,即使它是“这在 PHP 中是不可能的”
database - 如果我访问 UserTransaction 这是否意味着我使用 2 阶段提交或 XA?
UserTransaction ut=lookup.... ut.beginTransaction(); saveToFooDB(); statelessEjb.transactionSupportedMethod(); //将某些内容保存到 Foo DB saveToFooDB(); ut.commit();
如果我执行上述操作,那么我的理解是它不是 XA 事务,因为它不跨越多个资源(如 DB 和 JMS)。我的理解正确吗?
database - 在事务提交之前传递 JMS 消息
我有一个非常简单的场景,涉及应用程序服务器(Glassfish)中的数据库和JMS。场景非常简单:
问题是有时在数据库中提交插入之前传递消息。如果我们考虑 2 阶段提交协议,这实际上是可以理解的:
我和其他人讨论过这个问题,但答案总是:“奇怪,它应该开箱即用”。
我的问题是:
- 它如何开箱即用?
- 我的场景听起来很简单,为什么没有更多的人有类似的麻烦?
- 难道我做错了什么?有没有办法正确解决这个问题?
以下是有关我对问题的理解的更多详细信息:
仅当按此顺序处理参与者时,才存在此时间问题。如果 2PC 以相反的顺序处理参与者(首先是数据库,然后是消息代理),那应该没问题。问题是随机发生的,但完全可以重现。
在 Glassfish 文档中,我发现无法控制 JTA、JCA 和 JPA 规范中分布式事务参与者的顺序。我们可以假设它们会在使用时按照顺序被登记到分布式事务中,但是使用 JPA 等 ORM 时,很难知道何时刷新数据以及何时真正使用数据库连接。任何的想法?
sql - Groovy,如何进行 2 阶段提交?Sql.withTransaction 是否可以跨多个数据库管理事务范围?
好吧,我想我的问题说明了一切。我需要知道 Groovy SQL 是否支持两阶段提交。我实际上正在编写一个 Grails 服务,我想在其中定义一个执行以下操作的方法:
获取数据库 1 的 SQL 实例,获取数据库 2 的 SQL 实例,
以某种方式打开事务:在事务内分别调用每个数据库上的两个不同的存储过程。如果需要,然后在两个连接上提交一些方法或回滚。
我在网上的任何地方都没有找到任何有用的信息。
我必须以任何方式对两阶段提交进行编程,所以即使这得到了其他方式的支持(例如,从 spring 工件中获得帮助并在 grails 中使用它们),请指导我。此刻,这已成为我的表演终结者。
注意:我正在使用 MySQL 和 mysql-connector 驱动程序。谢谢,阿拉姆谢尔
java - 两阶段提交-如何测试
我们正在尝试在 Java/Jboss/Apache 环境中实现两阶段提交。
但是我们很难理解如何测试它是否真的有效?有什么 gui 工具可以帮助我们测试它吗?
谢谢
oracle - Oracle 更改会话建议提交?
我的应用程序会自动从故障中恢复。我测试如下:
- 启动应用
- 在处理过程中,杀死应用服务器主机(shutdown -r -f)
- 主机重新启动时,应用程序服务器重新启动(作为 Windows 服务)
- 应用程序重新启动
- 应用程序尝试处理,但被先前会话中 Oracle DB 中不完整的 2 阶段提交事务阻止。
- 大约 10 到 30 分钟后,数据库解析了先前的 txn,并且处理继续正常。
我需要它比这更快地继续处理。我的 DBA 建议我应该在我的声明前加上
但他不能向我保证或详细说明这样做可能导致数据丢失。
幸运的是,有问题的语句只是每隔一秒左右更新一个datetime
值SYSDATE
,所以如果有一些数据损坏,它会在被覆盖之前持续 < 1 秒。
但是,对于我的问题。上面的语句究竟做了什么?Oracle在使用时如何解决数据同步问题?
transactions - 跨两个 EJB 服务器的分布式事务
我正在阅读一篇关于 EJB 服务器中的 2-PC 和分布式事务的文章。它说:
2-PC 允许跨不同服务器和资源(例如,数据库和 JMS 提供者)管理事务。2-PC 的细节超出了本书的范围,但是支持它的系统不需要 EJB 或应用程序开发人员进行任何额外的操作。
除了在自己的环境中管理事务之外,EJB 服务器还可以与其他事务系统协调。例如,如果 EJB 实际上来自与 BankEJB 不同的应用程序服务器,那么这两个应用程序服务器将合作将事务作为一个工作单元来管理。
如果我有两个不同的企业应用程序(A 和 B)在托管在两台不同机器上的两个应用程序服务器上运行。我使用的应用服务器将是 WebLogic 和 Oracle AS。2 PC/分布式事务是否有可能协调两台服务器之间的事务(即使它们来自不同的供应商)?如果我的问题不清楚,请告诉我。
spring - java SE中的Spring JMS 2阶段提交
我没有在 Java EE 下运行。
我想使用 Spring 进行 XA 事务以在 DB 和 JMS 之间共享事务。
spring 是否提供这样的功能或者我必须使用外部事务管理器,如 Atomikos?
我目前使用数据库的 DataSourceTransactionManager,我看到我也可以使用 JMSTransactionManager。他们一起工作吗?从文档中不清楚,因为提到了 JtaTransactionManager。
请指教。
亚尔