С сохранением контейнера, поддерживаемыми контейнером транзакциями JTA, управляемыми контейнером транзакциями JTA и менеджером сущности, введенным в локальные сеансовые компоненты без состояния, то, что вызывает метод, не поддерживаемый транзакциями, управляемое состояние объекта? Я прочитал: https://community.jboss.org/thread/183007 и аналогичные темы, но, похоже, существует некоторая двусмысленность вокруг того, распространяется ли ПК на метод NOT_SUPPORTED, если они оба используют впрыскиваемые EM с той же фабрики?Управляемый постоянный контейнер EJB3 - когда объект становится неуправляемым
Рассмотрим этот фрагмент из бобов, который собирается получить элемент, а затем вызвать метод из другого боба:
@PersistenceContext
private EntityManager em;
@Inject
private LeanBean leanBean;
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public void startHere() {
MyItem item = em.find(MyItem.class, key);
leanBean.txMethod(item);
leanBean.nonTxMethod(item);
}
Теперь здесь LeanBean.java. Обратите внимание, что два его метода имеют различные распространения транзакций
@Stateless
@LocalBean
public Class LeanBean {
@PersistenceContext
private EntityManager em;
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public void txMethod(MyItem item) {
doSomething(item); // item is managed; persistence context propagated with
} // transaction context; em is the same as my caller's em
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
public void nonTxMethod(MyItem item) {
doSomething(item); // caller's transaction context has been suspsended.
} // did em propagate? is item managed?
}
То, что я не могу понять, из спецификации (ы):
- Внутри nonTxMethod, является пункт в отдельном государстве? Что должно произойти, если я буду ссылаться на них?
- Что делать, если метод в вызывающем фрагменте был аннотирован TransactionAttributeType.NOT_SUPPORTED? было бы состоянием элемента в любом из методов внутри LeanBean?
То, что я пытаюсь сделать здесь, заключается в том, чтобы поддерживать сущность, прикрепленную внутри метода, который я не хочу иметь как часть транзакции.
В частности, если, внутри nonTxMethod, я попытался получить доступ к ленивому полю MyItem .... –