Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2282290
  • 博文数量: 321
  • 博客积分: 3440
  • 博客等级: 中校
  • 技术积分: 2992
  • 用 户 组: 普通用户
  • 注册时间: 2007-05-24 09:08
个人简介

我就在这里

文章分类

全部博文(321)

文章存档

2015年(9)

2014年(84)

2013年(101)

2012年(25)

2011年(29)

2010年(21)

2009年(6)

2008年(23)

2007年(23)

分类: 其他UNIX

2014-06-16 19:45:31

概述

IBM Toolbox for Java 是一个类的集合,用于开发与 IBM i 相关的 Java 应用程序。它包含的各类工具,提供了对于 IFS、IBM i 系统信息、客户端 / 服务器等各类应用场景的的支持,用户可以在其他平台诸如 Windows,Linux 上面方便的使用 IBM Toolbox for Java 开发运行在 IBM i 上的应用程序,为用户的编程和调试带来了极大的方便。我们在这些操作系统平台上,通过几行简单的代码就可以访问一台 IBM i 系统,对系统进行相应的控制和更改。

IBM Toolbox for Java 不仅可以供 IBM 的开发人员使用,它还拥有一个开源版本 JTOpen,供所有人员下载和使用。JTOpen 可以从 上下载。JTOpen 的下载和使用遵循 IBM 公共许可证协议(IBM Public License),这个协议鼓励使用者对软件进行开发和改进,同时鼓励软件的商业化应用。

本文将通过一些例子,来介绍如何使用 IBM Toolbox for Java 提供的各种工具来访问 IBM i 系统并且开发 IBM i 相关的 Java 程序。

回页首

初始化并建立连接 :

IBM Toolbox for Java 中的 AS400 类用于建立访问 IBM i 系统的连接,这个类的使用很简单,只需使用如下参数初始化 AS400 类,Toolbox 就会自动建立连接并用相应的用户名登录制定的系统:

清单 1. 使用 Toolbox 建立连接
		 AS400 as400 = new AS400(SystemName, Username, Password);

如果不在初始化 AS400 对象的时候指定用户,Toolbox 在连接的时候就会弹出一个窗口,提示输入登录 IBM i 的用户名和密码。

我们也可以指定默认的登录用户,在登录框中选择”Default User”和”Save Password”,这样在下次再次登录的时候,可以免输用户名或密码,代码如下:

清单 2. 指定默认的登录用户
	 AS400 sys1 = new AS400(SystemName); 
	 AS400 sys2 = new AS400(SystemName); 
	 try{ 
		 sys1.connectService(AS400.COMMAND); 
		 sys2.connectService(AS400.COMMAND); 
	 }catch(Exception e) { 
		 e.printStackTrace(); 
	 }

如果我们需要访问一台 IBM i 系统上的敏感数据,或者访问或存储的数据内容需要加密,我们可以使用 Toolbox for Java 中的 SecureAS400 类。这个类继承了 AS400 类,使用方法与 AS400 类似,连接时只需输入系统名、用户名和密码即可。但是 SecureAS400 中使用了 Secure Sockets Layer(SSL),因此在数据交换时更加安全可靠。

除了直接新建一个连接之外,我们还可以使用连接池来获得一个对 AS400 的连接。参见下面的代码:

清单 3. 使用连接池来获得连接
	 AS400ConnectionPool as400Pool = new AS400ConnectionPool(); 
	 as400Pool.setMaxConnections(128); 
	 as400Pool.fill(SystemName, Username, Password, AS400.DATABASE, 50); 
	 as400Pool.getConnection(SystemName, Username, Password, AS400.COMMAND);

上面的代码新建了一个 as400Pool 作为一个连接 IBM i 系统的连接池,设置最大连接数为 128,同时为服务器建立 50 个连接。在建立完连接之后,从连接池中获得一个连接,使用用户名和密码。

使用连接池的优点在于,当所需要建立的连接数很多的时候,使用连接池可以大大提高效率,减少建立连接所需要的时间。当连接数少的时候,这种效果不明显,但当连接数多的时候,使用连接池对系统效率的提升效果会很明显。

