典型的大型机批处理应用程序包括薪资,租赁和融资,信用卡处理,电信用户开票,生成采购订单和提出库存维护应用程序的运输请求等。 这些应用程序通过运行作业来启动,作业是一组作业控制语言(JCL)语句。 这些作业控制程序的执行。 例如,第一个程序可能会选择性地从数据库中提取记录。 下一个程序可能会根据某些条件对记录进行排序,而另一个程序可能会执行一些业务逻辑(数据库更新,一些数学运算等)。 JCL还具有选择性执行程序的功能。 例如,如果第一个程序由于任何原因失败,那么JCL可能会执行一个通知相应人员的程序,依此类推。
每个人都清楚Java™的所有优点以及Internet的影响。 一般而言,来自Web的用户可以发起可能与大型机数据库(DB2®,信息管理系统(IMS)等)或什至与虚拟存储访问方法(VSAM)文件进行通信的事务。 结果,大型机然后在格式正确的Web页面中返回数据。 Web用户还可以在大型机数据库上启动更新。
缺少的链接
一方面,您拥有高度健壮和可扩展的大型机。 另一方面,您具有Java和Web世界的灵活性。 如上所述,典型的Web应用程序将启动一个事务,该事务将执行一次性数据库访问。 是否不可能触发批处理周期或一组程序来实现业务逻辑? 既然已经有一些程序在JCL的控制下执行,那么当这些程序仍然可以从Web访问它们时,是否可以重用这些程序? 使用以下解决方案,答案是“是”。
基本解决方案
大型机使用文件传输协议(FTP)与外部世界进行通信。 可以使用FTP在桌面上的大型机上提交作业。 让我们回顾一下步骤。
- 创建一个名为
job.txt
的文本文件,该文件中编码了一个典型的大型机作业。 - 在Windows®计算机上,转到命令提示符 。
- 通过连接到大型机来启动FTP会话。 输入ID和密码 。
- 使用
quote site
命令将文件标识为具有JCL语句。 - 使用FTP
put
命令将此文件发送到大型机。
以下是一个示例作业,可以将其另存为文本文件job.txt
:
清单1.示例文本文件
//XXXXXXXJ JOB (ACCTCODE),'NAGESH',NOTIFY=D245241,CLASS=I,
// MSGLEVEL=(1,1),MSGCLASS=C
//*
//STEP1 EXEC PGM=IEFBR14
注意 :不同的大型机安装有其自己的标准,这些标准可能会使先前的工作无效。 您应该与系统程序员联系,以获取正确的标准建议。
典型的FTP会话如下所示:
清单2.典型的FTP会话
ftp my.zos.mainframe
userid
password
quote site filetype=jes
put job.txt
quit
Java解决方案
Java解决方案扩展了先前的基本解决方案,如下所示:
清单3. Java解决方案
package fileTransferProtocol;
import org.apache.commons.net.ftp.*;
import java.io.*;
public class FileTransferProtocol {
public static void main (String [ ] args) {
String serverName ="my.zos.mainframe" ;
String userName ="userid" ;
String password ="********" ;
FTPClient ftp = new FTPClient() ;
//Connect to the server
try {
ftp.connect (serverName) ;
String replyText =ftp.getReplyString() ;
System.out.println (replyText) ;
}
catch (Exception e) {
e.printStackTrace () ;
}
//Login to the server
try {
ftp.login (userName, password) ;
String replyText = ftp.getReplyString() ;
System.out.println (replyText);
} catch (Exception e) {
e.printStackTrace();
}
//Tell server that the file will have JCL records
try {
ftp.site ("filetype=jes") ;
String replyText = ftp.getReplyString() ;
System.out.println (replyText) ;
}
catch (Exception e) {
e.printStackTrace() ;
}
//Submit the job from the text file.Use \\ to avoid using escape notation
try {
FileInputStream inputStream = new FileInputStream ("C:\\job.txt") ;
ftp.storeFile (serverName,inputStream) ;
String replyText = ftp.getReplyString() ;
System.out.println (replyText) ;
}
catch (Exception e) {
e.printStackTrace() ;
}
//Quit the server
try {
ftp.quit() ;
}
catch (Exception e) {
e.printStackTrace() ;
}
}
}
在上一个示例中,导入了一个基本的FTP软件包,该软件包用于执行所有FTP命令,如基本解决方案中所述。 使用的软件包是Apache的Commons / Net 。 可从以下网址下载: http : //jakarta.apache.org/commons/index.html 。
为了使该程序成功编译,CLASSPATH必须指向commons-net-1.0.0.jar
。
到目前为止,以上代码对文本文件使用了硬编码名称。 您可以对其进行修改以自动读取文件名。
结论
在本文中,您学习了如何使用Java程序从z / OS大型机提交批处理作业。 该程序是大型机的传统批处理功能与Web灵活性之间缺少的链接。 您可以按需安排批处理作业,而不必依赖某些日期/时间限制。 您还可以重用现有程序。 不需要更改,因为执行模式(通过作业计划程序或使用FTP的Web)对于程序是透明的。
根据设计,FTP是纯文本协议,因此容易被窃听。 使用FTP也有可能出于恶意目的潜入某些作业。 但是,您可以通过设置适当的资源和访问控制设施(RACF)组和/或防火墙来解决此威胁。
翻译自: https://www.ibm.com/developerworks/systems/library/es-batch-zos.html