这就是我的要求 - 锁定数据库记录,处理它并释放它
环境 - weblogic 10.3 数据库 - Oracle 11g 数据源 - 涉及多个 XA 资源 Tx mgr - JTA
以下是我迄今为止所做的实验结果:
实验 1 - 依赖未提交的读取
- 读取数据库记录
- 作为全局 JTA 事务的一部分,在另一个表中通过 id 锁定记录
- 处理记录 尝试锁定同一记录的第二个事务将失败,将删除该记录。但是为了使这个工作,RDBMS 应该允许脏读。不幸的是,Oracle 不支持读取未提交的隔离级别。
实验 2 - 本地事务中的锁定记录
- 读取数据库记录
- 在另一个表中通过 id 锁定记录,作为单独的本地事务
- 当事务成功提交时处理记录并删除记录 尝试锁定同一记录的第二个事务将失败,将删除记录。这种方法基于提交的数据,应该可以正常工作。问题来了 - 由于锁事务和全局父事务不同,如果处理失败回滚主事务,我应该通过回滚锁事务来补偿,我不知道该怎么做 -需要帮助在这里
如果我无法回滚记录锁定事务,则必须围绕记录锁定代码编写一些脏逻辑。我不喜欢这个。
这似乎是一个非常普遍的要求。我想知道你们如何优雅地处理这个问题。Oracle 是否支持以任何方式使未提交的更新对所有事务可见。
提前非常感谢。