除了 AS400 之外,另外一个有用的类是 AS400JPing。这个类可以可以用来 Ping 一个 IBM i 系统,从而查询这个系统当前是否在活动状态,或者查询系统的某个端口是否可用。下面的代码演示了这个类的使用方法:

清单 4.AS400JPing 的使用
	 AS400JPing pingObj = new AS400JPing(SystemName, AS400.COMMAND, false); 
	 if(pingObj.ping()) 
		 System.out.println("SUCCESS"); 
	 else 
		 System.out.println("FAILED");

回页首

使用 IBM Toolbox for Java 获取 IBM i 系统信息:

IBM Toolbox for Java 提供了很多工具和类库,用于访问和控制系统资源,最常用的工具之一就是”com.ibm.as400.access”包中的 AS400 类。AS400 通过 socket 连接来登录和访问一个 IBM i 系统,一旦登录成功,它会以方法的形式提供各种各样的接口供用户访问 IBM i 系统的各种信息。例如,如果想获得一个 IBM i 系统的系统名、操作系统版本、当前登录用户和使用的 CCSID,我们可以使用以下代码实现:

清单 5. 获取 IBM i 系统信息
	 AS400 as400 = new AS400(SystemName, Username, Password); 
	 System.out.println(as400.getSystemName()); 
	 System.out.println(as400.getVRM()); 
	 System.out.println(as400.getUserId()); 
	 System.out.println(as400.getCcsid());

回页首

使用 IBM Toolbox for Java 获取系统运行信息:

IBM Toolbox for Java 也提供了很多接口,用于获得系统运行的信息。一个常用的类是 SystemStatus。这个类允许我们访问一台 IBM i 系统,并且获得当前作业的运行状况和各种信息。

举例来说,如果我们想知道当前系统中有多少批处理作业正在运行,可以使用以下方法:

清单 6. 获取系统运行信息
	 AS400 as400 = new AS400(SystemName, Username, Password); 
	 SystemStatus systemStatus = newSystemStatus(as400); 
	 try{ 
		 System.out.println("getBatchJobsRunning: "
					 + systemStatus.getBatchJobsRunning()); 	
	 } catch(Exception e) { 
		 e.printStackTrace(); 
	 }

方法 getBatchJobsRunning() 用于返回当前正在运行的批处理作业数量。与此相关的方法还有很多,下表列出了 SystemStatus 类中常用的用于显示系统运行状况的方法及它们的作用:

方法 用途
ASPUsed 显示当前系统 ASP 的使用状况
getJobsInSystem 获得系统中的作业总数
getBatchJobsEnding 获得正在结束的作业数量
getBatchJobsWaitingToRunOrAlreadyScheduled 获得等待运行的作业数量
getPoolsNumber 获得系统中 Pool 的数量
getSystemPools 返回 Enumeration 类型,枚举系统中的 Pool,枚举类型为 SystemPool
getPercentProcessingUnitUsed 返回处理器使用的百分比
getUsersCurrentSignedOn 获得当前已经登录的用户数
getTotalAuxiliaryStorage 获得存储的总容量
getDateAndTimeStatusGathered 获得系统当前的日期时间,储存在一个 Date 对象中

除了 SystemStatus 之外,Toolbox for Java 还提供了很多与作业相关的类用来管理和获得系统中作业的信息,这些类包括 Job 类、JobList 类、JobLog 类、JobCCSID 类等等。下面我们会对其中常用的几个作业相关类进行一下介绍。

回页首

Job 类:

Job 类用于表示 IBM i 系统上的一个作业,它的定义中包含了作业所需要的各种参数和信息,我们可以利用 Job 类提供的各种方法,对作业进行查询、管理,信息收集

