今、私たちは、RPCサービスがアプリケーションサーバーを実装するための基礎として使用することができる持っているが、唯一のRPCサービスが十分ではありません。 したがって、我々はこれらのモジュール/サービスを実装します。
セキュリティ:認証、認可、監査
データベースへの接続のプール
非同期メッセージングサービス
と、サービスを追加するAPIを持つ以外に、サーバはユーザのモジュールを追加するAPIを提供します。 今、サーバーのコンポーネント図:
上位レイヤのコンポーネントは、底層のコンポーネントの機能を使用しています。 今の各コンポーネントを見てみましょう。
セキュリティレルムのマネージャー
これは、すべてのAppServerのに必須です。 レルムのSecurity Managerでセキュリティレルムをインストールします。 セキュリティレルムとは何ですか? 概念的には、サービスへのアクセスを制御するコンポーネントです。 技術的な観点から、インタフェースの実装です。
SecurityRealm {publicインタフェース / ** *ログイン方法。 * @ Paramで資格情報を検証するための資格情報 * @はLoginExceptionをスローした場合ログイン時にexeptionのocurrs * / ボイドログイン(資格の資格)はLoginExceptionをスローします。 / ** * logoutメソッドを。 * @ Paramで資格情報資格情報 * / ボイドは(資格の資格)ログアウト。 / ** *このメソッドは、サービスのメソッドができる場合に限り、trueを返します。 *資格情報を使用してEXECUTEを考える。 * * @ Paramで資格実行しているユーザーの資格情報 * @ ParamでserviceNameはサービス名 * @ ParamでMethodNameメソッドの名前を実行する * @ Paramでは、メソッドに渡すparamentersをparamsを * @実行が指定された資格情報、serviceNameを、methodNameのとし、paramsのために許可されていない信号NotExecutedExceptionをスローします * / executionAllowedボイドは(資格の資格、文字列のserviceNameを、文字列methodNameの、オブジェクト... params)をNotExecutedExceptionをスローします。 }
唯一の3つの方法があります:ログイン、ログアウトとisExecutionAllowed。 最初の二つは、認証の概念に関連するものであり、三番目はリリースの概念を指すだけでなく、監査に関連付けることができ、常にサービスの呼び出し前に実行されている。
セキュリティレルムで)メソッドonPreExecution()メソッドでは、(executionAllowedと呼ばれ、この例外がNotExecutedExceptionをしない場合に実行を継続します:セキュリティマネージャは、Java RPC - 07に表示されるインターセプタのレルムを使用しています。 セキュリティ上の理由から、executionAllowed内の任意の例外(またはエラー)(存在する場合に実行)などのバグ、セキュリティシステムを破ることを防止していません。
その後、任意のコードexecutionAllowed()メソッドを配置すると、特定のパラメータを持つサービスのメソッドの実行を許可または禁止することができます。
セキュリティレルムの管理者は、セキュリティレルムのコレクションを管理します。 彼らはすべて実行し、唯一のすべてが承認された場合には、呼び出しにかかる認可。 セキュリティサーバは、ユーザ名とパスワードと監査(ログ記録)のための他のセキュリティレルムに基づいて、抽象的なレルムを実装しています。
パブリック抽象クラスは{AbstractUserPasswordSecurityRealm SecurityRealmAdapterを拡張 公共AbstractUserPasswordSecurityRealm(){ } 公共ボイドログインが(クレデンシャルC){LoginExceptionをスローします UserPasswordCredentialsは、c(UserPasswordCredentials)=の信用性。 場合(cred! = NULL){ Cred.getUser文字列のユーザ=(); Cred.getPassword文字列のパス=(); 検証(USER、PASS); 他に{} 新しいLoginExceptionを("ヌル信任状")をスローします。 } } executionAllowed公共ボイドは(資格の資格、文字列のserviceNameを、文字列methodNameの、オブジェクト... params)を{NotExecutedExceptionをスローします。 {(資格== nullの)場合 新しいNotExecutedExceptionを("ログインしていない")をスローします。 } } パブリック抽象ボイド検証は、(文字列のユーザー、文字列のパス)LoginExceptionをスローします。 }
モジュールマネージャー
我々が見たように、サーバは拡張可能です。 しかし、どうやって? モジュールによって。 スタートアップ()およびshutdown():モジュールは、単にライフサイクルを管理するための名前と2つのメソッドを持つBeanです。 その後、サーバはモジュール名を取得するメソッドを持っています。 インタフェースとして、とてもシンプルなので、簡単にサーバに任意のサービスを組み込むに適応。 例えば、非同期メッセージングサービスは別々に実装し、このアプリケーションサーバーに合わせてモジュールを作成しました。 データベースへの接続のプールで同上。 インタフェース:
モジュール{publicインタフェース ボイドのsetName(String name)を; 文字列のgetName(); ボイドのスタートアップは、()例外をスローします。 ボイドシャットダウン(); }
サービスからのモジュールの場合、我々は、ServerContextを確認してください。
ServerContext.getModule(moduleNameは);
クラスの核ServerContextアプリケーションサーバのさまざまな部分へのアクセスを提供する静的メソッドのセット。 ほとんどのGetModuleのdesatacan()とgetServerConfig()のある方。 我々が見た最初のもの。 二つ目は設定ファイルからロードされるプロパティを持つマップを返します。 我々はそれに捧げられたセクションの設定が表示されます。
ローダーサービス
これは、コンフィギュレーションファイルの読み込みと中国でサービスを作成するコンポーネントです。 これはモジュールとして実装されており、簡単に別のに置き換えられ、サーバーに接続することができます。 基本的にサービスを記述する設定ファイルを読み込み、パラメータをサーバーに追加されます。
次回の記事では、データベースとメッセージングサービスへの接続プールについて説明します。 私はまた、コンフィギュレーションファイルについて説明します。
次回まで。

