Java EE Bean Managed Transactions를 사용하는 레거시 시스템에 상황이 있습니다. 방금 만든 무언가를 검색하려고 할 때 LockAcquisitionException
이 던져지고 있습니다.Java EE의 컨테이너 관리 트랜잭션 재발생
내 초기 생각이 있었다 :
@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에서는 불법입니다.
우아한 픽스를 찾고있는 것이 아닙니다. 제가 말했듯이 이것은 유산이며, 몇 달 만에 모든 것이 대체 될 때까지 분류 할 항목이 필요합니다.
건배.
고마워 .. 그걸 시도했지만 여전히 작동하지 않습니다. 나는 'Transaction not active'오류가 발생하여 주석을 집어 내고 있다고 확신하지 못합니다. : –
@ Robert Wilson 제 실수로, BMT를 사용한다는 사실을 간과했는데,'UserTransaction'을 주입하고'em.getTransaction' 대신에 새로운 것을 시작/정지 할 수 있습니까? – ewernli