Toolbox for Java 和 JTOpen

使用 Java 访问 IBM i

本文将解释并比较 IBM Toolbox for Java 和 JTOpen 支持。对于这些 Java 接口,本文将重点描述它们用于 IBM i 的一些最有用的编程资源。

John W. Eberhard (jeber@us.ibm.com), 软件工程师, IBM

John Eberhard photoJohn Eberhard 从 1991 年起供职于 IBM i,从 1998 年起开始从事 IBM i 的 Java 开发工作。目前,他从事原生 JDBC 驱动程序、Toolbox for Java 和 JTOpen 开发工作。



2011 年 8 月 24 日

Toolbox for Java 和 JTOpen:IBM i 的 Java 访问途径

Toolbox for Java 简介

IBM Toolbox for Java 是一个 Java 类库,支持针对 IBM i 的客户机/服务器和 Internet 编程模型。Java applets、servlets 和应用程序可以使用这些类轻松访问 IBM i 数据和资源。对于 Java Virtual Machine 和 JDK 提供的资源,Toolbox 不需要额外的客户机支持。

IBM Toolbox for Java 提供的支持类似于 IBM i Access APIs 提供的函数。它使用 IBM i 主机服务器(基础 IBM i 操作系统的一部分)访问 IBM i 系统上的数据和资源。这些主机服务器都作为系统上的一个单独作业运行,通过套接字连接上的架构数据流与 Java 客户机程序通信。套接字接口通过 IBM Toolbox for Java 类对 Java 程序员隐藏。由于套接字连接通过 Toolbox 类管理,因此工作站上不需要 IBM i Access。

JTOpen 是 IBM Toolbox for Java 许可计划产品的开源版本,包含相同的代码。它们二者都在广泛的平台上经过测试,包括 AIX、IBM i、Linux、Solaris 和 Windows。JTOpen 和 IBM Toolbox for Java 都在 IBM Public License (IPL) 下分发。JTOpen 可以从 http://jt400.sourceforge.net 下载。IBM 对 JTOpen 和 IBM Toolbox for Java 许可计划产品提供同等级别的支持。具体支持级别(语音/电子邮件/传真)取决于服务合同的类型。

访问 IBM i 资源

IBM Toolbox for Java 提供一些类来访问 IBM i 系统上的资源。在访问资源之前,需要通过一个 AS400 类实例建立连接。AS400 类管理到服务器上的服务器作业的套接字连接集合和服务器的登录行为,包括提示用户登录信息、密码缓存以及默认用户管理。

它还提供一些类来进行数据描述和转换。数据描述类允许 Java 程序通过对象来描述数据缓冲区的记录格式。该对象用于转换和处理数据。转换类提供 IBM i 和 Java 数据格式之间的转换。提供了用于转换数值和字母数据的类。

文件资源

IBM i 以两种形式提供文件资源。第一种形式是物理文件,具有指定的数据格式。这些文件被组织为一些库,可以视为关系数据库资源。第二种文件资源形式是 POSIX 类文件系统,称为 Integrated File System(或 IFS)。在 IFS 中,文件的存在形式是一个字节序列,没有任何由文件属性指定的数据格式。IBM Toolbox for Java 提供一些类来访问这两种文件资源形式。

数据库资源可以通过 JDBC 和记录级访问来访问。DB2 for i 数据库通过一个针对 JDBC 3.0 和 JDBC 4.0 规范定义的接口编写的 JDBC 驱动程序访问。这个 JDBC 驱动程序是一个类型 4 驱动程序,这意味着它是一个纯 Java 接口,通过一个网络协议与 IBM i 通信。记录级访问类创建、读取、更新和删除 IBM i 文件和成员。AS400File 类是记录级访问类的抽象基类,它提供一些方法来执行序列记录访问、文件和成员的创建和删除以及确认控制行为。KeyedFile 类表示一个通过密钥访问的系统文件,而 SequentialFile 类表示一个通过记录编号访问的系统文件。

AS400FileRecordDescription 类提供一些方法来检索系统文件的记录格式。这个类还提供一些方法来为 RecordFormat 的子类创建 Java 源代码,返回描述服务器上文件的记录格式的 RecordFormat 对象。

下面的样例代码展示如何通过 userid “USER” 和密码 “PASSWD” 连接到一个名为 MYSYSTEM 的 IBM i 系统。连接到系统后,从 SYSIBM/SYSDUMMY1 文件读取一条记录。

          AS400 as400 = new AS400(“MYSYSTEM”,”USER”,”PASSWD”);

          SequentialFile file = 
             new SequentialFile(as400,                  
                           "/QSYS.LIB/SYSIBM.LIB/SYSDUMMY1.FILE");
          file.setRecordFormat(); 
          file.open(AS400File.READ_ONLY, 1, 
                    AS400File.COMMIT_LOCK_LEVEL_NONE );
          Record record = file.read(1);
          Object field = record.getField(0);
          System.out.println("Field is "+field); 
          file.close();

Integrated File System 中的文件通过文件系统类访问。IFSFile 类提供的方法在文件上整体运行。IFSFileReaderIFSFileWriterIFSRandomAccessFile 类用于对文件进行读写操作。通过文件系统类,Java 程序能打开一个输入或输出流,打开一个文件进行随机访问,列示目录内容,以及执行其他常规的文件系统任务。

程序资源

IBM i 提供几种方式来在系统上运行可执行程序。第一种方式是使用通过 C 和 RPG 等语言创建的 IBM i 程序和服务程序对象。IBM i 还提供一些命令来执行特定功能。IBM i 还有运行 Java 程序的能力。IBM Toolbox for Java 提供运行不同类型可执行程序的能力。

