Вложенные транзакции и блокировки JPA

Рассмотрим сценарий, в котором два метода существуют в разных 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. Это приведет к взаимоблокировке. Можно ли предотвратить ее, не полагаясь на уровни изоляции?

19
задан anergy 24 May 2012 в 11:45
поделиться