例如,我们有一些带有子资源的java-ws结构:
@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和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参数,然后通过构造函数参数将其传递给A和B,而不是在A和B的每个方法中都使用它。但是Java EE教程说我应该对EJB服务类使用无状态EJB。
发布于 2014-06-27 14:48:17
首先,永远不要自己构造EJBs您手头有一个容器,负责组件的生命周期。
其次,由于我假设您至少使用JavaEE6,因此对组件使用通用的@Inject。
第三,您不必使用EJB,它也可以是CDI组件或普通的POJO。
最后,我不明白,为什么在Root中有一个用于类A和B的getter?@Path注释也可以在类声明本身上。
https://stackoverflow.com/questions/24429556
复制相似问题