将 Eclipse 插件作为 Web 服务公开

将 Eclipse 框架扩展到服务器端

随着开放服务网关协议(Open Services Gateway Initiative,OSGi)服务器端实现最近的发展,您现在可以将传统的 Eclipse 插件扩展为 Web 服务了。使用 Eclipse Equinox Incubator 服务器端项目(这是一个可在应用程序服务器上部署的 OSGi 框架实现),您可以在 Web 应用程序服务器中对 Eclipse 插件进行打包和动态加载。您可以将这些插件作为 Web 服务来公开,同时允许它们与旨在用于客户端应用程序的其他插件交互。本教程介绍如何利用此方法在 Web 上发挥 Eclipse Rich Client Platform (RCP) 的强大功能。

Kelvin X. Jiang (kxj1@columbia.edu), 学生

Kelvin Jiang photoKelvin Jiang 是一名在哥伦比亚大学主修计算机科学的四年级学生,最近刚从 IBM 天才孵化计划 (Extreme Blue internship program) 实习完毕。Kelvin 曾研究过从操作系统和数据库到经济学与统计学的广泛主题,并有志于在毕业后直接从事业务与技术咨询类职业。2006 年夏天,Jiang 在加利福尼亚圣何塞的 Almaden 研究中心开发了一个服务框架,用于在 Eclipse Open Healthcare Framework 中交换医疗信息。在 IBM 工作之前,他开发过旗舰 Web 产品的用户界面,例如 Flowgo 和 MadBlast,并为广告客户提供咨询,例如 Sony Ericsson 和 Chase for eUniverse Inc.,后者是位于加利福尼亚洛杉矶的领先 Internet 内容提供商。在工作之余,Kelvin 是一名活跃的壁球运动员和摄影师。



Melih Onvural (monvura@ncsu.edu), 学生

Melih Onvural photoMelih Onvural 是一名在北卡罗莱纳州立大学攻读计算机科学和经济学双学士/硕士学位的高年级学生,最近刚从 IBM 天才孵化计划 (Extreme Blue internship program) 实习完毕。他当前在 Vincent Freeh 博士的指导下从事研究,并作为志愿者参与 Eclipse Open Healthcare Framework 项目的工作。他的兴趣包括当足球教练、阅读历史纪实和养金鱼。



2007 年 5 月 21 日

开始之前

关于本教程

本教程采用 Equinox 服务器端技术并添加 Web 服务功能,以创建一个基于 Eclipse 插件的面向服务的体系结构(Service Oriented Architecture,SOA)。大多数人都将 Eclipse 描述为一个 IDE,可用于简化基于 Java 的应用程序开发。然而,支撑该 IDE 的是一个称为“Eclipse Rich Client Platform (RCP) 层”的基础,它使得 Eclipse 平台可扩展,而且功能非常强大。该层是在 Eclipse Equinox 项目中开发的,此项目是 OSGi 框架的一个实例。通过 OSGi 的强大功能,该层还支持“放置并重新启动 (drop-and-restart)”插件安装模型。在 Eclipse 3.2 中,以前支持将 Eclipse RCP 层作为客户端应用程序的技术现在还可用于服务器端。通过 Eclipse Equinox 项目的工作,现在 Equinox 服务器端允许您将 Eclipse 框架的强大功能和可扩展性扩展到客户端应用程序之外。

目标

本教程循序渐进地介绍如何使用 Eclipse Equinox 来将一个“Hello World”Eclipse 插件转换为 Web 服务,然后解释如何在 Axis 中部署它。

先决条件

读者应该熟悉 Eclipse 插件、Web 服务和 Web 应用程序服务器(例如 Tomcat)。本教程利用了部署在 Apache Tomcat 5.5.x 中的 Eclipse Equinox V3.2。它还使用 Apache Axis 1.x. 作为 Java Web 服务的基础。本教程假设读者以前有过使用 Apache Tomcat、Apache Axis 和 Eclipse 开发环境(包括基础插件开发)的经验。在开始之前,熟悉服务器端环境中的 Eclipse Equinox 是很有帮助的。您将在本教程的“参考资料”部分找到相关信息。

系统要求

本教程的唯一系统要求是运行的应用程序服务器、Eclipse 应用程序和对必要包的访问。


使用 Eclipse 插件和 Apache Axis 来创建 Web 服务

步骤 1. 应用程序环境准备

在开始之前,设置一个最新 Apache Tomcat 版本(在本文撰写之际为 V5.5.17)的干净安装。我们仅在 Tomcat 上测试过本教程,主要是因为 Equinox 服务器端 Servlet 仅在 Tomcat 中进行过测试。

首先部署 Eclipse Equinox 服务器端 WAR 文件。您可以从参考资料部分列出的 Eclipse Equinox Server-Side Incubator 获取此文件。

部署 Equinox Servlet 以后,通过带 run 参数运行 catalina.sh/catalina.bat 脚本来以交互式模式重新启动 Tomcat。您现在应该收到一个 osgi 提示符(请注意,您可能必须按一次回车键才能收到该提示符)。此时存在多个选项可供使用,如果从未使用过此框架,您应该花时间使自己熟悉各个选项。输入“Help”将为您提供命令列表。ss 命令在此时是最重要的,因为它提供所有已安装包的列表,如图 1 所示。