下面的例子演示了如果使用 Job 类的一个对象来获得 IBM i 系统上一个作业的各种常用信息。在使用 Job 类之前,我们需要先用连接名、作业名、用户名和作业号初始化一个 Job 类的对象,这样系统才能利用这些信息找到正确的作业。当定位到作业以后,我们用 loadInformation 函数载入此时这个作业的各类信息。需要注意的是,loadInformation 只对作业信息进行一次更新,所以如果作业的运行参数在一段时间后发生了改变,需要再次调用这个函数来及时更新对象中储存的信息。更新完对象中的信息,我们就可以调用 Job 类提供的各种方法获得我们所需要的作业信息了。代码如下:

清单 7.Job 类的使用
	 AS400 as400 = new AS400(SystemName, Username, Password); 
	 try{ 
		 // 初始化一个 Job 类对象的时候,指定它的系统名、作业名、用户名和作业编号
		 Job job = new Job(as400, jobName, userName, jobNumber); 
			
		 // 调入此作业当前的信息
		 job.loadInformation(); 
			
		 // 获得作业的状态
		 System.out.println(job.getStatus()); 
			
		 // 获得作业第一个线程的当前 library 
		 System.out.println(job.getCurrentLibrary()); 
		
		 // 获得作业使用的 CPU 时间
		 System.out.println(job.getCPUUsed()); 
			
		 // 获得执行方法名
		 System.out.println(job.getFunctionName()); 
			
		 // 获得作业开始运行的日期和时间
		 System.out.println(job.getJobActiveDate()); 
			
		 // 获得作业描述
		 System.out.println(job.getJobDescription()); 
			
		 // 获得作业的日志等级
		 System.out.println(job.getLoggingLevel()); 
			
		 // 获得作业关联的语言描述符
		 System.out.println(job.getLanguageID()); 
			
		 // 返回作业名
		 System.out.println(job.getName()); 
			
		 // 返回作业号
		 System.out.println(job.getNumber()); 
			
		 // 获得作业队列的 IFS 路径	
		 System.out.println(job.getQueue()); 
			
		 // 获得作业的子系统
		 System.out.println(job.getSubsystem()); 
			
		 // 获得作业的用户名
		 System.out.println(job.getUser()); 			
	 } catch(Exception e) { 
		 e.printStackTrace(); 
	 }

除了获得作业参数和信息的功能外,Job 类还提供了很多方法用于对 IBM i 系统上一个作业进行控制、修改和管理。下面的代码演示了这些功能:

清单 8. 使用 Job 类对作业进行控制、修改和管理
	 AS400 as400 = new AS400(SystemName, Username, Password); 
	 try{ 
		 // 初始化一个 Job 类对象的时候,指定它的系统名、作业名、用户名和作业编号
		 Job job = new Job(as400, jobName, userName, jobNumber); 

		 // 使用缓存,对作业做出的修改保存在缓存中,直到 commit 的时候才生效
		 job.setCacheChanges(true); 

		 // 更改优先级
		 job.setRunPriority(66); 

		 // 更改日期格式
		 job.setDateFormat("*YMD"); 

		 // 提交修改
		 job.commitChanges(); 

		 // 直接修改作业信息,不使用缓存
		 job.setCacheChanges(false); 

		 // 更改日志等级
		 job.setLoggingLevel(4); 

		 // 暂停作业
		 job.hold(true); 

		 // 继续运行作业
		 job.release(); 			

		 // 结束作业,参数表示结束这个作业的等待时间
		 job.end(10); 
	 } catch (Exception e) { 
		 e.printStackTrace(); 
	 }

上面的代码更改了一个正在运行的作业的优先级、日期格式、日志等级等参数。从代码中还可以看出,利用 Job 类管理 IBM i 系统上的作业有两种方式。一种方式是直接调用函数对作业进行控制,此时调用函数做出的修改可以立即生效。另一种方式是设立一个缓存,把对作业的修改先保存在缓存当中,等到需要提交修改的时候再提交出去,使修改生效。

需要注意的是,不是所有的与作业相关的参数都可以通过这种方式改变,例如作业名、作业编号、用户名。虽然 Job 类提供了修改这几个参数的方法,但是这些方法并不会真正修改 IBM i 系统上一个作业的名字、作业号和用户,而只是修改这个 Job 类的对象中储存的数据,而 IBM i 服务器上运行的实际的作业仍然使用以前的名字、号码和用户。参见下面的例子:

