问题标签 [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.
jsr352 - JSR352 -Wildfly / jberet 如何暂停线程并恢复
我正在尝试使用 JBeret 实现收集可能需要大约 5 天才能完成的大量数据。我们正在使用带有子系统(jberet)的 Wildfly 10.1.0 应用程序服务器作为内存作业存储库运行提取。
我将用于从数据库收集数据的块过程和用于压缩过程的批处理作为单个作业 ID 下的两个步进过程。
此外,我正在使用多线程运行提取,这意味着我们正在使用 10 个线程并行收集数据。
由于数据库速度慢/内存问题面临作业失败异常。
如果数据库中遇到任何异常问题,是否有可能暂停所有线程并将其恢复,以便我们可以从数据库中清除垃圾。
谢谢。
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。
spring-batch - 基于内容的路由和 java 批处理 JSR 352(jBeret,Spring Batch)?
基于内容的路由和java批处理JSR 352
(jBeret
,Spring Batch
)?
尝试实现一些简单的“真实世界”批处理作业,因为“hello world”看起来很有希望。似乎我没有正确理解这个概念——但实际的发布接缝对于“现实世界”的例子来说毫无用处。
“直观”的方法是:
配置三个写入器(例如
ItemWriterA
,ItemWriterB
,ItemWriterC
)。但是:一个块中只有一个作家是可能的 - 为什么这个限制?添加一个决定并根据您的决定使用编写器。但是:决策不能包含在混蛋中——为什么会有这个限制?
使用 Java Batch 执行此操作的正确方法是什么JSR 352
?欢迎任何提示。
ejb - 从最后一个结束日期开始安排 java 批处理作业
我使用 jsr-352 编写工作并将其部署在 wildfly 上。如何在最后一个结束时间之后安排一项延迟的作业,如下面的时间线,其中=
是执行时间和-
延迟时间:
注意:作业执行的最大数量为 1
java - Issue deserializing checkpoint info restarting JSR352 Job - ClassNotFoundException: [B
I have a partitioned job that reads from and writes to a DB. I have a chunking size of 10. If a partition fails and i want the restart to happen from the last commit, I have overwritten the checkpointinfo method and wrote my logic according to my application requirement. whenever i try to restart the failed job, i am getting an exception that there is failure in Read-Process-Write Loop
Here is the exception logs:
Here are my code snippet
Item Reader
Item writer
}
java-ee-7 - JEE 7 JSR 352 将数据从批处理传递到块步骤
我已阅读标准(和 javadoc),但仍有一些问题。我的用例很简单:batchlet 从外部源获取数据并确认数据(意味着确认后从外部源中删除数据)。在确认数据之前,batchlet 会生成相关输出(in-menory-object),该输出将传递到下一个面向块的步骤。
问题:
1)在批处理和块步骤之间传递数据的最佳实践是什么?看来我可以通过在批处理中调用 jobContext#setTransientUserData 来做到这一点,然后在我的块步骤中,我可以通过调用 jobContext#getTransientUserData 来访问该数据。
我知道 jobContext 和 stepContext 都是以线程本地方式实现的。这里让我担心的是“瞬态”部分。如果批处理成功但我的块步骤失败会发生什么?如果重新启动作业/步骤,“TransientUserData”-数据是否仍然可用?对于我的用例,批处理只运行一次很重要。因此,即使重新启动作业或块步骤,保留成功运行批处理的输出数据也很重要 - 否则批处理必须再次保存。(我已经确认了数据并且它已经消失了 - 所以再次运行 batchlet 对我没有帮助。)
2)跟进问题在stepContext中有几个方法:getPersistentUserData和setPersistentUserData。这些方法的预期用途是什么?“持久”部分指的是什么?这些方法是否仅与分区相关?
谢谢!/丹尼尔
jakarta-ee - JNDI 名称的 weblogic 查找失败:jdbc/batch
我的项目中有一个批处理作业。在启动 bean 中,当我在 weblogic 上部署它时,它是由 BatchRuntime.getJobOperator().start("myJob") 安排和运行的,给出以下错误:
数据源 jndi 名称源在控制台中设置为 jdbc/myDS,并且监控页面中存在旧的作业执行历史记录。我的配置有什么问题?
编辑 1:当我在控制台中更改数据源 JNDI 名称并将此数据源定位到管理服务器时,我的工作工作了 13 个小时,然后再次出现上述错误而没有改变任何东西!
java - 如何将变量值放在分区环境的步骤上下文中并在下一步中访问这些值。我为此使用 JSR352
我在文件夹中有 10 个段。每个段中有 2 个文件。我已经实现了分区映射器来一次读取、处理和写入一个段。
我想获取从每个段的文件中读取的记录数和插入到 DB 的记录数的值。在下一步中,发送作业的状态报告,提及在邮件中插入的记录数。
我正在使用 JSR 352 并使用分区映射器为每个段实现一个线程。
java - 由于无法从连接池 [ __TimerPool ] 获取/创建连接,Java Batch 任务无法完成
我有一个配置的简单的基于块的 XML jbatch 作业,即使在 CentOS 6 上的 Glassfish 4.1(Build 13)中的重负载下也始终运行良好。但我最近在 CentOS 7 上创建了另一个具有相同 Glassfish 版本的安装;几乎使用默认配置。
新安装运行和完成作业有很大困难;执行速度明显变慢,无法完成并出现以下一致错误:
RAR5029:在 com.sun.enterprise.transaction.JavaEETransactionManagerSimplified.startJTSTx(JavaEETransactionManagerSimplified.java:439) 的 com.sun.jts.jta.TransactionImpl.registerSynchronization(TransactionImpl.java:305) 注册组件 javax.transaction.RollbackException 时出现意外异常在 com.sun.enterprise.transaction.jts.JavaEETransactionManagerJTSDelegate.enlistLAOResource(JavaEETransactionManagerJTSDelegate.java:318) 在 com.sun.enterprise.transaction.JavaEETransactionManagerSimplified.enlistResource(JavaEETransactionManagerSimplified.java:356) 在 com.sun.enterprise.resource.rm .ResourceManagerImpl.registerResource(ResourceManagerImpl.java:152)
....
[2018-05-14T06:05:28.080+0300] [glassfish 4.1] [警告] [poolmgr.err_enlisting_res_in_getconn] [javax.enterprise.resource.resourceadapter.com.sun.enterprise.resource.pool] [tid : _ThreadID=209 _ThreadName=concurrent/batchDispatchExecutor-managedThreadFactory-Thread-5] [timeMillis: 1526267128080] [levelValue: 900] [[ RAR7132: 无法在事务中登记资源。将资源返回到池中。池名称:[ __TimerPool ]]]
[2018-05-14T06:05:28.080+0300] [glassfish 4.1] [警告] [poolmgr.get_connection_failure] [javax.enterprise.resource.resourceadapter.com.sun.enterprise.connectors] [tid: _ThreadID=209 _ThreadName= concurrent/batchDispatchExecutor-managedThreadFactory-Thread-5] [timeMillis: 1526267128080] [levelValue: 900] [[ RAR5117 : 无法从连接池 [ __TimerPool ] 获取/创建连接。原因:com.sun.appserv.connectors.internal.api.PoolingException: javax.transaction.RollbackException]]
[2018-05-14T06:05:28.081+0300] [glassfish 4.1] [警告] [jdbc.exc_get_conn] [javax.enterprise.resource.resourceadapter.com.sun.gjc.spi] [tid: _ThreadID=209 _ThreadName= concurrent/batchDispatchExecutor-managedThreadFactory-Thread-5] [timeMillis: 1526267128081] [levelValue: 900] [[ RAR5114:分配连接时出错:[分配连接时出错。原因:javax.transaction.RollbackException]]]
[2018-05-14T06:05:28.081+0300] [glassfish 4.1] [警告] [] [com.ibm.jbatch.container.services.impl] [tid: _ThreadID=209 _ThreadName=concurrent/batchDispatchExecutor-managedThreadFactory-Thread -5] [timeMillis: 1526267128081] [levelValue: 900] [[没有找到 executionId 的作业实例状态:306]] ....`
问题是: 1. 为什么 timerpool 不释放连接?2. Executor服务很慢?
websphere-liberty - IBM JSR 352 作业日志为空
我在 Websphere Liberty Profile 服务器上运行 IBM JSR 352 java 批处理应用程序。用于写入作业日志的应用程序,例如 C:\web servers\liberty_profile\wlp-javaee7-17.0.0.1\wlp\usr\servers\javnat-batch-server\logs\joblogs\Job1000\2018-05-24\instance .19401\execution.19401\part.1.log
part.1.log 包含作业执行信息和异常堆栈跟踪。
但是,目前,每次运行任何批处理作业时,都会创建 part.1.log,但大小为 0。该文件只是空的。我没有更改任何配置。你们能否阐明在这种情况下可能出现的问题?提前致谢。