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 站點。 |