JPA aninhadas transações e bloqueio
Considere o cenário em que existem dois métodos em diferentes beans sem estado
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
}
}
A transação iniciada pelo BeanA.methodA seria suspensa e a nova transação seria iniciada no BeanB.methodB. E se o método B precisar acessar a mesma entidade que foi modificada pelo método A. Isso resultaria em impasse. É possível evitá-lo sem depender de níveis de isolamento?