レベル: 初級 William B. Zimmerly (bill@zimmerly.com), Freelance Writer and Knowledge Engineer
2006年 8月 15日 キャリアを飛躍させる準備はできていますか? 開発中のアプリケーションのタイプが何であれ、J2EE (Java™ 2 Platform, Enterprise Edition) は今日普及している重要な標準です。これをマスターすることが、あなたのプログラマーとしての評価をあと押しすることは疑いようがありません。経験の長さを問わず、すべての開発者にとって有益なこの記事は、Apache Geronimo が準拠を目指す J2EE 1.4 標準の基礎、そして Geronimo と J2EE の関係を説明しています。また、J2EE が定義する重要性の高いコンテナー・クラスを抜粋して検討し、GBean 技術とさらに進歩した Geronimo のコンセプトを探っていきます。
J2EE は、エンタープライズ規模で使用する Web ベース・アプリケーションの開発・デプロイメントを対象として設計された、プラットフォームに依存しない環境です。プラットフォームは、メタ言語または言語のスーパーセットにリンクされています。一方 J2EE は根本的には単なる Java プログラミング言語で、最小限の Java クラスから成る特定のセットです。(「参考文献」に、J2EE に関するクラスの資料へのリンクが記載されています。)
J2EE は、多層構造の Web ベース・アプリケーションを開発するための API (アプリケーション・プログラム・インターフェース)、サービス、およびプロトコルで構成されています。これは複雑な標準で、J2EE を簡素化しようと企てる記事を書くことは、合衆国税法の簡素化についての記事を書くこととほとんど同じです。つまり、たやすいことではありません。でも、原則から始めて、いくつかの実装の詳細に取り組むことによって、この困難な道のりに明かりをともすことができるはずです。それでは、気を引き締めて出発しましょう。
原則
J2EE 多層設計のなかのクライアント層は、純粋な HTML プロトコル (JSP (JavaServer Pages) と Java サーブレットで生成される) によって表され、場合によってはトランスポート・プロトコルを使って Java アプレットをデプロイすることになります。このトランスポート・プロトコルはもちろん TCP/IP です。つまり、標準準拠の Web ブラウザーであれば、J2EE システムのクライアントとして問題なく実行できるはずです。
サーバー層には Enterprise JavaBeans (EJB) 技術が含まれ、この層でエンタープライズ・アプリケーションのプラットフォーム・ロジックが定義されます。EJB サーバーは、スレッド化、並行性、メモリー管理、そしてセキュリティーを対象とした機能を提供し、こまごまとしたことでアプリケーション・プログラマーをわずらわせることがないように、これらのことを自動的に実行します。ここで、J2EE 設計の実力が発揮されています。
最下層にはエンタープライズの貴重なデータの中核があり、このデータに IBM® DB2®、Oracle、MySQL やその他多数の SQL (構造化照会言語) ベースのデータベース・エンジンが JDBC (Java Database Connectivity) インターフェースを介してアクセスします。
J2EE は Web サービスの定義に関するすべてです。気取らずに言えば、これは、呼び出し側クライアント・ブラウザーにフラットな HTML テキスト・ファイルを戻すだけのページではなく、プログラムが即時に生成する動的 Web ページを定義する方法です。J2EE は技術の紛れもないアルファベット・スープのようなもので、アルファベットの頭文字で表された技術が盛りだくさんに入っています。J2EE 環境でキャリアを積むには、そこに含まれるすべての技術をマスターする必要はありませんが、これらの技術をより詳しく知ることがプログラマーとしてのキャリアアップにつながることは間違いありません。
クイック・リファンレス: J2EE 技術
次に、数多くの J2EE 技術のなかから抜粋して簡単に説明します。このすべての技術をマスターしているプログラマーは、今日の求人市場ではひっぱりだこです。ここでの技術の記載順は、もちろん個人的意見でしかありませんが、重要性とデプロイメントの簡単さを基準にしています。
このリストの目的は、J2EE の複雑さを表すこと、そしてどの順番で技術を学ぶべきかをおおまかに示すことです。重要な技術には、以下のものがあります。
-
JSP:実行前にサーブレットにコンパイルされるインライン Java コードを持つ HTMLテンプレートのファイルです。
-
EJB: エンタープライズ Web アプリケーションのプラットフォーム・ロジックを表します。EJBテクノロジーには、エンティティー Bean とセッション Bean の 2 つのタイプがあります。
-
JDBC: Java 環境からデータベースに接続するための API。これは Java プログラマーにとって、ODBC (Open Database Connectivity) に代わるものです。
-
JAXP (Java API for XML Processing): XML 文書の構文解析と変換の際にアプリケーションを支援する目的で設計されています。
-
JNDI (Java Naming and Directory Interface): 属性によるオブジェクトの検索、属性とオブジェクトの関連付けなどのディレクトリー操作を実行するメソッドを定義します。
-
JAX-RPC (Java API for XML-based Remote Procedure Call): 開発者はこれを使用して、WSDL (Web サービス記述言語) で記述されたクライアントとサービスを作成できます。WSDL はサービスをメッセージ上で動作するエンドポイントのセットとして記述し、XML で定義されます。
-
JAX-WS (Java API for XML-based Web Services): 開発者が WSDL で記述されたクライアントとサービスを実装できるようにするという点ではJAX-RPC と似ていますが、JAX-WS にはデプロイメント記述子が必要ありません。JAX-WSは @WebService などのアノテーションを使用して、Web サービス・エンドポイントを宣言します。JAX-WSでは、デプロイメント記述子を使わずに Web サービスをデプロイできます。
-
JAXB (Java Architecture for XML Binding): Java オブジェクトを XML 文書にマップするためのバインディング・コンパイラーとランタイム・フレームワークを提供します。この機能によって、システムが有効なメッセージのみを受け入れて処理することを確実にできます。このコンパイラーは自動的にW3C (World Wide Web Consortium) XML スキーマを Java クラスに変換するため、複雑な構文解析コードを作成する必要がなくなります。
-
JAXM (Java API for XML Messaging): アプリケーションがインターネット上で XML ビジネス文書を交換できるようにします。例えば、在庫リスト、請求書、そして現代のビジネスを運営する上で必要なその他の数限りないビジネス文書があります。
-
JAXR (Java API for XML Registries): Web サービスのビルド、デプロイメント、そしてディスカバーに役立つ、各種XML レジストリーにアクセスするための標準 API を提供します。
-
JMS (Java Message Service): 多くのメッセージング・システム製品の共通機能へのアクセスを提供する、一貫性のあるAPI を備えたメッセージ・ベースのアプリケーションを作成できます。
-
JMX (Java Management Extensions): J2EE アプリケーション・サービスの監視と管理専用に作成された Java 標準です。

 |
