2012-02-25 7 views
0

jpaを使用してJava EEアプリケーションを作成しています。コードがサーバー上で実行されたときに、私は次のエラーを取得していますJPAのNullPointerException

[2/25/12 22:56:31:371 IST] 00000047 SystemOut  O hello 
    [2/25/12 22:56:31:375 IST] 00000047 SystemOut  O Error...:(
    [2/25/12 22:56:31:371 IST] 00000047 SystemErr  R java.lang.NullPointerException 
    [2/25/12 22:56:31:371 IST] 00000047 SystemErr  R  at plh.service.ejb.UserBean.getUserDetails(UserBean.java:41) 
    [2/25/12 22:56:31:372 IST] 00000047 SystemErr  R  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    [2/25/12 22:56:31:372 IST] 00000047 SystemErr  R  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:45) 
    [2/25/12 22:56:31:372 IST] 00000047 SystemErr  R  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37) 
    [2/25/12 22:56:31:372 IST] 00000047 SystemErr  R  at java.lang.reflect.Method.invoke(Method.java:599) 
    [2/25/12 22:56:31:372 IST] 00000047 SystemErr  R  at com.ibm.etools.utc.model.ReflectionMethodModel.invoke(ReflectionMethodModel.java:65) 
    [2/25/12 22:56:31:372 IST] 00000047 SystemErr  R  at com.ibm.etools.utc.servlet.InvokeServlet.invoke(InvokeServlet.java:113) 
    [2/25/12 22:56:31:372 IST] 00000047 SystemErr  R  at com.ibm.etools.utc.servlet.InvokeServlet.doPost(InvokeServlet.java:374) 
    [2/25/12 22:56:31:373 IST] 00000047 SystemErr  R  at javax.servlet.http.HttpServlet.service(HttpServlet.java:738) 
    [2/25/12 22:56:31:373 IST] 00000047 SystemErr  R  at javax.servlet.http.HttpServlet.service(HttpServlet.java:831) 
    [2/25/12 22:56:31:373 IST] 00000047 SystemErr  R  at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1443) 
    [2/25/12 22:56:31:373 IST] 00000047 SystemErr  R  at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:790) 
    [2/25/12 22:56:31:373 IST] 00000047 SystemErr  R  at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:443) 
    [2/25/12 22:56:31:373 IST] 00000047 SystemErr  R  at com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:175) 
    [2/25/12 22:56:31:373 IST] 00000047 SystemErr  R  at com.ibm.ws.webcontainer.servlet.CacheServletWrapper.handleRequest(CacheServletWrapper.java:91) 
    [2/25/12 22:56:31:373 IST] 00000047 SystemErr  R  at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:859) 
    [2/25/12 22:56:31:374 IST] 00000047 SystemErr  R  at com.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.java:1557) 
    [2/25/12 22:56:31:374 IST] 00000047 SystemErr  R  at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:173) 
    [2/25/12 22:56:31:374 IST] 00000047 SystemErr  R  at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:455) 
    [2/25/12 22:56:31:374 IST] 00000047 SystemErr  R  at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewInformation(HttpInboundLink.java:384) 
    [2/25/12 22:56:31:374 IST] 00000047 SystemErr  R  at com.ibm.ws.http.channel.inbound.impl.HttpICLReadCallback.complete(HttpICLReadCallback.java:83) 
    [2/25/12 22:56:31:374 IST] 00000047 SystemErr  R  at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:165) 
    [2/25/12 22:56:31:374 IST] 00000047 SystemErr  R  at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217) 
    [2/25/12 22:56:31:374 IST] 00000047 SystemErr  R  at com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161) 
    [2/25/12 22:56:31:375 IST] 00000047 SystemErr  R  at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:138) 
    [2/25/12 22:56:31:375 IST] 00000047 SystemErr  R  at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:202) 
    [2/25/12 22:56:31:375 IST] 00000047 SystemErr  R  at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:766) 
    [2/25/12 22:56:31:375 IST] 00000047 SystemErr  R  at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:896) 
    [2/25/12 22:56:31:375 IST] 00000047 SystemErr  R  at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1527) 

ラインUserBean.javaには41ではありません:ステートレスEJB

UserBeanの含む

// UserBean.java内で、

public class UserBean implements UserBeanInterface { 

     /** 
     * Default constructor. 
     */ 
@PersistenceContext 
    private EntityManager manager; 

public UserBean() { 
} 
public String authenticate(String name){ 
    return null; 
} 
public String changePassword(){ 
    return null; 
} 
public String setUserDetails(){ 
    return null; 
} 
public String getUserDetails(){ 
    System.out.println("hello"); 
    try{ 
41=> Query query=manager.createQuery("from User"); 

     List<User> results = query.getResultList(); 

     if(results.size()!=0){ 
      Iterator<User> stIterator=results.iterator(); 
      while(stIterator.hasNext()){ 
       User st=stIterator.next(); 
       System.out.print("User Id:"+st.getUserId()); 
       System.out.print("Type:"+st.getUserType()); 
       System.out.print("Detail:"+st.getUserProfile()); 
      } 
     } 
     else 
     { 
      System.out.println("Record not found."); 
     } 
    } 
    catch(Exception e) 
    { 
     e.printStackTrace(); 
     System.out.println("Error...:("); 
    } 
    return "hi"; 

    } 
    } 

UserクラスUserは、データベーステーブルから自動的に生成されました。データベースにUSERテーブルがあります。このエラーが発生する可能性がある原因を教えてください。

+0

クラス全体(特に 'manager'プロパティ)を表示してください。 –

+1

マネージャがヌルになる可能性のある唯一のものです。どのようにして永続性マネージャにアクセスできますか? – proflux

+0

@nico_ekito私はUserBeanクラス全体を追加しました... pls help ... – nkvp

答えて

5

お客様のEntityManagermanagerは、エンタープライズJavaBeanがクライアントUserBeanに挿入されていないインタフェースです。 EJBは、ライフサイクルがアプリケーションサーバーによって管理されるクラスに注入する必要があります。

クライアントは、Webコンポーネントまたは別のエンタープライズBeanのいずれかでなければなりません。あなたの場合、クライアントUserBeanはPOJO(Plain Old Java Object)です。 EJBの使用方法の詳細については、hereを参照してください。

可能な単純な解決策は、クラス定義の前に注釈javax.ejb.Statelessを追加することによって、UserBeanをStateless Session Beanにすることです。また、EJBアノテーションを使用して最終的にManBeanにUserBeanを挿入する必要があります。

+0

ok ...しかし、私は完全にそれを取得しないでください。 javax.persistence.EntityManagerをどのように注入するのですか? – nkvp

+1

可能な単純な解決策は、クラス定義の前に注釈javax.ejb.Statelessを追加することによって、UserBeanInterfaceをステートレスセッションBeanにすることです。そして最後に、UserBeanInterfaceをManagedBeanにEJBアノテーションとともに挿入する必要があります。 – perissf

+0

インターフェイスをステートレスセッションBeanにする方法 – nkvp

1

エンティティマネージャを含むクラスのオブジェクトを作成する前に@ EJBアノテーションを必ず書きます。 nullポインタ例外の理由は、entitymanagerが初期化されていないためです。 @EJBアノテーションはそれを行います。

あなたの場合、ユーザークラスのオブジェクトを宣言するクラス @EJBを上にしてください。これは問題を解決するはずです。

+0

これは古い投稿です。私は上記の答えを使用してそれを長い間解決しました。とにかく、投稿していただきありがとうございます。 – nkvp