EJB TransactionAttributeType - 我应该使用MANDATORY还是REQUIRES_NEW

时间:2014-07-04 11:47:47

标签: java transactions ejb

我需要每分钟通过两个不同的动作(2个独立的bean)同时更新一个表

Bean A

 @TransactionAttribute(value = TransactionAttributeType.REQUIRES_NEW)
    public void stop()
    {
    stopMachin()
    } 

    @TransactionAttribute(value = TransactionAttributeType.MANDATORY)
    public void stopMachin(){ updateTable ..}

Bean B

@TransactionAttribute(TransactionAttributeType.REQUIRED)
public void scan() 
{
stopscan();
}

@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public void stopscan() {updateTable..}  

失败并显示错误

ORA-00060: deadlock detected while waiting for resource
Call: UPDATE ACTION SET DATE = ? WHERE (ID_AT = ?)

为什么REQUIRES_NEWMANDATORY标志不起作用? 新要求意味着接受客户的交易。

我是否必须将MANDATORY放入Bean B而不是REQUIRED?

2 个答案:

答案 0 :(得分:0)

这完全取决于操作期间的操作(SQL)和操作顺序。请提供更多详细信息,您正在执行什么样的操作以及按什么顺序执行。

答案 1 :(得分:0)

每个文章的一个方法@Schedule(分钟=“”,小时=“”,持久=假) 另外每2分钟@Schedule(分钟=“ / 2”,小时=“”,持久=假)

当在同一秒,定时器执行时,经常发生ORA-00060:在等待资源时检测到死锁