Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在z/OS上将java作为jobstep运行_Java_Zos_Jcl - Fatal编程技术网

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

如何在z/OS上将java作为jobstep运行,java,zos,jcl,Java,Zos,Jcl,我需要在z/OS大型机上运行Java类程序作为JCL作业步骤。有人这样做过吗?我已经尝试在大型机上的AIX下运行java程序。但是我需要在JCL作业流中运行相同的程序。我知道我可以使用System.exit(rc)将返回代码传递回JCL步骤。但是如何执行、设置类路径、输入参数和文件以及将文件写入z/OS?您当然可以使用BPXBATCH来运行一个shell脚本,该脚本设置您需要的任何变量,然后调用Java。对于简单和静态的东西,您可以通过JCL中的特殊DDNAME向BPXBATCH传递环境变量列表

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

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

如果您调用Java的脚本相当精简,您可能更喜欢BPXBATSL—它会在本地生成,并将为您节省一些资源。你可以读到他们

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


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

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

如果您调用Java的脚本相当精简,您可能更喜欢BPXBATSL—它会在本地生成,并将为您节省一些资源。你可以读到他们

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


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

下面的示例将运行驻留在/u/tstradm/myapp中的非常简单的Java程序(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
注意,我在类所在的根目录中使用了一个名为approt的JCL符号,然后在java调用上设置类路径时将其用于替换


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

下面的示例将运行驻留在/u/tstradm/myapp中的非常简单的Java程序(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
注意,我在类所在的根目录中使用了一个名为approt的JCL符号,然后在java调用上设置类路径时将其用于替换


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

有空吗?有空吗?瓦莱丽R-谢谢你的回复-但这并不是我们所要求的。请求(当然不是我的)是“在z/OS大型机上运行Java类程序作为JCL作业步骤”。您的两种解决方案都涉及在AIX端执行脚本,这不是所请求和需要的。Java程序应该在z/os端运行。不,脚本是在z/os作业步骤中运行的…与AIX或任何其他平台无关。您可能忽略的是,BPXBATCH可以运行一个正常的UNIX shell来运行您的脚本。Valerie R-感谢您的回复-但这并不是所要求的。请求(当然不是我的)是“在z/OS大型机上运行Java类程序作为JCL作业步骤”。您的两种解决方案都涉及在AIX端执行脚本,这不是所请求和需要的。Java程序应该在z/os端运行。不,脚本是在z/os作业步骤中运行的…与AIX或任何其他平台无关。您可能忽略了BPXBATCH可以运行运行脚本的普通UNIX shell。