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 技术
|
下面让我们更详细地来了解一下 Apache Beehive 中使用的各种技术。
如果您曾经使用过 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 是基于 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 Pollinate 项目是目前惟一支持 Apache Beehive 开发的 IDE 环境。这种限制随着将来 Apache Beehive 的不断发展而会不断变化。基本上来说,Pollinate 是 Eclipse 的一个可以支持 Beehive 框架的插件。Eclipse IDE 和 Pollinate 与一个 Apache Tomcat 之类的服务器的组合可以构造一个完美的环境,从而简单而快速地开发 Beehive 应用程序。
如果您的机器上没有安装 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
和 URLhttp://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 应用程序。
- 您可以参阅本文在 developerWorks 全球站点上的 英文原文。
- Getting started with the Eclipse Platform(developerWorks,2002 年 9 月)介绍了 Eclipse 的历史和概述信息,包括如何安装 Eclipse 及插件的详细步骤。
- 下载并学习有关 Apache Beehive 的更多知识。
- 要学习更多有关 NetUI 和 JPF 的知识,请参阅 Page Flow Overview。
- 要阅读更多有关控件的内容,请参阅 Controls Overview。
- 您可以在 Java Community Process 上阅读 JSR 181 Web 服务元数据规范,以及 JSR 175 规范。
- Apache Wiki 是一个很好的交换有关 Beehive 信息的地方。
- 有关 Beehive 的更多信息,请访问 BEA Systems 公司的 Dev2Dev。
- 获取更多有关 Eclipse Pollinate 项目 的信息。
- 参阅我即将出版的图书:Pro Apache Beehive: With Eclipse Pollinate and SOA。
- Eclipse In Action: A Guide for Java Developers(Independent Publishers Group,2003 年)是使用 Eclipse 的 Java 开发者的一本必读物。
- 获取最新版本的 NetBeans,这是用来开发 Java 程序的一个开源的 IDE。
- 在 developerWorks Java 技术专区 中寻找更多为 Java 开发者准备的资源。
- 获取试用版的 DB2®、Lotus®、Rational、Tivoli® 和 WebSphere 产品,并在 IBM 中间件上开始构建和部署应用程序。选择免费的 Linux 或 Windows 版本的 Software Evaluation Kit (SEK)。
- 通过参与 developerWorks blogs 加入 developerWorks 社区。
Kunal Mittal 是一位咨询顾问,他的特长是 Java、J2EE 和 Web 服务技术。他与别人合著了多本有关这些主题的书籍。他目前正在开发 Sony Pictures Entertainment 的门户项目,同时还在撰写一本有关 Apache Beehive 的书籍,该书将于 2005 年秋季出版。有关他的更多信息,请访问他的 Web 站点。 |