1

我是 Liberty 的新手,正在尝试 Batch (352) 功能。无论是通过搜索引擎还是stackoverflow,我都找不到这个问题,所以我显然遗漏了一些明显的东西......

我在 Liberty 8.5.5.9 中创建了一个简单的测试应用程序。它具有以下结构:

  • 测试批次EAR
    • testbatchWAR
      • 测试批次

EAR 已通过通常的 Add/Remove 菜单选择添加到服务器。

我现在正在尝试使用以下命令从命令行提交作业:

batchManager submit --batchManager=localhost:9443 --user=<> --password=<> --trustSslCertificates --jobXMLName=TestProcessor.xml --applicationName=testbatch

我收到一条消息(截断):

Error: Server returned HTTP response code: 500 for URL: https://localhost:9443/ibm/api/batch/jobinstances: [Error 500:  com.ibm.ws.jbatch.rest.bridge.BatchContainerAppNotFoundException: Failed to load the application context for application testbatch#testbatch.war. Verify the application is installed.

我已经尝试过 testbatch、testbatchEAR、testbatchWAR,但是从消息的“testbatch#testbatch.war”部分来看,看起来它只是对 EAR 和 WAR 使用相同的名称,我认为这是不可能的,是它?

我错过了什么?它必须就在我面前,但我发现的每个示例或解决方案都是使用裸 WAR,这是我做不到的。在自由的任何地方我都可以找到应用程序名称吗?我应该在某处定义名称(server.xml?)吗?

提前致谢!

* 编辑:附加信息 *

如果我从 Eclipse Run Configurations > Java EE Batch Job 部分运行它,它会运行它,并且执行 batchManager listJobs 会将应用程序名称显示为 testbatchEAR#testbatchWAR.war。

所以我想我真正的问题是,我怎样才能把这个名字放到batchManager.bat 的--applicationName 选项中?它需要并从中产生#.war。我试过从 listJobs 中输入全名,但它不允许使用 '#' 字符......

4

1 回答 1

0

在 EAR 应用程序中同时指定 --applicationName 和 --moduleName

(如您所见),如果批处理应用程序打包在 EAR 内的 WAR 中,您通常必须同时指定--applicationName--moduleName,例如:

batchManager submit --batchManager=localhost:9443 ... --applicationName=testbatch --moduleName=testbatchWAR.war ...

在 WAR 应用程序中仅指定 --applicationName

您可能已经看到了只需要--applicationName的示例,例如这里

此语法适用于批处理应用程序打包为 WAR(但不是 EAR 中的 WAR)的情况。

此处的“实用程序项目”名称不相关,并且没有 EJB,因此也没有--componentName相关。

该文档确实在本节中提到了这一点

发布 /ibm/api/batch/jobinstances

...

applicationName 标识批处理应用程序。除非指定了 moduleName,否则它是必需的,在这种情况下,applicationName 是通过删除 moduleName 的 .war 或 .jar 后缀从 moduleName 派生的。例如,如果您不提供 applicationName 且 moduleName=SimpleBatchJob.war,则 applicationName 默认为 SimpleBatchJob。

moduleName 标识批处理应用程序中包含作业工件(例如 JSL)的模块。作业在模块的组件上下文下提交。除非指定了 applicationName,否则 moduleName 是必需的,在这种情况下,moduleName 是通过将 .war 附加到 applicationName 来从 applicationName 派生的。例如,如果您提供 applicationName=SimpleBatchJob 且没有 moduleName,则 moduleName 默认为 SimpleBatchJob.war。

但是,如果您在 WDT 之类的工具中同时创建 Web 项目和 EAR 项目,那么您将无法轻松地为项目指定相同的名称(因为它们会发生冲突),所以这真的很有效在没有单独的 EAR 项目的情况下。当 EAR 项目存在时,您需要这两个参数。

于 2016-09-06T14:44:00.590 回答