介绍
IBM WebSphere? Transcoding Publisher 是作为客户和服务器之间的 Web 中介的软件应用程序。Transcoding Publisher 的框架是一项称为 Web 中介(Web Intermediaries,WBI,发音为“webby”)的技术。就其核心而言,WBI 是一个 HTTP 请求和响应处理器,它接收请求,然后通过使用叫做代码转换器(transcoder)的程序处理数据流来形成响应。当代码转换器用 WBI API 编写时,它们被称作为 WBI 插件。WBI 插件由一个或多个可编程模块组成。基本上有这样四个不同类型的模块:
- 请求编辑器(Request Editor)修改从客户流向服务器的请求数据。
- 生成器(Generator)从客户处接收请求,并生成响应。
- 响应编辑器(Response Editor)修改流回给客户的响应数据。
- 监视器(Monitor)监视响应,但不改变它。
将这些模块放在一起被称为 MEG(监视器(monitor)、编辑器(editor)和生成器(generator))。除了支持用 WBI API(MEG)写代码转换器外,Transcoding Publisher 还支持用 Java? Servlet API 写代码转换器。这些代码转换器被称作为 MEGlet。关于 Transcoding Publisher 或 MEG 和 MEGlet 更多的信息,请参考随 Transcoding Publisher 一起提供的“管理员指南”和“开发者指南”。
IBM WebSphere Studio Application Developer 是 IBM 最新的应用开发环境,它为使用 Java、J2EE、数据库、JSP?、XML 以及 Web 服务技术构建应用程序提供了一组集成化的工具。Application Developer 还以源代码级的调试器、团队编程和源代码控制工具以及集成化的 Web 应用服务器测试环境为特征。
因为 Application Developer 是 WebSphere Application Server 首选的开发平台,所以它也是开发 Transcoding Publisher 插件的自然平台。在利用 Application Developer 的团队编程功能协作开发和维护代码的同时,Transcoding Publisher 插件开发者可以轻松地使用 Application Developer 创建、编辑和调试代码。在 Application Developer 内,可以容易地调试 Transcoding Publisher 代码,而不必重新启动 Transcoding Publisher 或应用服务器。一旦完全地开发和测试了 Transcoding Publisher 插件代码,程序员可以安全且容易地将插件部署到生产环境。
本文描述了怎样在 WebSphere Studio Application Developer 开发环境中导入和运行 WebSphere Transcoding Publisher,以及怎样使用集成化解决方案开发和调试 WBI 插件。我们希望读者比较熟悉 Java 编程(WBI API)以及使用 Application Developer 和 Transcoding Publisher 进行开发。
系统先决条件
- Microsoft? Windows NT? 4.0 Workstation 或 Windows? 2000 Professional 或 Server
- IBM Java Development Kit 1.3
- IBM WebSphere Studio Application Developer 4.0
- IBM WebSphere Transcoding Publisher 4.0
- Netscape Navigator 或 Microsoft Internet Explorer
在 Application Developer 内运行 Transcoding Publisher
在您能够在 Application Developer 内调试代码转换器之前,为了使 Transcoding Publisher 控制台能够在 Application Developer 中运行,必须完成五个基本步骤:
- 将 Transcoding Publisher 配置为网络代理来运行
- 创建 Transcoding Publisher 工程和导入 WBI API
- 定义构建路径以解析依赖关系
- 定义 Transcoding Publisher 程序参数
- 在 ApplicationDeveloper 环境中运行 Transcoding Publisher 控制台
这其中的几个过程,比如:创建工程、导入 JAR 文件、定义构建路径以及定义程序参数,都具有普遍性,可以适用于 Application Developer 内一般的 Java 编程。其它的,比如配置 Transcoding Publisher 只特定地适用于 Transcoding Publisher。这节描述了怎样满足所有的这些要求。
将 Transcoding Publisher 配置为网络代理来运行
Transcoding Publisher 可以被部署为网络代理、逆向代理、插件式“边缘服务器高速缓存”(Edge Server Caching)代理、WebSphere Application Server 上的过滤器或一组 JavaBeans?。为了通过在 Application Developer 中执行 MEG 和 MEGlet 来对它们进行测试,优先以代理模式运行 Transcoding Publisher。为了检查和/或改变 Transcoding Publisher 的配置,请进行下面的操作:
- 启动“Transcoding Publisher 管理控制台”(Transcoding Publisher Administration Console)。其配置显示在窗口的底部。如果消息显示为 Local Configuration: Network proxy,您可以关闭“Transcoding Publisher 管理控制台”,跳到 创建 Transcoding Publisher 工程和导入 WBI API这一节。否则,继续第 2 步。
- 从菜单选择 Settings => Server Setup。
- 单击 Yes继续。
- 选择 Transcoding Publisher 作为 Network Proxy运行,然后单击 Next。
- 对于防火墙连接类型,选择 None: use direct Internet connection,然后单击 Next。使网络端口保留为缺省值。注意“网络缺省” 简档所列出的端口(极有可能是 8088)。单击 Next。
- 单击 Finish,关闭“Transcoding Publisher 管理控制台”。
创建 Transcoding Publisher 工程和导入 WBI API
为了在 Application Developer 内开发和运行代码转换器,您必须可以访问 WBI API。这是可能的,您将创建一个空的 Java 工程,并从 Transcoding Publisher 目录导入一个包含该 API 的 JAR 文件。为了创建这个 Transcoding Publisher 工程以及将 WBI API 导入到该工程,请进行下面的操作:
- 从 Application Developer 菜单,选择 File => New => Project=> Java => Java Project。单击 Next。
- 在 Project Name 域输入 IBM WTP。单击 Finish。如果 Java 透视图还没有打开,创建 Java 工程将打开 Java 透视图。
- 在 Application Developer Packages 视图,突出显示 IBM WTP 工程。从 Application Developer 菜单,选择 File => Import。
- 选择 File System,然后单击 Next。
- 浏览选择
<WTP_root>/lib
(这里<WTP_root>
是 Transcoding Publisher 被安装的完整路径),然后单击 OK。 - 在左框架中突出显示 lib,在右框架中选择
wtpcommon.jar
。图 1. Import ? File system 对话框
- 单击 Finish。
定义构建路径来解析依赖关系
通过运行随 WBI API 导入的类 com.ibm.wbi.Run
,启动代码转换服务。这个类有存在于其它 JAR 文件中的依赖关系,这些文件是 Transcoding Publisher 所带的。下一步是将这些其它库添加到这个刚刚创建的工程的构建路径中。为了给 IBM WTP 工程定义这个 Java 构建路径,请进行下面的操作:
- 在 Application Developer Packages 视图中,鼠标右键单击 IBM WTP工程并选择 Properties=> Java Build Path。
- 单击 Libraries选项卡。单击 Add JARs。
- 展开 IBM WTP并选择
wtpcommon.jar
。单击 OK。 - 单击 Add Variable。单击 Browse。
- 单击 New。在 Name 域输入 WTP_ROOT。
- 单击 Folder。浏览选择目录
<WTP_root>
(这里<WTP_root>
是 Transcoding Publisher 被安装的完整路径),然后单击 OK。再次单击 OK。 - 选择 WTP_ROOT。单击 OK。让 Path Extension 保留空,然后单击 OK。
- 同样重复第 4 到第 7 步来添加下面的 classpath 变量:
WTP_BIN
,指向目录<WTP_root>/bin
WTP_COM
,指向目录<WTP_root>/com
WTP_PLUGINS
,指向目录<WTP_root>/addedPlugins
- 单击 Add External Jars来浏览目录
<WTP_root>/lib
,然后选择下面的文件(通过按住 Ctrl键,您可以选择多个文件):
HTMLParse.zip
ibmjndi.jar
jh.jar
jndi.jar
jt400.jar
log.jar
NetRexxC.zip
NetRexxR.zip
servlet.jar
WebSphereResources.jar
wtpadmin.jar
wtpserver.jar
wts.jar
xalan.jar
xerces.jar
xpath.jar
- 单击 Open。
- 再次单击 Add External Jars。浏览目录
<java13_root>/lib
(此处<java13_root>
是用来在 Application Developer 之外运行 Transcoding Publisher 的 JDK 的实际路径),然后选择tools.jar
。单击 Open。图 2. 带有所选 tools JAR 文件的 Java Build Path 对话框
- 单击 OK来保存所做的改动。
定义 Transcoding Publisher 程序参数
在您能在 Application Developer 环境中运行 TranscodingPublisher 之前要满足的最后的条件是给 com.ibm.wbi.Run
类设置命令行参数。要完成这一步,请进行下面的操作:
- 在 Application Developer Packages 视图,展开 IBM WTP工程,找到并展开
wtpcommon.jar
。展开包com.ibm.wbi
,找到Run.class
。 - 鼠标右键单击
Run.class
,选择 Properties。 - 在 Execution Arguments 这个标题下,指定 Program Arguments 为
-d "<WTP_root>" -p
,用 Transcoding Publisher 被安装的完整路径替换<WTP_root>
。务必包括引号。图 3. “运行”类属性文件对话框
- 单击 OK来保存该设置。
在 Application Developer 环境中运行 Transcoding Publisher
既然所有的要求都已经满足,那么您可以在 Application Developer 中启动 Transcoding Publisher 控制台了。为了启动该控制台:
- 在 Packages 视图中,突出显示
com.ibm.wbi.Run.class
。 - 在 Application Developer 工具栏上,单击 Run图标( )。
- 如果 Select Launcher 对话框打开,选择 Java Application,然后单击 Next。单击 Finish。
一旦代码转换引擎正常启动,Debug 透视图随底部的 Console 视图一起打开。您可以展开 Console 视图来查看所产生的消息。
图 4. Application Developer 的带有消息显示的“调试控制台”视图
为了验证控制台是工作的:
- 在 Console 视图中,接着输出
Private build Console>
,输入 config,然后按 Enter键。消息 Configuration Name: proxy出现。请注意仍然选中 Debug 透视图。图 5. Application Developer 的带有消息显示的“调试控制台”视图
- 现在输入命令
plugins
,然后按 Enter键。所有在 Transcoding Publisher 中注册过的插件和它们的属性应该被列出。 - 要关闭该控制台,输入命令
shutdown
,然后按 Enter键。一旦完成关闭,在 Debug 透视图左上方的 Processes 视图中,您应该看到Run
进程已被终止。图 6. Application Developer 的带有消息显示的“调试控制台”视图
- 要回到 Java 透视图,单击 图标。
在 Application Develope 中编写和调试 WBI 插件
现在您将通过创建一个简单的 WBI 插件来测试 Transcoding Publisher/Application Developer 开发平台。开发和运行 WBI 插件包括七个基本步骤:
- 开发 WBI 插件
- 创建属性文件
- 封装插件
- 向 Transcoding Publisher 注册该插件
- 配置浏览器
- 修改 Transcoding Publisher 构建路径
- 在 Application Developer 内运行和调试该插件
这其中的几个过程,比如:开发 Java 类、创建资源文件、封装 JAR 文件以及运行和调试 Java 类,具有普遍性,可以适用于在 Application Developer 中的一般 Java 编程。其它的过程,比如向 Transcoding Publisher 注册插件以及配置浏览器只是特定地适用于 Transcoding Publisher。下面的这个样本插件包含一个 MEG,一个当请求 URL http://currenttime/
时在浏览器中显示当前时间的生成器。 WebIntermediaries development kit中提供了与 MEG 编程有关的更多的详细资料。
开发 WBI 插件
为了创建插件和 MEG,请进行下面的操作:
- 从 Application Developer 菜单,选择 File => New => Project=> Java => Java Project,然后单击 Next。
- 在 Project name 域中,输入 Current Time Plugin。单击 Next。
- 单击 Libraries选项卡。
- 单击 Add Jars。
- 展开 IBM WTP并选择
wtpcommon.jar
。将这个库添加到该工程中使您能够访问 WBI API。单击 OK。 - 单击 Finish。
- 在 Packages 视图中,鼠标右键单击 Current Time Plugin,然后选择 New => Package。
- 将该包的名称设置为
com.ibm.wtp.examples
,然后单击 Finish。 - 在 Packages 视图中,鼠标右键单击
com.ibm.wtp.examples
,然后选择 New => Class。 - 将该类的名称设置为
CurrentTimePlugin
,将超类的名称设置为com.ibm.wbi.Plugin
。选择给 Constructors from superclass创建方法存根。单击 Finish。 - 将另一个叫
CurrentTimeGenerator
的类添加到同一包中,这个类的超类是com.ibm.wbi.protocol.http.HttpGenerator
。选择给 Constructors from superclass和 Inherited abstract methods创建方法存根。 - 实现
CurrentTimePlugin.initialize()
和CurrentTimeGenerator.handleRequest(RequestEvent)
。可以在工作区的中间框打开文件的地方修改每个文件。这两个文件完整的源代码可以从本文所提供的下载文件中获得。图 7. Application Developer 的打开 CurrentTimeGenerator.java 源代码的 Java 透视图
创建属性文件
在您可以向 Transcoding Publisher 注册插件之前,您需要定义一个属性文件。该文件定义如插件名称、描述、类以及版本这样的属性。为了创建该属性文件,请进行下面的操作:
- 在 Packages 视图中,突出显示 Current Time Plugin工程。
- 从菜单选择 File => New => Other => Simple => File,然后单击 Next。
- 将文件名设置为
CurrentTimePlugin.prop
。图 8. New File ? File 对话框
- 单击 Finish。
- 可以在工作区的中间框中修改该文件。关于
CurrentTimePlugin.prop
的内容,请参阅下载 ZIP 文件。
封装插件
下一步是创建将被 Transcoding Publisher 用来注册插件的 JAR 文件。为了使用 Application Developer 来完成这些,请完成下面的操作:
- 在 Packages 视图中,突出显示 Current Time Plugin工程。从该菜单选择 File =>Export => JAR file,然后单击 Next。
- 在左窗格中突出显示 Current Time Plugin。在右窗格中选择
CurrentTimePlugin.prop
,并且不选出现在这里的任何其它资源。 - 确保选中 Export generated class files and resources。
- 浏览想要访问的目录,并将该 JAR 文件的文件名指定为
CurrentTimePlugin.jar
。图 9. Application Developer 的 JAR Packager ? JAR Package Specification 对话框
- 单击 Finish。
向 Transcoding Publisher 注册插件
为了向 Transcoding Publisher 注册插件,请进行下面的操作:
- 启动“Transcoding Publisher 管理控制台”。
- 从菜单选择 Register => Transcoder。
- 单击“欢迎”屏幕上的 Next。
- 浏览找到
CurrentTimePlugin.jar
。图 10. Register a Transcoder 对话框
- 单击 Next。
- 接受其它配置的缺省值,单击 Finish。
- 从菜单选择 File => Refresh Server。
配置浏览器
为了配置浏览器使 Transcoding Publisher 可以看见客户发出的请求,请进行下面的操作:
对 Netscape:
- 打开 Netscape 并选择 Edit => Preferences => Advanced =>Proxies。
- 选择 Manual proxy configuration。
- 单击 View。
- 在 HTTP 域,输入 localhost作为地址以及 8088作为端口(或者任何您给 Transcoding Publisher 中的“网络缺省”端口所指定的端口)。如果您不知道您所设置的端口,您可以通过从“Transcoding Publisher 管理控制台”菜单选择 Settings => Proxy Port来检查。
图 11.Netscape 的 Manual Proxy Configuration 对话框
- 持续单击 OK来保存这些设置,直到您回到浏览器。
对于 Internet Explore:
- 打开 Internet Explore 并选择 Tools => Internet Options => Connections => LAN Settings。
- 选择 Use a proxy server并确保 Bypass proxy server for local addresses的确没有被选中。
- 单击 Advanced。
- 在 HTTP 域,输入 localhost作为地址以及 8088作为端口(或者任何您给 Transcoding Publisher 中的“网络缺省”指定的端口号)。如果您不知道您所设置的端口,您可以通过从“Transcoding Publisher 管理控制台”菜单选择 Settings => Proxy Port来检查。
图 12. Internet Explorer 的 Proxy Settings 对话框
- 持续单击 OK来保存这些设置,直到您回到浏览器。
修改 Transcoding Publisher 构建路径
下一步是修改 com.ibm.wbi.Run
classpath 以指向 Current Time Plugin 工程:
- Application Developer 的 Java 透视图中,在 Packages 视图中鼠标右键单击 IBM WTP,然后选择 Properties => Java Build Path => Projects。
- 选择 Current Time Plugin。
- 单击 Order选项卡。
- Current Time Plugin应该出现在列表的底部。突出显示它并单击 Up按键直到它出现在列表的顶部。
- 单击 OK来保存该设置。
将 Current Time Plugin 工程移到构建路径的列表的顶部,这将使 Application Developer 从 Application Developer 环境装入 CurrebtTimePlugin 和 CurrentTimeGenerator,而不是从 Transcoding Publisher 目录结构装入。
在 Application Developer 内运行和调试插件
在再次运行 com.ibm.wbi.Run
之前,在 CurrentTimePlugin.initialize()
中设置一个断点。
- 鼠标右键单击代码行
ctg.setCondition("url~http://currenttime/");
,然后选择 Add => Breakpoint。图 13. Application Developer 的打开 CurrentTimePlugin.initialize 源代码的 Java 透视图
现在您可以准备再次启动 Transcoding Publisher 控制台。
- 在 Packages 视图中,展开 IBM WTP工程和
wtpcommon.jar
来找到并再次突出显示com.ibm.wbi.Run.class
。在 Application Developer 工具栏上单击 Debug图标( )。当控制台在初始化的过程中时,Application Developer Debug 透视图打开,在设置断点的一行停止。命中断点证实插件已正确地向 Transcoding Publisher 注册了以及类装载器使用基于 Application Developer 的类。图 14. Application Developer 的打开 CurrentTimePlugin.java 源代码的 Debug 透视图
- 使用 step 按键来逐步调试其余的代码,直到控制台完成初始化。当您逐步调试的时候,将会有一个对话框提示您输入
wtpcommon.jar
的源文件。如果出现这种情况,在 Archive 域中,单击 Browse Workspace来选择/IBMWTP/wtpcommon.jar
,然后单击 Finish。当 Console 视图在底部显示Private buildConsole>
,您将知道控制台完成了初始化。这将花费一些时间。图 15. Source Attachment ? Locate Source 对话框
- 既然控制台完成了初始化,那么您可以测试 CurrentTimeGenerator。在测试之前,设置另一个断点,这一次在 CurrentTimeGenerator.handleRequest 中设置。
- 打开您的 Web 浏览器,输入 URL http://currenttime/。如果您切换到 Application Developer Debugger,您应该看到第二个断点被命中。(如果第二个断点没有立即命中,您可能需要在控制台中输入命令来重新激活它。)
图 16. Application Developer 的打开 CurrentTimeGenerator.java 源代码的 Debug 透视图
- 在您完成逐步调试其余的代码之后,当前日期和时间出现在浏览器窗口中。
图 17. 显示当前日期和时间的 Web 浏览器
您可以在代码中的任何地方使用断点,并且在代码运行时修改 MEG。如果在中间执行过程中重新编译代码,那么某个操作将会出现故障,因此要仔细领会哪些条件将会引起故障和需要重新启动插件。例如,写到流中,然后重新编译将会抛出严重的异常。
在一些严重异常的情况下,Transcoding Publisher 将禁用插件。如 在 Application Developer 环境中运行 Transcoding Publisher这一节所讲述的,在代码转换控制台使用 plugins
命令来看看您的插件是否仍然被启用。如果没有启用,用 restart
命令来复位 Transcoding Publisher,或者用 shutdown
命令来使它完全停止,然后再次运行 com.ibm.wbi.Run
。
下载的 ZIP 文件还包括三种其它 MEG 类型的每个样本,加上包含 CurrentTimePlugin 的 initialize 方法的代码(这个方法把每个 MEG 添加到插件)。每次添加一个 MEG 是很有帮助的,在任何需要的地方设置断点,这样您就可以看到每一次修改的效果。因为 Current Time Plugin 工程是在 IBM WTP 工程的构建路径中被装入的,所以您不必每次为了测试而更新它时重新封装或重新注册插件。
结束语
现在您已经成功地运行了这个样本 WBI 插件。您历经了在 Application Developer 开发环境中导入和运行 Transcoding Publisher 的全过程。您学习了怎样将 Transcoding Publisher 文件导入到 Application Developer 中,怎样配置 Application Developer 以满足 Transcoding Publisher 运行时环境的要求以及怎样在 Application Developer 环境中运行 Transcoding Publisher。然后,您使用集成化的解决方案开发和调试了 WBI 插件。这种开发环境还可以用于更复杂的代码转换器。
Application Developer 的团队编程、源代码控制和源代码级调试工具使之成为 Transcoding Publisher 的理想开发环境。使用 Application Developer,程序员可以快速地检查和集成团队代码的改变,可以快速地测试和调试代码而不用重新启动应用程序以及可以安全地将代码存储在资源库中,所有这些能提高程序员的生产力。
下载Name | Size | Download method | |||||||||
Plunket_download.zip | 3 KB | HTTP | |||||||||