内容


使用 WebSphere Message Broker 定制 FTP

Comments

简介

IBM® WebSphere® Message Broker(后面简称为 Message Broker)是针对涉及信息流的解决方案的 IBM 企业服务总线产品。简言之,这些信息流会获得一个输入信息,对它应用某种转换,然后使用 内置 Message Broker 节点 将它交付给终端节点 (end-point)。

FileInputFileOutput 节点分别用于在文件系统与 FYP 服务器之间读取和写入文件。不过,这两个节点都不支持自定义 FTP 命令。

图 1
图 1
图 1

一个典型的 FTP 会话

以下的记录显示了一个从 Linux® 机器到 z/OS® 服务器上的 MVS® 系统的典型会话:

示例 1. 从 Linux 到 z/OS 的 FTP 会话
nsubrahm@nsubrahm:~$ ftp big.blue.server 
Connected to 0.0.0.0. 
220-TCPFTP1 IBM FTP CS V1R12 at big.blue.server, 10:03:31 on 2011-03-16. 
220 Connection will close if idle for more than 5 minutes. 
Name (0.0.0.0:nsubrahm): USERID0 
331 Send password please. 
Password: 
230 USERID0 is logged on.  Working directory is "USERID0.". 
Remote system type is MVS. 
ftp> site RECFM=FB LRECL=100 BLKSIZE=27900 
200 SITE command was accepted 
ftp> put Messages.csv 'A.TEST.GDG(+1)' 
local: Messages.csv remote: 'A.TEST.GDG(+1)' 
200 Port request OK. 
125 Storing data set A.TEST.GDG.G0003V00 
250 Transfer completed successfully. 
336887 bytes sent in 1.17 secs (281.2 kB/s) 
ftp> bye 
221 Quit command received. Goodbye.

这个 FTP 会话使用 SITE 命令为目标数据集传递信息。Message Broker FileOutput 节点并不具备此功能,因此本文会介绍如何实现它。

Java 解决方案

Java™ 解决方案基于 Apache Commons Net 包。如 FTPClient 中的 javadoc 所述,首先连接到 FTP 服务器,使用您的用户名和密码登录,然后使用 getput 命令。以下是一个样例实现。

示例 2. 使用 Apache Commons Net 的FTP 的样例实现
package fileTransferProtocol; 

import org.apache.commons.net.ftp.*; 
import java.io.*; 

public class FileTransferProtocol { 
     public static void main (String [ ] args)  { 
     String serverName ="my.zos.mainframe"  ; 
     String userName ="userid" ; 
     String password ="********" ; 
     FTPClient ftp = new FTPClient() ; 
     //Connect to the server 
     try { ftp.connect (serverName) ; 
          String replyText =ftp.getReplyString()  ; 
          System.out.println (replyText) ; 
     } 
     catch (Exception  e)  { 
               e.printStackTrace () ; 
     } 
     //Login to the server 
     try {   ftp.login (userName, password) ; 
               String replyText = ftp.getReplyString() ; 
               System.out.println (replyText); 
     } catch (Exception e) { 
               e.printStackTrace(); 
     } 
     //Tell server that the file will have JCL records 
     try {   ftp.site ("RECFM=FB LRECL=140") ; 
               String replyText = ftp.getReplyString() ; 
               System.out.println (replyText) ; 
     } 
     catch (Exception e) { 
               e.printStackTrace() ; 
     } 
     //Submit the job from the text file. 
     try {   FileInputStream inputStream = new FileInputStream ("/my/source/file") ; 
               ftp.storeFile (serverName,inputStream) ; 
               String replyText = ftp.getReplyString() ; 
               System.out.println (replyText) ; 
     } 
     catch (Exception e) { 
               e.printStackTrace() ; 
     } 
     //Quit the server 
     try { ftp.quit() ; 
     } 
     catch (Exception e) { 
                e.printStackTrace() ; 
     } 
  } 
}

使用 JavaCompute 节点

前面的小节展示了将文件从本地发送至远程文件系统的实现样例。这一节会介绍如何在 Message Broker JavaCompute 节点中包装此实现。

Message Broker 信息中心有大量的 JavaCompute 节点资料。但有一点需要强调:前面介绍的样例实现要求 Commons Net JAR 文件在 CLASSPATH 上是可用的。同样的,使用 JavaCompute 节点时,您需要在外部 JAR 文件中添加依赖关系。有关更多信息,请参阅 Message Broker 信息中心的 添加 Java 代码依赖项

JavaCompute 节点的 Java 类的类型

Message Broker Toolkit 提供了基于 JavaCompute 节点预期功能的类模板。有关以下所列模板的更多信息,请参阅 Message Broker 信息中心的 Creating Java code for a JavaCompute node

  • 过滤器 - 过滤传入的信息
  • 修改 - 修改传入的信息
  • 创建 - 创建新的信息

