JPA 中的 NullPointerException [英] NullPointerException in JPA

查看:30
本文介绍了JPA 中的 NullPointerException的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用 jpa 创建一个 Java EE 应用程序.

在服务器上运行代码时出现以下错误

 [2/25/12 22:56:31:371 IST] 00000047 SystemOut O hello[2/25/12 22:56:31:375 IST] 00000047 SystemOut O 错误...:([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 在 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 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:738)[2/25/12 22:56:31:373 IST] 00000047 SystemErr R 在 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 行是:

//在UserBean.java中,包含一个无状态EJB的UserBean

 公共类 UserBean 实现 UserBeanInterface {/*** 默认构造函数.*/@PersistenceContext私有 EntityManager 管理器;公共用户豆(){}公共字符串身份验证(字符串名称){返回空;}公共字符串更改密码(){返回空;}公共字符串 setUserDetails(){返回空;}公共字符串 getUserDetails(){System.out.println("你好");尝试{41=>查询 query=manager.createQuery("from User");列表<用户>结果 = query.getResultList();如果(结果.大小()!= 0){迭代器<用户>stIterator=results.iterator();while(stIterator.hasNext()){用户 st=stIterator.next();System.out.print("用户ID:"+st.getUserId());System.out.print("类型:"+st.getUserType());System.out.print("详细信息:"+st.getUserProfile());}}别的{System.out.println("没有找到记录.");}}捕获(例外 e){e.printStackTrace();System.out.println("错误...:(");}返回嗨";}}

User 类,User 是从数据库表中自动生成的.数据库中有一个 USER 表.请帮助说明此错误的可能原因.

解决方案

Your EntityManager manager 是注入到客户端 UserBean 的无接口 Enterprise Java Bean.EJB 应该注入到生命周期由应用服务器管理的类中.

客户端必须是 Web 组件或另一个企业 bean.在您的情况下,客户端 UserBean 是一个 POJO(Plain Old Java Object).有关如何使用 EJB 的更多详细信息,请参阅此处.>

一个可能的简单解决方案是通过在类定义之前添加注释 javax.ejb.Stateless 使 UserBean 成为无状态会话 Bean.您最终应该使用 EJB 注释将 UserBean 注入到 ManagedBean 中.

I am creating a Java EE application using jpa.

I am getting the following error when the code is run on server

    [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)

Line no 41 in UserBean.java is :

//within UserBean.java, containing UserBean a stateless EJB

    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";

    }
    }

The User class, User has been generated automatically from the database tables. There is a USER table in the database. Please help on what the possible reason for this error could be.

解决方案

Your EntityManager manager is no-interface an Enterprise Java Bean injected in your client UserBean. EJBs should be injected in classes whose lifecycle is managed by the application server.

The client must be either a web component or another enterprise bean. In your case, the client UserBean is a POJO (Plain Old Java Object). See here for further details about how to use EJBs.

A possible simple solution is to make UserBean a Stateless Session Bean by adding the annotation javax.ejb.Stateless before the class definition. And you should eventually inject UserBean into your ManagedBean with the EJB annotation.

这篇关于JPA 中的 NullPointerException的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