Verschachtelte JPA-Transaktionen und Sperren
Stellen Sie sich das Szenario vor, dass zwei Methoden in verschiedenen zustandslosen Beans vorhanden sind
public class Bean_A {
Bean_B beanB; // Injected or whatever
public void methodA() {
Entity e1 = // get from db
e1.setName("Blah");
entityManager.persist(e1);
int age = beanB.methodB();
}
}
public class Bean_B {
//Note transaction
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public void methodB() {
// complex calc to calculate age
}
}
Die von BeanA.methodA gestartete Transaktion würde ausgesetzt und eine neue Transaktion in BeanB.methodB gestartet. Was ist, wenn die Methode B auf dieselbe Entität zugreifen muss, die von Methode A geändert wurde? Dies würde zu einem Deadlock führen. Ist es möglich, dies zu verhindern, ohne sich auf Isolationsstufen zu verlassen?