2010-08-28 4 views
1

Я получаю NPE для своего EntityManager и не могу понять, почему - может ли кто-нибудь определить мою ошибку?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, то UserManagerImpl вызывается из JSP, не уверен, что должен сделать разница.

Заранее спасибо.

+0

На каком сервере вы работаете? – nos

+0

Вы используете JBoss? С HSQLDB? Что вы получаете в журналах сервера? –

+0

JBoss с HSQLDB не может видеть ничего значимого в журнале сервера. Я подозреваю, что это связано с тем, что я ссылаюсь на UserManager из моего JSP, используя новый UserManagerImpl(), но я не уверен, как его вводить в управляемый компонент, если это так, используя аннотацию. Не уверен, что это так или иначе. – rich

ответ

3

Когда вы используете new UserManagerImpl(), контейнер не имеет возможности вводить EntityManager в этот класс. Вы должны позволить контейнер впрыснуть экземпляр в ваш объект с помощью

@EJB 
private UserManager userManager; 

Это будет работать только для управляемых контейнером объектов, как JSF управляемые компоненты, сервлеты или JSP-страницы. В качестве альтернативы вы можете найти ejb из jndi, используя что-то вроде

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

Фактическое имя jndi может отличаться.

Смежные вопросы