このセクションは、カスタム リスナーの追加方法について説明します。カスタムリスナーは、デフォルトでサポートされていないトランスポート上で、仮想アセットがメッセージを受信したり応答したりすることを可能にします。セクションの内容:
カスタム リスナーとは
各仮想アセットのコンフィギュレーション パネルには、[トランスポート] > [カスタム] タブがあります。このタブは、グループに固有の要件を満たすメッセージ リスナーの実装を表示するようにカスタマイズできます。
カスタム メッセージ リスナーの実装が Virtualize にプラグインされると、仮想化フレームワークはレスポンス メッセージを生成できます。必要なプロトコル上の実際のメッセージの配信や受信は、メッセージ リスナーの実装によって処理されます。
Parasoft Marketplace (カスタマーポータルまたは組織の CTP からアクセス可能 ) には、TCP/IP、 FTP、および Equifax といったその他の固定長メッセージ タイプの例があります。
カスタム リスナー用に実装するインターフェイス
「拡張機能の追加: 基本手順」に記載のように、環境のセットアップが完了したら、次のインターフェイスを実装します ( 詳細については、『Extensibility API』ドキュメントを参照してください)。
- com.parasoft.api.responder.ICustomMessageListener
- com.parasoft.api.ICustomMessage<T> (または com.parasoft.api.DefaultCustomMessage<T> を再使用/拡張する)
ICustomMessageListener の実装
これは必須クラスです。isReady()
は、構成が正しく設定されている場合は true を、そして必要な構成が設定されていない場合は false
を返すべきです。startup()
メソッドはリスナーがリスンを開始するべきときに呼び出されます。次の引数を受け取ります。
- レスポンダーのデプロイメント設定 GUI からの値とトランスポート実装クラスを提供する設定 (決して NULL ではない)。
- ハンドラー。リクエスト メッセージを受け付け、レスポンス メッセージを返すことができる ImessageHandler の実装 (決して NULL ではない) 。
ICustomMessage
インスタンスが IMessageHandler.handleMessage()
の実装に受け入れられるように、このインターフェイスを実装する必要があります。あるいは、メッセージ コンテンツのフォーマットが文字列で表現されている場合は、デフォルトの実装である DefaultCustomMessage<T> を使用できます。パラメータライズされたタイプは、文字列に適したプロパティ (またはヘッダー) オブジェクト タイプに使用できます。
カスタム リスナー用に parasoft-extension.xml を定義
必要なクラスを実装したら、次のように parasoft-extension.xml (「拡張機能の追加: 基本手順」に記載) を定義します。
<?xml version="1.0" encoding="UTF-8"?> <extension xmlns="urn:com/parasoft/extensibility-framework/extension" type="messageListener" name='The name of your message listener, appears in the transports menu' description='A more detailed description'> <class>com.mycompany.MyMessageListener</class> <!-- implements ICustomMessageListener--> <form xmlns="urn:com/parasoft/extensibility-framework/gui"> <!-- This describes the fields you wish to appear in your transport GUI --> <section label="field group 1"> <field id="key 1" label="field 1"/> <field id="key 2" label="field 2"/> ... <section label="field group 2"> <field id="key 3" label="field 3" /> </section> <section label="field group 2"> <field label="field 1" /> ... </section> ... </form> </extension>
section 要素の field id は、ICustomMessageListenerConfiguration インスタンスから値を取得するために使用されます。ICustomMessageListenerConfiguration インスタンスはさまざまな API メソッドに渡され、ユーザーが提供する値をユーザーの実装に渡すことを許可します。また、それらは保存されるときに、レスポンダー デプロイメント記述子ファイルにユーザーが提供する値を維持するために使用されます。フィールド ID は、この XML に基づいて構築された GUI に表示されます。セクション レイアウトはプログラムに影響を及ぼしません。エンド ユーザーが使用しやすいように、さまざまな GUI フィールドをセクションやカテゴリに整理します。
新しいリスナーの検証
「拡張機能の追加: 基本手順」に記載のように、プロジェクトをビルドしたら Virtualize を再起動して、仮想アセット コンフィギュレーション パネルの [トランスポート] > [カスタム] タブに表示されるカスタム リスナー名 (parasoft-extension.xml に指定したもの) を確認します (仮想アセット コンフィギュレーション パネルは、[Virtualize サーバー] ビューの仮想アセット ノードをダブルクリックして開きます)。
カスタム リスナーが 1 個だけの場合、[カスタム] タブはそのカスタム フォーマットの設定専用になります。
複数のカスタム リスナーがある場合、[実装の選択] メニューから使用するリスナーを選択できます。
サンプル
カスタム メッセージ リスナーの実装例は、GitHub で入手できます。リスナーを使用するには、jar をシステム設定のクラスパス リストに追加してから、新しい pva ファイルを作成し、仮想アセットのデプロイでリスナーのポートを構成します。
ヒント
- 拡張 GUI で提供される値は、名前 - 値の文字列マッピングとして保存されます。結果として、 parasoft-extension.xml の form 要素内のフィールドを再編しても、ユーザー値の保存方法に影響ありません。しかしながら、ID を変更するとこれに影響します。ID は値の保存やロードに使用されるため、一意である必要があります。ID を変更すると、その前に保存した構成が以前の値をロードせず、値は空白となります。この場合、Version Updater を使用して、古い ID で保存された古い設定を新しい ID のセットへ移行できます。
- カスタム フォーム GUI では、GUI フィールドは文字列のみをサポートします。ユーザーの拡張が整数やその他のタイプを必要とする場合、拡張の実装で文字列のコンテンツを任意のタイプに変換できます。
GUI フィールドをパスワード フィールド (入力がマスクされ、指定されたパスワードが安全に保存されます) にしたい場合、field 要素に password 属性を追加し、値を true に設定します。たとえば、次は pwd フィールドをパスワード モードにする例です。
<form xmlns="urn:com/parasoft/extensibility-framework/gui"> <section label="Main Settings"> <field id="usr" label="Username"/> <field id="pwd" label="Password" password="true"/> </section> </form>
- テーブルやリストは、文字列フィールドでカンマ区切りの値として実装できます。
- カスタム リスナーの内部的なイベントおよびエラーを参照できるようにするため、(Extensibility API 内で) ApplicationContext からログ記録を呼び出すことができます。イベントは INFO、ERROR、WARN および DEBUG に分類されます。これらのカテゴリは、SOAtest Event Monitor でフィルター条件として使用できます。渡されたコンテキスト上で reportEvent(String message, String type) メソッドを直接的に呼び出すことを推奨します。そうすると、イベントのソース (イベントが発生したレスポンダーおよび PVA) が自動的に設定されます。