1

我正在为我的 EntityManager 获取 NPE,但不知道为什么 - 谁能发现我的错误?

UserManagerImpl.java

@Stateless
public class UserManagerImpl implements UserManager {

 @PersistenceContext(unitName = "persistenceUnit")
 EntityManager em;

 public List<User> findUsers() {
  return (List<User>) em.createQuery("from User").getResultList();
 }
}

META-INF/persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0">
 <persistence-unit name="persistenceUnit">
  <provider>org.hibernate.ejb.HibernatePersistence</provider>
  <jta-data-source>java:/DefaultDS</jta-data-source>
  <properties>
   <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>
   <property name="hibernate.hbm2ddl.auto" value="create" />
  </properties>
 </persistence-unit>
</persistence>

这些在我的 ejb jar 项目中,从 JSP 调用 UserManagerImpl,但不确定是否会有所作为。

提前致谢。

4

1 回答 1

3

当您使用new UserManagerImpl()容器时,无法将其EntityManager注入此类。您需要让容器使用

@EJB
private UserManager userManager;

这仅适用于容器管理的对象,如 JSF 管理的 bean、servlet 或 JSP。或者,您可以使用类似的东西从 jndi 查找 ejb

new InitialContext().lookup("UserManagerImpl");

实际的 jndi 名称可能不同。

于 2010-08-28T12:11:07.690 回答