IBM i 程序和服务程序对象可以通过 ProgramCallServiceProgramCall 类访问。当服务器程序退出时,参数可以传递到 IBM i 程序,数据可以返回 Java 程序。通过一种程序调用标记语言(PCML)提供一个程序调用框架,PCML 这种标记语言用于支持 Toolbox 的程序调用功能。这种语言全面描述调用 IBM i 程序所需的全部参数、结构和字段关系。

所有非交互式 i5/OS 命令都可以通过 CommandCall 类运行。命令完成时,将提供一列由命令生成的 IBM i 消息。下面的示例展示如何调用一条命令并检索相关消息。

          CommandCall cmd = new CommandCall(as400);
          cmd.run("CRTLIB TBXSAMPLE");
          AS400Message[] messageList = cmd.getMessageList();
          for (int i = 0; i < messageList.length; i++) {
             System.out.println(messageList[i].getText()); 
          }

服务器上驻留的 Java 程序可以通过 JavaApplicationClass 类运行。Java 程序的输入可以从客户机发送到服务器。Java 程序的输出也可以在客户机上读取。

程序员数据对象

IBM i 对几个数据对象提供了支持,这些对象用于开发相互通信的程序。一个数据队列对象用于将数据从一个程序发送到另一个程序。用户空间和数据区域对象提供可以被多个程序访问的持久内存。

序列和已加密(keyed)序列数据队列可以通过 DataQueueKeyedDataQueue 类访问。可以从数据队列添加和移除数据项,也可以在系统上创建或删除数据队列。

UserSpace 类用于访问 IBM i 用户空间。可以通过 UserSpace 类创建或删除用户空间。也可以通过程序在系统的用户空间中读写数据。

CharacterDataAreaDecimalDataAreaLocalDataAreaLogicalDataArea 类提供对各种数据区域的访问。数据区域类用于在系统上读取、写入、创建和删除数据区域。

打印和消息资源

IBM i 拥有一个后台打印系统,用于管理各种程序的输出。IBM i 还有一个消息传递系统,程序使用该系统与用户和其他程序通信。IBM Toolbox for Java 提供一些类来访问这些 IBM i 资源。

打印资源可以通过以下打印类访问:OutputQueuePrinterPrinterFileSpooledFileWriterJob。这些打印类用于检索后台打印文件、输出队列、打印机以及其他打印资源的列表。这些类还可以处理输出队列和后台打印文件,回答后台打印文件的消息,执行其他打印相关任务。另外,还提供一些类来在系统上创建新的后台打印文件,生成 SCS 打印机数据流。通过直接向这些类写入数据,应用程序和 applets 可以在 IBM i 后台打印系统上生成输出。

IBM i 消息、消息队列和消息文件通过消息类访问。消息类用于检索前一个操作(比如一个命令调用)生成的消息。这些类还允许访问关于消息队列上的某条消息的信息。程序员可以使用这些类来与消息队列交互,发送、接收或回答消息。

系统操作信息

IBM i 系统还管理系统运行的关键信息。用户配置文件包含用户信息。IBM i 系统通过作业或进程来运行程序。作业使用的资源被编组为系统池。系统还提供用于配置操作系统的系统值。IBM Toolbox for Java 允许 Java 程序访问这个系统信息。

用户和组相关信息可以通过用户和组类获取。UserList 类用于检索系统上的用户和组列表。User 类提供关于每个用户或组的详细信息。例如,下面的代码将返回系统上的用户列表。

          UserList userList = new UserList( as400 );
          Enumeration e = userList.getUsers ();
          while (e.hasMoreElements ()) {
            User u = (User) e.nextElement ();
            System.out.println (u);
          }

IBM i 作业信息通过 JobJobList 类访问。Job 类用于检索作业日志中的消息和作业相关信息,比如名称、编号、类型、用户、状态、作业队列等。JobList 类基于选择标准提供作业列表。

SystemPool 类允许检索和更改系统池信息。可以通过这些类检索和更改系统池的名称和大小。

SystemStatus 类检索系统状态信息。SystemStatus 类可用于检索系统状态信息,比如系统上当前运行的用户作业和系统作业的总数、系统辅助存储池的存储容量。例如,下面的代码返回已使用的系统 ASP 的百分比。

          SystemStatus systemStatus = new SystemStatus(as400);
          System.out.println("ASPUsed:"+
                  systemStatus.getPercentSystemASPUsed());

系统值类允许 Java 程序检索和更改系统值和网络属性。SystemValue 类允许检索和设置单个系统值。SystemValueList 表示服务器上的一列系统值。SystemValueList 通过 SystemValueGroup 类检索,该类表示用户定义的系统值和网络属性的集合。SystemValueGroup 工厂用于生成和维护唯一的系统值集合。下面的示例返回 QTIME、QDATE 和 QCCSID 系统值。

          SystemValue value = new SystemValue(as400, "QTIME");
          System.out.println("QTIME="+value.getValue()); 
          value = new SystemValue(as400, "QDATE");
          System.out.println("QDATE="+value.getValue()); 
          value = new SystemValue(as400, "QCCSID");
          System.out.println("QCCSID="+value.getValue());

结束语

IBM Toolbox for Java 提供一些类,Java 程序可使用这些类来访问 IBM i 上的资源。这些类允许访问 IBM i 文件资源 — 数据库文件和 IFS 文件。这些类还可以用于调用 IBM i 上的程序、服务程序、Java 程序和系统命令。Java 程序可以使用 Toolbox 类,通过 IBM i 上的数据队列、用户空间和数据空间对象,与其他程序交互。还可以获取打印和消息资源。最后,Toolbox 类提供对系统运行信息的访问,这些信息包括用户、作业、系统值信息等。

参考资料

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=IBM i
ArticleID=753602
ArticleTitle=Toolbox for Java 和 JTOpen
publish-date=08242011