我遇到了一種奇怪的情況:將一些無狀態EJB注入到Stateful中,以防止某些懶惰屬性被擴展持久性上下文解析爲Seam中長時間運行的對話2.2.2將@Stateless Ejb注入具有擴展持久性的@Stateful上下文
從我發現的情況看,在無狀態EJB的持久化上下文中執行的任何查找都會注入到有狀態的EJB中,導致在Extended Persistence上下文中調用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);
}
}
任何人都可以證實我這個?
第一:很明顯(),不乾淨(),和你說什麼,它只是簡單的錯誤:你可以注入一個擴展持久化上下文使用普通的EJB,檢查接縫文檔。 – 2012-02-16 09:46:51