Context是Java - 带有Hibernate和Spring的JPA.
我们来看两阶段提交协议的场景(但只有一个资源):
查询从应用程序提交
投票是/否(在我们的案例中来自数据库)
3.1.如果是,来自数据库
3.1.1.(在代码中进行回调) - 不是协议的一部分
3.1.2.提交数据库
3.2如果没有
3.2.1回滚到数据库
我想要的是一种在代码中从3.1.1进行回调的方法,但只有当知道事务将被提交但在实际提交之前.此外,如果在此处抛出异常,则应回滚该事务.
使用TransactionSynchronizationSpring中的(*),允许您在事务提交/完成之前或提交/完成之后拦截事务.
beforeCommit() 回调说在调用方法后仍然可以发生回滚; beforeComplete() 即使交易失败也会被调用afterCommit/Complete() 在事务实际提交到数据库之后调用,并且无法回滚. 现在我看起来似乎我想要的是另一个完整的两阶段提交协议; 但我想知道Spring中是否有解决方法.区别在于回调中完成的调用无法回滚.
来自Spring 4.2的(*)非常简单,@TransactionalEventListener并且TransactionPhase很好地抽象TransactionSynchronization
我有一个网络应用程序,它接收将订单保存在数据库中的请求。我想写入 2 个不同的数据库 - 一个 Cassandra 实例和一个 PostgreSQL 实例。我使用纯 Java 和 JDBC(带有 apache DBUtis),前面有一个轻量级 Web 应用程序库。
我不确定的是如何跨两个数据库实现事务性,即如果对其中一个数据库的写入失败,则回滚另一个写入并将错误消息放入错误日志中。
Java中有什么机制可以实现这一点吗?我知道两阶段提交这样的事情,这就是我在这里要寻找的吗?还有其他选择吗?
我有一个场景,工作单位定义为:
Update table T1 in database server S1
Update table T2 in database server S2
Run Code Online (Sandbox Code Playgroud)
我希望上述工作单元完全发生或根本不发生(如同任何数据库事务一样).我怎样才能做到这一点?我广泛搜索并发现这篇文章接近我期待的内容,但这似乎对Hibernate非常具体.
我使用Spring,iBatis和Tomcat(6.x)作为容器.
我正在处理遗留应用程序。它使用java,休眠。问题是有使用 Hibernate 执行的 sql 连接。
这些 SQL 由两个表 TableA、TableB 组成。现在的问题是 TableA 移到了美国的数据库,而 TableB 移到了英国的数据库。意味着两者都位于不同的位置和不同的模式。现在我必须迁移应用程序,以便可以执行这些连接。
如何使用此连接从这两个表中获取数据或如何配置休眠以连接到不同的数据库,以便可以执行 SQL 连接。