corner imagecorner image
FeaturesPluginsDocs & SupportCommunityPartners

Java EE 5 テクノロジ入門

Java EE 5 チュートリアル

NetBeans IDE 5.5 は、Java EE および Glassfish の各チームとの密接な協力のもとで、新しい Java EE 5 仕様との最大限の統合と、それらの容易な使用法を実現するために開発されました。 NetBeans IDE 5.5 は、Java EE 5 プログラミングを迅速に学び、生産性を向上させる最善の方法です。

このドキュメントでは、Java EE 5 仕様の主な概念を紹介し、それらが実際のプログラミングにどのように関係するかを説明します。 このチュートリアルは、次の節から構成されます。

Java EE 5 アプリケーションの開発と Sun Java System Application Server Platform Edition 9 への配備については、Java EE 5 チュートリアル (英語) を参照してください。

配備記述子に代わる注釈

Java EE 5 プラットフォームでは、サーブレットの仕様で要求される web.xml ファイルを除き、配備記述子を不要にすることによって配備を簡素化しています。 ejb-jar.xml のようなその他の配備記述子と、web.xml の Web サービスに関連するエントリは使用されていません。 J2EE 1.4 の配備記述子は、複雑になることが多く、記述時に誤りが起こりやすいものでした。 Java EE 5 プラットフォームでは、代わりに「注釈」を利用します。 注釈は publicprivate と同様に、コード内で指定する Java の修飾子です。 たとえば、Java EE 5 仕様のサブセットである EJB 3 仕様は、Bean の種類、インタフェースの種類、リソース参照、トランザクション属性、セキュリティーなどのための注釈を定義します。 JAX-WS 2.0 仕様も、Web サービスのためのよく似た注釈のセットを提供しています。 アーティファクトの生成に使用される注釈もあります。 また、コードの記録に使用される注釈もあります。 そのほかにも、セキュリティーや実行時に特有のロジックのような拡張サービスを提供するものがあります。 要約すると、Java EE 5 プラットフォームは、特に次の作業のための注釈を提供しているといえます。

  • Web サービスの定義と使用
  • EJB ソフトウェアアプリケーションの開発
  • XML への Java テクノロジのクラスのマッピング
  • データベースへの Java テクノロジのクラスのマッピング
  • 操作へのメソッドのマッピング
  • 外部依存関係の指定
  • セキュリティー属性を含む配備情報の指定

注釈には @ 記号が付与されています。 IDE では、Java EE 5 の注釈を利用した型を作成すると、生成されたコード内に関連するプレースホルダが用意されます。 たとえば、IDE を使用してステートレスセッション Bean を作成すると、@Stateless() という注釈を含んだ次のコードが生成されます。

package mypackage;

import javax.ejb.*;

@Stateless()
public class HelloWorldSessionBean implements mypackage.HelloWorldSessionLocal {

}
コード補完により、カーソルの下にある項目に固有の注釈の属性にアクセスできます。 たとえば、@WebService() という注釈の括弧内で Ctrl - スペースキーを押すと、次のように表示されます。

annotation in ws

各属性はデフォルト値を持っています。 そのため、デフォルト値以外の値を使用しない限り、どの属性の値も指定する必要はありません。 簡単な事例では、デフォルト値で十分に事足ります。これは、属性をまったく入力しなくてもよいことを意味します。

簡素化された EJB ソフトウェア開発

新しい EJB 3.0 API は、開発者に要求される作業の量を減らして簡素化することによって、ソフトウェア開発を容易にしています。 つまり、クラスの数とコードの量が少なくなっています。 これは、作業の多くがコンテナによって実行されるために可能になりました。 新しい EJB 3.0 API の機能と利点の一部を次に示します。

  • 必要なクラスおよびインタフェースが減少。 必要なメソッドの公開はコンテナが担当するため、EJB コンポーネントのホームインタフェースおよびオブジェクトインタフェースは必要ありません。 ビジネスインタフェースを用意するだけで済みます。 EJB コンポーネントの宣言に注釈を使用することができ、コンテナがそのトランザクションを管理します。
  • 配備記述子が不要。 以前は配備記述子で定義していた依存関係および設定についての指示を、直接クラス内で注釈を使用してコンテナに対して行うことができます。 特に指示がない場合、コンテナはデフォルト規則を使用して、ごく一般的な状況を処理します。
  • 簡単なルックアップ。 EJBContext を使用して、クラス内の JNDI 名前空間にあるオブジェクトを直接検索できます。
  • 簡素化されたオブジェクトリレーショナルマッピング。 新しい Java Persistence API により、POJO 内で注釈を使用して Java オブジェクトをリレーショナルデータベースにマッピングすることで、オブジェクトリレーショナルマッピングがより簡単で透過性の高いものになっています。

