У меня ситуация с устаревшей системой, которая использует управляемые транзакции Java EE Bean.Он получает LockAcquisitionException
, когда он пытается получить что-то, что он только что создал.
Мои первоначальные мысли были такими:
@TransactionAttribute(SUPPORTS)
public Item retrieveItem(int id) {
Item i;
try {
i = em.find(Item.class, id);
} catch (PersistenceException e) {
if (e.getCause() instanceof LockAcquisitionException) {
i = retrieveItem(id);
}
}
return i;
}
Однако - когда выполняется рекурсивный вызов, транзакция ужеумер - и это, кажется, не создает новый.Я пробовал разные TransactionAttributes
, но, похоже, это не имеет значения.Также пытался самостоятельно управлять транзакцией (em.getTransaction()
), но в CMT это незаконно.
Я не ищу элегантного исправления - как я уже сказал, это наследие, мне просто нужно что-то, что будет сортировать егопока все не будет заменено через пару месяцев!
Приветствия.