问题标签 [jsr352]

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.

0 投票
1 回答
1084 浏览

java - itemreader 和 itemwriter 中的打开和关闭方法是在 jsr-352 java 批处理作业中打开和关闭数据库连接的正确位置吗?

itemreader 和 itemwriter 中的打开和关闭方法是在 jsr-352 java 批处理作业中打开和关闭数据库连接的正确位置吗?我在规范中找不到何时调用这两种方法,尤其是在特殊情况下

0 投票
0 回答
74 浏览

websphere-liberty - 如何检索 IBM JSR 352 JSL 的决策 ID

我在 Liberty Profile 服务器下运行 IBM JSR 352 批处理作业。我的 JSL 包含决定,例如

我试图从决策者/批处理中检索决策的 ID,但没有运气。它不在 JobContext 或 StepContext 内。有大佬知道怎么找回吗?非常感谢!

0 投票
1 回答
71 浏览

java - JSR352 - 单项读取,多项写入

在我正在处理的一个项目中,我们正在读取一个文件,其中读取的每个项目(一条记录)都代表要写入目标数据库的可变数量的项目。这显然似乎打破了 JSR352 的模式,将单个块膨胀得比预期的要多。

有没有人遇到过这种问题?如果是,它是如何解决的?

0 投票
1 回答
126 浏览

control-m - JSR352 批处理作业的设计:几个步骤比一个大批处理更好吗?

我的 JSR352 批处理作业需要从数据库中读取,然后根据结果流向两个路径之一,每个路径都涉及更多 if/else 场景。我想知道用大批处理编写单个步骤和由较小批处理组成的几个步骤之间的利弊是什么。该作业不涉及块大小大于 1 的块步骤,因为它需要立即持久化读取结果以防万一,然后再继续执行其他逻辑。该作业将使用 Control-M 运行,我想知道使用多个较小的步骤是否会提供更多控制点。

0 投票
1 回答
260 浏览

java - Java 批量重启不处理步骤

重新启动作业时,不执行批处理,即process()不调用批处理的方法。

有人有一些提示为什么重新启动不执行任何批处理。我已经尝试了几乎所有组合,但没有进行任何更改以使重新启动正常工作。

重新启动这样 () 不会带来错误 - 但是会成功终止而不调用任何批处理process()方法。

我将 wildfly-13.0.0.Final 与 jBeret 一起使用。

我有一个带有这个 jox.xml 定义的简单 java 批处理作业。被调用的批处理当前除了返回状态之外什么都不做。

bachlets 的返回值为:

  • 下载...已完成
  • 进程...已停止
  • 通知...已完成

开始这项工作时,jobOperator.start()一切都按预期工作。

当重新启动 STOPPED 作业执行时jobOperator.restart(),作业被执行,但没有调用 batchlet。

批处理看起来像这样

0 投票
1 回答
444 浏览

websphere - 如何授权 Java Batch 作业以便它可以从 WebSphere Liberty 中的启动 bean 运行?

我正在尝试从我的启动 bean 中提交一个基本的批处理作业,这给了我一条错误消息“用户未经授权的用户无权启动批处理作业”。

这是我的启动 bean:

在我的 server.xml 中,我配置了用户名和密码:

如何正确进行身份验证,以便我的作业可以由启动 bean 运行?

0 投票
1 回答
445 浏览

java - Java 批处理:如何以编程方式确定您正在运行哪个分区?

JSR-352批处理中,我想使用分区。我可以通过配置来定义分区的数量,或者实现一个PartitionMapper来做到这一点。

然后,有JobContextStepContext可注入 为我的处理提供上下文信息。但是,没有PartitionContext或类似的东西可以维护并提供有关我正在运行的分区的详细信息。

因此问题是:

如何告诉块的每个分区实例它在哪个分区中运行,以便它ItemReader只能读取属于该特定分区的那些项目?

如果我不这样做,每个分区将对相同的数据执行相同的工作,而不是将输入数据集拆分为n不同的分区。

我知道我可以在分区计划的属性中存储一些 ID,然后我可以使用这些 ID 在步骤的配置中设置另一个属性,例如<property name="partitionId" value="#{partitionPlan['partitionId']}" />. 但这似乎过于复杂和脆弱,因为我必须从分区计划中知道属性的名称,并且必须记住在每个步骤中始终将另一个属性设置为该值。

难道没有另一种干净的标准方法来为步骤提供分区信息吗?

或者,我应该如何按分区拆分工作并将其分配给ItemReader同一分区块中的不同实例?

更新:

jberet 似乎具有org.jberet.cdi.PartitionScoped CDI 范围,但它不是 JSR 标准的一部分。

0 投票
1 回答
208 浏览

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在启动/部署时生成此堆栈跟踪

0 投票
1 回答
709 浏览

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 中实现的?

0 投票
2 回答
968 浏览

java - 动态配置 dev 和 prod 数据源以根据环境加载

我正在使用自由服务器运行 java 批处理(jsr352)。server.xml 中配置的数据源。我想根据区域(如 dev、sit、prod)加载 server.xml。如何传递参数以启动自由服务器并动态加载数据源 server.env 文件和 bootstrap.properties 可能存在。因为新手..任何人都可以帮助解决这个问题。