这就是我的要求 - 锁定数据库记录,处理它并释放它
环境 - weblogic 10.3 数据库 - Oracle 11g 数据源 - 涉及多个XA资源 Tx mgr - JTA
以下是我迄今为止所做的实验结果:
实验1 - 依靠未提交读取
实验2 - 锁定本地交易中的记录
如果我无法回滚记录锁定事务,则必须在记录锁定代码周围写一些脏逻辑。我不喜欢这个。
这似乎是一个非常普遍的要求。我想知道你们如何优雅地处理这个问题。 Oracle是否支持以任何方式使未提交的更新对所有事务都可见。
提前多多感谢。
答案 0 :(得分:1)
我们有一个实用程序类,大致实现了您在实验2中描述的内容:
先决条件:拥有专用的锁表
在锁定阶段,创建一个新连接; INSERT INTO在锁定表上执行。
在解锁阶段,无论业务逻辑的执行如何,都会执行连接回滚。
它像java.util.concurrent.locks.Lock一样使用:
Lock lock = new Lock(...);
lock.lock();
try {
// your business logic
} finally {
lock.unlock();
}
适用于websphere / oracle。
请注意,如果您使用JPA,则内置支持实体锁定。