TCP アダプタに関する特殊なトピック
このページでは、TCP アダプタに関連する追加のトピックを取り上げます。
アダプタのコールバック・メソッドのカスタマイズに関する一般情報は、"あまり一般的ではないタスク" を参照してください。
InterSystems IRIS® では、TCP アダプタを使用する特殊なビジネス・サービス・クラスとユーザのニーズに適したビジネス・サービス・クラスの 1 つも提供されます。そのため、プログラミングの必要がありません。"接続オプション" を参照してください。
TCP ステータス・サービスの追加
EnsLib.TCP.StatusServiceOpens in a new tab クラスは、受信テキスト文字列を解析して、要求されているプロダクション・ステータス情報のタイプを特定してから、コンソール画面への出力に適した応答文字列を生成します。ユーザは、ステータス・サービスと直接対話したり、ステータス・サービスと通信を行い、コマンドを発し、その後の分析用テキスト・ファイルへの応答を記述するなどのコマンド・スクリプトを記述できます。
開発者は、以下のようにして、ステータス・サービス経由での対話が可能です。
-
EnsLib.TCP.StatusServiceOpens in a new tab のインスタンスをプロダクションに追加します。
-
EnsLib.TCP.StatusServiceOpens in a new tab のインスタンスを構成して、特定の TCP ポート経由の通信を受け入れます。接続を受け入れる Port 番号と Allowed IP Addresses のリストを設定します。この手順は、ステータス・サービスに関連付けられている TCP テキスト行受信アダプタの構成に有効ないくつかの設定のうちの 2 つにすぎません。詳細は、設定のリファレンスを参照してください。
以上の手順を完了すると、いつでもステータス・サービスを有効化して実行し、ユーザまたはコマンド行スクリプトで Telnet 接続を開始して、Portを構成し、ステータス・サービスにコマンドを送信することができます。各コマンドは、新規行文字 (ASCII 10) で終了するテキスト文字列である必要があります。応答文字列も新規行で終了します。
以下の表は、サポートしているコマンド行と、状況に応じて返されるテキスト文字列の内容を示しています。
コマンド行 | 返されるテキスト文字列 |
---|---|
build | InterSystems IRIS ソフトウェア・バージョンの完全名。 |
configitemstatus name |
現在実行中のプロダクション内のいずれかのビジネス・ホストの構成名を使用してこのコマンドを入力すると、ステータス・サービスは、そのビジネス・ホストの現在の状態を表す文字列を返します。 現在、ジョブを実行中のホスト、またはアクティブになっている接続は、返す文字列にそのアクティビティを記録します。識別されたホストが、現在実行中のプロダクションのメンバではない場合、返す文字列にそのことを示します。 |
exit | 文字列は返されません。このコマンドはステータス・サービスを切断します。exit の代わりに x を入力することもできます。 |
localstarttime | InterSystems IRIS が実行中の場合、現在実行中のプロダクションの開始時刻を現地時間で返します。Ensemble が実行中ではない場合、<UNDEFINED> というメッセージの文字列を返します。 |
localtime | 現地時間による現在時刻です。 |
namespace | 現在実行中のプロダクションが格納されている相互運用対応ネームスペースです。 |
production | 現在実行中のプロダクションの構成名です。 |
quit | 文字列は返されません。このコマンドはステータス・サービスを切断します。quit の代わりに q を入力することもできます。 |
utcstarttime | InterSystems IRIS が実行中の場合、現在実行中のプロダクションの開始時刻を協定世界時 (UTC) で返します。Ensemble が実行中ではない場合、<UNDEFINED> というメッセージの文字列を返します。 |
utctime | 協定世界時 (UTC) による現在時刻です。 |
version | InterSystems IRIS ソフトウェア・バージョンの略名です。例: 2018.1.0.514/2171 |
x | exit と同様です。 |
カスタム TCP アダプタ・クラスの作成
TCP アダプタ・クラスのカスタム・サブクラスを作成するには、IDE で次の手順を実行します。
-
[ファイル] メニューで [新規作成] をクリックしてから [全般] タブをクリックします。
-
[InterSystems IRIS クラス定義]→[OK] の順にクリックして、新しいクラス・ウィザードを開始します。
-
パッケージとクラス名を入力し、[次へ] をクリックします。
-
[クラスの種類] で、[拡張] をクリックします。
-
[スーパー・クラス名] の横にある [ブラウズ] をクリックし、サブクラス化する必要のあるクラスに移動します。
-
[OK] をクリックします。
-
[終了] をクリックします。
結果は次のようなテンプレート・クラスになりますが、選択したクラスによって異なります。
Class MyTest.NewClass1 Extends EnsLib.TCP.InboundAdapter { }
-
-
プロパティ、メソッド、クラス・パラメータ、またはクラスまたはその親クラスから継承したその他のクラス・メンバをすべてオーバーライドできます。あるいは、新しいクラス・メンバを追加することもできます。唯一の要件は以下のとおりです。
-
受信アダプタ・クラスは、OnConnected() メソッドを実装する必要があります。
実装には、クラスによって継承されるヘルパー・メソッドを使用します。
-
送信アダプタ・クラスは、TCP 接続の作成、接続の読み込みまたは書き込み、切断を実行するメソッドを定義します。
これらのメソッドを定義するには、クラスによって継承されるヘルパー・メソッドを使用します。
-
-
このクラスをコンパイルします。そこでこのクラスが保存されます。
TCP アダプタ・サブクラスの共通カスタマイズ
以下のリストに、アダプタが必要とするメソッドの実装に加えて、TCP アダプタ・サブクラスの共通カスタマイズをいくつか提案します。
-
Terminators プロパティの InitialExpressions に関するさまざまな値を定義できます。
ASCII 文字を指定するには、ObjectScript 関数の $CHAR (短縮形 : $C) を使用します。EnsLib.TCP.TextLineInboundAdapterOpens in a new tab の以下の例では、Terminators を新規行文字 (ASCII 10) に設定しています。
Property Terminators As %String [ InitialExpression = {$C(10)} ];
$CHAR などの関数の詳細は、"ObjectScript 関数" を参照してください。
Terminators には、1 つの文字のほか、複数文字の文字列も設定できます。Terminators 値に文字列を指定した場合、InterSystems IRIS は文字列を以下のように使用します。
-
文字列のいずれか 1 つの文字が入力の終了を実行します。
-
文字列のすべての文字が出力に付記されます。
-
-
プロパティとメソッドを追加することができます。
-
設定を追加したり、削除したりできます。"設定の追加と削除" を参照してください。
-
接続にログイン資格情報を必要とする場合は、プロパティ名 Credentials を SETTINGS のリストに追加してください。Credentials プロパティは、基本クラス Ens.AdapterOpens in a new tab で %StringOpens in a new tab として既に定義されています。
-
(受信アダプタの場合) パラメータ SINGLEPOOLJOB を 1 に設定して、プール・サイズを強制的に 1 にすることもできます。
/// Force a single listener job regardless of PoolSize setting Parameter SINGLEPOOLJOB = 1;
このアダプタ・クラスの任意のサブクラスまたはこのようなアダプタ・クラスを使用するビジネス・サービス・クラスのサブクラスでは、そのクラス・コードでこのパラメータを使用してプール・サイズを詳細に制御できます。
-
OnInit() コールバック・メソッドを実装すると、特殊な設定アクションの実行や、任意の構造の初期化が可能になります。
受信アダプタでは、これらのアクションのいずれかで、設定を検査してアダプタとそれがリッスンする TCP クライアント間の接続を初期化したり、アダプタが使用するすべてのオブジェクト・プロパティを作成したりします。
送信アダプタでは、これらのアクションのいずれかで、設定を検査して TCP リスナ上のポートへのソケットを開きます。
-
受信アダプタでは、OnConnected() コールバック・メソッドを実装できます。
構成済み TCP クライアントへの接続が存在する場合は常に、アダプタは OnConnected() を呼び出して TCP データ・ソースからストリームを読み取ります。この読み取り操作は、アダプタの設定によって制御されます。
OnConnected() は、ヘルパー・メソッドを使用してデータを解析します。
データを正常に読み取ったら、OnConnected() は、プロダクション・フレームワークの ProcessInput() メソッドを呼び出して、受信したデータ・ストリームを関連付けられたビジネス・サービスに渡します。この呼び出しによって送信ストリームが返された場合は、OnConnected() は、そのデータを TCP クライアントに対する応答として書き込みます。
CallInterval の期間中に TCP 接続からデータを読み取ることができなかった場合は、OnConnected() は何も実行せずに復帰します。