首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在java ee 6框架中持久化JAX服务中的数据?

如何在java ee 6框架中持久化JAX服务中的数据?
EN

Stack Overflow用户
提问于 2013-09-27 11:45:36
回答 2查看 660关注 0票数 0

我在java 6框架中有一个J2EE项目。使用EJB和War模块。我想在EJB模块中添加一个服务来操作数据库中的一些数据,所以我需要访问Service方法中的DAO方法。但它还错了!

代码语言:javascript
复制
@WebService(serviceName = "AddUserService")
@Stateless()
public class AddUserService {
   @PersistenceContext(unitName = "UserRegistrationService-ejbPU")
    EntityManager em;

    @WebMethod(operationName = "registerUser")
    public String registerUser(BasicUserInfo basicUserInfo) {
        UserEJB userEJB=new UserEJB(em);
        String retValue = "";
        User user = new User();
        user.setAge(basicUserInfo.getAge());
        user.setUserName(userName);
        userEJB.addUser(user);
        retValue = " User Registered with user_ID:" + user.getId().toString() + "  and userName:" + user.getUserName();
        return retValue;
    }
}

EJB类代码是:

代码语言:javascript
复制
    @TransactionManagement(TransactionManagementType.CONTAINER)
@Stateless
public class UserEJB {

    @PersistenceContext(unitName = "UserRegistrationService-ejbPU")
    EntityManager em;

    public UserEJB() {
    }

    public UserEJB(EntityManager em) {
        this.em = em;
    }

    public void addUser(User user) {
        em.persist(user);
    }
}

在服务器上测试服务时会出现以下错误:

代码语言:javascript
复制
        at java.lang.Thread.run(Thread.java:619)
Caused by: java.lang.NullPointerException
    at dao.UserEJB.addUser(UserEJB.java:34)
    at app.Services.AddUserService.registerUser2(AddUserService.java:60)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.glassfish.ejb.security.application.EJBSecurityManager.runMethod(EJBSecurityManager.java:1052)
    at org.glassfish.ejb.security.application.EJBSecurityManager.invoke(EJBSecurityManager.java:1124)
    at com.sun.ejb.containers.BaseContainer.invokeBeanMethod(BaseContainer.java:5388)
    at com.sun.ejb.EjbInvocation.invokeBeanMethod(EjbInvocation.java:619)
    at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:800)
    at com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:571)
    at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.doAround(SystemInterceptorProxy.java:162)
    at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.aroundInvoke(SystemInterceptorProxy.java:144)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at com.sun.ejb.containers.interceptors.AroundInvokeInterceptor.intercept(InterceptorManager.java:861)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-27 15:02:04

您的EntityManger不会被容器注入,因为您已经自己创建了UserEJB对象!你打破了注射链。在使用DI时,必须让容器为您创建对象。试着这样做:

代码语言:javascript
复制
@WebService(serviceName = "AddUserService")
@Stateless()
public class AddUserService {

    //actually you don't need this here, you'll get that injected inside the UserEJB
    @PersistenceContext(unitName = "UserRegistrationService-ejbPU")
    EntityManager em;


    @Inject
    UserEJB userEjb;

    @WebMethod(operationName = "registerUser")
    public String registerUser(BasicUserInfo basicUserInfo) {
        //you don't need this line, the container will instantiate the object for you!
        //UserEJB userEJB=new UserEJB(em);
        String retValue = "";
        User user = new User();
        user.setAge(basicUserInfo.getAge());
        user.setUserName(userName);
        userEJB.addUser(user);
        retValue = " User Registered with user_ID:" + user.getId().toString() + "  and         userName:" + user.getUserName();
        return retValue;
    }
}
票数 1
EN

Stack Overflow用户

发布于 2013-09-27 12:03:15

错误发生在第34行的类UserEJB.java中,因此请将该代码发布。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19049951

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档