![]() |
Sun ONE Application Server 7 Enterprise Java Beans 開発者ガイド |
Sun ONE Application Server Enterprise JavaBeans の紹介この章では、SunTM ONE Application Server 7 のアプリケーションプログラミングモデルにおける Java Enterprise Edition (J2EE) Enterprise JavaBeansTM (EJBTM) テクノロジの働きの概要について説明します。
注 EJB テクノロジに精通していない場合は、Java Software チュートリアルを参照してください。
http://java.sun.com/j2ee/docs.html
また、J2EE 仕様も参照してください。
Sun ONE Application Server の概要は、『Sun ONE Application Server 製品の概要』にあります。
この章には次の項目があります。
Sun ONE Application Server に付属する関連ファイルは、次の場所にあります。
- Sun ONE Application Server DTD ファイル
install_dir/apperv/lib/dtds
- Sun ONE Application Server サンプルアプリケーション
install_dir/apperv/samples
EJB 2.0 の変更点の概要
Sun ONE Application Server は、『Enterprise JavaBeans Specification, v2.0』で定義された Sun Microsystems Enterprise JavaBeans (EJBs) アーキテクチャをサポートしており、『Enterprise JavaBeans Specification v1.1』に準拠しています。
注 既存の 1.1 Enterprise JavaBean を Sun ONE Application Server に配備できますが、2.0 Enterprise JavaBean として新しい Bean を開発することをお勧めします。
この節では、Sun ONE Application Server 環境の Enterprise JavaBean に影響を及ぼす『Enterprise JavaBeans Specification, v2.0』の変更点の概要を示します。
- コンテナ管理による持続性 - コンテナ管理による持続性の新しい処理方法を提供する。「エンティティ Beans のコンテナ管理による持続性の使用」を参照
- コンテナ管理による関係 - エンティティ Beans 間の関係を定義できる。「Enterprise JavaBean のアセンブルと配備」を参照
- メッセージ駆動型 Beans - この新しいタイプの EJB は Java Message Service コンシューマである。「メッセージ駆動型 Beans の使用」を参照
- ローカルインタフェース - セッション Beans、エンティティ Beans がローカルインタフェースを実装できる。このため、コンテナ管理される EJB 関係は、ローカルインタフェースに基づく。「ローカルインタフェースの作成」を参照
- ホームインタフェースの追加メソッド - 特定のエンティティ Beans インスタンスに依存しないビジネスロジックを実装できる。「リモートホームインタフェースの作成」を参照
- 新しいクエリ言語 (EJB QL) - 新しい EJB クエリ言語 (EJB QL) により、コンテナ管理関係で定義されたエンティティ Beans のネットワークでのナビゲーションを提供する。「EJB QL の使用」を参照
EJB のアーキテクチャ
Sun ONE Application Server を使用すると、トランザクション、セキュリティ、データベース接続などのミドルウェアサービスのサポートを自動化することによって、ミドルウェア開発の複雑さが軽減されます。
次の図は、Enterprise JavaBean がJ2EE 環境のどこに適応するかを示しています。この図では、クライアントマシンで Web ブラウザまたはアプリケーションクライアントを稼動し、J2EE サーバーマシンでは Sun ONE Application Server を稼動 (ホスト) し、データベースサーバーマシンでは Oracle や LDAP などのデータベースをホストします。Enterprise JavaBeans はビジネス層にあり、JSP (およびサーブレット) がクライアント層にインタフェースを提供し、Sun ONE Application Server がクライアントマシンとデータベースマシンの関係を管理しています。
![]()
Sun ONE Application Server は、次のような EJB 実行システムの基盤を提供します。
- EJB サービスの標準セット
- 分散トランザクション管理サービス
- データストアアクセスまたはバックエンドシステム接続の手段
- EJB クラスの管理サービスおよび制御サービスを実装するための EJB コンテナ
次の図は、J2EE 環境をさらに詳細に示しています。ビジネスロジック層が EJB フローを示します。
![]()
付加価値機能
Sun ONE Application Server は、EJB 開発に関する付加価値機能を提供します。これらの機能については、次の各項目で説明します (詳細な資料への参照も含まれる)。
読み取り専用 Beans
Sun ONE Application Server には、読み取り専用 Bean を作成する機能があります。このエンティティ Bean は、EJB クライアントによって変更されません。読み取り専用 Beans を使うことで、データベースが完全に更新されることを防げます。
読み取り専用 Bean は、頻繁にアクセスされるが、他の Beans によって外部から更新される頻度の低いデータベースエントリのキャッシュに利用できます。読み取り専用 Bean によってキャッシュされたデータが別の Bean によって更新される場合は、キャッシュデータを更新することを読み取り専用 Bean に知らせることができます。
Sun ONE Application Server には、読み取り専用 Bean の状態を更新する機能がいくつも用意されています。Bean の refresh-period-in-seconds 要素とトランザクション属性を設定することで、読み取り専用 Bean を簡単に次のように設定できます。(a) 常に更新される、(b) 定期的に更新される、(c) 更新されない、または (d) プログラムによって更新される。
読み取り専用 Bean は、基になるデータがまったく変更されないか、まれにしか変更されない場合にもっとも適しています。詳細および使用方法のガイドラインについては、「読み取り専用 Beans」を参照してください。
pass-by-reference
sun-ejb-jar.xml ファイルの pass-by-reference 要素を使うことで、Enterprise JavaBeans に適用する受け渡し方法と引数のタイプを指定できます。これにより、パフォーマンスを向上させることができます。「pass-by-reference」を参照してください。
プール機能とキャッシュ機能
Sun ONE Application Server には、高度な設定に対応したプールメカニズムが用意されています。これにより、配備担当者はニーズに適した Bean プールを設定できます。
さらに、Sun ONE Application Server には調整可能な多数のパラメータが用意されているので、キャッシュする Beans の数や、Beans をキャッシュしておく時間を制御できます。同じデータベース行を参照する複数の Bean インスタンスをキャッシュできます。
この機能については、「プールとキャッシュ」を参照してください。
監視
Sun ONE Application Server では、実行時環境をさまざまな観点から監視できます。EJB コンテナ内のさまざまな要素を利用できるので、アプリケーションのデバッグやパフォーマンスのチューニングに役立ちます。
監視については、『Sun ONE Application Server 管理者ガイド』 (「Monitoring and Managing Sun One Application Server section」) および『Performance, Tuning, and Sizing Guide』を参照してください。
Sun ONE Studio 4 との統合
Sun ONE Studio 4 (従来の Forte for Java (FFJ), Enterprise Edition) は、Sun ONE Application Server でのコードの作成、アセンブリ、配備およびデバッグを、単一の使いやすいインタフェースから行うことができる統合開発環境 (IDE) です。Sun ONE Studio 4 IDE と Sun ONE Application Server は、プラグインにより統合されています。
Sun ONE Studio 4 の使用については、Sun ONE Studio 4, Enterprise Edition のチュートリアルおよび「Sun ONE Studio 4 インタフェースによる CMP のマッピング」を参照してください。
動的な配備と再読み込み
アプリケーションまたはスタンドアロンモジュールを配備、再配備、および配備取り消しできます。サーバー稼動中にこれらを行う場合、動的とみなされます。Sun ONE Application Server では、次の動的プロセスを使用できます。
- 動的再読み込み - アプリケーションを構成するクラスがディスク上で変更された場合に、変更されたクラスを再読み込みできる
- 動的再配備 (開発者コミュニティ向け) - サーバーを再起動せずに既存のアプリケーションを再配備できる。また、アプリケーションまたはモジュールを配備取り消しせずに、無効または有効にすることができる
動的な配備の詳細は、『Sun ONE Application Server 開発者ガイド』および『管理者ガイド』を参照してください。
Enterprise JavaBeans について
EJB およびその動作について十分な知識がある場合は、「効率的なアプリケーションの開発について」に進んでください。
この節では次の項目について説明します。
- Enterprise JavaBean とは
- Beans の種類
- EJB フロー
- EJB コンテナ
- インタフェース
- プールとキャッシュ
- Enterprise JavaBeans がリソースにアクセスするしくみ
- トランザクション管理
- アプリケーションセキュリティのしくみ
Enterprise JavaBean とは
Enterprise JavaBean (EJB) は、データメンバー、プロパティ、およびメソッドを持つ自己完結型の再利用可能なコンポーネントです。各 Enterprise JavaBean は、データ構造体やオペレーションメソッドなどの 1 つまたは複数のアプリケーションタスク、またはアプリケーションオブジェクトをカプセル化します。
- Enterprise JavaBean メソッドはパラメータを受け取って戻り値を返す
- Enterprise JavaBean の作成と管理は、コンテナによって実行時に行われる
- クライアントアクセスの仲介は、Bean が配備されたコンテナおよびサーバーによって処理される
- Enterprise JavaBeans は、『Enterprise JavaBeans Specification, v2.0』で定義された標準のコンテナサービスのみを使用できる。このため、EJB 対応のすべてのコンテナで Bean の移植および配備が可能である
- Enterprise JavaBeans は、再コンパイルなしで複合アプリケーションにアセンブルできるコンポーネントである
- クライアントの Bean 定義ビューは、Bean 開発者によって完全に制御されるビューは、Bean が動作するコンテナや Bean が配備されたサーバーの影響を受けない
Enterprise JavaBeans を利用すると大規模な分散アプリケーションの開発が簡単になります。その理由は次のとおりです。
- コンテナ提供サービス - EJB コンテナはシステムレベルのサービスを Enterprise JavaBeans に提供するので、Bean 開発者はビジネス問題の解決に専念できる。Bean 開発者ではなく EJB コンテナが、トランザクション管理やセキュリティ認証などのシステムレベルのサービスを受け持つ
- リモートクライアント - クライアントではなく EJB にアプリケーションのビジネスロジックが含まれるので、クライアント開発者はクライアントのプレゼンテーションに専念できる。クライアント開発者は、ビジネスルールの実装やデータベースアクセスのためのルーチンをコーディングする必要がない。その結果、クライアントは軽量になる。これは、小型デバイスで動作するクライアントでは特に重要な利点である
- Bean の再利用性 - Enterprise JavaBeans は移植可能なコンポーネントであるため、アプリケーションのアセンブリ担当者は、新しいアプリケーションを既存の Beans から構築できる。これらのアプリケーションは、J2EE に準拠するすべてのサーバーで動作する
Beans の種類
Enterprise JavaBean には次の 3 つの種類があります。
- セッション Bean (ステートフル、またはステートレス)
ステートフルセッション Bean は、編集するドキュメントのコピーや、個々のクライアントに固有のビジネスオブジェクトなど、起動全体で状態が維持されるオブジェクトおよびプロセスを表す
ステートレスセッション Bean は、起動全体で状態が維持されない特定のクライアントが必要とするビジネスロジックの一部を一時的にカプセル化する
セッション Beans の開発については、「セッション Beans の使用」を参照
- エンティティ Bean - エンティティ Bean は通常、持続データを表す。このデータは、データベースで直接管理されるか、またはオブジェクトとして Enterprise Information System (EIS) アプリケーションからアクセスされる
Bean 管理による持続性 - Bean の持続性を Bean 自身が管理する。エンティティ Beans のコードには、データベースにアクセスする呼び出しを記述する。エンティティ Beans 開発の概要、Bean 管理による持続性の開発については、「エンティティ Beans の使用」を参照
コンテナ管理による持続性 - Enterprise JavaBean コンテナが、持続マネージャを介して、エンティティ Bean が要求するすべてのデータベースアクセスを処理する。コンテナ管理による持続性については、「エンティティ Beans のコンテナ管理による持続性の使用」を参照
- メッセージ駆動型 Bean - メッセージ駆動型 Bean はステートレスサービスを表す。これは JMS によって起動される、基本的には完全に匿名で、クライアントに見える識別情報を持たない非同期メッセージコンシューマである
メッセージ駆動型 Beans の開発については、「メッセージ駆動型 Beans の使用」を参照してください。
EJB フロー
ユーザーがブラウザから Sun ONE Application Server Servlet を呼び出すと、そのサーブレットが 1 つまたは複数の Enterprise JavaBeans を呼び出します。たとえば、サーブレットはユーザーのブラウザに JavaServer Page (JSP) を読み込んでユーザー名とパスワードを要求し、さらに入力された内容をセッション Beans に渡して確認します。
![]()
有効なユーザー名とパスワードの組み合わせを受け取ると、サーブレットは 1 つまたは複数のエンティティ Beans およびセッション Beans をインスタンス化してアプリケーションのビジネスロジックを実行し、その後で終了します。Bean 自体もほかのエンティティ Beans またはセッション Beans をインスタンス化して、ビジネスロジックおよびデータ処理をさらに行います。
サンプルシナリオ
サーブレットは、顧客サービス担当者が注文データベースにアクセスするためのセッション Bean を起動します。このアクセスでは、次の機能が必要です。
- データベースをブラウズする
- 購入項目をキューに入れる
- 顧客からの注文を受け付ける
- データベース内の部品数を減らす
- 顧客に請求書を発行する
- 在庫が不足した場合に部品を追加注文する
顧客注文プロセスの一環として、サーブレットは「ショッピングカート」を管理するセッション Bean を作成し、顧客が選択したアイテムを一時的に記録します。注文が完了すると、ショッピングカートのデータは注文データベースに転送され、ショッピングカートのセッション Bean が解放されます。
EJB コンテナ
Enterprise JavaBeans は、常にコンテナのコンテキスト内で動作します。コンテナは、Enterprise JavaBeans とホストサーバーとの間でリンクのように機能します。EJB コンテナによって、ユーザー独自のコンポーネントやほかの供給元に提供されたコンポーネントを使った分散アプリケーションを構築できます。
Sun ONE Application Server では、コンテナを通して高レベルのトランザクション管理、セキュリティ管理、状態管理 (持続性)、マルチスレッド、およびリソースプールラッパーを提供するので、ユーザーが低レベル API の詳細を理解する必要はありません。コンテナによって並行性が確保されるため、エンティティ (つまりスレッド) が同時に 1 つの Enterprise JavaBean にアクセスする心配がありません。このコンテナは、『Enterprise JavaBeans Specification, v2.0』に規定されているすべての標準コンテナサービスに加えて、Sun ONE Application Server に固有のサービスも提供します。
Sun ONE Application Server サービスには、リモートアクセス、ネーミング、セキュリティ、並行性、トランザクションコントロール、データベースアクセスなどがあります。次の図は、Sun ONE Application Server で提供される EJB コンテナを示します。
![]()
インタフェース
クライアントがセッション Beans またはエンティティ Beans のインスタンスに直接アクセスすることはありません。クライアントは Beans のリモートインタフェースを使って Bean インスタンスにアクセスします。Beans のリモートインタフェースを実装する EJB オブジェクトクラスは、コンテナによって提供されます。
ホームインタフェース
ホームインタフェースは、クライアントが EJB の作成、破棄、および検索を行うためのメカニズムを提供します。EJB は、EJB 仕様に定義されている javax.ejb.EJBHome インタフェースを拡張するコンテナに、ホームインタフェースを提供します。ホームインタフェースは、そのもっとも基本的な機能として、Bean を作成する各方法に関連する 0 または 1 つ以上の create メソッドを定義します。
エンティティ Beans では、1 つの Bean または Bean の集まりの検索に使用可能な方法ごとに検索メソッドを定義する必要があります。
リモートインタフェース
リモートインタフェース (およびリモートホームインタフェース) は、リモートクライアントがセッション Beans またはエンティティ Beans にアクセスするメカニズムを提供します。リモートクライアントは、同じコンテナまたは別のコンテナで配備される別の EJB でも、アプリケーション、アプレット、サーブレットなどの Java プログラムでもかまいません。EJB のリモートクライアントビューは、場所に依存せず、非 Java クライアント環境にマップできます。
リモートホームインタフェースは、EJB 開発者によって定義され、EJB コンテナによって実装されます。
ローカルインタフェース
ローカルインタフェース (およびローカルホームインタフェース) は、セッション Bean またはエンティティ Bean を持つ同じ Java 仮想マシン (JVM) に配備されたクライアントが、その Bean にアクセスするメカニズムを提供します。これにより、ローカルクライアントビューを提供します。ローカルクライアントは、関連付けられた Bean に密結合される場合があり、セッション Beans およびエンティティ Beans は多数のローカルクライアントを持つことができます。
コンテナは、ローカルホームインタフェースおよびローカルインタフェースを実装するクラスを提供します。これらのインタフェースを実装するオブジェクトは、ローカル Java オブジェクトです。EJB のローカルクライアントビューは、場所に依存します。
次の図は、ローカルインタフェースを介してローカルクライアントが接続するコンテナの 2 つの Enterprise JavaBeans を示します。
![]()
開発時にローカルインタフェースを Bean で定義すると、同じコンテナ内からの呼び出しの場合、その Bean への効率的な呼び出しが可能になります。
プールとキャッシュ
Sun ONE Application Server の EJB コンテナは、オブジェクトの作成と削除によるオーバヘッドを削減するために、匿名のインスタンス (メッセージ駆動型 Beans、ステートレスセッション Beans、エンティティ Beans) をプールします。EJB コンテナは、配備される各 Bean の空きプールを維持します。空きプール内の Bean インスタンスには識別情報が含まれず (つまり、主キーが関連付けられていません)、ホームインタフェースのメソッド呼び出しの処理に利用されます。ステートレスセッション Beans では、すべてのメソッドの処理に空き Beans が使われます。
ejbCreate メソッドとビジネスメソッドが実行されると、空きプール内の Bean インスタンスの状態は、「Pooled」から「Cashed」に変わります。各プールのサイズと動作は、server.xml ファイルと sun-ejb-jar.xml ファイルに記録されるプール関連プロパティを使って制御できます。
EJB コンテナは、パフォーマンスを向上させるために「ステートフル」インスタンス (ステートフルセッション Beans とエンティティ Beans) をメモリにキャッシュします。EJB コンテナは、配備される各 Bean のキャッシュを維持します。
スケーラビリティを実現するために、コンテナはキャッシュがオーバーフローした場合などに選択的に一部の Bean インスタンスを削除します。削除された Bean インスタンスは、Bean の空きプールに戻ります。各キャッシュのサイズと動作は、server.xml ファイルと sun-ejb-jar.xml ファイルに記録されるキャッシュ関連プロパティを使って制御できます。
sun-ejb-jar.xml ファイルに記録されるプール関連およびキャッシュ関連のパラメータについては、「プールとキャッシュの要素」を参照してください。
プール関連パラメータ
Sun ONE Application Server のプール機能で最も重要なパラメータの一つが steady-pool-size です。steady-pool-size に 0 より大きな値を指定すると、コンテナは指定数の Beans でプールを満たすだけでなく、空きプール内の Beans の数を常に同数に維持しようとします。これにより、ユーザーからの要求を処理する準備が整った Beans を確保できます。
別のパラメータである pool-idle-timeout-in-seconds を使用すると、Bean インスタンスがプール内でアイドル状態でいられる時間を指定できます。pool-idle-timeout-in-seconds に 0 より大きな値を設定すると、指定時間が経過してもアイドル状態を続ける Bean インスタンスが削除されます。
キャッシュ関連パラメータ
Sun ONE Application Server では、コミット C オプションを使ってエンティティ Beans のキャッシュを完全に回避できます。コミット C オプションは、アクセスは多いが再利用の少ない Beans に特に適しています。詳細は、「コミットオプション」を参照してください。
Sun ONE Application Server のキャッシュは、有限、無制限のいずれかにすることができます。有限キャッシュでは、保持できる Beans の数に制限があり、それを超えると Beans は非活性化されます。ステートフルセッション Beans では、キャッシュがオーバーフローしたときにどの Beans を削除するかを 3 つの方法 (LRU、NRU、FIFO) で指定できます。一定期間アクセスされないアイドル状態の Beans を非活性化するようにキャッシュを設定することもできます。
Enterprise JavaBeans がリソースにアクセスするしくみ
Enterprise JavaBeans は、データベース、JavaMail セッション、JMS オブジェクト、URL など、さまざまな種類のリソースにアクセスできます。J2EE プラットフォームは、それらのリソースすべてに同様の方法でアクセスできるメカニズムを提供します。
この節では次の項目について説明します。
JNDI 接続
J2EE コンポーネントは、JNDI (Java Naming and Directory Interface) API の lookup メソッドを呼び出して、アクセスが必要なオブジェクトを特定します。この呼び出しによって返される値は、呼び出し元がアクセスすべきオブジェクトを表します。Enterprise JavaBeans では、lookup を呼び出すと、その Bean のホームインタフェースを参照するオブジェクトが返されます。この参照は、EJB ホームインタフェースのすべての機能の呼び出しにも使用されます。
Context initial = new InitialContext();
Object objref
initial.lookup("java:comp/env/ejb/CompString");配備した Enterprise JavaBean へのアクセスが必要なサーバーの J2EE コンポーネント (JSP、サーブレット、または Enterprise JavaBean) は、配備記述子内の EJB 参照要素を使ってこのアクセスを指定します。EJB 参照は、配備時にアクセス先の Enterprise JavaBean に対応する JNDI 名にマップされます。このマッピングには、Enterprise JavaBeans にアクセスするコンポーネントと、アクセスされる Beans の JNDI 名とを切り離す働きがあります。このため、EJB のホームと結ばれる JNDI 名は、配備時に変更される可能性がありますが、呼び出し元のコードを変更する必要はありません。
データベースへの接続
Enterprise JavaBean の持続タイプによって、データベースにアクセスするための接続ルーチンをコーディングするかどうかが決まります。
- データベースにアクセスするがコンテナ管理による持続性を使用しない Beans - 開発者が持続コードを記述する必要がある。Beans 管理による持続性を使用するエンティティ Beans、およびセッション Beans がこれに含まれる
- コンテナ管理による持続性を使用するエンティティ Beans - コネクションルーチンは、配備時に生成される。エンティティ Beans だけに適用される
URL への接続
Uniform Resource Locator (URL) は、Web ページなど、Web 上のリソースの場所を示します。URL は JNDI 名にマップされ、開発者はこの URL を検索できます。
トランザクション管理
アプリケーションの処理をトランザクションと呼ばれる単位に分割すると、データベースのフェール復旧や整合性の維持など、複雑な問題を処理する必要がなくなります。
開発者は、EJB コード内のプログラムによるトランザクションの境界設定 (Bean 管理) か、または宣言による境界設定 (コンテナ管理) のどちらかを使用できます。Enterprise JavaBean で Bean 管理とコンテナ管理のどちらのトランザクション境界設定を使用するかに関係なく、EJB コンテナおよび Sun ONE Application Server にトランザクション管理の負荷がかかります。このコンテナとサーバーは、必要な低レベルのトランザクションプロトコル (トランザクションマネージャと、データベースシステムまたは Sun ONE Message Queue プロバイダの間の 2 階層コミットプロトコルなど) を実装します。
トランザクション処理の詳細については、「Enterprise JavaBeans のトランザクション処理」を参照してください。
アプリケーションセキュリティのしくみ
J2EE アプリケーションプログラミングモデルを利用すると、開発者は、各メカニズムのアプリケーションセキュリティに関する実装を詳細に扱う必要がありません。ほとんどの部分では、コンテナはセキュリティインフラストラクチャを実装できます。J2EE では、アプリケーションの移植性を高めて、コードを追加せずにさまざまなセキュリティ環境にアプリケーションを配備できるようにしています。
アプリケーションで使用される、宣言によるセキュリティメカニズムは、配備記述子に示されます。配備するときは、Sun ONE Application Server の専用ツールを使用して、配備記述子内のアプリケーション要件を、コンテナが実装するセキュリティメカニズムに対応付けます。
詳細については、「安全な Enterprise JavaBeans の開発」を参照してください。セキュリティのレルムについては、『Sun ONE Application Server 開発者ガイド』を参照してください。
効率的なアプリケーションの開発について
Sun ONE Application Server アプリケーションのビジネスロジックおよびデータ処理を、もっとも効率的な組み合わせ (サーブレット、JSP、セッション Beans、エンティティ Beans、およびメッセージ駆動型 Beans) に分割することは、開発者の重要な仕事です。Enterprise JavaBeans を使ったオブジェクト指向の設計には特別なルールはありませんが、エンティティ Bean のインスタンスは生存期間が長く、持続的で、複数のクライアント間で共有されるものにし、セッション Bean のインスタンスは生存期間の短く、1 つのクライアントだけに使われるものにします。メッセージ駆動型 Beans は、唯一の非同期の受け手として独自のカテゴリに入ります。
一般に、複数のアプリケーションおよびクライアント間で Enterprise JavaBeans を共有して、アプリケーションを複数のサーバー間に容易に配備することと実行速度とのバランスがとれた、Sun ONE Application Server アプリケーションを作成することを目標とします。
Sun ONE Application Server 環境での Enterprise JavaBeans の開発に役立つように、高レベルな情報およびガイドラインを次の各項で説明します。
- Enterprise JavaBeans 作成の一般的なプロセス
- Bean 使用の手引き
- クライアントビューの手引き
- リモートインタフェースとローカルインタフェースの手引き
- Sun ONE Application Server 機能へのアクセス
Enterprise JavaBeans 作成の一般的なプロセス
ここでは、Enterprise JavaBean 作成の一般的なプロセスを説明します。さまざまな種類の Enterprise JavaBeans を作成する具体的な手順は、この項に記載されている参照箇所にあります。
Enterprise JavaBean の作成手順は次のとおりです。
- すべての Enterprise JavaBean ファイル用のディレクトリを作成します。
- 作成する Enterprise JavaBean のタイプを決定します。
セッション Bean (「セッション Beans の開発」を参照)
エンティティ Bean (「エンティティ Beans の開発」を参照)
コンテナ管理による持続性を使用する Bean (「コンテナ管理による持続性の使用」を参照)
メッセージ駆動型 Bean (「メッセージ駆動型 Beans の開発」を参照)
- EJB 仕様に準拠して、次の Enterprise JavaBean のコードを記述します。
- インタフェースおよびクラスをコンパイルします。
- META-INF ディレクトリ、および Enterprise JavaBean の構築に必要なその他のディレクトリを作成します。
- 配備記述子ファイル (ejb-jar.xml および sun-ejb-jar.xml) を作成します。「Enterprise JavaBean のアセンブルと配備」を参照してください。
Bean がコンテナ管理による持続性を使用するエンティティ Bean である場合、sun-cmp-mappings.xml ファイルと .dbschema ファイルも作成する必要があります。「コンテナ管理による持続性の使用」を参照してください。
- 必要に応じて、クラスと XML ファイルを JAR ファイルにパッケージ化します。ディレクトリ配備を利用する場合は、この操作は省略可能です。
- Bean を単独で配備するか、または J2EE アプリケーション内に含めます。『Sun ONE Application Server 開発者ガイド』を参照してください。
『Sun ONE Application Server 開発者ガイド』で説明されているベリファイアツールを使って、これらのファイルの構造を確認することをお勧めします。
Bean 使用の手引き
アプリケーションのどの部分をエンティティ Beans にするか、およびどの部分をセッション Beans (ステートフルまたはステートレス) またはメッセージ駆動型 Beans にするかを決定することは、アプリケーションの効率に重大な影響を及ぼします。一般には、次のガイドラインに従います。
- ユーザーの対話状態 (特定ユーザーに固有の状態) に対応する共有されないデータの格納にはステートフル Bean を使用する
- データへのアクセスまたはトランザクション操作の実行には、ステートレスセッション Beans を使用する
- タスク限定の小さな一般的なセッション Beans を作成する。これらの Enterprise JavaBeans は、多数のアプリケーションで使われる動作をカプセル化すると理想的である
- Enterprise JavaBeans をプレゼンテーションロジック (サーブレットおよび JSP) と同じサーバー上に配備するようにアプリケーションのアセンブル担当者に依頼する。これにより、アプリケーション実行時のリモートプロシージャコール (RPC) の数が削減される
- アプリケーションでは、ejbRemove メソッドを使って不要になった Bean を明示的に削除して、非活性化プロセスを排除することでコンテナのオーバーヘッドを減らす必要がある
- 別々のアプリケーションの EJB では一意の名前を付ける必要はないが、1 つのアプリケーションサーバーインスタンスのコンテキスト内では一意の名前を付ける必要がある。つまり、1 つのアプリケーション内の複数の Enterprise JavaBeans に同じ名前を付けることはできない
EJB 開発のガイドラインの詳細は、「セッション Beans の使用」、「エンティティ Beans の使用」、および「メッセージ駆動型 Beans の使用」を参照してください。
クライアントビューの手引き
ローカルインタフェースとリモートインタフェースのどちらを選択するかは、設計上の決定項目の 1 つであり、Enterprise JavaBean の開発時に開発者が決定します。ローカルとリモートのどちらのプログラミングモデルを使用するかを決定するときには、次の事項を考慮に入れる必要があります。
- リモートプログラミングモデルでは、場所に依存しない、柔軟な配備を行うことができる。クライアントと Enterprise JavaBeans は疎結合される
- リモート呼び出しでは pass-by-value を使用して、呼び出し元と呼び出される側を分離する層を提供する。これにより、不注意によるデータの変更を防ぐことができる
- ローカルオブジェクトでは、pass-by-reference は省略可能であり、J2EE 仕様には定められていない
- リモート呼び出しは、時間がかかる可能性がありる
- リモート呼び出しでは、パラメータとして渡されるオブジェクトは直列化可能である必要がある
- リモートタイプのナロー変換では、Java 言語キャストではなく javax.rmi.PortableRemote.Object.narrow を使用する必要がある
- リモート呼び出しには、ローカル呼び出しにはないエラーがある。クライアントでは、それらのリモート例外のハンドラを明示的にプログラミングする必要がある
- リモートプログラミングは、そのオーバーヘッドのために、一般に、比較的粗いコンポーネントアクセスで使用される
- ローカル呼び出しでは、オプションで pass-by-reference を使用できる。クライアントと Bean は、pass-by-reference セマンティックに依存するようにプログラミングされることがある。このため、ローカル呼び出しではローカルクライアントと Enterprise JavaBean を同じ場所に置く必要がある
- ローカルプログラミングはコンポーネントへの軽量なアクセスを提供するので、より細かいコンポーネントアクセスに適している
- ローカルインタフェースを通して渡されるオブジェクトは共有される可能性があることに留意する
詳細は、『Enterprise JavaBeans Specification, v2.0』を参照してください。
リモートインタフェースとローカルインタフェースの手引き
すべてのオブジェクト指向の開発と同様に、まず、ビジネスロジックおよびデータ処理に必要な細分レベルを決める必要があります。細分レベルにより、アプリケーションをどの程度の数に分割するかが決まります。
- 低レベルの細分 (Beans の数と Bean メソッドの呼び出し数が少ない) - よりモノリシックなアプリケーションを開発する。共有および再利用の推進はほとんど不可能だが、より高速に実行できるアプリケーションを作成できる
- 高レベルの細分 (Beans の数と Bean メソッドの呼び出し数が多い) - アプリケーションは、細かく定義された多数の Enterprise JavaBeans に分割される。サイト内のさまざまなアプリケーションで EJB の共有および再利用を推進できるアプリケーションとなる
- アプリケーションを中程度から多数の Beans に分割すると、アプリケーションパフォーマンスが著しく低下し、オーバーヘッドが増加する。Enterprise JavaBeans は単なる Java オブジェクトではなく、リモート呼び出しインタフェースのセマンティック、セキュリティセマンティック、トランザクションセマンティック、およびプロパティを伴う、より高いレベルのエンティティである。この複雑さにより、オーバーヘッドが生じる。
Sun ONE Application Server 機能へのアクセス
開発可能なエンティティ Beans には、『Enterprise JavaBeans Specification, v2.0』に厳密に準拠しているエンティティ Beans、その仕様と Sun ONE Application Server の付加価値機能の両方を活用するエンティティ Beans があります。
Sun ONE Application Server には、Sun ONE Application Server コンテナだけを通じて提供される機能がいくつかあります。Sun ONE Application Server API によって、Sun ONE Application Server 環境の各機能をプログラムで利用できます。
注 これらの API はSun ONE Application Server 環境だけで Beans を使う場合にだけ使用します。
EJB のアセンブリと配備について
Sun ONE Application Server でのモジュールとアプリケーションのアセンブリプロセスは、従来のあらゆる J2EE 定義仕様に準拠します。しかし、J2EE 仕様を超えて Sun ONE Application Server の機能を拡張する Sun ONE Application Server 固有の配備記述子を含めることも可能です。
J2EE モジュールは、1 つまたは複数の J2EE コンポーネントの集合で、各コンポーネントは 2 つの配備記述子を持っています。1 つは J2EE 標準の配備記述子で、もう 1 つは Sun ONE Application Server 固有の配備記述子です。Enterprise JavaBeans では、次の配備記述子ファイルがこれに該当します。
- ejb-jar.xml - J2EE 標準ファイル
- sun-ejb-jar.xml - Sun ONE Application Server 固有のファイル
- sun-cmp-mappings.xml - Sun ONE Application Server に固有のコンテナ管理による持続マッピング用のファイル。
EJB DTD および XML ファイルについては、「Enterprise JavaBean のアセンブルと配備」を参照してください。
EJB に関連する要素のリストは、「要素一覧」にアルファベット順に記載されています。
アセンブリと配備に関する一般的な情報は、『Sun ONE Application Server 開発者ガイド』を参照してください。
配備の手順は、『Sun ONE Application Server 管理者ガイド』およびAdministration interfaceのオンラインヘルプを参照してください。