模板的选择取决于特定的信息流,例如,传入的信息在文件转换后是否会传播到后续节点,或者完成文件转换后是否不会再有进一步的动作,以至于没有信息需要传播。

Java 类的描述

这一节将描述用来定制 FTP 的 Java 类。

FTP 会话的基本输入

通过 FTP 转换文件所需的重要项目为:

  • 服务器主机名或 IP 地址
  • 用户 ID 和密码
  • 源文件和目标文件

对于利用 FTPClient 将数据从 Apache Commons Net 传送到实际传输文件的类,此信息应该是可用的。本文中显示的类接受上述值作为 java.util.Properties 对象,或者将它作为 “名称-值” 对的文件名。在使用 Properties 对象时,您有动态设置这些值的优势。有了这个文件,就不再需要硬编码值。同时,通过设置适当的访问控制,只能通过 broker 运行所用的 ID 来读取该文件。

Properties 对象

由于不同的 FTP 会话可能需要不同的自定义命令,Properties 对象不必一直是同一个对象。本文描述了一个实现,其中需要通过指定数据集控制块(DCB)和一些空间值,使用 FTP 会话将某个文件提供给 z/OS 服务器。Properties 对象的名称-值对如下所示:

示例 3. Properties 对象的名称 - 值对样例
INTF1.server=big.blue.server 
INTF1.userid=USERID01 
INTF1.password=HeyThere 
INTF1.targetDSN='A.DUMMY.GDG(+1)' 
INTF1.targetDSN.RECFM=FB 
INTF1.targetDSN.LRECL=100 
INTF1.targetDSN.BLKSIZE=27900 
INTF1.targetDSN.pri=10 
INTF1.targetDSN.sec=5 
INTF1.targetDSN.unit=CYL

调用

以下是调用自定义 FTP 类的 JavaCompute 节点的样例:

示例 4. 调用自定义节点类的 JavaCompute 节点的代码样例
package customFTP; 

import com.ibm.broker.javacompute.MbJavaComputeNode; 
import com.ibm.broker.plugin.*; 

public class FTPMessageFlow_JC01 extends MbJavaComputeNode { 
   public void evaluate(MbMessageAssembly inAssembly) throws MbException { 
      MbOutputTerminal out = getOutputTerminal("out"); 
      MbMessage inMessage = inAssembly.getMessage(); 

      MbMessage outMessage = new MbMessage(inMessage); 
      MbMessageAssembly outAssembly = new MbMessageAssembly(inAssembly,outMessage); 

      try { 
         /** 
          * All logic for this JavaCompute node. 
          * 
          * Build Properties object here OR 
          * Provide file name here 
          * 
          * Invoke custom FTP here 
          * 
          */ 
      } catch (Exception e) { 
         /** 
          * Handle exceptions 
          */ 
   } finally { 
      outMessage.clearMessage(); 
   } 
}

如以上代码所示,我们要先执行所需的业务逻辑,然后准备 Properties 对象,或者传递文件名,以便调用自定义 FTP 类。

信息流样例

以下是两个通过 FTP 将文件发送到目标机器的信息流样例。

连接到 FileOutput 节点

在此信息流中,从 FileOutput 节点中的 End of data 终端开始连接 JavaCompute 节点中 的 In 终端。在这个设置中,在完全写入文件后,就会准备通过 FTP 交付它。为了简便起见,我们通过从 FileInput 节点中进行复制,创建了要传输的文件。在课程实践中,可能还会创建更复杂的文件。

图 2. 信息流
信息流
信息流

运行信息流

在 JavaCompute 节点中,提到了包含名称-值对的文件的名称。另外,JavaCompute 节点可以手动创建 Properties 对象并传递它。然后,在 FI01 中创建一个预期的文件名。现在,就可以将信息流打包成一个 BAR 文件,然后部署并运行它。

连接到 MQInput 节点

在这个信息流中,从 MQInput 节点的 Out 终端开始连接 JavaCompute 节点的 In 终端。在这个设置中,我们期望创建与要交付的文件同名的信息,然后使用该名称来实际交付文件。在课程实践中,创建信息可能会更复杂。

图 3. 信息流
信息流

运行信息流

在 JavaCompute 节点中,提到了拥有 “名称-值” 对的文件的名称。另外,JavaCompute 节点可以手动创建 Properties 对象并传递它。然后,为消息设置了一个与要交付的文件相同的名称。现在,可以将信息流打包成一个 BAR 文件,然后部署并运行它。

可从 文章底部下载的 zip 文件中 有四个 Message Broker 项目,如上面所述,每个信息流有两个项目前。每一对项目中,其中一个项目包含信息流,另一个包含 Java 代码。您可以将这些 zip 文件导入您的工作区,然后在 broker 上创建并部署它们。可能需要对文件(比如 MQ 节点)进行一些特定于您的环境的更改。

结束语

本文介绍了如何使用 WebSphere Message Broker JavaCompute 节点中的 Apache Commons Net 来启用 FTP 的自定义命令,您可以扩展这个解决方案,以支持使用 SSH FTP 和 FTP-SSL 的安全 FTP,从而支持 Message Broker 使用所有的 FTP 功能。


下载资源


相关主题