清单 9. 使用 Job 类修改参数
	 AS400 as400 = new AS400(SystemName, Username, Password); 
	 Job job = new Job(as400, "J9632#AGNT", "XJ9", "352076"); 

	 // 更改作业的名字、作业号和用户名
	 job.setName("NEWNAME"); 
	 job.setNumber("123456"); 
	 job.setUser("testuser"); 
			
	 System.out.println(job.getName()); 
	 System.out.println(job.getNumber()); 
	 System.out.println(job.getUser());

在执行完这些代码后,虽然程序输出的名字、号码和用户名会变成我们刚刚更改的,但是服务器上的作业仍然使用更改前的名字、作业号和用户。

回页首

JobList 类:

JobList 类用来获得一个系统中的作业,返回一个作业列表。在生成列表的时候,我们可以添加作业的筛选规则,用户可以选择获得所有作业,或者符合条件的作业。

下面的代码演示了 JobList 类的基本用法,我们首先增加一个筛选规则,选出所有用户名为”testuser”的作业,并返回一个作业列表。然后,使用 getJobs 方法获得系统中当前所有符合要求的作业,并打印出每个作业的名称和作业号。

清单 10.JobList 类的使用
	 AS400 as400 = new AS400new AS400(SystemName, Username, Password); 
	 String Jobuser = "testuser"; 
					
	 try{ 
		 JobList jobList = new JobList(as400); 

		 // 加入筛选条件,获取符合要求的作业信息
		 jobList.addJobSelectionCriteria(JobList.SELECTION_USER_NAME,Jobuser); 
		 Enumeration list = jobList.getJobs(); 
		 while(list.hasMoreElements()) { 
			 Job job = (Job) list.nextElement(); 
			 System.out.println(job.getName() + " " + 
			           job.getNumber()); 
		 } 
		 System.out.println("Total: " + jobList.getLength()); 
	 } catch(Exception e) { 
		 e.printStackTrace(); 
	 }

回页首

JobLog 类:

JobLog 类可以用来获得系统中一个作业的日志。这个类通过 message 的形式,获得作业日志中的内容,并返回给用户。它同时也提供了方法,使得用户可以向一个作业的日志中写入内容(writeMessage)。以下的代码演示如何使用 JobLog 类获得一个作业的日志:

清单 11.JobLog 类的使用
	  AS400 as400 = new AS400(SystemName, Username, Password); 
	 try{ 
		 // 初始化 JobLog 对象并获得消息列表
		 JobLog jlog = newJobLog(as400, jobName, userName, jobNumber); 
		 Enumeration messageList = jlog.getMessages(); 

		 while(messageList.hasMoreElements()) { 
			 AS400Message message = 
						 (AS400Message) messageList.nextElement(); 
			 System.out.println(message.getText()); 
		 } 
	 } catch(Exception e) { 
		 e.printStackTrace(); 
	 }

回页首

结束语

本文讲述了使用 IBM Toolbox for Java 在 IBM i 系统上开发 Java 应用程序的方法。使用 IBM Toolbox for Java 可以方便的访问一台 IBM i 系统,获得它的各类信息及它上面作业的信息,从而实现在外部对 IBM i 系统的控制。但是 IBM Toolbox for Java 的功能远远不止这些,除了访问本文所叙述的系统资源外,它还提供了各种各样的工具和类供我们应用。例如:访问数据库资源 JDBC 的接口,进行数据编码转换的工具类,在其他平台对 IBM i 的 IFS 文件系统进行文件操作的类,HTML 相关类等等。这些工具极大的方便了我们的应用程序开发,使我们可以很容易的编写 Java 程序对一台 IBM i 系统进行控制和管理。无论是在 IBM i 上的普通 Java 程序,还是 web 应用程序,相信 IBM Toolbox for Java 都能够成为我们的得力助手,提高我们软件开发的效率。


阅读(1292) | 评论(0) | 转发(0) |
0

上一篇:as400 总结

下一篇:AS400 基础

给主人留下些什么吧!~~