RESTful容器项模式-项ejb返回null



我使用的是一个容器项目模式,我有:

容器用于存储用户:

@Path("/user")
@Stateless
public class UsersResource {
@Context
private UriInfo context;
@EJB
private UserBeanLocal userBean;
public UsersResource() {
}
@GET
@Produces("application/json")
public String getJson(@HeaderParam("authorization") String authorization) {
   return userBean.sampleJSON();
}
@Path("{id}")
public UserResource getUserResource(@PathParam("id") String id) {
    return UserResource.getInstance(id);
}
}

表示单个用户的项目

@Stateless
public class UserResource {
@EJB
private UserBeanLocal userBean;
private String id;
public UserResource() {
}
private UserResource(String id) {
    this.id = id;
}
public static UserResource getInstance(String id) {
    return new UserResource(id);
}
@GET
@Produces("application/json")
public String getJson() {
    //TODO return proper representation object
    return userBean.sampleJSON();
}
}

还有豆子它只有一种方法:

@Local
public interface UserBeanLocal {
String sampleJSON();
}
@Stateless
public class UserBean implements UserBeanLocal {
@Override
public String sampleJSON() {
    return "{"Name": "Jan", "Lastname": "Węglarz", "PESEL": "47092412341"}";
} 
}

容器中的EJB工作正常,但项中的EJB返回null。为什么

我已经尝试在getJson()中返回其他东西,例如id,但没有问题。一切都很好。但当我使用EJB返回一些东西时,会出现null异常。

应用程序部署在jboss 7上没有任何问题。

这是因为您正在自己创建UserResource的实例:

return UserResource.getInstance(id);

因为它不是由容器通过JNDI查找或注入创建的,所以它不是容器管理的。依赖项注入只能在容器管理的组件中进行。

我在用户资源:中添加

@EJB
private UserResource userResource;

然后更改:

@Path("{id}")
public UserResource getUserResource(@PathParam("id") String id) {
    return userResource;
}

现在它起作用了。感谢:)

最新更新