问题标签 [jberet]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
cdi - 批处理作业完成之前的范围冲突?
技术栈:
- JBeret (core, se) 1.3.0.Final
- Hibernate Search (orm, jsr352-core, jsr352-jberet) 5.10.4.Final
- Weld (servlet-core, se-core) 3.0.5.Final
如果我触发
BatchRuntime.getJobOperator().start(
MassIndexingJob.NAME,
MassIndexingJob.parameters().forEntity(getDomainObjectClass()).build()
);
然后我遇到了在批处理作业完成之前无法访问批处理作业之外RequestScoped
的任何CDI 组件的情况SessionScoped
。
我该如何解决这个问题?
堆栈跟踪的一部分
注释@ActivateRequestContext
在启动/部署时生成此堆栈跟踪
java - 具有可重试和可跳过异常的 jsr 352 批处理可能会多次处理项目
我有一个用 JSR-352 实现的批处理(在 wildfly 上使用 jberet)。
我有一个项目计数为 15 的块,java.lang.Exception
并被配置为可重试和可跳过的异常。
当有很多异常时,大多数项目将被多次处理。在这种极端情况下,所有项目都会在 writer 中引发异常:
- 前 15 项已阅读
- 第一项发生异常
- 块被回滚并配置为 item-count = 1
- 第一项已读
- 再次出现异常,项目被跳过
- 继续其他14项,每一项都可能出现异常,每一项都被跳过
- 在前 15 个项目之后,块返回 item-count = 15
- 阅读第 16-30 项
- 再次出现异常
- 阅读器回滚到最新的检查点
此时仍然没有检查点,因为还没有成功处理过的项目。因此,读者再次从第一项开始。所有 30 个项目都以 item-count = 1 处理,等等。
如果有很多这样的失败,批处理将一次又一次地处理所有项目。
我认为还需要为跳过的项目设置检查点,因为不应再次处理跳过的项目。
我认为这是规范中的一个错误,所以我已经在那里打开了一个问题:https ://github.com/WASdev/standards.jsr352.batch-spec/issues/15 或者我错了并且误解了实现?
这是如何在 Spring Batch 中实现的?
java - Java Batch API:用于处理从 ItemReader.open() 抛出的异常的侦听器
是否有任何可以实现的侦听器接口来处理ItemReader.open()
方法抛出的异常?有很多监听器接口,但似乎没有一个适合这个。即ItemReadListener
仅捕获来自ItemReader.readItem()
(类似于ChunkListener
或ItemProcessListener
等)的异常
有JobListener
和StepListener
接口,但这两个没有定义在异常情况下将被调用的方法。
有什么办法可以做到这一点?
java - 将批处理数据存储在 NoSQL 数据库中,而不是 WildFly 上 Jberet 中的文件系统中
我正在 Java EE 平台上开发一个批处理应用程序,其中 Jberet(jsr-352 实现)用于 WildFly 应用程序服务器。Jberet 默认将所有批处理数据以 XML 格式存储在本地文件系统(独立/数据下)中。这正在使用 jberet-rest 组件显示在 jberet-ui 上。我们有一个要求,我们希望将此批处理数据存储在 NoSQL 数据库(例如 mongodb 或 DynamoDB)而不是文件系统中。实现这一点的最佳方法是什么?
java - CDI 在 jberet 实现下无法与 Java EE Batch 一起使用
我在 WildFly 应用服务器上部署了一个使用 jberet 实现的 Java EE 批处理应用程序。此应用程序还公开了一个 REST API 以按需触发作业。
我有以下类创建要注入的bean:
在 REST api 中注入上述 bean 可以正常工作:
但是,在 ItemReader 中使用相同的 bean 会引发空指针异常,但是注入 JobContext 可以正常工作:
我在 src/main/resources/META-INF 下的 beans.xml:
src/main/resources/META-INF/batch-jobs/myjob.xml 下的作业文件:
src/main/resources/META-INF/batch.xml 下的批处理工件文件
我的 pom.xml 如下所示:
我尝试了@Produce、@JobScoped (org.jberet.cdi.JobScoped) 的各种组合以及使用@JobScoped、@Default 和@ApplicationScoped 注入带注释的类,但都产生相同的结果(使用注入对象时出现 NullPointerException)。
我错过了什么?
jsr352 - jBeret + Weld SE - 从 Batchlet 注入托管 bean
我正在尝试使 CDI 在 JBeret SE 上工作。这是我的代码:
SampleBatchlet 类
SampleBatchletTest 类
服务器类
LoggerProducer 类
问题是 Logger 实例未在 SampleBatchlet 上注入,而在上面的测试和服务器类中正确注入。
有什么提示吗?
小更新
通过阅读此参考资料
https://jberet.gitbooks.io/jberet-user-guide/content/batch_properties/
我发现 java.util.logging.Logger 可以被注入。
因此我添加了
价值实际上可以是任何东西..
在 SampleBatchlet 上我添加了
现在它被注入了。顺便说一句,我有点困惑,因为我希望使用另一个记录器实现..
java - JBeret 和 JSR352,关于重启和持久数据的一些说明
我目前正在使用JBeret作为JSR 352规范的批处理实现。
首要问题
我正在尝试复制处理器失败的块作业并存储重新启动位置,以便我可以从最后一个成功的索引重新启动。
这是阅读器类
这是处理器
作家_
现在我希望如果作业失败,它会设置JOB_EXECUTION。RESTART_POSITION列添加到从checkpointInfo返回的索引,但这不会发生。
因此,当我尝试从最后一个 id 重新启动作业时,检查点始终为空。
如何存储检查点以便从open方法中检索它?
第二期
在应用程序测试中,我经常看到从 stepContext 对象设置持久性用户数据(另见我的编写器实现)。这个的真正用途是什么?我真的可以用保存的数据做什么?
我还猜想,在处理数千条记录时,这种做法可能会导致严重的内存开销。
有什么提示吗?
java - 无法从 search.maven.org 下载工件
我正在尝试对这个项目进行全新安装
https://github.com/jberet/jberet-wildfly-samples
我被这个错误困住了:
无法解析项目 org.jberet.samples:clusterInfinispan:war:1.4.0.Alpha-SNAPSHOT 的依赖项:无法在 org.jberet:jberet-wildfly-cluster-infinispan:jar:1.3.0.Final 收集依赖项:失败读取 org.jberet:jberet-wildfly-cluster-infinispan:jar:1.3.0.Final 的工件描述符:未能找到 org.jberet:jberet-wildfly:pom:1.4.0.Alpha-SNAPSHOT
看来 artifactory 仅在search.maven.org上可用
我尝试执行强制更新 -U 并手动清理本地 repo 目录,但没有任何变化。我想知道我是否必须手动添加上面的 repo 或者应该自动在那里寻找
有什么提示吗?
java - Jberet,在 batchlet 上手动设置 writecount
我想知道是否可以在批处理上手动设置writecount属性,以便在STEP_EXECUTION.WRITECOUNT字段的表上记录结果。
这是我的伪代码
wildfly - Wildfly 用大帆船供应。缺少批次 (jberet)
我尝试使用带有 s2i 的 Galleon 构建一个最小的 Wildfly 发行版,到目前为止效果很好。但是现在我的应用程序缺少批处理的依赖项。
所以我尝试添加batch
,GALLEON_PROVISION_LAYERS
但似乎没有批处理层。
这是我简化的 s2i:
我只是错过了用户批处理的正确层还是我需要使用完整的野蝇?