Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

特殊なトピック

この章では、以下の追加のトピックについて説明します。

アダプタのコールバック・メソッドのカスタマイズに関する一般情報は、"Ensemble プロダクションの開発" の “あまり一般的ではないタスク” を参照してください。

Tip:

Ensemble では、TCP アダプタを使用する特殊なビジネス・サービス・クラスとユーザのニーズに適したビジネス・サービス・クラスの 1 つも提供されます。そのため、プログラミングの必要がありません。"Ensemble の紹介" の “接続オプション” を参照してください。

TCP ステータス・サービスの追加

EnsLib.TCP.StatusServiceOpens in a new tab クラスは、受信テキスト文字列を解析して、要求されているプロダクション・ステータス情報のタイプを特定してから、コンソール画面への出力に適した応答文字列を生成します。ユーザは、ステータス・サービスと直接対話したり、ステータス・サービスと通信を行い、コマンドを発し、その後の分析用テキスト・ファイルへの応答を記述するなどのコマンド・スクリプトを記述できます。

開発者は、以下のようにして、ステータス・サービス経由での対話が可能です。

  1. EnsLib.TCP.StatusServiceOpens in a new tab のインスタンスをプロダクションに追加します。

  2. EnsLib.TCP.StatusServiceOpens in a new tab のインスタンスを構成して、特定の TCP ポート経由の通信を受け入れます。接続を受け入れる Port 番号と Allowed IP Addresses のリストを設定します。この手順は、ステータス・サービスに関連付けられている TCP テキスト行受信アダプタの構成に有効ないくつかの設定のうちの 2 つにすぎません。詳細は、“設定の参照先” を参照してください。

以上の手順を完了すると、いつでもステータス・サービスを有効化して実行し、ユーザまたはコマンド行スクリプトで Telnet 接続を開始して、Portを構成し、ステータス・サービスにコマンドを送信することができます。各コマンドは、新規行文字 (ASCII 10) で終了するテキスト文字列である必要があります。応答文字列も新規行で終了します。

以下の表は、サポートしているコマンド行と、状況に応じて返されるテキスト文字列の内容を示しています。

コマンド行 返されるテキスト文字列
build Ensemble ソフトウェア・バージョンの完全名。例 : Cache for Windows (x86-32) 2007.1.2 (Build 514U) Mon Aug 13 2007 11:30:37 EDT
configitemstatus name

現在実行中のプロダクション内のいずれかのビジネス・ホストの構成を使用してこのコマンドを入力すると、ステータス・サービスは、そのビジネス・ホストの現在の状態を表す文字列を返します。

現在、ジョブを実行中のホスト、またはアクティブになっている接続は、返す文字列にそのアクティビティを記録します。識別されたホストが、現在実行中のプロダクションのメンバではない場合、返す文字列にそのことを示します。

exit 文字列は返されません。このコマンドはステータス・サービスを切断します。exit の代わりに x を入力することもできます。
localstarttime Ensemble が実行中の場合、現在実行中のプロダクションの開始時刻を現地時間で返します。Ensemble が実行中ではない場合、<UNDEFINED> というメッセージの文字列を返します。
localtime 現地時間による現在時刻です。
namespace 現在実行中のプロダクションが格納されている Ensemble ネームスペースです。
production 現在実行中のプロダクションの構成名です。
quit 文字列は返されません。このコマンドはステータス・サービスを切断します。quit の代わりに q を入力することもできます。
utcstarttime Ensemble が実行中の場合、現在実行中のプロダクションの開始時刻を協定世界時 (UTC) で返します。Ensemble が実行中ではない場合、<UNDEFINED> というメッセージの文字列を返します。
utctime 協定世界時 (UTC) による現在時刻です。
version Ensemble ソフトウェア・バージョンの略名です。例 : 2007.1.0.514/2171
x exit と同様です。

カスタム TCP アダプタ・クラスの作成

TCP アダプタ・クラスのカスタム・サブクラスを作成するには、スタジオで次の手順を実行します。

  1. [ファイル] メニューで [新規作成] をクリックしてから [全般] タブをクリックします。

  2. [Caché のクラス定義]→[OK] の順にクリックして、新しいクラス・ウィザードを開始します。

    1. パッケージとクラス名を入力し、[次へ] をクリックします。

      Important:

      予約パッケージ名は使用しないでください。“Ensemble プロダクションの開発” の “予約パッケージ名” を参照してください。

    2. [クラスの種類] で、[拡張] をクリックします。

    3. [スーパー・クラス名] の横にある [ブラウズ] をクリックし、サブクラス化する必要のあるクラスに移動します。

    4. [OK] をクリックします。

    5. [終了] をクリックします。

    結果は次のようなテンプレート・クラスになりますが、選択したクラスによって異なります。

    Class MyTest.NewClass1 Extends EnsLib.TCP.InboundAdapter
    {
    
    }
  3. プロパティ、メソッド、クラス・パラメータ、またはクラスまたはその親クラスから継承したその他のクラス・メンバをすべてオーバーライドできます。あるいは、新しいクラス・メンバを追加することもできます。唯一の要件は以下のとおりです。

    • 受信アダプタ・クラスは、OnConnected() メソッドを実装する必要があります。

      実装には、クラスによって継承されるヘルパー・メソッドを使用します。

    • 送信アダプタ・クラスは、TCP 接続の作成、接続の読み込みまたは書き込み、切断を実行するメソッドを定義します。

      これらのメソッドを定義するには、クラスによって継承されるヘルパー・メソッドを使用します。

  4. このクラスをコンパイルします。そこでこのクラスが保存されます。

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 などの関数の詳細は、"Caché ObjectScript リファレンス" の “ObjectScript 関数” を参照してください。

    Terminators には、1 つの文字のほか、複数文字の文字列も設定できます。Terminators 値に文字列を指定した場合、Ensemble は文字列を以下のように使用します。

    • 文字列のいずれか 1 つの文字が入力の終了を実行します。

    • 文字列のすべての文字が出力に付記されます。

  • プロパティとメソッドを追加することができます。

  • 設定を追加したり、削除したりできます。"Ensemble プロダクションの開発" の “Ensemble のプログラミング” の章で “設定の追加と削除” を参照してください。

  • 接続にログイン資格情報を必要とする場合は、プロパティ名 CredentialsSETTINGS のリストに追加してください。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() は、Ensemble フレームワークの ProcessInput() メソッドを呼び出して、受信したデータ・ストリームを関連付けられたビジネス・サービスに渡します。この呼び出しによって送信ストリームが返された場合は、OnConnected() は、そのデータを TCP クライアントに対する応答として書き込みます。

    CallInterval の期間中に TCP 接続からデータを読み取ることができなかった場合は、OnConnected() は何も実行せずに復帰します。

FeedbackOpens in a new tab