#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: обнаружена взаимоблокировка во время ожидания ресурса