如何将参数传入JCL中的in-stream dataset?

今天这个问题是我在用JCL来启动OMVS中的一个java程序时遇到的。我希望通过STDENV这个DD dataset来为我启动的java程序定义它自己的环境变量。又因为某些原因,我必须要使用IN-STREAM的方式来使用STDENV。而不能使用OMVS中的文件或者一个PDS dataset中的一个member。

那么现在问题就来了。在STDENV中有一些内容我希望是动态的,可以通过参数的方式从JCL传递到STDENV这个DD dataset中去。然而我发现JCL中的定义的变量是没有办法在IN-STREAM中使用的。于是我开始寻找解决方法。下面就让我们看怎么来解决这个问题。

第一个问题是在IN-STREAM中可以通过什么参数形式来传递一个值。经过一番搜索后我找到IN-STREAM里可以使用三种类型的SYMBOLS来动态传递参数进来。

1、JCL SYMBOLS

2、JES SYMBOLS

3、System SYMBOLS

这三种symbols中后两种通常只有系统管理员才有权限定义,所以我选择JCL SYMBOLS来处理我的这个问题。如果你想了解更多有关symbols的信息可以参看https://www.ibm.com/support/knowledgecenter/en/SSLTBW_2.4.0/com.ibm.zos.v2r4.ieab600/jclsymstr.htm

其实大家平时写JCL时都会用到JCL SYMBOLS。我们只需要用SET语句来定义一个SYMBOL就可以。但开始我在IN-STREAM中使用在JCL中定义的SYMBOL时始终无法正确解析。原来默认情况下JCL symbols只在JCL converter phase阶段有效,可以正确被解释和替换。在job执行阶段是无效的。必须要用EXPORT 语句才能让symbols可以在执行阶段依然有效。

//TEST1  JOB  MSGCLASS=A,NOTIFY=&SYSUID            
// EXPORT SYMLIST=(USERJH)       
// SET USERJH='-Djava.ext.dirs=/java/JAVA_64/lib/ext'

要想让IN-STREAM中使用这个JCL symbol还需要DD语句中的一个参数SYMBOLS。这里我们可以指定SYMBOLS参数的值为JCLONLY或者EXECSYS。他们的唯一区别就是当SYMBOLS被赋值为EXECSYS时,IN-STREAM中可以使用SYSTEM SYMBOLS。

//STDENV   DD   *,SYMBOLS=EXECSYS      
JVM_OPTIONS=&USERJH                            
//*                                            

这样,STDENV中的&USERJH会被替换为'-Djava.ext.dirs=/java/JAVA_64/lib/ext'。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值