Como colocar na instância específica do escopo / contexto personalizado (JobScoped - escopo CDI personalizado) da solicitação para torná-la injetável?

Em poucas palavras, gostaria de colocar no escopo personalizado uma instância específica da classe Configuration a partir da solicitação de descanso. O principal problema é que o escopo personalizado (JobScoped from JBerethttps://jberet.gitbooks.io/jberet-user-guide/content/custom_cdi_scopes/index.html) é elegível após o início do trabalho. Eu sei que existe a possibilidade de adicionar propriedades ao iniciar o trabalho, mas minha classe Configuration agrega muitas configurações e é bastante complicado, portanto, seria muito desconfortável converter esses arquivos na classe Properties.

Detalhes abaixo:

Este é o pseudocódigo da solicitação de descanso:

@Path("/job")
public class RunJob {

@POST
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Path("/start")
public String startJob(@FormDataParam("file") InputStream uploadedInputStream) {
    JobOperatorImpl jobOperator = (JobOperatorImpl) BatchRuntime.getJobOperator();

    Configuration config = new Configuration(uploadedInputStream);
    Properties properties = new Properties();
    jobOperator.start(job, properties);
}

O que eu queria alcançar é injetar alguns arquivos de configuração no contexto do Job, como abaixo:

public class MyReader implements ItemReader {

@Inject
private Configuration configFile;
}

A classe de configuração apresenta como abaixo:

@JobScoped
public class Configuration {
 // some flags, methods etc
}

Eu li sobre Instance, Provider, mas não sei como usá-los no meu caso. Na verdade, acho que é impossível usá-los porque os trabalhos são identificados pelo nome, que é dinâmico e conhecido em tempo de execução.

Enquanto isso, encontrei uma situação semelhante à minha:Posso criar um objeto com escopo de solicitação e acessá-lo de qualquer lugar e evitar transmiti-lo como um parâmetro no JAX-RS?

Mas ocorre um problema com o contexto ausente. Quando o trabalho é iniciado, há um contexto JobScoped. De acordo com a solução acima, eu havia anotado a Configuração como RequestScoped e recebi:

org.jboss.weld.context.ContextNotActiveException: WELD-001303: Nenhum contexto ativo para o tipo de escopo javax.enterprise.context.RequestScoped em org.jboss.weld.manager.BeanManagerImpl.getContext (BeanManagerImpl.java:689) em org.jboss .weld.bean.ContextualInstanceStrategy $ DefaultContextualInstanceStrategy.getIfExists (ContextualInstanceStrategy.java:90) em org.jboss.weld.bean.ContextualInstanceStrategy $ CachingContextualInstanceStrategy.getIfava.conf .: (ContextualInstance.java:63) em org.jboss.weld.bean.proxy.ContextBeanInstance.getInstance (ContextBeanInstance.java:83) em org.jboss.weld.bean.proxy.ProxyMethodHandler.getInstance (ProxyMethodHandler.java:5): $ Proxy $ _ $ _ WeldClientProxy.toString (origem desconhecida)

questionAnswers(3)

yourAnswerToTheQuestion