如何从CDI

时间:2016-10-27 10:01:39

标签: java-ee jboss cdi

我有一个类在我的休息服务中作为类生成器执行,这样做:

public class WebResources{


    @Produces
    @RequestScoped
    public FacesContext produceFacesContext() {
        return FacesContext.getCurrentInstance();
    }

    @Produces
    public Logger produceLog(InjectionPoint injectionPoint) {
        return Logger.getLogger(injectionPoint.getMember().getDeclaringClass().getName());
    }   
}

现在我希望通过使用HttpServletRequest或HttpSession作为参数来生成我的对象。像这样:

@Produces
@RequestScoped
public MyObject getSecurityContext(InjectionPoint injectionPoint)
{
    HttpServletRequest request = (HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest();
    return Utils.getMyObject(request);
}

我在部署阶段收到的错误如下:

  

错误[org.jboss.as.cli.CommandContext] {“JBAS014671:失败的服务”=> {“jboss.deployment.unit。\”zuora.ear \“。WeldStartService”=> “服务jboss.deployment.unit。”中的org.jboss.msc.service.StartException。\“zuora.ear \”。WeldStartService:无法启动服务       引起:org.jboss.weld.exceptions.DefinitionException:WELD-001406无法注入[方法]的@ [参数1] @Produces @RequestScoped public it.infocert.zuora.rest.util.WebResources.getSecurityContext(InjectionPoint)in non @Dependent scoped bean“}}   {“JBAS014671:失败的服务”=> {“jboss.deployment.unit。\”zuora.ear \“。WeldStartService”=> “服务jboss.deployment.unit。”中的org.jboss.msc.service.StartException。\“zuora.ear \”。WeldStartService:无法启动服务       引起:org.jboss.weld.exceptions.DefinitionException:WELD-001406无法注入[方法]的@ [参数1] @Produces @RequestScoped public it.info

1 个答案:

答案 0 :(得分:1)

您应该从方法签名中删除InjectionPoint参数。如果要生成请求范围的bean,则不能是InjectionPoint,因为多个注入点将获得相同的(请求范围的)实例。您没有在代码中使用注入点,因此可以安全地删除它。