はじめに
企業の業務システムや電子商取引がJavaでWeb化されるにつれ、J2EEは急速に普及してきました。しかし、その複雑すぎる仕様が高い学習コストとバグの原因にも繋がり、多くの開発者を悩ませてきました。また近年、SOA(サービス指向アーキテクチャ)と呼ばれる、大規模なシステムを複数のサービスとして分割して開発する手法が脚光を浴びています。今回は、これらJ2EEやSOAのビジネスアプリケーションを簡易に開発することを目的にApache Software Foundationが開発を進めているApache Beehiveを取り上げ、その概要とコントロールについて詳細に解説します。
対象読者
J2EEアプリケーションの開発者。またはJ2EEの開発に興味がある読者。
環境
本稿では、Apache Beehiveで実装されたサンプルアプリケーションが正しく動作する環境が必要になります。必要なものを表にまとめました。Beehiveに関しては、サンプルアプリケーションに含めているためダウンロードしなくても動作します。なお、J2SE、Tomcatの基本的な環境設定について知りたい方は、サーバサイド技術の学び舎 - WINGSにある「サーバサイド環境構築設定」を参照してください。注意点として、Apache Beehiveでは、アノテーション(注釈)などの機能を多用しているため、J2SE 5.0以上でなければ正常に動作しません。
ライブラリ | バージョン | ダウンロード元 |
J2SE | 5.0 | http://java.sun.com/j2se/1.5.0/download.jsp |
Ant | 1.6.5 | http://ant.apache.org/bindownload.cgi |
Tomcat | 5.5.12 | http://tomcat.apache.org/download-55.cgi |
Beehive | 1.0.1 | http://beehive.apache.org/releases/release-1.0.1.cgi |
J2EEの複雑さ
J2EEには、EJB(Enterprise JavaBeans)、JMS(Java Message Service)、JDBC(Java DataBase Connectivity)、JCA(J2EE Connector Architecture)などのさまざまな仕様が存在します。それら多くの仕様は使いこなすことにより非常に大きなメリットをもたらしますが、正しく使いこなすには、簡単に上げるだけでも次のような知識が必要となります。
- JNDIによるリソースの取得
- EJBのリモート/ホームインターフェイスを利用してビジネスメソッドにアクセスする方法。またステートレスセッションBean、ステートフルセッションBeanの違いと使い分け
- JMSの接続/セッションとメッセージの作成方法、キューへの参照
- コンフィグレーションファイル(ejb-jar.xmlなど)への設定
これらの複雑さにより、J2EEは非常に学習コストが高いものであり、多くの開発者から敬遠されてきました。さらに、その複雑さから設定ファイルのミスなども起こりやすく、バグやシステムのパフォーマンスにも影響を与えてきました。
Apache Beehive
Apache Beehiveは、J2EEアプリケーションやWEBサービスを容易に、かつ効率的に開発するために立ち上げられたプロジェクトで、次の3つのサブプロジェクトに分かれています。
サブプロジェクト名 | 概要 |
NetUI | StrutsをベースとしたWebアプリケーションのフレームワーク。メタデータの機能を使用することにより、「struts-config.xml」に記述していた設定を自動生成する機能をもつ。 |
コントロール | メタデータを使用することにより、容易にコンポーネント開発を行えるようにした軽量コンポーネントフレームワーク。 |
Web Service Metadata(WSM) | アノテーションを利用したWebサービス用の駆動プログラミングモデル。JSR181の実装。 |
これらのサブプロジェクトは、1つのアプリケーションですべてのサブプロジェクトを取り込んだり、どれか1つのサブプロジェクトを単体として取り込んだりして、効率的な開発を行うことができます。
アノテーションの基礎知識
Apache Beehiveでは、J2SE 5.0の新機能として追加されたアノテーション(=注釈、JSR175)というメタデータ機能が多用されています。そのため、アノテーションの基本的な知識について知っている必要があるため、ここで簡単にですが解説します。「アノテーション」とは、Javaのコードにメタデータ機能をもたせたものです。「メタデータ」とは、データに関する情報のことで、ここではJavaコードのパッケージ、クラス、フィールド、メソッド、パラメータ、変数などのデータに対して、ある特定の情報を付けることを意味します。例えば、あるメソッドに対してOverrideアノテーションを付けることによって、そのメソッドがスーパークラスからオーバーライドされたものであるかをコンパイル時にチェックするといったことが可能です。アノテーションはクラスやインターフェイスと同じように通常、1つのファイルに1つのアノテーションとして記述されます。中身がないシンプルなアノテーションは次のように記述できます。
public @interface Test { }
@interfaceという見慣れない記述がありますが、これがアノテーションの宣言を意味しています。このアノテーションは、先ほどの説明の通り、クラスやメソッドに対して付けることができます。例えば次のようにして、nameという名前のString
フィールドにTestアノテーションを付加しています。
@Test private String name;
これらのようにアノテーションを付けることで、「このメソッドは~~~のメソッド」、「このクラスはコントロールのためのクラス」などの意味をつけ、IDE(統合開発環境)やソースからの自動生成処理などでそれを読み取り、データチェックなどの処理を施すことができるようになります。
コントロールの概要とアーキテクチャ
ここからは、Beehiveのコントロールの解説に入ります。コントロールは、先にも説明したようにアノテーション機能をフルに使うことによって、容易にコンポーネント開発を行えるようにしたものです。これまでJ2EEでは、さまざまなリソースへアクセスするためのコーディングを個別に書いていましたが、それらの記法を統一化することができます。また、ツールによる開発も簡単に行えるように考慮されているため、開発生産性を高めることができます。
コントロールの構成
基本的なコントロールは、次の3つのクラスで構成されています。
名前 | 概要 |
コントロールパブリックインターフェイス | コントロールの一連の処理とイベントを定義したもの |
コントロール実装クラス | コントロールパブリックインターフェイスを実装したもの |
コントロールBeanクラス | コントロールパブリックインターフェイスとコントロール実装クラスをもとに生成されるJavaBean |
新しいコントロールを作成するには、コントロールパブリックインターフェイスとコントロール実装クラスを作成する必要があります。コントロールBeanクラスはそれをもとに、BeehiveのオプショナルAntタスクによって自動的に生成されます。以下にそのクラスの関係図を載せます。以降の項でこのクラスを作成していきますので、関係図を頭に入れておいてください。
さらに、それらで構成されるコントロールが、コントロールを利用するクライアントとコントロールから参照されるリソースとの関係を示したのが下の図になります。
また、コントロールにはコントロールを構成する各要素が存在します。要素の一覧を以下の表にまとめました。
要素名 | 概要 |
操作 | クライアントの要求に応えてコントロールが実行するアクション |
イベント | 一定の条件が一致したり、内部イベントが発生した場合に、コントロールからクライアントへ通知されるアクション |
プロパティ | クライアントから渡されるパラメータ |
コンテキスト | コントロール内外のさまざまなプロパティ、サービスにアクセスするためのもの |
コンテキストライフサイクルイベント | コントロールの初期化~終了などのライフサイクルに基づいて、定義されたイベント |