24资源网

24资源分享网,分享资源,收集整理资源,有态度的分享资源网

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

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

图 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服务器,使用您的用户名和密码登录,然后使用get或put命令。以下是一个样例实现。

  示例 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文件中添加依赖关系。

  JavaCompute节点的Java类的类型

  Message Broker Toolkit提供了基于JavaCompute节点预期功能的类模板。

· 过滤器——过滤传入的信息

· 修改——修改传入的信息

· 创建——创建新的信息

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

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

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

图 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服务器,使用您的用户名和密码登录,然后使用get或put命令。以下是一个样例实现。

  示例 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文件中添加依赖关系。

  JavaCompute节点的Java类的类型

  Message Broker Toolkit提供了基于JavaCompute节点预期功能的类模板。

· 过滤器——过滤传入的信息

· 修改——修改传入的信息

· 创建——创建新的信息

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

  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功能。

               
发表评论