WEB开发网
开发学院软件开发Java 使用 Java Socket 编程实现开放平台与 IBM 主机的... 阅读

使用 Java Socket 编程实现开放平台与 IBM 主机的文件传输

 2012-03-16 15:30:03 来源:WEB开发网   
核心提示: IMS 及 IMS Connect 的环境及架构IMS 是 IBM 的一个软件产品,具有为大型商业应用系统提供事务管理和数据库管理的功能,使用 Java Socket 编程实现开放平台与 IBM 主机的文件传输(2),最初发布于 1968 年,是一个历史悠久的产品,其中,IBM 主机的 IP 地址、需要的访问账号
  1. IMS 及 IMS Connect 的环境及架构

IMS 是 IBM 的一个软件产品,具有为大型商业应用系统提供事务管理和数据库管理的功能,最初发布于 1968 年,是一个历史悠久的产品。IMS 由数据通信管理器(IMS TM,最初称为 DC),数据库管理器(DB)及一套系统服务设施组成。

IMS 是一个层次型数据的管理系统,只能运行在 z/OS 系统上。DB 主要负责支持 IMS 的层次型数据库模型,它为应用层提供了存储数据库的 API 并且保持数据库的一致性。应用层不需要知道数据库的底层组织,因为有 Data Language/Interface(DL/I,类似于 SQL 的 API)将其分离。而 IMS TM 负责与应用程序进行交互,通过消息队列保持整个通信的顺畅,当然在入队和出队时也会调用到 DL/I 的 API。系统服务组件 TM 和 DB 提供公用的服务,以保持两者的正常工作。图 4 描述了整个 IMS 的简要架构。

图 4. IMS 结构的简略图  

IMS Connect 是一个 IMS 的通信组件。通过 IMS Connect 可以使多个 IMS 系统与多个 IMS Connect 的客户端程序保持高效的 TCP/IP 的通信。可以简单把 IMS Connect 理解为外部客户端需要访问的 IMS TCP/IP 服务器。通过这个服务器,任何的 TCP/IP 客户端程序可以与 IMS 建立连接。目前,IMS Connect 对 IMS TM 和 IMS DB 都是支持的。图 5 描述了 IMS Connect 组件在整个 IMS 系统中的位置。图中的 OTMA 是开放事务管理访问,是一个访问协议,ODBM 是开放数据库管理器,负责数据库端的接口。

图 5. IMS Connect 组件的位置  

由于 IMS Connect 是一个 TCP/IP 的服务器,就一定需要开放相应的端口,让客户端程序能够与之通信。IMS Connect 有自己的配置文件,在配置文件中能够自定义需要开放的端口,以及一些 TCP/IP 的 Socket 连接的缓冲设置等。

面临的问题

本文涉及的这个项目正是针对 IMS Connect 配置文件升级的测试。由于 IMS Connect 配置文件更新了,相应的 IMS Connect 作为 TCP/IP 服务器所表现的一些特征也会改变。本文以 IMS Connect 的最大 Socket 连接数配置参数(MAXSOC)为例进行说明。

测试的流程如下:

  1. 创建 IMS Connect 配置文件 HWSCFG01
  2. 设置 HWSCFG01 中的 MAXSOC = 60(默认值 50)
  3. 使用 HWSCFG01 配置文件重新启动 IMS Connect
  4. 输入 IMS Connect 查看配置参数命令(VIEWHWS),查看 IMS Connect 的最新参数 MAXSOC 是否已经和预期的 60 匹配
  5. 输入 IMS Connect 查看工作状况的命令(QUERY MEMBER),确保 IMS Connect 按照新的 MAXSOC 参数工作
  6. 模拟客户端程序发送最大值的 Socket 连接测试 IMS Connect 能按照预期的工作,当到达峰值时拒绝连接。

按照这个测试流程,本文需要实现的情况是在开放平台上创建多个配置文件(HWSCFG01 ~ HWSCFGxx),以边界值测试法尽量覆盖可能的最大 Socket 参数,确保 IMS Connect 正确的工作。图 6 描述了这个测试环境的示意图。

图 6. 项目测试环境示意图  

如果所有的工作都在主机环境上进行无疑会减少很多不必要的麻烦,但是由于测试的后续工作主要在模拟客户端发送 Socket 连接以及判断测试是否被拒绝上,所以项目经理选择了在开放平台上做这个交互式的测试。所以本项目的前期工作无疑是解决如何在开放平台与 IBM 大型主机之间进行文件传输的问题。

解决方法及实现细节

本文在测试 IMS Connect 项目时,使用了 Rational Functional Tester(RFT) 和 Rational Functional Tester Extension (FTE,一个 z/OS 终端 3270 和 5250 的模拟界面)两个工具。根据 FTE 的界面,另外有一个 TerminalUtility 的工具 Jar 包,用于对 FTE 进行必要输入和操作。

在 RFT 中使用的自动化测试脚本实际上是 Java 语言的 Script,所以要本文在解决开放平台和 IBM 大型主机之间文件传输问题也采用 Java 语言实现。要将之前所述的测试流程自动化,需要在测试流程 1 之后加入关键的一步,即使用 Java 实现将开放平台的配置文件上传至 IMS Connect 需要读取配置文件的功能。这个功能在底层将会用到 FTP 协议,所以可以按照 FTP 协议的要求来逐步完成。

首先,需要获得 IMS Connect 所在主机 IP 地址,在本案例中将会使用 IMS Connect 的产品的特有命令 QUERY MEMBER 来查看 IMS Connect 的运行状况,从而获得 IP 地址。如下图所示 :

为了用 Socke 编程实现文件通过 FTP 协议上载文件的功能,本文创建了 FTPUpload 类。代码 2 给出该类的结构:

清单 2. FTPUpload 类结构:  

				 
 public class FTPUpload { 

 String ipAddress; 	 // 需要上传文件的 Server 的 IP address 

 String remotDir;  // 需要上传文件到主机的目录

 String localFilePath;  // 需要上传的开放平台文件路径

 String userName;  // 用户名

 String passWord;  // 密码

 Socket controlSocket;// 控制用 Socket 

 public PrintWriter controlOutput;// 控制输出用的流

 public BufferedReader controlInput;// 控制输入用的流

 final int controlPort = 21;// FTP 的控制用端口

 ServerSocket serverDataSocket; 

   // 构造函数
 FTPUpload(String ipAddress, String username, String password, 
 String remotDir, String localFilePath ){ …… } 

 // 由 ipAddress 和 controlPort 号构造 Socket,形成控制用的流
 public void openConnection(String host) throws IOException, 
 UnknownHostException { …… } 
   
 // 关闭控制用的 Socket 
 public void closeConnection() throws IOException { …… } 

 // 登陆 FTP 服务器
 public void login() { …… } 

 // 改变远程的目录
 public void changeRemDir() { …… } 

 // 将文件由本地上传至服务器
 Public void uploadFile(String remoteFileName){ …… } 
	
 // 构造与服务器交换数据用的 Socket 
 // 再用 PORT 命令将端口通知服务器
 public Socket dataConnection(String ctrlcmd) { …… } 

 // 根据 type 的输入选择不同的传输类型(1-ASCII 2-Binary)
 public void transferType(int type){ …… } 

……
……
 } 

从结构可以看出,该类有十个基本属性。其中,IBM 主机的 IP 地址、需要的访问账号、密码,本地需要上传的文件目录以及上传需要的远程路径,这个五个属性需要在构造该类的时候给出以便其他方法的执行:

上一页  1 2 3 4  下一页

Tags:使用 Java Socket

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接