【发布时间】:2016-11-18 15:01:04
【问题描述】:
简而言之,我想从休息请求中放入配置类的自定义范围特定实例。 主要问题是自定义范围(来自 JBeret https://jberet.gitbooks.io/jberet-user-guide/content/custom_cdi_scopes/index.html 的 JobScoped)在工作开始后是合格的。 我知道在开始工作时可以添加属性,但是我的 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);
}
我想要实现的是在 Job 的上下文中注入一些配置文件,如下所示:
public class MyReader implements ItemReader {
@Inject
private Configuration configFile;
}
配置类如下所示:
@JobScoped
public class Configuration {
// some flags, methods etc
}
我已经阅读过关于 Instance, Provider 但不知道如何在我的情况下使用它们。 事实上,我认为不可能使用它们,因为工作是由他们的名字来识别的,这是动态的 并且在运行时已知。
同时我发现了与我类似的情况: Can I create a request-scoped object and access it from anywhere, and avoid passing it around as a parameter in JAX-RS?
但随后会出现缺少上下文的问题。当 Job 启动时,会有 JobScoped 上下文。 根据上述解决方案,我将 Configuration 注释为 RequestScoped,然后我收到:
org.jboss.weld.context.ContextNotActiveException: WELD-001303: 否 范围类型 javax.enterprise.context.RequestScoped 的活动上下文 在 org.jboss.weld.manager.BeanManagerImpl.getContext(BeanManagerImpl.java:689) 在 org.jboss.weld.bean.ContextualInstanceStrategy$DefaultContextualInstanceStrategy.getIfExists(ContextualInstanceStrategy.java:90) 在 org.jboss.weld.bean.ContextualInstanceStrategy$CachingContextualInstanceStrategy.getIfExists(ContextualInstanceStrategy.java:165) 在 org.jboss.weld.bean.ContextualInstance.getIfExists(ContextualInstance.java:63) 在 org.jboss.weld.bean.proxy.ContextBeanInstance.getInstance(ContextBeanInstance.java:83) 在 org.jboss.weld.bean.proxy.ProxyMethodHandler.getInstance(ProxyMethodHandler.java:125) 配置$Proxy$_$$_WeldClientProxy.toString(Unknown Source)
【问题讨论】:
-
我真的不知道批处理 api 是如何工作的,但你不能把你的配置放在你传递给操作员的属性中吗?属性可以包含字符串 (getProperty/setProperty) 或对象 (get/put)。
-
感谢“或对象(获取/放置)”。这不是我想要的,但似乎别无选择。
标签: jakarta-ee jax-rs cdi java-batch jberet