Как поместить в настраиваемую область / контекст (JobScoped - настраиваемую область CDI) конкретный экземпляр из запроса, чтобы сделать его инъекционным?
Говоря в двух словах, я бы хотел добавить в пользовательскую область конкретный экземпляр класса Configuration из запроса rest. Основная проблема заключается в том, что пользовательская область (JobScoped от JBerethttps://jberet.gitbooks.io/jberet-user-guide/content/custom_cdi_scopes/index.html) имеет право после начала работы. Я знаю, что есть возможность добавлять свойства при запуске задания, но мой класс Configuration объединяет множество конфигураций, и это довольно сложно, поэтому было бы очень неудобно преобразовывать эти файлы в класс Properties.
Подробности ниже:
Это псевдокод запроса на отдых:
@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);
}
Чего я хотел добиться, так это внедрить некоторые файлы конфигурации в контексте задания, как показано ниже:
public class MyReader implements ItemReader {
@Inject
private Configuration configFile;
}
Класс конфигурации представлен как ниже:
@JobScoped
public class Configuration {
// some flags, methods etc
}
Я читал об Instance, Provider, но не знаю, как использовать их в моем случае. На самом деле я думаю, что их невозможно использовать, потому что задания идентифицируются по их имени, которое является динамическим и известным во время выполнения.
Между тем я нашел похожую ситуацию с моей:Могу ли я создать объект в области запроса и получить к нему доступ из любого места и избежать его передачи в качестве параметра в JAX-RS?
Но тогда возникает проблема с отсутствующим контекстом. Когда Job запускается, существует контекст JobScoped. В соответствии с вышеупомянутым решением, я отметил конфигурацию как RequestScoped, затем я получил:
org.jboss.weld.context.ContextNotActiveException: WELD-001303: нет активных контекстов для типа области видимости javax.enterprise.context.RequestScoped в org.jboss.weld.manager.BeanManagerImpl.get.text (BeanManagerImpl) 9 , (ContextualInstance.java:63) в org.jboss.weld.bean.proxy.ContextBeanInstance.getInstance (ContextBeanInstance.java:83) в org.jboss.weld.bean.proxy.ProxyMethodHandler.get.stj (ProxyMethodH) $ Proxy $ _ $ _ WeldClientProxy.toString (неизвестный источник)