如何在 z/OS 上将 java 作为作业步骤运行

Posted

技术标签:

【中文标题】如何在 z/OS 上将 java 作为作业步骤运行【英文标题】:how to run java as a jobstep on z/OS 【发布时间】:2018-02-01 21:10:17 【问题描述】:

我需要在 z/OS 大型机上运行 Java 类程序作为 JCL 作业步骤。有人做过吗?我已经尝试在大型机的 AIX 下运行 java 程序。但我需要在 JCL 作业流中运行相同的程序。我知道我可以使用 System.exit(rc) 将返回代码传递回 JCL 步骤。但是如何执行、设置 CLASSPATH、输入参数和文件以及将文件写入 z/OS?

【问题讨论】:

JZOS 可用吗? 【参考方案1】:

您当然可以使用 BPXBATCH 来运行一个 shell 脚本,该脚本设置您需要的任何变量,然后调用 Java。对于简单和静态的事情,您可以通过 JCL 中的特殊 DDNAME 向 BPXBATCH 传递环境变量列表。如果您需要更复杂的处理,您可能会编写一个简短的 shell 脚本来设置您需要的任何内容,这可能包括将参数从 JCL 定义的文件复制到可以传递给 Java 应用程序的本地 UNIX 服务文件。

如果您调用 Java 的脚本相当薄,您可能更喜欢 BPXBATSL - 它会在本地生成并为您节省一些资源。您可以在here 阅读有关它们的信息。

小心输出文件之类的东西 - 当您运行可能分叉其他进程的 UNIX 应用程序时,使用“SYSOUT=*”之类的东西效果不佳...最好将输出重定向到本地 UNIX 文件在上面提到的 IBM 文档的这个例子中:BPXBATCH SH /u/usr/joe/shellscriptA > /tmp/a.out。如果您需要打印此输出(或其他),您始终可以使用 OGET 进行后续步骤 - 请参阅 here。

如果您做了很多这样的工作,并且想要获得最后一点的性能,您可以随时为自己编写一个小型 C 程序来为您处理所有这些步骤。您将设置所需的任何环境变量等,然后生成 Java 进程并等待它结束。如果您想要更复杂,您甚至可以通过设置一些管道并将它们作为 STDOUT/STDERR 传递给 Java 来直接写入 SYSOUT。

【讨论】:

Valerie R - 感谢您的回复 - 但并不完全符合要求。请求(当然不是我的请求)是“在 z/OS 大型机上运行 Java 类程序作为 JCL 作业步骤。”您的两个解决方案都涉及在 AIX 端执行脚本,这不是请求和要求的。 Java 程序应该在 z/os 端运行。 不,脚本是在您的 z/OS 作业步骤中运行的...与 AIX 或此处的任何其他平台无关。您可能忽略了 BPXBATCH 可以运行一个普通的 UNIX shell 来运行您的脚本。【参考方案2】:

这是一个示例,它将运行一个非常简单的 Java 程序 (myapp),该程序位于 /u/tstradm/myapp 中并将输出写入 /u/tstradm/myapp。

//TSTRADMB  JOB  MSGCLASS=X,MSGLEVEL=(1,1),NOTIFY=&SYSUID,REGION=0M
//EXPORT EXPORT SYMLIST=*
// SET APPROOT='/u/tstradm/myapp'
//RUNJAVA EXEC PGM=BPXBATSL,REGION=0M,TIME=NOLIMIT,
// PARM='SH java -cp &APPROOT myapp'
//STDOUT DD PATH='&APPROOT/myapp.out',
//  PATHOPTS=(OWRONLY,OCREAT,OTRUNC),
//  PATHMODE=SIRWXU
//STDERR DD PATH='&APPROOT/myapp.err',
//  PATHOPTS=(OWRONLY,OCREAT,OTRUNC),
//  PATHMODE=SIRWXU

请注意,我在类所在的根目录中使用了一个名为 APPROOT 的 JCL 符号,然后在 java 调用上设置我的类路径时将其用于替换。

我不会在 JCL 中做太复杂的事情 - 这是一种烦人的语言,对事情的长度有限制,但它可以让你在 shell 中运行程序并重定向输出到 HFS。

【讨论】:

以上是关于如何在 z/OS 上将 java 作为作业步骤运行的主要内容,如果未能解决你的问题,请参考以下文章

从 z/OS 批处理作业运行 XA/JTA 事务

如何从 z/OS 调用远程服务器上的 python 脚本?

DB2 Z/OS V10 大型机:如何创建作业 [关闭]

在 Linux 上将 Java 应用程序作为服务运行

使用 JZOS 工具包的 JCL 作业中所有 z/OS DD 语句的列表

当 jenkins 作业作为“执行 Maven 发布”运行时,如何在 shell 步骤中获取参数 MVN_RELEASE_VERSION 的值?