サービス

JRun は、公開した Bean のインスタンスと、それらのインスタンスが使用するリソースを管理するためのサービスを提供します。これらのサービスには、公開、ライフサイクルの管理、コンテキストの実行、分散型 2 フェーズ コミット トランザクションの管理、パーシスタンス、およびセキュリティが含まれます。

Bean には、エンティティ Bean とセッション Bean の 2 種類があります。

Bean の開発

Bean 開発者は、ビジネス ロジックを含む Bean をコーディングします。これらの Bean は、セッション Bean またはエンティティ Bean のいずれかです。関連する公開プロパティのほかに、Bean には次の環境が必要です。

Bean およびそのインターフェイスは、Java ベースの開発環境を使用して開発できます。

Bean 開発者は、Bean に関する公開情報も指定します。公開情報は、標準 Java プロパティ、および Bean プロパティの場合は XML 記述子を使用して指定できます。Bean には、必要なプロパティおよびオプションで設定できるプロパティが数多くあります。JRun JavaDocs ファイルに付属する EjiptProperties API マニュアルには、これらのプロパティの完全な一覧が記載されています。

ライフサイクル

EJB エンジンは、公開された Bean のライフサイクルを管理します。Bean に関連付けられたホームおよびリモート インターフェイス (オブジェクト) の実装により、EJB エンジンは Bean のインスタンスの作成、配置、および破棄を行います。

EJB エンジンは、起動時に JNDI を介して Bean を登録し、クライアントが Bean のホーム オブジェクトへの参照を取得できるようにします。ホーム オブジェクトへの参照を取得すると、クライアントは create または findXXX メソッドを呼び出して、Bean のオブジェクトへの参照を取得できます。次に、クライアントはこれらのオブジェクトに関するメソッドを呼び出します。オブジェクト実装は、これらのメソッド呼び出しを実際の Bean 実装に転送します。

クライアントは、Bean のホーム オブジェクトとリモート オブジェクトにのみアクセスできます。クライアントは Bean 実装 (インスタンス) に関するメソッドを直接呼び出すことはできません。

コンテキスト

公開された Bean の各インスタンスには、Bean コンテキストが関連付けられます。Bean のコンテキストは、環境にアクセスするための方法を Bean インスタンスに提供します。これには、呼び出し ID、環境プロパティ、Bean のホームおよびリモート オブジェクトへの参照、およびトランザクション情報が含まれます。

インスタンスの有効期間中は、コンテキストは公開された Bean の特定のインスタンスに連結されます。

トランザクション

JRun は、JTA インターフェイスを使用した 2 フェーズ コミット トランザクション管理によって、分散される可能性のある作業単位の整合性を確保します。Bean は、単一のメソッド呼び出しから複数の参加者がかかわる複数のメソッド呼び出しにいたるまで、すべての作業単位を定義します。

Bean は、自らトランザクションを制御するか、またはプロパティ ファイル内の宣言を通じてトランザクション管理を EJB エンジンに委任できます。EJB に委任する場合、EJB エンジンは Bean に代わって自動的にトランザクションを開始し、コミットします。

分散型 2 フェーズ コミット トランザクション プロトコルの完全な実装が提供されます。ただし、配布の必要がなく、トランザクションの参加者が 1 人だけの場合、トランザクション サポートは自動的に非常に効果的なローカル実行モードに切り替わります。

パーシスタンス

JRun は、Bean 管理パーシスタンス (bmp) と コンテナ管理パーシスタンス (cmp) の両方を提供します。プロパティを使用して、コンテナ管理パーシスタンスのパラメータを定義することで、CMP の正確な設定および制御が可能になります。EJB エンジンは、オブジェクトのパーシスタンスの管理に関して JDBC API に依存します。

データベース リソースは、設定可能なプール内であらかじめ決定されたデータベース接続数で管理されます。接続は、必要に応じてプールから取得されます。トランザクションの完了後、関連する接続は自動的にプールに返され、その後の呼び出しで再利用されます。

データの取得中に結果をキャッシュに保存することで入出力を最小限に抑え、パフォーマンスを最大にします。

ファイル ベースの拡張可能な instance.store を、Bean またはコンテナ管理パーシスタンスと組み合わせて使用することもできます。instance.store は、データベースを使用できない場合やデータベースが不適切な場合に使用できます。

メッセージ サポート

JRun は、Java Message Service (JMS) 仕様を完全に実装することにより、メッセージ サポートのシームレスな統合を提供します。Bean 内のプロデューサ、コンシューマ、および JMS セッションの作成がサポートされています。Bean を非同期メッセージングのリスナとして使用することもできます。メッセージは、EJB エンジンのエンティティ Bean アーキテクチャによって提供されるトランザクション サポートを使用して、完全に処理されます。

セキュリティと認証

JRun は、セキュリティの実装に関して高度に設定可能なメカニズムを提供します。確認するユーザ情報の種類と内容、ロールを構成する情報、および認証の方法などを指定できます。このような柔軟性により、既存のシステムにすでに設置されているセキュリティ方式に順応できます。

ユーザ認証

ユーザおよびロールの概念は、エンティティ Bean を通じて実装されます。ユーザ Bean では、特定のユーザを電子メール アドレス、電話番号、部署などの詳細情報で表すことができます。また、ユーザ Bean は、業務カテゴリやタイプを表すこともできます。ロール Bean は、業務カテゴリ、配属、その他の役割など、ユーザのグループを表します。

java.security.acl.Group がロールを実装するための基本インターフェイスであるのに対して、java.security.Principal は、基礎ユーザを実装するための基本インターフェイスです。ユーザとロールの両方の既定の実装がサーバーに含まれています。これらのクラスを拡張して、特定の認証方式を実装できます。

ユーザおよびロールは、既存のデータベース、フラット ファイル、または
ejipt.properties
ファイルに格納される可能性があります。ユーザとロールが、エンティティ Bean であるため、Bean 管理パーシスタンスとコンテナ管理パーシスタンスのどちらも、データ検索と更新に使用できます。

アクセス制御

Bean およびそのメソッドのアクセス制御は、ユーザまたはロール レベルで簡単に指定できます。各 Bean は、Bean へのアクセスを許可するユーザまたはロールを指定できます。この方法で、特定メソッドへのアクセスも制御できます。

Bean のプロパティ ファイルまたは公開記述子には、EJB エンジンが実行時セキュリティを管理するために使用するアクセス制御エントリが含まれています。これらのエントリは、公開の際にアクセス制御リスト (ACL) を作成するために使用されます。ACL には、ユーザとロールのエントリ、またはどちらかのエントリが含まれます。エントリは、Bean 全体または Bean 内の特定のメソッドに適用できます。公開された各 Bean には、ACL が関連付けられます。

メソッド呼び出しのたびにセキュリティ チェックが実行され、ACL で定義されているアクセス許可に対してユーザおよびロールが確認されます。ロール ツリーは、特定のロールを持つかどうかを確認するために通過されます。

優先 ID

Bean のプロパティ ファイルまたは公開記述子は、特定のメソッドに対して実行 ID を指定できます。実行モードは、使用する ID の種類を指定します。ID の種類は、クライアント、システム管理者、または特定のユーザの ID で指定できます。

特定のユーザの場合は、実際に使用する ID を指定するため、実行 ID プロパティを有効なユーザまたはロール インスタンスに設定する必要があります。