2015-03-30 73 views
4

在過去,我使用BPXBATCH從JCL執行java類文件。我想轉向使用定製的JVM啓動程序,正如IBM在以下鏈接中所建議的那樣。 http://www.ibm.com/developerworks/systems/library/es-java-batchz.html從批處理執行java JCL

我寫了一個hello world java程序,並在大型機上編譯並將其打包成jar。

下面是一個使用BPXBATCH的JCL成員示例。

//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啓動功能帶來的上述文章中詳細的。

上面的例子執行類文件,但文章似乎建議JAR文件是自定義JVM啓動程序所必需的。以下是我創建的嘗試和使用自定義JVM啓動器的工作。

JAR文件是OMVS上的〜/ 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            
//  

目前這個作業的輸出失敗,102的特定輸出CC低於:

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  

我區規模爲20萬,所以我不相信區域大小的問題。有什麼我做錯了嗎?

+0

200,000是什麼?你爲什麼這麼想?在你的工作卡上你有0M。你嘗試過200M嗎? – 2015-03-30 21:12:01

+0

您可能想要查看Dovetailed Technologies運行的支持論壇。 (http://community.dovetail.com/forum/viewforum.php?f=1) – cschneid 2015-03-31 00:38:04

+0

你好Bill,200,000是我的TSO會話的區域大小。我以前有一個問題,我無法編譯.java文件,所以我想我會在我的文章中提到它。我確實嘗試用256M運行,沒有運氣。我仍在努力解決它。 – Burke9077 2015-03-31 10:59:58

回答

1

該解決方案最終成爲STDENV DD聲明的更改。以下代碼應適用於指定區域發生更改的任何環境。

//STDENV DD *            
#                
# Java home location           
#                
export JAVA_HOME=/your/omvs/path/to/java/lib 
#                
# Standard java path updates         
#                
export PATH=/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":         
#                
# Define location (and version if applicable) of jar home  
#                
APP_HOME=/var/location/of/your/jar          
CLASSPATH=$APP_HOME:"${JAVA_HOME}"/lib:"${JAVA_HOME}"/lib/ext 
# Add Application required jars to end of CLASSPATH   
for i in "${APP_HOME}"/*.jar; do        
    CLASSPATH="$CLASSPATH":"$i"        
    done              
export CLASSPATH="$CLASSPATH":        
//               
+0

直覺是你應該已經能夠從「命令行」** TSO ISH **來測試它了嗎? – mckenzm 2015-05-12 19:24:47

+0

這確實在ishell/omvs中運行。我需要它是一個批處理作業,用於作業調度,活動假脫機輸出以及sdsf中的可見性。 – Burke9077 2015-05-12 19:26:33

+1

瞭解,但env會根據帳戶使用相同? BPXBATCH只是一個背景ISH?只從這裏的疑難解答方面思考。例如,我經常需要在HFS上運行「查找」。在這種情況下好問題。 – mckenzm 2015-05-12 19:31:33