クラスを DCOM クライアントからアクセスできるようにするには、クラスのいくつかの情報をシステムレジストリに追加する必要があります。 DCOM クライアントは、ほとんどの場合、次の例のようにプログラム識別子(ProgID)と呼ばれる意味のある名前でクラスをアドレスします。
CREATE OBJECT #O1 OF CLASS "Employee"
Natural クラスについては、DEFINE
CLASS
ステートメントに定義されたクラス名が、ProgID としてレジストリに書き込まれます。
システムレジストリエントリは、この ProgID をクラスのグローバルユニーク ID(GUID)にマップします。これにより、DCOM はクラスのすべての情報を一意に見つけることができます。 レジストリに保存されるその他の情報には、担当 DCOM サーバーのパスと名前、タイプライブラリのパスと名前、およびインターフェイス情報などがあります。
このドキュメントでは、次のトピックについて説明します。
Natural クラスの登録(または登録解除)は、システムコマンド
REGISTER
(または
UNREGISTER
)を使用して手動で行うか、クラスが格納(または削除)された後に自動的に行うか、クラスが登録されるたびに生成される
.reg ファイルを実行することによって行います。
クラスを登録するには、システムレジストリを修正できる権限が必要です。また、システム環境で COM を使用できる必要があります。
システムレジストリの Natural エントリをレジストリエディタで直接変更することは、レジストリエントリに矛盾が発生するおそれがあるため、通常はお勧めしません。
クラスは常に、Natural を起動したサーバー ID に登録されます。
プロファイルパラメータ AUTOREGISTER
を "ON" に設定すると、Natural
クラスは格納(カタログ)されるときに自動的に登録され、削除されるときに自動的に登録解除されます。
これにより、ユーザーはクラスを格納した後にそのクラスを直接テストできます。
自動登録では、クラスの DEFINE
CLASS
ステートメントの WITH ACTIVATION POLICY
節に定義されたアクティベーションポリシー設定が使用されます。 この節が指定されていない場合は、プロファイルパラメータ
ACTPOLICY
の設定が使用されます。
自動登録が設定されていて、クラスが格納(カタログ)される場合は、古いレジストリエントリがすべて削除されるように、クラスは格納前に登録解除され、格納後に登録されます。
以下では次のトピックについて説明します。
システムコマンド REGISTER
を使用して、Natural クラスを登録します。
それらは、Natural を起動したサーバー ID に登録されます。
REGISTER |
class-module-name | library-name | ES | |||||||||||
IM | ||||||||||||||
* | * | EM |
適切な Natural オブジェクトモジュール名を指定することによって登録されるクラス(複数可)を定義します。
クラスの検索先ライブラリ(複数可)を定義します。
クラスに登録されるアクティベーションポリシーを定義します。
以下のいずれかのパラメータを設定できます。
パラメータ | 説明 |
---|---|
ES |
アクティベーションポリシー "ExternalSingle" を設定します。 |
IM |
アクティベーションポリシー "InternalMultiple" を設定します。 |
EM |
アクティベーションポリシー "ExternalMultiple" を設定します。 |
以下の表に、クラスが登録されるすべての有効なクラス/ライブラリの組み合せを示します。
クラスモジュール名指定 | ライブラリ名指定 | ||
---|---|---|---|
library-name | * | - | |
class-module-name | ライブラリ library-name のクラスモジュール名 class-module-name のクラス | 現在のステップライブラリにあるクラスモジュール名 class-module-name のすべてのクラス | クラスモジュール名 class-module-name のクラス |
* | ライブラリ library-name にあるすべてのクラスを登録 | 現在のステップライブラリにあるすべてのクラスを登録 | 現在のログオンライブラリのすべてのクラスを登録 |
このパラメータが REGISTER
コマンドまたは
DEFINE CLASS
ステートメントに指定されていない場合は、パラメータファイルに定義されているデフォルトのアクティベーションポリシーが使用されます。
システムコマンド UNREGISTER
を使用して、Natural
クラスの登録を解除します。
UNREGISTER |
class-module-name | library-name | [server-id] | |||||||
* | * |
適切な Natural オブジェクトモジュール名を指定することによって登録解除されるクラス(複数可)を定義します。
クラスの検索先ライブラリ(複数可)を定義します。
クラスのサーバー ID を定義します。
以下の表に、クラスが登録解除されるすべての有効なクラス/ライブラリ/サーバー ID の組み合せを示します。
クラス名指定 | ライブラリ名/サーバー ID の組み合せ | ||||
---|---|---|---|---|---|
-- | library-name - | library-name server-ID | * - | *server-ID | |
class-module-name | 現在のサーバー ID に登録されている、現在のログオンライブラリにある class-module-name のクラス | 現在のサーバー ID に登録されている、ライブラリ library-name にある class-module-name のクラス | サーバー server-ID に登録されている、ライブラリ library-name にある class-module-name のクラス | 現在のサーバー ID に登録されている、現在のステップライブラリにある class-module-name のすべてのクラス | サーバー server-ID に登録されている現在のステップライブラリにある class-module-name のすべてのクラス |
* | 現在のサーバー ID に登録されている、現在のログオンライブラリにあるすべてのクラス | 現在のサーバー ID に登録されている、ライブラリ library-name にあるすべてのクラス | サーバー server-ID に登録されている、ライブラリ library-name にあるすべてのクラス | 現在のサーバー ID に登録されている、現在のステップライブラリにあるすべてのクラス | サーバー server-ID に登録されている、現在のステップライブラリにあるすべてのクラス |
class-module-name または
class-module-name および
library-name
を指定した場合は、クラスまたはライブラリが見つからないと、REGISTER
または
UNREGISTER
システムコマンドはエラーメッセージを返します。
REGISTER
または UNREGISTER
システムコマンドにアスタリスク(*)のみを指定した場合は、登録または登録解除されるクラスがなくてもエラーメッセージは返されません。
クラス GUID またはインターフェイス GUID のないクラスを REGISTER
システムコマンドに指定した場合は、エラーメッセージが返されます。 このようなクラスはローカル Natural セッションでのみ使用できます。
注意:
Natural Security 環境では、このコマンドは 1 つのライブラリにのみ呼び出すことができます。
これは、ライブラリ名を省略するか、特定のライブラリを使用する必要があることを意味します。 アスタリスク(*)は使用できません。
登録ファイル(".reg" ファイル)を実行すると、情報がシステムレジストリに入力されます。
Natural では、クラスの登録時にサーバー用とクライアント側用の登録ファイルが自動的に作成されます。
サーバー用の ".reg" ファイルには、システムレジストリに入力されたのと同じ情報が含まれます。クライアント用の ".reg" ファイルには、クライアント側用に生成されたすべての情報が含まれます。 クラスを登録解除すると、.reg ファイルは削除されます。 登録解除時に ".reg" ファイルが削除されないようにするには、クラスを登録解除する前に、ファイル名を変更します。Natural ではデフォルトの名前の ".reg" ファイルのみが削除されます。
".reg" ファイルの名前は、サーバー用は classmodule_name_S.reg、クライアント用は classmodule_name_C.reg、異なるバージョンをアクティブにする場合は classmodule_name_V.reg です。
タイプライブラリは、クラスの登録時に自動的に作成され、クラスの登録解除時に削除されます。 タイプライブラリへの参照はレジストリにも入力されます。
デフォルトのタイプライブラリ名は classmodule_name.tlb です。 この名前のタイプライブラリがすでに存在する場合は、別の名前が生成されます。
登録ファイルとタイプライブラリは、次のように Natural etc ディレクトリに保存されます。
$NATDIR/$NATVERS/etc/serverid/classname/v<version-number>
サーバー ID "SERVER01" に登録されたクラス
MY.TEST.CLASS
のバージョン 1 のファイルは、次のように配置されます。
$NATDIR/$NATVERS/etc/SERVER01/MY.TEST.CLASS/v1
Natural では、クライアントの登録情報はシステムレジストリに自動的に入力されませんが、クライアント用の登録ファイルが作成されます。
クライアント用の登録ファイルには、DCOM サーバークラスを持つマシンを DCOM
に通知するエントリ(RemoteServerName
)が含まれます。 このエントリは Natural からは入力できません。
次のいずれかの方法で入力できます。
登録ファイルで RemoteServerName
を入力できます。 以下の行を見つけます。
"RemoteServerName"=
以下のように変更します。
"RemoteServerName"="server_machine_name"
変更したら、登録ファイルをクライアントマシンで実行します。
まず登録ファイルを実行し、次に DCOMCNFG
ツールまたはレジストリエディタを使用して
RemoteServerName
を変更します(「Windows 上での DCOM
コンフィグレーション」を参照)。
クラスを登録および登録解除するときは、以下の点を考慮してください。
既存のクラスのクラス GUID は変更しないでください。すでにレジストリにあるクラスを別の GUID で再度登録すると、Natural にエラーメッセージが表示されます。 この場合は、古いクラスを先に登録解除する必要があります。
1 つのクラスを複数のサーバー ID に登録しないでください。サーバー ID と AppID は 1 対 1 の関係になっており、クラスには AppID を 1 つだけ定義できます。2 つ目のサーバー ID に登録すると、AppID が上書きされます。 また、クラスをサーバー ID から登録解除すると、クラスのすべてのエントリは、2 つ目のサーバーに登録されたものかどうかチェックされずに削除されます。
クライアント登録を除き、常に Natural システムコマンド REGISTER
および UNREGISTER
を使用して、クラスのレジストリエントリを変更してください。これらのコマンドを使用すると、重複するレジストリエントリを削除できます。
例えば、クライアントクラスが "server1"
に登録されている場合に、"server2"
の同じクラスが登録されたサーバー登録ファイルを実行すると、クラスの AppID キーが変更され、古い AppID キーへのすべての参照が失われます。
この場合は、この古い AppID キーを削除できません。 クラスをシステムコマンド REGISTER
で登録すると、AppID が変更されたかどうかがチェックされ、他のクラスで必要とされていない古い AppID が削除されます。
クライアントマシンで Natural を使用できない場合に、Natural
クラスのレジストリエントリをシステムレジストリから削除するには、レジストリエディタを使用してください。 クライアントマシンで Natural
を使用できる場合は、最初に Natural システムコマンド REGISTER
でクラスを登録し、後でシステムコマンド UNREGISTER
でそれを登録解除する方が簡単です。
クラスの登録情報はカタログされたクラスオブジェクトから取得されるので、ソースフォーマットのみで使用可能なクラスを登録したり登録解除したりすることはできません。
Natural セッション中にクラスを登録する場合は、以下に示するように、セッションをパラメータ
PARM
および COMSERVERID
で開始する必要があります。 これは、これらの 2 つのパラメータのみがレジストリキー
"LocalServer32" に保存されるためです。 他のパラメータ設定でテストしたクラスは、後で
DCOM クライアントから開始したときに実行される保証はありません。
NATURAL.EXE PARM=COMPARM COMSERVERID=SERVER1
通常は、管理者権限を持つユーザーのみがシステムレジストリを変更できます。 クラスを登録しようとするとエラーになる場合は、レジストリの変更に必要な権限を所有しているかどうかを確認してください。
Natural クラスの登録時に、Natural のみに必要(DCOM には不要)な追加情報がレジストリに入力されます。 追加レジストリキーに保存される情報は、クラスのサーバー ID(「NaturalX サーバー」を参照)、アクティベーションポリシー(「アクティベーションポリシー」を参照)、および場所(クラスの Natural クラスモジュール名とライブラリ)です。 この情報は、例えば、指定されたサーバー ID のすべてのクラスを登録解除したり、Natural の起動時に提供されたクラスを使用可能にしたりする場合に必要です。
クラスのサーバー ID と AppID(HKEY_CLASSES_ROOT/AppID)は 1 対 1 の関係です。 クラスを新しいサーバー ID に登録すると、新しいGUID(AppID)が生成されてこのサーバー ID に割り当てられます。 AppID は、DCOM クラスをグループ化するために DCOM によって使用されます。 セキュリティ設定および(クライアント登録のための)リモートマシン名は、AppID に定義されます。つまり、1 つの AppID に属しているすべてのクラスは、同じセキュリティ設定になります(「コンフィグレーション概要」および「NaturalX でのセキュリティ」を参照)。