图 1. 包列表
图 1. 包列表

现在您已经准备好在服务器端环境中安装和运行 Eclipse 插件。

步骤 2. 准备 Apache Axis

我们的目标是向您介绍如何使用 Web 服务来向外部平台公开 Eclipse 插件提供的功能。为实现这个目的,您可以采用多种途径。为避免一切都从头再来,我们选择 Apache Axis 来充当我们的 Web 服务/SOAP 包装。在本教程中,我们将使用 Apache Axis 1.4;然而,只需稍作修改,您也可以使用 Axis 2。Apache Axis 的优点之一是它能够静态或动态地部署 Web 服务。在本教程中,我们将仅使用静态部署,主要是受包在此框架中的交互方式的影响。

准备 Apache Axis 以充当 Eclipse 插件所需的过程超出了本文的范围。然而,您可以在下载部分找到用于供本教程使用的准备好的包。

步骤 3. 创建我们的 Web 服务

Apache Axis 是一个用于从 Java 类创建 Web 服务的易于使用的优秀工具。创建 Web 服务可以像创建一个 Java 类一样简单,只需为复杂类型提供映射、配置部署概要并部署它。为我们的 Eclipse 插件构建 Web 服务就是这样简单。

在决定如何作为 Web 服务来公开 Eclipse 插件功能时,您有多个选项,其中包括:

  1. 创建 Web 服务类并将它们与 Eclipse 插件直接包括在一起。
  2. 创建带 Web 服务类的 Eclipse 插件,该 Web 服务类直接调用其他 Eclipse 插件。
  3. 创建带 Web 服务类的 Eclipse 插件,该 Web 服务类调用某个适配器层。适配器层可以提供任何必要的数据转换,然后调用 Eclipse 插件。

为简单起见,我们将在本教程中使用选项 1。然而,在有多个 Eclipse 插件提供众多服务的环境中,可以使用选项 2 或选项 3,以便于使用多个不同的系统。

假设有一个仅返回字符串“Hello, World!”的 Eclipse 插件,并且您希望将它作为 Web 服务来公开。虽然此插件没有利用 Eclipse Equinox 框架所提供的任何高级功能,但它是一个简单例子,您以后可以容易地扩展它以在其他场合提供更有用的功能。

首先,您需要创建一个新的 Eclipse 插件项目。打开 Eclipse IDE 并选择 New Project。在 New Project 对话框中,选择 Plug-in Development,然后选择 Plug-in Project。单击 Next。

图 2. New project 屏幕
图 2. New project 屏幕

输入项目的名称。在本教程中,我们将该项目命名为 com.example.ws。在 Target Platform 下面,选择 OSGi 框架,然后选择 Equinox。单击 Next,然后单击 Finish。单击 Next。

图 3. 选择 OSGi 框架
选择 OSGi 框架

您已在 Eclipse 中成功创建了一个新的插件项目。此时,您将看到一个详细描述该项目的屏幕。如果您不熟悉 Eclipse 插件环境,可以花点时间熟悉一下项目文件。

图 4. 项目属性文件
项目属性文件

现在创建 Eclipse 插件类,Apache Axis 将使用它来生成 Web 服务。右键单击 src 文件夹并选择 New > Class。将该 Java 类命名为 HelloWorldWS 并单击 Finish。

图 5. 创建插件类
创建插件类

您现在已经为编写该插件和 Web 服务类的代码做好了准备。在新的 HelloWorldWS 类中,创建一个方法 HelloWorld,此方法没有参数并且返回类型 String。这里的命名约定可能稍微有点奇怪,但由于这是一个充当 Web 服务的方法,我们将对第一个字符使用大写,这是当今所有 Web 服务的标准。现在从您的方法返回字符串“Hello, World!”并保存该文件。

图 6. “Hello World!”

您已成功创建了 Web 服务类。接下来准备部署到应用程序服务器;但是首先必须告诉该插件允许其他插件查看其内容。这将允许 Apache Axis Servlet(它存在于另一个插件中)查看您刚才创建的类。转到项目概述页(在 Eclipse 编辑器中选择 com.example.ws 选项卡)并选择 Runtime 选项卡。在 Exported Packages 下面,单击 Add 并选择 com.example.ws。现在单击 OK。

图 7. 添加包
添加包

现在您准备导出并安装新创建的 Eclipse 插件。在 Package Explorer 中右键单击项目 com.example.ws,并选择 Export。在 Export 对话框中,选择 Plug-in Development > Deployable plug-ins and fragments。单击 Next。

图 8. 导出包
导出包

选择导出目标目录并单击 Finish。

图 9. 完成导出包
完成导出包

当 Eclipse 导出某个插件时,它将类文件和必要的元数据(包括 MANIFEST.MF 文件)放在一个插件 JAR 文件中。将该 JAR 文件命名为 project_name_version.jar,并将其放在您输入的路径中的 /plugins/ 目录中。我们将使用此 JAR 文件来安装到 Equinox 环境中。

