Рассмотрим сценарий, в котором два метода существуют в разных bean-компонентах без сохранения состояния
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
}
}
Транзакция, начатая BeanA.methodA, будет приостановлена и новая транзакция будет запущена в BeanB.methodB. Что делать, если методу B необходимо получить доступ к тому же объекту, который был изменен методом A. Это приведет к взаимоблокировке. Можно ли предотвратить ее, не полагаясь на уровни изоляции?