【问题标题】:EntityManager not injectedEntityManager 未注入
【发布时间】:2010-08-28 10:15:03
【问题描述】:

我正在为我的 EntityManager 获取 NPE,但不知道为什么 - 谁能发现我的错误?

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 调用的,但不确定是否会有所作为。

提前致谢。

【问题讨论】:

  • 你在哪台服务器上运行?
  • 你在使用 JBoss 吗?使用 HSQLDB?你在服务器日志中得到了什么?
  • 带有 HSQLDB 的 JBoss,在服务器日志中看不到任何重要的信息。我怀疑这可能是因为我正在使用 new UserManagerImpl() 从我的 JSP 中引用 UserManager,但如果是这样,我不确定如何使用注释将其注入托管 bean。无论如何都不确定。

标签: java nullpointerexception entitymanager


【解决方案1】:

当您使用new UserManagerImpl() 时,容器无法将EntityManager 注入此类。您需要让容器使用

将实例注入到您的对象中
@EJB
private UserManager userManager;

这仅适用于容器管理的对象,如 JSF 管理的 bean、servlet 或 JSP。或者,您可以使用类似的方法从 jndi 查找 ejb

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

实际的 jndi 名称可能不同。

【讨论】:

    猜你喜欢
    • 2015-01-04
    • 2015-05-02
    • 1970-01-01
    • 2011-05-07
    • 1970-01-01
    • 2018-03-26
    • 1970-01-01
    • 1970-01-01
    • 2011-06-10
    相关资源
    最近更新 更多