锁定这就是我的要求 - 锁定数据库记录,处理它,然后松开锁,工艺和释放JDBC
环境 - 的WebLogic 10.3 数据库 - 的Oracle 11g 数据源 - 多XA的recources参与 的Tx经理 - JTA
下面是到目前为止,我已经做了实验结果:
实验1 - 依靠读取未提交
- 读取数据库记录
- 通过ID锁定记录在另一表中,作为全局JTA事务
- 过程记录 它试图锁定同一记录将失败的第二个交易的一部分,将下降记录。 但是为了这个工作,RDBMS应该允许脏读。 不幸的是,Oracle不支持读取未提交的隔离级别。
实验2 - 锁定记录在本地事务
- 阅读分贝记录
- 另一个表通过ID锁定记录,作为一个独立的本地事务
- 过程中的记录和在事务成功提交时删除记录 尝试锁定相同记录的第二个事务将失败,将删除该记录。这种方法基于承诺的数据,应该工作正常。 这里是问题 - 由于锁定事务和全局父项是不同的,如果处理失败回滚主要事务,我应该回滚锁定事务,我不知道该怎么办 - 需要帮助在这里
如果Iam无法回滚记录锁定事务,将不得不围绕记录锁定代码编写一些脏逻辑。我不喜欢这个。
这似乎是一个非常普遍的要求。我想知道你们如何优雅地处理这件事。 Oracle是否支持以任何方式使未提交的更新对所有事务可见。
非常感谢。
在实验中发生的事情是以下几点:获得数据库记录,锁定由ID记录在另一张表(我假设你插入ID到另一个表,该ID是主键)。这将锁定这条记录。任何其他试图将相同密钥插入表的事务都会阻塞/失败。 – steve