プロダクションでの .NET ゲートウェイの使用
基本的な .NET ゲートウェイ・コマンドである Start、Connect、Import、Disconnect、および Stop を呼び出す方法は、いくつかあります。この機能に対する実際的なアプローチには、以下のものがあります。
この章では、各アプローチについて説明し、その使用方法を説明します。関連するトピックは以下のとおりです。
ビジネス・サービスの作成
コマンド・プロンプトから .NET ゲートウェイ・サーバを起動することもできますが、Ensemble プロダクションで .NET ゲートウェイを使用する最も簡単な方法は、プロダクションのビジネス・サービスとして EnsLib.DotNetGateway.ServiceOpens in a new tab クラスを構成する方法です。Ensemble を実行しているローカル・マシン上に .NET ゲートウェイ・サーバがある場合のみ、この方法を使用できます。
それ以外の場合は、コマンド・プロンプトから .NET ゲートウェイ・サーバを起動する必要があります。詳細は、"コマンド・プロンプトの使用法" を参照してください。
ビジネス・サービスとして EnsLib.DotNetGateway.ServiceOpens in a new tab クラスを構成するには、Ensemble, プロダクション ページの構成画面を使用します。以下の手順は、構成手順をまとめたものです。
-
管理ポータルのメイン・メニューで [プロダクション] を選択します。
-
リストからプロダクションを検索し、名前の横にある [構成] をクリックします。
-
[サービスの追加] をクリックして、ビジネス・サービス・ウィザードを開始します。
-
[その他] をクリックして、[ServiceClass] リストの [EnsLib.DotNetGateway.Service] をクリックします。
-
[OK] をクリックして、更新されたプロダクションのダイアグラムを表示します。ダイアグラムには .NET ゲートウェイのビジネス・サービスが新たに追加されています。[EnsLib.DotNetGateway.Service] ボックスをクリックしてこのサービスを構成します。
このウィザードでは、関連する .NET ゲートウェイのアダプタ・クラスが指定されます。構成可能な設定は、".NET ゲートウェイのビジネス・サービス設定" を参照してください。
.NET ゲートウェイのビジネス・サービス設定
.NET ゲートウェイ・サーバの実行可能ファイルが配置されているマシンの IP アドレスまたは名前。
.NET ゲートウェイ・サーバと Ensemble のプロキシ・クラスとの通信に使用する TCP ポート番号。デフォルトは 55000 です。
.NET ゲートウェイ・サーバの実行可能ファイルの場所。目的の実行可能ファイルを探し出し、ローカル・サーバで .NET ゲートウェイを開始するコマンドをアセンブルするために使用します。これを指定しない場合は、Ensemble インストール・ディレクトリの下にあるデフォルト・ディレクトリ ...\Dev\dotnet\bin\ が使用されます。
.NET ゲートウェイ・サーバへの接続が許可された IP アドレス。この設定に 0.0.0.0 (デフォルト) または "" を指定すると、ローカルでもリモートでも、どのようなシステムからでも接続できます。これ以外の場合、指定した IP アドレスからのみ接続できます。
このチェックボックスをチェックした場合、ビジネス・サービスは 64–ビット・バージョンの .NET ゲートウェイ実行ファイルを使用します。チェックを外した場合は、32–ビット・バージョンの実行ファイルを使用します。この設定は、Windows 64-ビット・プラットフォームのみで使用可能です。
使用する .NET バージョンとして 2.0 または 4.0 を選択します。
.NET ゲートウェイからのメッセージを記録するログ・ファイルの完全パス名。このメッセージでは、サーバへの接続が開かれたことの通知、閉じられたことの通知、.NET クラスを Ensemble プロキシ・クラスにマッピングするときに生じた問題などを扱います。
.NET ゲートウェイとの各通信がアクティブかどうかをチェックする時間間隔を秒数で表した値。有効にした場合、最小値は 5 秒で、最大値は 3600 秒 (1 時間) です。デフォルトは 10 秒です。値が 0 の場合、この機能は無効になります。
接続がアクティブかどうかの確認に対し、ここで指定した秒数を超えて応答がない場合は、.NET ゲートウェイに障害が発生していると見なされます。この値が HeartbeatInterval プロパティよりも小さい場合、.NET ゲートウェイの通信チェックが失敗する場合はゲートウェイに必ず障害が発生していることになります。最大値は 86400 秒 (1 日) です。デフォルトは 30 秒です。
.NET ゲートウェイが障害状態である場合に実行するアクション。Restart (デフォルト) に設定すると、.NET ゲートウェイが再起動します。Alert に設定すると、イベント・ログにアラート・エントリが生成されます。これは [エラー時に警告] の設定とは関係ありません。
.NET ゲートウェイ・サーバが障害状態になった場合に、HeartbeatFailureAction の再試行まで障害状態で待機する時間。デフォルトは 300 秒 (5 分) です。この値に 0 を指定すると、この機能は無効になります。つまり、すぐに回復できない障害が発生しても、自力での回復操作は実行されません。
"Ensemble プロダクションの構成" の “すべてのビジネス・サービスに含まれる設定” を参照してください。
.NET ゲートウェイ・ビジネス・サービスを追加および構成すると、以下のように、.NET ゲートウェイが自動的に管理されます。
-
プロダクションを開始すると、.NET ゲートウェイ・ビジネス・サービスでは、構成ページで指定した設定で .NET ゲートウェイ・サーバのインスタンスが開始されます。
-
プロダクションが停止の信号を受信すると、.NET ゲートウェイ・ビジネス・サービスが .NET ゲートウェイ・サーバにアタッチして停止を指示します。
詳細は、"Class Reference" で EnsLib.DotNetGateway.ServiceOpens in a new tab のエントリを参照してください。
ビジネス・サービス・メソッドの呼び出し
.NET ゲートウェイ・ビジネス・サービスは、.NET ゲートウェイ・エンジンの開始、接続、停止に使用できるメソッドを提供します。.NET ゲートウェイ・ビジネス・サービスをプロダクションのメンバとして構成した後、以下のメソッドを Ensemble コードから呼び出すことができます。
これらのメソッドの詳細は、"Class Reference" で EnsLib.DotNetGateway.ServiceOpens in a new tab のエントリを参照してください。
StartGateway() メソッド
EnsLib.DotNetGateway.Service:StartGateway(pFilePath As %String,
pPort As %String,
pAllowedIPAddresses As %String,
pLogfile As %String = "",
ByRef pDevice As %String = "",
pServer As %String = "127.0.0.1",
pCmdLine As %String = "")
このクラス・メソッドは、指定された引数を使用して .NET ゲートウェイ・サーバを起動します。pLogFile に有効なファイル名を指定すると、ゲートウェイのアクティビティに関するメッセージがそのファイルに書き込まれます。このメッセージでは、サーバへの接続が開かれたことの通知、閉じられたことの通知、.NET クラスを Ensemble プロキシ・クラスにマッピングするときに生じた問題などを扱います。
ConnectGateway() メソッド
EnsLib.DotNetGateway.Service:ConnectGateway(pEndpoint As %String,
ByRef pGateway As %Net.Remote.Gateway,
pTimeout As %Integer = 5,
pAdditionalPaths As %String = "")
このクラス・メソッドは、指定された pEndpoint (ホスト名:ポート:ネームスペース) の .NET ゲートウェイ・サーバに接続します。
StopGateway() メソッド
EnsLib.DotNetGateway.Service:StopGateway(pPort As %String,
pServer As %String = "127.0.0.1",
pTimeout As %Integer = 5)
このクラス・メソッドは、.NET ゲートウェイ・サーバに接続し、サーバをシャットダウンします。
ビジネス・オペレーションの作成
Ensemble プロダクション用に .NET ゲートウェイ指向のビジネス・オペレーションを構築するための基礎として、抽象ビジネス・オペレーションを使用できます。EnsLib.DotNetGateway.AbstractOperationOpens in a new tab 抽象クラスのサブクラスを定義し、適切なメッセージ・ハンドラを実装するだけでこの処理が可能です。
有効な .NET ゲートウェイ接続があるかどうかを確認するために、GetConnection() メソッドを呼び出します。以下に例を示します。
Set tSC = ..GetConnection(.tGateway)
If $$$ISOK(tSC) {
// Start using the .NET Gateway connection object tGateway
...
}
このメソッドは、プロキシ・クラスで使用するプライベート・ゲートウェイ接続オブジェクトを返します。
.NET ゲートウェイの IP アドレスおよびポートは、プロダクションにビジネス・オペレーションを追加するときに、そのビジネス・オペレーションの設定で構成できます。.NET ゲートウェイのインスタンスへの接続は、OnInit() で開始し、OnTearDown() で終了します。ビジネス・オペレーション・クラスでこれらのメソッドをオーバーライドして、独自のセットアップおよびティアダウン手順を実装できます。
これらのメソッド、および AdditionalPaths、ConnectTimeout、 DotNetServer、Port の各プロパティの詳細は、"Class Reference" の EnsLib.DotNetGateway.AbstractOperationOpens in a new tab のエントリを参照してください。
API メソッドの呼び出し
ビジネス・サービスへの接続、ビジネス・サービスからの切断、および停止に加えて、%Net.Remote.GatewayOpens in a new tab クラスでは以下のメソッドも使用できます。ビジネス・サービス・モデルが不適切な状況の場合に、これらを使用できます。
%Net.Remote.GatewayOpens in a new tab クラスは、以下の種類のメソッドを提供します。
-
.NET ゲートウェイ・サーバに接続する %Connect、.NET ゲートウェイ・サーバから切断する %Disconnect、および .NET ゲートウェイ・サーバをシャットダウンする %Shutdown の各 API メソッド。
-
.NET から .NET クラスまたはアセンブリをインポートし、Ensemble 側に必要なすべてのプロキシ・クラスを生成する、%Import メソッド。
-
%Connect、%Import、および %Disconnect に対する呼び出しを組み合わせた %ExpressImport メソッド。
-
ユーティリティ・メソッドの %GetAllClasses。
%Connect() メソッド
Method %Connect(host As %String,
port As %Integer,
namespace As %String,
timeout As %Numeric = 5,
additionalClassPaths As %ListOfDataTypes = "")
As %Status [ Final ]
%Connect() メソッドは、.NET ゲートウェイ・エンジンとの接続を確立します。以下の引数を使用できます。
引数 | 説明 |
---|---|
host | .NET ゲートウェイ・サーバを実行しているマシンを特定します。 |
port | プロキシ・クラスが .NET クラスと通信するポート番号。 |
namespace | Ensemble ネームスペース。 |
timeout | タイムアウトとなるまで待機する秒数。デフォルトは 5 です。 |
additionalClassPaths | オプション — 追加のクラス・パスを指定します。例えば、.NET ゲートウェイ経由でインポートするクラスを含む追加のアセンブリ DLL の名前を指定します。この引数の使用に関する詳細は、「%Import 引数」の節を参照してください。 |
%Disconnect() メソッド
Method %Disconnect() As %Status [ Final ]
%Disconnect() メソッドは、.NET ゲートウェイ・エンジンへの接続を閉じます。
%Shutdown() メソッド
Method %Shutdown() As %Status [ Final ]
%Shutdown() メソッドは、.NET ゲートウェイ・エンジンをシャットダウンします。
%Import() メソッド
Method %Import(class As %String,
ByRef imported As %ListOfDataTypes,
additionalClassPaths As %ListOfDataTypes = "",
exclusions As %ListOfDataTypes = "")
As %Status [ Final ]
%Import() メソッドは、必要なすべてのプロキシ・クラスを作成およびコンパイルすることによって、指定されたクラスおよびそのすべての依存関係をインポートします。%Import() メソッドは、生成された Ensemble プロキシ・クラスのリストを imported で参照渡しで返します。.NET クラス定義がどのように Ensemble プロキシ・クラスにマッピングされるかについての詳細は、".NET 用 Caché ゲートウェイの使用法" の “マッピング仕様” の章を参照してください。
%Import() は、一回限りのスタートアップ・オペレーションです。初めて Ensemble プロキシ・クラスを生成する場合のみ、呼び出す必要があります。再度必要になるのは、.NET コードをリコンパイルし、プロキシを再生成する場合のみです。以下の節では、%Import() メソッドについて詳しく説明します。
%Import 引数
%Import() を呼び出す前に、引数 additionalClassPaths および exclusions を用意します。つまり、引数ごとに新しい %ListOfDataTypesOpens in a new tab オブジェクトを作成し、その Insert() メソッドを呼び出してリストの内容を設定します。オプションの additionalClassPaths 引数を使用して追加のパス引数を指定できます。例えば、.NET ゲートウェイ経由でインポートするクラスを含む追加のアセンブリ DLL の名前を指定できます。リストの各要素は、追加アセンブリ DLL の個々のエントリに対応している必要があります。そのためには以下の形式にする必要があります。
" rootdir\...\mydll.dll "
DotNetGatewaySS.exe を実行していないディレクトリからでもアセンブリをロードできますが、そのアセンブリでクラスを使用しようとすると、アセンブリのロード・エラーが発生する可能性があります。DotNetGatewaySS.exe を配置したディレクトリにすべてのローカル・アセンブリを配置することをお勧めします。また、例えば System.Data のように、名前の一部を使用して、GAC 内のアセンブリを指定することもできます。
インポートの依存関係と除外
.NET クラスを Ensemble プロキシ・クラスにマッピングして Ensemble にインポートするときに、.NET ゲートウェイでは、プロパティとして参照されているクラスおよび引数リストで参照されているすべてのクラスを含め、指定した .NET クラス内で見つかったすべてのクラス依存関係がループ処理されます。言い換えると、.NET ゲートウェイは、指定されたクラスを正しくインポートするために必要なすべてのクラス依存関係のリストを収集し、その依存関係リストを調べて、必要なすべてのプロキシ・クラスを生成します。
このプロセスから除外するアセンブリおよびクラス名の接頭語のリストを指定することによって、このプロセスを制御できます。このような状況はまれですが、インポートするクラスを制御できる柔軟性があります。.NET ゲートウェイでは、Microsoft.* アセンブリのような、アセンブリの小さなサブセットが自動的に除外されます。
%ExpressImport() メソッド
ClassMethod %ExpressImport(name As %String,
port As %Integer,
host As %String = "127.0.0.1",
silent As %Boolean = 0,
additionalClassPaths As %ListOfDataTypes = "",
exclusions As %ListOfDataTypes = "")
As %Status [ Final ]
%ExpressImport() は、%Connect()、%Import()、および %Disconnect() への呼び出しを組み合わせた、1 つの手順の便利なクラス・メソッドです。このメソッドは、生成されたプロキシのリストを返します。また、silent 引数を 0 に設定している場合は、そのリストがログに記録されます。name 引数は、クラス DLL またはアセンブリ DLL のセミコロン区切りリストです。
%GetAllClasses() メソッド
%GetAllClasses(jarFileOrDirectoryName As %String,
ByRef allClasses As %ListOfDataTypes)
As %Status
このメソッドでは、最初の引数 jarFileOrDirectoryName で指定したアセンブリ DLL にあるすべてのパブリック・クラスのリストが ByRef 引数 allClasses に返されます。
コマンド・プロンプトの使用法
通常は、プロダクションのメンバとして EnsLib.DotNetGateway.ServiceOpens in a new tab ビジネス・サービスを構成することによって、.NET ゲートウェイ・サーバを自動的に起動および停止します。この構成を行うと、.NET ゲートウェイ・サーバはプロダクションと共に自動的に起動および停止します。クラス・メソッド StartGateway() を利用して、手動で .NET ゲートウェイ・サーバを起動することもできます。
ただし、開発時やデバッグ時、または Ensemble と .NET ゲートウェイ・サーバを別々のマシンで実行している場合は、コマンド・プロンプトからゲートウェイ・サーバを起動すると便利な場合があります。ファイル DotNetGatewaySS.exe を、アセンブリのロード先ディレクトリにコピーします。デフォルトでは、DotNetGatewaySS.exe はディレクトリ install-dir\dev\dotnet\bin に格納されています。以下のように、install-dir\dev\dotnet\bin から DotNetGatewaySS.exe を実行します。
DotNetGatewaySS portlistenerlogfile
引数 | 説明 |
---|---|
port | 受信要求をリッスンするポート番号。 |
listener | オプション — ゲートウェイがリッスンするローカル・マシンのローカル IP アドレス。マシンに対してローカルな すべての IP アドレス (127.0.0.1、VPN アドレスなど) でリッスンするには、NULL、""、または 0.0.0.0 (デフォルト) を指定します。リスナを 1 つの既存のローカル IP アドレスに制限すること、または該当するすべてのアドレスでリッスンすることはできますが、許容するアドレスのリストを入力することはできません。logfile を指定している場合は、この引数に値を指定する必要があります。 |
logfile | オプション — 指定すると、コマンドのプロシージャによってこの名前のログ・ファイルが作成されます。この文字列には、完全パス名を指定する必要があります。logfile に値を入力する場合は、listener 引数が必要です。 |
以下に例を示します。
DotNetGatewaySS 55000 "" ./gatewaySS.log
ローカルの Side-By-Side アセンブリ (GAC にはアセンブリをインストールしない構成) にあるクラスを使用する場合、これらのアセンブリと同じディレクトリから DotNetGatewaySS.exe を実行してアセンブリ間の依存関係を解決します。
.NET ゲートウェイ・ウィザードの使用法
スタジオに組み込まれた .NET ゲートウェイ・ウィザードを使用して、.NET から DLL アセンブリ・ファイルをインポートし、対応する一連のクラスを作成できます。ウィザードを開始するには、以下の手順を実行します。
-
スタジオを起動します。
-
[ツール] メニューで [アドイン] をクリックします。
-
[.NET ゲートウェイ・ウィザード] をクリックして、.NET ゲートウェイ・ウィザードのダイアログを開始します。
-
DLL アセンブリ・ファイルのパスとファイル名を入力するか、または [参照] をクリックして DLL アセンブリ・ファイルにナビゲートします。
-
.NET ゲートウェイ・サーバの [.NET ゲートウェイ・サーバ名 / IP アドレス] および [.NET ゲートウェイ・サーバ・ポート] を入力します。
-
ダイアログの指示に従って、[依存クラスの検出に使用する追加の paths\assemblies] および [以下の接頭語と一致する依存クラスを除外] も入力できます。
-
[次へ] をクリックして、Ensemble プロキシ・クラスを生成します。各プロキシ・クラスが生成されると、ウィザードにクラス名が表示されます。
-
インポート操作が完了したら、[終了] をクリックしてウィザードを終了します。
エラーのチェック
.NET ゲートウェイには、以下のようなエラー・チェック機能が用意されています。
-
Ensemble プロキシ・メソッドの実行中にエラーが発生した場合、そのエラーの多くは、元の .NET メソッド自体または .NET ゲートウェイ・エンジンに起因する .NET の例外です。これが発生すると、エラーがトラップされます。
-
%Import() や %Connect() などの .NET ゲートウェイ API メソッドは、通常の Ensemble %StatusOpens in a new tab 変数を返します。
どちらの場合も、.NET クラスから返された最新のエラー値 (多くの場合、スローされた実際の .NET の例外) が、Ensemble ローカル変数 %objlasterror に記録されます。
以下のように、$system.OBJ.DisplayError() を呼び出すことによって、エラー・メッセージの完全なテキストを取得できます。
Do $system.OBJ.DisplayError(%objlasterror)
トラブルシューティング
.NET ゲートウェイの使用中に問題が発生するような場合は、ログ機能を常に有効にしておくことをお勧めします。インターシステムズのスタッフが問題のトラブルシューティングを行うために、ログが必要な場合があります。ログ機能を有効にするには、.NET ゲートウェイの開始時にログ・ファイルを指定します。コマンドラインから開始する場合でも、StartGateway() API メソッドを使用する場合でも、指定できます。
デバッグやテストに .NET ゲートウェイを使用しているときに、ターミナル・セッションが使用できなくなるという問題やターミナル・ウィンドウでの書き込みエラーの問題が発生することがあります。原因として、適切な切断処理が行われずに、.NET ゲートウェイ接続が終了したことが考えられます。この場合、その接続に使用したポートが開いたままになっている可能性があります。
この状況になっていると考えられる場合は、ポートを閉じるために、ターミナル・プロンプトで以下のコマンドを入力します。
Close "|TCP|port"
ここで port は、閉じるポートの番号です。