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 の複雑さを表すこと、そしてどの順番で技術を学ぶべきかをおおまかに示すことです。重要な技術には、以下のものがあります。
- 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 は、エンタープライズ規模のアプリケーションを対象に設計されているため、多数のタスクがサーバー基盤によって自動的に処理されます。自動処理されるタスクには、コンテナー管理トランザクション、スケーラビリティー、フェイルオーバー管理、セキュリティー管理などがあります。
コンテナー管理トランザクションでは、エンティティー Bean 間の 1 対 1 の関係と 1 対多の関係の両方がサポートされます。(エンティティー Bean は、永続ストレージ・メカニズムにおけるビジネス・オブジェクト (データベース内の特定の行など) を表す Java クラスです。) 1 対多の関係では、エンティティー Bean は Java コレクションを使用して「多」の側を表します。そのような関係を管理する機能は、コンセプトの上では、現代のリレーショナル・データベース・テクノロジーでの関係のモデル化と似ています。
EJB コンテナーは、すべてのエンティティー Bean 関係の参照整合性を維持する上で重要です。1 対 1 の関係では、関係の片方の側を変更した場合、コンテナーが自動的に古くなった関係を置き換えます。
コンテナー管理トランザクションの重要性は、いくら強調しても強調しすぎることはありません。Apache Geronimo は、J2EE 標準が指定するコンテナー・クラスを管理するカーネルを提供することにより、J2EE 標準への準拠を実現しています。
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 の状態は通常、以下の 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 はオプションの
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 は複数のオープン・ソース・プロジェクトの多数のエンジニアと世界中の個人個人のコントリビューターの協力を代表するものであり、疑いなく習得する価値のある技術です。
学ぶために
- Sun Microsystems の J2EE サイト にアクセスしてください。J2EE の生みの親である会社がこの標準の詳細情報を提供しています。
-
Apache Geronimo API で、この標準を構成するマシン生成クラス文書を調べてください。特に注目に値するのは、org.apache.geronimo.gbeanパッケージと org.apache.geronimo.gbean.runtime パッケージの 2 つです。
- Neal Ford による記事「Apache Geronimo での依存性注入 第 1 回」(developerWorks、2006年2月) は、Apache Geronimo 設計での依存性注入の重要な原則についての詳細を説明しています。
-
「Apache Geronimo での依存性注入 第 2 回」(developerWorks、2006年2月) には、Geronimo での依存性注入の詳しい具体例が記載されています。
-
J2EE 標準 によって Web サービスの作成を単純化する方法を学んでください。
-
Geronimo Wiki では、Geronimo の詳細を学べるとともに、この重要な技術に関する知識の宝庫に貢献することができます。
-
developerWorks の技術イベントとウェブ放送 で最新情報を入手してください。
- Geronimo の開発を今すぐ始めるのに役立つ記事、チュートリアルなどの参照資料については、developerWorksの Apache Geronimo プロジェクト・エリア を調べてください。
- developerWorks の Get started now with Apache Geronimo セクションには、初心者にも熟練者にも役立つ資料が豊富に用意されています。
-
IBM Support for Apache Geronimo が提供するサービスを調べてみてください。Geronimo アプリケーションの開発に対して、世界クラスの IBM サポートを受けることができます。
- オープン・ソース技術を使用した開発し、IBM の製品と併用するときに役立つ広範囲のハウツー情報、ツール、およびプロジェクト・アップデートについては、developerWorks Open source ゾーンを参照してください。
- developerWorks の Open source ゾーンには、Apache に関するさまざまな記事や無料の Apache チュートリアル が豊富に用意されています。
-
Safari bookstore には、この記事に関連した話題や他の技術を取り上げた技術書が豊富に取り揃えられています。
製品や技術を入手するために
-
Apache Geronimo をダウンロードしてください。
-
IBM ソフトウェアの試用版を使用して、次のオープン・ソース開発を革新してください。ダウンロード、あるいは DVD で入手できます。
-
IBM WebSphere® Application Server Community Edition V1.0 の無料コピーをダウンロードしてください。これは Apache Geronimo オープン・ソース技術の上に構築された軽量のJ2EE アプリケーション・サーバーであり、皆さんの開発やデプロイ作業を加速するために役立つはずです。
議論するために
-
ディスカッション・フォーラムに参加してください。
-
Apache Geronimo ブログで Geronimo 開発の最新情報を入手してください。
-
developerWorks ブログからdeveloperWorksのコミュニティーに加わってください。
