从批处理JCL执行java
在过去,我使用BPXBATCH从JCL执行java类文件。我想使用IBM在下面的链接中推荐的定制JVM启动器。 我编写了一个hello world java程序,在大型机上编译并打包到一个jar中 下面是一个使用BPXBATCH的JCL成员示例从批处理JCL执行java,java,batch-processing,mainframe,jcl,Java,Batch Processing,Mainframe,Jcl,在过去,我使用BPXBATCH从JCL执行java类文件。我想使用IBM在下面的链接中推荐的定制JVM启动器。 我编写了一个hello world java程序,在大型机上编译并打包到一个jar中 下面是一个使用BPXBATCH的JCL成员示例 //LMGHWRLD JOB (MY,ACCOUNTING,INFO),'HELLO WORLD', // CLASS=A,MSGCLASS=H,REGION=512M,NOTIFY=&SYSUID
//LMGHWRLD JOB (MY,ACCOUNTING,INFO),'HELLO WORLD',
// CLASS=A,MSGCLASS=H,REGION=512M,NOTIFY=&SYSUID
//********************************************************************
//* Run Java under a UNIX System Service shell
//********************************************************************
//STEP2 EXEC PGM=BPXBATCH,
// PARM='SH java com.foo.bar.HelloWorld'
//STDIN DD DUMMY
//STDOUT DD PATH='/tmp/&SYSUID..bpxbatch.out',
// PATHOPTS=(OWRONLY,OCREAT,OTRUNC),
// PATHMODE=SIRWXU
//STDERR DD PATH='/tmp/&SYSUID..bpxbatch.err',
// PATHOPTS=(OWRONLY,OCREAT,OTRUNC),
// PATHMODE=SIRWXU
//STDENV DD *
CLASSPATH=/u/myuid
//*********************************************************************
//* Copy HFS output files to SYSOUT, since BPXBATCH can only write
//* STDOUT and STDERR to HFS files.
//*********************************************************************
//STEP3 EXEC PGM=IKJEFT01,DYNAMNBR=300,COND=EVEN
//SYSTSPRT DD SYSOUT=*
//HFSOUT DD PATH='/tmp/&SYSUID..bpxbatch.out'
//HFSERR DD PATH='/tmp/&SYSUID..bpxbatch.err'
//STDOUTL DD SYSOUT=*,DCB=(RECFM=VB,LRECL=133,BLKSIZE=137)
//STDERRL DD SYSOUT=*,DCB=(RECFM=VB,LRECL=133,BLKSIZE=137)
//SYSPRINT DD SYSOUT=*
//SYSTSIN DD *
OCOPY INDD(HFSOUT) OUTDD(STDOUTL)
OCOPY INDD(HFSERR) OUTDD(STDERRL)
//
我想使用定制JVM启动器带来的所有特性,如上面文章所详细介绍的
上面的示例执行类文件,但本文似乎建议定制JVM启动器需要JAR文件。下面是我创建的用于尝试和使用自定义JVM启动器的作业
在OMVS上,JAR文件是~/HelloWorld/HelloWorld.JAR
//LMGHWRLD JOB (MY,ACCOUNTING,INFO),'HELLO WORLD',
// CLASS=A,MSGCLASS=H,REGION=0M,NOTIFY=&SYSUID
//STEP1 EXEC PGM=JVMLDM60,
// PARM='com.foo.bar.HelloWorld'
//STEPLIB DD DSN=<MY.LIBRARY.PATH>,DISP=SHR
//SYSPRINT DD SYSOUT=*
//SYSOUT DD SYSOUT=*
//STDOUT DD SYSOUT=*
//STDERR DD SYSOUT=*
//STDENV DD *
. /etc/profile
. ~/.profile
export CLASSPATH=~/HelloWorld
for i in ~/HelloWorld/*.jar; do
export CLASSPATH=$i:$CLASSPATH
done
//
我的区域大小是200000,所以我不认为区域大小是个问题。有什么我做得不对吗?这个问题的解决方案是对STDENV DD语句的修改。以下代码应适用于指示区域已更改的任何环境
//STDENV-DD*
#
#Java主位置
#
导出JAVA_HOME=/your/omvs/path/to/JAVA/lib
#
#标准java路径更新
#
导出路径=/bin:“${JAVA_HOME}”/bin
LIBPATH=/lib:/usr/lib:“${JAVA_HOME}”/bin
LIBPATH=“$LIBPATH”:“${JAVA_HOME}”/lib/s390
LIBPATH=“$LIBPATH”:“${JAVA_HOME}”/lib/s390/j9vm
LIBPATH=“$LIBPATH”:“${JAVA_HOME}”/bin/classic
export LIBPATH=“$LIBPATH”:
#
#定义jar home的位置(和版本,如果适用)
#
APP_HOME=/var/location/of/your/jar
CLASSPATH=$APP_HOME:“${JAVA_HOME}”/lib:“${JAVA_HOME}”/lib/ext
#将应用程序所需的JAR添加到类路径的末尾
对于“${APP_HOME}”/*.jar中的i;做
CLASSPATH=“$CLASSPATH”:“$i”
完成
export CLASSPATH=“$CLASSPATH”:
//
200000什么?你为什么这么想?在你的工作卡上,你有0米。你试过200米了吗?你可能想在技术支持论坛上查看一下。()你好,比尔,200000是我在TSO会议上的区域大小。我以前遇到过一个无法编译.java文件的问题,所以我想我会在我的帖子中提到它。我试过用256米跑,运气不好。我仍在努力解决这个问题。上次升级到z/OS 1.13时,我不得不将我所在区域的大小从200米增加到300米。我不记得当时安装了哪个版本的Java。当谈到Java和区域大小时,要想得大一些(与COBOL等相比)。直觉是,您应该能够从“命令行”TSO ISH测试这一点?这确实在ishell/omvs中运行。我需要它是一个批处理作业,用于作业调度、实时假脱机输出和sdsf中的可见性。明白了,但根据使用的帐户,env应该是相同的吗?BPXBATCH只是一个背景?这里只考虑故障排除方面。例如,我经常需要在HFS上运行“查找”。这个问题问得好。
JVMJZBL1001N JZOS batch Launcher Version: 2.3.0 2013-05-02
JVMJZBL1002N Copyright (C) IBM Corp. 2005. All rights reserved.
JVMJZBL1038E Child shell process exited with exit code: 1
JVMJZBL1042E JZOS batch launcher failed, return code=102