IDE では、ほかの Java クラスをコーディングするように、エンタープライズ Bean をコーディングすることができ、コード補完とエディタヒントを使用して、適切なメソッドを実装し、インタフェースでクラスの同期を維持することができます。 ビジネスメソッドまたは Web サービスオペレーションなどを生成するために特別なコマンドやダイアログを使用する必要はありません。ただし、コマンドは、ユーザーが Java EE 5 構文に慣れるまでのことを考慮し、まだ使用可能になっています。

依存関係インジェクションを使用した、リソースへのアクセス

依存関係インジェクションにより、オブジェクトは注釈を使用して外部リソースを直接要求することが可能になります。 その結果、リソース作成およびルックアップのコードの使用によってコードが煩雑になることがないため、より整理されたコードになります。 EJB コンポーネント、Web コンテナ、およびクライアントでリソースインジェクションを使用することができます。

リソースの注入を要求するために、コンポーネントは @Resource という注釈か、または、特別なリソースの場合には @EJB および @WebServiceRef という注釈を使用します。 注入できるリソースには、次のものがあります。

  • SessionContext オブジェクト
  • DataSources オブジェクト
  • EntityManager インタフェース
  • その他のエンタープライズ Bean
  • Web サービス
  • メッセージキューおよびトピック
  • リソースアダプタのための接続ファクトリ

IDE では、Java EE 5 プラットフォームによって提供されるリソースインジェクションの注釈のための完全なコード補完の機能が、ソースエディタに用意されています。 また、「EJB の呼び出し」および「データベースを使用」などのコマンドを実行すると、IDE によって、ファイルにリソースが自動的に注入されます。

Java Persistence API モデル

Java EE 5 プラットフォームには、JSR-220 の一部として開発された新しい Java Persistence API が導入されています。 Java Persistence API は、Web アプリケーションやアプリケーションクライアントなど、EJB コンポーネント以外でも使用できます。また、Java EE プラットフォーム以外で Java SE アプリケーションでも使用できます。

Java Persistence API の主な特徴として、次の点が挙げられます。

  • エンティティーが POJO。 「コンテナ管理による持続性」(CMP) を使用していた EJB コンポーネントとは異なり、この新しい API を使用するエンティティーオブジェクトはコンポーネントではないため、EJB モジュール内に存在する必要はありません。
  • 標準化されたオブジェクトリレーショナルマッピング。 この新しい仕様はオブジェクトリレーショナルマッピングの処理方法を標準化しているため、開発者はベンダー固有の方法を学ばなくてもよくなります。 Java Persistence API は、オブジェクトリレーショナルマッピングの情報を指定するために注釈を使用しますが、これまでどおり XML 記述子もサポートしています。
  • 名前付きクエリー。 これからの名前付きクエリーは、メタデータ内に表現された静的なクエリーです。 このクエリーは Java Persistence API クエリーまたはネイティブクエリーのどちらかになります。 これにより、クエリーの再利用が非常に簡単になります。
  • 単純なパッケージング規則。 エンティティー Bean は Java テクノロジの単純なクラスであるため、Java EE アプリケーション内の任意の場所でパッケージ化できます。 たとえば、エンティティー Bean は、EJB の JAR、アプリケーションクライアントの JARWEB-INF/libWEB-INF/classes の一部にできます。あるいは、エンタープライズアプリケーションのアーカイブ (EAR) ファイル内のユーティリティーの JAR の一部にすることさえできます。 これらの簡単なパッケージング規則を使用すれば、Web アプリケーションまたはアプリケーションクライアントからエンティティー Bean を使用するために EAR ファイルを作成する必要はありません。
  • 切り離されたエンティティー。 エンティティー Bean は POJO であるため、シリアライズし、ネットワークを介して別のアドレス空間に送信し、持続性を意識しない環境で使用することができます。 そのため、データ転送オブジェクト (DTO) を使用する必要はありません。
  • EntityManager API。 現在、アプリケーションプログラマは、標準の EntityManager API を使用して、エンティティーを含む Create Read Update Delete (CRUD) オペレーションを実行できます。

IDE には、新しい Java Persistence API を利用したツールが用意されています。 エンティティークラスは、データベースから自動的に作成できるほか、手動でコーディングすることもできます。 IDE には、持続性ユニットの作成および管理を行うためのテンプレートおよびグラフィックエディタも提供されています。 新しい Java Persistence API の使用については、Java EE 5 プラットフォームの Java Persistence を参照してください。

Web サービス

