问题标签 [java-batch]

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 投票
0 回答
347 浏览

mainframe - JSR352 - 使用 ZFile.update() 更新 VSAM 文件时出错

writer 类在 mode 中打开一个文件(myfile)并使用一个键查找记录。一旦找到记录,就会调用 update()。update()执行调用时出现以下异常

该文件在 writer 方法中以"rb,type=record"模式打开,open()在 writer 方法中关闭close()

当编写器为作业的第一个块执行时,就会发生错误。

可能是什么问题呢 ?

0 投票
1 回答
212 浏览

mainframe - 运行 JBERET java 批处理程序时出现 ZOS 错误

我正在尝试在 z/OS 中运行这个jberet java 批处理程序,但是遇到了以下异常。这似乎与 z/OS 中的权限有关,因为相同的可执行文件 (fat/uber) jar 在 Windows 机器中运行良好。

这个错误的解决方案是什么?

更新:这个批处理程序不会读取/写入任何大型机文件,它只是一个 hello world 示例。这个批处理程序做了一些重要的事情 1. WELD 读取 beans.xml 2. JBeret 读取 JBERET.properties 3. 创建一个 H2 DB 用作作业存储库

我想知道是否其中任何一个可能需要这些额外的权限。

0 投票
1 回答
93 浏览

websphere-liberty - 我应该如何在 Liberty Batch (JSR 352) ItemWriter 中使用 SQLJ 进行数据库更新?

我应该如何获取/缓存/关闭我的ConnectionContext(连接)?

我是否应该在ItemWriter.open()中缓存上下文并在每个块的ItemWriter.writeItems()中缓存

如果我想使用特定于 DB2 的 API 怎么办?

0 投票
1 回答
776 浏览

websphere-liberty - How can I define a JSR 352 chunk step to checkpoint every 10 seconds (and use built-in checkpointing in general)?

Is there a simple way using <chunk time-limit="10"...>?

Can I combine a time-limit with my custom CheckpointAlgorithm?

0 投票
1 回答
177 浏览

rest - Glassfish 中批处理 OSGi 应用程序的授权问题 - “当前用户无权执行此操作”

我已经在 Glassfish 4.1.2 下部署了一个带有许多 OSGi 包的 OSGi maven 应用程序。这个捆绑包是通过一个 web 应用程序激活的,该应用程序会在其上定义 Jobs 进行一些调用。所有这一切实际上都在以预期的方式工作。

Web 应用程序执行作业,作业调用 OSGi 包。当我尝试从外部获取批处理状态时,问题就来了。

目的是使用 REST Web 服务部署其他 Web 应用程序,以便我可以按需查询批处理状态。当我运行时:

我得到这个例外:

javax.batch.operations.JobSecurityException:当前用户无权执行此操作

我已经尝试在运行批处理的同一个 Web 应用程序中部署 web 服务,只是为了测试行为,并且在发送批处理之后,我不断收到相同的异常。

奇怪的是,当我从 webapp 控制器运行批处理时,它运行了,我可以像魅力一样获得批处理状态:

我在 JSR352 规范、Javadoc 或 Java EE 教程中找不到任何关于批处理安全性的内容。

有可能做到这一点吗?是关于 Glassfish JSR352 的吗?我怎样才能做到这一点?

感谢您的时间。

编辑

按照@Scott Kurz的建议将大部分日志设置为 FINE 后,我可以看到这些新行:

[2017-12-05T13:10:45.100-0500] [glassfish 4.1] [FINE] [] [javax.enterprise.web.core] [tid: _ThreadID=64 _ThreadName=http-listener-1(4)] [timeMillis : 1512497445100] [levelValue: 500] [CLASSNAME: org.apache.catalina.authenticator.AuthenticatorBase] [METHODNAME: invoke] [[ 安全检查请求 GET /ws/webresources/facturacion/getJobs ]] [2017-12-05T13:10 :45.101-0500] [glassfish 4.1] [FINE] [] [javax.enterprise.web.core] [tid: _ThreadID=64 _ThreadName=http-listener-1(4)] [timeMillis: 1512497445101] [levelValue: 500] [CLASSNAME:org.apache.catalina.authenticator.AuthenticatorBase] [METHODNAME:invoke] [[ 不受任何约束]]

这意味着一些奇怪的东西:

