为了账号安全,请及时绑定邮箱和手机立即绑定

将EJB注入JAX-RS(RESTful服务)

将EJB注入JAX-RS(RESTful服务)

30秒到达战场 2019-07-22 19:07:21
将EJB注入JAX-RS(RESTful服务)我在试着注射无状态EJB通过注释进入我的JAX-RS Web服务。不幸的是,EJB只是null我得到了一个NullPointerException当我试着用它的时候。@Path("book")public class BookResource {     @EJB     private BookEJB bookEJB;     public BookResource() {     }     @GET     @Produces("application/xml")     @Path("/{bookId}")     public Book getBookById(@PathParam("bookId") Integer id)     {         return bookEJB.findById(id);     }}我做错什么了?以下是有关我的机器的一些信息:玻璃鱼3.1NetBeans 6.9 RC 2JavaEE 6你们能给我举几个例子吗?
查看完整描述

3 回答

?
慕婉清6462132

TA贡献1804条经验 获得超2个赞

您将能够在JAX-RS资源中进行注入,而无需使其成为EJB或CDI组件。但是你必须记住,你的JAX-RS资源不能是单一的。

因此,您使用以下代码设置应用程序。这使得图书资源班级,等级按要求Jax-RS资源。

@javax.ws.rs.ApplicationPath("application")public class InjectionApplication extends javax.ws.rs.core.Application {
  private Set<Object> singletons = new HashSet<Object>();
  private Set<Class<?>> classes = new HashSet<Class<?>>();

  public InjectionApplication() {
    // no instance is created, just class is listed
    classes.add(BookResource.class);
  }

  @Override
  public Set<Class<?>> getClasses() {
    return classes;
  }

  @Override
  public Set<Object> getSingletons() {
    return singletons;
  }}

通过这个设置,您可以让jax-rs实例化。图书资源为您在每个请求的基础上,也注入所有所需的依赖关系。如果你图书资源班级,等级辛格尔顿Jax-RS资源,这是,你输入getSingletons

public Set<Object> getSingletons() {
  singletons.add(new BookResource());
  return singletons;}

然后,您创建了不是由JAX-RS运行时管理的实例,容器中没有人关心注入任何内容。


查看完整回答
反对 回复 2019-07-22
  • 3 回答
  • 0 关注
  • 487 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信