0

我正在使用容器项目模式,我有:

存储用户的容器:

@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 工作正常,但在项目中返回 null。为什么?

我尝试在 getJson() 中返回其他内容,例如 id,并且没有问题。一切正常。但是当我使用 EJB 返回某些东西时,会出现空异常。

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

4

2 回答 2

1

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

return UserResource.getInstance(id);

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

于 2012-07-10T16:54:07.053 回答
0

我在UsersResource中添加:

@EJB
private UserResource userResource;

然后改变:

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

现在它可以工作了。谢谢 :)

于 2012-07-11T08:48:00.433 回答