[2017-12-05T13:10:45.104-0500] [glassfish 4.1] [FINE] [AS-WEB-NAMING-00005] [javax.enterprise.web.naming] [tid: _ThreadID=64 _ThreadName=http-listener- 1(4)] [timeMillis: 1512497445104] [levelValue: 500] [CLASSNAME: org.apache.naming.resources.FileDirContext] [METHODNAME: file] [[ 文件无法读取/home/felipe/Documents/Programas/glassfish4/ glassfish/domains/domain1/applications/ws/WEB-INF/classes/META-INF/services/javax.batch.operations.JobOperator]]

我尝试在 localhost 中将 glassfish 作为 sudo 运行,但我得到了相同的行为,并且得到了完全相同的错误。

0 投票
2 回答
1365 浏览

jsr352 - JSR-352 Java Batch:为什么 JobListener.afterJob() 总是获得批处理状态 STARTED?

我是 Java Batch 新手。我在 WebSphere Liberty 17.0.0.4 上部署了一个包含 JobListener 的简单批处理作业(请注意,我使用的是 IBM 的 JSR-352 实现,而不是 Spring Batch)。批处理作业本身按预期运行:它读取输入文件,进行简单的数据转换,然后写入数据库。但是在成功执行的 JobListener 的 afterJob() 方法中,我看到批处理状态为 STARTED,退出状态为 null。(这些值与我在 beforeJob() 方法中看到的值相同)。我希望 afterJob() 看到 COMPLETED 的状态,除非有例外。

afterJob() 记录的执行 ID 与 JobOperator.start() 在我开始作业时返回的值相同,所以我知道我得到了正确作业执行的状态。

我找不到任何获取批处理状态的 JobListener 示例,因此我的 JSL 中可能有一个简单的错误,或者我错误地获取了批处理状态。或者我是否需要在步骤的实施中明确设置状态?对于设置和获取作业执行的最终批处理状态和退出状态的正确技术,我将不胜感激。

这是JSL:

这是batch.xml中监听器的定义:

这是 JobListener 的实现:

我尝试在 JSL 中添加<end on="*" exit-status="COMPLETED"/>and <job><flow>但没有效果或导致状态为 FAILED。

0 投票
1 回答
646 浏览

spring-batch - 基于内容的路由和 java 批处理 JSR 352(jBeret,Spring Batch)?

基于内容的路由和java批处理JSR 352jBeretSpring Batch)?

尝试实现一些简单的“真实世界”批处理作业,因为“hello world”看起来很有希望。似乎我没有正确理解这个概念——但实际的发布接缝对于“现实世界”的例子来说毫无用处。

“直观”的方法是:

  • 配置三个写入器(例如ItemWriterA, ItemWriterB, ItemWriterC)。但是:一个块中只有一个作家是可能的 - 为什么这个限制?

  • 添加一个决定并根据您的决定使用编写器。但是:决策不能包含在混蛋中——为什么会有这个限制?

使用 Java Batch 执行此操作的正确方法是什么JSR 352?欢迎任何提示。

Java Batch - 可能是

0 投票
1 回答
532 浏览

ejb - Java批处理-将ejb注入batchlet

我有一个启动 bean。我想在这开始一些批处理工作。我使用@Nemed和注释了 batchlet 类@Dependent。我想在批处理中使用像 ReportService 这样的 ejb,但注入不起作用。如何将 EJB 注入到我的 batchlet?我在 wildfly 11.0.0.Alpha1 上部署了以下示例,并在服务对象中获得了空引用。

批处理测试:

测试作业.xml

启动豆:

报告服务:

0 投票
1 回答
478 浏览

ejb - 从最后一个结束日期开始安排 java 批处理作业

我使用 jsr-352 编写工作并将其部署在 wildfly 上。如何在最后一个结束时间之后安排一项延迟的作业,如下面的时间线,其中=是执行时间和-延迟时间:

注意:作业执行的最大数量为 1

0 投票
1 回答
312 浏览

jakarta-ee - 在 Wildfly 上查找作业的运行执行次数

我在 Wildfly 上使用 jdbc 作业存储库。当我杀死wildfly进程时,一些作业执行仍处于启动状态。当我重述wildfly时,我会执行执行BatchRuntime.getJobOperator().getRunningExecutions并给出提到的作业执行。当我在内存存储库中使用时,它工作正常。我想检查真正运行的执行次数。