J2EE の利点
J2EE は、エンタープライズ規模のアプリケーションを対象に設計されているため、多数のタスクがサーバー基盤によって自動的に処理されます。自動処理されるタスクには、コンテナー管理トランザクション、スケーラビリティー、フェイルオーバー管理、セキュリティー管理などがあります。
コンテナー管理トランザクションでは、エンティティー Bean 間の 1 対 1 の関係と 1 対多の関係の両方がサポートされます。(エンティティー Bean は、永続ストレージ・メカニズムにおけるビジネス・オブジェクト (データベース内の特定の行など) を表す Java クラスです。) 1 対多の関係では、エンティティー Bean は Java コレクションを使用して「多」の側を表します。そのような関係を管理する機能は、コンセプトの上では、現代のリレーショナル・データベース・テクノロジーでの関係のモデル化と似ています。
EJB コンテナーは、すべてのエンティティー Bean 関係の参照整合性を維持する上で重要です。1 対 1 の関係では、関係の片方の側を変更した場合、コンテナーが自動的に古くなった関係を置き換えます。
コンテナー管理トランザクションの重要性は、いくら強調しても強調しすぎることはありません。Apache Geronimo は、J2EE 標準が指定するコンテナー・クラスを管理するカーネルを提供することにより、J2EE 標準への準拠を実現しています。
GBean アーキテクチャー
 |
