EntityManager не вводится - PullRequest
       10

EntityManager не вводится

1 голос
/ 28 августа 2010

Я получаю 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, но не уверен, что это должно иметь значение.

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

1 Ответ

3 голосов
/ 28 августа 2010

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

@EJB
private UserManager userManager;

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

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

Фактическое имя jndi может быть другим.

...