问题标签 [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 回答
526 浏览

jsr352 - JSR 352. 重新启动分区:如何检查提交?

我有一个读取和写入数据库的分区作业。我的分块大小为 100。如果分区失败并且我希望从上次提交开始重新启动,我是否必须明确指定检查点?(在可序列化的 checkpointInfo() 中?)

如果是这样,如何/在哪里?

0 投票
2 回答
749 浏览

jsr352 - JSR 352:如何从分区步骤的每个分区的写入者那里收集数据?

因此,我在写入数据库的步骤中有 2 个分区。我想记录每个分区写入的行数,得到总和,打印到日志;

我正在考虑static在 Writer 中使用一个变量,并使用 Step Context/Job Context 将其放入afterStep()Step Listener。但是,当我尝试它时,我得到了null. 我能够在close()阅读器中获取这些值。

这是正确的方法吗?或者我应该使用 Partition Collector/Reducer/Analyzer?

我在 Websphere Liberty 中使用 java 批处理。我正在 Eclipse 中开发。

0 投票
2 回答
622 浏览

java - JSR 352:使用步骤上下文/作业上下文传递多个变量?

我需要在 Step Listener 和 Writer 之间传递多个变量。使用 StepCtx.setTransientUserData() 我只能传递 1 个变量。

所以要传递多个变量,我应该创建一个地图/类并传递它还是有更好的方法?

0 投票
2 回答
1199 浏览

java - JSR352:注解 @Named 在 Java SE 中不起作用

我正在使用 JBoss 实现JBeret在 Java SE 下构建JSR352(Java 平台的批处理应用程序)演示。我想为这项工作运行集成测试。在这个批处理作业中,有 3 个组件:

  • io.mincong.batch.MyItemReader
  • io.mincong.batch.MyItemProcessor
  • io.mincong.batch.MyItemWriter

它们都被命名为带有注释的bean @Named,例如

多亏了这个注释,我可以使用作业类,而无需io.mincong.batch在我的作业文件中输入包名前缀myJob.xml这在 Java EE 容器中可以正常工作,例如 WildFly 10。但是,在 Java SE 中,它不再工作了,我必须添加包前缀。这里的工作 xml myJob.xml

你可以在附件中找到 2 mvn install log,有和没有包前缀。换句话说,使用和不使用@Named。为什么会发生此错误?我是否缺少一些依赖项?任何想法 ?

你也可以在下面看到我的 pom.xml。附加信息:


使用 @Named 时 Maven 安装失败

不使用 @Named 时 Maven 安装成功

pom.xml

0 投票
1 回答
616 浏览

file-io - JSR 352:如何从 Java Batch 程序写入 MVS 数据集?

我需要写入大型机中的非 VSAM 数据集。我知道我们需要使用 ZFile 库来做到这一点,我在这里找到了如何做到这一点

我正在 zOS 上的 WebSphere Liberty 中运行我的 Java 批处理作业。如何指定数据集?我可以直接给DataSet起这样的名字吗?

dsnFile = new ZFile("X.Y.Z", "wb,type=record,noseek");

我可以使用 Java 的 File Writers 将它写入服务器本身的文本文件,但我不知道如何访问 mvs 数据集。

我对 zOS 和大型机的世界还比较陌生。

0 投票
1 回答
467 浏览

spring-batch - ItemReader 中的中间结果集

Spring Batch 机制相当新——我设法让它启动并运行,但我的业务逻辑似乎不适合作为 Spring Batch 工作。请允许我解释一下:

该工作负责向用户发送电子邮件,如下所示:

  1. 获取满足特定条件的新闻项目集 ( Set<News>)
  2. 获取尚未收到新闻项目之一的用户集 ( Set<User>)
  3. 对于每个用户,为用户未收到的每个新闻发送一封电子邮件。
  4. “标记”已收到/已收到新闻的用户。

实体bean定义如下:

两者之间没有一对多的关系,因此为了检索未收到的新闻,可以按如下方式检索:

我决定使用 Spring Batch,因为我的用户群目前为 28,000 并且还在增加,将步骤 1 和 2 设置为 ,将ItemReader步骤 3 和 4 设置为ItemWriter.

问题在于前两个步骤:我决定使用JpaPagingItemReader<T>我的读者,但不幸的是它非常严格,以至于我只能指定一个查询,而不会更改将结果集映射到其他东西。在我的示例中,我首先需要获取一组新闻,然后根据收到的新闻 ( Tuple<User, Set<News>>) 查询数据库以获取一组用户。

我该怎么做才能让我的读者返回一组用户和他/她未收到的新闻集?我错过了什么?

非常感激。如果您需要更多信息,请告诉我。

0 投票
1 回答
190 浏览

java - JSR 352:是否可以在多个 JVM 中的同一作业中运行同一步骤的不同分区?

如果是这样,如何?

我在 WebSphere Liberty 上使用 IBM 的 JSR 352 实现。

0 投票
1 回答
624 浏览

java - JSR 352:Java Batch 确保最大性能和效率的最佳实践是什么?

我正在从数据库进行典型的读取,并且我将处理并写入具有数百万(> 1000 万)条记录的数据集上的文件步骤。

从设计或架构的角度来看,有什么需要牢记的吗?

还有需要牢记的任何 Java-Batch 特定的编码实践吗?(除了一般的 java 最佳实践)

我在 Websphere liberty 上使用 IBM 的 JSR352 实现。

0 投票
1 回答
1053 浏览

java - JSR 352:连接已关闭如果连接在分区步骤中的 Readers close() 中关闭,则会出错

我在阅读器的打开中创建一个连接Connection con = ds.getConnection();(其中 ds 是数据源)并在阅读器的 close() 中关闭它。

但是当我运行具有多个分区的作业时,在作业中间,我得到连接已关闭错误

Caused by: java.sql.SQLException: [jcc][t4][10335][10366][3.58.82] Invalid operation: Connection is closed. ERRORCODE=-4470, SQLSTATE=08003 DSRA0010E: SQL State = 08003, Error Code = -4,470

我假设当其中一个分区完成时会发生这种情况。

所以我的问题是为什么会发生这种情况?以及应该如何处理连接?还是 Java 负责关闭连接?

我在 WebSphere Liberty UPDATE 上使用 Java Batch:

}

