代码之家  ›  专栏  ›  技术社区  ›  rich

未注入EntityManager

  •  1
  • rich  · 技术社区  · 16 年前

    我正在为我的整个经理准备一个NPE,我不知道为什么-有人能发现我的错误吗?

    @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/持久性.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>
    

    这些都在我的ejbjar项目中,UserManagerImpl是从JSP调用的,但不确定这会有什么不同。

    1 回复  |  直到 16 年前
        1
  •  3
  •   Jörn Horstmann    16 年前

    new UserManagerImpl() 容器无法注入 EntityManager 进入这个班级。您需要让容器使用

    @EJB
    private UserManager userManager;
    

    这只适用于容器管理的对象,如JSF管理的bean、servlet或jsp。或者,您可以使用以下命令从jndi中查找ejb

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

    实际的jndi名称可能不同。