目次


ApacheのBeehive入門

オープンソースのSOAツールに対するプログラミング手法

Comments

2004年5月25日、BEA Systems Inc.とApacheは、Beehiveプロジェクトの誕生を発表しました。このプロジェクトは、急速にJava技術の一部となりつつあるアノテーション(annotations)の概念を使って、J2EEやWebサービスのプログラミングを単純化することに焦点を当てたプロジェクトです。このプロジェクトでは、SOA(service-oriented architecture)開発も重視しています。

BeehiveはApache License V2.0の下でリリースされており、BEAは、このプロジェクトを積極的に推進しています。現在、Beehiveに専任で関わっている人達のうち、約半数がBEAの従業員です。これは、コミュニティーの他の人達も、数多くプロジェクトに参加していることを明らかに物語っています。

Apache Beehiveプロジェクトは、下記をサポートするために作られました。

  • JPF(Java Page Flow)技術(NetUIとしても知られています)
  • コントロール
  • JSR(Java Specification Request)181に基づくWebサービス

これらの技術はどれも、図1に示すようなMVC(Model-ViewController)プログラミング・モデルに当てはまります。JPF技術はコントローラー・レイヤーを形成します。NetUIタグ・ライブラリーは、ビュー・レイヤーに加わります。モデル・レイヤーは、Javaコントロールから作られます。

図1. MVCモデルとApache Beehive技術
図1. MVCモデルとApache Beehive技術
図1. MVCモデルとApache Beehive技術

Apache Beehiveにおける技術のそれぞれを、もう少し詳しく見てみましょう。

NetUIまたはJPFs

BEAのWebLogic Workshop V8.1を使ったことのある人であれば、Strutsの上に直接構築された、JPF技術を使ったことがあるはずです。ご存じと思いますが、Strutsは現在、市場で最も広く採用されているMVCフレームワークの1つです。ですから、JPFがStrutsの上に構築されているのであれば、素直にStrutsを使えばよいでしょう。

JPFはStrutsの中核機能を利用する一方、Strutsが要求する、多くの面倒な作業を除去しています。ここで面倒な作業と言っているのは、デプロイ・コンフィギュレーション・ファイル(例えばstruts-config.xmlファイル)を管理することを指します。BEAのPage Flowsのオリジナル版では、BEA WebLogic Workshopが自動的に生成、維持管理する宣言的プログラミング言語を導入しています。対照的にApache Beehive版のPage Flowsでは、そのメタデータ定義にJSR 175を使っています。JSR 175は、必要なJ2EEコーディングを減らすことのできるメタデータ仕様です。

またJPF技術には、NetUIと呼ばれる、タグ・ライブラリーのセットも含まれています。典型的なMVC設計パターンでは、JPFはコントローラー・レイヤーを形成します。JPFは、プレゼンテーション・レイヤーにあるNetUIタグ・ライブラリーによって補助されます。またJPFは、(例えば妥当性検証フレームワークなど)Strutsの全機能を利用します。実際、StrutsとJPFの組み合わせを持った、単一のWebアプリケーションも可能なのです。

リスト1は、HelloWorldを出力する、単純なJPFコントローラーを示しています。

リスト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でのアクションの概念と似ています。@Jpf.Action アノテーションは、アクション自体を定義します。そして@Jpf.Forward アノテーションは、フローの中で次に何が起きるかを定義します。このアノテーションは、Strutsのコンフィギュレーション・ファイルの中にある情報と似たものです。

forward アノテーションで参照されている、HelloWorldのJSP(JavaServer Pages)ファイルは、この記事では示していません。この例に関して言えば、スクリーン上にHelloWorldを出力するコードが1行ありさえすれば、どんなJSPファイルでも可能です。

NetUI技術にも、3つのタグ・ライブラリーがあります。その基本機能としては、JSPファイルの開発を簡単にし、ビューとコントローラーの間に自動的なデータ・バインディングを提供することです。これらのタグはJavaScriptをサポートしているため、標準のHTMLタグ(例えばinputselectなど)を扱うのと同じように扱うことができます。この3つのタグ・ライブラリーは、下記の通りです。