  • WebSphere Message Broker 资源
    • WebSphere Message Broker 开发人员资源页面
      这些技术资源可帮助您使用 WebSphere Message Broker 实现连接、统一数据转换以及异构服务、应用程序与平台的企业级整合,以支持您的 SOA。
    • WebSphere Message Broker 产品页面
      产品说明、产品新闻、培训信息、支持信息等。
    • WebSphere Message Broker V7 信息中心
      针对所有 WebSphere Message Broker V7 文档的一个 Web 门户网站,其中有关于安装、配置和使用 WebSphere Message Broker 环境的概念、任务和参考信息。
    • WebSphere Message Broker V7 的新特性
      WebSphere Message Broker V7 提供了通用连接性,能够从一个地方到另一个地方路由和转换消息。因为提供了简单的编程模式和功能强大的操作管理界面,它可以使复杂的应用程序集成解决方案变得更易于开发、部署和维护。这篇文章介绍了 V7 中主要的增强。
    • 下载 WebSphere Message Broker V7 的免费使用版
      WebSphere Message Broker V7 是在异构 IT 环境中实现通用连接性和转换的 ESB built 版本。它能实时将业务事件生成的信息和数据分发给整个已扩展企业内外的人员、应用程序和设备。
    • WebSphere Message Broker 文档库
      WebSphere Message Broker 规范和手册。
    • WebSphere Message Broker 论坛
      获取关于技术问题的解答,并与其他 Message Broker 用户共享您的专业知识。
    • WebSphere Message Broker 支持页面
      关于支持问题及其解决方案的可搜索数据库,包括下载、补丁、问题跟踪等。
    • Apache Commons Net 库
      该库可以帮助您实现许多基本的 Internet 协议的客户端。该库提供了基本协议的访问,低级别的抽象,使程序员可以构建自己的自定义实现。
  • WebSphere 资源
    • developerWorks WebSphere 开发人员资源
      面向使用 WebSphere 产品的开发人员的技术信息和资源。developerWorks WebSphere 提供产品下载、how-to 信息、支持资源以及一个免费技术库,该技术库包含 2000 多篇技术文章、教程、最佳实践、IBM 红皮书和在线手册。无论您是初学者,专家,或介于两者之间,您将找到使用基于开放标准的 WebSphere 软件平台构建企业级 SOA 解决方案所需要的方法。
    • developerWorks WebSphere 应用程序连通性开发人员资源
      帮助您构建 WebSphere 应用程序连通性和业务集成解决方案的 how-to 文章、下载、教程、培训、产品信息等资源。
    • developerWorks WebSphere SOA 和 Web 服务开发人员资源
      How-to 文章、下载、教育、培训、产品信息等资源,帮助您设计和构建 WebSphere SOA 和 Web 服务解决方案。
    • 最流行的 WebSphere 试用版下载
      免费下载关键 WebSphere 产品试用版。
    • WebSphere 论坛
      针对特定产品的论坛,在那里获取您的技术问题的解答,并与其他 WebSphere 用户分享您的专业知识。
    • WebSphere on-demand 演示
      下载并观看 WebSphere on-demand 演示,了解 WebSphere 产品和技术如何帮助您的企业应对快速变化和日益复杂的商业环境。
    • developerWorks WebSphere 每周新闻简讯
      developerWorks 新闻简讯提供了您感兴趣的主题的最新文章和信息。除 WebSphere 以外,还可以选择 Java、Linux、Open source、Rational、SOA、Web 服务和其他主题。立即订阅并设计您的定制邮件。
    • IBM Press 的 WebSphere 相关图书
      通过 Barnes & Noble 实现便捷的在线订购。
    • 与 WebSphere 有关的活动
      世界各地针对 WebSphere 开发人员的会议、商贸展览、网络广播和其他活动。
  • developerWorks 资源
    • IBM 软件产品试用版下载
      免费下载 IBM® DB2®、Lotus®、Rational®、Tivoli® 和 WebSphere® 产品试用版。
    • developerWorks 博客
      加入 developerWorks 用户和作者、IBM 编辑和开发人员的谈话。
    • developerWorks tech briefings
      由 IBM 专家主持的免费技术活动可以帮助您加快学习进度,从最困难的软件项目中取得成功。这些在世界各地举行的活动包括一小时的虚拟简报、半天到全天的真实活动等。
    • developerWorks 播客
      >收听新颖有趣的软件创新者访谈和讨论。
    • IBM Education Assistant
      多媒体教育模块集合,帮助您更好地理解 IBM 软件产品,更高效地使用它们来满足您的业务需求。

评论

添加或订阅评论,请先登录注册

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=WebSphere
ArticleID=767360
ArticleTitle=使用 WebSphere Message Broker 定制 FTP
publish-date=10242011