问题标签 [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 投票
2 回答
2595 浏览

java - WELD-001409:带有限定符 @Default 的类型 StepContext 的不明确依赖项

我正在尝试从我的 Windows 命令提示符以 java SE 模式运行示例。我已经构建了一个包含所有依赖项的 jar,并从我的命令提示符运行它。

但是,不断收到错误。从这个答案中,我了解到我的运行时类路径中可能有多个 StepContext 类。

我现在用 maven-shade 插件替换了 maven-assembly 插件来构建我的 fat jar,我可以在打包 jar 时看到以下警告

我将以下依赖项更新为提供,现在我在打包时没有看到上述警告,但是在运行新生成的 jar 时仍然出现异常

执行 JAR 文件时的当前异常

我该如何解决这个问题?

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 回答
67 浏览

java - 从 Batchlet 内部获取 jobId

我需要从执行 batchlet 内部获取 jobId。我已经能够从我正在启动 Batchlet 的类中获取 jobId,但不能从 Batchlet 内部获取。

long jobId = job.start("BatchletName", parm);

这句话启动了 Batchlet “BatchletName”。现在,我需要从类 BatchletName.java 中获取 jobId 值:

先感谢您。

0 投票
1 回答
928 浏览

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

当遇到来自实际应用程序的错误时,我会得到如下日志(必须将一些值更改为星号):

0 投票
1 回答
93 浏览

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

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

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

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

0 投票
1 回答
289 浏览

java - 通过 JobOperator 停止 JobInstance

我正在尝试从 managedbean 停止一项作业执行。更具体地说,我能够获取作业实例并停止作业实例,如下所示:

即便如此,它不会对它继续运行的实例的执行产生影响。事实上,如果我再次尝试获取作业实例,这是不可能的,因为有效的方法 getRunningExecutions 不返回任何元素。以这种方式,谁能告诉我我做错了什么?

先感谢您。

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 投票
2 回答
1121 浏览

java - 如何从 Java EE 批处理作业发送电子邮件

我需要每天处理大量用户列表,以便根据某些情况向他们发送电子邮件和 SMS 通知。我为此使用 Java EE 批处理模型。我的工作 xml 如下:

MyItemReader 的 onOpen 方法从数据库中读取所有用户,而 readItem() 使用列表迭代器一次读取一个用户。在 myItemProcessor 中,实际的电子邮件通知被发送给用户,然后用户被持久保存在 myItemWriter 类中该块的数据库中。

我的问题是检查点存储在前一个块中执行的最后一条记录。如果我有一个包含接下来 10 个用户的块,并且在第 5 个用户的 myItemProcessor 中引发异常,那么在重试时,整个块将被执行,所有 10 个用户将被再次处理。我不希望再次向已处理的用户发送通知。

有没有办法处理这个?这应该如何有效地完成?

任何帮助将不胜感激。谢谢。

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 回答
2744 浏览

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。顺便说一句,它已正确初始化。

有没有一种简单的方法可以做到这一点?不幸的是,搜索了几个小时并没有产生任何可用的东西。