NetUIタグ・ライブラリー
このタグ・ライブラリーには、struts-htmlタグと同じようなタグが含まれます。
NetUIデータ・タグ・ライブラリー
NetUIデータ・タグ・ライブラリーは、フォームからのデータと、JSPファイルに対するコントローラーをバインドするために使われます。これを使うと、例えばサーチ結果など、データのリストを素早く表示することができます。
NetUIテンプレート・タグ・ライブラリー
NetUIテンプレート・タグ・ライブラリーは、JSPファイルからサブセクション(またはテンプレート)を作るために使います。

NetUIタグ・ライブラリーについて詳しくは、参考文献を見てください。

コントロール

コントロールは興味深い技術です。SOAベースの開発においては、コントロールによって、抽象化とカプセル化のための便利なレイヤーができます。またコントロールは、EJB(Enterprise JavaBeans)やメッセージ駆動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サービスとして公開するために使用できる アノテーション セットを定義しています。開発者が単純なJavaクラスを書き、その後で、その機能をWebサービスとして公開する、というのがBeehiveの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(integrated development environment)です。ApacheのBeehiveが普及するにつれ、この状況は変わって行くはずです。基本的に、PollinateはEclipseに対するプラグインであり、Beehiveフレームワークをサポートするものです。Eclipse IDEとPollinateをApache Tomcatのようなサーバーと組み合わせることによって、Beehiveアプリケーション開発を高速かつ容易に行うための、完璧な環境を作ることができます。

Pollinateを使い始める

皆さんのマシンにEclipseが入っていない場合には、まずダウンロードしてインストールする必要があります。EclipseからPollinateをインストールするためには、Eclipse IDEを起動し、次に下記を行います。

  1. Help > Software Updates > Find and Installを選択します。
  2. Install/Updateウィンドウで、インストールすべき新しい機能のために、Searchを選択します。
  3. 次のウィンドウで、New Remote Siteをクリックします。
  4. New Update Siteウィンドウで、Pollinateと、次のURLを入力します。http://download.eclipse.org/technology/pollinate/update-site
  5. ツリーの中のPollinateを拡張し、次にIntegration Buildsチェックボックスを選択します。
  6. 次のウィンドウで、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や、その他のアプリケーション・サーバー上でも利用できるはずです。また、IBM Rational Software ArchitectやIBM Rational Software Modelerなど、EclipseベースのIBM Rational®ツールを使用して、Beehiveアプリケーションの設計、開発を行うこともできるのです。


ダウンロード可能なリソース


関連トピック

  • Eclipse Platform入門(developerWorks, 2002年11月)は、Eclipseとプラグインのインストール方法の詳細を含めて、Eclipseの歴史と概要を解説しています。
  • Apache Beehiveをダウンロードして、さらに学んでください。
  • NetUIとJPFについて学ぶために、Page Flow Overviewを見てください。
  • コントロールについて学ぶために、Controls Overviewを見てください。
  • Java Community Processで、JSR 181(Webサービスのメタデータ仕様)やJSR 175仕様を見ることができます。
  • Apache Wikiは、Beehiveに関して情報交換するためのリソースとして好適です。
  • BEA SystemsのDev2Devを見ると、さらにBeehiveに関して情報を得ることができます。
  • Eclipse Pollinate projectについて、さらに情報を得てください。
  • これから出版される私の著書、Pro Apache Beehive: With Eclipse Pollinate and SOAを読んでください。
  • Eclipse In Action: A Guide for Java Developers(2003年、Independent Publishers Group刊)は、Eclipseを使うJava開発者にとって必読です。
  • Javaアプリケーション開発用のオープンソースのIDEである、NetBeansの最新版を入手してください。
  • developerWorksのJava technologyゾーンには、Java開発者のための資料が豊富に用意されています。

コメント

コメントを登録するにはサインインあるいは登録してください。

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Open source, Java technology
ArticleID=236388
ArticleTitle=ApacheのBeehive入門
publish-date=04192005