步骤 4. 安装插件

现在您准备将 org.apache.axis 和 com.example.ws 插件包安装到 Equinox 服务器端环境中。您可以通过两种方法来安装插件:

  1. 通过将 JAR 文件直接复制到 Equinox 提供的插件目录中,该目录路径为 {TOMCAT_HOME}/webapps/bridge/WEB-INF/platform/plugins/。放在这里的插件会自动进行安装。
  2. 或者,您也可以使用该框架中的 install 命令来交互式地安装插件。这就是我们将要使用的安装方法。

如果您已经关闭了 Tomcat 交互式窗口,请重新启动它并返回到 osgi 提示符。现在安装 com.example.ws 和 org.apache.axis 包。当 Eclipse 导出这些包时,会向它们追加一个版本号。使用清单 1 中的命令来安装包。

清单 1. 安装包
		install file:/path/to/jar/file/org.apache.axis_1.0.0.jar 
		install file:/path/to/jar/file/com.example.ws_1.0.0.jar

现在再次运行 ss 命令,您的包列表应该与图 10 类似。

图 10. 安装插件后的包清单
安装插件后的包清单

在测试该 Web 服务之前,最后一个步骤是配置 Axis 部署文件 server-config.wsdd。因为您是在执行静态部署,所以需要直接修改 server-config.wsdd 文件。从标准 Axis 分发介质获得此文件,并将其放在 {TOMCAT_HOME}/webapps/bridge/WEB-INF/ 文件夹中。若要定义新的 Web 服务,可以将清单 2 中的服务定义添加到其他已定义的服务。

清单 2. 映射
		<service name="hello-world" provider="java:RPC">
  			<parameter name="allowedMethods" value="HelloWorld"/>
  			<parameter name="className" value="com.example.ws.HelloWorldWS"/>
 		</service>

保存并关闭该文件,然后重新启动 Tomcat。您现在准备测试该 Web 服务。

步骤 5. 测试 Web 服务

首先,验证 Axis 能够看到该 Web 服务。通过不带参数调用 Axis Servlet,它将返回已配置的 Web 服务列表。您可以通过访问 http://localhost:8080/bridge/AxisServlet 来执行此操作。

您应该收到与图 11 类似的页面(可能还定义了其他服务,这是正常的)。

图 11. Web 服务列表
Web 服务列表

务必确保您可以查看提供 HelloWorld 操作的 hello-world 服务。通过单击 WSDL 链接,Axis 将自动生成并显示与该 Web 服务关联的 WSDL。该 WSDL 链接为 http://localhost:8080/bridge/services/hello-world?wsdl

图 12. Web 服务 WSDL 文件
Web 服务 WSDL 文件

利用以下 URL:http://localhost:8080/bridge/services/hello-world?method=HelloWorld,您可以通过调用 HelloWorld 操作来进一步测试该 Web 服务。

图 13. 测试 Web 服务
测试 Web 服务

祝贺您!您已成功地将一个 Eclipse 插件提供的功能作为 Web 服务来公开。

步骤 6. 使用 Web 服务

现在第三方应用程序可以使用该 Web 服务了。其主要目标之一是允许 Eclipse 域之外的应用程序能够利用 Equinox 框架的功能。这些应用程序不仅包括未利用 Eclipse 的标准 Java 应用程序,而且包括使用其他平台和语言(例如,.NET 和 PHP)来编写的应用程序。


结束语

综其所述

要学习此项新技术的功能,下一步会涉及到将 Eclipse 插件与 Web 服务技术集成。Eclipse Open Healthcare Framework (OHF) 项目当前正在通过 OHF Bridge 组件在卫生保健领域从事此项工作。通过 Web 服务,OHF 项目使得纯 Java 环境之外的软件和体系结构可以访问通常仅对在 Eclipse RCP 域中编写的应用程序可用的功能,从而同时允许当前和下一代医学应用程序跨平台进行互操作。此外,对于创建 Mashup、Web 应用程序或使用预先存在的 Eclipse 插件作为后端支持结构的 Web 2.0 门户,这个功能可能非常有用。如果您已经在 Eclipse 中做过这些工作,则可以将它扩展到服务器端。

最后的想法

本教程介绍了如何使用作为 Eclipse Equinox 项目一部分来开发的 Equinox 服务器端技术,从而将 Eclipse 框架很容易地扩展到服务器端。本教程通过演示创建 Apache Axis 的插件模型方法,介绍了如何扩展 Eclipse 框架中的 Web 应用程序功能。现在,Eclipse 的强大功能已在 SOA 架构师的掌握之中,他们无需重新编写大量已经存在的功能即可利用此项新技术,同时还可以利用已建立的框架的优点。


下载

描述名字大小
Bundled Axis packageorgapacheaxis.jar2145KB
Bundled codecomexamplews.jar2KB
zip file of codecomexamplews.zip3KB

参考资料

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=SOA and web services
ArticleID=224115
ArticleTitle=将 Eclipse 插件作为 Web 服务公开
publish-date=05212007