IBM Java Toolbox for i对IBM i子系统的编程支持
除队列之外,子系统也是IBM i的一大特色。为满足用户的各种需求,IBM i 支持多种类型的作业。不同种类的作业对系统资源的要求不同,比如,交互式作业要求较快的响应时间,批处理作业可能要求较多的CPU时间等。为了更加合理、有效地使用系统资源,系统(System)被划分成若干个子系统(Subsystem),所有的作业在子系统的监控下运行。因此,可以认为子系统是专门为了运行某一类作业而配置的环境。
从面向对象的编程模型角度,IBM Java Toolbox for i使用Subsystem类(位于com.ibm.as400.access包)描述IBM i子系统对象。
作为示例,清单4描述的是子系统QHTTPSVR对应的属性与功能,它服务于HTTP服务器作业。
清单4. QHTTPSVR子系统
// 构造AS400对象,建立Java应用程序与IBM i服务器的连接。
AS400 sys = new AS400(system, usr, pwd);
Subsystem sbs = new Subsystem(sys, "QHTTPSVR", "QHTTPSVR");
if (!sbs.exists()) {
System.out.println("No such subsystem: "+sbs.getPath());
}
else {
sbs.refresh();
System.out.println("Status: " + sbs.getStatus());
System.out.println("Number of jobs: " + sbs.getCurrentActiveJobs());
System.out.println("Maximum jobs: " + sbs.getMaximumActiveJobs());
// 等待1小时后停止子系统
sbs.end(3600);
}
// 作为好的编程习惯,释放连接
sys.disconnectAllServices();
与作业相同,子系统本身并不是一个IBM i对象,但子系统描述(Subsystem Description)是一种对象(*SBSD)。子系统描述定义了子系统中拥有的存储器资源,在子系统中运行的作业类型以及最大作业数等特征。与作业不同,每一个子系统描述仅对应一个子系统,因此,可以用子系统描述对象的名字来区分不同的子系统。
从面向对象的编程模型角度,虽然IBM Java Toolbox for i并未提供专门的SubsystemDescription类来描述IBM i子系统描述符对象,而是在使用Subsystem类创建一个子系统的同时,代码内部自动创建一个同名IBM i子系统描述对象。
作为示例,清单5描述的是创建子系统MYSUBSYS,与此同时,IBM i会生成一个同名的及子系统描述对象。
清单5. 创建子系统以及子系统描述对象
// 构造AS400对象,建立Java应用程序与IBM i服务器的连接。
AS400 sys = new AS400(system, usr, pwd);
// 创建子系统对象的同时,同名的子系统描述对象也被创建。
Subsystem sbs = new Subsystem(sys, "QSYS", "MYSUBSYS");
if (sbs.exists()) {
System.out.println("Subsystem Description: "+sbs.getPath() + " exists");
}
else {
sbs.create();
System.out.println("Subsystem Description: " + sbs.getPath());
System.out.println("Number of jobs: " + sbs.getCurrentActiveJobs());
System.out.println("Maximum jobs: " + sbs.getMaximumActiveJobs());
}
// 作为好的编程习惯,释放连接
sys.disconnectAllServices();