我正在使用容器项目模式,我有:
用于存储用户的容器:
@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();
}
}
和bean。它只有一种方法:
@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工作正常,但在item中返回null。为什么?
我试图在getJson()中返回其他内容,例如id,并且没有问题。一切都很好。但是当我使用EJB返回一些东西时,会出现null异常。
应用程序在jboss 7上部署没有任何问题。
答案 0 :(得分:1)
这是因为你自己创建了UserResource的实例:
return UserResource.getInstance(id);
因为它不是由容器通过JNDI查找或注入创建的,所以它不是容器管理的。依赖注入只能在容器管理的组件中进行。
答案 1 :(得分:0)
我在UsersResource中添加了:
@EJB
private UserResource userResource;
然后改变了:
@Path("{id}")
public UserResource getUserResource(@PathParam("id") String id) {
return userResource;
}
现在它有效。谢谢:))