完整的错误信息 [ERROR ] J2CA0024E: Method rollback, within transaction branch ID {XidImpl: formatId(57415344), gtrid_length(36), bqual_length(40), data(0000015645eff4470000000915937ff85f46c3ed056b19010aa5147e1183f8d3ae81c04c0000015645eff4470000000915937ff85f46c3ed056b19010aa5147e1183f8d3ae81c04c00000001)} of resource pool connectionManager[Pool], caught com.ibm.ws.exception.WsException: DSRA0080E: An exception was received by the Data Store Adapter. See original exception message: [jcc][t4][10335][10366][3.58.82] Invalid operation: Connection is closed. ERRORCODE=-4470, SQLSTATE=08003. with SQL State : 08003 SQL Code : -4470

0 投票
1 回答
1318 浏览

multithreading - 如何在 JSR 352 中定义一个好的分区计划以确保 CPU 平衡?

JSR 352 - Java 平台的批处理应用程序使用分区提供并行功能。批处理运行时可以在不同的分区中执行一个步骤,以加快进度。JSR 352 还引入了threads定义:我们可以定义要使用的线程数,例如

然后我就疑惑了:如何给出一个赞赏的分区方案,让每个线程都被占用,保证CPU的平衡?

比如有表A、B、C要做,它们的行分别是10亿、100万、1000。该步骤旨在将这些实体处理为文档,一个实体转到一个文档。文件生成的顺序并不重要。这些表实体的CPU时间分别为1s、2s、5s。线程数为 4。

如果有 3 个分区,每个表类型一个,那么该步骤将需要1 * 10^9几秒钟才能完成,因为:

  • 分区 A将占用1 * 10^9 * 1s = 1 * 10^9s,在线程 2 上运行
  • 分区 B将占用1 * 10^6 * 2s = 2 * 10^6s,在线程 3 上运行
  • 分区 C将占用1 * 10^3 * 5s = 5 * 10^3s,在线程 4 上运行

然而,当线程 2 被占用时,线程 3 是空闲的2 * 10^6s,线程 4 是空闲的5 * 10^3s。所以很明显,这不是一个好的分区计划。

我的问题是:

  • 在上面的例子中是否有更好的分区计划来完成?
  • 我可以考虑:分区是一个消费队列,线程消费这个队列吗?
  • 一般来说,我可以/应该使用多少个线程?CPU核心数是一样的吗?
  • 一般来说,如何给出一个赞赏的分区计划,让每个线程都被占用并保证CPU的平衡?