2010-08-28 124 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名稱可能不同。