同様の特徴を参照するために図面全体を通して同じ番号が使用される。
以下の開示は、システムの設計時検証のためのアーキテクチャに関するいくつかの態様を説明している。この開示は、サービス定義モデル(SDM)とも称することのできるシステム定義モデル(SDM)に関する検討も含む。SDMは、アプリケーション立案者が抽象的な方法で分散型コンピュータアプリケーションおよびデータセンタを設計するためのツールおよびコンテキストを提供する。モデルは、最終的に物理的コンピュータ資源およびソフトウェアによって実施されるアプリケーションの機能単位を表す一組の要素を定義する。そのモデル要素に関連付けられているのは、構成要素によって表される機能動作をどのように指定するかを示すスキーマである。
本明細書で使用されるように、「有線」という用語は、「接続」、「通信」、または「通信関係」をも意味する場合がある。また「システム」という用語は「モジュール」を意味する場合があり、「資源空間」という用語は「資源」を意味する場合がある。さらに「アプリケーション空間」という用語は「アプリケーション」をも意味する場合があり、「インスタンス空間」という用語は「インスタンス」をも意味する場合がある。また、「クラス」という用語は「抽象定義」をも意味する場合があり、「ポート」という用語は「エンドポイント」をも意味する場合があり、「型」という用語は「定義」をも意味する場合がある。
図1は、ネットワーク設定例100を示している。設定100では、複数(x)のコンピュータデバイス102(1)、102(2)、...、102(x)はネットワーク106に結合されている。ネットワーク106は、(公衆および/または独自のプロトコルを含めて)様々な従来型ネットワークプロトコルを利用する(有線および/または無線ネットワークを含めて)様々な従来型ネットワークのトポロジおよび種類のどれかを表すことを意図している。ネットワーク106は、例えばローカルエリアネットワーク(LAN)、ワイドエリアネットワーク(WAN)、インターネットの一部などを含んでよい。設定100は、例えばデータセンタ(例えば、インターネットデータセンタ(IDC))、オフィスまたは企業設定、家庭用設定、教育または研究施設、小売りまたは販売設定、データ記憶設定などを含めて幅広い設定のどれでも表す。
コンピュータデバイス102は、デスクトップPC、ワークステーション、メーンフレームコンピュータ、サーバコンピュータ、インターネット機器、ゲーミングコンソール、ハンドヘルドコンピュータ、セルラ電話、パーソナルデジタルアシスタンス(PDA)などを含めて様々な従来型のコンピュータデバイスのどれであってもよい。デバイス102の1つまたは複数は、同じ種類のデバイスであっても、または異なる種類のデバイスであってもよい。あるいは、たとえ複数のデバイスが同じ種類のデバイスであっても、それら複数の種類のデバイスは異なる構成を取ることができる(例えば、2つのデバイス102はサーバコンピュータであるが、異なるプロセッサ、異なる量のRAM、異なるサイズのハードディスクドライブなど異なるハードウェア構成を有することができる)。
1つまたは複数のコンピュータデバイス102は、設定100に追加された後で再構成することもできる。例えば、特定のコンピュータデバイス102は、ある機能を実行してある期間だけ(例えば分、時間、日、月などにより)動作することができ、管理者は別の機能が望ましいと決定することができる(例えば、サーバコンピュータであることからワークステーションコンピュータへの変更、ウェブサーバからローカルファイルサーバへの変更など)。
図2は、SDMを使用するアーキテクチャ200例を示すブロック図である。SDMは、システムの設計プロセス中に使用されるように設計されており、設計プロセスの完了後にシステムの配置および/または管理のために使用することもできる。システムは、協同して共通機能を達成することのできる一組の関連ソフトウェアおよび/またはハードウェア資源である。このようなシステムの一例は、様々な機能を実行するコンピュータデバイスによって使用され、または実行されることのできる一組の命令を意味するアプリケーションである。アプリケーション例には、ゲームのような娯楽アプリケーション、ワードプロセッサのような生産アプリケーション、電子百科事典のようなレファレンスアプリケーション、ウェブサービスまたは経済分析のために使用することのできるような分散アプリケーションなどが含まれる。そのようなシステムの別の例は、アプリケーション(または別の環境)を配置することができる一環境である。環境は、アプリケーション(または別の環境)が配置されるソフトウェアおよび/またはハードウェア資源を意味する。そのような環境は相互の上に階層化することができる。
一般に、システムに対する設計プロセスまたは設計段階中(開発プロセスまたは開発段階とも称される)に、通信ソフトウェアおよび/またはハードウェア構成要素からなるシステムを定義するためにSDMを活用する開発ツールが使用される。システム定義は、要求された資源、構成、動作特性、ポリシーなどを含めて、分散型システムを配置し、動作させるために必須のすべての情報を含んでいる。設計段階の完了後、システムを自動的に配置し、要求されるソフトウェアおよびハードウェア(例えば、サーバ、ストレージ、およびネットワーク)資源を動的に割り当て、構成するために配置段階でもシステム定義を使用することができる。異なるホスト環境および異なるスケールに配置するために同じシステム定義を使用することができる。
アーキテクチャ200は、SDM定義モデルならびにSDM定義モデル内で機能動作を定義するスキーマを利用する。定義モデルは、「定義」と総称される様々な異なる種類のデータ構造を含む。SDMの機能は、アプリケーションプログラムインターフェース(API)のような1つまたは複数のプラットフォームサービスによって公開される。
システムの設計段階中、開発コンポーネント202はSDM文書204のようなシステム定義を含んでいる文書を生成する。開発コンポーネント202は、ワシントン州レッドモンドのMicrosoft(登録商標)社製のVisual Studio(登録商標)開発システムのような様々な開発コンポーネントのどれであってもよい。SDM文書204は、システムの配置(および、任意選択で管理)に関するすべての情報(本明細書では知識とも称する)を定義する。システムを配置し、またはシステムを管理するために必須の、またはその際に使用されるいかなる知識でもSDM文書204に含まれる。本明細書では単一文書として記載しているが、知識が複数の文書に展開され、保存され得ることを理解されたい。
システム定義は、システムを1つまたは複数の資源、エンドポイント、関係(relationship)、およびサブシステムに関して定義する。システム定義はSDM文書(例えば、XML文書)で宣言される。資源はハードウェア資源であってもソフトウェア資源であってもよい。エンドポイントは複数のシステムを横断する通信(communication)を表す。関係は、システム、資源およびエンドポイント間の関連を定義する。サブシステムは完全なシステムとして取り扱うことができ、典型的には、より大きなシステムの一部である。
システム定義は、動的システムの基本構造を取り込む。システム定義は、すべての他の情報が追加されるスケルトンと見なすことができる。この構造は、通常、開発プロセス中に設計者および開発者によって指定され、通常、頻繁には変更されない。この構造に加え、SDMは、配置情報、インストールプロセス、構成用スキーマ、イベントおよび計測、自動タスク、ヘルスモデル、動作ポリシーなどを含むことができる。分散型システムの存続期間全体を通じて、他の情報を、オペレーションスタッフ、供給業者、および/または管理システムによって追加することができる。
SDM文書204は、システムが配置され、かつ/または実行される環境が充足しなければならないシステムの1つまたは複数の制約条件(要件とも称される)を含む。環境自体は、「論理インフラストラクチャ」(LIM)文書206、またはデータセンタ記述またはデータセンタモデルと称されるSDM文書を使用しても記述される。SDM文書204と類似して、LIM文書206は単一文書であっても、複数の文書によって構成されてもよい。LIM文書206は、開発コンポーネント202と類似のコンポーネントのような様々な開発コンポーネントのどれかを使用して生成することができる。LIM文書206は、開発コンポーネント202を使用して開発することもできる(すなわち、SDM文書204とLIM文書206の両方を生成するために同じ開発コンポーネントを使用することができる)。
LIM文書206によって記述された環境は、単一のコンピュータデバイスであっても、またはコンピュータデバイス(例えば、データセンタ)、アプリケーションホストなどの集合であってもよい。異なるシステムまたは同じシステムを異なる環境にインストールすることができる。例えば、データセンタは、50個のコンピュータデバイスを含むことができ、1つのシステムをそれらコンピュータデバイスのうちの5個に配置し、他のシステムをそれらコンピュータデバイスの35個に配置することができる。これらの要件は、システムが配置されるべき1つ以上のコンピュータデバイスに関するハードウェア要件(例えば、最低プロセッサ速度、最低メモリ量、ハードドライブ空き領域の最低量、使用可能なネットワーク帯域幅の最低量、使用可能な特定のセキュリティ機構など)、システムが配置されるべき1つ以上のコンピュータデバイスに関するソフトウェア要件(例えば、特定オペレーティングシステム、同様にインストールされなければならない1つまたは複数の他のアプリケーション、特定システムおよび/またはオペレーティングシステムを構成すべき方法に関する規定、使用されている特定の種類のセキュリティまたは暗号化など)、システムが配置されるべき1つ以上のコンピュータデバイスに関する他の要件(例えば、使用可能な特定のセキュリティキー、施行されるべきデータセンタポリシー、使用されている認証、環境トポロジなど)のような様々な形式を取ることができる。SDM文書204に記載されている単一システムを、別のLIM206に記載されているような複数の異なる環境に対して検証することができる。
要件は他の方向に向かうこともできる。すなわち、環境はインストールされるべきシステムの構成に関する(例えば、環境の標準またはポリシーを実施するための)制約条件または要件を有することができる。これらは、システムが有する必要のある特定の設定または構成、システムが提供またはサポートする必要のある特定機能、システムがサポートする必要のある特定のセキュリティ機構などのように、環境のオペレータによって作成される「明示的な」要件であってよい。これらは、環境の特定の構成によって生じる「潜在的な」要件であってもよい。例えば、環境内のホストコンピュータデバイスが特定の種類のファイルシステムを使用している場合、(別のファイルシステムを使用してそれらの同じアクションを実行することができたとしても)そのファイルシステムを使用していくつかのアクションを実行することができない場合がある。
システムの設計段階中、検証コンポーネント208によって1つまたは複数の特定の環境に対してシステムを検証するためにSDM文書204を使用することができる。これは、システムが環境に対して検証され、環境がシステムに対して検証されるという双方向の検証である。検証コンポーネント208は、SDM文書204で特定された要件をLIM文書206に記載されている環境と比較し、要件のすべてがその環境によって満たされているか否かを判定することによって、システムに対して環境を検証することができる。検証コンポーネント208は、LIM文書206で特定された要件をSDM文書204に記載されているシステムと比較し、要件のすべてがそのシステムによって満たされているか否かを判定することによって環境に対してシステムを検証することができる。要件のすべてが環境およびシステムによって満たされている場合、設計者または開発者は、そのシステムをその環境に配置することができ、そこで作動すると分かる。しかし、要件のすべてが環境および/またはシステムによって満たされていない場合、検証コンポーネント208は満たされていない要件を設計者または開発者に通知することができ、したがってシステムがその環境に配置され、そこで作動するために、SDM文書204(同様にシステム)および/または環境にどのような変更を行う必要があるかが設計者または開発者に通知される。
LIM文書206は、現実の環境またはシミュレートされた環境に関するものであってよい。現実の環境の場合、LIMは、現存しているあるいは既に記述されているがまだ施工されていない環境を記述する。例えば、現実の環境は現存するデータセンタであっても、既に設計済みであるがまだ実際には実施されていないデータセンタであってもよい。シミュレーションされた環境の場合、LIMは、必ずしも存在するとはいえないある予想された環境を記述する。現実の環境に対してはそのような仮定を行う必要はないが、予想された環境に関しては様々な仮定を行うことができる。通常、システムに対する設計プロセス中、LIM文書206はシミュレーションされた環境を記述する。しかし、現実の環境が特定の時点で存在する場合には、その環境を記述しているLIM文書206を設計段階中に使用することができる。
検証コンポーネント208は、開発中のシステムを配置することができるデータセンタから分離されている1つまたは複数のコンピュータデバイスであってよい。例えば、検証コンポーネント208は単一コンピュータデバイスであってよいが、あるいは検証の負担を複数のデバイス全体に分散してもよい。あるいはまた、検証コンポーネント208は、開発中のシステムが配置されるべきデータセンタのコンピュータデバイス102の1つまたは複数であってよい。
SDMは、横軸および縦軸にわたってシステムの機能の合成を可能にする。横軸に沿った合成はシステムおよびサブシステムによって行われる。縦軸に沿った合成は「層」によって行われる。アプリケーション、サービス、ネットワークトポロジ、およびハードウェアは、分散されたシステムで1つのロール(roll)を満たすが、典型的には独立して定義され、異なるチームまたは組織によって所有される。階層化は、ホスト上の一組の制約条件を定義する構成要素によって達成され、またその逆も行われる。
図3は階層化設定例を示す。図3には、層302、層304、層306、および層308の4つの層が示されている。図3には4つの層が示されているが、実際の層の数は多様であってよく、4つより多くても少なくてもよい。さらに、異なる層の内容は異なる実施形態で異なっていてよい。図3を見ると分かるように、様々な層が他の層の上および/または下に位置する(例えば、層306は層304の上、層308の下にある)。
1つの層内の異なるシステムおよびサブシステムはそれぞれ相互作用することができ、また異なる層のシステムおよびサブシステムとも相互作用することができる。例えば、層308のサブシステム310は層308のサブシステム312ならびに層306のサブシステム314と相互作用することができる。さらに、各層は1つ上の層に対する環境と見なすことができる。例えば、層306は層308のシステムおよびサブシステムに対する環境であり、層304は層306のシステムおよびサブシステムに対する環境である。各層302、304、306、および308はそれ独自の関連付けられたSDM文書を有する。
異なる層302、304、306、および308は異なる内容を表すことができる。ある実施形態では、層302はハードウェア層であり、層304はネットワークトポロジおよびオペレーティングシステム層であり、層306はアプリケーションホスト層であり、層308はアプリケーション層である。ハードウェア層は、階層化されたシステム(例えば、図1のデバイス102)が構築される物理デバイス(例えば、コンピュータデバイス)を表す。ネットワークトポロジおよびオペレーティングシステム層は、コンピュータデバイスのネットワークトポロジ(例えば、図1のネットワーク設定100)ならびにそれらのコンピュータデバイスにインストールされたオペレーティングシステムを表す。アプリケーションホスト層は、他のアプリケーションをホストすることのできるコンピュータデバイス(例えば、SQLサーバ、IISなど)にインストールされたアプリケーションを表す。アプリケーション層は、他のアプリケーションをホストしないコンピュータデバイスにインストールされたアプリケーション(例えば、ゲームのような娯楽アプリケーション、ワードプロセッサのような生産アプリケーション、電子百科事典のようなレファレンスアプリケーション、ウェブサービスまたは経済分析のために使用することのできるような分散型アプリケーションなど)を表す。
図2に戻ると、アプリケーション開発者は開発コンポーネント202を使用してアプリケーションを設計し、開発することができる。開発者が自分のシステムの様々な部分およびそれらの部分の相互関係を定義すると、それらの部分および関係を取り込んだSDMファイル204が生成される。開発者は、LIMファイル206に記述されている環境に対してシステム記述を検証するために検証コンポーネント208を使用することができる。設計段階中のこの検証は「設計時検証」とも称される。
以下の節「SDM実施態様例」で詳述するSDMは、分散システム(モデルシステム)の構成要素の構成、相互作用、および変更の記述をサポートするように設計されている。SDMはオブジェクト関係モデルに基づいている。「オブジェクト」はシステムに存在するエンティティを記述し、「関係」は様々なエンティティ間のリンクを示す。オブジェクトと関係は、SDMに関する意味情報を取り込むようさらに定義される。具体的には、オブジェクトは構成要素、エンドポイント、および資源に分割される。関係は、接続(通信とも称される)、包含、ホスティング、委託、およびレファレンスに分割される。オブジェクトおよび関係に関するさらなる詳細を後述する。
SDMは、システム部分の共通カテゴリを提供し、広範囲のシステムにツールのサポートを提供し、設計時における定義チェックの基礎を提供する「抽象定義」を含む。一組の抽象定義は、サービス設計に対する包括的な基礎を提供する。「具体的定義」は実際のシステムまたはデータセンタ設計の部分を表す。具体的定義は、抽象定義を選択し、具体的定義のメンバおよびそのプロパティに対する設定値を定義するインプリメンテーションを定義することによって生成される。アプリケーションは、それらの具体的定義の集合を使用して生成される。
SDMは、関係のインスタンスが参加できる許可された関係の組に基づいてモデルが制限する「制約条件」も含んでいる。関係に関与するオブジェクトの構成によって異なる要件を記述する際に制約条件は有益である。例えば、通信プロトコルの各終端での参加者が互換性のあるセキュリティ設定を使用しているか否かを判定するために制約条件を使用することができる。
LIMファイル206とSDMファイル204は、検証コンポーネント208のインターフェース/処理層210に入力される。インターフェース/処理層210はSDMファイル204の検証を制御する。検証コンポーネント208はコンパイラとも称することができる。
インターフェース/処理層210は、ローダ212、検証部214、およびシミュレータ218を含む。ローダ212はSDMファイル204を構文解析し、参照されるファイルまたはメモリ内型空間(in-memory type space)内の型をどれでもロードする。SDMファイル204はSDMクラス(例えば、XMLで)を定義し、ローダ212がそれをメモリ内型空間内のSDMクラスに変換する。検証部214は、ローダ212がSDMファイル204をロードするためにSDMファイル204が適切に書かれているか否かを検証して、SDMファイル204にエラーがあるか否かをチェックする。検証部214またはローダ212がエラーに遭遇した場合、エラーは、そのエラーの原因となった問題の表示を任意選択で含めて開発コンポーネント202に戻される。検証部214はさらに、設定値、型、およびSDMファイルレファレンスをチェックして型空間を「ウォーク(walk)」する。通常、検証部214またはローダ212がエラーに遭遇すると、設計時検証は中止される。
次いでシミュレータ218は、後述するように、LIM文書206によって定義された環境をシミュレーションし、拡張エンジン220、フローエンジン222、および制約条件エンジン224を呼び出す。シミュレータ218が遭遇したいかなるエラーも、任意選択でそのエラーの原因となった問題の表示を含めてコンポーネント202に(例えば、結果226として)戻される。通常、シミュレータ218がエラーに遭遇した場合、そのエラーの表示は開発コンポーネント202に戻されるが、設計時検証は先に進む。
インターフェース/処理層210は、SDMファイル204の検証を実行するために拡張エンジン220、フローエンジン222、および制約条件エンジン224を呼び出す。一般に、拡張エンジン220は、要求されるすべての追加インスタンスおよびアクションを、バイバリューの子(by-value children)および関係を含めて追加するために、または適切なインスタンスおよび関係を除去するために、SDMファイル204に基づいてインスタンス空間を作成するためにそのアクションの組を拡張する。フローエンジン222はインスタンス「グラフ(graph)」上を「ウォーク」し、そのインスタンスに対して定義されたフローを見つけ、フローの値を適切な値に設定する。制約条件エンジン224はインスタンス空間上を「ウォーク」し、各制約条件メンバを見つけ、評価する。
ある実施形態では、制約条件のすべてが真であると評価され(すなわち、制約条件のすべてが満たされ)、SDM文書204を処理する際に検証コンポーネント208がエラーに遭遇しない場合、検証コンポーネント208はSDM文書204にデジタル署名する。このデジタル署名は、SDM文書204が正常にコンパイルされたことを示している。様々な異なる方法のどの方法によってもSDM文書204にデジタル署名することができるが、これは、通常、SDM文書204に基づくデジタル署名と、検証コンポーネント208に関連付けられた公開/秘密鍵対とを生成を伴う。したがって、デジタル署名されたSDM文書は、(例えば、それらが配置される際に)既に検証されたものとして引き続き取り扱うことができる。デジタル署名されたSDM文書は、コンパイルされたSDM文書と称することもできる。
様々な制約条件を評価することに加え、検証コンポーネント208は、それら参照された文書のフルネーム(および任意選択でバージョン)によって他のSDM文書へのレファレンスを更新することもできる。したがって、コンパイルされたSDM文書はそれらフルネームを含んでいる。例えば、SDM文書は別のSDM文書をインポートし、バージョンではなく名前によって当該他のSDM文書を参照することができ、検証コンポーネント208がその参照された文書をインポートする際、インポートされる文書のバージョンが特定され、コンパイルされたSDM文書に追加される。
本明細書での説明は、SDM文書204に含まれる得る様々なメンバまたは定義を参照している。定義は、特定のインスタンスがインスタンス空間でどのように作成されるかを定義する。換言すれば、定義は何が実現可能かを定義する。メンバは定義に基づいて特定の用法またはシナリオを記述する。例えば、定義は特定のインスタンスには何が実現可能かを記述し、メンバはそれらの可能性のどれが特定のインスタンスに含まれるかを記述する。次の表に、メンバまたは定義の例ならびに各メンバまたは定義の要約を示す。
本明細書で検討するエンジンは、バイバリューメンバ(by value member)、バイレファレンスメンバ(by reference member)、拡張、リスナ(listener)、およびトップレベル定義を参照する。バイバリューメンバは、拡張中にインスタンスが自動的に作成されるメンバを参照する。ある実施態様では、バイバリューメンバは抽象であることはできない。バイレファレンスメンバは、拡張中に拡張エンジンによってインスタンスを自動的に作成することができないメンバである。逆に、拡張エンジンでイベントを待ち受けている外部ソースはインスタンスを作成する(例えば、インターフェース/処理層210はシミュレーション中にインスタンスを作成することができ、もしくはシミュレーション中または配置中にインスタンスを作成することを設計者または開発者に(例えば、ユーザインターフェースによって)照会することができる。)。
拡張は、ルートインスタンスが与えられた場合、そのルートインスタンスに関してインスタンス空間にデータが取り込まれるプロセスを参照する。ルートインスタンスのメンバのすべては反復的に作成される。バイレファレンスメンバは拡張エンジンによっては作成されず、外部ソースによって作成される。
イベントがトリガされた場合、リスナ(例えば、シミュレータ218)に通知される。そのようなイベントの一例は、バイレファレンスメンバを作成することの要求である。トップレベル定義は、SDM文書のルートレベルで定義された定義を参照する。SDM文書は、通常、トップレベル定義を1つだけ有しているが、別の実施形態では、SDM文書は2つ以上のトップレベル定義を有することができる。
図4は、設計時検証のプロセス例400を示す流れ図である。プロセス400は、図2の検証コンポーネント208によって実施され、ソフトウェア、ファームウェア、ハードウェア、またはこれらの組合せで実行することができる。
システムの作成、削除、または修正要求に応じて、SDM文書およびSDM文書に関連付けられた任意のレファレンスを(動作402)、任意選択でそのSDM文書をロードすることができることを検証する。ある実施形態では、1つ以上のLIM文書は既にロード済みとなっており、1つ以上のLIM文書によって記述された1つ以上のインスタンス空間が既に作成されている。しかし、これがまだ行われていない場合、動作402で1つ以上のLIM文書がロードされ、1つ以上のLIM文書によって記述された1つ以上のインスタンス空間が作成される。ある実施形態では、動作402でSDM文書をロードする前に、本明細書に記載のように1つ以上のLIM文書によって記述された1つ以上のインスタンス空間が拡張、フロー、および制約条件エンジンを使用して作成される。
次いで、SDM文書にエラーがあるか(動作404)またはSDM文書がロードされた際に型空間が作成されたか否かに関してチェックが行われる。動作404でのチェックとは、設計中のシステムではなく、SDM文書自体の構造またはフォーマットを対象としている。例えば、SDM文書のフォーマットが適切であること(例えば、文書が適切なXMLフォーマットであること)、またはSDM文書に未知の要素または型がないこと、またはSDM文書内の型レファレンスが有効であることなどを検証するために、動作404でチェックを行うことができる。エラーがある場合、それらエラーに関する表示が戻され(動作406)、処理400は終了する。これらのエラーは、例えば結果226として図2の開発コンポーネント202に戻すことができる。
しかし、エラーがない場合、動作402でロードされたSDM文書のトップレベル定義が選択される(動作408)。ある実施形態では、SDM文書にはトップレベル定義が1つしかない。この場合、選択された定義に対するインスタンスが作成され(動作410)、インスタンス空間が拡張される(動作412)。トップレベル定義は、図4の拡張エンジン410によって実行される拡張の開始点として使用される。トップレベル定義を分析すること、ルートインスタンスの各メンバのインスタンスを作成すること、次いでそれら作成されたインスタンスのそれぞれを分析すること、それらのメンバのそれぞれに対する1つ以上のインスタンスを作成すること、等々によってインスタンス空間が拡張される。このプロセスは「拡張エンジン」という見出しで以下に詳述する。
トップレベル定義に基づく拡張が完了すると、拡張されたインスタンス空間のインスタンスに対して定義されたフローが特定され、フローの値が適切な値に設定される(動作414)。このプロセスは「フローエンジン」という見出しで以下に詳述する。
フローの評価による値が設定された後、制約条件がチェックされる(動作416)。インスタンス空間の各制約条件は、「制約条件エンジン」という見出しで以下に詳述するように制約条件チェックの一部として評価される。これらの制約条件は、通常、(LIM 206で記述されるように)システムが検証される対象であるシミュレーションされた環境の設定に対してチェックされる。
制約条件チェックが完了すると、未選択のSDM文書に追加のトップレベル定義があるか否かに関してチェックされる(動作418)。SDM文書に1つまたは複数の追加のトップレベル定義がある場合、それら追加のトップレベル定義のうちの1つが選択され(動作420)、処理は動作410に戻され、選択されたトップレベル定義のインスタンスがそこで作成される。
しかし、未選択のトップレベル定義がない場合、エラーが検出されたか否かに関してチェックされる(動作422)。動作422のエラーとは、動作412の拡張、動作414のフロー、動作416の制約条件チェック中に生成されたエラーおよび/または警告のことである。エラーまたは警告がある場合、それらのエラーまたは警告に関する表示が戻され(動作406)、処理400が終了する。これらのエラーは、例えば結果226として図2の開発コンポーネント202に戻すことができる。
しかしエラーがない場合、図4の設計時検証プロセスは成功であり、成功の表示が戻される(動作424)。成功の表示は、例えば結果226として図2の開発コンポーネント202に戻すことができる。
動作406で開発コンポーネント202にエラーおよび/または警告を戻すことによって、または動作424で成功の表示を戻すことによって、SDM文書204に記述されたシステムの設計時検証の結果が開発コンポーネント202に戻される。これらのエラーおよび/または警告もしくは成功の表示は、開発コンポーネント202を使用する設計者にも提示することができる。これにより、設計者に、設計中の(および、SDM文書204に記述された)システムが検証済みであるか否か、または潜在的な問題があるか否かを通知することができる。設計者に特定のエラーおよび/または警告の表示を戻すことによって、潜在的な問題が何であるか、その問題を解決する方法(または、それらを解決する必要さえあるか否か)を設計者により詳細に知らせることができる。このフィードバックは設計プロセス中に設計者に提供することができるが、これは設計者に、設計したシステムに問題があることが判明する前にデータセンタでシステムを配置するよう試みることを要求しない。
シミュレーション
上述のように、図2のインターフェース/処理層210は、LIM文書206に記述されている環境をシミュレートする。これによって、SDM文書204によって記載されたシステムをシステム設計中に予測された環境に対して検証することができ、環境に対してシステムを配置する前にエラーを特定することが可能になる。
インスタンス空間内の多くのインスタンスは、以下で詳述するように拡張エンジンによって作成することができる。しかしそれらインスタンスのいくつかは、拡張エンジンでなくシミュレータ218によって作成される。ある実施形態では、シミュレータ218によって作成されたインスタンスはトップレベル定義およびバイレファレンスメンバである。ある実施態様では、各トップレベル定義はそれ独自のインスタンス空間でシミュレーションされる。
シミュレータ218は、コンパイル中の文書のルートで見つかった定義の2つのカテゴリである(1)システム定義と、(2)ホストおよびゲストがシステム定義であるホスティング定義とをシミュレーションする。これら定義の2つのカテゴリは、大半がシミュレータ218によってインスタンスを作成することができるスタンドアロン定義である。他の定義は、一般に他の定義のコンテキストで使用されるだけであり、したがって拡張エンジン220によって作成される。ある実施形態では、シミュレータ218は、通常はあったとしてもほとんど意味のない検証を生じるような抽象定義はシミュレーションしない。
システム定義は、定義に対するインスタンスを作成し、そのインスタンスをインスタンス空間のルートインスタンスとして追加することによってシミュレーションされる。次いでそのインスタンスのメンバおよびネストされたメンバが、拡張エンジン220を呼び出すことによってインスタンス生成される。
ホスティング定義のシミュレーションは、ホストとゲストの間の検証を提供する。ある実施形態では、ホスティング関係のインスタンスはルートインスタンスとしては使用されず、したがって拡張エンジンが呼び出される前に特別なルートインスタンスが作成される。この特別なルートインスタンスは、3つのメンバである、(1)ホスティング関係のホストに対するシステム定義と、(2)ホスティング関係のゲストに対するシステム定義と、(3)最初の2つのメンバのホストおよびゲストシステム定義のインスタンスに関連付けられたホスティング定義とを有するシステム定義である。次いで拡張エンジン222は、特別なルートインスタンスのメンバおよびネストされたメンバをインスタンス生成するために呼び出される。
作成すべきインスタンス数は未知であり、配置環境によって異なるので、拡張エンジン220はバイレファレンスメンバのインスタンスは作成しない。さらに、バイレファレンスメンバは抽象である場合があり、したがってメンバをインスタンス生成するために使用される具体的定義は未知である。配置中にこれらの質問に回答するために人的介入(例えば、システム管理者による)が通常利用される。このような介入は任意選択で設計時検証中にも利用することができる。しかし、より一般的には、インターフェース/処理層210(例えば、シミュレータ218)は、次の通りに人間のオペレータが何を選ぶかをシミュレーションし、これはシミュレーション中の人間のオペレータの介入へのいかなる要求をも緩和する。シミュレータ218は、1つまたは最小発生数よりも大きなメンバのインスタンス数を作成する(例えば、バイレファレンスメンバのためにパラメータMinOccursで指定されたように)。バイレファレンスメンバが抽象である場合、シミュレータ218はそのメンバのインスタンスは生成せず、情報を伴う(例えば、抽象バイレファレンスメンバをシミュレーションできないことを示す)警告をユーザに戻す。
拡張エンジン
拡張エンジン220は幅広いコマンドを検証コンポーネント208に入力することを可能とし、それらのコマンドの影響を受ける適切なオブジェクトおよび関係を特定するためにそれらのコマンドを拡張する。通常、これら多様なコマンドは、特定のオブジェクトまたは関係を作成または削除するためのコマンドである(例えば、ウェブアプリケーションを作成するためのコマンド、またはウェブアプリケーションを削除するためのコマンド)。拡張エンジン220は、バイバリューの子および関係を含めて要求されるすべての追加インスタンスおよび関係を追加し、または適切なインスタンスおよび関係を除去するために、SDMファイル204に基づくインスタンス空間を作成するためにそのアクションの組を拡張する。
最初、シミュレーション中にトップレベル定義のインスタンス(トップレベルインスタンスとも称される)が作成された後、インスタンス空間にデータを取り込むために拡張エンジン220が呼び出される。ルートインスタンスが拡張の開始位置として拡張エンジン220に渡される。拡張によって作成されたインスタンスはルートインスタンスと関係している。拡張エンジン220が特定のインスタンス空間に対して呼び出された最初の時点で、拡張エンジン220に渡されたルートインスタンスはトップレベルのインスタンス(トップレベル定義のインスタンス)である。しかし拡張エンジン220は、通常はそうであるが、繰り返し呼び出される場合がある。したがって、トップレベルインスタンスのメンバおよびネストされたメンバはそのような反復呼び出しのルートインスタンスとなる。
拡張エンジン220は、ルートインスタンスの各メンバの1つ以上のインスタンスを作成することから開始する。各メンバがインスタンス生成されると、それらはネストされたメンバに対して検査される。別のメンバ内で定義されているメンバは、当該他のメンバ内にネストされているものと称される。メンバのネスティングは複数レベルを通して行うことができる(例えば、メンバはその中にネストされた複数のメンバを定義することができ、それら複数のメンバのそれぞれはその中にネストされた複数のメンバを定義することができ、さらにそのそれぞれがその中にネストされた複数のメンバを定義することができ、...という具合に)。拡張プロセスは、インスタンス空間がルートインスタンスに関して完全に作成されるまでメンバおよびネストされたメンバのそれぞれに対して反復的に実行される。
ある実施形態では、拡張中に様々な型のメンバの1つの部分集合だけがインスタンス生成される。拡張中に作成されるインスタンスのこの部分集合は、次のオブジェクトメンバ、すなわちサブシステムと、資源と、エンドポイントとを含む。拡張中に作成されたインスタンスのこの部分集合は、次の関係メンバ、すなわち包含と、通信と、ホスティングと、委任と、レファレンスも含む。この部分集合に含まれない他のメンバは拡張によってはインスタンス生成されず、上記のインスタンスの1つが拡張によって作成された際に作成プロセスがメンバまたは定義を検査し、当該他のメンバに対する子メンバのインスタンスを自働的に作成する。当該他のメンバの例としては、フローメンバと制約条件メンバとが含まれる。
ある実施形態では、拡張エンジン220が呼び出された際にメンバのインスタンスが既に存在する場合、そのインスタンスは再度作成されない。しかしインスタンス空間が完全に作成されたこと(また、まだ作成されていないネストされたメンバをこの反復的な呼び出しから作成すること)を検証するために拡張エンジン220は各インスタンスに対して反復的に進む。
図5Aおよび5Bは、インスタンス空間を作成する反復拡張プロセス例500を説明する流れ図である。インスタンス空間は、図2のSDM文書204のようなSDM文書によって定義される。プロセス500は、図2の拡張エンジン220によって実施されるが、ソフトウェア、ファームウェア、ハードウェア、またはこれらの組合せによって実行することができる。
最初にインスタンス定義がアクセスされる(動作502)。呼び出されると、拡張エンジン220には拡張されるべきインスタンス定義が通知され(本節で既に説明したルートインスタンス)、動作502でこのインスタンス定義がアクセスされる。拡張エンジン220にはインスタンス定義を渡すことができ、インスタンス定義のある場所の識別子(例えば、ポインタ)を渡すことができ、またはインスタンス定義にアクセスすることができる場所および/またはその方法を通知することができる。プロセス500は、トップレベル定義であるインスタンス定義を使用してシミュレータ218によって呼び出すか、またはプロセス500自体によって反復的に呼び出すことができる。
次いでインスタンス定義のメンバが選択される(動作504)。メンバはインスタンス定義からいかなる順番でも選択することができるが、通常はインスタンス空間を定義するSDMファイルにある順番で選択される。ある実施形態では、関係メンバが選択される前にすべてのオブジェクトメンバが選択される。
選択されたメンバがオブジェクトメンバか関係メンバかに関して次いでチェックされ(動作506)、このチェックの結果に基づいてプロセス500は進む。選択されたメンバがオブジェクトメンバの場合、作成中のインスタンス空間には選択されたメンバの正確な数のインスタンスが既にあるか否かに関してチェックされる(動作508)。各メンバは、メンバのインスタンスをいくつ作成すべきかに関する表示を含む。ある実施形態では、メンバがより多くのインスタンスを作成するよう指定しない限り(メンバに明示的に指定されているか否かにかかわらず)各メンバの1つのインスタンスが作成されるように、1つのインスタンスというディフォルト値が使用される。
正確な数のインスタンスがまだ存在していない場合、オブジェクトメンバがバイバリューメンバであるか否かに関してチェックされる(動作510)。オブジェクトメンバがバイバリューメンバである場合、メンバ定義で指定されているようにオブジェクトの最小発生数が作成される(動作512)。しかしオブジェクトメンバがバイバリューメンバでない場合、それはバイレファレンスメンバであり、したがってリスナ(例えば、図2のシミュレータ218)がバイレファレンスメンバのインスタンスを作成することを可能にするイベントがトリガされる(動作514)。
オブジェクトメンバの1つ以上のインスタンスが動作512と514のいずれにかかわらず作成された後、または動作508でメンバの正確な数のインスタンスが既に存在すると判定された場合、プロセス500は動作516に進む。動作516で、動作512または動作514で作成された1つ以上のインスタンス(または、動作508で既に作成されたと判定された1つ以上のインスタンス)の各メンバインスタンスのためにプロセス500が呼び出される。プロセス500を反復的に呼び出す場合、プロセス500が呼び出された各メンバインスタンスは呼び出されたプロセス500に対するインスタンス定義となる。したがって、インスタンス空間ですべてのインスタンスが作成されるまでプロセス500はオブジェクトメンバで反復的に呼び出される。
さらに、動作504で選択されていなかったインスタンス定義に追加メンバがあるか否かに関してチェックがなされる(動作518)。インスタンス定義に1つまたは複数のそのような追加メンバがある場合、プロセス500は動作504に戻り、それらメンバのうちの1つがそこで選択される。しかしインスタンス定義にそのような追加メンバがない場合、プロセス500はこのインスタンス定義については完了している。
動作506に戻って、選択されたメンバが関係メンバである場合、プロセス500は関係に関与するソースインスタンス数とターゲットインスタンス数とに基づいて作成すべき関係インスタンス数を特定する(図5Bの動作522)。作成すべき関係インスタンス数は、ソースインスタンス数にターゲットインスタンス数を乗じ、その結果を作成すべき関係インスタンス数とすることによって決定される。次いで、関係の特定された数のインスタンスが作成される(動作524)。
あるいは、ソースインスタンス数にターゲットインスタンス数を乗じることによって関係インスタンスの最大数を得ることができ、動作524でその最大数の部分集合を作成することができる。例えば複数の実現可能なホストが存在する場合、動作524でそのうちの1つだけを選択することができる。上記のバイレファレンスメンバと同様に、関係インスタンスの部分集合を選択するためにリスナ(例えば、人間のオペレータまたはシミュレータ218)を呼び出すことができる。シミュレータ218は、例えば関係インスタンスのどの部分集合を作成するかを決定するために使用されるべき様々な基準または従うべき規則によって構成またはプログラムすることができる。
関係メンバの型に応じて関係インスタンスは様々な方法で作成される。ある実施形態では、包含定義メンバ、通信定義メンバ、レファレンス定義メンバ、ホスティング定義メンバ、および委任定義メンバという型の関係メンバを使用することができる。包含定義メンバは、親を子メンバの各インスタンスに関連付ける1対多の関係である。包含定義メンバは、1つのオブジェクトメンバを他のオブジェクトメンバに含めることができることを記述している。通信定義メンバは、サーバとクライアントメンバインスタンスのすべての組合せを関連付ける多対多の関係である。通信定義メンバは、別個に配置されたソフトウェア要素間の相互作用を記述する。レファレンス定義メンバは、ソースメンバインスタンスに依存するすべての組合せを関連付ける多対多の関係である。レファレンス定義メンバは、(ホスティング定義メンバに加えて)インスタンス間の従属関係を取り込むために使用される。これらの従属関係は、例えば配置中の構築順番とインストールおよび更新中のシステム間のフローパラメータとを制御するために使用することができる。ホスティング定義メンバは、ホストをそのゲストのメンバインスタンスのそれぞれに関連付ける1対多の関係である。ホスティング定義メンバは、構築されるためにゲストがホストを必要とすることを特定するために使用される。委任定義メンバは、2つのシステムの通信エンドポイントを関連付ける1対1の関係である。委任定義メンバは、1つのシステムから別のシステムに動作を転送するために使用される(例えば、既に指示されているすべての相互作用を1つのシステムから別のシステムのエンドポイントに転送する)。
関係の各インスタンスに関して、ソースおよびターゲットインスタンスが関係のインスタンスに関連付けられる(動作526)。次いでプロセス500は図5Aの動作518に戻り、インスタンス定義に選択されるべき追加メンバがあるか否かに関してそこでチェックがなされる。
したがって、プロセス500は反復的に呼び出され、プロセスが反復的に呼び出されるたびに様々なオブジェクトおよび関係インスタンスが作成される。反復拡張プロセスは、すべてのメンバインスタンスが作成された際にインスタンス空間の作成が何時完了したかを認識している。
拡張プロセスの反復的な性質により、結果として生じたインスタンスは、図2のフローエンジン222および制約条件エンジン224へのエントリポイントであるトップレベルのインスタンスによって相互にリンクされる。このようにして作成されたインスタンス空間は、ツリーの各ノードがメンバインスタンスを表すインスタンスツリーと見なすことができる。さらに、ツリーの各ノード(トップレベルのノードを除いて)は、ツリーのノードを作成するために拡張プロセスを呼び出したメンバインスタンスを表す親ノードにリンクされる。さらにツリーの各ノードは、ツリーのそのノードのメンバインスタンスのメンバである0またはそれより多い子ノードにリンクされる。リーフメンバがネストされたメンバを有しない場合(例えば、すべてのリーフメンバが0個の子ノードを有する場合)、反復拡張プロセスはインスタンスグラフの作成が完了したことを認識している。さらに、その型であるメンバを有する定義により拡張プロセスが無限になる可能性がある状況を避けるために、ある実施形態では、定義が祖先インスタンスとしてまだインスタンス生成されていない場合、拡張プロセスはインスタンスを作成することしか選ばない。例えばディレクトリの定義があり、それが中にディレクトリを有する場合、単一ディレクトリがあるならば拡張エンジンはこれの拡張を停止する。
フローエンジン
拡張エンジン220が拡張プロセスを完了した後、シミュレータ218は拡張プロセスから生じたインスタンス空間に対してフローエンジン222を呼び出す。フローエンジン222は、インスタンス空間のインスタンスグラフ上を「ウォーク」し、インスタンスグラフで定義されたフローインスタンスを見つける。次いでフローエンジン222はフローの値を適切な値に設定する。
設定はSDMファイル204の定義に対して宣言することができ、対応する設定値はそれらの定義から作成されたインスタンス上に存在することができる。設定値(setting values)は非計算設定値(non-calculated values)であっても、計算設定値(calculated setting values)であってもよい。
非計算設定値は、(例えば、SDMファイル204の)定義からのディフォルト値または初期値によって設定された設定値であるか、または値を明示的に設定するユーザによって設定された設定値である。非計算設定値は、それらが属するSDMインスタンスの作成に対してだけ設定されるよう制限されても、SDMインスタンスの存続期間を通して変更されてもよい。非計算設定値は、フローの出力ではなく、フローへの入力として動作することができる。
計算設定値は、フローの出力である設定値である。その結果、フローは計算設定値の値を設定することができるが、一般に他のエンティティは設定できない。ある実施態様では、特定の計算設定値に値を供給する1つのフローしかない場合がある。そのような実施態様では、複数のフローが同じ設定値インスタンスに出力する場合、エラーが報告され、フローの出力がエラー状態に設定される。計算設定値は1つまたは複数の入力に基づいている。これらの入力は計算設定値および/または非計算設定値であってよい。
ある実施形態では、計算設定値は、構成値と非構成値という2つのカテゴリに分離することができる。構成値はフローによって計算される値であり、その結果、それらを含むSDMインスタンスの構成が得られる。例えば、ファイルまたはデータベース名へのフルパスは構成値である。
非構成値はフローによって計算された値だが、これから構成は得られない。むしろ、これらは制約条件に交換された値としてのみ存在する。例えば、この結果得られたすべての継承したweb.config値を考慮するweb.config設定は非構成値である。非構成値の別の例は、この結果として得られた、ファイルの構成されたアクセス制御リストならびにファイルが含んでいるディレクトリおよびボリュームを考慮したファイルのアクセス制御リストである。
フローエンジン222は、任意選択で構成値と非構成値とを別個に取り扱うことができる。例えば、構成値に高い優先順位を与えることができ、したがって構成値を設定するフローを、非構成値を設定するフローの前に評価することができる。
一般に、インスタンス空間内のフローインスタンスを特定し、フローインスタンスへの入力の値を特定する(例えば、それらの入力のソースである他のインスタンスの設定値を特定する)ことによってフローは評価される。命令のモジュールまたは組はフローインスタンスによって参照されるが、その命令のモジュールまたは組はフローインスタンスに対応するフロー機能を処理することができる。フロー機能は入力の値に基づいて処理され、そのフロー機能の結果が得られる。フロー機能の結果はフローインスタンスの出力として設定される。1つのフローは0またはそれを超える入力値と1つまたは複数の出力とを有することができる(例えば、1つまたは複数のインスタンスに対する設定値をフローの出力に基づいて設定することができる)。
幅広い種類のフロー機能のどれでも使用することができる。フロー機能はシステムの開発者および/または他の関係者によって定義することができる。例えばSDNファイル204を作成しているのと同じ設計者が1つまたは複数のフロー機能を定義することができる。別の例として、開発コンポーネント202の製造業者またはある種の他のサードパーティ開発者が1つまたは複数のフロー機能を定義することができる。フロー機能自体は、代数、幾何、微積分などを利用する計算、日付および/または時刻に基づく計算、乱数計算などのような様々な計算および/または動作のどれでも含むことができる。
ある実施形態では、SDMファイル204で定義されたフローメンバがマネージャ定義に関連付けられている。マネージャ定義は、フロー機能を処理するために実行することができる一組の命令またはコードへのポインタを含む。したがって、フローインスタンスに対するフローを評価するために、関連付けられたマネージャ定義が特定され、関連付けられたマネージャが(まだインスタンス生成されていない場合は)インスタンス生成される。当該一組の命令またはコードへのポインタがマネージャから得られるが、これはフロー出力を決定するために当該一組の命令またはコードを得て、実行することを可能にする。
さらにある実施形態では、マネージャは型変換をサポートすることもできる。このような実施形態では、マネージャは、フローを異なる型の2つ以上の設定値に基づかせることができる。例えば、入力値は出力値と異なる型であってよい。マネージャは、そのような型の変換を行うことを可能にする1つまたは複数の方法を公開するか、または変換を実行するために取得し実行されるべき一組の命令またはコードへのポインタを含む。異なる変換を異なるマネージャによってサポートすることができる(例えば、マネージャ設計者は、所望の型の変換ならどれでもサポートするようマネージャを設計することができる)。
図6Aおよび6Bは、評価フローのためのプロセス例600を示す流れ図である。プロセス600は、図2のフローエンジン222によって実施され、ソフトウェア、ファームウェア、ハードウェア、またはこれらの組合せで実行することができる。
最初に、インスタンス空間のインスタンスのすべての設定が見つけられる(動作602)。これらの設定は、インスタンスグラフの各ノードを設定値に関してチェックすることによるような様々な方法で見つけることができる。次いでインスタンス空間のすべてのフローインスタンスが特定される(動作604)。インスタンス空間の各フローインスタンスは「ダーティ」および「訪問なし」とマーク付けされる(動作606)。「ダーティ」というマーク付けは、フローがまだ実行されていないか、または評価されていないことを示している。「訪問なし」というマーク付けは、フローの実行または評価がまだ開始されていないということを示している。フローインスタンスのマーク付けは、幅広い様々な方法で実行することができる。例えば、各フローインスタンスは、フローインスタンスを「ダーティ」とマーク付けするよう設定ができる「ダーティ」フラグと、フローインスタンスを「訪問なし」とマーク付けするよう設定できる「訪問なし」フラグとを有することができる。他の例として、フローエンジン222は、リスト、表、またはエンジン222がフローインスタンスの記録およびそれらの関連付けられたマーク付けを保持することができる1つ以上の他のデータ構造を維持することができる。
フローインスタンスの結果として値を受け取る設定が次いで特定される(動作608)。動作608で、計算された設定値のすべてが特定される。これらの設置自体は、それらが計算設定値であるかまたは非計算設定値であるかを示している(例えば、それらが非計算設定値であることを示すよう設定することができる「固定」属性のようなフラグまたは属性を有することができる)。動作608では、値の従属関係を示す従属関係グラフを任意選択で生成することもできる。従属関係グラフは、各設定値に関して、他のどの設定値にそれが依存しているか(すなわち、その入力である他の設定値)と他のどの設定値がそれに依存しているか(すなわち、それを入力として使用する他の設定値)とを示す。
動作604で「ダーティ」および「訪問なし」とマーク付けされていると特定されたフローインスタンスのうちの1つが次いで選択される(動作610)。フローインスタンスは、動作604でフローインスタンスが特定された順番に基づく順番、無作為な順番、入力値の番号に基づく順番などのようなどのような順番でも選択することができる。選択されたフローインスタンスは、次いで「訪問あり」とマーク付けされるが、依然として「ダーティ」とマーク付けされたままである(動作612)。これは、フローインスタンスに関連付けられたフローの評価または実行は開始されたが、そのフローはまだ実行も評価もされていないということを示している(例えば、フローに対する出力値はまだ決定されていない)。
次いでフローインスタンスに対する入力が特定される(動作614)。各フローインスタンスは、その入力のそれぞれに対するソース(例えば、別のインスタンスの特定の設定値)を特定するパラメータを有する。特定された入力にまだ値が割り当てられていないか否かに関するチェックが次いで行われる(図6Bの動作616)。非計算設定値である入力は、既に評価済みのフローインスタンスによって計算された計算設定値である入力がそうであるように、割り当てられた値となっている。しかし未評価のフローインスタンスによって計算された計算設定値にはまだ値は割り当てられていない(例えば、それらはヌル値を有する場合がある)。
特定された入力の1つまたは複数に割り当てられた値がない場合、(動作610で選択された)このフローインスタンスの評価は中断される(動作618)。入力値の計算を可能とするために評価が中断される。まだ値を有さない各入力に対して、入力値を設定するフローインスタンスが特定される(動作620)。次いでプロセス600は、そのフローインスタンスの評価を開始するために図6aの動作612に戻る(動作622)。次いで入力のすべてが値を有すると、動作618で中断されたフローインスタンスの評価が再開される(動作624)。例えば後述する動作616または動作626で、評価を再開することができる。動作620で特定されたフローインスタンスの1つまたは複数の評価自体は、まだ値を有していない特定された入力のために中断する場合があることに留意されたい。
動作616に戻ると、特定された1つ以上の入力が値を有している場合、その1つ以上の入力のその1つ以上の値はそれの1つ以上のソースから取得される(動作626)。その1つ以上の値を、SDMファイル204、SDMファイル204に基づいてインスタンス生成されたオブジェクト、フローインスタンス(フローの出力)などのような様々なソースから取得することができる。フローメンバに対してフロー機能を評価するために実行されるべき当該一組の命令またはコードが次いで特定される(動作628)。あるいは、実行される一組の命令またはコードではなく、フロー機能をハードウェアで実施することができる。当該一組の命令またはコードが次いで実行され、次にその実行された一組の命令またはコードの結果がフローの出力とも称されるフローインスタンスの出力として使用される(動作630)。
次いでそのフローが既に実行済みであるかまたは評価済みであることを示すために、フローインスタンスが「ダーティでない」とマーク付けされる(動作632)。フローインスタンスは、動作612で既に「訪問あり」とマーク付けされているべきであるが、フローインスタンスがまだ「訪問あり」とマーク付けされていない場合は動作632でフローインスタンスに「訪問あり」とマーク付けすることができる。
「ダーティ」または「訪問なし」とマーク付けされたインスタンス空間で特定された追加のフローインスタンスがあるか否かに関して次いでチェックがなされる(動作634)。そのような追加のフローインスタンスがある場合、プロセス600は図6Aの動作610に戻り、そこでそのような追加のフローインスタンスのうちの1つが選択される。すべてのフローインスタンスが評価されると(例えば、動作604で特定されたフローインスタンスがどれも「ダーティ」とも「訪問なし」ともマーク付けされていない場合)、フロー評価プロセス600は完了する(動作636)。フローが完了すると、シミュレータ218は設定に関する値を伴って完全なインスタンス空間を有する。
プロセス600は、図6Aおよび6Bで、まだ値を有さない入力を有しており、それらの値を設定する1つ以上のフローインスタンスを評価するフローインスタンスの中断中の評価として説明されている。しかし、プロセス600は別の方法で実施することもできる。例えばそれらの値を設定した1つ以上のフローインスタンスを評価するのではなく、プロセス600は、図6Aの動作610に戻ることができ、そこでフローインスタンスのうちの1つが選択される(中断したフローに対して入力値を設定するか否かにかかわらず)。この代替方法でのフローインスタンスの評価は、いくつかのフローインスタンスの評価は完了しているが、すべての他のフローインスタンスの評価は中断されているという状況をもたらす場合がある。このような状況が発生した場合、特定された入力が値を有しているか否かを判定するために、動作616を各中断されたフローインスタンスに対して反復することができる。中断しているフローインスタンスの少なくとも1つに対する入力は値を有するべきであり、反復された動作616のこのプロセスはすべてのフローインスタンスが評価されるまで続けることができる。
フローエンジン222は、図6Aおよび6Bのフロー評価プロセス中に循環レファレンスをも検出する。循環レファレンスとは、1つまたは複数のフローインスタンスが、それらの入力の少なくとも1つに関してそれぞれに他の出力に(直接的または間接的に)依存している状況のことである。例えば、フローインスタンスAは、フローインスタンスAへの入力値でもある出力値を有する。別の実施例によれば、フローインスタンスAはフローインスタンスBからの出力である入力値を有し、フローインスタンスBはフローインスタンスAからの出力である入力値を有する。さらに別の実施例では、フローインスタンスAはフローインスタンスBからの出力である入力値を有し、フローインスタンスBはフローインスタンスCからの出力である入力値を有し、フローインスタンスCはフローインスタンスAからの出力である入力値を有する。このような循環レファレンスは評価されないが、フローエンジン222によって検出され、循環レファレンスの設定値はエラー状態に設定される。
循環レファレンスは「ダーティ」および「訪問あり」のマーク付けを使用して検出することができる。上記の動作618でフローの評価が中断した場合、そのフローは「訪問あり」とマーク付けされるが「ダーティ」ともマーク付けされ、別のフローの評価が開始される。さらに当該他のフローの評価も中断することができる。フロー評価のこの中断中、フローが以前に「ダーティ」とマーク付けされているが依然として「ダーティ」であると評価された場合、循環レファレンスが発生している。換言すれば、1つまたは複数のフローの評価が中断し、その中断中に既に「訪問あり」および「ダーティ」とマーク付けされている評価のために別のフローが選択される。この場合、評価のために選択された当該他のフローの評価が以前に中断したことにより循環レファレンスが発生している。
あるいは、様々な他の方法のどれでも循環レファレンスを検出することができる。例えば、値の従属関係を示す従属関係グラフを上述のように動作608で作成することができ、循環レファレンスを特定するためにこの依存関係グラフを使用することができる。
循環レファレンスが検出されると、その循環レファレンスの一部であるフローのすべてはエラーとマーク付けされる(例えば、周期性フローエラー)。循環レファレンスが検出された際に評価中のフローは循環レファレンスの一部であり、循環レファレンスが検出された際に評価中のフローから入力を受け取るすべての他のフローであり、それらのフローの1つから入力を受け取るすべての他のフローであり、以下同断である。次いで循環レファレンスの一部であるフローのすべての評価が停止する。残りのフローの評価を続行することができるように、これらのフローを任意選択で「訪問あり」および「ダーティでない」とマーク付けすることができる。
フローは決定論的であっても非決定論的であってもよいということに留意されたい。決定論的フローは、入力値の特有の組によって呼び出された時は何時でも同じ値を出力する。例えば、フローは2つの入力値の和を出力することができる。入力値の特有の組が与えられるとフローは常に同じ値を出力するので、このようなフローは決定論的である。しかし非決定論的フローは、入力値の特有の組によって呼び出されると何時でも異なる値を出力することができる。例えば、フローは1つの入力値に基づいて乱数を発生することができる。同じ入力値によって呼び出されるたびに異なる乱数を発生することができるので、そのようなフローは非決定論的である。入力値を有しないフローは決定論的(常に同じ値を出力する)であっても非決定論的(呼び出されるたびに異なる値を出力する)であってもよい。
ある実施形態では、設定値はエラー状態を有することができる。エラー状態では、設定値はエラー情報を保持することができる(例えば、エラーコードまたはエラーの説明)。設定値がエラー情報を保持しない場合、エラー情報は何らかの他の方法で(例えば、設定をエラー状態に置いたイベントにより)報告することができる。設定値は様々な方法でエラー状態に設定することができる。例えば、フローエンジン222は、フローを実行している際にエラーが発生した場合(例えば、フローがエラーを戻したから、フローエンジンが循環レファレンスを検出した場合または入力の問題によりフローが実行できなかった場合などにフローエンジンがフローを実行することができなかったからなどの理由から)、フローの出力値をエラー状態に設定する。
エラー状態はフローによって伝播され、したがってエラー状態の入力値を有するいかなるフローによってもフローエンジンはそのエラー状態をその出力に伝播させることになる。このようなエラー状態は最終的にフローエンジン222によって開発コンポーネント202に(例えば、図2の結果226として)戻すことができる。あるいは、元のエラーの原因となったイベントは、フローによってエラー状態の伝播を戻すのではなく、フローエンジン222によって開発コンポーネント202に(例えば、図2の結果226として)戻すことができる。
さらにある実施形態では、フロー入力および/または出力は、現在存在していないインスタンスを意味することができる(例えば、入力または出力は作成されていないメンバを意味することができる)。フロー入力が現在存在しないインスタンスを表している場合、その入力は未設定と見なされ、そのフローでディフォルトが定義されている場合はディフォルトに戻る(例えば、割り当てられた値に戻る)。フローにそのような割り当てられた値がない場合、入力はメンバのデータ型に関してディフォルト値に戻る。
フロー出力が現在存在していないインスタンスを表している場合、その出力値は使用されない。フローの出力が存在していない場合、フローは値を設定しないので実行される必要はない。しかしすべての入力が現在存在しているわけではなくても、少なくとも1つの出力が存在していればそのフローは実行される。
設計時検証が継承した設定パターンを考慮することが望ましい場合もある。継承した設定とは、インスタンス空間がオブジェクトの階層を有しており、設定値をオブジェクトに適用することができ、その結果、階層でそのオブジェクトの下にあるすべてのオブジェクトに対する設定用の値が得られるという状態のことである。事実上、当該オブジェクトの下のオブジェクトがディフォルト値を変更するために独自の明示的に適用される値を有しない限り、これによって当該オブジェクトの下にあるオブジェクトに対するディフォルト値が作成される。これらを、オブジェクトに対して適用した設定(特定オブジェクトに適用した設定)およびオブジェクトに対して結果として得られた設定(親オブジェクトから継承した設定と組み合わされた適用した設定の結果)として参照することができる。
そのような継承された設定には異なる方法で対応することができる。ある実施形態では、そのような継承した設定はSDMファイル204の作成中に対応することができる。SDMファイル204の設計者は、そのような継承した設定が存在する状態に気付いており、SDMファイル204の設計でそれらを考慮する。例えば、SDMファイル204の設計者は、適用した設定と結果として得られた設定の両方を宣言することができるが、結果として得られた設定だけに対する制約条件しか宣言することはできない。
別の実施形態では、各設定が適用した設定値と結果として得られた設定値の両方を有する。したがって1つのインスタンス内の各設定は、実際には1つではなく2つの値を有することになる。適用した設定値は、初期設定または値の明示的な設定によって設定された値である。結果として得られた設定値は、フローによって設定される。ディフォルトにより、設定へのレファレンスは、フローが結果の設定値を設定していない限り当該結果として得られた設定値を取る。この場合、レファレンスは適用した設定値を取ることになる。一方、フロー出力へのレファレンスはディフォルトによる結果値を表す。さらにすべてのレファレンスは、2つの設定値のうちの1つを明示的に表すために、任意選択でバリュー型修飾子(value type qualifier)を追加することができる。
通常、フローの出力はフローが評価されるたびに置き換えられる。すなわち、フローを実行すると、フローのそれ以前のいかなる出力も上書きする。しかし各設定が適用した設定値と結果設定値の両方を有する実施形態では、適用した設定値をその入力のうちの1つとして取るためにフローを書くことができる。適切に構築されたフロー機能が与えられると、フローの出力をフローの他の1つ以上の入力に添付された適用した設定とすることができる。したがって、これらの実施形態では、フロー出力に新しい入力を効果的に添付することが可能である。
制約条件エンジン
シミュレータ218は、SDM文書204によって定義されたシステムに対して制約条件を評価するために制約条件エンジン224を呼び出す。制約条件エンジン224によって実行される評価は、(環境がSDM文書204によって述べられた制約条件を満たすことを検証するために)環境に対してSDM文書204で定義された制約条件を評価し、かつ/または(SDM文書204で定義されたシステムが環境によって述べられた制約条件を満たすことを検証するために)SDM文書204(例えば、LIM文書206で)で定義されたシステムに対して環境によって定義された制約条件を評価する。
制約条件エンジン224はインスタンス空間上を「ウォーク」し、各制約条件メンバを見つけてこれを評価する。制約条件エンジン224は、SDM文書204によって定義された制約条件メンバならびにLIM文書206によって定義された制約条件メンバを評価することができる。通常、シミュレータ218はフローエンジン222がフローの評価を終了した後で制約条件エンジン224を呼び出す。したがって、拡張およびフロー評価プロセスから結果として得られたインスタンス空間に基づいて制約条件チェックが実行される。しかし代替形態では、フローエンジン222がフローの評価を終了する前に制約条件エンジン224が呼び出される場合がある。
制約条件は様々な形態を取ることができ、ある実施形態では、制約条件は設定制約条件、関係制約条件、およびオブジェクト制約条件を含む。設定制約条件は、オブジェクトに対する設定を制約し、マネージャまたはコードが評価を実行することによってサポートされる。関係制約条件は、オブジェクトが参加することのできる1つ以上の関係を制約する。オブジェクト制約条件は、関係の1つ以上のオブジェクトを制約する。
制約条件定義は、通常、制約条件が適用されるターゲット定義を特定し、その制約条件が何であるかをさらに定義する。設定制約条件の場合、一組の命令またはコード(またはハードウェアモジュール)は、ターゲットが制約条件を満たしているか否かを評価するために実行することができる制約条件(例えば、制約条件定義によって示された)に関連付けられている。ある実施形態では、制約条件定義は、当該一組の命令またはコードを指し示し、評価フローに関して上記のマネージャ定義と類似しているマネージャ定義に関連付けられている。
図7A〜7Eは、評価制約条件のプロセス例700を示す流れ図である。プロセス700は、図2の制約条件エンジン224によって実施され、ソフトウェア、ファームウェア、ハードウェア、またはこれらの組合せで実行することができる。
最初、インスタンス空間のすべての制約条件が特定される(動作702)。動作702でのこの特定は、設定制約条件、関係制約条件、およびオブジェクト制約条件の特定を含む。動作702の特定は、(例えば、SDM文書204で)システムによって定義された制約条件ならびに(例えば、LIM文書206で)環境によって定義された制約条件を特定することを含むことができる。
次いで特定された制約条件のうちの1つが選択される(動作704)。その制約条件は様々な異なる方法のどれでも選択することができる。例えば、制約条件は動作702で特定された順番で選択することができ、異なる型の制約条件を他の型の前に選択することができ(例えば、設定制約条件が関係制約条件の前に選択される)、制約条件は無作為に選択することができる、などである。選択された制約条件は、次いでその制約条件が関係制約条件か、設定制約条件か、オブジェクト制約条件かに基づいて評価される。
制約条件が設定制約条件である場合、制約条件のターゲットインスタンスからの1つ以上の適切な値が取得される(動作706)。制約条件は、評価されるべきターゲットインスタンスを特定する(例えば、制約条件のターゲットであるオブジェクトを名前により特定する)。制約条件は、ターゲットインスタンスのどの1つ以上の値が評価されるべきかをも特定し、それら特定された1つ以上の設定値がターゲットインスタンスから取得される。制約条件のために制約条件機能を評価するために実行されるべき当該一組の命令またはコードが次いで特定される(動作708)。あるいは、実行される一組の命令またはコードではなく、制約条件機能をハードウェアで実施することができる。動作706で取得された1つ以上の値が制約条件を満たしているか否かを判定するために、次いで当該一組の命令またはコードが実行される(動作710)。例えば、当該一組の命令は、1つ以上の取得された値を制約条件の値と比較し、その取得された1つ以上の値の1つまたは複数が制約条件の1つまたは複数の設定値と同じ(一致する)場合はその制約条件が満たされると判定することができる。
次いで制約条件機能の結果が戻される(動作712)。その結果は、結果226の一部として図2の開発コンポーネント202に戻すことができる。制約条件は、名前または動作712で結果の一部として戻すことができる制約条件を記述する他の情報を任意選択で含むことができ、これによってエラーを記述する追加情報を開発コンポーネント202で設計者に提示することができる。
未選択のインスタンス空間に追加の制約条件があるか否かに関してチェックがなされる(動作714)。制約条件のすべてが選択され、評価された場合、制約条件のチェックプロセスは完了する(動作716)。しかし1つまたは複数の制約条件が未選択の場合、プロセス700は特定された制約条件の別の1つを選択するために動作704に戻る。
動作704に戻ると、選択された制約条件がオブジェクト制約条件である場合、その制約条件のターゲットインスタンスに対する主要なロールと主要なオブジェクト定義が特定される(図7Bの動作718)。オブジェクト制約条件の場合、制約条件のターゲットインスタンスは関係インスタンスである。ターゲットインスタンスの主要なオブジェクト定義は、選択された制約条件が目標とする1つ以上のオブジェクトの名前を表している。ターゲットインスタンスの主要なロールは、主要なオブジェクト定義によって特定される定義に一致しなければならない関係のロールを特定する。次いで制約条件が目標とする副次的なロールと副次的なオブジェクト定義があるか否かに関してチェックがなされる(動作720)。ある実施形態では、制約条件は複数のオブジェクトおよび/またはロールを目標とすることができ、制約条件が目標とする第2のロールおよび/またはオブジェクト定義を特定するために副次的なロールと副次的なオブジェクト定義を使用することができる。
制約条件が目標とする副次的なロールと副次的なオブジェクト定義がある場合、制約条件の主要なロールと副次的なロールの両方および主要なオブジェクト定義と副次的なオブジェクト定義の両方がターゲットインスタンスと一致するか否かに関してチェックがなされる(動作722)。ロールの1つまたは複数またはオブジェクト定義の1つまたは複数がターゲットインスタンスと一致しない場合、以下で詳述するように、一致数変数は0に設定され(動作724)、プロセス700は図7Cの動作726に進む。
しかし制約条件の主要なロールと副次的なロールの両方および主要なオブジェクト定義と副次的なオブジェクト定義の両方がターゲットインスタンスと一致する場合、主要なオブジェクトインスタンスに対するすべてのネストされた制約条件が評価される(動作728)。ネストされた制約条件は、制約条件定義のいかなる子インスタンスならびにそれらの子のいずれをも表す。ネストされた制約条件は、オブジェクト制約条件、関係制約条件、および/または設定制約条件であってよい。ネストされた制約条件のどれかが以前に評価されている場合、それらの結果は記録されており、それらの結果を動作728で使用することができる。しかし、まだ評価されていないネストされた制約条件のどれであっても、プロセス700を呼び出し、ネストされた制約条件のそれぞれを図7Aの動作704で選択された制約条件として使用することにより制約条件は評価される。
すべてのネストされた制約条件が一度評価されると、すべてのネストされた制約条件が真であると評価するか否かに関してチェックがなされる(動作730)。ネストされた制約条件の1つまたは複数が真と評価しない場合、一致数変数は0に設定される(動作724)。しかしネストされた制約条件のすべてが真であると評価する場合、以下で詳述するように一致数変数は1に設定され(動作732)、プロセス700は図7Cの動作726に進む。
あるいは、動作730はネストされた制約条件のすべてが真と評価するか否かに関するテストなので、ある条件下ではネストされた制約条件のすべてを評価する必要はない。ネストされた制約条件が真でないと評価されるとすぐに、ネストされた制約条件の評価を中止することができ、プロセス700は動作730に進むことができる。例えば、3つのネストされた制約条件があり、評価される第2のネストされた制約条件が偽、すなわち真でないと評価する場合、第3のネストされた制約条件が真であると評価するか否かにかかわらず、動作730での結果は同じ(動作724に進む)になる。
動作720に戻り、制約条件が目標とする副次的なロールと副次的なオブジェクト定義がない場合、制約条件の主要なロールと主要なオブジェクト定義がターゲットインスタンスと一致するか否かに関してチェックがなされる(動作734)。動作734は動作722と類似しているが、これは主要なロールと主要なオブジェクト定義に基づいてのみ実行される。つまり、動作734には副次的なロールと副次的なオブジェクト定義はなく、主要なロールと主要なオブジェクト定義だけが考慮される。
主要なロールまたは主要なオブジェクト定義がターゲットインスタンスと一致しない場合、以下で詳述するように一致数変数は0に設定され(動作736)、プロセス700は図7Cの動作726に進む。しかし制約条件の主要なロールと主要なオブジェクト定義がオブジェクトインスタンスと一致しない場合、プロセス700は動作728に進み、そこで主要オブジェクトインスタンスに対するすべてのネストされた制約条件が評価される。
次に図7Cの動作726に進み、一致数の値が少なくとも最小数であり、最大数よりも大きくないか否かに関してチェックがなされる(動作726)。これらの最小数および最大数は制約条件によって特定され、いかなる値であってもよい。一致数が少なくとも最小数であるが最大数よりは大きくない場合、真の値がこの制約条件に戻される(動作738)。真の戻り値は他のインスタンスを評価しているプロセスにも戻すことができる。例えば、ネストされた制約条件を図7Bの動作728で評価中の場合に、ネストされた制約条件が真であると評価したと動作738が判定したならば、動作730で判定を行うために親ノードを評価するプロセスにその真値を戻すことができる。
真の戻り値は、結果226の一部として図2の開発コンポーネント202に任意選択で戻すこともできる。さらに、満たされた(真であると評価された)名前または制約条件の他の特定情報を任意選択で開発コンポーネント202に戻すことができる。
しかし一致数が最小数でさえないかまたは最大数よりも大きい場合、この制約条件に対してエラーメッセージを生成すべきか否かに関してチェックがなされる(動作740)。制約条件は、制約条件に対してエラーメッセージを戻すべきか否かを示すパラメータまたは設定を有する。このパラメータまたは設定は、例えば制約条件の設計者または開発者によって設定することができる。動作740のチェックは、制約条件に対するこのパラメータまたは設定がエラーメッセージを生成すべきであると示しているか否かをチェックすることによって行うことができる。
制約条件に対してエラーメッセージが生成されるべきである場合、エラーメッセージが生成される(動作742)。エラーメッセージは、ユーザ(例えば、設計者または開発者)がエラーの原因となった制約条件の性質を特定するのに役立つ名前または他の特定情報を任意選択で含むことができる。次いでこの制約条件に対して偽の値が戻される(動作744)。偽の値および/または動作742で生成されたエラーメッセージを、結果226の一部として図2の開発コンポーネント202に戻すことができる。動作738での真の戻り値と同様に、偽の戻り値および/またはエラーメッセージを他のインスタンスを評価しているプロセスにも戻すことができる。
動作738で真の値が戻された後、または動作744で偽の値が戻された後、未選択の追加の制約条件があるか否かをチェックするためにプロセス700は図7Aの動作714に戻る。
図7Aの動作704に戻ると、選択された制約条件が関係制約条件である場合、一致数変数は初期設定される(図7Dの動作746)。一致数変数は、例えば一致数変数の値を0に設定することによって初期設定することができる。制約条件のターゲットオブジェクトインスタンスが参加する1つ以上の関係インスタンスが次いで特定され(動作748)、特定された関係インスタンスのうちの1つが特定される(動作750)。
次いで、関係定義および制約条件の指示が選択された関係インスタンスと一致するか否かに関してチェックがなされる(動作752)。関係定義は関係の型を表し(例えば、ホスティング、委任、通信など)、当該指示はロールまたは関係の指示(例えば、制約条件がホスティング関係のホストを目標としているかゲストを目標としているか)を表す。関係定義および制約条件の指示が関係定義および選択された関係インスタンスの指示と同じ場合、関係定義および制約条件の指示は特定された関係インスタンスと一致する。
関係定義および制約条件の指示が選択された関係インスタンスと一致しない場合、動作748で特定された未選択の追加の関係があるか否かに関してチェックがなされる(動作754)。1つまたは複数のそのような追加の関係がある場合、プロセス700は動作750に戻り、未選択の追加の関係のうちの1つがそこで選択される。しかしそのような追加の特定された関係がない場合、プロセス700は以下で詳述する図7Eの動作756に進む。
動作752に戻ると、関係定義および制約条件の指示が選択された関係インスタンスと一致する場合、制約条件にターゲットオブジェクト定義があるか否かに関してチェックがなされる(動作758)。ターゲットオブジェクト定義は制約条件内のオプションであり、評価中の関係インスタンスの他の側にあるオブジェクトインスタンスを表している。例えば、関係インスタンスがホスティング関係であり、ターゲットオブジェクトインスタンスがホストである場合、ホスティング関係の他の側のオブジェクトインスタンスはゲストインスタンスである。制約条件にターゲットオブジェクト定義がある場合、制約条件のターゲットオブジェクト定義が関係インスタンスの他端のインスタンスと一致するか否かに関してチェックがなされる(動作760)。制約条件のターゲットオブジェクト定義と関係インスタンスの他端のインスタンスが同じ場合、制約条件のターゲットオブジェクト定義は関係インスタンスの他端のインスタンスと一致する。
制約条件内のターゲットオブジェクト定義が関係インスタンスの他端のインスタンスと一致しない場合、未選択の追加の特定された関係があるか否かに関してチェックするためにプロセス700は動作754に進む。
しかし制約条件のターゲットオブジェクト定義が関係インスタンスの他端のインスタンスと一致しない場合、または制約条件にターゲットオブジェクト定義がない場合、関係インスタンスに関してすべてのネストされた制約条件を評価するためにプロセス700は先に進む(図7Eの動作762)。次いでプロセス700は、ネストされた制約条件のすべてが真と評価するか否かに基づいて先に進む(動作764)。動作762および764の評価およびチェックは、図7Bの動作728および730の評価およびチェックと同様である。
ネストされた制約条件のすべてが真と評価したわけではない場合、未選択の追加の特定された関係があるか否かをチェックするためにプロセス700は図7Dの動作754に戻る。しかしネストされた制約条件のすべてが真と評価した場合、一致数変数は増分される(動作766)。一致数変数は、値1だけのように異なる量だけ増分することができる。未選択の追加の特定された関係があるか否かをチェックするためにプロセス700は次いで図7Dの動作754に戻る。
次いで図7Cの動作726と同様に、一致数の値が少なくとも最小数であり最大数より大きくないか否かに関してチェックがなされる(動作756)。一致数の値が少なくとも最小数であり最大数より大きくない場合、図7Cの動作738と同様に真の値が戻される(動作768)。しかし一致数の値が最小数でさえなく最大数よりも大きくない場合、図7Cの動作740と同様にこの制約条件に対してエラーが発生するか否かに関してチェックがなされる(動作770)。エラーが発生することになる場合、図7Cの動作742と同様にエラーメッセージが生成される(動作772)。エラーメッセージが生成される際、または生成されるべきエラーメッセージがない場合、図7Cの動作744と同様に偽の値が戻される(動作774)。
さらに、制約条件チェックプロセスが数群の制約条件に対しても同様に行われることに留意されたい。一群の制約条件を評価するためにプロセス700を使用して各制約条件を別個に評価するが、当該群の結果は個々の制約条件評価の結果に依存する。ある実施形態では、当該群の少なくとも1つの制約条件が真と評価するならば、当該群は真と評価する。
プロセス700で成功の制約条件検証(例えば、真の値)または失敗の制約条件検証(例えば、偽の値)を示す値をエラーメッセージと同様に開発コンポーネント202に戻すことにより、SDM文書204に記述されたシステムの設計時検証の結果が開発コンポーネント202に戻される。これらの表示および/またはエラーメッセージは、開発コンポーネント202を使用する設計者にも提示することができる。これにより、その設計者に、設計中の(そしてSDM文書204に記述されている)システムが検証済みであるか否か、または潜在的に問題があるか否かを通知することができる。エラーメッセージを戻すことにより、設計者に、潜在的な問題が何であるか、またそれらをどのようにして解消するかに関してより詳しく通知することができる。設計されたシステムに問題があることに気付く前にデータセンタでシステムを配置しようと設計者が試みる必要なしに、このフィードバックを設計プロセス中に設計者に提供することができる。
エラー実施例
本節では、図2の評価構成要素208によってエラーおよび警告を報告することのできる方法の一実施態様を説明する。エラーおよび警告は、本節で検討するXML形式例のような様々なフォーマットのどれであってもよい。検証コンポーネント208がCLR(Common Language Runtime(共通言語ランタイム))を通して使用される場合、本節で検討するXMLフォーマットと等価の情報を有するクラスを戻すことができる。
本節は、エラーのクラスに共通の値を示す。ここでは追加の値は除外しない。
型空間の検証中に発生したエラー(構文解析および解決エラー)は、コンパイルされたSDM文書が書かれることを阻止する。しかしインスタンス空間検証中に発生したエラー(フローおよび制約条件エラー)は、コンパイルされたSDM文書が書かれることを阻止しない。
基礎エラーフォーマット
基礎エラーフォーマットは、すべてのエラーに共通のエラー情報を含んでいる。基礎エラーフォーマットに対するXMLフォーマット例を以下に示す。
基礎エラーフォーマットの属性または要素を以下の表に示す。
構文解析エラー
構文解析エラーは、SDM文書のロードを試みる際の障害に起因する。このエラーはラインおよびコラム番号を含む。構文エラーのXMLフォーマット例を以下に示す。
構文解析エラーフォーマットの属性または要素を以下の表に示す。
解決エラー
解決エラーは、ファイルの型をロードし、解決する際の障害に起因する。このクラスのエラーは、インポートを解決する障害と、型、メンバ、および経路を解決する障害を含んでいる。この段階で完全に構文解析されたオブジェクトモデルがあるので、ファイルからのラインおよびコラム番号でなくオブジェクトモデルに関してエラーを発生させる部分に対して参照を行うことができる。解決エラーフォーマットに対するXMLフォーマットの一例を以下に示す。
解決エラーフォーマットの属性または要素を以下の表に示す。
フローエラー
フローが実行され、その入力または出力の1つまたは複数に対してエラーを戻す際にフローエラーが発生する。フローメンバは、現行の入力および出力値の組を含めてその型と、障害が発生したコンテキストのままで、宛先設定メンバと共に特定される。フローエラーフォーマットに対するXMLフォーマット例を以下に示す。
フローエラーフォーマットの属性または要素を以下の表に示す。
フロー入力フォーマットの記述に対するXMLフォーマット例を以下に示す。
フロー入力フォーマットの記述の属性または要素を以下の表に示す。
フロー出力フォーマットの記述に対するXMLフォーマット例を以下に示す。
フロー出力フォーマットの記述の属性または要素を以下の表に示す。
制約条件エラー
設定制約条件が評価されてエラーを戻す場合、またはガードがそのカーディナリティ制約条件に失敗した場合、または1つの制約条件グループの少なくとも1つのメンバが真と評価することに失敗した場合、制約条件エラーが発生する。
設定制約条件が失敗した場合、制約条件メンバ宣言が、制約条件型、制約条件が実行されるコンテキスト、および制約条件に対する当該一組の入力値と共に戻される。制約条件は、追加エラー情報を検索するために使用することのできるカスタムエラーidを戻すこともできる。そのような制約条件エラーフォーマットに対するXMLフォーマット例を以下に示す。
そのような制約条件エラーフォーマットの属性または要素を以下の表に示す。
制約条件入力フォーマットの記述に対するXMLフォーマットを以下に示す。
フロー入力フォーマットの記述の属性または要素を以下の表に示す。
ガードまたはグループが失敗した場合、制約条件メンバがメンバコンテキストおよび評価コンテキストと共に特定される。ネストされた制約条件の評価対象である型または関係を評価コンテキストが特定する場合、評価コンテキストはネストされた制約条件に対するメンバコンテキストとは異なる。このような制約条件エラーフォーマットに対するXMLフォーマット例を以下に示す。
このような制約条件エラーフォーマットの属性または要素を以下の表に示す。
文書経路
これは、SDM文書内の特定のSDM要素への経路である。文書経路フォーマットに対するXMLフォーマット例を以下に示す。
この経路は、一般に以下の形式を有する。
namespace/root_type(/nested_type)*/member(/nested_member)*
関係および制約条件に対するよく知られた設定がメンバとして取り扱われる。
包含経路
包含経路は、ルートから特定メンバへの一連のメンバを特定する。この経路は、メンバをルートシミュレーション構成要素からそれらのメンバなどを介して、エラーを起こしたメンバに達するまでナビゲートする。文書経路フォーマットに対するXMLフォーマット例を以下に示す。
この経路は一般に次の形式を有する。
エラー例
コンパイラは、ユーザに表示されるコンパイルからエラーおよび警告を戻す。SDM文書のコンパイル中に捉えたエラーは、様々なレベルの重大さを有し得る。大部分のエラーは致命的だが、他のエラーの原因となる可能性があるかまたは無視しても安全であるものが一部にはある。レベルのそれぞれに対する重大さに関する詳細な例を以下に示す。
エラー:このカテゴリのエラーは致命的であり、以下のような含みを有する。
・出力sdmファイル(.sdmDocument)はコンパイルから作成することはできない。
・エラーは、コンパイラにコンパイルの現在の段階を完了させ、中止させる。例えば、XML構文解析エラーが発生した場合、文書はロードされない。ロードエラーが発生した場合、さらに多くのロードエラーが発見され得るが、フローおよび制約条件チェックを続けない。
警告1(W1):警告はSDM文書がコンパイルされることを防がない。警告1に対するガイドラインは以下のものを含む。
・コンパイルの将来の段階でエラーを生じる可能性がある。例えば、レファレンスファイルが見つからない場合、そのレファレンスからいかなる型が使用されていたとしてもターゲットSDMファイルのロード中にエラーは発生しない。
・インスタンス空間シミュレーション中のエラー。
警告2(W2):警告2は重大さの最も低いエラーである。例えば、XMLファイルで余分な属性が見つかる。警告2に対するガイドラインを以下に示す。
・警告2は無視しても安全である。
・SDMをクリーンアップするために固定することが推奨される。
警告3(W3):警告3は情報メッセージである。
・警告3は情報を提供する。
・ディフォルトにより、これらの警告は報告されない。
以下の表に、図2の検証コンポーネント208によって報告することのできるエラーの例を列挙する。一般的なコンパイラエラー、文書ロードエラー、定義空間検証エラー、フローエラー、および制約条件エラーの例を示すために別個の表を使用する。エラーそれらのレベルの記述が以下の表に含まれる。エラーのそれぞれに対するフォーマットも示される(例えば、エラー(基礎エラー)フォーマット、構文解析フォーマット、解決フォーマット、フローフォーマット、および制約条件フォーマット)。
SDM実施例
SDMの実施例を以下に示す。このSDM実施例は、「定義」の節(節1)、「アーキテクチャ概要」の節(節2)、および「実施態様詳細」の節(節3)を含む。この実施例では様々な具体的な値および要件が記載されており、すべての実施態様がそれらすべての具体的な値および要件に限定されるわけではないということが理解されよう。
1 定義
2 アーキテクチャ概要
システム定義モデル(SDM)は、本発明者らが「モデル化されたシステム」と称する接続されたシステムの構成およびこのシステムの要素間の相互作用の記述をサポートする。
SDMは、オブジェクト関係モデルに基づいている。本発明者らは、モデル化されたシステムに存在する要素を記述するために「オブジェクト」を使用し、それらの間のリンクを示すために「関係(relationships)」を使用する。SDMは、SDMにとって重要な意味論を取り込むためにオブジェクトと関係をさらに改良する。具体的には、本発明者らは、オブジェクトを「システム(systems)」、「エンドポイント(endpoints)」、および「資源(resources)」に分け、本発明者らは、関係を「通信(communication)」、「包含(containment)」、「ホスティング(hosting)」、「委任(delegation)」、および「レファレンス(reference)」に分割する。
本発明者らは、広範なアプリケーションに対するツールサポートを可能にし、設計時の型チェックに対する基礎を提供するシステム部分の共通の範疇を提供するために「抽象オブジェクト定義」を使用する。本発明者らは、当該一組の抽象定義がシステム設計に包括的基礎を提供するものと推測し、本発明者らはそれらがゆっくりと徐々に変化するものと推測する。
この場合、本発明者らは、実際のアプリケーションまたはデータセンタ設計の部分を表す「具体的定義」を定義するための基礎として抽象定義を使用する。本発明者らは、抽象定義を取り、具体的な型のメンバと設定値とを定義する実施態様をそのプロパティに提供する。次いで、本発明者らは、これら定義の集合からシステムを構築する。
「制約条件」は、インスタンスが参加することのできる許可された一組の関係に対して制約をモデル化するために使用される。本発明者らは、関係に関与するオブジェクトの構成に依存するきめの細かい要件を取り込むために制約条件を使用する。例えば、通信プロトコルの各端部の参加者が整合性のあるセキュリティ設定を使用していることを検証するために制約を使用することができる。
ターゲットシステムに対する変更を有効にするために、「変更要求」と呼ばれる要求された変更を記述する宣言を使用することができる。SDMは、「SDM実行モデル」の一部として変更要求を拡張、検証、および実行するために使用されるプロセスを定義する。
「インスタンス空間」は、管理されたアプリケーションの所望の状態と現在の状態の両方を取り込む。本発明者らは、インスタンス空間の変更を追跡することができ、変更を開始した変更要求にそれらを関連付ける。
カスタマイズされた動作をランタイムに提供し、かつランタイムとモデル化されたシステムの間の相互作用をサポートするために「マネージャ」が使用される。
2.1 オブジェクト
モデル化されたシステムの論理的態様と物理的態様の両方を表すために、オブジェクトが使用される。例えば、これらはIIS内のファイル、ディレクトリ、および構成を表すために使用することができる。これらは、アプリケーションまたは分散型システム境界を表すためにも使用することができる。
本発明者らは、オブジェクトを3つのカテゴリに分ける。各カテゴリは、属性または特定モデルのインスタンス全体に強制された継承構造によってではなく、SDMモデル自体の一部として公開され、理解されるべきであると本発明者らが考えるモデル化されたシステムの態様を表す。
2.1.1 資源
資源は、システムモデルを作成するために組み合わせることができる動作の基本的単位を表す。システムモデルに構造を追加するために他の資源を1つにグループ化するよう資源を使用することができる。各資源は、それのモデル化された動作を実行するために要求することのできる他の資源に対する従属関係を表すことができる。資源のインスタンスを作成するために、その資源に対してホスト環境が特定されなければならない。
資源の例には、オペレーティングシステムの一部としてファイル、ディレクトリ、およびレジストリキーおよび値、IISおよび表の一部としてウェブディレクトリおよびウェブファイル、およびデータベースの一部として行および記憶された手順が含まれる。
2.1.2 システム
システムは、洗練されたタスクを実行する資源の集合を表すため、または洗練されたタスクを実行するために相互作用するシステムの集合を表すために使用される。システム境界内の資源は、その境界外の資源に対する従属関係を表すことはできない。同時に、同じシステム境界内の他の資源と通信するためにそれらが使用する機構を文書化するために本発明者らは資源を要求しない。
これは、システム間の相互作用は、通信関係を使用して明示的にモデル化されなければならないということを意味している。これはまた、一般にシステムは配置の最小単位であるということをも意味している。資源は他の資源との文書化されていない相互作用を有する場合があるので、本発明者らは、それらが独立して配置された場合にそれらが機能することは保証できない。
システムの例には、オペレーティングシステム、IISでホストされるウェブアプリケーション、およびSQLによってホストされるデータベースが含まれる。
2.1.3 エンドポイント
システムが他のシステムとの通信をサポートするために公開するインターフェースを定義するためにエンドポイントが使用される。本発明者らは資源がシステム境界を横断する従属関係を有することを許可しないので、システムが正確に動作できるようにするために必要となる相互作用をモデル化するためにエンドポイントを使用する必要がある。
エンドポイントの例には、Http、Tcpip、およびSoapエンドポイントが含まれる。
2.2 関係
本発明者らは、オブジェクト間に発生する相互作用の態様を取り込むために関係を使用する。すべての関係はバイナリであり有向である。オブジェクト間の相互作用を取り込むのと同様に、関係は、関係に参加するオブジェクトに制約条件を課すことができ、また参加者間に構成情報をフローすることができる。
ここでもう一度、本発明者らは、それら関係に特定の意味論を付加するためにSDMモデルによって理解される一組の関係を特定する。これにより本発明者らはモデルシステムのランタイム動作に関して判断することができる。
具体的には、本発明者らが特定のオブジェクトインスタンスに関して記述する必要のある態様は以下の通りである。
a)その存続期間
b)それと相互作用できる人物
c)システムの構造に表示される場所
d)それが通信する人物
e)その作業を行うために依存する人物
f)それが実行されるべき環境
g)それが正確に動作しているか否か、また使用可能か否か
本発明者らは、アプリケーションの許容される構造を定義するためにも関係を使用する。これらの態様には以下のものが含まれる。
a)他のオブジェクトが含むことのできるのはどのようなオブジェクトか
b)1つに接続できるのはどのエンドポイントか
c)特定のオブジェクトをホストすることができるのはどのような環境か
以下に示す関係のそれぞれは、上記態様の1つまたは複数の一部を取り込む。
2.2.1 包含
SDMモデルの包含構造を定義するために包含関係が使用される。あるオブジェクトが別のオブジェクトを含むことができることを示すために包含関係の存在が使用される。設計者または立案者がシステム、資源、およびエンドポイントを関連付けることのできる方法について設計者および立案者に選択肢を公開する際に、この情報は設計環境をガイドするために設計時に使用される。
SDMモデルの構造を限定するために包含関係が定義される。例えば、立案者は、ウェブディレクトリ、ファイルシステムディレクトリ、およびファイルを含むことのできるウェブアプリケーションモデルを設計する場合がある。別の立案者は、ウェブサイトを含むことができるようにモデルを拡張する場合がある。これらモデルの基準構造を理解することによって、オペレータおよびツールビルダは、モデルのどの環境インスタンスが要求することができるか、またそれが配置されたシステム上に特定のモデルがどのような効果をもたらすことができるかに関して判断することができる。例えば、上記で定義した第1のモデルで、オペレータはアプリケーションを配置することができるようにするためにウェブサイトを供給する。
包含関係は、オブジェクトの存続期間、オブジェクトの所有者、およびオブジェクトがモデル化されたシステムの構造のどこに表示されるかを定義する。オブジェクトに対して単一の親コンテナがある場合、親の存続期間は含まれているオブジェクトの存続期間に境界を設ける。親は、含まれているオブジェクトを所有すると表現することもできる。これは、親がオブジェクトの可視性を制御しており、オブジェクトまたはそのオブジェクトの一部をその親に公開するか否かを判定することができることを意味している。最終的に、親はオブジェクトにコンテキスト情報を提供する。このコンテキスト情報は、設計者がそれらアプリケーションの構造を他の設計者または当該アプリケーションのユーザに伝達するのに役立つよう使用することができる。例えば、実行中アプリケーションのエラーの場所を特定する際、包含チェーンは、アプリケーションのどの部分に障害が生じたかに関する詳細を示す豊かなコンテキスト情報を提供することができる。
包含関係の用途には、ウェブアプリケーションの仮想ディレクトリと、ウェブアプリケーションによって配置されたファイルおよびディレクトリの構造とを表すことが含まれる。包含は、ウェブアプリケーションと、それを含む接続されたシステムモデルとの間の関係を記述するためにも使用される。
2.2.2 ホスティング
ホスティング関係は、モデル化中の環境の包含構造をモデル化するために使用される。これらの関係は、環境に対する機能上の制約を取り込む。例えば、複数のファイルが1つのディレクトリに含まれることを必要とするか、または複数のウェブディレクトリが1つのウェブサイトに含まれることを必要とする制約である。
ホスティング関係は、オブジェクトの存続期間とそれが実行される環境の両方を定義する。存在するために、オブジェクトは少なくとも1つのホストを有するべきである。これは、そのホストの存続期間がオブジェクトの存続期間に限界をつけており、仮にそのホストがオフラインとマーク付けされているならば、それもまたオフラインとマーク付けされるべきであるということを意味している。
ホスティング関係は、そのホストによって定義された環境内でオブジェクトのインスタンスを作成し、維持することを担当する。この属性分配は、ゲストまたはホストによってではなく、関係によってゲストのインスタンスを作成することの責任をホストに帰する。ホスティング関係の範囲を提供することによって、複数のホスト環境によってゲストをサポートすることができる。
ホスティング関係の存在は、ホストオブジェクトにゲストオブジェクトを置くことが可能であるということを示している。別のシステムでホストされるべき多くの資源を含んでいるシステムの場合、そのゲストシステムのすべての資源はホストシステムの少なくとも1つの資源に対するホスティング関係を有するべきである。
2.2.3 通信
通信関係は、接続されたシステムのサブシステム間で行われる通信をモデル化するために使用される。それらはエンドポイントオブジェクト間で表現されるので、それらはエンドポイントを公開するシステム間でしか確立することはできない。システムがそのシステムと同様にエンドポイントを公開するネストされたシステムを含んでいる場合、それらエンドポイントは外部システム上のプロキシエンドポイントを介して公開されるが、当該外部システム上のプロキシエンドポイントは内部システムのエンドポイントに対して委任されている。
通信関係が一組のエンドポイント間に存在しない場合、それらエンドポイント間で接続を確立することはできない。
システムがオフラインとマーク付けされている場合、そのシステムが使用不可能であることを反映するようそのシステムのすべてのクライアントが更新される。
2.2.4 レファレンス
レファレンス関係は、正確な動作を達成するために要求されるが、従属オブジェクトの実行環境の一部とは見なされない資源またはシステム間の従属関係を取り込むために使用される。
例えば、ウェブディレクトリは、ウェブコンテンツをウェブサービスの消費者に公開するためにローカルディレクトリまたは遠隔共有資源へのレファレンスを必要とする。これは、ウェブディレクトリとローカルディレクトリまたは遠隔共有資源との間の従属関係として表現される。
2.2.5 委任
委任関係は、プロキシとの相互作用をプロキシによって公開された動作を実施するオブジェクトインスタンスに転送するために使用される。一般に使用される委任の例は、親システムのエンドポイントから含まれているシステムのエンドポイントに通信関係を転送している。
2.3 定義
オブジェクトおよび関係定義は、その構成のインスタンスを作成するためにインスタンス生成することができる再利用可能な構成を作成するために使用される。この場合、これらインスタンスは定義によって特定された共通特性を共有する。
不完全な抽象定義を直接インスタンス生成することはできない。抽象定義を完全にするためには、欠けている要素を追加するよう別の定義がこの抽象定義を拡張する。
実際のシステムのモデルを構築する際に本発明者らが使用することのできる構築ブロックを作成するために、本発明者らは抽象定義を使用する。抽象定義間の関係は、抽象定義を拡張する定義の許容可能な構造を定義する。これによって、表面のユーザが実行することのできるアクションを定義するために設計表面が抽象定義を使用することが可能となる。例えば、抽象ウェブアプリケーションが参加する包含関係は、抽象定義を拡張するウェブアプリケーションの構造をガイドする。
基本的に、抽象オブジェクト定義と関係定義の組合せは、ターゲットシステムをモデル化するためのスキーマを定義する。具体的なオブジェクト定義のロールは、1つまたは複数の抽象定義に基づいて再利用可能な構成を作成するために抽象定義空間の部分集合を使用することである。単なる類似として、抽象定義空間をデータベースに対するスキーマと比較することができ、その場合、具体的なオブジェクト定義はデータベースの一組の行に対して再利用可能なテンプレートを表す。具体的なオブジェクトのインスタンスが作成された場合、行はデータベースでしか作成されない。設計時検証を実行するために、本発明者らは、データベースの行をスキーマの包含(例えば外部キーなど)に対して検証するのと同様の方法で、具体的なオブジェクト定義を抽象定義空間に対して検証することができる。
単純な値の要素を作成するために設定定義が使用される。次いでこれら値の要素は構成情報を記憶するために使用することができる。
2.4 メンバ
定義は、他の定義を参照するメンバを含むことができる。メンバは、ある定義がその特定のアプリケーションに対してカスタマイズされた方法で別の定義を再利用することを可能にする。
定義に関連付けられた構成情報を特定するために設定メンバが使用される。設定メンバは設定定義に基づいている。
特定のオブジェクト定義のインスタンスを作成するためにオブジェクトメンバが使用される。オブジェクトに値を提供するために設定フローを使用することができる。オブジェクトメンバを宣言する際、ユーザは、外部システムが作成されるのと同時にオブジェクトメンバが作成されるか否か(値の意味論)、または後で行われる明白な新しい動作によって作成されるか否か(レファレンス意味論)を決めることができる。
関係メンバは、オブジェクトメンバが作成された際にそれらオブジェクトメンバが参加する関係を定義する。オブジェクトメンバがその親に「含まれている」場合、包含関係メンバはメンバと含んでいる定義との間で宣言されることになる。オブジェクトメンバが「委任されている」場合、委任関係メンバはオブジェクトメンバとソースオブジェクトメンバとの間で定義される。通信しているエンドポイント間で通信関係メンバを宣言することができる。従属関係メンバ(レファレンスおよびホスティング)を従属およびソースオブジェクトメンバの間で宣言することができる。
制約メンバは、特定のオブジェクトが参加を意図する当該一組の関係または特定の関係に参加することのできる当該一組のオブジェクトを狭めるために使用される。オブジェクトまたは関係の設定を目標とすることができるか、またはオブジェクトまたは関係に関連付けられた相互作用を制約することができるオブジェクトまたは関係に対する制約条件をこれらは特定する。
メンバ間で構成のフローを定義するためにフローメンバが使用される。これらは、メンバに対する設定からの入力値を収集し、その情報に対して何らかの処理を実行し、次いでその結果をメンバに対する設定に分配する。
2.5 インスタンス
インスタンス空間は、モデル化されたシステムの現在の状態を反映する。作成されたインスタンスとこれらインスタンス間の関係との完全な記録を維持することもできる。各バージョンが変更要求にリンクされている場合、各インスタンスは関連付けられたバージョンヒストリを有する。
新しいインスタンスを作成する処理は「変更要求」によって開始される。変更要求は、既存のインスタンスの特定メンバに関連付けられた型および関係に対する一組の作成、更新、および削除要求を定義し、ルートは特別な場合である。
変更要求はランタイムによって拡張され、すべての制約条件に対して検証され、次いで構築される。拡張プロセスは、含んでいるオブジェクトの構築要求の一部として暗黙的に構築されるオブジェクトおよび関係インスタンスを特定し、次いですべての関係を通して設定フローが評価される。検証ステップは、すべての要求された関係が存在すること、その関係がすべての制約条件を満たすことをチェックする。最後に、構築プロセスは、適切なアクションを実行するために、各インスタンスの配置、更新、または除去の適切な順番付けを決定し、次いで正確な順番で各インスタンスをインスタンスマネージャに渡す。
2.6 オブジェクトモデル
以下に示すUML図は、SDMモデル内のオブジェクト間の幅広い相互作用を取り込んでいる。分かりやすくするために、導出された型間に実際の相互作用が存在し、したがってこれらがさらに特化される場合、これら相互作用の一部は基準型間に定義されている。
SDM文書は、その文書を説明する情報、文書内の定義に対するマネージャ、他の文書を参照するインポートステートメント、および文書によって記述されたオブジェクトおよび関係に関する一組の定義を含んでいる。多くのSDM要素は、設計表面内で当該要素の表示および操作に特有の情報によって設計表面をSDM要素の属性とすることを可能とする設計データ含むこともできる。
図8はSDM文書の一例を示している。
すべてのSDM定義は、図9に示すように共通の基礎定義に由来している。定義は、説明、一組のメンバ、一組の設定値、および設計データを含むことができる。本発明者らは、定義をオブジェクト、関係、制約条件、フロー、および設定定義に特化する。次いでオブジェクト定義は、システム、資源、およびエンドポイント定義にさらに特化される。関係定義は、ホスティング、通信、委任、レファレンス、および包含定義にさらに特化される。
名前を図10に示すように特定のインスタンスまたはインスタンスのアレイに関連付けるためにメンバが使用される。すべてのメンバは定義を参照する。各メンバは、一組の設定値、説明、および設計データを含むことができる。次いでメンバは、それらが参照する定義の種類に基づいて特化される。フローおよび制約条件メンバは、含んでいる定義内の設定メンバから設定値を入手する入力を定義する能力を追加する。フローメンバは、処理されたフロー値が含んでいる定義内の設定メンバに転送されることを可能にする出力も追加する。
設定メンバの一例を図11に示す。設定メンバは、複雑な設定定義または簡素な設定定義を表現することができる設定定義を参照する。複雑な設定定義は、ネストされた設定メンバを含むことができる。簡素な設定定義は、単一値フィールドを定義する。設定メンバ間での設定値の転送を定義するために入力および出力オブジェクトが使用される。
制約条件定義の一例を図12に示す。設定値とSDMモデルの構造とに対して制約を課すために制約条件が使用される。制約条件定義は特定のオブジェクトまたは関係定義を目標とする。制約条件定義は、オブジェクトが参加する関係または関係に参加しているオブジェクトに構造上の制約条件を課すことができる。これらの構造定義をオブジェクトまたは関係定義に直接追加することもできる。
図13に示すようにSDM要素の人間によって可読の説明を提供するために説明オブジェクトが使用される。これら要素は場所特定が可能であるべきだが、これはマネージャの責任である。設計データ要素は、SDM文書を編集する設計表面によって定義される構造化されたデータを含んでいる。
2.7 階層化
SDMモデルの目標は、アプリケーションの開発者とソフトウェアインフラストラクチャの設計者とデータセンタの立案者との間の関係の分離を可能にすることである。これらグループのそれぞれは、特定のサービスに焦点を合わせており、異なる一組の従属関係を有している。
例えば、設計者は、主としてSQL、IIS、およびCLRのようなそれらが従属するホスト間の構成および接続性に配慮する。ホスト構成の設計者はネットワークトポロジとOS構成に配慮し、一方、ネットワークトポロジ、OS構成、および記憶のマッピングを開発中の立案者はデータセンタに存在するハードウェアに関して知る必要がある。
関係のこのような分離をサポートするために、SDMは階層化の概念を公開する。階層化は、ホスティング関係を使用することによって可能となる。オペレーティングシステムとsqlのようなホストとsqlが提供するサービス、例えばデータベースとの間の関係のホスティングを定義することによって、本発明者らはアプリケーション開発者がデータベースを含んでいるアプリケーションを定義し、立案者がそのsqlホストを含んでいるシステムを定義することを可能にする。ゲストシステムとホストシステムとの間のホスティング関係を接続することによって本発明者らはこれらの分離されたシステムを層結合する。
ホスティング関係が存在する時は何時でも階層境界が発生し得る。階層境界をどこに置くかの選択を簡素化するために、本発明者らはSDMモデルの一部として4つの基礎階層を定義する。次いで本発明者らはシステムをそれらの階層の1つに関連付ける。4つの階層を以下に示す。
アプリケーション層
・アプリケーション層は、制約されたコンテキストでアプリケーションの構築をサポートする。コンテキストはホスト層で特定されたホストの構成によって定義される。
・アプリケーション層のシステム定義の例としては、ウェブサービス、データベース、およびbiztalkスケジュールが含まれる。
ホスト層
・ソフトウェア構成要素からデータセンタを構築する。構成要素間の接続を構成する。これら構成要素の一部はアプリケーション層に対してホストとして働く。
・この層のシステム定義の例は、IIS、SQL、AD、EXCHANGE、DNS、およびBiztalkである。
ネットワーク/OS/記憶層
・データセンタネットワークおよびプラットフォームを構築する。ネットワークセキュリティモデルおよびオペレーティングシステムプラットフォーム構成を構成する。ストレージをオペレーティングシステム構成に追加する。
・この層のシステム定義の例は、VLAN、Windows(登録商標)、Filter、Storageである。
ハードウェア層
ハードウェア層は、データセンタに存在するマシンの種類とそれらマシン間に存在する物理接続とを特定する。
図14は、層4のウェブアプリケーションを層3のウェブサーバホストにマッピングする一例を示す。各層の外部ボックスはシステムを表し、境界上のボックスはエンドポイントを表し、内部のボックスは資源を表す。本発明者らは、それら要素のそれぞれをホスティング関係によって下の層のホストにマッピングする。
3 実施態様の詳細
3.1 名前付け
SDMには、本発明者らがオブジェクトを特定するために強力な名前付けシステムを必要とするいくつかの場所がある。以下に示す名前付けシステムは、文書の定義のユーザが、開発者が元々発行した文書の定義とそれらが同じであることを確証できる方法で、SDM文書の作成者が文書に署名することを可能にする。
次に示すヘッダは、SDM文書に対する識別子の一例である。
別のネーム空間の型を参照するために、そのネーム空間をインポートする。
次に、別名を使用して、そのネーム空間内の定義を参照することができる。
FileSystem:File
3.1.1 識別
SDM名は、それらが定義されているネーム空間によってスコープとされる。ネーム空間は名前、バージョン、言語、および公開鍵トークンによって特定され、単一ファイル内に含まれる。
識別の基礎形式は名前、バージョン、カルチャ、プラットフォーム、および公開鍵トークンを含む。
ネーム空間識別と呼ばれる新しい強力な識別を作成するために、基礎識別を署名および公開鍵と共に使用することができる。SDM文書を特定するためにこの識別が使用される。識別を作成するために文書は秘密鍵を使用して署名されるが、これによって文書のユーザは公開鍵を使用してその内容を検証することができる。
公開鍵トークンは、公開/秘密鍵対の公開部分を特定する16文字の16進法ストリングである。これは公開鍵ではなく、単なる公開鍵の64ビットハッシュである。
文書の言語は、言語を定義する2つの小文字と国または領域を定義する2つまたは3つの大文字とからなるカルチャ識別子を使用して指定される。
3.1.2 バージョン
ファイルバージョンは、0<=N<65535として、形式N.N.N.N.の4つの部分番号によって定義される。慣例により、この番号はMajor.Minor.Build.Revisionを意味する。バージョン番号は、文書に含まれるすべての定義のバージョンを特定する。これは、文書内のすべての定義が共に更新される際に文書がバージョニングの単位となることを意味している。
3.1.3 単純名
単純名は英数字から構成され、句読法が限定されている。この名前は非数字文字から始まる。
本発明者らは、識別子に関してはC#定義に準拠することを予定しており、その適切なセクションが以下に示す表に挿入されている。本発明者らはSDMモデルでは「@」という接頭辞を付けた名前をサポートしないことに留意されたい。
3.1.4 予約名
SDM定義のメンバに対する名前を作成する際にユーザが使用することを本発明者らが防止する予約名のリストを以下に示す。あるコンテキスト内である名前が予約される。コンパイラは、それらの名前のユーザを検出し、エラーをそのユーザに戻す。
3.1.5 他のネーム空間へのレファレンス
本発明者らは、他のネーム空間を現在のネーム空間にインポートし、次いでそのネーム空間に別名を関連付けることによって、ネーム空間が他のネーム空間を参照することを可能にする。インポートされたネーム空間は名前、バージョン、および公開鍵トークンによって参照される。
3.1.6 修飾名
修飾名は、現在のネーム空間または別名の付いたネーム空間で定義された定義またはマネージャを意味する名前である。名前が別名または「ドット分離記号」を含まない場合、その名前は修飾されておらず、スコープ規則に基づいて解決されるべきである。修飾されていない経路は、それらが評価されるコンテキストに基づいて異なる定義に解決することができる。これは、ネストされた定義がさらに広いスコープに定義を隠すことができるからである。節3.1.7を参照されたい。
「ドット分離記号」を含むいかなる経路でも完全に修飾されるべきであり、文書のルートから解決されることになる。これは、ユーザが、複数の型の名前を含んでいるが宣言コンテキストからしか解決できない部分的に修飾された名前を作成することができないということである。
別名はインポートステートメントで定義される。
3.1.7 名前スコープ
定義の名前は、それらが定義されているコンテキストによってスコープとされる。最も広いスコープは当該文書である。定義がネストされている場合、その名前はその定義によってスコープとされる。これは、それが名前を親スコープに隠すことができるということを意味している。これはまた、それが定義されているスコープ外からの定義に対するレファレンスがその親スコープの名前によって修飾されるべきであるということをも意味している。完全に修飾された名前は、文書のルートからネストされた定義までのすべての名前を含む。
3.1.8 メンバ経路
メンバ経路は、横断される定義のメンバに対応する一連の名前である。経路は、経路が宣言されるコンテキストで定義されるメンバ名から始められるべきである。
いくつかのメンバ名が定義に自動的に追加される。本発明者らはこれらを周知の名前と呼ぶ。周知の名前の例としては、定義またはレファレンス宣言の「this」、ホスティング関係宣言の「Host」および「Guest」、または制約条件宣言内で定義された「Target」が含まれる。設定ターゲットは、経路によって特定される設定のソース値または宛先設定として使用されることになる、関連付けられたフロー定義に対する設定も特定する。
メンバ名はドットで分離される。
3.1.9 インスタンス経路
インスタンス空間内の経路は、xpathの要素名がメンバ名に対応しており、xpathの属性が設定に対応しているxpathに基づいている。
3.1.10 署名
文書の内容を検証し、その文書に強力な名前を関連付けるための機構を提供するためにコンパイルされたSMD文書はキーを使用して署名される。署名機構は、文書に署名するためにDSIG標準(http://www.w3.org/2000/09/xmldsig#)を使用する。
次のような署名ノードが署名された文書に埋め込まれる。
このノードは、文書の他の内容よりも前に発生すべき文書内のルートノードである。本発明者らは、この要素を「any」というタグを使用して宣言するが、本発明者らは、この位置では「Signature」ノードしか認識し、処理しない。
3.1.11 ネーム空間の名前の定義、参照、および解決
本節では、本発明者らは、本発明者らがネーム空間レファレンスを特定のネーム空間と照合するために使用することのできるプロセスを説明する。節3.3.1で定義したように、ネーム空間の識別は次に示す5つの属性から構成される。
・単純名
・公開鍵トークン
・バージョン
・言語
・プラットフォーム
これらの属性は、要求されたネーム空間(ネーム空間レファレンス)を特定するためにネーム空間の消費者によって、またネーム空間に周知の識別(ネーム空間定義)を提供するためにネーム空間の開発者によって使用される。それら属性のそれぞれの解釈は、それらがネーム空間レファレンスの一部であるかネーム空間定義の一部であるかによって異なる場合がある。
3.1.11.1 ネーム空間定義
開発者が新しいネーム空間を作成し、発行することを希望する場合、その開発者は、
・ネーム空間に単純名を提供し、
・ネーム空間にバージョンを提供する
開発者は任意選択で、
・暗合化キーでネーム空間に署名し、
・ネーム空間に対して特有カルチャ(ディフォルトではニュートラルなカルチャ)を特定し、
・ネーム空間に対して特有プラットフォーム(ディフォルトではニュートラルなプラットフォーム)を特定する
ネーム空間が署名されていない場合、公開鍵トークンはなく、ネーム空間は弱い名前を有することになる。ネーム空間に遅延署名することができる。これによって、開発者はコンパイルプロセスから署名プロセスを分離することができる。コンパイル済みではあるが署名されていない遅延署名されたネーム空間は、コンパイル中に参照することはできるが、ランタイムで使用することはできない。
3.1.11.2 ネーム空間レファレンス
消費者がSDMファイルのネーム空間を参照(インポート)する場合、消費者は、
・参照されるネーム空間の名前を提供する。
消費者は、任意選択で次のような追加情報を提供する。
・参照されるネーム空間の公開鍵トークン
・参照されるネーム空間の最低バージョン
・参照されるネーム空間のカルチャまたはワイルドカード(*)
・参照されるネーム空間のプラットフォームまたはワイルドカード(*)
提供されていないすべての属性は、ディフォルトではその属性に対するいかなる値とも一致することになるワイルドカードである。
3.1.11.3 定義に対するレファレンスの照合
ネーム空間レファレンスをネーム空間定義と照合するために以下に示すアルゴリズムが使用される。このアルゴリズムは、ネーム空間をコンパイルする際と、コンパイルされたネーム空間の間でレファレンスを解決する際のどちらでも使用される。
コンパイルとコンパイル後のシナリオの間には1つの僅かな違いしかない。それは、コンパイル時にネーム空間レファレンスのバージョンフィールドが無視されるが、ランタイムにそれは存在するということである。コンパイル中にレファレンスが解決されたネーム空間から追加情報を追加するために、コンパイルプロセスはネーム空間レファレンスを更新する。これはネーム空間からのバージョンを常に追加する。公開鍵トークンが提供されておらず、解決されたネーム空間にそれが存在する場合、それはネーム空間レファレンスに追加される。
論理上、解決アルゴリズムは以下のように機能する。
1.レファレンス内の名前と一致する名前を有するすべてのネーム空間を見つける。
2.レファレンスが公開鍵トークンを提供する場合、提供された公開鍵トークンとも一致するネーム空間だけを選択する。
3.特有の言語がレファレンスによって選択されている場合、その言語と一致しないすべてのネーム空間を除去する。その言語属性がワイルドカードに設定されているかまたは提供されていない場合、すべてのネーム空間を維持する。
4.特有のプラットフォームが提供されている場合、そのプラットフォームと一致しないすべてのネーム空間を除去する。プラットフォームの属性がワイルドカードに設定されているかまたは提供されていない場合、すべてのネーム空間を維持する。
5.次いで、当該一組の実現可能なネーム空間から特定のネーム空間を選択するためにバージョニングポリシーを使用する。
次節以降では、これらのステップをさらに詳細に定義する。
3.1.11.3.1 ネーム空間の名前の照合
名前の一致は正確なストリングの一致である。名前は大文字小文字を区別する。
3.1.11.3.2 公開鍵トークンの照合
トークンは正確な一致である。
3.1.11.3.3 言語の照合
言語の照合には次に示す3つのシナリオがある。
1.レファレンス=*、定義=特定言語
2.レファレンス=特定言語、定義=*
3.レファレンス=特定言語、定義=特定言語
第1と第2の場合に関して、定義はレファレンスに対する一致である。第3の場合、言語が正確な一致ならば、定義はレファレンスに対する一致にすぎない。
3.1.11.3.4 プラットフォームの照合
プラットフォームの照合には次に示す3つのシナリオがある。
1.レファレンス=*、定義=特定プラットフォーム
2.レファレンス=特定プラットフォーム、定義=*
3.レファレンス=特定プラットフォーム、定義=特定プラットフォーム
第1と第2の場合に関して、定義はレファレンスに対する一致である。第3の場合、プラットフォームが正確な一致ならば、定義はレファレンスに対する一致にすぎない。
3.1.11.3.5 バージョンの照合
バージョンの一致は、コンパイラまたはランタイムが使用中のバージョニングポリシーに依存する。
3.2設定
すべての定義は、XMLスキーマ内で設定宣言と呼ばれる設定メンバを公開することができる。定義に関連付けられた構成値を記述するためにこれらのメンバが使用される。SettingValueステートメントを使用して値が提供される。これらは次のものによって使用することができる。
a)設定に対するディフォルト値を定義するために設定メンバを宣言する定義。
b)基礎定義に対するディフォルト値または固定値を提供するために別の定義を拡張する定義によって、
c)定義を参照するメンバによって、定義を参照するメンバで中止するメンバ経路を介して、
d)関係に沿ったフローを介して、
設定を定義するには、まずxsdを使用して設定の定義を定義する必要がある。
次いで、定義を使用し、設定の動作を定義するために一組の属性を含む設定を宣言することができる。
一度設定宣言を有すると、その設定用の値を提供することができる。
3.2.1 設定定義
本発明者らは、設定メンバによって使用される設定定義を定義するためにXSDスキーマを使用する。本発明者らはスキーマからの単純型と複合型の使用しかサポートしない。ただし、これらの型の定義をサポートするために他のスキーマ要素が存在する場合もある。
設定定義の節は、ネーム空間宣言とネーム空間インポートを含めて完全なxmlスキーマを含むべきである。本発明者らは、xsdスキーマのネーム空間を除いてxsdスキーマへのインポートがSDMファイルへのインポートと一致することをチェックする。これは、すべての参照された型が別のSDMファイルで定義されるべきであり、スキーマは任意のxsdファイルで定義された型を参照することができないということを意味している。
スキーマのターゲットネーム空間はSDM文書の名前と一致する必要がある。ネーム空間の名前が一意であることを保証するために本発明者らが文書に署名する際に本発明者らはネーム空間の名前に文書に対する公開鍵を追加する。したがってコンパイラは、ターゲットのNamespace=“System”をターゲットのNamespace=“System/AAAABBBBCCCCDDDD”に変更する。
設定定義スキーマが別の文書からのネーム空間を参照する場合、それらは完全なネーム空間の名前xmlns:system=“System/AAAABBBBCCCCDDDD”を使用する。
設定は次に示す3つの別個のネーム空間から解決可能である。
a)SDMネーム空間−本発明者らがシステム内の設定型、資源、エンドポイント、関係、制約条件、またはフロー型に言及する場合。
b)clrネーム空間−本発明者らがclr内の強力な型のクラスを使用した設定に言及し、かつ設定型が他の設定型上に構築されている場合。
c)XSDネーム空間−設定型が他の設定型を使用して構築される場合。
これが機能するために、本発明者らが設定を宣言する方法に本発明者らはいくつかの制約を課す。
a)すべての設定は、clr、SDM、およびxsdネーム空間のそれぞれの中の同じグループ化でなければならない。すなわち、2つの設定が1つのネーム空間になる場合、これらをすべての3つのネーム空間に統合しなければならない。
b)xsdスキーマ定義内のインポートされたネーム空間は、SDMファイル内のインポートされたネーム空間および関連付けられたヘルパアセンブリ内のインポートされたネーム空間と一致しなければならない。
c)xsdネーム空間を例外として、xsdスキーマ内のすべてのインポートされたネーム空間をSDMファイル内で定義しなければならない。
インポートされたSDM文書からのXSD型にはQNameを使用してアクセス可能である。
次の例は、上記のレジストリ例で定義された型を使用する。文書は、設定定義を含むレジストリ文書をインポートする。
次いで設定定義スキーマはSystem.Operatingsystem.Registryネーム空間も参照する。
3.2.2 組み込み単純データ型
SDMは、XSDおよびC#ネーム空間の共通部分である一組の限定された組み込みデータ型をサポートする。これらの型はSDMランタイムによって本質的にサポートされており、次に示す表に定義される。これらの型に加えて、ユーザはxsdとcls型の間に当該ユーザ独自のマッピングを自由に構築し、使用する。
これらの型をc#およびxsd型空間のそれらの型の整合する導出にフローすることができる。例えば、ストリングに対する値は、ストリングに対する制約を定義したxsd型にフローすることができ、いかなる値でもtype=“any”を受理する設定にフローすることができる。
3.2.2.1 XSD組み込み型
図15は、組み込みデータ型階層の一例を示している。図15で、すべての複合型は拡張または制約によって導出される。NMTOKENS、IDREFS、およびENTITIESの型はリストによって導出される。図15に示す、すべての他の型は制約によって導出される。
3.2.2.2 C#データ型
3.2.2.3 サポートされる変換
xsd型とcls型の間に存在する変換である。
3.2.3 設定メンバ
命名された設定を作成するために設定宣言のセクションは前セクションからの設定定義を使用する。xsdスキーマ内の設定定義は、設定を含む文書に対する別名(設定定義が現在の文書にない場合は要求されない)と、次いでその設定の名前とを含む修飾された名前を使用して参照される。設定定義を参照する際、本発明者らはxsdネーム空間を使用しない。
各設定メンバに対するさらなる情報を提供するために属性が使用される。
3.2.4 リストのサポート
複数値設定の操作をサポートするために、本発明者らは設定値の単純なリストをサポートする。リストは、設定宣言と同じ定義の一連の値である。リストは、それらを置き換えられることができるかまたはそれらに添付することができる他のリストにフローすることができる。値をリストに添付することは設定フローを使用してより柔軟に行うことができ、また本発明者らはいかなる形式の順番も保証しないので、値をリストに添付する場合、本発明者らは複製検出をサポートしない。
リスト宣言は、真に設定された属性リストを含む。
次いで設定ValueListを使用して値が提供される。リストを提供する場合、ユーザは以前の値を置き換えるかまたはそれに添付するかを指定することができる。
SDMは値のリストの単純な操作をサポートする。フローメンバからの経路が設置宣言を目標とする場合、その結果得られた動作は経路の一方の定義に依存する。
3.2.5 設定属性
特定設定の動作を記述するためにランタイムによって設定属性が使用される。
3.2.6 設定値
設定が単一値として宣言されているかリストとして宣言されているかによって、設定に対する値を設定値要素または設定値リスト要素を使用して提供することができる。
3.2.6.1 設定値
特定の設定宣言に対する値を提供するために設定値ステートメントが使用される。この値は、設定宣言に関連付けられた定義にキャスト可能であるかまたは変換されなければならない宣言に関連付けられた定義と一致しなければならない。この値が固定と宣言された場合、その値が固定されているポイントに応じて、提供された値がすべての導出された定義または参照するメンバで使用される。値は一度固定されると、上書きすることはできない。
3.2.6.2 設定値リスト
リストとして宣言された設定に対する1つまたは複数の値を提供するために設定値リストが使用される。値を宣言する際、ユーザは以前の値とマージするかまたはすべての以前の値を上書きするかを決定することができる。
3.2.7 設定の継承
設定の継承は、導出された定義が基礎定義からのすべての設定宣言を暗黙的に含んでいることを意味している。設定の継承のいくつかの重要な態様は次の通りである。
設定の継承は推移的である。CがBから導出され、BがAから導出される場合、CはAで宣言された設定と同様、Bで宣言された設定をも継承する。
導出された定義はそれが拡張する基礎定義から継承するものに新しい設定宣言を追加することができるが、継承した設定の定義を除去または変更することはできない。
3.2.8 設定インスタンス
インスタンス空間の設定インスタンスは設定メンバに対する実際の値を保持する。まず、設定インスタンスに対する値は定義空間の設定値ステートメントによって割り当てられる。次いで設定フローが評価され、フローのターゲットである設定インスタンスの値が更新される。
シナリオによっては、本発明者らは設定値ステートメントから導出した設定値とフローによって後で提供される任意の値との間を区別しなければならない。本発明者らは、前者を「割り当てられた」値、後者を「結果として得られた」値と呼ぶ。
3.2.9 値の転送
設定値をフローに渡し、または制約条件から得るために、本発明者らは値の転送を使用する。メンバに関連付けられた定義が評価される前に入力転送が評価され、メンバに関連付けられた定義が評価された後で出力転送が評価される。
各値の転送は、入力の宛先または出力のソースとして使用されるべき定義に対する設定をName属性によって示す。Path属性は、入力のソースまたは出力の宛先である設定宣言を示す。
3.2.9.1 入力
入力ステートメントは、フローまたは制約条件が実行される前に転送されることになる入力値を示す。入力は、「割り当てられた」設定値または「結果として得られた」設定値が入力として使用されるか否かを選択するためにValueSource要素を使用することができる(「割り当てられた/結果として得られた」の定義については節XXを参照のこと)。
3.2.9.2 出力
出力は、ターゲット値を固定し、置き換えるための意味論をサポートする値の転送の一種である。
3.2.10 キャスティング
本発明者らは、設定定義継承ツリーのキャスティングアップおよびキャスティングダウンをサポートする。ソース定義が宛先定義から導出される場合、ソースから宛先定義へのキャストをアップキャストと呼ぶ。宛先定義がソース定義から導出される場合、ソースから宛先へのキャストをダウンキャストと呼ぶ。ツリーのルートは常にAny定義なので、すべての定義をAny定義にアップキャストすることができる。
図16は、アップキャスティングとダウンキャスティングの一例を示している。図16では、User定義は基礎定義Anyを拡張する。ExtendedUser定義は基礎定義Userを拡張する。この定義の階層を構築することによって、本発明者らは、User定義が要求されるところならどこでもExtendedUser定義を提供することができ、Any定義が要求されるところならどこでもExtendedUserとUser定義の両方を提供することができることを示している。
次に示す設定宣言ステートメントは、図16からの定義を使用しており、次節の例で使用される。
3.2.10.1 アップキャスト
図16で、ExtendedUser定義のインスタンスがUserまたはAnyの定義を要求する設定宣言に割り当てられ際にアップキャストが発生する。アップキャストの一例は、設定宣言Firstから設定宣言Secondへの値の転送である。これはフロー入力宣言の一部として行うことができる。
アップキャストは自動的にサポートされる。いかなる値でも、開発者側に特別な対話を必要とせずにその基礎定義の1つにキャストすることができる。設定インスタンスがアップキャストされる際、インスタンスの実際の定義は設定値と共に保持される。
3.2.10.2 ダウンキャスト
図16で、Anyとマーク付けされた設定宣言からの設定値をUserとマーク付けされた設定宣言にユーザが転送する際にダウンキャストが発生する。この場合、インスタンスに関連付けられた定義がUserかまたはExtendedUserの場合にのみ割り当てを行うことができる。これは、設定インスタンスが、現在関連付けられている設定宣言と異なる定義を有することができることを示している。本発明者らは、それ自体のインスタンスを中心としたインスタンスの実際の定義にレファレンスを渡すことによってインスタンス空間内でこれを追跡する。
ダウンキャストの一例は、インスタンスがそもそもFirstから来たものであると仮定すると、本発明者らが設定インスタンスをSecondからThirdに渡す際に発生する場合がある。この場合、設定インスタンスはExtendedUser定義のインスタンスである。この例は、設定インスタンスがフロー定義から転送される際に発生する場合がある。
ダウンキャストは、開発者によって明示的に要求されており、インスタンスのランタイム定義がターゲット定義に等しいかまたはターゲット定義から導出された場合には失敗する。ダウンキャストを要求するために、開発者は関連付けられた転送動作(入力または出力)のCast属性を真に設定する。キャストが要求される場合、宛先定義がソース定義から導出されたものでないならばユーザはコンパイル時エラーを受け取り、設定インスタンスの定義が宛先定義と同じでないかまたは宛先定義から導出されたものでないならばユーザはランタイムエラーを受け取る。
3.2.11 変換
ユーザが設定インスタンスを、インスタンスと異なる定義を有する設定宣言に転送することを希望し、設定宣言定義がインスタンスの定義の基礎定義でない場合、型変換が要求される。
図17は、型変換の一例を示している。図17に示すように、型変換は、継承ツリーの異なる分岐内の定義間で、宛先定義が継承ツリーの1つの分岐内のソース定義の下にある時に発生する場合がある。
型変換は設定マネージャによって取り扱われる。ソースマネージャとターゲットマネージャはどちらも変換サポートを公開することができる。これは、図17の定義と、User定義からString定義への割り当てがあると仮定すると、UserのためのマネージャがStringへの変換を公開することができるか、またはStringのためのマネージャがUserからの変換を公開することができることを意味している。
ランタイムはまずソースマネージャにインスタンスを変換するよう要求し、次いでターゲットマネージャに要求し、最後に使用可能な変換がないならばエラーを戻す。
型変換を要求するために、開発者は設定転送(入力または出力)で属性Convertを真にマーク付けする。Convertが指定されておらず、ソース定義がターゲット定義と同じでないかまたはターゲット定義から導出されない場合、コンパイラはエラーを戻す。Convertが指定されている場合、コンパイラは、両方のマネージャにそれらが変換をサポートするか否かを問うことによって、2つの型間に使用可能な変換があるか否かをチェックする。
インスタンスが設定宣言に関連付けられた定義から導出されたものである定義のものである場合、本発明者らは、アップキャスティングにフォールバックし次いで値を変換する前に、導出された定義を宛先定義にまず変換するよう試みる。本発明者らがアップキャストする場合、本発明者らは変換プロセスの一部として情報を失う可能性があることに留意されたい。例えば、本発明者らがUserとStringの間の変換を指定しておらず、実際のインスタンスがExtendedUserであった場合、本発明者らはUserからStringにフォールバックする前にExtendedUserをStringにまず変換するよう試みる。
3.2.12 CLRからSDMへの型マッピング
SDMモデルでは、すべての設定定義は対応するCLR型を有する。これらの型は、SDMモデルのSettingDefinitions要素に関連付けられたマネージャによって定義される。
フロー、制約条件、または配置マネージャがSDM定義の代わりに機能する場合、それは、SDMのSetting定義のインスタンスに対してではなくCLR型のインスタンスに対して機能することによってこれを行う。これは、より自然なプログラミングモデルを開発者に提供する。これはまた、SDMランタイムからマネージャに情報を渡すためにSDMランタイムがSDM定義からCLR型にマップすることができるべきであり、マネージャから戻された情報を受理するためにCLR型からSDM定義にマップすることができるべきであることも意味している。
例えば、SDMモデルでは、開発者は次に示す設定定義を定義することができる。
次いで、開発者は、次に示すCLR型のインスタンスを取る設定定義に関連付けられた値を処理するマネージャを書くことができる。
この問題には2つの部分がある。第1は定義から型にマップし、また戻すことができ、第2はSDMインスタンスからclrインスタンスにマップし、また戻すことができるということである。
3.2.12.1 型へのマッピング定義
設定定義からclr型にマップするために、本発明者らはマネージャ宣言、設定定義ネーム空間、および設定定義名を使用する。SettingDefinitions要素のManager属性によって示されたマネージャ宣言から、本発明者らは強力な名前と型を含んでいるアセンブリに対する位置を得ることができ、SettingDefinitions要素のClrNamespace属性から、本発明者らは型を含んでいるネーム空間の名前を得ることができる。最後に、本発明者らは、アセンブリからclr型を取り出すためにネーム空間の名前に設定定義の名前を添付することができる。
clr型からSDM定義にマップするために、逆の処理は同じ情報を同じ情報を使用する。まず、本発明者らはランタイムによって提供された型情報からアセンブリ名を取得する。次いで本発明者らは、1つまたは複数のモデルファイルを本発明者らに提供するアセンブリを参照するマネージャ宣言を見つける。次いでモデルファイルの設定定義セクションから、本発明者らはネーム空間の名前と型の名前の対応する対を見つける。
3.2.12.2 変換インスタンス値
設定インスタンスをXMLのSDM表現からClrオブジェクトインスタンスに変換し、また戻すために、本発明者らはここでもまたSettingDefinitions要素に関連付けられたマネージャを使用する。この場合、翻訳を実施するClrクラスは、ClrClassName属性とマネージャ属性によって示されたマネージャ宣言からのアセンブリ情報との組合せによって特性される。
Clrクラスは、マネージャインターフェース基準(参照)に記載のISettingSerializationインターフェースを実施する。このインターフェースは、SDM Xml表現からClrインスタンスへの変換と、ClrオブジェクトインスタンスからSDM Xml表現への変換の両方をサポートする。Modelファイル内で設定定義を作成するのと同じ開発者は、変換を実行するコードを書くことを担当する。
Clrクラスは、SettingDefinitions要素内のすべての設定定義に対する変換をサポートすべきである。
3.3 属性
SDM内のオブジェクトの多くは、オブジェクトの中心的な動作に直交する捕獲動作をその属性とすることができる。本発明者らは以下に定義する一般的な属性モデルを使用する。
3.4 定義
資源およびシステムの再利用可能な構成を作成するために定義が使用される。これらはオブジェクト指向言語のクラスに類似している。
3.4.1 定義
定義は、そこからオブジェクト定義、関係定義、制約条件定義、およびフロー定義が導出される基礎である。すべての定義は、説明、設定メンバ、設定値、および設計表面データを含むことができる。各定義は単純名によって特定され、マネージャへを参照する。マネージャは、定義によって特定されたクラスによってこの特定の定義に対するSDMランタイムにサポートを提供することを担当している。
定義の名前は、定義を含んでいるスコープ内のすべての定義に対して一意であるべきである。スコープはSDM文書であっても別の定義であってもよい。
3.4.2 オブジェクト定義
抽象オブジェクト定義は、一組の設定宣言を公開する。抽象オブジェクト定義は、それが参加し、ランタイム内の関連するマネージャを有する関係に対する制約条件を含むことができる。
ウェブサーバに対する抽象システム定義を次に示す。ウェブサーバは、2つの設定を有しており、少なくとも1つのvsite型を含むことをそれに要求する関係制約条件を有する。
vsiteはサーバ結合情報を含んでいる抽象エンドポイント定義である。
フロントエンドウェブサーバに対する具体的なシステム定義は、静的内容としてウェブサーバのカテゴリを特定し、1と100の間のエンドポイントインスタンスを表すことのできる単一のbyReferenceエンドポイントメンバを含んでいる。エンドポイントに対する具体的なエンドポイント定義はシステム定義内にネストされており、vsiteがエンドポイント80になるipエンドポイントを定義する。
3.4.2.1 オブジェクト定義
抽象オブジェクトおよび具体的オブジェクトは、次に示す基礎オブジェクト定義を拡張する。基準型のDefinitionの要素に加えて、これらはオブジェクトが参加する関係を制約する機能を共有する。
設計表面を見えるようにし、そこからすべての具体的オブジェクトが導出される構築ブロックを定義するために抽象オブジェクト定義が使用される。具体的なオブジェクト定義は、抽象オブジェクト定義を実施する。
抽象オブジェクト定義は単純な継承を追加することによってSDMオブジェクトを拡張する。すなわち、抽象オブジェクト定義に対する基礎オブジェクト定義を示すために「extends」属性が使用される。次いで抽象オブジェクト定義は、その基礎オブジェクト定義から設定および関係制約条件を継承する。継承により、オブジェクト定義は、新しい設定および制約条件を追加することにより抽象オブジェクト定義の設定および制約条件を拡張することができる。
抽象オブジェクト定義は、参加を希望する関係に制約条件を追加することもできる。例えば、抽象オブジェクト定義は、ある関係の存在を要求することができ、または当該関係の他端に置かれる場合のあるオブジェクト定義を制約することができ、または所与の関係に参加しているインスタンスに対する設定を制約することができる。
オブジェクト定義は、ネストされた定義の宣言も含むことができる。これらの定義を、含んでいる定義のスコープ内のメンバに対して使用し、また定義のスコープ外の制約条件で参照することができる。
具体的なオブジェクト定義は、抽象オブジェクト定義に一実施態様を提供する。この実施態様は、オブジェクトおよび関係メンバ、実施された抽象定義の設定に対する値、新しい設定宣言、メンバとメンバに対する制約条件との間のフローから構築される。
3.4.2.2 暗黙の基礎定義
他のオブジェクト定義を拡張しないすべてのオブジェクト定義は、エンドポイント、システム、または資源の基礎定義のうちの1つを暗黙的に拡張する。これらの基礎定義は、関係および制約条件宣言内で使用することのできるツリーのそれぞれに対するルートを形成する。これによって、関係または制約条件は、ルートから導出された型のどれでも特定されたルート定義の代わりに使用可能なことを示すことができる。これらルート型は、常に抽象であり、これらを直接的にインスタンス生成することはできない。
これらの型の定義は、モデル内のそれらのインスタンス生成を制御する基礎制約条件を含む。
3.4.2.3 エンドポイント定義
エンドポイント定義は、ネストされた資源型、資源メンバおよびホスト、包含およびレファレンス関係メンバを宣言する機能を追加することによって基礎オブジェクト定義を拡張する。
3.4.2.4 システム定義
システム型は、ネストされたエンドポイント、システムおよび資源型、エンドポイント、システム、および資源メンバ、およびホスト、包含、接続、委任およびレファレンス関係に関してサポートを追加することにより基準型を拡張する。
3.4.2.5 資源定義
資源型は、ネストされた資源型定義、資源メンバ、およびホスト、包含、およびレファレンス関係メンバを含むことができる。
3.4.2.6 関係規則
オブジェクト定義の特定のインスタンスに関して、インスタンスが果たすことのできるロールのそれぞれに関連付けられたカーディナリティを次の表に示す。
3.4.2.6.1 システム規則
3.4.2.6.2 エンドポイント規則
3.4.2.6.3 資源規則
3.4.2.6.4注記
各インスタンスは1つの包含関係および少なくとも1つのホスティング関係に参加すべきである。
これは、次のことを意味する。
A)非レファレンス(バイバリュー)メンバは同じ定義内の包含関係を示すべきである。
B)構築されるには、レファレンスメンバは包含関係を特定すべきである。
3.4.3 関係定義
型間の実現可能な相互作用を示すために関係が使用される。これらはバイナリであり有向である。これらは、それぞれが関係に参加することのできるインスタンスの型を示している。関係は、関係に参加するインスタンスの設定も制約することができ、関係を横断して設定値をフローすることができる。
型の節で説明したウェブサーバのwebApplicationに対する実現可能なホスティング関係を次に示す。関係は、2つのシステムのセキュリティモデルが整合性を有することを検証する制約条件を含み、またvsiteからvdirにサーバ名をコピーする設定フローメンバを含む。
関係に参加することになる型メンバを示す関係メンバを宣言することによって関係が使用される。
3.4.3.1 関係定義
基礎関係定義は、オブジェクト制約条件およびフローを定義に追加する。オブジェクト制約条件は、この関係のインスタンスに参加するオブジェクトインスタンスに対する設定値に関するステートメントである。例えば、DCOM接続を表す通信関係は、クライアントとサーバに対するセキュリティ設定に整合性があることをチェックすることができる。この場合、設計プロセスの一部として容易に取り込むことのできる設定間に厳密な関係があり、当該関係には4つの階乗設定の組合せがあるが、有効な組合せはさらに少数である。
フローは、あるインスタンスから別のインスタンスに値を転送する機能を関係設計者に提供する。これによりオブジェクト定義は、それらの実現可能な相互作用とは別個に開発可能となり、また、インスタンスは、特定インスタンスを完全に記述するために関係グラフの部分集合を要求するのではなく、情報に対するレファレンスポイントとして単独で存在することが可能となる。
具体的な関係は、2つの具体的なオブジェクト定義間の関係である。各具体的な関係は抽象関係を実施すべきである。抽象関係は、具体的なオブジェクト定義によって直接的または(継承により)間接的に実施される対応する一対の抽象オブジェクト定義の間にあるべきである。
関係の名前は、関係を含んでいるネーム空間内で一意であるべきである。
3.4.3.2 通信関係
エンドポイント定義間の実現可能な通信リンクを取り込むために通信関係が使用される。独立して配置されたソフトウェア要素間の相互作用を記述するためにこれらが使用される。通信関係スキーマは、クライアントおよびサーバのエンドポイントレファレンスを追加することによって基礎関係スキーマを拡張する。
通信関係には次に示す抽象型対の組合せが有効である。
3.4.3.3 ホスティング関係
構築されるためにゲストがホストを要求しているという事実を取り込むためにホスティング関係が使用される。ゲストに対して複数の実現可能なホストがあり得る場合があるので、ホスティング関係はホストでのゲストの構築を担当することも示している。したがってオブジェクトのインスタンスを作成するために、ホスティング関係はゲストから整合性のあるホストに対して存在すべきである。
例えば、ホスティング関係はWebserviceオブジェクト定義とIISオブジェクト定義の間に存在することができる。この場合、MyWebserviceとMyIISがウェブサービスとIISを別々に実施すると仮定すると、関係は、ホスティング関係のマネージャを使用してシステムMyWebserviceのインスタンスをシステムMyIISのインスタンス上に作成することが可能な場合があることを示している。システムと関係の両方に存在する制約条件を本発明者らが評価するまでは、関係を作成することが可能か否かは本発明者らには分からない。
本発明者らがデータセンタにアプリケーションを配置する際、本発明者らはアプリケーション内のシステムに対するすべての顕著なホスティング関係を解決する必要がある。これを行うために、オペレータは、要求されたホスティング関係のそれぞれに対してホスティングメンバを作成することが必要である。オペレータのタスクを簡素化し、開発者が配置プロセスをガイドすることができるようにするために、開発者は代わりに具体的なホスティング関係を作成することができる。アプリケーションを配置する際にオペレータが単一のホスティングメンバを宣言するだけでよいような方法で、一組のホスティング関係メンバをグループ化するために具体的なホスティング関係が使用される。
例えば、次に示す具体的な関係は層3システム(Bike)を層2ホスト(operatingSystem)と結合する。この場合、本発明者らは、ディフォルト値「system folder」でホスティング関係に対する設定を定義する。本発明者らは、この設定を、層3アプリケーションのシステムと層2ホストのシステムの間でホスティング関係を定義する3つのホスティングメンバのうちの1つにフローする。
ホスティング関係には次に示す抽象定義対の組合せが有効である。
3.4.3.4 包含関係
2つの抽象オブジェクトの間の包含関係は、parentTypeに基づく具体的な型はmemberTypeに基づくメンバを含むことができるという事実を取り込む。包含は、親インスタンスがメンバインスタンスの存続期間を制御することができ、メンバインスタンスに動作を委任できることを示している。
包含関係には次に示す抽象定義対の組合せが有効である。
3.4.3.5 委任関係
外部システムから含まれるシステムに動作を転送するために委任が使用される。本発明者らがこれを行う方法は、外部システムのエンドポイントを内部システムのエンドポイントに委任する方法である。これは外部システムに方向付けられていたすべての相互作用を内部システムのエンドポイントに効果的に転送する。委任は繋げることができ、これによって内部システムはその動作を別のシステムにさらに委任することができる。
委任関係は、委任に参加することのできる抽象エンドポイント定義の対を定義する。各関係は、プロキシおよびそれが動作を委任することのできる抽象エンドポイント定義として機能することのできる抽象エンドポイント定義を示す。
委任関係には次に示す抽象型対の組合せが有効である。
本発明者らは、資源およびシステム委任が層間の結合をサポートすることを可能にする。例えば、IISがファイルシステムの一部を配置することを必要とせずにそのファイルシステムの一部を公開することを可能にすることを目的としている。
3.4.3.6 レファレンス関係
本発明者らは、ホスティング関係従属関係に加えてインスタンスの間の強力な従属関係を取り込むためにレファレンス関係を使用する。配置中に構築の順番を制御するために、またインストールおよび更新中にシステム間でパラメータをフローするためにこれらの従属関係が使用される。レファレンス関係は強力な従属関係を示すので、本発明者らはレファレンス関係がシステムの境界を越えられるようにすることはできない。これは、あるシステム内の資源が別のシステム内の資源に対して従属関係を有することができないということを意味している。これでシステムは最早、配置の独立した単位ではなくなる。システム間に従属関係が存在する場合、本発明者らは通信関係を使用する。通信関係は、システムの再インストールを要求せずに経時的に変更することができる。
レファレンス関係には次に示す抽象型対の組合せが有効である。
3.4.3.7 暗黙の基礎関係
すべての抽象関係は、基礎関係定義のうちの1つを暗黙的に拡張する。これらの定義は、関係ツリーのそれぞれに対するルートを形成する。図18は、関係ツリーの一例を示している。これを行うことによって、本発明者らは、制約定義内からのルート定義を参照することができ、また本発明者らはそのルート型から共通型制約条件を継承することができる。
3.5 メンバ
3.5.1 メンバ
ランタイムに存在することのできる特定の定義のインスタンスを示すためにメンバが使用される。すべてのメンバは、当該メンバを含んでいる定義のスコープ内の当該一組のメンバ内で一意の名前によって示される。メンバは、それが参照する定義に対する設定を提供することができる。これは、設計表面特有データを含むこともできる。
3.5.2 オブジェクトメンバ
オブジェクトメンバは、抽象または具体的なオブジェクト定義を参照すべきである。これらはインスタンスのアレイを表すことができる。この場合、これらはそのアレイに対する上限と下限を定義することができる。これらがレファレンスメンバである場合、オブジェクトをインスタンス生成しているユーザは、そのメンバに対するインスタンスを明示的に構築すべきである。これらがレファレンスメンバでない場合、ランタイムは外部オブジェクトが作成されるのと同時にインスタンスを作成する。
SDMモデルでは、本発明者らは、親が構築される際に作成され、親が破壊される際に破壊されるメンバを、その親とは別個に存続期間を有することのできるメンバと区別することが必要になる。本発明者らは、この目的でIsReference属性を使用する。単なる類似は、インスタンスを作成するために「new」が使用されるか否かに基づくスタックベースおよびヒープベースの構築を可能にするC++宣言との類似である。メンバがIsReferenceとマーク付けされている場合、インスタンスを作成し、それをメンバに関連付けるには、オペレータ側で明示的な新しい動作が要求される。
本発明者らがこれを行ういくつかの理由を以下に示す。
1.オペレータがシステムを構築する際、本発明者らはisReferenceメンバを構築する機能しか公開しない。これはオペレータの作業を大幅に簡素化する。
2.SDM文書を処理する際、本発明者らは、文書のインスタンス空間を具体的定義空間のそれと区別することのできる明白な境界を有する。
3.5.3 関係メンバ
関係メンバは、オブジェクトメンバが作成される際にそのオブジェクトメンバ間に存在することになる関係を示す。関係インスタンスは、オペレータによって明示的に作成されるかまたはランタイムによって暗黙的に作成される。前者の例はインスタンス間のホスティング関係であり、後者はシステム間の通信関係である。
3.5.4 エンドポイントメンバ
3.5.5 システムメンバ
3.5.6 資源メンバ
3.5.7 ホスティングメンバ
2つのオブジェクトメンバ間のホスティング関係を宣言するためにホストメンバが使用される。オブジェクトメンバは、含んでいる定義の直接のメンバであっても、定義とメンバーシップ関係を有するネストされたメンバであってもよい。参照されるメンバと含んでいる定義の間のメンバーシップチェーンがあるべきである。
3.5.8 通信メンバ
定義の隣接するシステムメンバのエンドポイントメンバ間の通信関係を宣言するために通信メンバが使用される。
3.5.9 包含メンバ
型メンバが型によって含まれることを宣言するために包含メンバが使用される。各型メンバは含まれていても、委任されていてもよい。包含メンバは、関係のこのポインタになるべき包含関係の親の値を自動的に設定する。
3.5.10 委任メンバ
外部型のエンドポイント定義メンバと外部型の隣接するシステムメンバのエンドポイント定義メンバとの間の委任関係を設定するために委任メンバが使用される。
3.5.11 レファレンスメンバ
外部定義の2つの隣接するメンバまたはネストされたメンバの間のレファレンス関係を設定するためにレファレンスメンバが使用される。
3.6 フロー
オブジェクト定義のメンバ間、および関係の参加者間でパラメータを渡すために設定フローが使用される。フローの一部として、ユーザは、設定値を結合または分離し、新しい設定値を計算するために変形を使用することができる。
すべての設定フローメンバは、変形を実施するためにフロー定義を使用する。urlを構文解析するフロー定義を次に示す。
次いでフローメンバは、オブジェクトまたは関係内で宣言される。フローメンバは、フロー定義に入力を提供し、次いで出力をフローからターゲット設定に出力を方向付ける。
3.6.1 フロー定義
本発明者らが一組の設定値に適用することを望む特定変形を定義するために本発明者らはフロー定義を使用する。フロー定義は、入力設定(書き込み専用設定)と出力設定(読み取り専用設定)、変形を定義するための入力インターフェースのような設計表面特有情報のためのDesignDataセクション、およびSDMファイルをブラウジングする際に使用するための説明を定義する設定スキーマを公開する。フロー定義は、それが定義されているネーム空間内の名前によって示される。この定義は、それがフローを評価する際にランタイムをサポートするマネージャも示す。
本発明者らは、単純明快な変形が要求される場合にフロー要素の構築を簡素化するためにランタイムがいくつかの標準フロー定義を含むだろうと推測する。例は、コピー、マージ、およびストリングの置換を含むことができる。フロー定義をパラメータ化することができるので、本発明者らは、構成パラメータに基づいて異なるアクションを実行する1つまたは複数の簡素な変形があるだろうとも推測する。
3.6.2 フローメンバ
各フローメンバは、1つまたは複数の入力設定、1つまたは複数の宛先設定を示す。各フローメンバは固定された設定値を提供することができる。各フローメンバはフロー定義を示すべきである。フローが評価される際、ソースデータが入力から収集され、固定設定値と結合され、変形のためにフロー定義に渡される。定義からの出力は、フローメンバに列挙される出力に従って宛先設定に渡される。
ソース値の1つが変更される時は何時でもフローの再評価がトリガされる。この理由から、本発明者らは値を変更させる回路の流れを防止する必要がある。値が一定に維持される場合、ループは中止する。ランタイムは、スタックの深さを追跡することによって無限ループを検出し中止する。
別個のフローメンバからの出力がオブジェクトインスタンスの同じ設定メンバを目標とすることはエラーである。
3.7 制約条件
定義のメンバの設定値または関係の参加者に対する制約を示すために制約条件が使用される。これらの制約は、設計時と開発時の両方でインスタンス空間内で評価される。
すべての設定制約条件は、設定値を評価するために制約条件定義を使用する。制約条件定義は、それが含んでいる値を示すために設定宣言を使用する。次に示す制約条件定義は、2つの引数と1つの演算子を取り、制約条件を評価し、最後に成功またはエラーを戻す簡素な比較関数を実施する。
次いで制約条件メンバは、評価に制約条件型への値を提供するために使用される。
3.7.1 制約条件定義
制約条件定義は、一組の入力値に対して機能する制約条件を定義する。制約条件は、カスタム動作を選択するか、またはその動作を定義するためにパラメータを使用する簡素な制約条件エンジンをサポートするために、パラメータ化することができる。本発明者らは、抽象オブジェクト間の周知の関係をサポートするために簡素なパラメータ値制約条件と一組の複雑な制約条件のために一組の標準制約条件定義が書かれるだろうと推測する。
3.7.2 制約条件メンバ
制約条件メンバは、特定の制約条件定義に関して一組の入力値を示す。メンバは、設定に関して静的な値を示すことができ、また制約条件設定を経路に結合するために入力ステートメントを使用することができる。
3.7.3 構造的制約条件
本発明者らは、特定の関係で使用される際に具体的な空間のトポロジを定義し、オブジェクトの設定を制約するためにオブジェクトおよび関係制約条件を使用する。
例えば、抽象オブジェクト定義(A)内で、本発明者らは、この抽象定義の実施態様が別の抽象オブジェクト定義(B)の1つのインスタンスを含むべきであると示したい場合がある。少なくとも1つの適切な包含関係が既に存在すると仮定すると、これを行うために、本発明者らは、次に示すようなA内の関係制約条件を使用する。
制約条件は、Aの実施態様が親のロールを果たし、関係(メンバ)の他端の型が型Bである包含関係が存在すべきことを示す。本発明者らがBの構成に関してさらに制御しようとする場合、本発明者らは次のように型Bの設定に対する制約条件を追加することができる。
この場合、本発明者らは、メンバの名前がストリング「myPort」と等しくなることを要求した制約条件を追加した。
本発明者らは、関係に制約条件を追加することもできる。本発明者らはこれらをオブジェクト制約条件と呼ぶ。関係内から、本発明者らは関係に参加するオブジェクトを制約する。関係のそれぞれのロールに関して、本発明者らはオブジェクト定義を示すことができ、次いで本発明者らはそれらのオブジェクト定義に設定制約条件を追加することができる。関係の観点から、カーディナリティは常にminOccurs=1、およびmaxOccurs=1であり、したがってこれは制約条件宣言には表示されない。
最後に、本発明者らは制約条件をネストすることができる。これは、本発明者らに制約条件をつなぐ機能、すなわち外部制約条件が内部制約条件に対するコンテキストを設定する機能を提供する。特定型のエンドポイントだけを含むwebAppを制約するwebappシステムをホストするIISシステムの一例を次に示す。
この場合、本発明者らは、少なくとも1つが真であるべきである一組の可能性を指定するために一群のオブジェクト制約条件を使用する。
このネストされた制約条件は、本発明者らが外部から評価することができる経路を形成する。この経路に対する各制約条件は、現在のインスタンスと同様、当該経路に対する以前のインスタンスの設定にもアクセスすることができる。ネストされた制約条件の評価は、特定されたシステム内で制約条件が定義されているかのように実行される。
fooの観点から、次に示す2つのシナリオは等価であるべきである。第1のfooは、制約されたシステムbarに対してネストされた制約条件を課し、第2のfooでは、型barは既にその制約条件を含んでいる。
シナリオ1:
シナリオ2:
3.7.3.1 制約条件モデル
制約条件モデルには、ガードと述部という2つの部分がある。本発明者らは、述部を実行するコンテキストを定義するためにガードを使用する。例えば、関係内で、本発明者らは、述部を実行することを本発明者らが希望する型の特定の組合せを示すためにガードを使用する。オブジェクト内で、本発明者らは、他のオブジェクトに対して一組の関係を示すためにガードを使用する。
次いで述部は、そのガードの要件が満たされている場合に実行される。本発明者らは、設定値を検証する設定制約条件と、一組の制約条件を検証するグループ制約条件という2つの形式の述部を有する。
本発明者らは、ガード内にガードをネストすることができる。この場合、内部ガードは外部ガードが満たされた場合にのみチェックされる。これによって、本発明者らは関係構造の検証をサポートする経路を構築することができる。
ガードとその述部の組合せは、ガードが一致し、述部が真と評価する回数を示すカーディナリティを有することができる。
より正式には、
である。
ガードは、ObjectConstraintまたはRelationshipConstraintと定義される。オブジェクト制約条件は、関係のどちらか一方の端部に関連付けられた2つのオブジェクト定義を示す。関係制約条件は、関係定義とターゲットオブジェクト定義とを示す。オブジェクト制約条件は任意選択であっても、関係制約条件が下限と上限を有する場合に要求されてもよい。カーディナリティのこのような違いは、型は複数の関係に参加することができるのに対し、関係は2つの型しか示せないという事実を反映している。
述部は、規則を含んでいる設定制約条件かまたは一組のガードを含んでいるグループである。述部は、ガードのコンテキストで評価される。設定制約条件の場合、述部は、ルートガードの所有者とそれぞれのネストされたガードが示すコンテキストとから設定を示すことができる。少なくとも1つが一致し、真と評価する一組のガードを示すためにグループが使用される。
例:
1.
この例は、webappに対して制約条件関係がある時は何時も真と評価するガードを示している。このガードは、多くて1回しか真と評価することはできない。それ以上一致した場合はユーザにエラーが戻されることになる。
2.
この例は、ガードに述部を追加する。ガードは、関係とターゲット定義が一致し、設定制約条件が真と評価する場合にのみ真と評価する。関係とターゲット定義が一致し、設定制約条件が真でない場合、ユーザにエラーが戻される。関係とターゲット型が一致し、設定制約条件が複数回真と評価する場合、ユーザにエラーが戻される。
3.
この例で、本発明者らはガード内にガードをネストする。外部ガードが真の場合(制約条件を含んでいる型がwebappも含んでいる)、本発明者らは外部ガードのコンテキスト内の内部ガードを評価する。これは、内部関係制約条件がwebappインスタンスのコンテキストで評価されることを意味している。webAppが0または1のvdirを含んでいる場合、内部制約条件は真を戻し、複数のvdirを含んでいる場合、制約条件はユーザにエラーを戻す。
4.
オブジェクト制約条件のコンテキストは主要オブジェクト定義(第1のオブジェクト定義)である。これは、関係制約条件がwebappのコンテキストで評価されることを意味している。関係制約条件は、第1はオブジェクト制約条件に対するコンテキストとなる関係であり、第2は関係制約条件に対するコンテキストであるターゲットオブジェクト定義である、2つの実現可能なコンテキストを定義する。
5.
この例で、本発明者らは、Webappのコンテキストでどちらも評価されることになる2つの関係制約条件を含めるために1つのグループを使用する。これら関係の少なくとも1つが発火して真を戻さない限り、このグループはエラーを生じる。この場合、WebappはVdirまたはディレクトリを含めるべきである。
3.7.3.2 基礎制約条件
すべての構造的制約条件は、StructuralConstraintと呼ばれる共通の基礎制約条件から導出される。各構造的制約条件は、記述要素と設計データの両方を含むことができる。要求された制約条件が失敗した場合に記述要素はエラーメッセージとして戻される。各制約条件は、名前と、その制約条件が要求されているかまたはより大きな制約条件の一部を構成する単なるテストであるかを示すフラグとを有する。最後に、制約条件が何時評価されるべきかを示すために制約条件の評価要素を使用することができる。制約条件評価に関する更なる情報については節3.7.3.7を参照されたい。
3.7.3.3 オブジェクト制約条件
オブジェクト制約条件は、関係のロールの一方または両方に対する制約条件を記述する。この制約条件は、制約条件が失敗した場合にその制約条件の特定を支援するために名前を有する。オブジェクトは、ネストされた関係制約条件、または関係に参加しているインスタンスとロールが一致する場合に評価されることになる制約条件メンバを含むことができる。
制約条件は次のように評価される。
a)主要なロールと主要な定義をオブジェクトインスタンスと照合し、提供されているならば副次的なロールと副次的な定義をオブジェクトインスタンスと照合する。一致しない場合、一致=0と設定してc)に進む。
b)主要オブジェクトインスタンスのコンテキストのすべてのネストされた制約条件を評価する。これらすべてが真と評価する場合は、一致=1と設定し、そうでない場合は、一致=0と設定する。
c)一致>MinOccurs、かつ一致<MaxOccursの場合は、結果=真と設定し、そうでない場合は、結果=偽と設定する。
d)Requiredが真であり、結果が偽である場合、メッセージをユーザに戻す。
e)結果を親コンテキストに戻す。
3.7.3.4 オブジェクト制約条件グループ
オブジェクト制約条件グループは、少なくとも1つの意味論を使用して複数組のオブジェクト制約条件を評価することができるようにその複数組のオブジェクト制約条件を1つにグループ化することを可能にする。グループの制約条件の少なくとも1つが真と評価しない限り、このグループは偽を戻す。制約条件グループは次のように評価される。
a)それぞれのネストされた制約条件を順次評価する。少なくとも1つが真と評価した場合は、結果=真と設定し、そうでない場合は、結果=偽と設定する。
b)結果=偽であり、かつRequired=真である場合、エラーを発生する。
c)結果を親コンテキストに戻す。
3.7.3.5 関係制約条件
オブジェクトが参加することのできる関係を制約するために関係制約条件が使用される。関係制約条件は関係定義を示し、任意選択で関係の他端のインスタンスのオブジェクト定義と関係のカーディナリティとを示す。制約条件には、エラーメッセージで識別されることができるよう名前が与えられる。関係制約条件の本体は、この制約条件をさらに改良するネストされた制約条件を制約する。
関係制約条件はいくつかの目的で使用することができる。すなわち、追加の述部なしに単にカーディナリティを使用して、インスタンスが正常に動作するよう提供されるべき関係を示すために関係制約条件を使用することができ、述部を使用して、このオブジェクトが相互作用を意図するインスタンスに関する当該一組の構成を狭めるために関係制約条件を使用することができる。
関係制約条件は次のように評価される。
a)一致=0と設定する。
b)オブジェクトインスタンスが参加する各関係インスタンスに対して、
a.関係定義を関係インスタンスの定義と照合し、関係の方向をターゲットのロールが示す方向と照合し、提供されているならばターゲットオブジェクト定義を関係の他端のインスタンスの定義と照合する。これらが一致しない場合、次の関係に進む。
b.関係インスタンスのコンテキストのすべてのネストされた制約条件を評価する。これらすべてが真と評価する場合、一致=一致+1と設定する。
c)一致>MinOccurs、かつ一致<MaxOccursの場合は、結果=真と設定し、そうでない場合は、結果=偽と設定する。
d)Requiredが真であり、結果が偽である場合、メッセージをユーザに戻す。
e)結果を親コンテキストに戻す。
3.7.3.6 関係制約条件グループ
関係制約条件グループは、少なくとも1つの意味論を使用して複数組の関係制約条件を述部として評価することができるようにその複数組の関係制約条件を1つにグループ化することを可能にする。制約条件グループは次のようにグループ化される。
d)それぞれのネストされた制約条件を順次評価する。少なくとも1つが真と評価した場合は、結果=真と設定し、そうでない場合は、結果=偽と設定する。
e)結果=偽、かつRequired=真である場合、エラーを発生する。
f)結果を親コンテキストに戻す。
3.7.3.7 制約条件評価
制約条件を評価することができる3つの別個の時点がある。すなわち、設計プロセス中、アプリケーション配置中、およびオペレータがアプリケーションの構成のチェックまたは更新を希望した任意の時点で一度アプリケーションが配置された時である。
制約条件が評価される時点は、制約条件に使用可能な一組の情報を変更する。設計時に評価される制約条件は、配置中にのみ供給される値または配置後にのみ使用可能な値に依存することはできない。配置時に評価される制約条件は、配置後にのみ使用可能な値に依存することはできない。配置後に評価される制約条件は、アプリケーションのいかなる設定にもアクセスすることができる。
本発明者らは、制約条件が実行されるべき時点に応じて制約条件開発者がその制約条件にマーク付けすることを可能にする。入力が使用可能でない時に本発明者らが制約条件を実行する場合、発生することになるエラーを回避するためにこの情報が使用される。次いでコンパイラは、配置または検証まで使用可能でないと認識している値に設計制約条件が依存しないことをチェックすることができ、同様に、配置後まで使用可能でないと認識している値に配置制約条件が依存しないことをチェックすることができる。設定が使用可能な時点に関する知識をコンパイラが完成した場合、制約条件を実行することができる時点を計算することができるが、残念ながらこれは実現する可能性が低い。値を設定に提供することができる時点は、例えば予め知ることができるか、または一意の識別子を生成したアルゴリズムを用いて配置中に作成することのできるディレクトリ名を変更することができる。
制約条件は次のようにマーク付けすることができる。
a)設計−設計時、配置時、または検証中に実行することができることを示す。
b)配置−配置時または検証中に実行することができることを示す。
c)検証−検証中にのみ実行することができることを示す。または
d)なし−実行されないことを示す。
これらの選択肢を取り込むために次に示す一覧表が使用される。
構造的制約条件と制約条件メンバの両方に対して制約条件の評価動作を設定することができる。どちらの場合も、すべてのネストされた制約条件に構造的制約条件または制約条件メンバを適用する。
ディフォルトの制約条件は設計時制約条件とマーク付けされており、何時でも実行可能である。
3.8 委任
委任の目的は、モデルの開発者が、ホストまたは含まれた構成要素からゲストまたは親に特有の動作を提示できるようにすることである。これによって開発者は、既存の実施態様を再利用し、そのクライアントにより包括的な実施態様を提供する構成要素を設計することができる。図19は、ホストの実施態様をゲストに公開するために委任を使用する一例を示している。
図19で、アプリケーションプラットフォーム構成要素は、ファイルシステムをそのホストであるオペレーティングシステム構成要素からそのゲストであるアプリケーションに公開するために委任関係を使用する。これを行うことにより、アプリケーションプラットフォームは、そのゲストにとってオペレーティングシステムのどの部分が使用可能かを、それらを直接実施することを必要とせずに制御することができる。
図20は、メンバの実施態様を親に公開するために委任を使用する一例を示している。図20で、クライアントアプリケーションは予約サービスのエンドポイントを発券アプリケーションに公開する。これは、発券アプリケーションが、その時点でエンドポイントをServerアプリケーションに接続することを可能とするが、Serverアプリケーションはそれ自体のエンドポイントをUserDataSアプリケーションに委任する。
3.8.1 原理
次に示す原理は委任モデルの設計をガイドする。
・プロキシはターゲットシステムに存在しない。プロキシはモデルにとって便利なものであり、物理的表現を有しない。これが真でない場合、委任の使用はターゲットシステムに対して悪影響を有することになる。
・プロキシは、代表が変更をサポートしない限り代表の動作を変更することはできない。プロキシはターゲットシステムに存在しないので、プロキシはモデル化された現実でないシステム動作しか変更することはできない。代表がその動作に影響を与える設定を公開する場合、他の関係と同様に、委任関係もフローによってそれらの設定を変更することができる。
・外部ユーザの観点から、ユーザは、特定のインスタンスがプロキシかまたは現実の実施態様かを知る必要があるとされるべきではない。これが真でない場合、制約条件およびフローの著者は、複雑かつ脆弱なコードを生じるどちらの場合もカバーする必要がある。
・ユーザは、制約条件表現の一部としてプロキシを明示的に目標とすることができるべきである。これは、構成要素の境界を経て動作の公開を制御する制約条件を実施するために必要である。
3.8.2 シナリオ
システムの代表の使用に関連する問題を示す2つのシナリオを次に示す。
3.8.2.1 通信接続性の検証
クライアントポートがサーバポートに接続できることを検証するために、通信関係は、サーバまでウォークし、次いでそのサーバのホストまでウォークし、その後、層3で通信関係に沿って戻り、さらに層4のクライアントまでホスティング関係を上がり、最後に通信関係に戻る制約条件を含んでいる。これを図21に示す。
委任関係が、包含境界が存在することにより両方の層でクライアントとサーバの間に存在する可能性がある。この一例を図22に示す。この経路に従う制約条件を書くために、ユーザはその時点で任意の数のそれらの関係を処理することができるが、これは制約条件の記述を複雑化し、制約条件言語の利便性を低下させる。
これを防ぐために、本発明者らは、プロキシがあるか否かと、そのプロキシがいくつあるかを予め認識せずにユーザが制約条件を書けるようにする必要がある。
3.8.2.2 ゾーン境界
データセンタで、システムを異なるセキュリティ要件または動作と区別するためにゾーンがしばしば使用される。通信関係がゾーン境界を横断する場合、ユーザはその関係の動作に対して制約条件を課そうとする場合がある。例えば、ユーザは、バックエンドサーバに対してあるポートを介してhttp通信を可能にすることだけを望む場合がある。これを行う場合、ユーザは、ゾーン境界を越える際に通信関係を示すことができるべきである。プロキシはユーザがこれを行うことのできる唯一の方法である。図23は、ゾーン境界の一例を示している。
図23で、開発者がゾーン1からゾーン2への発信する通信を制約しようとする場合、開発者は、ゾーン境界に委任されたエンドポイントを制約することによってこれを行う。例えば、開発者は、着信httpと発信sql通信フローだけを可能にする制約条件を書く場合がある。この制約条件はゾーンが公開する各プロキシエンドポイントに対して発火する。
プロキシを制約するために、プロキシは制約条件に対して可視的であるべきである。これは、制約条件が、動作を実施する代表とは別にプロキシが参加する関係を目標とすることができるべきであることを意味している。いくつかのシナリオではプロキシはユーザに見えないので、これは以前のシナリオに予想される動作を複雑化する。
3.8.3 モデルの他の部分との相互作用
代表に対する規則を図24に示すインスタンス空間例を使用して示す。
3.8.3.1 プロキシおよび代表
プロキシは、代表と同じかまたは代表の基礎クラスであるべきである。図24の例で、プロキシとして機能するbは、代表であるcと同じかまたはその基礎定義であるべきである。プロキシbはcの動作しか公開することはできないので、これが要求される。これらの型が異なってよい場合は、bの公開された動作はcの動作と異なってよいが、要求された動作を実施することができるbの物理的表現はない。
インスタンス空間で、プロキシインスタンスは1つしか代表を有することはできない。すなわち、bが関係のプロキシとして機能する場合、bからの委任関係は1つだけあってよい。この制約条件がないと代表から設定値またはメンバの集合を戻すことができず、ランタイムはその値に対するソースとしてどの代表を選ぶべきかを知らないので、この制約条件が要求される。
3.8.3.2 関係のロール
プロキシは次に示す関係のロールに参加することができる。
3.8.3.3 メンバのフィルタリングおよび経路の解決
プロキシは、プロキシの定義の一部と定義された代表からメンバを公開するだけである。プロキシと代表の定義が同一の場合、代表のすべてのメンバはプロキシによって公開されることになる。プロキシ定義が代表の定義の基礎定義である場合、プロキシは両方の定義に共通のメンバを公開するだけである。
図24のBとCに対して次に示す定義を仮定する。
この場合、プロキシbは高さ設定を公開するだけであり、重さ設定は公開しない。
設定値がプロキシで設定される場合、委任関係を介してアクションが代表に転送される。新しい設定値が代表に直接記録され、その代表を目標とするいかなる他のプロキシにも可視的となる。
設定値がプロキシから取り出される場合、要求が代表に転送され、設定値は代表から直接的に戻される。
オブジェクトおよび関係メンバのフィルタリングは、設定のフィルタリングと同じ方法で動作する。プロキシの定義の一部として宣言された共通メンバだけがプロキシによって公開される。メンバへの変更は代表のメンバに直接影響を与え、その代表を目標とするすべてのプロキシに対して可視的となる。
メンバ経路がプロキシのメンバを参照する場合、その経路は代表のメンバに自動的に解決される。これは、メンバがプロキシか代表かによって経路のシンタックスは変化しないということを意味している。
3.8.3.4 関係のフィルタリング
各オブジェクトインスタンスは一組の関係に参加する。これらの関係は、制約条件とフローの両方を評価するために使用され、またインスタンス生成のプロセスを制御するためにも使用される。プロキシと代表の両方は、プロキシと代表の両方の一貫したピクチャをユーザに提示するために1つに結合されるべき複数組の関係に参加する。
プロキシから、本発明者らは、プロキシの関係と組み合わせて代表の関係の部分集合を公開することを必要とする。本発明者らが実施態様を隠している場合、プロキシは独自の包含関係と、可能であれば代表の関係の小さな部分集合だけをユーザに戻す必要がある。プロキシが完全に透明であることを本発明者らが望む場合、本発明者らはすべての代表の関係を公開し、プロキシの関係を隠す。
代表から、本発明者らは、そのプロキシが参加している関係の部分集合と組み合わせてその直接的な関係を公開することを必要とする。すなわち、プロキシが別のエンドポイントと通信関係を有する場合、代表がこの関係に直接参加しているように表示されるべきである。一方、本発明者らは、プロキシの包含関係を代表の一部として公開することを望まない。制約条件に対するロールアップ動作は節3.8.3.6で説明する。
3.8.3.4.1 プロキシ識別および関係のフィルタリング
本発明者らは、透過的プロキシと不透明なプロキシという2つの型のプロキシを有する。開発者が代表の実施態様をプロキシのクライアントに公開することを望む場合は透過的プロキシが使用され、開発者が代表の実施態様をプロキシのクライアントから隠す場合は不透明なプロキシが使用される。
3.8.3.4.1.1 透過的プロキシ
代表の実施態様をクライアントに公開するために透過的プロキシが使用される。ゾーンが純粋にモデル化を目的としたものであり、それらが含んでいるシステムを隠すべきでない場合、その典型例を図23に示す。この場合、zone2でSqlシステムと通信する開発者は、委任されたエンドポイントの実施態様がゾーンではなくSqlサーバであることを知っているべきである。
透過的プロキシは、クライアントからではなく代表からすべての識別情報を戻す。これは、インスタンスID、定義、バージョン、および包含情報はすべてプロキシからではなく代表から入手されるということを意味している。
照会された場合、透過的プロキシは、プロキシの関係ではなく代表が参加している当該一組の関係も戻す。
3.8.3.4.1.2 不透明なプロキシ
開発者がクライアントを中断せずにその実施態様を自由に変更するために、代表の実施態様を隠すよう不透明なプロキシが使用される。例えば図19で、IISシステムはファイルシステムの実施態様を隠すために不透明なプロキシを使用することができる。この結果、IISのゲストはファイルシステムを実施するオペレーティングシステムには依存しない。
不透明なプロキシはインスタンスID、定義、およびバージョンと、代表ではなくプロキシからの包含情報とを戻す。
照会された場合、不透明なプロキシは、委任関係を含まず、それが直接参加している関係だけを戻す。
3.8.3.5 フロー
プロキシを目標とするフローは、代表に自動的に宛先変更されるが、この場合、フローはターゲットが実際の実施態様ではなくプロキシであることに気付く必要はない。プロキシはメンバに対するすべての要求を代表に関連付けられたインスタンスに転送するので、そのフローの影響はプロキシによって代表に直接転送される。
プロキシの一部として宣言されたフローは評価されない。これは、代表がプロキシの定義と同一かまたはプロキシの定義から導出されたものであるべきなので、フローが代表の一部としても評価されるからである。それが評価される場合、本発明者らは常に代表の設定値に複製フローエラーを有する。
3.8.3.6 制約条件
制約条件は、委任を意識するようにも意識しないようにも書くことができる。制約条件が委任を意識する場合、プロキシが参加している関係のロールアップなしに各プロキシインスタンスに対してその制約条件が評価される。委任関係は制約条件に公開される。
例えば、図24のxからbを目標として書かれる委任を意識している通信制約条件は、プロキシbとx、c、d、e、およびiと共に参加している関係とを参照する。この制約条件がcへの委任関係に従っていると仮定すると、この制約条件はcからb、f、h、およびgへの関係を参照する。
制約条件が委任を意識しているようにマーク付けされていない場合、制約条件エンジンは、プロキシを目標とする関係を評価する場合、透過的プロキシに自動的に進む。制約条件のターゲットインスタンスがプロキシである場合、制約条件エンジンはそれを代表によって置き換える。制約条件は委任関係を参照しない。
同じ制約条件が委任を意識せずに評価される場合、その制約条件はbを全く参照しない。代わりに、制約条件はcに対して評価されるだけである。cを評価する場合、制約条件はcとx、d、f、h、g、およびiとの間の関係を参照する。この場合、本発明者らはその包含関係を除いてbからのすべての関係をロールアップしており、本発明者らは委任関係を隠しているということに留意されたい。
制約条件は、DelegationAware属性を構造的制約条件で真に設定することによって委任を意識するようマーク付けされる(オブジェクトまたは関係制約条件−節3.7.3.を参照のこと)。
プロキシの定義の一部として宣言された制約条件はプロキシに対して評価されない。これは、制約条件はプロキシと代表の定義の両方に共通であるべきなので、制約条件が代表に対しても評価されるからである。
3.9 マネージャ
マネージャは、型と関係がランタイム環境にカスタム動作を挿入する機構である。マネージャが管理する各型のためにマネージャがサポートすることのできるいくつかのロールがある。マネージャは型のインストールに参加することができ、型のCLR表現を提供することができ、型間の結合がどのように解決されるかに関してポリシー決定に関与することができ、複雑な制約条件とフローに実施態様を提供することができる。
すべてのオブジェクトマネージャのロールは、強力に命名されたクラスへのエントリポイントとしてCLRによって公開される。オブジェクトマネージャは、SDMの他の型と同じ方法でパッケージされ、バージョン付けされる。これらは、システム分散ユニットに分配され、これらのバージョンと強力な名前は、これらが宣言されたSDMファイルから導出される。
3.9.1 規則
オブジェクトマネージャは、それがサポートする各型に対する1つまたは複数のロールをサポートすることができる。これらのロールには、次のものが含まれる。
a)型または関係に対する制約条件の評価
b)型または関係に対するフローの評価
c)型に対する構築/破壊/更新サポート
d)型または関係に対する設定のオブジェクト表現の公開
e)型または関係に対する発見の実行
f)型または関係を中心とした設計表面特有UIのサポート
3.9.2 注記
マネージャは他のマネージャに対する従属関係を有する場合があるが、その従属関係は、そのマネージャを使用するSDMファイルのインポートステートメントに反映されるべきである。この従属関係が記述されていない場合、特定のマネージャが依存する他のマネージャはランタイムによってロードされず、当該マネージャの実行は失敗する。
3.10 設計データおよび記述
記述は、関連するSDM要素を記述するテキストを含んでいる。このテキストは、DocumentLanguage属性が示す文書の言語で書かれている。テキストの場所の特定をサポートするために、資源識別子を提供することができる。ランタイムは、その記述で特定されたマネージャか、またはそれが供給されていない場合は当該記述に関連付けられた、場所が特定されたテキストのための文書に対するディフォルトマネージャを要求する。
3.11 SDM文書構造
SDM文書は、一組の関係、オブジェクト、およびマネージャに対する強力な識別、バージョン付け、および場所特定情報を提供する。
3.11.1 情報
SDM文書の情報の節は、SDM文書の識別と管理をサポートするために人間によって可読の情報を含んでいる。
コンピュータ環境例
図25は、本明細書に記載の技術を実施するために使用することのできる汎用コンピュータ環境800を示している。コンピュータ環境800は、コンピューティング環境の一例に過ぎず、コンピュータおよびネットワークアーキテクチャの用途または機能の範囲に関していかなる限定をも企図するものではない。またコンピュータ環境800は、コンピュータ環境例800に示すいかなる1つの構成要素または複数の構成要素の組合せに関するいかなる従属関係または要件をも有するものと解釈されるべきではない。
コンピュータ環境800は、コンピュータ802の形態の汎用コンピューティングデバイスを含む。コンピュータ802は、例えば図1のコンピューティングデバイス102、または図2の実施態様開発システム202または検証コンポーネント208であってよい。コンピュータ802の構成要素は、限定はしないが、1つまたは複数のプロセッサまたは処理ユニット804、システムメモリ806、およびプロセッサ804を含めて様々なシステム構成要素をシステムメモリ806に結合するシステムバス808を含むことができる。
システムバス808は、メモリバスまたはメモリコントローラ、周辺バス、アクセラレーテッドグラフィックスポート、様々なバスアーキテクチャのどれかを使用するプロセッサまたはローカルバスを含めて複数種類のバス構造の任意の1つまたは複数を表す。一例として、このようなアーキテクチャは、業界標準アーキテクチャ(ISA)バス、マイクロチャネルアーキテクチャ(MCA)バス、拡張ISA(EISA)バス、ビデオエレクトロニクス規格協会(VESA)ローカルバス、およびメザニンバスとしても知られている周辺装置相互接続(PCI)バスを含むことができる。
コンピュータ802は、通常、様々なコンピュータ可読媒体を含む。このような媒体は、コンピュータ802によってアクセス可能ないかなる使用可能な媒体であってもよく、揮発性媒体と不揮発性媒体、取り外し可能媒体と取り外し不可能媒体の両方を含む。
システムメモリ806は、ランダムアクセスメモリ(RAM)810のような揮発性メモリ、および/または読み取り専用メモリ(ROM)812のような不揮発性メモリの形態のコンピュータ可読媒体を含む。起動時などにコンピュータ802内の素子間での情報の転送に役立つ基本ルーチンを含んでいる基本入出力システム(BIOS)814はROM 812に記憶されている。RAM 810は、通常、処理ユニット804によって直接アクセス可能であり、かつ/またはそれに対して現在動作が行われているデータおよび/またはプログラムモジュールを含んでいる。
コンピュータ802は、他の取り外し可能/取り外し不可能な揮発性/不揮発性コンピュータ記憶媒体を含むこともできる。一例として、図25は、取り外し不可能な不揮発性磁気媒体(図示せず)から読み取り/に書き込むためのハードディスクドライブ816、取り外し可能な不揮発性磁気ディスク820(例えば、「フロッピー(登録商標)ディスク」)から読み取り/に書き込むための磁気ディスクドライブ818、CD−ROM、DVD−ROM、または他の光媒体のような取り外し可能な不揮発性光ディスク824から読み取り/に書き込むための光ディスクドライブ822を示している。ハードディスクドライブ816、磁気ディスクドライブ818、および光ディスクドライブ822は、1つまたは複数のデータ媒体インターフェース826によってシステムバス808にそれぞれ接続されている。あるいは、ハードディスクドライブ816、磁気ディスクドライブ818、および光ディスクドライブ822は、1つまたは複数のインターフェース(図示せず)によってシステムバス808に接続することができる。
ディスクドライブおよびそれらに関連するコンピュータ可読媒体は、コンピュータ可読命令、データ構造、プログラムモジュール、および他のデータの不揮発性記憶をコンピュータ802に提供する。この実施例は、ハードディスク816、取り外し可能磁気ディスク820、および取り外し可能光ディスク824を示しているが、コンピューティングシステムおよび環境例を実施するには、磁気カセットまたは他の磁気記憶装置、フラッシュメモリカード、CD−ROM、デジタル多用途ディスク(DVD)、または他の光ストレージ、ランダムアクセスメモリ(RAM)、読み取り専用メモリ(ROM)、電気的消去可能書き込み可能ROM(EEPROM)などのようなコンピュータによってアクセス可能なデータを記憶することができる他の種類のコンピュータ可読媒体を使用することもできるということを理解されたい。
一例としてオペレーティングシステム826、1つまたは複数のアプリケーションプログラム828、他のプログラムモジュール830、およびプログラムデータ832を含めてプログラムモジュールを幾つでも、ハードディスク816、磁気ディスク820、光ディスク824、ROM 812、および/またはRAM 810に記憶することができる。そのようなオペレーティングシステム826、1つまたは複数のアプリケーションプログラム828、他のプログラムモジュール830、およびプログラムデータ832(またはこれらのいくつかの組合せ)のそれぞれは、分散型ファイルシステムをサポートする常駐構成要素のすべてまたは一部を実施することができる。
ユーザは、キーボード834およびポインティングデバイス836(例えば、「マウス」)のような入力装置を介してコマンドおよび情報をコンピュータ802に入力することができる。他の入力装置838(具体的には図示せず)は、マイクロフォン、ジョイスティック、ゲームパッド、衛星パラボラアンテナ、シリアルポート、スキャナなどを含むことができる。これらおよび他の入力装置は、システムバス808に結合されるが、パラレルポート、ゲームポート、またはユニバーサルシリアルバス(USB)のような他のインターフェースおよびバス構造によって接続することができる入出力インターフェース840を介して処理ユニット804に接続される。
モニタ842または他の種類の表示装置は、ビデオアダプタ844のようなインターフェースを介してシステムバス808に接続することもできる。モニタ842に加え、他の出力周辺装置は、入出力インターフェース840を介してコンピュータ802に接続することができるスピーカ(図示せず)およびプリンタ846のような構成要素を含むことができる。
コンピュータ802は、リモートコンピュータデバイス848のような1つまたは複数の遠隔コンピュータへの論理接続を使用してネットワーク接続された環境で動作することができる。一例として、リモートコンピュータデバイス848は、パーソナルコンピュータ、携帯型コンピュータ、サーバ、ルータ、ネットワークコンピュータ、ピアデバイスまたは他の共通ネットワークノードなどであってよい。リモートコンピュータデバイス848は、コンピュータ802に関して本明細書に記載の要素および特徴の多くまたはすべてを含むことのできる携帯型コンピュータとして示される。
コンピュータ802と遠隔コンピュータ848の間の論理接続は、ローカルエリアネットワーク(LAN)850および一般的なワイドエリアネットワーク(WAN)852として示される。このようなネットワーク接続環境は、職場、企業規模コンピュータネットワーク、インターフェース、およびインターネットでは一般的である。
LANネットワーク接続環境で実施される場合、コンピュータ802はネットワークインターフェースまたはアダプタ854を介してローカルネットワーク850に接続される。WANネットワーク接続環境で実施される場合、コンピュータ802は、通常、モデム856またはワイドネットワーク852を介して通信を確立するための他の手段を含む。コンピュータ802に内蔵されていても外付けであってもよいモデム856は、入出力インターフェース840または他の適切な機構を介してシステムバス808に接続することができる。図示したネットワーク接続は一例であり、コンピュータ802と848の間の1つ以上の通信リンクを確立する他の手段を利用することができるということを理解されたい。
コンピューティング環境800と共に図示されたネットワーク接続された環境では、コンピュータ802に関して示されたプログラムモジュールまたはその一部は、遠隔メモリ記憶装置に記憶することができる。一例として、遠隔アプリケーションプログラム858は、遠隔コンピュータ848のメモリ装置に常駐する。説明のために、アプリケーションプログラムとオペレーティングシステムのような他の実行可能なプログラム構成要素とを本明細書では別個のブロックとして示す。ただし、このようなプログラムおよび構成要素は様々な時点でコンピューティングデバイス802の様々な記憶構成要素に常駐し、コンピュータの1つ以上のデータプロセッサによって実行されることを理解されたい。
本明細書では様々なモジュールおよび技術は、1つまたは複数のコンピュータまたは他の装置によって実行されるプログラムモジュールのようなコンピュータ実行可能命令の一般的な状況で説明することができる。一般に、プログラムモジュールは、特定タスクを実行し、特定の抽象データ型を実施するルーチン、プログラム、オブジェクト、構成要素、データ構造などを含む。通常、プログラムモジュールの機能は、適宜、様々な実施形態で結合されても分散されてもよい。
これらモジュールおよび技術の実施態様は、コンピュータ可読媒体のある種の形態に記憶し、またはこれを横断して伝送することができる。コンピュータ可読媒体は、コンピュータがアクセスすることのできるいかなる使用可能な媒体であってもよい。限定ではなく、一例として、コンピュータ可読媒体は、「コンピュータ記憶媒体」および「通信媒体」を含むことができる。
「コンピュータ記憶媒体」は、コンピュータ可読命令、データ構造、プログラムモジュール、または他のデータのような情報の記憶のためのいかなる方法または技術でも実施される揮発性および不揮発性の取り外し可能および取り外し不可能な媒体を含む。コンピュータ記憶媒体は、限定はしないが、RAM、ROM、EEPROM、フラッシュメモリまたは他のメモリ技術、CD−ROM、デジタル多用途ディスク(DVD)、または他の光記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶または他の磁気記憶装置、または所望の情報を記憶するために使用することができ、コンピュータがアクセスすることのできる任意の他の媒体を含む。
「通信媒体」は、通常、コンピュータ可読命令、データ構造、プログラムモジュール、もしくは搬送波または他の搬送機構のような変調されたデータ信号形式の他のデータを実施する。通信媒体は、いかなる情報伝達媒体をも含む。「変調されたデータ信号」という用語は、情報を信号に符号化することに関する方法で設定または変更されるその特徴の1つまたは複数を有する信号を意味している。限定ではなく、一例として、通信媒体は、有線ネットワークまたは直接有線接続のような有線媒体と、アコースティック、RF、赤外線、および他の無線媒体のような無線媒体とを含む。上記のどの組合せでもコンピュータ可読媒体の範囲に含まれる。
あるいは、フレームワークの部分は、ハードウェア、またはハードウェア、ソフトウェア、および/またはファームウェアの組合せで実施することができる。例えば、1つまたは複数の特定用途向け集積回路(ASIC)またはプログラム可能論理装置(PLD)は、フレームワークの1つまたは複数の部分を実施するために設計またはプログラムすることができる。
結論
以上、本発明は、構造上の特性および/または方法上の動作特有の言い回しで説明したが、首記の特許請求の範囲で定義した本発明を、記載の特有の機能または動作に限定することは必要ないということを理解されたい。そうではなく、これら特有の機能および動作は、請求された発明を実施する形式例として開示されている。