コンテナー・クラスとは何か
他のオブジェクを含むオブジェクトのクラスであるコンテナー・クラスは、どんなクラスのオブジェクトでも保持できます。実際、保持されるオブジェクト自体がコンテナー・クラスの場合もあります。基本Java プログラミングのコンテナー・クラスの単純な例には、vectors や setsなどがあります。
Java プログラマーは、イテレーター・クラスを使ってコンテナー・クラスを操作します。イテレーターとは、コンテナー内のオブジェクトに、カプセル化制約に違反することなくアクセスするためのツールのことです。イテレーターは、コンテナー・クラスの要素からのアクセスの詳細を隠すという点で、貴重です。コンテナー・クラスとイテレーター・クラスを共に使用することで、複合システムのプログラミングが大幅に単純化されます。
|
|
Apache Geronimo 設計での主要なコンテナー・クラスは GBean です。実際、Geronimo ではほとんどすべてのものが GBean です。Apache Geronimo 設計では、フレームワークが GBean クラスのライフ・サイクルを管理します。コンテナーにパーツをデプロイした場合、パーツの開始と停止を操作できます。さらに、GBean には従属関係を持たせることができます。
例えば、Bean X は Bean Y の特定のサービスがないと正常に機能しないとします。その場合、Bean X を実行するには Bean Y が作動可能でなければなりません。Geronimo のアプローチ方法では、前述の従属関係をはじめ、フレームワークが管理しなければならないすべてのものが GBean によってパッケージ化されます。Geronimo の実力の根本は、開発者が手持ちの J2EE アセットで操作できるフレームワークを提供するという点にあります。
既存の J2EE リソースを GBean 制御でラップすることにより、J2EE 標準のライフ・サイクル要件を克服できます。Geronimo の中心は、GBean の IoC (Inversion of Control) フレームワークを定義するカーネルです。IoC フレームワークは、コンポーネント間の従属関係をフレームワークが自動管理できる環境を作成します。
リスト 1 の Web サービスをアプリケーション X 内部に取り込むとします。(アプリケーション X の詳細は気にしないでください。単に、次のクラスをロードして doit() メソッドを呼び出すと仮定します。)
リスト 1. MessageContext
public class WebService {
public WebService(MessageContext msgc) {
public void doit() {
...
}
}
}
|
アプリケーション X には MessageContext と呼ばれるものがあり、ここにすべての構成情報が含まれます。アプリケーション X は、クラスに XX(MessageContext) のようなコンストラクターがある場合、またはクラスが setMessageContext(MessageContext msgctx) のようなメソッドを使用する場合に、この WebService クラスの MessageContext を使用して、MessageContext を注入します。
標準的な J2EE コンテナーのクラスには、有効なタイプが 2 つあります。1 つは EJB コンテナーや Web コンテナーのようなコア・サービス・クラス、そしてもう 1 つは、コア・サービスがデプロイするアプリケーション・クラスです。この 2 層アーキテクチャーではフレームワークが提供する自動プロセスにより、2 次クラスの管理が簡単になります。
GBean の動作は、Geronimo のアーキテクチャーの本質を示します。「プラン」(本質的には GBean の XML シリアライゼーション) を使用して、GBean がロードおよび起動され、アプリケーション・クラスの管理を行います。
デプロイメント記述子は、フレームワークの管理対象アプリケーションを定義し、通常は J2EE アプリケーション・アーカイブとしてパッケージ化されます。Geronimo デプロイヤーは、これらのアーカイブに含まれる GBean を組み立てることにより、アーカイブを構文解析します。次にデプロイヤーによって組み立てられた GBean が開始され、ついにアプリケーションが使用可能になります。続いて GBean をシリアライズして保存し、エンジンが他の作業を行っている間、状態を維持することもできます。この動作によって、サーバーを再起動した後でも、デプロイされたアプリケーションが使えるようになります。
GBean のライフ・サイクル
GBean の状態は通常、以下の 3 つのうちのいずれかになります。
-
Stored (保管済): 保管状態の Gbean は、プラン内または構成ストア内にあります。
-
Loaded (ロード済): ロードされた GBean は、同じ GBean の複数のインスタンスが存在できるようにするため、非永続名にマップされます。
-
Running (実行中): GBean は実行中で、GBean 自体に含まれるアプリケーション・クラスを調整しています。
コード上では通常、GBean ライフ・サイクルの状態はリスト 2 のように実装されます。
リスト 2. GBeanLifecycle メソッド
public class AppFunction implements GBeanLifecycle {
public void doStart() throws Exception {
}
public void doStop() throws Exception {
}
public void doFail() {
}
}
|
GBean は GBeanLifecycle インターフェースを実装するので、Geronimo フレームワークが任意の時点で GBean 状態のオン・オフを切り替えて、GBean の状態データや実行中コンテキストの常駐場所を制御することができます。
GBean 作成のための一般的なヒント
GBean を作成するときには、次のことを忘れないでください。
- ライフ・サイクル・コールバックを取得するには、GBean はオプションの
org.apache.geronimo.gbean.GBeanLifecycle インターフェースを実装する必要があります。
- GET および SET メソッドでは、属性で GBean を指定できます。
- GBean のコンストラクターは、
GBeanInfo に宣言されたメンバー関数を呼び出せません。
- GBean は以下のシグニチャーでメソッドを実装する必要があります。
public static GBeanInfo getGBeanInfo()
フレームワークは、GBean がこのメソッドから使用または公開する重要なメタデータを受け取ります。操作、参照、および基本属性に関するメタデータは、静的ブロック・イニシャライザー内で初期化されます。リスト 3 を参照してください。
リスト 3. メタデータ
public static final GBeanInfo GBEAN_INFO;
static {
GBeanInfoBuilder infoBuilder = new GBeanInfoBuilder("AppGbean", AppGbean.class);
infoBuilder.addAttribute("name", String.class, true);
infoBuilder.addAttribute("kernel", Kernel.class, false);
infoBuilder.addOperation("echo", new Class[]{String.class});
infoBuilder.setConstructor(new String[] {"kernel","Name"});
GBEAN_INFO = infoBuilder.getBeanInfo();
}
|
属性や参照に名前を付けるときには必ず、以下の標準 Java 命名規則に従わなければなりません。
- 属性の先頭は必ず小文字にすること
- 参照の先頭は必ず大文字にすること
上記の規則に従えば、GBean の構成が単純になります。
まとめ
Apache Geronimo 環境で効率的にプログラミングを行うには、Geronimo が J2EE 標準の機能要件に準拠する手段としている GBean を理解することが必須です。Geronimo バージョン 1.0 はすでに J2EE 認証試験に合格し、急速に J2EE ソフトウェア技術の標準となりつつあります。Geronimo は複数のオープン・ソース・プロジェクトの多数のエンジニアと世界中の個人個人のコントリビューターの協力を代表するものであり、疑いなく習得する価値のある技術です。
参考文献 学ぶために
製品や技術を入手するために
議論するために
著者について  | 
|  | Bill Zimmerly は知識エンジニア、各種バージョンの UNIX® および Microsoft® Windows® ソフトウェアの専門知識を持つ下位システムのプログラマー、そしてロジックの崇拝者でもあり、新しい技術を生み出し、その技術についての記事を書くことに熱意を燃やしています。Bill は、新鮮な空気と素晴らしい景色に溢れ、そして優れたワイナリーが点在するミズーリ州ヒルズボロに住んでいます。 |
記事の評価
|