如何在z / OS上将java作为jobstep运行

时间:2018-02-01 21:10:18

标签: java zos jcl

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

2 个答案:

答案 0 :(得分:4)

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

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

小心输出文件之类的东西 - 使用" SYSOUT = *"当您运行可能分叉其他进程的UNIX应用程序时,不能很好地工作......更好地将输出重定向到本地UNIX文件,如本例所示,来自上面提到的IBM文档:BPXBATCH SH /u/usr/joe/shellscriptA > /tmp/a.out 。如果您需要打印此输出(或其他任何内容),您始终可以使用OGET进行后续步骤 - 请参阅here

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

答案 1 :(得分:1)

这是一个运行非常简单的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。