このドキュメントでは、次のトピックについて説明します。
各 COM クラスは、サーバープロセスによってホストされる必要があります。 サーバープロセスは、管理および技術的な役割を数多く果たします。例えば、クラスおよびそのインターフェイスを DCOM で使用可能にしたり、作成されたオブジェクトによって占有されているメモリを管理したりします。 クライアントが特定クラスの新しいオブジェクトを要求するたびに、DCOM は対応するサーバープロセスがすでに実行されているかどうかをチェックします。 実行されていない場合は、DCOM はサーバープロセスを開始し、要求をサーバーに渡します。 サーバーが起動すると、そのクラスが DCOM で使用可能になります。 稼働中のサーバーは、クライアント要求を実行して、オブジェクトを作成または削除したり、メソッドを実行したりします。 サーバーで管理していた最後のオブジェクトが削除されると、サーバーは自動的にシャットダウンします。 DCOM クラスとサーバーの詳細については、Microsoft DCOM 仕様を参照してください。
Natural で実装されたクラスは、DCOM クラスとしてアクセスできます。 ただし、Natural では、クラスをホストするために DCOM サーバーを実装する必要はありません。 代わりに、NaturalX 自体が DCOM サーバーのタスクを実行します。 NaturalX は、Natural で記述されたすべてのクラス用の汎用 DCOM サーバーとして動作します。 Natural クラス開発者が行うタスクは、クラスを実装し、それらを NaturalX サーバーに割り当てるだけです。
Windows では、各 Natural セッションはそれ自体の排他的な NaturalX サーバープロセスで実行されます。
DCOM サーバーのタスクの 1 つは、起動時にそのクラスを DCOM で使用可能にすることです。 NaturalX は汎用 DCOM サーバーとして動作するので、NaturalX には提供するクラスの情報は組み込まれていません。 代わりに、システムレジストリでサーバー ID のキーの下にあるクラスリストを確認します。 サーバー ID はシステムレジストリ内に Natural が所有するキーであり、特定の NaturalX サーバーに属するすべてのクラスがまとめられています。 これは 32 文字の任意の英数字文字列で、空白を含まず、大文字と小文字は区別されません。
NaturalX サーバーは、実行に使用しているサーバー ID をどのように認識するのでしょうか。 サーバー ID は、Natural
パラメータ COMSERVERID
で定義されます。 このパラメータは、ダイナミックパラメータとして
NaturalX サーバーに渡されるか、Natura パラメータファイルに定義されます。
クラスはどのようにサーバー ID に割り当てられるのでしょうか。 あるサーバー ID で Natural が起動されたとします。 この Natural セッション中にユーザーが登録するクラスはすべて、このサーバー ID でシステムレジストリに入力されます。
サーバー ID は、Natural で作成されたクラスを分類して各 NaturalX サーバープロセスに割り当てるのに使用されます。 ただし、サーバー ID の使用は必須ではありません。サーバー ID なしで Natural を起動した場合は、すべての Natural クラスは事前定義されたサーバー ID "Default" で登録されます。
サンプルの Employees アプリケーションは、クラス
DepartmentList
、EmployeesList
、および
Employee
で構成されています(このアプリケーションは、サンプルライブラリ
SYSEXCOM
にあります)。 これらの 3 つのクラスは、Employees という名前の NaturalX
サーバーによってホストされます。
任意のサーバー ID を使用して Natural を起動します。
ライブラリ SYSEXCOM
にログオンします。
LOGON SYSEXCOM
Natural コマンド行に REGISTER
コマンドを入力してクラスを登録します。
REGISTER *
これで、3 つのクラスはサーバー ID "Employees" で登録されました。
これらのクラスのオブジェクトが要求されるたびに、DCOM はサーバー ID "Employees" で NaturalX サーバープロセスを開始し、クラスを提供します。
サーバー ID は、対応する NaturalX サーバーの開始時に DCOM で使用可能になるすべてのクラスの集合を表しています。 業務の観点から 1 つのアプリケーションを形成するクラスや、論理的に同属のクラスは、同じサーバー ID でグループ化することをお勧めします。 同様に、絶対に同じコンテキストで使用されないクラスは、異なるサーバー ID で登録することをお勧めします。 サーバー ID へのクラスの割り当てでは、セキュリティも基準にします(「NaturalX でのセキュリティ」を参照)。 この点から、共通の権限が定義されるクラスを同じサーバー ID でグループ化することは意味があります。