ライトウエイトサービス
ライトウエイトサービスは、クライアントとビジネスサービスレイヤーの間のアプリケーションレイヤーに常駐しています。ライトウエイトサービスは、自動的に起動およびイベントを渡すことはないため、軽量 (ライトウエイト) です。このため、ライトウエイトサービスは、wt.properties ファイルの wt.services エントリでは指定されません。
ライトウエイトサービスメソッドは、以下の目的で設計されます。
• クライアントとサーバーの間のやりとりの回数を削減する。
• ビジネスサービスメソッドよりも高度なタスク特有の機能を提供する。
• クライアントのトランザクションの一貫性を保つ。
ライトウエイトサービスは、イベントを渡すことはできますが、イベントを受信することはありません。サービスが自動的に開始されない場合は、開始されるまで受信されるはずのイベントを受信することができません。
ライトウエイトサービスは、クライアントのトランザクションの一貫性を保つための効果的な手段です。いくつかのクライアントサーバーオペレーションは、これらの操作をサーバー上で単一のトランザクションで実行する単一のライトウエイトサービスメソッド呼び出しにグループ化できます。
ライトウエイトサービスは、以下の 2 つの方法で実装できます。
• wt.services.StandardManager を拡張するモデル化クラスを使用する
• wt.method.RemoteAccess を実装する非モデル化内部クラスを使用する
以下のサブセクションでは、これらの実装について説明します。
モデル化実装
ライトウエイトサービスは、リモートインタフェースによって定義され、StandardManager を拡張する実装クラスを持つビジネスサービスと同様にモデル化されます。リモートインタフェースによって、サービスがメソッドサーバー内で実行されリモートクライアントによって起動されます (スタンドアロン JAVA クライアントなど)。サービスインタフェースと実装クラスのマッピングは、ネーミング規則によって行われます。ライトウエイトサービスの実装クラスは、インタフェース名の最初に Standard が付いている名前である必要があります。
ライトウェイトサービスを使用するには、生成されたフォワーダークラスのインスタンスを作成し、このフォワーダーを通じてサービスのメソッドを呼び出します。これは、ヘルパークラスの静的属性がフォワーダークラスのインスタンスで初期化されるビジネスサービスとよく似ています。これらのクラスでのサービス操作の起動メカニズムは同一です。
例: CommentLogger という名前のライトウェイトサービスが wt.services.test パッケージ内の WTDesigner.mdl にあります。CommentLogger インタフェースがサーバーのログファイルにメッセージを書き込むライトウェイトサービスを定義します。このサービスは、メッセージをサーバーのログに追加するスタンドアロン JAVA クライアントに有効です。このようなサービスがないと、すべての System.out.println の呼び出しが、サーバーログファイルの代わりにブラウザの Java コンソールウィンドウに出力を送ります。StandardCommentLogger は、wt.services.StandardManager と CommentLogger インタフェースを拡張してこのサービスを実装します。ManagerService が CommentLogger サービスの実装クラスを見つけられるように、名前は StandardCommentLogger である必要があります。CommentLogger には、RemoteInterface のステレオタイプがあるため、CommentLoggerFwd という名前のフォワーダークラスが自動的に生成されます。このクラスが、CommentLogger サービスメソッドの起動に使用されます。
CommentLoggerFwd logger = new CommentLoggerFwd();
logger.log("a message");
内部クラス実装
ライトウェイトサービスを実装するもう 1 つの方法は、wt.method.RemoteAccess を実装する、モデル化されていない内部クラスを使用する方法です。内部クラスの実装例は下にあります。目的は、クライアントによってロードされるクラスの数を最低限に抑えながら、クライアントの必要とする情報を収集して複雑なサーバー側のアクティビティを起動することです。クラスのロードには時間がかかり効率が悪いため、これらの技術によって、クライアントのパフォーマンスを向上させることができます。
この例では、内部クラスのタイプに注意してください。IllegalAccess 違反を避けるために、フォワーダーはパブリック静的クラスとして宣言される必要があります。この宣言を使用して、MethodServer はインスタンス化でき、内部クラスのメソッドを起動できます。
目的のサーバーメソッドの起動テクニックにも注意してください。処理の一部として指定されたクラスのロードが MethodServer で実行されないように、ターゲットとなる内部クラスと目的のメソッドを文字列として指定します。クラス自体の参照は、必要がなくても、そのクラスとクライアント VM にロードされる必要のあるすべてのクラスを呼び出します。