Java EE 5 プラットフォームでは、注釈の使用によって Web サービスのサポートが大幅に向上され、簡素化されています。 この領域に関与する仕様には、JSR 224 (Java API for XML-Based Web Services (JAX-WS) 2.0)、JSR 222 (Java Architecture for XML Binding (JAXB) 2.0)、および JSR 181 (Web Services Metadata for the Java Platform) があります。

JAX-WS 2.0

JAX-WS 2.0 は、Java EE 5 プラットフォームにおける Web サービスのための新しい API です。 JAX-RPC 1.1 の後継として、JAX-WS 2.0 はいくつかの面が改善されている一方で、自然な RPC プログラミングモデルを保持しています。 改善されているのは、データバインディング、プロトコルとトランスポートの独立性、REST スタイルの Web サービスのサポート、および各開発の容易さです。

JAX-RPC 1.1 との決定的な違いは、すべてのデータバインディングが JAXB 2.0 に委託されたことです。 これにより、JAX-WS ベースの Web サービスは XML スキーマを 100% 活用でき、相互運用性および使いやすさの向上につながっています。 この 2 つのテクノロジが十分に統合されているため、ユーザーが 2 種類のツールセットを使い分ける必要はありません。 Java テクノロジのクラスから始めると、JAXB 2.0 は、WSDL (Web Service Description Language) ドキュメント内部に自動的に埋め込まれた XML スキーマドキュメントを生成できるため、ユーザーが手動でこの誤りが起こりやすい統合を実行しなくてすみます。

追加設定をしなくても、JAX-WS 2.0 は SOAP 1.1、SOAP 1.2、および XML/HTTP プロトコルをサポートしています。 プロトコル拡張性は当初からの目標であったため、JAX-WS 2.0 では、たとえば FAST Infoset のような、より優れたパフォーマンス、または特化されたアプリケーションのために、ベンダーが追加のプロトコルおよびエンコーディングをサポートすることが可能です。 大きなバイナリデータの送受信を最適化するためにアタッチメントを使用する Web サービスは、W3C の MTOM/XOP (Message Transmission Optimization Mechanism/XML-binary Optimized Packaging の略) 標準をプログラミングモデルへの影響なしに使用できます (詳細は MTOM/XOP のページを参照)。 Java EE 5 テクノロジが登場するまでは、Web サービスを定義するのに、長くて扱いにくい記述子が必要でした。 今では、@WebService という注釈を Java テクノロジのクラスに付けるだけです。 このクラスのすべての public メソッドは、Web サービスオペレーションとして自動的に公開され、その引数はすべて JAXB 2.0 を使用して XML スキーマデータ型にマッピングされます。

非同期 Web サービス

Web サービスの呼び出しはネットワーク上で行われるため、こうした呼び出しにかかる時間は予測できません。 多くのクライアント、特に JFC/Swing ベースのデスクトップアプリケーションのような対話型のものでは、サーバからの応答を待たなければならないため、重大なパフォーマンスの低下が起こることがあります。 そうしたパフォーマンスの低下を避けるため、JAX-WS 2.0 は新しい非同期式のクライアント API を提供しています。 この API により、アプリケーションプログラマは独自にスレッドを作成する必要がなくなります。 代わりに、長時間実行されるリモート呼び出しの管理を JAX-WS ランタイムに任せることができます。

非同期メソッドは、WSDL によって生成された任意のインタフェースのほか、より動的な Dispatch API とも同時に使用できます。 WSDL ドキュメントのインポート時には、Web サービスによって定義された任意のオペレーションのために、非同期メソッドを生成するよう要求できます。

2 つの使用モデルがあります。

  • ポーリングモデルでは、呼び出しを行います。 準備ができてから、結果を要求します。
  • コールバックモデルでは、ハンドラを登録します。 応答が届き次第、通知されます。

非同期呼び出しのサポートはすべてクライアント側に実装されるため、対象の Web サービスには変更は必要ありません。

IDE には、JAX-WS を操作するツールが用意されています。 「新規ファイル」ウィザードのテンプレートを使用して JAX-WS アーティファクトを生成できます。 非同期 Web サービスは、Web サービスカスタマイゼーションエディタを使用して作成できます。 このエディタのコード補完機能には、Web サービスで使用できる注釈も含まれます。



次の手順

NetBeans IDE 5.5 を使用して Java EE アプリケーションを開発する方法については、次のリソースを参照してください。

メーリングリストに登録することによって、NetBeans IDE Java EE 開発機能に関するご意見やご提案を送信したり、サポートを受けたり、最新の開発情報を入手したりできます。

Bookmark this page

del.icio.us furl simpy slashdot technorati digg