http://www-128.ibm.com/developerworks/cn/opensource/os-beehive/
开源 SOA 工具的编程技术
Kunal Mittal
门户/J2EE 架构设计师和咨询顾问
2005 年 5 月 09 日
Beehive 是一个新的 Apache 项目,用于简化 Java 2 Platform, Enterprise Edition(J2EE)以及 Web 服务编程。本文将介绍如何使用 Beehive,并概要介绍 Pollinate,这是一个用于创建 Beehive 应用程序的 Eclipse 插件。
BEA Systems Inc. 和 Apache 在 2004 年 5 月 25 日宣布了 Beehive 项目的诞生。这个项目着重用于简化 Java 2 Platform, Enterprise Edition(J2EE)和 Web 服务编程,它使用了注释(annotation)的概念,这种技术很快就会成为 Java 技术的一部分。面向服务的架构(SOA)开发也是这个项目的一个重点。
Beehive 是按照 Apache License V2.0 许可协议进行发布的,BEA 对此项目进行了广泛的支持。现在,大约有一半的 Beehive 代码提交者都是 BEA 公司的雇员,这清楚地表明社区中还有其他一些人正在对这个项目贡献着力量。
Apache Beehive 项目创建是为了支持以下功能:
- Java Page Flow (JPF)技术,也称为(NetUI)
- 控件
- 基于 Java Specification Request(JSR)181 的 Web 服务
最终,这些技术将一起汇集到 Model-ViewController(MVC)编程模型中,如图 1 所示。JPF 技术形成控件器层。NetUI 标记库则会参与视图层。模型层是使用 Java 控件构建的。
图 1. MVC 模型和 Apache Beehive 技术
Pollinate 插件 NetUI、控件和 Web 服务技术一起用于简化 J2EE 和 SOA 的开发。另外还有一个名为 Pollinate 的 Eclipse 插件项目也在进展之中。这个项目可以允许开发人员使用 Eclipse 来构建 Apache Beehive 应用程序。我相信其他 IDE,例如 IntelliJ 和 JBuilder 很快也会开始支持 Apache Beehive。 |
下面让我们更详细地来了解一下 Apache Beehive 中使用的各种技术。
NetUI 还是 JPF
如果您曾经使用过 BEA WebLogic Workshop V8.1,就可能使用过 JPF 技术,它是直接在 Struts 之上构建的。正如您可能了解的一样,Struts 是目前市场中采用最为广泛的一种 MVC 框架。因此,如果 JPF 是在 Struts 之上构建的,那么为什么不使用 Struts 呢?
JPF 充分发挥了 Structs 的关键功能,但却省略了 Struts 所需要的很多繁琐工作(指对部署配置文件的管理,例如 struts-config.xml 文件)。在 BEA 的 Page Flows 最初版本中,引入了一种由 BEA WebLogic Workshop 自动生成和维护的声明性编程语言。与之相反,Apache Beehive 版本的 Page Flows 使用 JSR 175 来定义自己的元数据。JSR 175 是一种元数据规范,它可以让您降低 J2EE 的编码量。
JPF 技术中也提供了一组标签库,名为 NetUI。在典型的 MVC 设计模式中,JPF 用来构成控制器层。NetUI 标签库可以在表示层中提供帮助。实际上,您可以让一个 Web 应用程序同时使用 Struts 和 JPF。
清单 1 给出了一个简单的 JPF 控制器,它会打印 HelloWorld。
清单 1. 简单的 HelloWorld JPF 控制器
import org.apache.beehive.netui.pageflow.PageFlowController;
import org.apache.beehive.netui.pageflow.annotations.Jpf;
import org.apache.beehive.netui.pageflow.Forward;
@Jpf.Controller (
simpleActions= {
@Jpf.SimpleAction (name="cancel", path="begin.do")
}
)
public class HelloWorldController extends PageFlowController {
@Jpf.Action (
forwards= {
@Jpf.Forward (name="success", path="helloworld.jsp")
}
)
public Forward begin() {
return new Forward("success");
}
}
|
注意,这里使用了注释。我首先使用 @Jpf.Controller
注释来定义这个类是一个 JPF 控制器。@Jpf.SimpleAction
注释定义了这个控制器中的操作。这些注释与 Struts 中操作(action)的概念类似。@Jpf.Action
注释定义了操作本身。@Jpf.Forward
注释定义了在流程的下一个阶段会发生什么。这个注释与 Struts 配置文件中信息的概念类似。
前向注释(forward annotation)中引用的 HelloWorld JSP 文件在本文中并没有介绍。对于这个例子来说,它可以是任何 JSP 文件,只要包含一行向屏幕上打印 HelloWorld 信息的代码即可。
NetUI 技术还包括 3 个标签库,它们的基本功能是简化 JSP 文件的开发,并在视图层和控制器层之间提供自动的数据绑定。这些标签都可以支持 JavaScript,因此您可以像标准的 HTML 标签(例如 input
和 select
)一样使用它们。这些标签库包括:
- NetUI
- 这个标签库包括与 struts-html 标签类似的一些标签。
- NetUI-data
- NetUI-data 标签库用来将表单和控制器中的数据绑定到 JSP 文件中。它可以让您快速显示数据列表,例如搜索结果。
- NetUI-template
- 您可以在 JSP 文件中使用 NetUI-template 标签库来创建子节(或模板)。
有关 NetUI 标签库的更多信息,请参阅 参考资料。
控件
控件是一种非常有趣的技术。控件对基于 SOA 的开发提供了一层很好的抽象和封装。控件是一些封装在 EJB 或消息驱动 bean 中的业务逻辑组件。它们为所有的资源集(数据库、外部系统,等等)提供了一组通用的接口。您可以将控件拖放到 Java 应用程序或 Web 服务中,从而为应用程序或 Web 服务提供这种功能。这可以帮助加速开发过程。
与 Apache Beehive 的其他部分类似,控件也大量使用了 JSR 175 注释。控件通过提供一种允许访问各种类型的资源的统一客户机模型,从而降低了作为一个 J2EE 资源的客户机的复杂性和学习曲线。
清单 2 给出了一个 HelloWorld Java 控件。
清单 2. HelloWorld Java 控件
import org.apache.beehive.controls.api.bean.*;
@ControlInterface
public interface HelloWorld {
String sayHelloWorld ();
}
|
在这个例子中,我定义了一个简单的 ControlInterface。如果您去除 @ControlInterface
注释,这就是一个简单的 Java 接口类。清单 3 显示了 HelloWorld 控件接口的控件实现。
清单 3. HelloWorld Java 控件实现
import org.apache.beehive.controls.api.bean.*;
@ControlImplementation
public class HelloImpl implements HelloWorld {
public String sayHelloWorld () {
return "hello!";
}
}
|
这个清单中的代码非常简单,不是吗?现在,让我们使用这个例子构建一个 Web 服务。
使用 JSR 181 的 Web 服务
JSR 181 是基于 JSR 171 注释标准的 Web 服务所使用的一种元数据标准。Apache Beehive 使用 JSR 181 来定义一组注释,您可以使用它们将任何 Java 类暴露为 Web 服务。Beehive Web 服务开发背后的思想是开发者编写一个简单的 Java 类,然后将其功能暴露为一个 Web 服务。
清单 4 给出了一个简单的 HelloWorld Web 服务。
清单 4. 简单的 HelloWorld Web 服务
import javax.jws.WebService;
import javax.jws.WebMethod;
@WebService(
targetNamespace="targetNamespace =
http://www.openuri.org/my/web/service/wsdl"
)
public class HelloWorld {
@WebMethod
public String sayHelloWorld() {
return "Hello world!";
}
}
|
在这个清单中,如果您删除黑体表示的元素,那么它就是一个简单的 Java 类。使用 @WebService
和 @WebMethod
注释,我们已经将这个简单的 Java 类暴露为一个 Web 服务了。
现在,使用 Apache Beehive 技术,您就可以更好地理解如何开始在您的项目中使用 Apache Beehive 了。
使用 Eclipse 来构建 Beehive 应用程序
Eclipse Pollinate 项目是目前惟一支持 Apache Beehive 开发的 IDE 环境。这种限制随着将来 Apache Beehive 的不断发展而会不断变化。基本上来说,Pollinate 是 Eclipse 的一个可以支持 Beehive 框架的插件。Eclipse IDE 和 Pollinate 与一个 Apache Tomcat 之类的服务器的组合可以构造一个完美的环境,从而简单而快速地开发 Beehive 应用程序。
开始使用 Pollinate
如果您的机器上没有安装 Eclipse,那么请首先下载并安装它。要在 Eclipse 中安装 Pollinate,请启动 Eclipse IDE,然后:
- 选择 Help > Software Updates > Find and Install。
- 在 Install/Update 窗口中,选择 Search for new features to install。
- 在下一个窗口中,单击 New Remote Site。
- 在 New Update Site 窗口中,输入
Pollinate
和 URL http://download.eclipse.org/technology/pollinate/update-site
。
- 展开树形结构中的 Pollinate,然后选中 Integration Builds 复选框。
- 在下一个窗口中,选择 Eclipse Pollinate Tools 复选框,并完成安装过程。
成功安装 Pollinate 插件之后,您可以创建一个新的 Beehive 项目。要创建一个这种项目,请在 Eclipse 中选择 File > New > Other,启动 New Wizard,然后选择 Pollinate > Web Application。
当然,您还需要下载并安装 Apache Beehive。
结束语
Apache Beehive 项目似乎正在蓬勃发展。BEA Systems 公司做了一个非常聪明的决定,将这部分核心技术在开源社区中公开发布,这样可以促进这些技术的成熟并扩大采用范围。最初,这些技术只在 BEA WebLogic 平台上获得了支持。然而,在开源社区公开发布之后,现在您就应该可以在 IBM® WebSphere® Application Server 以及其他应用服务器上利用这些技术了。您还可以使用基于 Eclipse 的 IBM Rational® 工具(例如 IBM Rational Software Architect 和 IBM Rational Software Modeler)来设计并开发 Beehive 应用程序。
参考资料
关于作者 Kunal Mittal 是一位咨询顾问,他的特长是 Java、J2EE 和 Web 服务技术。他与别人合著了多本有关这些主题的书籍。他目前正在开发 Sony Pictures Entertainment 的门户项目,同时还在撰写一本有关 Apache Beehive 的书籍,该书将于 2005 年秋季出版。有关他的更多信息,请访问他的 Web 站点。 |