エンタープライズ Bean 開発のベスト・プラクティス
エンタープライズ Bean を設計および開発する際には、以下のガイドラインを使用してください。
- ビジネス・ロジックのエントリー・ポイントの機能を果たすには、ステートレス・セッション Bean を使用します。
- エンティティー Bean は、コンテナー管理パーシスタンスを使用する必要があります。
- Enterprise JavaBeans (EJB) バージョン 2.x 以降の環境では、同じ Java 仮想マシン内のエンタープライズ Bean 間の通信を改善するために、ローカル・インターフェースを使用してください。
ローカル呼び出しは、RMI/IIOP のオーバーヘッドを避け、 値による受け渡しではなく参照による受け渡しのセマンティクスを使用します。呼び出しごとに、呼び出し元および呼び出し先の Bean は引数の状態を共有します。EJB 2.x 以降の Bean には、ローカル・インターフェースとリモート・インターフェースの両方を備えることができますが、たいていは、いずれか一方を備えています。
- リモート・クライアントと通信する場合は、 リモート・インターフェースとリモート・ホーム・インターフェースを準備してください。サーブレット、エンティティー Bean、およびメッセージ駆動型 Bean のようなローカル・クライアントと通信する場合は、 ローカル・インターフェースおよびローカル・ホーム・インターフェースを準備してください。
コンテナー管理パーシスタンスのバッチ・コマンド
JDBC 2.0 以降では、PreparedStatement オブジェクトは、バッチとして一緒にサブミット可能なコマンド・リストを保持できます。 複数のデータベースを往復させる代わりに、 すべてのバッチ・パーシスタンス要求に対して 1 つのデータベースが往復します。
EJB コンテナー管理パーシスタンス (CMP) に対してこの機能を使用できるようにすることができます。 これを行う場合、ランタイムは、 必要になるまで ejbStore/ejbCreate/ejbRemove または同等のデータベース・パーシスタンス要求 (挿入/更新/削除) を据え置きます。 これは、トランザクションの終わりか、またはこの EJB タイプに関連付けられたファインダーにフラッシュが必要な場合に起こります。 最終的にパーシスタンス操作が起こると、ランタイムはデータベース要求を累算し、 JDBC PreparedStatement バッチ操作を使用して、複数行の同一操作に対して、単一の JDBC 呼び出しを行います。
本製品では、アセンブリー・ツールを使用して同じ設定を行うことができます。
コンテナー管理パーシスタンスの据え置き作成
ejbCreate 中の CMP については、コンテナーはデータベースのエンティティー表記を即時に作成することも、いったん据え置いて後で作成することもできます。
EJB CMP サイドからこのオプションをオンにすることができます。このオプションを選択した場合、ランタイムは ejbCreate または同等のデータベース・パーシスタンス要求を、必要になるまで据え置きます。 これは、トランザクションの終わりか、またはこの EJB タイプに関連付けられたファインダーにフラッシュが必要な場合に起こります。 これを行うと、新しく作成したエンティティー (挿入および更新) の 2 つの往復を、1 つ (挿入) に減らすことができます。
本製品では、アセンブリー・ツールを使用して同じ設定を行うことができます。