如何在其余的Web服务java上注入Application scope bean

时间:2015-02-03 20:53:37

标签: java rest java-ee jax-rs

我必须在ContextCacheRefresh Web服务上注入initApplicationContext bean,但是不成功的initApplicationContext值总是为null。有没有人知道如何处理它?<​​/ p>

@ManagedBean(name = "initApplicationContext", eager = true)
@ApplicationScoped
   public class InitApplicationContext {
             .......................
               }

和网络服务

  @Path("/serviceContext")
  public class ContextCacheRefresh  {

   @ManagedProperty(value = "#{initApplicationContext}")
    private  InitApplicationContext initApplicationContext;

  @GET
  @Path("/refreshContext")

 public Response refreshUserListOn(@QueryParam("param") String param
  ) { ......

1 个答案:

答案 0 :(得分:2)

使用@ManagedProperty,您无法让JSF将资源注入非JSF上下文。你的选择是

  1. 转换托管bean以使用CDI注释(@Named来声明托管bean和@Inject,而不是您现在正在使用的JSF注释。

    < / LI>
  2. 使用以下命令从普通的servlet上下文中提取bean:

    //inject the servlet context
    @javax.ws.rs.core.Context 
    ServletContext servletContext
    
    public InitApplicationContext getInitContext(){
        return (InitApplicationContext)servletContext.getAttribute("initApplicationContext");
    }
    

  3. 你正在努力的事情对我来说似乎有点狡猾。为什么您的Web应用程序首先关注您的RESTful端点?