Внедрение @Stateless Ejb в @Stateful с расширенным контекстом постоянства - PullRequest
3 голосов
/ 15 февраля 2012

У меня странная ситуация, когда внедрение некоторых EJB-компонентов без сохранения состояния в Stateful не позволяет разрешить некоторые ленивые свойства в расширенном контексте постоянства в длительном диалоге в шве 2.2.2

Из того, что я обнаружил, кажется, что любая находка, выполненная в контексте персистентности EJB без состояния, введенного в Stateful, вызывает вызов метода clear () в контексте расширенной персистентности.

Методы аннотируются с помощью @TransactionAttribute (TransactionAttributeType.SUPPORTS)

Пример:

@Stateful
@TransactionAttribute(TransactionAttributeType.SUPPORTS)
public class BeanA {
        @PersistenceContext(type = PersistenceContextType.EXTENDED) EntityManager em;
        @EJB BeanB beanB;

        public MyClassA find(Long id) {
            return em.find(MyClassA.class, id);
        }

        public void method() {
             MyClassA a = find(2);
             em.contains(a); // true
             beanB.find("myId");  // Now every object returned from A's EM are detached.
             em.contains(a); // false
        }
}

@Stateless
@TransactionAttribute(TransactionAttributeType.SUPPORTS)
public class BeanB {
        @PersistenceContext EntityManager em;

        public MyClassB find(String id) {
             return em.find(MyClassB.class, id);
        }
}

Может кто-нибудь подтвердить мне это?

Ответы [ 2 ]

0 голосов
/ 16 февраля 2012
0 голосов
/ 16 февраля 2012

Не уверен, что вызывает поведение clear(). Однако, хотя вы можете использовать EJB3-инъекцию с @EJB и @PersistenceContext в ваших EJB-компонентах, вы должны использовать @In для внедрения и BeanB, и менеджера сущностей, чтобы менеджер области управления швами в области разговора распространялся по всей ваши компоненты.

...