Java-WS RS资源结构

时间:2014-06-26 11:39:33

标签: java rest java-ee jersey ejb

例如,我们有一些带有子资源的java-ws rs结构:

@Stateless
@Path("/rootpath/")
class Root {

  @Path("/A")
  public A getA {
  ...
  }

  @Path("/B")
  public B getB {
  ...
  }
}

@Stateless  
@LocalBean  
class A {

  @GET
  @Path("/getAStuff")
  public String getAStuff(
      @QueryParam("p") callback: String) {
    return "A stuff";
  }

  @GET
  @Path("/getAnotherAStuff")
  public String getOtherStuff(
      @QueryParam("p") callback: String) {
    return "A stuff";
  }

}

@Stateless 
@LocalBean  
class B {

  @GET
  @Path("/getBStuff")
  public String getBStuff(
      @QueryParam("p") callback: String) {
    return "B stuff";
  } 

}

这种结构在实际(更广泛和更深)中要复杂得多。问题是 - getA& amp;的最佳方法是什么? getB实现?

我可以这样做:

public A getA {
    return new A();
}

或者我可以使用EJB:

@EJB
A a;

public A getA {
    return a;
}

或那样:

@Context
private ResourceContext resourceContext;

public A getA {
    A a = resourceContext.getResource(A.class);
    return a;
}

第一种方式让我有可能在Root类中读取p param,然后通过构造函数参数将其传递给A和B,而不在A和B的每个方法中使用它。但Java EE教程说我应该使用无状态EJB进行Web服务类。

1 个答案:

答案 0 :(得分:1)

首先,永远不要自己构建EJB - 您手头有一个容器,它负责组件的生命周期。

其次,由于我假设您至少使用Java EE 6,因此对组件使用通用的@Inject

第三,您不必使用EJB,它也可以是CDI组件或普通POJO。

最后,我不明白,为什么你会在A中为课程BRoot吸引人? @Path注释也可以在您的类声明本身上。