问题标签 [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.
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 用作作业存储库
我想知道是否其中任何一个可能需要这些额外的权限。
java - 从 Batchlet 内部获取 jobId
我需要从执行 batchlet 内部获取 jobId。我已经能够从我正在启动 Batchlet 的类中获取 jobId,但不能从 Batchlet 内部获取。
long jobId = job.start("BatchletName", parm);
这句话启动了 Batchlet “BatchletName”。现在,我需要从类 BatchletName.java 中获取 jobId 值:
先感谢您。
java - JSR 352 - 为什么异常包含在停止工作
我正在尝试使用带有 Websphere Liberty Profile 17.0.0.2 的 JSR 352 创建一个简单的批处理应用程序。在进入异常处理之前,一切似乎都运行良好。我假设在 job.xml 中的“skippable-exception-classes”节点中指定的应用程序引发的异常将被忽略/跳过,并将允许作业继续执行下一个项目/步骤。
每当调用其方法之一时从注入的bean(通过@Inject)抛出异常时,就会出现我遇到的问题。该作业仅在引发异常的当前项目/步骤上停止。
奇怪的是,每当我手动/显式抛出完全相同的异常时,比如说 RecordNotFoundException,工作就会继续,这是我所期望的。仅当从注入的 bean 触发异常时才会出现该问题。我已将@ApplicationException 添加到异常类中,因此异常包装/解包就位。
我错过了什么吗?这是 Websphere Liberty 的错误吗?
编辑:添加了简化代码
SampleSharedLibrary - 来自其他项目/jar 的依赖项
批处理示例应用程序
SampleWriter 导入 sample.SampleSharedLibrary;
样本阅读器
工作.xml
至于server.xml,没有添加太多配置,但我启用了以下功能:cdi-1.2、ejbLite-3.2、jaxrs-2.0、jpa-2.0、jsf-2.2、managedBeans-1.0、servlet-3.1、localConnector- 1.0、批处理 1.0 和 json-1.0
当遇到来自实际应用程序的错误时,我会得到如下日志(必须将一些值更改为星号):
websphere-liberty - 我应该如何在 Liberty Batch (JSR 352) ItemWriter 中使用 SQLJ 进行数据库更新?
我应该如何获取/缓存/关闭我的ConnectionContext(连接)?
我是否应该在ItemWriter.open()中缓存上下文并在每个块的ItemWriter.writeItems()中缓存
如果我想使用特定于 DB2 的 API 怎么办?
java - 通过 JobOperator 停止 JobInstance
我正在尝试从 managedbean 停止一项作业执行。更具体地说,我能够获取作业实例并停止作业实例,如下所示:
即便如此,它不会对它继续运行的实例的执行产生影响。事实上,如果我再次尝试获取作业实例,这是不可能的,因为有效的方法 getRunningExecutions 不返回任何元素。以这种方式,谁能告诉我我做错了什么?
先感谢您。
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?
java - 如何从 Java EE 批处理作业发送电子邮件
我需要每天处理大量用户列表,以便根据某些情况向他们发送电子邮件和 SMS 通知。我为此使用 Java EE 批处理模型。我的工作 xml 如下:
MyItemReader 的 onOpen 方法从数据库中读取所有用户,而 readItem() 使用列表迭代器一次读取一个用户。在 myItemProcessor 中,实际的电子邮件通知被发送给用户,然后用户被持久保存在 myItemWriter 类中该块的数据库中。
我的问题是检查点存储在前一个块中执行的最后一条记录。如果我有一个包含接下来 10 个用户的块,并且在第 5 个用户的 myItemProcessor 中引发异常,那么在重试时,整个块将被执行,所有 10 个用户将被再次处理。我不希望再次向已处理的用户发送通知。
有没有办法处理这个?这应该如何有效地完成?
任何帮助将不胜感激。谢谢。
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 运行,但我得到了相同的行为,并且得到了完全相同的错误。
java - Spring Batch 在 Spring Boot 应用程序中没有看到 H2 DataSource bean
对于小型测试应用程序,我使用 Spring Boot 和 Spring Batch,仅限于 JSR-352 功能。我遇到的问题是 Spring Batch 看不到 Spring Boot 自动创建的 H2 数据库。
当我尝试按如下方式调用批处理器时:
我得到以下异常:
现在我可以将 HSQL DB 和数据库连接池添加到依赖项中,但我希望 Spring Batch 能够“查看”H2 DataSource。顺便说一句,它已正确初始化。
有没有一种简单的方法可以做到这一点?不幸的是,搜索了几个小时并没有产生任何可用的东西。