ibm java 维护机器人_使用IBM Java Toolbox for i 实现IBM i的作业管理(上)

IBM i作业的工作原理

从作业交互的角度划分,IBM i作业可简单分为用户交互式与批处理两种。下面,我们分别它们的工作原理。

交互式作业的工作原理比较简单,通常会按以下步骤运行:

生命周期从用户登录开始;

对于交互式作业,IBM i立即响应并运行;

如涉及数据打印,则将数据输出至输出队列(Output Queue)中的一个脱机打印文件(以下称Spooled File)里,等待队列中排前的打印作业完毕,开始打印文件;

生命周期以用户注销结束。

相比而言,批处理作业的工作原理复杂一些,如图1所示。

图1.批处理作业的工作原理20130205%3F%3F00.jpg

对于批处理作业,通常会按以下步骤运行:

生命周期从执行CL命令Submit Job (SBMJOB)提交批处理作业开始;

i会根据某种调度策略,将作业加入到合适的作业队列,但并不意味着该作业立即获得运行的机会。

当子系统发现这个作业所需的资源均已准备好后,才运行这个作业;

一旦作业获得运行的机会,子系统调度内存池为其分配资源,从而运行该作业。

如涉及数据打印,对应的操作与交互式作业一样。

以批处理作业执行完成而结束。

IBM Java Toolbox for i针对IBM i作业的编程支持

从面向对象程序设计的角度,IBM Java Toolbox for i使用Job,JobList,JobLog三个主要Java类描述IBM i作业的相关功能操作,三者均位于com.ibm.as400.access包,对应的类图如图2所示。其中,Job类用于描述IBM i作业的常规属性与方法;JobLog类表示IBM i作业对应的作业日志;而作为帮助类,JobList类则描述按指定规则过滤的作业列表。

图2.作业相关的Java类图

20130205%3F%3F01.jpg

作为示例,清单2描述的是IBM i默认作业描述对象QDFTJOBD的相关属性,功能与上述DSPJOBD命令等价。

清单2.打印作业描述对象QDFTJOBD的属性

//构造AS400对象,建立Java应用程序与IBM i服务器的连接。

AS400 sys = new AS400(system, usr, pwd);

//打印QDFTJOBD的属性

JobDescription jd = new JobDescription(sys, "QGPL", "QDFTJOBD");

System.out.println("User: " + jd.getUserName() + ", Job Queue: " + jd.getJobQueueName() +

", Output Queue: " + jd.getOutputQueueName());

//作为好的编程习惯,释放连接

sys.disconnectAllServices();

IBM Java Toolbox for i对作业队列的编程支持

作业队列(Job Queue)是一种IBM i对象(类型为*JOBQ)。系统中存在多个作业队列,每一个作业队列包含一组等待处理的批处理作业。

从面向对象的编程模型角度,虽然IBM Java Toolbox for i并未提供专门的JobQueue类表示IBM i作业队列,但是,Job类与JobDescription类提供了作业队列相关的常用功能。

作为示例,清单3描述的是HTTP服务器作业ADMIN对应的作业队列,以及作业在队列中的当前状态。

清单3.打印作业队列中ADMIN作业的状态

//构造AS400对象,建立Java应用程序与IBM i服务器的连接。

AS400 sys = new AS400(system, usr, pwd);

Job job = new Job(sys, "ADMIN", "QTMHHTTP", "846441");

//打印作业队列的路径

String jobQueue = job.getQueue();

System.out.println("Job Queue: " + jobQueue);

//打印作业队列中此作业的状态

String status = job.getJobStatusInJobQueue();

if(status.equals(Job.JOB_QUEUE_STATUS_BLANK )) {

System.out.println("This job was not on a job queue.");

} else if (status.equals(Job.JOB_QUEUE_STATUS_HELD)) {

System.out.println("This job is being held on the job queue.");

} else if (status.equals(Job.JOB_QUEUE_STATUS_SCHEDULED)) {

System.out.println("This job will run as scheduled.");

} else if (status.equals(Job.JOB_QUEUE_STATUS_READY)) {

System.out.println("This job is ready to be selected.");

} else {

System.out.println("Unknown...");

}

//作为好的编程习惯,释放连接

sys.disconnectAllServices();

实际上,队列是IBM i的一大特色。IBM i有很多类型的队列,包括作业队列,输出队列,消息队列,数据队列等等。

作者:皮光明

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值