1

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>

これらは私のejbjarプロジェクト内にあり、UserManagerImplはJSPから呼び出されますが、違いが生じるかどうかはわかりません。

前もって感謝します。

4

1 に答える 1

3

new UserManagerImpl()コンテナを使用している場合、EntityManagerこのクラスにを注入する方法はありません。を使用して、コンテナにインスタンスをオブジェクトに注入させる必要があります

@EJB
private UserManager userManager;

これは、JSF管理対象Bean、サーブレット、JSPなどのコンテナ管理対象オブジェクトに対してのみ機能します。または、次のようなものを使用してjndiからejbを検索できます。

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

実際のjndi名は異なる場合があります。

于 2010-08-28T12:11:07.690 に答える