EJB TransactionAttributeType — должен ли я использовать ОБЯЗАТЕЛЬНЫЙ или REQUIRES_NEW

#java #transactions #ejb

#java #транзакции #ejb

Вопрос:

Мне нужно обновлять таблицу каждую минуту двумя разными действиями (2 независимых компонента) одновременно

Компонент A

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

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

Компонент 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_NEW и MANDATORY не работают?
Новое требование означает получение транзакции клиента.

Должен ли я указывать ОБЯЗАТЕЛЬНЫЙ в компоненте B вместо ТРЕБУЕМОГО?

Ответ №1:

Все зависит от операции во время вашего действия (SQLS) и порядка выполнения операций. Пожалуйста, предоставьте более подробную информацию, какие операции вы выполняете и в каком порядке.

Ответ №2:

Один метод каждые несколько минут по расписанию (минута = ««, час = ««, постоянный = false) Еще один каждые 2 минуты по расписанию (минута = «/ 2″, час = ««, постоянный = false)

И когда в ту же секунду выполняются таймеры, это часто происходит ORA-00060: обнаружена взаимоблокировка во время ожидания ресурса