如何在不使用注释的情况下在JavaEE 6中获取容器管理实体管理器
答案 0 :(得分:2)
您可以尝试使用JNDI获取实体管理器,如下所述:http://docs.oracle.com/cd/E16439_01/doc.1013/e13981/usclient005.htm#CIHFIDHI
另请参阅JPA spec的第7.2节(“获取EntityManager”)。
答案 1 :(得分:0)
我发现这个解决方案适用于Glassfish 3.1(感谢Thomas的链接):
@Stateless
@PersistenceContext(unitName = "myUnit", name="persistence/myUnit")
public class MyLibraryService {
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public String getFirstName(String userId) {
EntityManager em = (EntityManager) new InitialContext().lookup("java:comp/env/persistence/myUnit");
TypedQuery<String> tq = em.createQuery("select fn from Person p where p.id = :userId", String.class);
tq.setParameter("userId", userId);
...
}
}
其中myUnit
是persistence.xml
中定义的单位名称。
MyLibraryService
可以简单地注入其他类:
@Inject
private MyLibraryService myLibraryService;