2010-08-28 65 views
1

我正在为我的EntityManager获取NPE,但无法找出原因 - 任何人都可以发现我的错误吗?EntityManager未注入

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的项目里面,UserManagerImpl从JSP调用,不知道应该做出不同。

在此先感谢。

+0

你在哪个服务器上运行? – nos 2010-08-28 10:20:33

+0

你在使用JBoss吗?使用HSQLDB?你在服务器日志中得到什么? – 2010-08-28 10:29:45

+0

带有HSQLDB的JBoss在服务器日志中看不到任何重要的东西。 我怀疑这可能是因为我使用新的UserManagerImpl()从我的JSP引用UserManager,但我不知道如何使用注释将其注入到托管bean中。不知道是否是这样。 – rich 2010-08-28 10:56:43

回答

3

当您使用new UserManagerImpl()时,容器无法将EntityManager注入此类。你需要让容器注入一个实例到你的对象使用

@EJB 
private UserManager userManager; 

这将仅适用于容器管理的对象工作像JSF管理的bean,servlet或JSP。或者,您可以使用类似

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

从jndi中查找ejb。实际的jndi名称可能不同。

相关问题