プロキシ・クラスの作成
この章では、以下の項目について説明します。
-
"スタジオの .NET ゲートウェイ・ウィザードの使用法" — .NET アセンブリ用にプロキシ・クラスを生成する最も簡単な方法は、スタジオで提供される .NET ゲートウェイ・ウィザード・プラグインを使用する方法です。
-
"プログラムによるプロキシ・クラスの生成" — プロキシ・クラスを ObjectScript プログラム内から生成することもできます。%Net.Remote.GatewayOpens in a new tab クラスには、.NET アセンブリからクラス定義をインポートし、ゲートウェイ・プロキシ・クラスを生成するために使用されるメソッドが含まれます。
サードパーティの DLL をインポートする推奨方法の説明は、".NET API を使用したラッパ・クラスの使用法" を参照してください。.NET クラスが Caché プロキシ・クラスにどのようにマッピングされるかに関する詳細は、"マッピング仕様" の章を参照してください。
.NET ゲートウェイは、.NET の汎用クラスのプロキシ・クラスを生成できません。同様に、汎用サブクラスまたはサブインタフェースを持つ .NET クラスをインポートすることもできません。
スタジオの .NET ゲートウェイ・ウィザードの使用法
以下では、この手順の概要を説明します。
-
.NET ゲートウェイ・サーバを起動します。ウィザードを使用するにはその前にサーバが稼動している必要があります。
-
スタジオで、[ツール]→[アドイン]→[アドイン...] を選択して使用可能なアドインのリストを表示します。
-
[アドイン] ダイアログの [.Net ゲートウェイウィザード] を選択し、[OK] をクリックします。[.Net ゲートウェイウィザード] スタジオのテンプレートが表示されます。
.NET ゲートウェイ・ウィザード・スタジオのテンプレートの使用法 -
フォームへ記入します。以下の項目を定義できます。
-
[DLL アセンブリファイルのパスと名前を入力してください:] — 必須項目。DLL 名。
-
[.NET ゲートウェイサーバ名/IP アドレス:] — 必須項目。.NET ゲートウェイ・サーバの実行可能ファイルがあるマシンの IP アドレスまたは名前です。既定値は、"127.0.0.1" です。
-
[.NET ゲートウェイサーバポート:] — 必須項目。サーバ・ポート。
-
[依存クラスを探すために使用する追加のパス\アセンブリ] — オプション。アセンブリ .dll ファイルまたはディレクトリをセミコロンで区切って指定します。
-
[以下のプリフィックスに一致する依存クラスを除外する:] — オプション。ネームスペースのリストおよびクラス名の接頭語をセミコロンで区切って指定します。
-
-
ウィザードに使用可能なクラスのリストが次のように表示されます。
インポートするクラスの選択使用するクラスにチェックを付け、[完了] をクリックします。
プログラムによるプロキシ・クラスの生成
ここでは、%Net.Remote.GatewayOpens in a new tab クラスの以下のメソッドについて説明します。
-
%Import() — .NET 側から .NET クラスまたはアセンブリをインポートし、Caché 側に必要なすべてのプロキシ・クラスを生成します。
-
%GetAllClasses() — 指定したアセンブリ DLL にあるすべてのパブリック・クラスのリストを返します。
-
%ExpressImport() — %Connect()、%Import()、および %Disconnect() の呼び出しの組み合わせ。
ゲートウェイ・メソッドの一覧については、%Net.Remote.GatewayOpens in a new tab Caché クラスのドキュメントを参照してください。
Gateway クラスの %Import() メソッドは、以下のシーケンシャル・イベントのチェーンをトリガします。
-
Caché セッションがインポート要求を送信します。
-
要求を受信した .NET ゲートウェイ・ワーカ・スレッドは、.NET の指定されたアセンブリおよびクラスをイントロスペクトします。
-
また、このスレッドは、ローカル・ディレクトリまたはグローバル・アセンブリ・キャッシュ (GAC) から、依存アセンブリをロードします。
-
新しい .NET クラス、変更された .NET クラス、または Caché 側にプロキシ・クラスがない .NET クラスが見つかると、.NET ゲートウェイ・ワーカ・スレッドは、その .NET クラスの新しいプロキシ・クラスを生成します。
%Import() メソッド
%Import() メソッドは、必要なすべてのプロキシ・クラスを作成およびコンパイルすることによって、指定されたクラスとそのすべての依存関係をインポートします。%Import() メソッドは、生成された Caché プロキシ・クラスのリストを (ByRef 引数 imported に) 返します。.NET クラス定義が Caché プロキシ・クラスにどのようにマッピングされるかの詳細は、このドキュメントの “マッピング仕様” の章を参照してください。
%Import() は、一回限りのスタートアップ・オペレーションです。初めて Caché プロキシ・クラスを生成する必要があるときのみ、呼び出す必要があります。再度必要になるのは、.NET コードを再コンパイルし、プロキシを再生成する場合のみです。
%Import() を呼び出す前に、additionalClassPaths 引数と exclusions 引数を用意します。つまり、引数ごとに新しい %ListOfDataTypesOpens in a new tab オブジェクトを作成し、その Insert() メソッドを呼び出してリストの内容を設定します。オプションの additionalClassPaths 引数を使用して追加のパス引数を指定できます。例えば、.NET ゲートウェイ経由でインポートするクラスを含む追加のアセンブリ DLL を指定できます。リストの各要素は、追加アセンブリ DLL の個々のエントリに対応している必要があります。そのためには以下の形式にする必要があります。
" rootdir\...\mydll.dll "
DotNetGatewaySS.exe を実行しているディレクトリ以外のディレクトリからもアセンブリをロードできますが、そのアセンブリでクラスを使用しようとすると、アセンブリのロード・エラーが発生する可能性があります。DotNetGatewaySS.exe を配置したディレクトリにすべてのローカル・アセンブリを配置することをお勧めします。また、例えば System.Data のように、名前の一部を使用して、GAC 内のアセンブリを指定することもできます。
.NET クラスを Caché プロキシ・クラスにマッピングして Caché にインポートするときに、.NET ゲートウェイは、プロパティとして参照されているクラスおよび引数リストで参照されているすべてのクラスを含め、指定した .NET クラス内で見つかったすべてのクラス依存関係がループ処理されます。つまり、.NET ゲートウェイは、指定されたクラスを正しくインポートするために必要なすべてのクラス依存関係のリストを収集し、その依存関係を調べて、必要なすべてのプロキシ・クラスを生成します。
このプロセスから除外するアセンブリおよびクラス名の接頭語のリストを指定することによって、このプロセスを制御できます。このような状況はまれですが、インポートするクラスを制御できる柔軟性があります。.NET ゲートウェイでは、Microsoft.* アセンブリのような小さなサブセットが自動的に除外されます。
%GetAllClasses() メソッド
このメソッドでは、最初の引数 jarFileOrDirectoryName で指定したアセンブリ DLL にあるすべてのパブリック・クラスのリストが ByRef 引数 allClasses に返されます。
%ExpressImport() メソッド
%ExpressImport() は、%Connect()、%Import()、および %Disconnect() への呼び出しを組み合わせた、1 つの手順の便利なクラス・メソッドです。このメソッドは、生成されたプロキシのリストを返します。また、silent 引数を 0 に設定している場合は、そのリストがログに記録されます。name 引数は、クラスまたはアセンブリ DLL のセミコロン区切りリストです。