JP2006244488A - 異なるアプリケーションフレームワーク間のデータサービスのためのプラットフォーム - Google Patents

異なるアプリケーションフレームワーク間のデータサービスのためのプラットフォーム Download PDF

Info

Publication number
JP2006244488A
JP2006244488A JP2006047523A JP2006047523A JP2006244488A JP 2006244488 A JP2006244488 A JP 2006244488A JP 2006047523 A JP2006047523 A JP 2006047523A JP 2006047523 A JP2006047523 A JP 2006047523A JP 2006244488 A JP2006244488 A JP 2006244488A
Authority
JP
Japan
Prior art keywords
data
application
cdp
platform
framework
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2006047523A
Other languages
English (en)
Inventor
Anil K Nori
ケー.ノリ アニル
T Whitten Arthur
ティー.ホイッテン アーサー
Dale Woodford
ウッドフォード デイル
A Blakeley Jose
エー.ブレークレイ ジョゼ
Pedro Celis
チェリーズ ペドロ
Praveen Seshadri
セシャドリ プラビーン
Sameet H Agarwal
エイチ.アガーワル サミート
Terek Soner
テレク ソナー
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Corp
Original Assignee
Microsoft Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Microsoft Corp filed Critical Microsoft Corp
Publication of JP2006244488A publication Critical patent/JP2006244488A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/28Databases characterised by their database models, e.g. relational or object models
    • G06F16/289Object oriented databases
    • BPERFORMING OPERATIONS; TRANSPORTING
    • B60VEHICLES IN GENERAL
    • B60NSEATS SPECIALLY ADAPTED FOR VEHICLES; VEHICLE PASSENGER ACCOMMODATION NOT OTHERWISE PROVIDED FOR
    • B60N3/00Arrangements or adaptations of other passenger fittings, not otherwise provided for
    • B60N3/02Arrangements or adaptations of other passenger fittings, not otherwise provided for of hand grips or straps
    • B60N3/023Arrangements or adaptations of other passenger fittings, not otherwise provided for of hand grips or straps movable
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/25Integrating or interfacing systems involving database management systems
    • G06F16/258Data format conversion from or to a database

Landscapes

  • Engineering & Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Transportation (AREA)
  • Mechanical Engineering (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Stored Programmes (AREA)
  • Communication Control (AREA)

Abstract

【課題】共通のデータストアと複数の異なるアプリケーションフレームワークの複数のアプリケーションとの間でデータ管理を行う。
【解決手段】データの保存を容易にするデータストレージコンポーネントが提供される。データは構造化、半構造化、および非構造化データを含む。共通データプラットフォームがデータストレージコンポーネントへのインタフェースとなることにより、複数の異なるアプリケーションフレームワークによりアクセス可能なデータサービスを提供する。このデータサービスにより、異なるフレームワークの対応するアプリケーションがデータにアクセスすることが可能となる。
【選択図】図1

Description

本発明は、異なるアプリケーションフレームワーク間のデータサービスのためのプラットフォームに関する。
データはほとんどあらゆるアプリケーションにおける重要な資産になっている。このことは、製品を閲覧して注文を生成するために利用される基幹業務(LOB)アプリケーションであるか、人々の間のミーティング(会議・会談・打ち合わせ)をスケジューリングするために用いられる個人情報管理(PIM)アプリケーションであるかを問わない。アプリケーションは、アプリケーションデータに対してデータアクセス/操作およびデータ管理の両方のオペレーションを実行する。典型的なアプリケーションのオペレーションでは、データ収集に対する問合せ(クエリ)を行い、結果セットを取ってきて、データの状態を変化させる何らかのアプリケーションロジックを実行し、そして最後に、記憶媒体にデータを持続する。
従来、クライアント/サーバー型アプリケーションは、クエリおよび持続アクションを、データ層に配備されたデータベース管理システム(DBMS)に委ねている。データ処理を中心とするロジックがある場合、それはデータベースシステム内のストアドプロシジャ(内蔵手続)としてコーディングされる。データベースシステムはテーブルおよび行という形でデータに機能し、アプリケーションは、アプリケーション層において、プログラミング言語オブジェクト(例えばクラスや構造体)という形でデータに機能する。アプリケーション層とデータ層におけるデータ操作サービス(およびメカニズム)のミスマッチ(不整合)は、クライアント/サーバー型システムでは許容されていた。しかし、ウェブ技術(およびサービス指向アーキテクチャ)の出現と、アプリケーションサーバーが広く受け入れられてきたことに伴い、アプリケーションは多層構造化しつつあり、さらに重要なことに、データが現在ではあらゆる層に存在することである。
このような階層化アプリケーションアーキテクチャでは、データが複数の層で操作される。また、アドレス指定能力および大容量メモリにおけるハードウェアの進歩に伴い、より多くのデータがメモリに常駐するようになっている。また、アプリケーションは、例えばオブジェクト、ファイル、およびXML(eXtensible Markup Language:拡張マークアップ言語)データのようなさまざまな種類のデータを扱うようになっている。
ハードウェアおよびソフトウェアの環境において、プログラミング環境に適切に統合された、リッチ(豊か)なデータアクセスおよび操作のサービスに対する需要が高まっている。上記の課題を解決するために導入された従来の実装の1つとしてデータプラットフォームがある。データプラットフォームは、アプリケーションプログラミング環境に適切に統合されたデータに対するアクセス、操作、および管理を行うために、アプリケーションに対してサービス(メカニズム)のコレクション(集合)を提供する。しかし、このような従来のアーキテクチャは多くの点で不十分である。このようなデータプラットフォームに対する主な要求には、複雑なオブジェクトモデリング、リッチなリレーションシップ(関連付けの指定)、論理的データ抽象化と物理的データ抽象化の分離、リッチなクエリを備えたデータモデル概念、アクティブな通知、および中間層インフラ基盤(基幹施設)とのより良い統合が含まれる。
以下に、本アーキテクチャのいくつかの態様の基本的理解を可能にするために、本発明の簡単な概要を提示する。この概要は、本発明の広範な概観ではない。この概要は、本発明の主要な要素を特定することや、本発明の範囲を画定することを意図していない。その唯一の目的は、後述するさらに詳細な説明の前置きとして、簡単な形で本発明のいくつかの概念を提示することである。
本明細書に開示され特許請求の範囲に記載される発明は、その一態様において、共通のデータストアと、複数の異なるアプリケーションフレームワークの複数のアプリケーションとの間でのデータ管理を容易にするアーキテクチャを含む。本アーキテクチャは、テーブルをオブジェクトにマッピングするために、マッピングレイヤ(マッピング層)をアプリケーションとは別個に定式化する。本アーキテクチャは、デスクトップアプリケーションと基幹業務(LOB)アプリケーションフレームワークの間のギャップ(すき間)を橋渡しすることにより、アプリケーションが、テーブルではなくアプリケーションオブジェクトのレベルでデータを扱うことができるようにする。さらに、本アーキテクチャは、エンドユーザアプリケーションによって定義されたデータエンティティがLOBアプリケーションによって使用可能となり、その逆も可能となるように、すべてのフレームワークにわたるこのデータの共有を可能にする。
本アーキテクチャは、データの保存を容易にするデータストレージコンポーネントを含む。このデータは、構造化、半構造化、および非構造化データを含む。共通データプラットフォームがデータストレージコンポーネントへのインタフェースとなることにより、複数の異なるアプリケーションフレームワークからアクセス可能なデータサービスを提供する。このデータサービスは、異なるフレームワークの対応するアプリケーションがデータにアクセスすることを可能にする。また、データプラットフォームは、公開クラス、インタフェース、および静的ヘルパ関数(static helper function)の形でアプリケーションとの通信を容易にするAPI(アプリケーションプログラムインタフェース)と、APIへのインタフェースとなりオブジェクトリレーショナルマッピング、クエリマッピングを提供し、制約(constraint)を執行するランタイムコンポーネントと、制約の宣言的作成を容易にしてデータプラットフォームのエンティティへのアクセスを制御する制約/セキュリティエンジンとをさらに含む。
本発明の別の態様において、共通データプラットフォーム(CDP)が、さまざまなエンドユーザ(最終使用者)のアプリケーションフレームワーク間で(例えばPIM(個人情報マネージャ))フレームワークからLOB(基幹業務)アプリケーションフレームワークまで)共通するデータサービスを提供する。アプリケーションの範囲には、エクスプローラ(ファイル管理ソフト)、メール、およびメディアアプリケーションのようなエンドユーザアプリケーション、ドキュメント管理アプリケーションやコラボレーションアプリケーションのような知識労働者向けアプリケーション、企業資源計画(統合業務ソフト)(ERP:Enterprise Resource Planning)および顧客関係管理(CRM:Customer Relationship Management)のごときLOBアプリケーション、ウェブアプリケーションならびにシステム管理アプリケーションが含まれる。
本発明のさらに別の態様において、CDPは、構造化、半構造化、および非構造化データをモデリングし保存する能力を提供するリッチなストア、フレキシブルな編成、リッチなクエリ/検索、リッチな挙動、フレキシブルな管理、データ同期、共有、スキーマ、および多層環境におけるフレキシブルなデプロイメント(クラスファイルをWebアップリケーションサーバーに配置すること)等の利益をアプリケーションに提供する。
上記の目的および関連する目的を達成するため、本明細書において、以下の説明および添付図面を用いて本アーキテクチャのいくつかの例示的態様を説明する。しかし、これらの態様は、本アーキテクチャの原理を用いることができる種々の方法のほんの一部を示すに過ぎず、本発明は、すべてのこのような態様およびその均等物を含むことを意図している。本アーキテクチャのその他の利点および新規な特徴は、以下の本発明の詳細な説明を図面とともに考慮することで明らかとなるであろう。
以下、図面を参照して本アーキテクチャを説明する。図中、同一参照番号は一貫して同一要素を指すために用いられる。以下の説明では、説明の目的上、本発明の十分な理解を可能にするために数多くの具体的詳細が記載される。しかし、これらの具体的詳細なしで本アーキテクチャを実施し得ることは明らかであろう。他の場合には、本アーキテクチャの説明を容易にするために、周知の構造および装置(デバイス)はブロック図形式で示される。
本明細書で使用される場合、「コンポーネント」および「システム」という用語はコンピュータ関連のエンティティを指すことを意図しており、ハードウェア、ハードウェアとソフトウェアの組合せ、ソフトウェア、あるいは実行中のソフトウェアのいずれかを問わない。例えば、コンポーネントは、プロセッサ上で動作するプロセス、プロセッサ、オブジェクト、実行可能ファイル、実行スレッド、プログラム、および/またはコンピュータであり得るが、これらに限定されない。実例として、サーバー上で動作するアプリケーションおよびそのサーバーの両方がコンポーネントであり得る。1つまたは複数のコンポーネントがプロセスおよび/または実行スレッド内に存在してもよいし、コンポーネントが1つのコンピュータに局在すること、および/または2つ以上のコンピュータに分散されることが可能である。
データプラットフォームは、アプリケーションプログラミング環境に適切に統合されたデータに対するアクセス、操作、および管理を行うために、アプリケーションに対してサービス(メカニズム)のコレクションを提供するプラットフォームである。本発明は、従来のデータプラットフォームに対する改良である。本アーキテクチャは、さまざまなアプリケーションフレームワーク(例えばPIM(個人情報管理)フレームワークおよびLOB(基幹業務)フレームワーク)間で共通するデータサービスを提供する共通データプラットフォーム(CDP)である。アプリケーションの範囲には、エクスプローラ、メール、およびメディアアプリケーションのようなエンドユーザアプリケーション、ドキュメント管理アプリケーションやコラボレーションアプリケーションのような知識労働者向けアプリケーション、ERP(Enterprise Resource Planning)およびCRM(Customer Relationship Management)のようなLOBアプリケーション、ウェブアプリケーションならびにシステム管理アプリケーションが含まれる。
CDPは、アプリケーションに少なくとも以下の利益を提供する:
1.リッチなストア:すべての種類のデータ(構造化、半構造化、および非構造化)をモデリングし保存する能力。
a.リレーショナルデータモデリングおよびアクセス。
b.リッチなオブジェクト抽象化およびプログラミング環境。
c.XMLストレージおよびクエリによる半構造化データモデリング。
d.ファイルとしての非構造化データ。
2.フレキシブルな編成:オブジェクトの任意のコレクションを、静的にテーブルとしてではなく、編成する能力。
a.ファイルシステム名前空間および編成のサポート。
3.リッチなクエリ/検索:すべてのデータに対してクエリを行う能力。
a.リッチなクエリのサポート(例えばSQL、OSQL(オブジェクト指向SQL)、XMLクエリ、C#シーケンス)。OSQLは、SQLのスーパーセットである関数型言語である。
4.リッチな挙動:リッチなデータ挙動のサポート。これは、アプリケーション/ビジネスのプロセスロジックの置換ではない。
5.フレキシブルな管理:さまざまな粒度(グラニュラリティ)での管理(例えば、コピー、移動、およびシリアライズのようなアイテムレベルのオペレーション)。
6.データ同期:データの任意のコレクションのピアツーピアおよびマスタ−スレーブ同期。
7.共有:複数のアプリケーションおよび複数のアプリケーションフレームワークの間でデータを共有する能力。例えば、Outlook(アウトルック;本件特許出願人の個人情報管理ソフト)とCRMアプリケーションの間での連絡先(Contacts)の共有。
8.スキーマ:ユーザアプリケーションとISV(独立系サポートベンダ)アプリケーションの相互のコラボレーションを容易にするための、リッチですぐに使えるスキーマ。
9.フレキシブルなデプロイメント:2層および3層環境にデプロイ可能。
CDPおよび関連するアーキテクチャは上記のすべての利点を可能にする。主な技術革新として、階層化アーキテクチャ、複数のアプリケーションフレームワーク間で共通のモデリング概念を取り出した共通データモデル、およびCDPコンポーネント(機能的)アーキテクチャがある。
まず図面を参照すると、図1は、CDP102を使用するシステム100を示している。CDP102は、データアプリケーションおよびアプリケーションフレームワーク104と、データストア106上のデータとの間でのデータ管理を提供するために使用される。データストア106は、例えば構造化、半構造化および非構造化データ型を保存できる。前述のように、CDP102は、アプリケーションフレームワークおよびそれに関連するエンドユーザアプリケーション間で共通するデータサービスを提供する。また、CDP102は、アプリケーションおよびアプリケーションフレームワーク104、ランタイムコンポーネント110、および制約/セキュリティエンジンコンポーネント112とのインタフェースを容易にするAPI108を含む。API108は、公開クラス、インタフェース、および静的ヘルパ関数の形でCDPを用いてアプリケーションに対するプログラミングインタフェースを提供する。例として、StorageContext、StorageSearcher、Entity、TableSet、Table、EntityReference、およびTableReferenceがある。理解されるように、データベースプログラミング言語統合(例えばC#シーケンスオペレータ)がAPI108の一部であり得る。
CDPランタイムコンポーネント110は、公開APIレイヤ108に公開される種々の機能を実装するレイヤである。これは、オブジェクトリレーショナルマッピングおよびクエリマッピングの提供やデータモデル制約の強制等によって、共通データモデルを実装する。すなわち、CDPランタイム110は以下のものを含む:共通データモデルコンポーネントの実装;クエリプロセッサコンポーネント;セッション・トランザクションコンポーネント;オブジェクトキャッシュ、これはセッションキャッシュおよび明示的キャッシュを含み得る;変更追跡、コンフリクト検出、およびイベンティングを含むサービスコンポーネント;カーソル・ルールコンポーネント;ビジネスロジックホスティングコンポーネント;および永続化・クエリエンジン、これは、コア永続化およびクエリサービスを提供する。永続化・クエリサービス内には、クエリ/更新マッピングを含むオブジェクトリレーショナルマッピングがある。また、CDP102は、制約/セキュリティエンジン112も含む。制約/セキュリティエンジン112は、データストア106に対する制約およびセキュリティポリシ(例えばロールに基づくセキュリティ)の適用を図る。
図2は、より詳細なCDPシステム200を示している。CDPシステム200はCDP102を含み得る。CDP102は、別個のデータストア(図示せず)のストア管理コンポーネント202とのインタフェースとなる。別法として、ストア管理コンポーネント202は、SQLサーバー実装に関連し得るもののようなデータストアを含むことができる。理解されるように、データストアは、構造化、半構造化および非構造化データ型を保存することができる。
CDPの1つの目標は、さまざまなアプリケーションフレームワーク204(AF1,AF2,...,AFZで表す)に対するサポートを可能にすることによって、迅速なアプリケーション開発をサポートすることである。フレームワーク204は、例えばLOB、エンドユーザ、およびシステム管理のアプリケーションフレームワークを含み得る。アプリケーションフレームワーク204(それぞれAF1,AF2,...,AFZ)に関連するアプリケーション206(APP1,...,APPS;APP1,...,APPTで表す)は、それぞれのアプリケーションフレームワーク204、CDP102、および基礎となるストア202を活用することで、リッチなアプリケーションを開発できる。階層化手法の利点は以下で説明する。
ストア管理レイヤ202はコアデータ管理能力(例えばスケーラビリティ、容量、アベイラビリティおよびセキュリティ)のサポートを提供する。CDPレイヤ102は、アプリケーションフレームワーク204に対し、リッチなデータモデル、マッピング、クエリ、およびデータアクセスメカニズムをサポートする。CDPメカニズムは、複数のアプリケーションフレームワーク204がデータプラットフォーム上に構築され得るように拡張可能である。アプリケーションフレームワーク204は、アプリケーションドメイン(例えばエンドユーザアプリケーションおよびLOBアプリケーション)に固有の付加的なモデルおよびメカニズムである。階層化アーキテクチャ手法はいくつかの利点を有する。これによれば、各レイヤを独立に、そして迅速に改良しデプロイすることが可能となる。CDPレイヤ102は、より軽快になり、改良の自由度がより高くなり、ストアレイヤ202よりも頻繁に改良可能となる。階層化手法は、CDPレイヤ102を企業ストラテジ(戦略情報)に連携させる。そして最後に、ストアレイヤ202は、ストラテジと整合性をもちながら、コアデータ(柱となるデータ)の管理能力に集中することができる。
次に図3を参照して、共通データプラットフォームを実装する方法を示す。説明を簡単にする目的上、本明細書において、例えばフローチャート形式で示される1つまたは複数の方法は一連のアクト(行為)として図示され説明されているが、理解され認識されるように、本アーキテクチャはそれらのアクトの順序に限定されない。本発明によれば、一部のアクトは、図示され本明細書に記載されるものとは異なる順序で、および/または他のアクトと並行して生起し得る。例えば、当業者には理解され認識されるように、本方法は、別法として、状態図のように、相互に関係する一連の状態またはイベント(事象)として表現してもよい。さらに、本アーキテクチャによる方法を実装するために、例示されたすべてのアクトが必須とは限らない。
300において、構造化、半構造化および非構造化データ型をモデリングしデータストアに保存するコアデータ管理レイヤが提供される。302で、CDP110レイヤが、コアデータ管理レイヤ上に適用されることにより、アプリケーションフレームワークに対するリッチなデータモデル、マッピング、クエリ、およびデータアクセスメカニズムをサポートするデータサービスが提供される。304で、1つまたは複数のアプリケーションフレームワークがCDPの上にオーバーレイされる。306で、CDPによって提供されるデータサービスを通じてデータストアのデータにアクセスできるようになった各アプリケーションフレームワーク内に、1つまたは複数のアプリケーションが提供される。
図4は、本アーキテクチャのCDPコンポーネントの概略図である。理解されるように、この概略図におけるいずれのコンポーネントおよび/またはボックスの配置も、プロセス/マシンの境界を越えた特定のデプロイメントを意味する(あるいは必然的に回避する)ものではない。CDPは、楽観的並行処理モデル(optimistic concurrency model)を利用することにより、変更を保存すべきであって他の変更が既に基礎データに対してなされている場合には、コンフリクト(衝突)検出がアプリケーション固有の方法でこれを解決する。効果的なデータプラットフォームであるために、CDPは、プログラミング言語統合、リッチなデータモデリング、永続化フレームワーク、サービス等の機能を含む。API108は、言語統合、およびアプリケーション400によるCDPランタイム110経由でのストア202へのデータアクセスを容易にする。ドメイン不可知(domain agnostic)であるということは、CDPがデータの性質および形式ならびにそれに対して要求される意味論的制約に関して必要最小限の仮定しか置かないことを意味する。この目的のため、CDPは以下の機能(詳細は後述)を提供する。
共通データモデル(CDM):CDPランタイム110の中心にはCDM402がある。CDM402の目的は、主としてユーザデータ(PIM、ドキュメント等)ないしLOBおよび企業データを処理するアプリケーションから、複数のアプリケーションドメインにわたり共通するモデリングコンセプト(構想、概念)を取り出すことである。リッチなオブジェクトおよびリレーションシップの抽象化を提供することに加えて、CDM402は、構造化、半構造化および非構造化データのサポートを提供する。
行/エンティティデータ − CDM402は、リッチなエンティティ−リレーションシップモデルをサポートすることにより、構造化データ(例えばビジネスデータ)の構造および挙動を捕捉する。CDM402は、コアリレーショナルモデルのスーパーセットであり、リッチなオブジェクト抽象化およびリレーションシップモデリング(例えば、ドキュメント(Documents)と連絡先(Contacts)の間の作成者(Author)リレーションシップ;購入注文書(Purchase Orders)と注文明細行(Order Lines)の間の明細行(Lines)リレーションシップ)について拡張されている。
ファイルデータ − CDM402は、非構造化(ファイル)データを保存し操作するための「ファイルストリーム」データ型をサポートする。ファイルストリームデータ型は、データをファイルとして保存でき、ファイルアクセスAPIをサポートする。ファイルストリームデータ型は、SQL(構造化照会言語)サーバーでネイティブに(そのままで)サポートされ、NTFSファイルストリームにマッピングされ、ファイルハンドル/ストリームに基づくすべてのオペレーションをサポートする。非構造化コンテンツをCDM402におけるファイルストリームとしてモデリングすることに加えて、エンティティ型を用いて、有用なコンテンツを構造化プロパティ(属性)に進展させることができる。データベース型ファイルストレージシステムは、ファイルバックトアイテム(file backed item)というコンセプト(概念)を規定している。これは、非構造化コンテンツのファイルストリームとともに構造化プロパティをモデリングするエンティティである。ファイルバックトアイテムは、関連するファイルストリームに対するストリーム系オペレーションとともに、リッチなクエリを提供する。
XMLデータ − XML文書は、CDM402において次の2つの主要な方法にモデリングできる:(1)それをXMLデータ型として保存し、(2)XML文書を(例えばデータコントラクトと同様の)1つまたは複数のエンティティにマッピングする。CDM402は、SQLサーバーでサポートされるようなXMLデータ型をサポートする。XMLデータ型は、任意のエンティティプロパティの型であり得る。XMLデータ型は、型付けされていないXML文書あるいは型付けされたXML文書のいずれをも保存することを可能にする。XML文書プロパティに1つまたは複数のXMLスキーマを関連づけることによって強い型付けが提供される。
API108における、クエリを含むプログラミング言語統合:コアCDP機能コンポーネント、すなわちセッション/トランザクション404、クエリ406、永続化(persistence)408、カーソル410、サービス412、オブジェクトキャッシュ414およびビジネスロジックホスティング416が、CDP API108で利用可能ないくつかの「ランタイム」クラス内にカプセル化される(例えばStorageContext)。CDM402で作成される型に基づいて、CDP設計時ツールが、強く型付けされたCLR(共通言語ランタイム)クラスを生成する。CDPは、CDM402によって定義される型システム上のクエリ言語を要求する。CDPは、そのクエリ言語としてC#シーケンスオペレータおよびOPATHをサポートできる。本発明の目的上、CDPによってサポートされるクエリ言語は一般に共通クエリ言語(CQL)と呼ばれる。CQLは、コアリレーショナル代数(例えば選択(select)、結合(join)、および射影(project)演算子)を包含するとみなされる。構文はSQLと同一でなくてもよいが、CQLはSQLに直接マッピングできる。CQLは、プログラマが扱うオブジェクト構造体に対するリッチなクエリを可能にする。目標は、C#グループによって行われているシーケンスオペレータの仕事にCQLを連携させることである。これらの機能は、リレーショナルデータベース管理システム(RDBMS)に保存されたデータ(あるいは任意の他のCDP対応データ)に対して、強く型付けされた、オブジェクトに基づく抽象化を効果的に提供する。さらに、CDPの永続化フレームワークを用いることにより、POCO(Plain Old CLR Object:平凡な旧型のCLRオブジェクト)に対する持続的な永続化およびクエリができる。
永続化エンジン − 永続化エンジンは、リレーショナルストアに由来するコンポーネント断片からどのようにしてオブジェクトが組み立てられるかを厳密に記述する宣言的マッピング定義を提供する。このエンジンは、オブジェクトクエリ式を用いてクエリプロセッサによって定義される式を受け取り、それを宣言的マッピングと結合するクエリ生成コンポーネント(図示せず)を含む。これが、データベース内の基礎テーブルにアクセスする等価なクエリ式となる。更新生成コンポーネント(図示せず)が、変更追跡サービスを参照し、マッピングメタデータの助けを借りて、オブジェクトの世界での変更をどのようにしてテーブルの世界での変更に翻訳するかを記述する。
ファイルおよびXMLデータのクエリ/検索 − 上記で説明したように、CDM402は、それぞれファイルストリームデータ型およびXMLデータ型を用いて非構造化データおよび半構造化データを保存する。CQLは、これらのデータ型に対するクエリが可能である。構造化エンティティに昇格したファイルコンテンツ(例えばWinFSファイルバックトアイテム)の場合、CQLのリレーショナル演算子がこれらのエンティティにクエリをすることができる。ファイルストリームとして保存された非構造化データは、全文検索を用いてクエリができる。XMLコンテンツはXPathまたはXQueryを用いてクエリができる。
オブジェクトリレーショナル(O−R)マッピング:CDPは、リレーショナル(表形式)ストレージの上にオブジェクトに基づく抽象化を提供するので、O−Rマッピングコンポーネントを提供することを必要とする。CDPは、規範的マッピング(マッピングがどのように起こるかをCDPが決定する)および非規範的マッピング(型設計者がマッピングを指定する何らかの自由度を有する)の両方をサポートする。なお、データベース型ファイルストレージシステム実装は現在、規範的マッピングを使用しているが、より一般的なO−R永続化フレームワークは非規範的マッピングを必要とすることに留意されたい。
キャッシング:CDPランタイムは、クエリ結果(例えばカーソル)およびコミットしていない更新のキャッシュを保持する。これは「セッションキャッシュ」と呼ばれる。また、CDPは「明示的キャッシュ」も提供する。これは、アプリケーションが非連結モードで働くことを可能にする。CDPは、明示的キャッシュ内のデータに対する種々の整合性保証を提供する。このキャッシュは、ディスク上のデータ本体をメモリ内オブジェクトと関係づけることによって同一性管理(identity management)を実行する。
クエリプロセッサ(QP):ストアに対するクエリの際に、CQLクエリはSQLにマッピングされる。しかし、明示的キャッシュに対するクエリの際には、CQLクエリはQPコンポーネントによって処理される。データベースアクセスはクエリプロセッサを経由する。クエリプロセッサにより、フロントエンドが複数のクエリ言語を扱えることで、複数のクエリ言語が表現され、その後内部標準フォーマットにマッピングされることが可能となる。これは、ドメインモデルと、それが作用しているアプリケーションのオブジェクトとを用いて行われる。そして、クエリは、パイプラインであるプロセッサに渡された後、バックエンド固有のクエリに変換される。
カーソル:CDPは、前方専用カーソルおよびスクロール可能カーソルの両方を提供する。カーソルは、通知、展開/折り畳み状態を有するマルチレベルグルーピング、動的ソーティングおよびフィルタリングをサポートする。
ビジネスロジックホスト:CDPは、型/インスタンスに関して、およびオペレーションに関してデータ中心ロジックをホスティングするランタイム環境を提供する。このようなデータ中心ビジネスロジックは、アプリケーションサーバーにおいてホスティング可能なアプリケーション/ビジネスプロセスロジックとは異なる。オブジェクトはデータベース内の単なる行ではない。オブジェクトは、メモリ内に実体化されると、実際に、アプリケーションが呼び出せる挙動を有するオブジェクトとなる。システム内には、主としてイベントおよびコールバックである拡張ポイントがあり、これらはすべて、実行時にCDPを拡張するように動作する。これらのオブジェクトは単なるオブジェクトではなく、CLRオブジェクト、.NETオブジェクト等である。CDPは、それらのオブジェクトにおけるプロパティやメソッド呼び出しに割り込む能力を有する。アプリケーションは、これらのオブジェクトの挙動をカスタマイズすることができる。
サービス:CDPは、すべてのCDPクライアントに利用可能なサービスの中心的なセットを提供する。これらのサービスはルール、変更追跡、コンフリクト検出、イベンティング、および通知を含む。イベンティングは、CDPランタイム110をフレームワークレベルのサービスやアプリケーションに対するサービスから拡張してさらに挙動を追加し、また、ユーザインタフェースにおけるデータバインディングのためにも使用される。
制約:CDPは、制約/セキュリティコンポーネント112を提供することにより、少なくとも、型設計者が制約を宣言的に作成できるようにする。こうした制約はストアで実行される。一般に、CDP制約のスコープは、長さ、精度、スケール、デフォルト、チェック等のような概念を包含する。これらの制約は実行時にCDP制約エンジンによって強制される。
セキュリティ:CDPは、ロールに基づくセキュリティモデルを提供する。すなわち、ユーザのクレデンシャルが、そのユーザの「ロール」(例えばアドミニストレータ、パワーユーザ、承認者等)を決定する。各ロールには、アクセスパーミションのセットが割り当てられる。CDPのセキュリティエンジンは、これらのセキュリティポリシを強制する。さらに、CDPは、CDP内のエンティティへのアクセスを制御するためのセキュリティモデルを提供する。セキュリティモデルは、オペレーティングシステムユーザの認証、エンティティの権限付与レベル(例えば読み出しおよび更新に対する別個のパーミション)等をサポートすることができる。
なお、制約/セキュリティコンポーネント112は、CDPランタイムコンポーネント110とは別個のエンティティとして動作できるので、CDPランタイムコンポーネント110とは別に図示していることに留意されたい。別法として、そしておそらくはより効率的には、制約/セキュリティコンポーネント112は、ストアコンポーネント202(これはデータベースシステムとすることができる)と統合される。
全体として、これらの機能は、複数の層にわたりフレキシブルにデプロイされることが可能なデータ中心アプリケーションおよびロジックを開発するための強力なプラットフォームを提供する。なお、この図におけるランタイムコンポーネント(あるいはボックス)の配置は、プロセス/マシンの境界を越えたいかなる特定のデプロイメントを意味する(あるいは必ず回避する)ものでもないことに留意されたい。これは、機能コンポーネントを示すために用いられる概略図である。
CDPアーキテクチャの主要な利点の1つとして、実装におけるフレキシビリティを提供することがある。これは次の2つのことを意味する:
1)図4に示したコンポーネントのいくつかは、複数のプロセス/層(Tier)に存在し得るという意味で「移動可能」である。具体的には、制約/セキュリティコンポーネント112は一般に、図2のストアプロセス202に存在する。
2)データプラットフォームが十分に機能するためには、図4に示したすべてのコンポーネントが実装される必要があるわけではない。具体的には、オブジェクトキャッシュ414はセッションキャッシュのみからなっていてもよい。別の実装では、キャッシュ414は、ストアと同期する明示的キャッシュを含み得る。クエリプロセッサ406は、オブジェクトキャッシュ414内のオブジェクトに対して作用する。
CDPのいくつかの機能および/またはコンポーネントを以下でさらに詳細に説明する。前述したように、CDPの中心には共通データモデル(CDM)402があり、CDM402の目的は、主としてユーザデータ(例えばPIM、ドキュメント等)ないしLOBおよび企業データを処理するアプリケーションから、複数のアプリケーションドメインにわたり共通するモデリング概念を取り出すことである。一般に、このような機能を実装するために利用可能な技法として次の2つの可能性がある:1)想定される(あるいは重要と想定される)あらゆるドメインに固有の概念をモデリングする。例えば、「顧客・取引先(Customer)」が何を意味するかを(LOBドメインから)正確に定義し、「人・人物(Person)」が何を意味するかを(ユーザドメインから)正確に定義する等。2)アプリケーション設計者が自己のドメイン特定型式、制約、リレーションシップを作成することができるようなフレキシブルな基盤を提供する。CDM402は、第2の手法を利用することにより、基本的な型(タイプ)の一組を提供し、新しい型を作成するためのフレキシブルなフレームワークを定義する。この意味で、CDM402は、データモデルである(例えば、いくつかの特定の型およびそれらのセマンティクスを実際に定義する)と同時に、データメタモデルでもある(例えば、他のモデルを規定することができる)ことが可能である。
CDM402のいくつかの特徴を以下で説明するが、これらは本発明に対する限定と解してはならない。データモデルは、リレーショナルデータモデルを包含し得る。すなわち、テーブル、行、クエリ、およびテーブルに対する更新の概念はCDM402によって公開される。CDM402は、テーブルおよび行よりもリッチな、データに対するオブジェクト抽象化を定義できる。特に、CDM402によれば、エンティティ、エンティティ間のリレーションシップ、継承(インヘリタンス)、束縛(コンテイメント)、およびそれらのコレクション(集合)のような概念を用いて、実社会の行為(real world artifact)をモデリングすることが可能となる。また、CDM402は、プログラミング言語の型システムを、その中でモデリングされたアプリケーション抽象化に緊密に連携させることによって、アプリケーション構造とストレージ構造の間のインピーダンスミスマッチを最小限にすることができる。さらに、2層および多層アプリケーションを可能にするため、アプリケーション挙動に対するサポート(例えばメソッド、関数)と、挙動のフレキシブルなデプロイメントを提供できる。また、CDM402は、基礎となる物理ストアとは独立に永続化セマンティクスを捕捉できるため、多様なストア上でCDM402の実装が可能となる。
CDM402は複数の概念を引き起こし得る。以下の概念が、ドメイン固有のデータモデルを設計するために実装されるように、メタモデルによって利用されることが可能である。特に、以下の概念は、CDM402の核心とみなすことができる:1)エンティティ型は、プロパティおよびメソッドのグルーピングのための、アプリケーション設計者の仕様であることが可能である。ここで、エンティティはエンティティ型のインスタンスである。理解されるように、エンティティ型は、継承階層(インヘリタンス・ヒエラルキー)を通じて組織化され得る。2)テーブルは、他のエンティティのプロパティであり得るエンティティのコレクションである。エンティティ、継承、およびテーブルを用いて、アプリケーションはデータ階層を再帰的に定義できる。テーブルは、所与のテーブルが所与の型またはその部分型のエンティティのみを含むことができるという意味で、強く型付けされることが可能である。3)テーブルセットは、そのプロパティがテーブルであるようなエンティティであることが可能である。これは、テーブルおよびエンティティを用いて定義された再帰的データ階層の基本的な場合である。これは、データベースの概念とほぼ同様であり得る。そして、4)リレーションシップは、エンティティ間の意味論的関連を表現できる。理解されるように、リレーションシップは、関連づけ(アソシエーション)、包含等を定義するように拡張可能である。
エンティティ、リレーションシップ、および/またはテーブルセットの定義は、例えばスキーマとの関連で生じ得る。本発明の目的上、スキーマの主要な目的は、スキーマで定義される要素の名前のスコーピングのための名前空間を定義することである。テーブルセットは、CDM402の「トップレベル」(最高位)を形成し得る。ストレージは、テーブルセットを作成することによって直接的および/または間接的に割り当てられることが可能である。例えば、次の擬似コードは、テーブルセットの一例を示している:
<Schema Namespace="MySchemas.MyLOB">
<TableSetType Name="LOBData">
<Property Name="Orders" Type="Table(Order)"/>
<Property Name="Customers" Type="Table(Customer)"/>
<Property Name="Products" Type="Table(Product)"/>
<Property Name="Suppliers" Type="Table(Supplier)"/>
<Property Name="PSLinks" Type="Table(ProductSupplierLink)"/>
</TableSetType>
<TableSet Name="LOB" Type="TableSetType"/>
</Schema>
エンティティ型は、それに関連づけられたプロパティおよびメソッドを有することができる。プロパティ、メソッドパラメータおよびメソッド返値の型を指定するため、CDM402はいくつかの組込み型を提供する:1)単純型:Int32、string、他のCLR値の型;2)列挙型:CLR enumと同等;3)参照型(後述);および、4)配列型:インライン型(下記)の順序付きコレクション。これらの組込み型のプロパティをまとめることによりインライン型を作ることができる。インライン型は、他のインライン型のメンバを有することができる。以下は、上記の一例である:
<InlineType Name="Address">
<Property Name="Line1" Type="String" Nullable="false">
<Length Maximum="100"/>
</Property>
<Property Name="Line2" Type="String" Nullable="true">
<Length Maximum="100"/>
</Property>
<Property Name="City" Type="String" Nullable="false">
<Length Maximum="50"/>
</Property>
<Property Name="State" Type="String" Nullable="false">
<Length Minimum="2" Maximum="2"/>
</Property>
<Property Name="ZipCode" Type="String" Nullable="false">
<Length Minimum="5" Maximum="5"/>
</Property>
</InlineType>
エンティティは、組込み型および/またはインライン型を利用することにより構築できる。例えば、次の擬似コードはエンティティを示す:
<EntityType Name="Customer" Key="CustomerId">
<Property Name="CustomerId" Type="String" Nullable="false">
<Length Minimum="10" Maximum="10"/>
</Property>
<Property Name="Name" Type="String" Nullable="false">
<Length Maximum="200"/>
</Property>
<Property Name="Addresses" Type="Array(Address)">
<Occurs Minimum="1" Maximum="3"/>
</Property>
<NavigationProperty Name="Orders" Association="OrderCustomer"
FromRole="Customer" ToRole="Orders"/>
</EntityType>
エンティティ(テーブルセットを除く)は、あるテーブル内に含まれることが可能である。その少なくとも1つの理由は、テーブルセットはトップレベルの組織単位であり、テーブルセットはテーブルから構成されるからである。テーブルスコープ内では、各エンティティは一意のキー値を有することができる。ストア全体にわたるスコープでは、各エンティティは一意の識別(すなわち、そのキー値にそのテーブルの識別を再帰的に連結したもの)を有することができる。エンティティは、キーおよび/または識別によって参照可能なCDM402内の最小単位であり得る。ストレージ操作はエンティティを対象とすることができ、そのような操作としては、永続化、保存、移動、コピー、削除、名前変更、バックアップ、リストア等が挙げられるが、これらに限定されない。インライン型インスタンスは、包含する側のエンティティとの関連で使用可能である。CDM402は、抽象エンティティ型の概念を定義することができ、これはCLRにおける抽象クラスとほぼ同様である。すなわち、これは直接インスタンス化することはできず、他のインスタンス可能な型を作成するために派生可能なだけである。
エンティティ参照は、エンティティへの持続的・永続的な参照として定義できる。参照値はエンティティ識別全体に値をとる。エンティティを間接演算(indirecting)することでその参照が得られ、参照を逆参照(dereference:参照外し、参照剥がし、間接参照、参照値の読み出し、参照先データの取得等とも称されている)することでエンティティインスタンスが得られる。参照の主要な目的は、エンティティ共有を可能にすることである。例えば、同じ顧客のすべての注文が、Ref(Customer)プロパティについて実質的に類似の値を有する場合、注文エンティティは顧客エンティティを共有すると称する(例えば下記のコードサンプルの第6コード行が一例である)。
CDM402に関連するデータは、その構成部分間にリレーションシップを有する。リレーショナルモデルは、リレーションシップを明示的にはサポートしない。PK/FK/参照完全性は、限定された形でリレーションシップを実装するためのツールを提供する。しかしながら、CDM402は、アソシエーションおよびコンポジションを用いて、リレーションシップの明示的な概念的モデリングをサポートする。アソシエーションおよびコンポジションの能力を理解するため、次の例を挙げることができる:
1. <EntityType Name="Order" Key="OrderId">
2. <Property Name="OrderId" Type="String" Nullable="false">
3. <Length Minimum="10" Maximum="10"/>
4. </Property>
5. <Property Name="Date" Type="DateTime" Nullable="false"/>
6. <Property Name="Customer" Type="Ref(Customer)"
7. Association="OrderCustomer"/>
8. <Property Name="Lines" Type="Table(OrderLine)"
9. Composition="OrderOrderLine"/>
10. <Property Name="ShippingAddress" Type="Address"
Nullable="false"/>
11. </EntityType>
12. <Association Name="OrderCustomer">
13. <End Role="OrderRole" Type="Order" Multiplicity="*"
14. Table="SalesData.Customers"/>
15. <End Role="CustomerRole" Type="Customer" Multiplicity="1"/>
16. <Reference FromRole="OrderRole" ToRole="CustomerRole"
Property="Customer"/>
17. </Association>
18. <Composition Name="OrderOrderLine">
19. <ParentEnd Role="Order" Type="Order" Property="Lines"/>
20. <ChildEnd Role="OrderLine" Type="OrderLine"
Multiplicity="100"/>
21. </Composition>
アソシエーションは、エンティティ間のピアツーピア(peer to peer)リレーションシップを表現できる。上記の例では、注文がアソシエーション(Association)を通じて顧客に関係づけられている。上記のコードサンプルにおいて第6行は、注文が、関連する顧客(これは参照プロパティCustomerによって指定される)を有することを示している。このアソシエーションの性質は第12〜15行で定義されている。これは、OrderCustomerアソシエーションがOrderからCustomerへのアソシエーションであることを示している(第15行)。また、各Customerについて(第15行のMultiplicity="1")複数のOrderが存在し得る(第13行のMultiplicity="*")。上記の種類のアソシエーションは、「参照アソシエーション」と呼ぶことができる。
CDM402は、他に2種類のアソシエーション、すなわち「値アソシエーション」および「アソシエーションエンティティによるアソシエーション」を定義する。値アソシエーションは、識別参照によってだけでなく、任意のプロパティによるリレーションシップの表現を可能にする(例えば、Document.Authorプロパティは等式条件によってContact.Nameと関係する)。アソシエーションエンティティは、リレーションシップのモデリングを可能にする。この場合、リレーションシップ自体が何らかのデータを持つ(例えば、会社と人の間の雇用リレーションシップは、その会社内の人の雇用期間や職位および肩書きのようなプロパティを持ち得る)。
コンポジション(Composition)は、親子リレーションシップおよび/または束縛リレーションシップを表現できる。Order(注文)とOrderLine(注文明細行)を考える(例えば、Orderは、あなたがあるウェブサイトでショッピングカートに入れたものの全体であり、OrderLineは、カート内の書籍、DVD等の個々の商品である)。各OrderLineは、Orderのコンテクスト内でのみ意味がある。OrderLineは、それを包含しているOrderの外部に独立して存在することができない。すなわち、OrderLineはOrder内に包含され、その有効期間はOrderの有効期間で決まる。
上記のリレーションシップは、コンポジションを用いてモデリングすることができる。第8行がコンポジションの一例を示している。LinesプロパティおよびOrderOrderLineコンポジション(第18〜21行)は、注文がその明細行を管理し、明細行はそれを含む注文に依存することを表現している。理解されるように、注文は親であり、明細行は子である。コンポジションとインライン型(inline type)の主要な相違点は、コンポジションがエンティティを含むという点である。すなわち、OrderLineは参照のターゲットであることが可能であるのに対して、インライン型は上記の例において参照のターゲットであるとすることはできない。
CDM402およびそれによるリレーションシップの明示的モデリングの1つの利点は、クエリに対するメタデータ(データに関する属性情報を記述するデータのこと)のサポートを提供することである。アップストリームのクエリもまた利用可能である。例えば、CDM402内にNavigationPropertyを実装することによって、顧客は、(明示的なバックポインタを保存することを必要とせずに)全注文検索を呼び出すことができる。これは、下記のコードフラグメントの第28行に示されている。
28. <EntityType Name=" Customer" Key="CustomerId">
29. <NavigationProperty Name="Orders" Association="OrderCustomer"
FromRole="Customer" ToRole="Orders"/>
30. </EntityType>
永続化エンジン408は、オブジェクトリレーショナルマッピングを含むことができる。すなわち、CDPによって提供されるモデリング、アクセス、およびクエリの抽象化はオブジェクトベースである。CDPによって利用される主なストレージ技術はリレーショナルベースである(例えばSQL2000)。永続化エンジン408は、オブジェクトリレーショナルマッピング(「O−Rマッピング」とも呼ぶ)を利用する。ここで、永続化エンジン408は、言語クラスを、基礎となるテーブル表現にマッピングすることができる。
永続化エンジン408は、O−Rマッピングを考慮する際に2つのケース、すなわち、1)規範的O−Rマッピング、および、2)非規範的O−Rマッピング、を提供できる。規範的O−Rマッピングは、CDP型の間のマッピングであって、それらのリレーショナル表現をCDPへとハードコードすることができる。型設計者には、基礎となるテーブルのレイアウトを選択する自由度がほとんどあるいは全くない。この一例として、データベース型ファイルストレージシステムが挙げられる。非規範的O−Rマッピングでは、開発者は、基礎となるストレージ構造にCLRクラスがどのようにマッピングされるかを選択するさまざまな自由度を有する。考えられる2つのサブケースがある。1)既存のリレーショナルスキーマをオブジェクトとして公開するサブケース。型設計者は、CDM型を設計するための高水準仕様言語、それらのCDM型に基づいてクラスを生成するためのツール、および型がテーブルにどのようにマッピングされるかを指定するフレキシビリティを利用する。この状況は、CDPアプリケーションが既存のリレーショナルアプリケーションと(実質的に類似のデータを使用するという意味で)並存してデプロイされる場合に生じる。例えば、自動車会社のIT部門がLOBアプリケーションを有しているが、(おそらくは段階的な移行戦略の一部として)同じデータに対するCDPアプリケーションを書きたい場合がある。ここで要求されるのは、LOBアプリケーションおよび新規なCDPアプリケーションの両方が同一データに対してともに動作することである。2)クラスのコレクションをリレーショナルスキーマに永続化するサブケース。開発者は、生成されているクラスを使用しない。むしろ、独自設計のクラスを利用する。開発者は、これらのクラスをリレーショナルスキーマにマッピングすることを望む。理解されるように、この要求を生じる多様な状況がある。
さらに、CDPは、設計時に利用可能なプログラミングサーフェス(図示せず)を含むことができる。プログラミングサーフェスは、CDPアプリケーション設計者および/またはプログラマにとって利用可能とすることができる。プログラミングサーフェスは次の3つの一般的領域に分類できる:1)設計時プログラミングツール(例えば、型設計者がCDM型およびその制約を作成し、これらの型からCLRクラスを生成し、型に挙動を追加するためのツール)、2)API(例えばCDPアプリケーションを書くためのクラスおよびメソッド)、ならびに、3)クエリ(例えばエンティティインスタンスのようなCDMオブジェクトにクエリを行うための言語)。プログラミングサーフェスのこれらのコンポーネントが相乗作用することで、基礎となるストアデータに対して、強く型付けされたオブジェクトベースの抽象化を提供する。
CDPは、エンティティ型、エンティティテーブル、エンティティ型間のリレーションシップ、および制約を定義するため、SQLのデータ定義言語やC#のクラス定義に類似した、宣言的な共通スキーマ定義言語(CSDL)を提供する。以下の3つの主要な設計時のコンポーネントがある。
1.APIジェネレータ。アプリケーション設計者は、CSDLを用いてCDM型およびリレーションシップを設計し、これらの型およびリレーションシップに対応する部分CLRクラスを生成するAPIG(「エイピグ」と読む)と呼ばれる設計時CDPツールを使用する。APIGにより生成されるクラスは、アプリケーションプログラマがアセンブリとして利用可能であり、C#のusing文を用いてアプリケーションプログラムから参照できる。APIGによって生成されるクラスは、ある意味で、標準的クラスである。すなわち、それらのクラスは、アプリケーションプログラム内のCDM型の直接的表現であり得る。一例として、アプリケーションが例えば以前に書かれたクラスライブラリ(グラフィクスパッケージ、数学パッケージ等)からのクラスを使用している場合のように、アプリケーションクラスがその定義に制約されることがある。アプリケーションは、CDPのオブジェクト永続化フレームワークを使用することにより、ストア内のこれらのクラスのインスタンスに対して持続的に永続化およびクエリを行うことができる。このようなオブジェクトはPOCO(Plain Old CLR Object)と呼ばれることがある。CDPはPOCO利用のケースもサポートする。
2.オブジェクトリレーショナルマッピング。CSDLのこのコンポーネントは、アプリケーション設計者が、テーブルやビューのようなストア概念と、CLRクラスとの間の具体的で非規範的なマッピングを宣言するのに役立つ。また、このコンポーネントは、CDM402に関して定義される制約がSQLの宣言的制約、トリガあるいはストアドプロシジャにどのようにマッピングされ得るかも指定することができる。
3.挙動。CSDLによれば、アプリケーション設計者は、ビジネスロジックのどの部分がインスタンスメソッドとして、静的関数として、あるいはストアドプロシジャとして実装されるかを決定できる。また、CSDLは、ロジックが動作し得る層(例えばCDPランタイムかストアか)も決定することができる。
さらに、プログラミングサーフェスはCDP APIを含むことができ、これに対してプログラミングサーフェスアプリケーションを書くことができる。CDP APIは次の3つのサブパートを有し得る:
1.汎用CDPデータアクセス。これは、ストア、セッション、トランザクション(例えばStorageContext)、クエリサービス(例えばStorageSearcher)、およびCRUDサービス(例えばSaveChanges)を公開するAPIの部分である。
2.CDMデータクラス。これは、エンティティ、リレーションシップ、エクステンション等のようなCDM概念を公開する標準的な、アプリケーションから独立したクラスのセットである。
3.ドメインデータクラス。これは、CDM402に準拠するがドメイン固有のプロパティおよび挙動を公開するContact、Message、PurchaseOrdersのようなアプリケーション/フレームワーク固有のクラスである。
また、CDM402は、クエリ言語CQLも定義することができる。CQLは、プログラマが扱うオブジェクト構造に対するリッチなクエリを可能にするように設計される。以下は、CQL方式の基礎のために利用される3種類の技法である:
1.OPath:OPath言語は、SQLおよびXPathを起源としており、XPathのCLRオブジェクトバージョンとなるように設計された。設計は、XPathのパス式の概念を基礎に、オブジェクトのプロパティを順に逆参照(dereference)するメソッドを公開する。設計は、1つの単純な原則、すなわち、開発者はオブジェクトのコレクションをオブジェクト指向APIにおける主要な「構造的」コンストラクトとみなそうとする、という原則に基づいている。OPathは、データベース型ファイルストレージシステムに対するPORクエリ方式となり得る。
2.オブジェクトSQL:この手法は、CDMオブジェクトのグラフおよびコレクションを操作するようにSQLクエリ言語を拡張する。Windows(登録商標)クエリ言語(WinQL)は、CLRオブジェクトのグラフに対するクエリおよび操作を行うように設計されたSQLの変種であり、SQLに必要とされる拡張のための設計候補である。
3.C#シーケンスオペレータ:これは、強く型付けされた、コンパイル時チェックされるクエリおよび集合演算のためのC#拡張のセットであって、(例えばオブジェクトリレーショナルマッピングを通じて)CLRオブジェクトの一時的あるいは永続的コレクションの広範なクラスに適用可能である。
戦略上、C#シーケンスオペレータの手法が、CQLのフレームワークとなるために最も有用である。CQLはクエリ言語である。作成、更新、削除はオブジェクトオペレーション(新規(new)、プロパティセッタ等)として実行される。永続化エンジン408内のO−Rマッピングコンポーネントは、これらのオペレーションを、SQL内の基礎となるDMLオペレーションにマッピングすることができる。
CDM型とプログラミングサーフェスの間の関係を以下で説明する。CDM402における「型」の概念は、次の3つの異なるレベルで見ることができる:
1.スキーマ空間:CDMスキーマにおける型の記述。これは、ランタイムスタックの(例えばアプリケーションからストアに至るまでの)いかなるコンポーネント内でも明示的に実体化できないという意味で抽象型である。
2.アプリケーション空間:CDP API内のCLRクラスとしての型の表現。スキーマ空間内のエンティティ/インライン型と、アプリケーション空間内のデータクラスとの間には一対一対応が存在し得る。すなわち、CDMスキーマ内のそれぞれのエンティティおよびインライン型はCLRクラスを生じ得る。多くの場合、このようなクラスはAPIGによって自動生成される。しかし、POCOの場合には、開発者がCLRクラスとスキーマ空間内の型との間のマッピングを明示的に指定できる。また、アプリケーション空間は、エンティティおよびインライン型に対するクラスに加えて、リレーションシップクラスも含むことができる。
3.ストレージ空間:基礎となるストア内の型の永続化フォーマット。ストアがリレーショナルストアである場合、これらの型はテーブル/UDT/コアSQL型である。CDPのO−Rマッピングコンポーネントは、スキーマ空間内の型がストレージ空間内の型にマッピングされることを可能にするマッピングスキーマをサポートする(例えば、Purchase Orderエンティティ型は、SQLサーバー内のPurchaseOrderテーブルにマッピングされることが可能である)。
CDPクエリ言語はアプリケーション空間を対象とする。これが意味をなす理由は、開発者は、他のオペレーションに対して使用する実質的に類似の抽象化(例えばオブジェクトやコレクション)を用いてクエリをしたいからである。ただし、CQLのセマンティクスはCDM抽象化(スキーマ空間)を用いて記述される。
また、CDPは、制約/セキュリティ112も含むことができる。ほとんどすべてのデータは、より広い意味論的コンテクスト内で調べると、何らかの形でその型のドメインについて制約される。したがって、型およびアプリケーションの設計者がこのような制約を表現する手段をCDPが提供することは非常に重要である。CSDLは、型設計時に宣言的に制約を作成するために使用可能である。制約の例としては、以下のものに限定されないが、1)長さ、精度、スケール、デフォルトおよびチェックのような単純型制約、2)要素制約、生起(occurs)、一意、およびチェックのような配列型制約、ならびに、3)プロパティ制約、等がある。
これらの制約は、実行時にCDP制約エンジンによって強制することができる。なお、CDM402に準拠するということ自体、基礎となるリレーショナルストアのレベルから見ると、制約のセットを意味することに留意されたい。例えば、CDM402は、「あらゆるエンティティはそれを包含しているテーブルのスコープ内で一意のキーを有する」ことを要求する。これは、ストアレベルでの一意キー制約と解釈される。このような制約には他にいくつかの例がある。ここで重要なことは、CDP制約エンジンが、CDM402によって含意される(そしてCDM402への準拠のために要求される)制約と、型設計者によって作成される制約という2種類の制約を強制することである。CSDLで作成される宣言的制約に加えて、制約は、SQLサーバーストアドプロシジャを用いて書かれることも可能である。この方法によれば、宣言的言語で可能であるよりも複雑な制約の表現が可能となる。
さらに、制約/セキュリティ112は、CDP内のエンティティへのアクセスを制御するためのセキュリティモデルを提供できる。CDPに対するセキュリティモデルは、少なくとも以下のことを満たさなければならない:
認証:セキュリティモデルは、オペレーティングシステムユーザの認証をサポートできる。これはドメイン、ワークグループあるいは非連結クライアントマシンのユーザを含む。また、セキュリティモデルは、NTLM(Windows NT LAN Manager)方式およびKerberos(ケルベロス:暗号化を用いたユーザ認証のためのプロトコル)方式の両方の認証に対するサポートも含むことができる。
権限付与:CDPセキュリティモデルは、少なくともエンティティレベルでのセキュリティの権限付与をサポートすることができる。CDPセキュリティモデルは、エンティティの読み出しおよび更新に対して別個のパーミションを管理することもできなければならない。少なくとも、制約/セキュリティ112は、エンティティのセキュリティ識別子とみなされるべきエンティティの「プロパティ」および/またはプロパティのセットを提供する。エンティティのアクセス権は、セキュリティ識別子をパラメータとしてとるテーブルに関連づけられた関数によって決まる。また、CDPは、セキュリティ識別子を変更できるユーザに対するプロビジョニングと、エンティティの残りの部分を変更できるユーザに対するプロビジョニングとを別個に可能にすべきである。理解されるように、CDPは、単なる読み出しおよび書き込みにも異なるパーミションが可能な、より一般的なロールに基づくモデルをサポートすることができる。
CDPランタイム110は、クエリ結果(例えば以下で詳述するカーソル)およびコミットしていない更新のキャッシュ414(例えばオブジェクトキャッシュ414)を保持する。このようなキャッシュは、セッション・トランザクション404と結びついているので、セッションキャッシュと呼ばれることがある。また、このようなキャッシュは、セッションが作成される時に発生し、そのセッションが終了すると消滅する。CDPセッションは、StorageContextオブジェクト内にカプセル化される。アプリケーションは、StorageContextの複数のインスタンスをインスタンス化することができ、それにより複数のセッション、したがって複数のセッションキャッシュを生成する。また、CDP(共通データプラットフォーム)は、明示的キャッシュと呼ばれる別種のキャッシュも公開することができる。明示的キャッシュは、1つまたは複数のクエリからのデータのキャッシュを提供する。データが明示的キャッシュ内に実体化されると、以下のデータ整合性保証を提供できる:1)リードオンリ、権威なし;2)ライトスルー、権威あり;および、3)外来通知による自動リフレッシュ。明示的キャッシュに対するプログラミングおよびクエリモデルは、ストアデータに対するものとほぼ同様とすることができる。
カーソル・ルール410は、CQL(共通クエリ言語)から返されるデータエンティティのセットが一度に1つずつ処理されることを可能にするメカニズムである。アプリケーションは、結果セット全体をメモリ内に単にコピーし、メモリ構造内でこの上にスクロールパターンをオーバレイすることによって、結果セットに対するカーソルを作成できる。しかし、このことに対する要求が広く存在すること、および、カーソルの実装は(特に更新、ページング等を考慮に入れる場合には)複雑さを伴うことがあることから、データプラットフォームはカーソルモデルを提供すべきである。
CDPは、前方専用カーソルおよびスクロール可能カーソルの両方を提供する。ブラウズおよびスクロールの基本機能に加えて、CDPカーソルは以下の機能を提供する:1)外来通知および保守;2)展開/折り畳み状態を有するマルチレベルグルーピング;ならびに、3)動的ソーティングおよびフィルタリング(例えば「ポストプロセシング」)。認識され理解されるように、カーソルは、結果セットを指定するための別のメカニズムではなくてもよい。その場合、結果セットはクエリによって指定され、カーソルはそれらのクエリに対するものである。
また、CDPはビジネスロジックホスティング416も含むことができる。複数のアプリケーションが実質的に類似のデータを操作している場合、主要な要件は、データが信頼できる状態を保証することである。すなわち、データが種々の妥当性検査(バリデーション)ルール、ビジネスルール、ならびに、型設計者および/またはデータ所有者によって設定されたその他の抑制均衡システムに従っていることを保証することである。アプリケーションは一般的に信頼できないというのが妥当な仮定である。無思慮、悪意、および/または単なる切迫した予想外の使用パターンから、アプリケーションは無効なものを保存してしまうか、あるいは保存しようとする。例えば、ユーザがエリアコードとして292を入力すると、292が無効なエリアコードであるため電話番号フィールド内の値がもはや電話番号を表していなくても、アプリケーションはこの番号を保存する。すなわち、この番号が電話番号であることは「信頼」できない。これを防ぐための通常の方法は、信頼境界(trust boundary)を作成することである。信頼境界は、何らかの宣言的ルール/妥当性検査コード等(例えば、一般にビジネスロジックと呼ばれる)であって、別個のプロセスで動作し、アプリケーションによってなされるデータ変更を検査してその変更を「承認」する。その後、アプリケーションはこうした変更をストアに保存できる。多くの場合、ビジネスロジックは検査・承認よりも多くのことを行う。すなわち、ビジネスロジックは、ビジネスルールを強制し、ワークフロー(仕事の流れ)を発生させる(例えば、新規の顧客を挿入する時には、信用価値を確認するため信用調査部門に電子メールを送るべきである)等も行う。
CDPは、ビジネスロジック(BL)を作成するためのいくつかのメカニズムを提供する。これらのメカニズムは、次の5種類に分けることができる:制約、イベントハンドラ(イベント処理部)、静的/インスタンスメソッド、バインド可能な挙動、および静的サービスメソッド。これらについてはそれぞれ以下でさらに詳細に説明する。制約/セキュリティ112は、前述のように、宣言的、および、手続き的であり得る。このような制約は、データの近くで、ストア上で実行可能である。したがって、制約112は信頼境界内にあるとみなされる。さらに、制約は型設計者が作成可能である。
ビジネスロジックホスティング416はイベントハンドラを使用することができる。CDP APIは、データ変更操作時にいくつかのイベントを発生する。BL作成者は、ハンドラコードによりこれらのイベント内にフックすることができる。例えば、注文管理アプリケーションを考える。新規注文が入った時、アプリケーションは、注文額がその顧客に対して認められる信用限度より小さいことを確認する必要がある。このロジックは、注文がストアに挿入される前に実行されるイベントハンドラコードの一部となり得る。
概して、次のような型のイベントがあり得る:1)妥当性検査(例えば、このイベントは、提示された値を当事者が検査してその妥当性を確認する機会を提供する);2)事前保存(例えば、このイベントは、変更をストアに保存する直前に発生され、目的および挙動においてSQLサーバーの「BEFORE」トリガと実質上同様とすることができる);および、3)事後保存(例えば、このイベントは、変更をストアに保存した後に発生され、目的および挙動においてSQLサーバーのAFTERトリガと実質上同様とすることができる)。この型のBLはCDPで動作し、したがって、CDPがデプロイされる任意の層で動作し得る。このため、それがクライアント層で動作する場合、他のアプリケーションによってバイパスされる(例えば信頼境界内で実行されない)ことが可能である。
さらに、ビジネスロジックホスティング416は、静的/インスタンスメソッドを呼び出すことができる。CDM型に対して自動生成されるクラスは部分クラスである。型設計者は、通常は特定の型または型のセットに対して意味のあるロジックを実装するために、これらの部分クラスにさらにメソッドを追加することによって、これらの部分クラスを完成させることができる。次の例を考える:person.GetOnlineStatus()、ここでpersonはPerson型のインスタンスである;emailAddr.IsValidAddress()、ここでemailAddrはSMTPEmailAddress型のインスタンスである、等とする。その性質上、この種のBLは強制可能でない。例えば、IsValidAddress()を呼び出すことにより妥当性を保証するのはアプリケーションの責任である。これは、CDPがデプロイされる任意の層で実行される。したがってこれは、CDPがクライアント層にある場合に信頼境界内で実行されない。
バインド可能挙動は、型設計者がサードパーティ拡張のためのプラグインポイントを作成することを可能にするコーディングパターンである。典型例は電子メールメッセージのための型である。与えられたマシン上で、相異なる電子メールプログラムが動作している可能性がある。各プログラムは、共通のMessage型を使用したいが、各プログラムはSendMessageメソッドの挙動をカスタマイズする必要もある。型設計者はこれを実現するために、SendMessageメソッドに対する基本挙動を定義し、サードパーティが実装へのポインタを提供することを可能にする。また、バインド可能挙動は、CDPがデプロイされる任意の層で動作する。したがってこれは、CDPがクライアント層にある場合に信頼境界内では実行されない。
静的サービスメソッドは、中間層に対して書かれてデプロイされ、クライアント層に対してリモーティング(遠隔操作)を行うBLである。すなわち、BLは中間層でウェブサービスとして動作する。例えば、CreateAppointment()、GetFreeBusy()、等のようなサービスを提供するカレンダ管理サービスを考える。これらのサービス(「静的サービスメソッド」)はCDPを用いて実装され、ウェブサービスは中間層にデプロイされる。クライアント層はウェブサービスプロキシを有し、ウェブサービスプロキシは、アプリケーションによって、チャネル(後述)を用いてこれらのサービスを呼び出すために使用される。この種のBLは中間層で動作することができ、信頼境界内にあることが可能である。
理解されるように、コンポーネント化されたアーキテクチャにより、CDPは、ある一定の範囲でストア不可知(store agnostic)のままであることが可能である。オブジェクトキャッシュ、カーソル、セッション、トランザクション等のようなCDP機能はCDPレベルの抽象化を利用する。基礎となるストレージ抽象化へのマッピングはO−Rマッピングおよび永続化レイヤで行われる。マッピングロジックを書き換えることにより、CDPは、相異なるストア上に実装可能である。
図5は、CDPの種々のコンポーネント内のデータフロー(データ流れ)を示している。次の例を用いて、アプリケーション500(アプリケーション206およびアプリケーション400と同様)によるメソッド呼び出しに対する種々のコンポーネントのインタラクションを調べるのが有益である。
1. void AddToCart (String customerId, String productId)
2. {
3. using (OrderData od = new OrderData())
4. {
5. ShoppingCart cart = od.ShoppingCarts.Searcher.Filter(
6. "CustomerId={0}", customerId).GetFirst();
7. if(cart == null)
8. throw new Exception("No shopping cart");
9. Product product = od.Products.Searcher.Filter(
10. "Productld={0}", productId).GetFirst();
11. if(product = null) throw new Exception("Missing product");
12. cart.Products.Add(product);
13. od.SaveChanges();
14. }
15. }
この例は、永続的なShoppingCartに商品(item:品目ともいう)を追加する。このメソッドが例えばASP.NETウェブページを処理する一部として呼び出されることを考える。
第3行:ストレージコンテクストの作成。StorageContextは、アプリケーション500によって作成されるOrderDataオブジェクトによってカプセル化される。OrderDataクラスは、CDMスキーマで記述されるテーブルセット型を表すことができる。OrderDataオブジェクトは、ストア202と対話するために必要に応じて構成されるStorageContextオブジェクトを作成する。StorageContextの初期化コードは、ランタイムセッション・トランザクションコンポーネント404の一部であることが可能であり、セッション・トランザクションコンポーネント404は、ストア202へのコネクションをオープンし、セッションの開始およびトランザクションコンテクストの作成に必要な作業を行う。セキュリティコンテクストが制約/セキュリティコンポーネント112に確立される。最後に、StorageContextのインスタンスがAPI108によってアプリケーション500に返される。2層の場合、StorageContextを獲得することによりストア202へのコネクションが得られる。理解されるように、3層デプロイメントにおけるコネクションはやや異なり得る。
第5行:クエリ。第5行の式の右辺はOPathクエリである。永続化・クエリエンジン408が、CDMクエリに基づいてオブジェクトを取得するためのメソッドとの基本的インタフェースを公開する。CDM402におけるCDM実装が、指定されたOPathを用いてメソッドを呼び出す。永続化・クエリエンジン408は、クエリをSQLにマッピングし、TDSペイロードとして送信する。制約/セキュリティコンポーネント112は、セキュリティが正しく適用されること、および、アプリケーション/ユーザが見ることを許可されたデータのみを見ることを保証する。ストアは、クエリを実行し、その結果をCDPランタイム110に返す。CDM402および永続化/クエリエンジン408が協力してTDS結果からオブジェクトをハイドレート(hydrate)し、これらのオブジェクトをオブジェクトキャッシュ414(例えばセッションキャッシュ)に入れる。その結果、API108はShoppingCartオブジェクトをアプリケーション500に返す。
第9行:クエリ。このクエリおよび前のクエリのいずれにおいても、その結果としてカーソルは作成されない(GetFirst()メソッドは基本的にクエリへの「top 1」文に適用される)。しかし、クエリがカーソルの作成を要求した場合、カーソル/ルールコンポーネント410がこのオペレーションを実行する。
第12行:更新。オブジェクトキャッシュ414内のShoppingCartオブジェクトが、指定されたProductを用いて更新される。
第13行:変更のフラッシュ。OrderDataオブジェクト上のSaveChanges()の実装が、カプセル化されたStorageContextオブジェクト上のSaveChanges()を呼び出す。StorageContext.SaveChanges()は、ビジネスロジックホスティングコンポーネント416の一部である。これは以下のステップを伴う。まず、事前保存ロジックが実行される。次に、妥当性検査コードが実行された後、事後保存プロセスが実行される。妥当性検査コードは、CDP API180によって定義されるイベントにフックされる。なお、別の実装として、妥当性検査コードはオブジェクトのセッタにフックされることも可能である。次に、事前保存コードが実行される。このコードは、CDP API180によって定義されるイベントにフックされる。ストアへの変更の書き込み。まず、ホスティングコンポーネント416がオブジェクトキャッシュ414を処理することにより、このストレージコンテクスト内でなされたすべての変更を含む変更ベクタを取得する。永続化エンジン408はIPersistというインタフェースを公開する。これは、Write(<changeVector>)等のようなメソッドとの基本的インタフェースである。ホスティングコンポーネント416は、永続化エンジン408からIPersistを取得し、変更ベクタを用いてIPersist.Write()を呼び出す。永続化エンジン408は、書き込み要求を適当なSQL更新(実際のUPDATE文か、またはストアドプロシジャコールのいずれか)にマッピングし、これを用いて変更をストア202に書き込む。このプロセス中に、制約/セキュリティコンポーネント112は、適当なセキュリティ強制がなされることを保証する。また、制約/セキュリティコンポーネント112は、任意の制約ロジックも実行する。最後に、事後保存コードが実行される。このコードは、CDP API180によって定義されるイベントにフックされる。
なお、ビジネスロジックの実行の結果、キャッシュ414内のオブジェクトに変更が生じ得る。こうした変更は、myStorageContext.SaveChanges()への呼び出しによってストア202に永続化される。これは、ビジネスロジック416がバイパスされないことを保証する。複数のISV(独立系サポートベンダ)が、データ変更に関するロジックを実行したい場合がある。この場合、それらのISVは、自己のハンドラをイベントにフックし、ハンドラはCLRによってFIFO(先入れ先出し)順に呼び出される。この例では、ビジネスロジック416はISVの妥当性検査、事前保存、および事後保存ロジックをホスティングする。
図6は、CDPを用いて実装可能な種々のフレームワークを示している。CDPは、種々の特殊な垂直的ドメイン(例えばユーザデータ、LOBデータ等)にわたって使用可能であるように設計されたデータプラットフォームである。CDMがドメイン不問のデータモデルを提供する。これは、ドメイン固有の構造およびセマンティクスを表現できる程度にリッチではあるが、それと同時に、相異なるドメインにわたって使用可能であるくらいに一般的である。CDPの諸機能はCDMに基づいているため、すべてのドメインのアプリケーションにわたって利用可能である。
CDPに対して書かれるアプリケーション全体は次の3つのクラスに分けられる:
1.フレームワーク:フレームワークは、特定のドメインに対してCDPをカスタマイズするために、CDPによって提供される拡張性メカニズムを使用する。フレームワークは、型の特殊化および追加サービスにより、CDPに価値(value)を付加する。しかし、アプリケーションに公開されるプログラミングモデルはCDPプログラミングモデルである。特に、アプリケーションはデータクラス、StorageContext、StorageSearcher、およびCQLを依然として使用する。データベース型ファイルストレージシステムは、ユーザデータドメインに対してカスタマイズされた、CDPの上のフレームワークの一例となり得る。
2.垂直的プラットフォーム:固有のAPI、抽象化、およびデータモデルを有する、CDPの上の別個の層。これは、CDPを隠蔽し、全く異なるプログラミングモデルをアプリケーションに公開する。例えば、電子メールとともに利用されるアプリケーションはCDPを使用可能であるが、そのユーザに対しては電子メールオブジェクトモデルを公開する。
3.「通常の」アプリケーション:特定のタスクのセットを遂行することを意図した単なるCDPアプリケーション。これは、CDP型を特殊化すること、プログラミングモデルを公開すること、あるいは、フレームワークや垂直的プラットフォームを使用することはない。
垂直的プラットフォームおよび「通常の」アプリケーションは単なるコードである。すなわちこれらは、好悪にかかわらず望み通りにCDPを使用することができる。フレームワークはやや異なる。フレームワークはCDPをアプリケーションから隠蔽せずにCDPに価値を付加するので、以下のルールに従うことが可能である:
1.フレームワークデータモデルはCDMと同一であるか、または、CDMの簡単な、十分にドキュメンテーションの付された特殊化である。フレームワークデータモデルは新規な型を定義できるが、これらの型はエンティティによって最大スーパープロパティの型化(ultimate-supertype)される。
2.フレームワークは、既存のCDM型に対する付加的制約を定義することや、CSDLを用いて新規な制約を作成することが可能である。すなわち、制約は、制約定義のためのCDM方法を用いることにより表現しなければならない。
3.フレームワークは通常、独自のクエリ言語を公開しない。公開するとしても、CQLに代えてではなく、CQLに追加する形となる。
4.フレームワークは通常、独自のプログラミングモデルを公開しない。公開するとしても、CDP APIに代えてではなく、CQLに追加する形となる。
5.フレームワークは、CDPの上に付加的な特殊なサービスを提供する。これらのサービスは、CDPビジネスロジックとして、または付加的なヘルパークラスおよびメソッドとして実装され得る。
認識され理解されるように、上記のルールはすべて、所与のフレームワークによってCDPに保存されるデータが、アプリケーションがこのフレームワークを使用しているかどうかにかかわらず、すべてのアプリケーションからアクセス可能となるように保証することを意図している。
図6は、CDPレイヤ602の上の3つのフレームワーク、すなわち、ユーザアプリケーションフレームワーク(UAF)604(例えば、データベース型ファイルストレージシステム、WinFS等)、コラボレーションフレームワーク608(例えばWSS)、およびビジネスフレームワーク610(BF)(例えばLOBフレームワーク)を示している。各フレームワークに属するデータが、フレームワークのボックスと同じパターンで示されている。例えば、UAF604は、連絡先618およびアイテム620というデータを有し、コラボレーションフレームワーク608はドキュメントライブラリ(DOC LIB)622というデータを有し、BF610は注文624というデータを有する。これらすべての型はエンティティ626に最大スーパープロパティの型化されていることに留意されたい。
また、図6は、アプリケーションレイヤの3つのアプリケーション、すなわち、連絡先管理アプリケーション612、コラボレーションアプリケーション614(例えば電子メールアプリケーション)、および顧客関係管理(CRM)アプリケーション616も示している。連絡先管理アプリケーション612は、UAF604からのデータ全般を扱う。CRMアプリケーション616はUAF604およびBF610の両方からのデータを扱う。そして、コラボレーションアプリケーション614は、3つのフレームワークすべて(すなわちUAF604、コラボレーションフレームワーク608、およびBF610)からのデータを扱う。
図7は、複数のアプリケーションがデータを共有することを可能にする共通のデータベース型ファイルストレージシステムの事例を示している。すなわち、図7は、単一のフレームワークを利用する複数のアプリケーションを示している。CDPコンポーネントおよびストアコンポーネント702(図7ではCDP+ストアとして示す)は、あらゆるアプリケーションによって活用される、オペレーティングシステムに対する単一のデータプラットフォームとして利用可能である。その利点(前述)は、リッチなモデリング(モデル化)、データ透過性、およびデータ共有である。これらの利点について、以下のようにさらに詳細に説明することができる。
CDMは、多様なアプリケーションおよび事例のセットによって要求される型を記述するために使用可能なフレキシブルなモデリング環境を提供する。例えば、ユーザデータ(例えばドキュメント、ファイル、写真、音楽、...)、LOBデータ(例えば顧客、注文、注文明細、...)、PIMデータ(例えば連絡先、電子メール、カレンダ、タスク、...)はすべて、CDMを利用してモデリング可能である。構造化、半構造化、および非構造化データにわたるとともに垂直的ドメインにも広がるこの種のリッチなモデリングは、単一のアプリケーションが、共通の抽象化およびクエリ言語を用いてさまざまな種類のデータを扱うことを可能にする。すなわち、CDPは1つのストアとして使用可能である。
CDPは、すべてのアプリケーションによって活用される単一のデータプラットフォームとして利用可能である。さらに、CDPを用いて保存されたデータは、すべてのアプリケーションが(例えばセキュリティポリシの下で)作用するために利用可能である。次の場合を考える。各アプリケーションがあるフォーマットでデータを保存し、そのフォーマットが、当該アプリケーション(すなわちそのデータを保存したアプリケーション)自身以外の他のアプリケーションにとって不透明であるとする。2つほど例を挙げる:電子メールのメールボックスの内容が、電子メールアプリケーション以外の他のすべてのアプリケーションとって不透明である場合;CRMアプリケーションが、複雑なスキーマのセットをテーブルの上にオーバーレイすることで、Customer(顧客)、Case(ケース)等のような抽象化を作成しているため、「Customer」という概念が他のすべてのアプリケーションにとって(例えばそのアプリケーションがCRMアプリケーションによって使用されるスキーマを知らなければ)不透明となる場合。
明らかに、電子メールアプリケーションのデータには、CRMアプリケーションによって保存されるデータと概念的に類似しているものが存在する。一例として連絡先(Contact)情報がある。ユーザに関する限り、連絡先は連絡先にすぎない。この観点からは、どうして同一の連絡先情報が2回、すなわち1回はCRMに、そして1回は電子メールのメールボックスに、保存されるのかを理解することは困難である。ここでの問題は、単に保存が冗長であるということだけでなく、これが含意するすべての変則的なこと、例えば、両方の場所での更新の発生、削除の調停、および両方の場所での挿入の保証等である。電子メールアプリケーションおよびCRMアプリケーションが両方ともCDPストア702上に構築される場合に何が起こるかを考える。CDMを用いると、Contact型をエンティティ型から派生させることができ、その構造は電子メールアプリケーションおよびCRMアプリケーションの両方にとって透過的となる。したがって、これら2つのアプリケーションが型のスキーマに関して合意する限り、異なるアプリケーションが互いの存在を知らずに互いのデータを使用できる。CDPは共通クエリモデルを提供するので、(例えば)CRMアプリケーションは、Contactの特定のインスタンスがそれに「属する」かどうかにかかわらず、Contactデータに対するクエリを行うことができる。
リッチなモデリング、データ透過性およびプラットフォーム・フレームワーク型アーキテクチャの組合せにより、複数のアプリケーションおよびフレームワークの組合せに関わる多くの共有/相互運用事例が可能となる。理解されるように、共有という用語は、どのアプリケーションがデータを保存したか、あるいはどのフレームワークがそのデータを保存するために利用されたかにかかわらず、そのデータがCDPに保存されている限り、そのデータを利用できるアプリケーションについて用いることができる。
特に、図7は、複数のアプリケーションがデータを共有する共通UAF(ユーザアプリケーションフレームワーク)の事例を示している。この場合、データはアイテム706から派生したUAF型のセットである。CDP・ストア702は、UAFフレームワーク704に関係するUAF型のセットを含み得る。UAF型のセットはアイテム706から派生でき、このセットは電子メール708、ドキュメント710、および連絡先712を含み得る。また、理解されるように、アイテム706はエンティティ714から派生できる。CDPおよびUAFフレームワーク704と組み合わせて複数のアプリケーションが利用可能であり、例えば、以下のものに限定されないが、電子メールアプリケーション716、リッチevite(イーバイト)クライアント718、およびProject M(プロジェクトM)720が利用可能である。認識され理解されるように、アプリケーション、CDP、UAFが存在する層に関して何ら制限は課されない。例えば、図7のアプリケーションのいずれか(例えばコラボレーションアプリケーション)が中間層で実行・動作することも可能である。
図8は、CDPおよび関連するアーキテクチャによる複数のフレームワークを利用した単一のアプリケーションを示している。CDP・ストア702は、アプリケーションによって活用されるオペレーティングシステムに対する単一のデータプラットフォームを提供する。主としてLOBフレームワーク804に対して書かれ得るCRMアプリケーション802は、UAFフレームワーク808に関連する連絡先データ806を利用できる。理解されるように、CRMアプリケーション802は通常、以下のものに限定されないが、注文明細814、および購入注文書(purchase order)816のような、関連するデータを利用する。CRMアプリケーション802は、UAFデータ(例えば連絡先データ806、アイテム810、エンティティ812等)を利用する際に、CDPレベルの抽象化を利用できる。すなわち、CRMアプリケーション802は、UAFフレームワーク808のメソッドを利用する必要はない。さらに、認識され理解されるように、CRMアプリケーション802は任意の層に存在することができる。
図9は、複数の異なるフレームワークに関連する複数のアプリケーションとデータを共有するCDPを示している。図9は、CDP902の上の3つのフレームワーク、すなわち、UAFフレームワーク904、コラボレーションフレームワーク908、およびBFフレームワーク910を示している。複数のアプリケーションが、フレームワークレベルおよびCDPレベルのプログラミングの組合せを利用できる。特に、連絡先管理アプリケーション912、コラボレーションアプリケーション914、およびCRMアプリケーション916が、フレームワークレベルおよびCDPレベルのプログラミングの組合せを利用できる。CDP902は、ストア928内のデータを共有するために、複数の異なるフレームワークに関連するそれら複数のアプリケーションを提供する。
具体的には、複数のアプリケーションがデータと相互作用するには種々の方法がある。連絡先管理アプリケーション912は、CQLを利用して、連絡先918に対するクエリを行うことができる。すなわち、連絡先管理アプリケーション912は、アイテム単位のmove(移動)、copy(コピー)、contact.GetBestEAddress()等のようなUAF904のメソッドを利用できる。また、連絡先管理アプリケーション912は、以下のものに限定されないが、StorageContext、StorageSearcherのようなコアCDPランタイムクラス、およびCDPデータクラス(例えば連絡先クラスならびに関連するゲッタおよびセッタ)を利用することができる。
コラボレーションアプリケーション914は、CQLを利用して、連絡先918およびドキュメントライブラリ(doc lib)922内の任意のドキュメントに対するクエリを行い、さらにおそらくは注文924に対するクエリも行うことができる。コラボレーションアプリケーション914はこのようなクエリを行うために、UAF904および/またはBF910の存在を知る必要はない。クエリは、他のフレームワークによって書かれた特別なコードを利用せずに、純粋にCDPレベルで行うことが可能である。コラボレーションアプリケーション914は、AddDocumentToDocLib(<document>, <docLib>)等のように、コラボレーションフレームワーク908に固有のオペレーションを利用して、ドキュメントライブラリ922を操作する。また、コラボレーションアプリケーション914は、StorageContext、StorageSearcher、Contact、Order、DocLibrary、ならびに関連するセッタおよびゲッタのようなCDPレベルのクラスを利用することができる。
CRMアプリケーション916は、CQLを利用して、与えられた連絡先によるすべての注文に対するクエリを行う。理解されるように、CRMアプリケーション916は、その連絡先が実際にはUAF904を利用して作成されたことを知らずにこのクエリを行うことができる。CRMアプリケーション916は、BF910によって提供されるメソッドおよびサービス(例えばFindShipStatus(<order>))を利用してOrderを操作する。また、CRMアプリケーション916は、StorageContext、StorageSearcher、Contact、Order、ならびに関連するセッタおよびゲッタのようなCDPレベルのクラスを利用することができる。
非CDPストア(non-CDP store)との共有を行う場合、任意のデータソースがCDPストアとして見えるプロバイダモデルを、CDPが使用しない点に留意することが重要である。CDP/フレームワークアプリケーションが非CDPストア内のデータを扱いたい場合、次の2つの選択肢が使用可能である:1)同期アダプタアーキテクチャ(これはUAFの一部である)を用いてこのデータをCDPストアに同期させる;および、2)非CDPストアに組み込むためのカスタムロジックを構築する。
図10は、CDPの2層デプロイメントを示している。CDPを構成する種々のコンポーネントは、ある意味で移動可能である。ある一定の限定の下で、それらのコンポーネントは、相異なるプロセスおよびマシンの境界を越えてデプロイ可能であるため、2層、3層、およびN層(ここでNは1以上の整数である)構成が得られる。認識され理解されるように、2層デプロイメントが例示されているが、本発明はそのように限定されず、任意層数の構成が使用可能である。
特に、CDP API1002およびCDPランタイム1004が両方とも、アプリケーション1006と関連するアプリケーションプロセスに存在できる。したがって、CDPコンポーネント(例えばCDPラインタイム1004、API1002、および制約/セキュリティ1008)はさまざまな層に存在できる。例えば、API1002、CDPランタイム1004、およびアプリケーション1006はクライアント層1010に存在できる。ここで、クライアント層1010のコンポーネントはそれぞれのプロセス/マシン境界内に存在できる。また、ストア1012および制約/セキュリティ1008はサーバー層1014に存在できる。ここで、サーバー層1014のコンポーネントはそれぞれのプロセス/マシン境界内に存在できる。理解されるように、制約/セキュリティ1008はストアプロセスにホスティングされ得るが、残りのCDPコンポーネントはクライアントプロセス内に存在し得る。これは、どのようにしてCDPコンポーネントを移動可能とみなし得るかの重要な一例である。
図11は、本発明の一態様による、共有データを用いた2層デプロイメントを示している。第1の構成(下記)は、複数のアプリケーションが同一のデータを共有する場合である。これは、アプリケーションはデータを共有しなければならないということではない。むしろ、どのアプリケーションのデータも他のアプリケーションから利用可能であるということである。また、データの利用可能性は、ユーザとの関連ではなくアプリケーションとの関連でのことである。したがってこれは、ユーザ認証(user credential)の概念とは異なる。CDPランタイムの制約/セキュリティモジュールは、アプリケーションとは無関係にこれを扱うことができる。
アプリケーションは、APIおよびCDPランタイムと対話することができる。ここで、種々のアプリケーションがそれぞれのコンポーネントとともに存在し得ることにより、それぞれのアプリケーション、API、およびCDPランタイムは、境界1102、境界1104、および境界1106として示されている固有のマシン/プロセス境界を有し得る。簡単のため、3つのアプリケーション(すなわちアプリケーション1、アプリケーション2、およびアプリケーション3)が示されているが、任意個数のアプリケーションが使用可能であることは言うまでもない。アプリケーションは、自己のプロセス/マシン境界1112内のストア1110内の共有データ1108にアクセスできる。理解されるように、異なるアプリケーション間でのこのようなデータの共有中には制約/セキュリティ1114が強制される。
この構成は多くのユーザ事例で非常に重要である。例えば、この構成は、スキーマ化されたユーザデータに対するデータベース型ファイルストレージのビジョン(構想)における基礎となり、ISV(独立系サポートベンダ)がインテリジェントでデータアウェアなアプリケーションを構築するために活用できる。プロジェクトMは、これに基づいて、すべてのユーザデータに対するユニバーサルキャンバスであるというそのビジョンを実現できる。これは、CDPによってサポートされる重要な構成である。
図12は、アプリケーションが他のアプリケーションによる閲覧および/または利用を望まないプライベートデータを有するような第2の構成を示している。すなわち、プライベートデータに関わる2層デプロイメントがある。アプリケーションプライベートデータの概念を必要とする多くのユーザ事例およびISV事例が存在する。例えば、アプリケーションがそのコンフィグレーションデータ(例えばiniファイルと同等のもの)をデータベース型ファイルストレージシステムに保存することに決めた場合、これはアプリケーションにとってプライベートであるのが望ましい。多くの場合、部分的プライバシー、すなわち、読み出しは許可するが書き込みは許可しない、ということに対する要求がある。例えば、電子メールアプリケーションでは、メールボックスを表示することは望ましいが、メールボックスを変更する権利は自分自身に留保するであろう。
2層デプロイメントにおいて、CDPは、この構成に対するサポートが限定されている。SQLサーバーのストアにおけるアプリケーションレベルのセキュリティに対する適度なサポートはない。その結果、一部のデータが、データアクセスを阻止するという厳格な意味で、所与のアプリケーションにとってプライベートとマークされないことがある。しかし、この状況は以下のようにして部分的にサポートされることが可能である:
・アプリケーションが固有の型を使用し、その型を別個の名前空間に置き、それらの型から生じるデータクラスに対するプライベートアセンブリを作成する。このスキーマに属するインスタンスデータへのすべてのCDPレベルのアクセスはこれらのアセンブリを通して行われるので、他のアプリケーションは、対応するクラスへのアクセスができない。
・アプリケーションが固有のプライベートCDPストア(例えば、StorageContextがその上に作成され得るCDP内のエンティティのセット)を作成し、その名前を他のアプリケーションに公開しない。
・ドキュメンテーションを活用する。
理解されるように、アプリケーションは、プライベートデータを持つために、上記の方法の一部または全部を選択することができる。
なお、CDPアーキテクチャ自体が、プライベートデータの真の概念の実装に向けて障害を生じるわけではないと気付くことができる。したがって、基礎となるプラットフォームでアプリケーションレベルのセキュリティが利用可能となった場合、CDPはそれを容易に公開することができると考えられる。またここで留意すべきは、多くの場合、「プライベートデータ要求」は、可視性を制限することが真に必要であるという理由からではなく、データに対してアプリケーション固有のビジネスロジックを強制する必要から生じる。例えば、電子メールアプリケーションによって作成されるローカルメールボックスはカレンダフォルダを有する。ルールとして、カレンダアイテムのみをこのフォルダに入れることができる。このルールが強制される限り、電子メールアプリケーションにとって、別のアプリケーション(例えば他社製の電子メールアプリケーション)が自己のメールボックスを閲覧/変更することができるかどうかは無関係であろう。CDPアーキテクチャは、すべてのアプリケーションがCDPレイヤを通ってくる限り、すべてのビジネスロジックの強制を行う。理解されるように、中間層でこれを強制できるので、プライベートアプリケーションデータは3層デプロイメントでサポートされる。
図12の説明を続けると、アプリケーションがAPIおよびCDPランタイムと対話するマシン/プロセス境界1202と、アプリケーションがAPIおよびCDPランタイムと対話するマシン/プロセス境界1204が示されている。簡単のため、アプリケーションは2つだけ示されているが、理解されるように、任意個数のアプリケーションが、自己のプロセス/マシン境界1208内のストア1206内で、共有データ1211にアクセスでき、また、それぞれのプライベートデータ(例えば、アプリケーション1はプライベートデータ1210、そして、アプリケーション2はプライベートデータ1212)にアクセスできる。
図13は、別のアプリケーションがストアに直接アクセスするような、関連する第3の構成を示している。すなわち、直接ストアアクセスを備えた2層デプロイメントがある。マシン/プロセス境界1302内のアプリケーション2は、おそらくは例えばADO.NETを通じて、あるいは他のデータアクセスAPIを通じて、直接にSQLストア1306にアクセスできる。例えば、既存のSQLアプリケーションを有する大規模なIT(情報技術)専門店(アイ・ティ・ショップ)は、それをなくして丸ごとCDPベースのアプリケーションに移す可能性は低い。むしろ、少しずつCDPへの移行を実施する可能性がある。実働環境では停止時間ゼロおよび安定性が重要課題なので、ある一定期間、CDPアプリケーションはSQLアプリケーションと並行して動作し続け得る可能性が高い。CDPはフレキシブルで非規範的なO−R(オブジェクト−リレーショナル)マッピングを提供するので、CDPアプリケーションは既存のスキーマの上にデプロイ可能である。CDPアーキテクチャによれば、当然、直接のSQLアクセスが可能である。その理由は、「アプリケーション1データ」は単にテーブルのセットであり、アプリケーション2が適当なパーミション(permission:同意、許可)を有する限り、アプリケーション2がそのデータに直接にアクセスすることを妨げるものは何もないからである。
アプリケーション2について、以下の結果に留意されたい:
1)アプリケーション2はCDPサービス(あるいはCDPの上のフレームワークによって構築された任意のサービス)へのアクセス権を持たない可能性がある。
2)具体的には、アプリケーション2はCDMの利益を受けない。したがって、テーブル表現を判断し、このレベルで直接にクエリ/更新を発行しなければならない。
アプリケーション1について、以下の結果に留意されたい:
1)BLサービス内のビジネスロジックはアプリケーション2によって実質的にバイパスされる。
2)一部の制約(例えばトリガ/DRI(宣言型参照完全性(declarative referential integrity))として実装されないもの)もアプリケーション2によってバイパスされる。
この特定のデプロイメントでは、アプリケーション2が自己のロジックで制約等を実行することにより物事が適正に行われるようにすることは、アプリケーション設計者および/またはデプロイメント管理者の責任である。
図14および図15は、CDPコンポーネントの3層デプロイメント構成を示している。種々のCDPコンポーネントが3層構成でデプロイ可能である。この構成では、CDPランタイム1402がクライアント層および中間層(図15に示す)の両方に存在する。アプリケーションはクライアント層にあり、ストア1404はサーバー層(図15に示す)にある。アプリケーションロジックは、図14および図15における2つの要求者に関係し得る。第1の要求者はクライアント1406である。第2の要求者は、ウェブサービスプロキシ1408、ウェブサービス1410(図15に示す)、およびビジネスロジックホスティング1412(図15に示す)(例えば、妥当性検査、事前保存ロジック、および事後保存ロジック)である。クライアント1406はアプリケーションであるため、それに含まれるロジックを「アプリケーションロジック」と呼ぶことは正当かもしれないが、このロジックはそう呼ばれるものではない。そう呼ばれるのは、ウェブサービスプロキシ1408、ウェブサービス1410、およびビジネスロジックホスティング1412内に含まれるロジックである。これは、ISVによって書かれ、中間層にデプロイされることが意図されたコードである。したがって本当の意味では、これは中間層「アプリケーション」である。アプリケーションロジックはクライアント層および中間層の両方の存在し得る。アプリケーションロジックがどこで動作するかに応じていくつかの可能な事例があり、それらを以下で考察する。
事例ごとの考察に進む前に理解しておくべきことであるが、多層デプロイメントのテーマは、アプリケーションアクションが層間でリモーティングされる方法に密接に関係している。リモーティングという用語は、層間でアプリケーションレベルまたはCDPサービスレベルのオペレーションをリモーティングするための次の3つの一般的手法を包含し得る:
1.ウェブサービス経由でのアプリケーションレベルのリモーティング:この事例では、アプリケーションロジックが中間層に存在し、リモーティングされる静的メソッドとしてクライアントに公開される。これについて詳細は後述する。
2.暗黙的CDPサービス呼び出しリモーティング:FindAll()、FindOne()、SaveChanges()のようなCDP API呼び出しはリモーティングエージェントおよびリモーティングサービスコンポーネント経由で暗黙的に中間層に送られる。このアーキテクチャについては後述する。また、後のセクションには、これがどのように動作するかを説明する例がある。
3.明示的な非連結リモーティング:CDP APIは、層間オペレーションがいつ起こるべきかをアプリケーションが明示的に定義するためのプログラミングパターンを定義する。このオペレーションの結果としてデータ取得がなされる場合、取得されたデータはクライアント層にキャッシュされる。このパターンは通常、「非連結モード(disconnected mode)」(後述)と呼ばれる。
特に、図14および図15は、中間層で動作するアプリケーションロジック(例えばウェブサービス)を示している。中間層デプロイメントの主要な事例は、アプリケーションロジックが中間層で明示的に動作する場合である。その場合、クライアント1406は、ウェブサービスメカニズム(例えばウェブサービスプロキシ1408およびウェブサービス1410)を通じてこのロジックを呼び出す。理解されるように、サーバー層のセキュリティエンジンは中間層CDPプロセスにホスティングされることが可能である。2層デプロイメントでは、CDP呼び出しはクライアントプロセス内のCDPランタイム1402によって処理され、ランタイムは必要な時にサーバーと連絡をとる。3層デプロイメントでは、一部のCDP呼び出しは(クライアント層経由で)ローカルに処理され、一部は(中間層経由で)リモートに処理される。また、それ以外は両方の場所で処理されることが可能である。3層デプロイメントは、適当な呼び出しをリモーティングするための方法を定義する。
クライアント層のリモーティングエージェント1414は、チャネル(例えばIndigo)を用いて要求をパッケージングし中間層のCDPへ送ることができるコンポーネントである(これはリモートプロシジャコールの実際の作用である)。中間層にはリモーティングサービス1416(図15に示す)がある。リモーティングサービス1416は適宜、これらの要求に対するサービスを提供する。このパターンは、一般にサービス指向アーキテクチャ(SOA)として知られているものの一部である。SOAの特徴は、異なる層がメッセージを交換することにより相互に通信することである。CDPはこの目的のためにIndigoインフラストラクチャを利用することができる。
リモーティングサービスは、「クエリの実行(execute a query)」、「挿入(insert)」、「削除(delete)」、「更新(update)」、「新規作成(create)」、「保存(save)」、「与えられたキーに対するオブジェクトを取得(get an Object given the key)」、「ルートキーを取得(get the root key)」のような、データ指向サービスのセットを提供する。SOAパラダイムに従い、これらのオペレーションはSOAPメッセージ内の動詞となり得る。クライアント層が中間層で実行させたい任意のアクションはこれらの簡単な動詞を用いて表現される。これらの基本的なメッセージング動詞は、Indigoによって提供されるファシリティを用いた2つのインタフェースに対するメソッドに抽象化される。つまりそれは上記のIPersistおよびIQueryインタフェースである。こうして、リモーティングエージェント1414およびリモーティングサービス1416はともに、IPersistおよびIQueryインタフェースのメソッドをリモーティングするためのIndigoチャネル上のエンドポイントとして作用する。認識され理解されるように、IPersistおよびIQueryインタフェース内のメソッドは次の意味で「きめが粗い(coarse-grained)」のである:すなわち、これらのメソッドは、大規模なオブジェクトのセットに対してクエリあるいは操作を行うために使用可能である。例えば、SaveChanges()メソッドに応じて、リモーティングエージェント1414は、変更されたオブジェクトのセット全体について、リモーティングサービス1416へIPersist.Write()を1回発行する。したがって、クライアントと中間層の間のインタフェースはバルク指向(bulk-oriented)であり、チャット的ではない。
メソッド呼び出しに応じて、図14および図15に示した種々のモジュール間で行われるデータ/制御フローを調べるために、次の擬似コード例を用いることができる。認識され理解されるように、以下は一例であり、本アーキテクチャはこれに限定されない。
1. WinFSData wd =
new WinFSData(@"\\CorpSvr01\SharedSchedule\AnilNori"))
2. ScheduleEntry s = wd.Items.FilterByType<ScheduleEntry>().Filter(
"StartTime > @0", new DateTime(xxxx, 10, 29, 9, 0, 0)).GetFirst();
3. s.DisplayName = s.DisplayName + "[important, please come!]";
4. ScheduleService ss = new Scheduleservice(wd);

/* public bool CreateAppointment(ScheduleEntry appointment,
* string path)*/
5. if (ss.CreateAppointment(s, @"\\CorpSvr01\SharedSchedule\PCelis"))
6. {
7. Console.WriteLine("Appointment created!");
8. }
この例において、アプリケーションは、企業イントラネット上のAnil Nori(アニール・ノリ)にクエリを行うことにより、xxxx年10月29日午前9時に対する彼のカレンダエントリを取得する。これは、ScheduleEntryオブジェクトによって表されており、ScheduleEntryオブジェクトはEntityから派生した型(type)である(例えば、ScheduleEntryはPIMスキーマの一部であり、ユーザのスケジュール内のアイテムを表す)。アプリケーションはScheduleEntryを変更する。すなわち、アポイントメントのタイトルにテキスト「[important, please come!]」を付加する。次に、(ScheduleServiceという)ウェブサービスのCreateAppointmentメソッドを呼び出して、この変更したScheduleEntryをPedro Celis(ペドロ・チェリズ)の共有カレンダに入れる。このコードフラグメントは、3層デプロイメントにおける次のようないくつかのキーポイントを例示している:
1.クライアントはローカルCDPランタイムを用いてストアエンティティに対するクエリを行う。クエリは中間層で実行される。
2.クエリ結果はクライアント層のCDPのセッションキャッシュに入る。
「アプリケーションロジック」全体(ビジネスロジック、妥当性検査等を含む)は、ウェブサービスによって、およびCDPのBLホスティングエンジンによって、中間層で実行される。この処理は、CreateAppointment()メソッドへの呼び出しによってトリガされる。以下、種々のモジュール間でのデータフローを詳細に検討する。
第1行:ストレージコンテクストの作成。StorageContextオブジェクト(例えばクライアント層のAPI1418)はDataオブジェクトによってカプセル化され、Dataオブジェクトはアプリケーションおよび/またはクライアント1406によって作成される。Dataクラスは、CDMスキーマに記述されたテーブルセット型を表す。Dataオブジェクトは、ストア1404と対話するように必要に応じて構成されるStorageContextオブジェクトを作成する。StorageContextの初期化コードは、クライアント層のCDPランタイム1402の一部である。
第2行:クエリ。第2行の式の右辺はOPathクエリである。このクエリは、高々1つのScheduleEntryオブジェクト、すなわち、10/29/04、9AMの最初のエントリ(例えば、「最初のエントリ」の厳密な定義が存在すると仮定する)を返す。クライアント層のCDPランタイム1402は、リモーティングエージェント1414に対するIQueryインタフェースを取得し、それに対してExecuteQuery(<Opath>)を呼び出す。リモーティングエージェント1414は、Indigoチャネルを利用することができ、このクエリを中間層のリモーティングサービス1416に送る。クエリは、2層の場合と全く同様にマッピングされて実行され、結果がクライアント層に返される。ここで2つの可能性がある:
1.生のTDS結果が、オブジェクトをハイドレートせずに中間層からクライアント層に返される。その場合、クライアント層のCDPランタイム1402がオブジェクトをハイドレートする。
2.これらのオブジェクトがオブジェクトキャッシュ414に既に存在する場合、ハイドレートされたオブジェクトがクライアント層に返される。
理解されるように、OPathクエリ全体がIndigoチャネル越しに送信される。例えば、クエリが「型ScheduleEntryの全オブジェクトを検索」(すなわち、FindAll()メソッド呼び出し)である場合、このクエリ全体が1つのSOAPメッセージで(中間層のリモーティングサービス1416へ)送信されるのであって、オブジェクトごとに1つのメッセージが送信されるのではない。
第3行:クライアント層オブジェクトキャッシュの操作。ScheduleEntryオブジェクトがクライアント層に返されると、クライアント層のCDPランタイム1402のセッションキャッシュ内でさらなる操作が可能である。クライアント1416がScheduleEntryオブジェクトのDisplayNameプロパティを変更する場合、これはクライアント層のCDPランタイム1402によって全面的に処理される。
第4行:クライアント層のウェブサービスプロキシの新規作成(new)。おそらく、クライアント1406は設計時に既に適当なasmx(またはIndigoでの等価物)への参照を追加していると考えられる。第4行は、クライアント上にウェブサービスプロキシオブジェクトのインスタンスを作成できる。この呼び出しは、ウェブサービスプロキシ1408によって全面的にサービスされる。
第5行:ウェブサービスメソッドの呼び出し。CreateAppointment()は、中間層のウェブサービス1410によってリモーティングされるメソッドの1つである。このメソッドは、ScheduleEntryオブジェクトおよびCDPコネクション文字列を受け取る。このメソッドは、この情報を用いて、コネクション文字列によって定義されるStorageContext内にScheduleEntryオブジェクトを作成する。この書き込み操作において本質的なことは、適当なビジネスロジックおよび妥当性検査ロジックの実行である。このメソッドは、ウェブサービスプロキシ1408によってパッケージングされ、SOAPメッセージを用いてIndigoチャネル経由で中間層のウェブサービス1410に送られる。ウェブサービス1410は、このメソッドを、それがあたかも他のアプリケーションであるかのように、中間層のCDP API1420への呼び出しを通じて実施する。ここで注意すべき重要なことは、CreateAppointment()のロジック全体が中間層で実行されることである。
図16および図17は、クライアント層および中間層の両方で動作するアプリケーションロジックの図である。メソッド呼び出しに応じてさまざまなコンポーネントおよび層を通るデータ/制御フローについて、一例を用いてさらに詳細に説明することができる。以下の例は、上記の例と類似している。
1. void AddToCart(String customerId, String productId)
2. {
3. using (OrderData od = new OrderData())
4. {
5. ShoppingCart cart = od.ShoppingCarts.Searcher.Filter(
6. "CustomerId={0}", customerId).GetFirst();
7. if(cart = null)
8. throw new Exception("No shopping cart");
9. Product product = od.Products.Searcher.Filter(
10. "ProductId={0}", productId).GetFirst();
11. if(product == null) throw new Exception("Missing product");
12. cart.Products.Add(product);
13. od.SaveChanges();
14. }
15. }
16.
前の例で理解されるように、第3行はストレージコンテクストを作成し、第5行および第9行はクエリに関係し、第12行は更新に関係する。
第13行:変更のフラッシュ(一気書出し)。以下の2つの可能性を考える:
1.BLがクライアント層および中間層の両方で実行される場合:この場合、クライアント層のビジネスロジックホスト416が、妥当性検査および事前保存ロジックを実行し、IPersist.Write(<change vector>)を用いてクライアント層のリモーティングエージェント1414を呼び出す。リモーティングエージェント1414は、この呼び出しを中間層のリモーティングサービス1416(図17に示す)に送る。リモーティングサービス1416は、中間層のオブジェクトキャッシュ414を変更し、SaveChanges()を呼び出す。これは前述のBLおよび永続化ステップを実行し、リモーティングサービス1416に復帰する。この場合、リモーティングサービス1416はクライアント層のリモーティングエージェント1414に復帰し、続いてリモーティングエージェント1414はビジネスロジックホスティング416に復帰する。クライアント側の事後保存ロジックは、ビジネスロジックホスティング416によって実行されない可能性がある。
2.BLが中間層のみで実行される場合。この場合、ビジネスロジックホスティング416は呼び出しを直接リモーティングエージェント1414に渡し、リモーティングエージェント1414はさらにそれをリモートサービス1416に送る。処理は上記のように中間層で行われる。
両方の層でBLを実行することの1つの利点として、事前保存ロジックの妥当性検査においてエラーがあった場合、そうしたエラーは、中間層に接続するという代償を払うことを必要とせずに、クライアント層でトラップ(閉じ込め)することができる。
シームレスなオフラインのエクスペリエンスは、データベース型ファイルストレージの目標の1つである。これは、リモートストアとデータを同期させるローカルストア1602を必要とすることがある。また、ローカルストア1602は、制約/セキュリティ1604を含み得る。この場合、ローカルストア1602は、実質上同様のマシン上にあるが、異なるプロセス内にある(これは、本明細書の定義では、やはり2層デプロイメントである)。3層および2層デプロイメントに対するプログラミングモデルは対称的なので、同期のようなサービスがローカルストア1602と中間層の間で動作してデータを同期した状態に保つことは容易である。
上に示したコード例の第2行を考える。クエリの結果、層間オペレーションが生じる。この具体例では、1つのオブジェクト(ScheduleEntryオブジェクト)が返される。しかし、一般には、これは非常に大きい結果セットを返す可能性がある。同様の注釈が、前に提示したコード例の第5行にも当てはまる。考え得る2つの問題点があり、それらは3層デプロイメントに関連する:
・層間オペレーションは高価になり得るので、暗黙的には起こらないこと:これが層間オペレーションを引き起こすという明示的な指示が第2行にはない。すなわち、「マジック」が含まれている。ここで「マジック」という用語は、何かが起こる際にアプリケーションがそれについて知らないか、またはその発生を制御する能力がないという意味で用いられる。多くの場合、マジックは有益である。実際、多くのソフトウェアの目標は、基礎にある複雑さを隠蔽し、「マジック(魔法)であるかのように」物事を引き起こすことである。しかし、本具体例の場合、これまでの長い経験から、アプリケーション作成者は長大なクエリを行き当たりばったりに送信することが分かっている。そのようにしても、基礎となるコードは、ネットワークの流れを詰まらせたりサーバーにストレスを加えたりすることなく、大量のデータをどうにか返してくれると決め込んでいるのである。層間オペレーションのマジックをアプリケーションにとって明示的にすることにより、適切なコーディングの実践を奨励することが、確実な設計パラダイム(模範)である(〈百万行のテーブル〉からの「select *」が必要か。必要でないならおそらくWHERE節が使える)。
・クライアント側キャッシングおよびステートレスな(処理状態を把握しない)オペレーション:適切なコーディングの試みにもかかわらず、アプリケーションが(大きい可能性のある)データセットを扱うことを必要とすることがある。そして、アプリケーションはこのデータセットが何であるかを知っていることが多い。このような場合のデータアクセスを最適化するため、アプリケーションは、クエリを実行し、(大きい可能性のある)データセットをフェッチ(所得)し、それをローカルにキャッシュに入れる能力を有するべきである。さらなるクエリ/ソーティング/フィルタリング/変更は、データのローカルコピーに対してなされる。最後に、フラッシュ操作により変更をストアに書き戻す。ローカルキャッシュに対する動作は、中間層が最小限の状態しか保持しないこと(または状態を全く保持しないこと)ことで、よりスケーラブル(拡張可能)になることを意味する。
解決手段は、明示的な非連結モデルを提供することである。これは以下のパターンによって特徴づけられる:
1.アプリケーションは、次のようにしてローカルキャッシュをインスタンス化する:

LocalContext lc = new LocalContext();
2.ローカルキャッシュは、次のように指定される1つまたは複数のクエリの結果を含むことになる:
lc.QueryCollection.Add("<query1>");
lc.QueryCollection.Add("<query2>");
// etc.
3.アプリケーションがローカルコンテクストを「フィル(fill)」する:
lc.Fill();
4.アプリケーションは、ストレージコンテクストに対してと全く同様に、ローカルコンテクストに対して作用する。例:
ScheduleEntry s =
lc.Entities.FilterByType<ScheduleEntry>().Filter(
"StartTime > @0", new DateTime(
2004, 10, 29, 9, 0, 0)).GetFirst();
s.DisplayName = s.DisplayName + "[important, please come!]";
5.最後に、アプリケーションは、下記に指定するように、変更を一括してストアに送る:
// sc は StorageContext
lc.SaveChanges(sc);
アプリケーションが層間オペレーションを行いたい時にどのように明示的になり得るか(ステップ3のlc.Fill())に留意されたい。これにより、責任のないコードによってトリガされるマジックはなくなる。また、すべての後続のオペレーションをローカルキャッシュに対して行うことができるため、層間オペレーションが最小限となる(それに伴い中間層の状態も維持される)ことにも留意されたい。理解されるように、上記のコードフラグメントによって含意されるモデルは、ADO.NETにおけるデータセットモデルに極めて類似している。CDPもまた非連結モデルを提供することができる。
2層アプリケーションは、次のいずれかが真でなければ、3層環境にデプロイすべきではない:(a)アプリケーションが非連結型のプログラミングモデルのみを使用する、または(b)非連結型のプログラミングモデルを使用するようにアプリケーションを書き換える。
CDPは、3層デプロイメントにおいて、接続型および非連結型の両方のプログラミングモデルを可能にする手法をとる。アプリケーションには、「3層環境にデプロイされると予想するなら、非連結キャッシュを使うべきである」というガイドラインが与えられる。
CDPストアを説明する次のセクションの背景を明らかにするため、SQLサーバーデータの全体がインスタンス、データベース、スキーマ、およびテーブルという4レベルの階層に分かれることに注意する。接続可能なユニットはインスタンスである。データベースは、それに対してバックアップ(予備)、リストア(復元)、およびレプリケーション(複製)が定義されるコンテナである。データベースとスキーマの組合せがクエリに対するコンテクストを提供する。CDPは、ストア、スキーマ、および型という3レベルの階層を使用する。CDPストアは接続可能ユニットであり、スキーマはクエリに対するコンテクストを提供する。与えられたスキーマが、複数のCDPストアによってホスティング(提供)される可能性がある(例えば、型のセット(CRMスキーマ)がCDPの2つの異なるインスタンス上にデプロイされることが可能である)。「同一性」が必要な場合、CDPの外部のメカニズム(レプリケーション、バルクコピー)を用いるべきである。与えられたCDPストアが、その上にデプロイされた複数のスキーマ(例えばHRスキーマ、経理スキーマ等)を有する可能性がある。
以下、名前付けおよび発見(ディスカバリ)について説明する。上記で説明した、次のコードの第3行を考える。
Using (StorageContext sc =
new StorageContext(@\\corp001\defaultstore))
CDPストアの名前付けおよび利用可能なストアの発見は次のように解決される。CDPストアをより明確に定義すると、次の2つの可能性がある:
1.CDPストアは現実の物理ストア、すなわち、現実のサーバー上のデータベースである。
2.CDPストアは論理ストアである。ctorへの引数がエンティティインスタンスの論理コンテナを識別する。実際にはこれは、複製された物理ストアのファームとしてデプロイされる可能性があり、フロントエンドサーバーがロードバランサ(負荷平衡部)と協働して、この特定のセッションに対するコンテクストを形成する実際の物理ストアを選ぶ。
CDPモデルでは、ストレージコンテクストは、物理ストアではなく論理ストアを識別する。CDPは、レプリケーション、バックアップ/リストアのメカニズムが物理ストアのレベルでどのように働くかを指定しない。
ctor引数のフォーマットに関して、コネクション文字列はURI(Uniform Resource Identifier)である。個別のフレームワークがそれぞれのアプリケーション用の代替的名前付けフォーマットを定義できる。例えば、UAFは、UNC名(例えば\\server\share)を指定することにより、自己のアプリケーションにストレージコンテクストを設定させることを選択するかもしれない。しかし、URIによってCDPストアに接続することは常に可能とすべきである。すなわち、フレームワークによって用いられるいかなる代替名も、対応するCDPレベルのURIへの明確なマッピングを有していなければならない。
CDPは、ストアをどのようにして発見できるかを指定しない。この目的のためにアプリケーションは既存のメカニズムおよびリポジトリ(例えばUDDI(Universal Description, Discovery and Integration))を用いることができると期待されている。また、フレームワークが発見のための固有のメソッドを指定してもよい。
このセクションでは、アプリケーションが活用できるその他のCDPサービスを説明する。このようなサービスには次のものがある:
・ウォッチャ(Watcher)/通知サービス
・同期サービス
・明示的キャッシュサービス
・ユーティリティオペレーション
このセクションは、説明的とみなすべきであり、体系的とみなすべきでない。
ウォッチャ/通知サービス。通知(ウォッチャともいう)は、基礎となるストアに永続化されたエンティティ(データ)への変更の非同期通知を発生する能力を提供する。アプリケーション(または他の任意のコンポーネント)がこのサービスを用いて、永続化されたエンティティにおける変更をウォッチすることができる。アプリケーションは、何をウォッチするか、およびどのくらいの頻度で通知してほしいかを完全に制御できる。例えば、リッチアプリケーションビュー(RAV)通知がウォッチャを用いて構築される。クライアント側ブラウジングアプリケーションは、RAVを用いることにより、これらの通知を用いてデータ変更にアクティブに反応することができる。
CDPプログラミングモデルは、エンティティにおける変更をウォッチすることが可能なWatcherクラスをサポートする。エンティティウォッチャメカニズムは、フレームワークおよびアプリケーションがより高いレベルのウォッチャ抽象化を構築するのに十分である。例えば、データベース型ファイルストレージシステムは、エンティティウォッチャ抽象化の上にアイテム、アイテムエクステンション、およびリンクのウォッチャ抽象化を構築できる(例えば、エンティティは、ウォッチされることが可能な最も粒度の細かいデータ単位であることに留意されたい)。
同期サービス。CDPおよびその上のフレームワークに対して書かれたアプリケーションは、以下の同期関連サービスから恩恵を受ける:
1)変更追跡のためのスキーマアノテーション。スキーマ設計者は、エンティティ型に対する変更ユニット境界を指定することができる。変更ユニットの指定は、変更追跡サービスの機能を制御する。
2)変更追跡。これは、アプリケーションから概ね不可視の状態で、すべてのCDPオペレーションの間の変更ユニットのバージョンと、エンティティ削除のようなクリティカル(重大)なオペレーションのログとを維持管理する。変更追跡は、レガシーアプリケーションが引き続きCDPランタイムをバイパスして変更を行う場合であっても正しく機能する。
3)変更列挙。これにより、CDPアプリケーションは、ある特定のウォーターマーク以降に変更されたエンティティおよびその変更ユニットのセットを取得することが可能となる。変更は、CDPエンティティおよび行セット(RowSet)として返される。障害、バックアップおよびリストア、ならびに複雑な同期トポロジーに際してウォーターマークを維持管理するためのサービスのセットが提供される。
4)コンフリクト検出。これにより、CDPアプリケーションは、CDPオペレーション(例えば更新)が、既に実行されたオペレーションと衝突するかどうかを判断することが可能となる(これもウォーターマークに基づく)。
この中心的機能を用いて、フレームワークは付加的な、より高レベルの同期サービスを構築することが可能である。
明示的キャッシュサービス。CDPにおける明示的キャッシュサービスは、アプリケーションのパフォーマンス/スケーラビリティの改善、非連結型プログラミングモデルのサポート(例えば、非連結型プログラミングモデルはフル機能の明示的キャッシュの利益なしで実装可能であることに留意されたい)、および一時データのサポートを提供する。明示的キャッシュの特徴として以下のことが挙げられる:
・多様な種類のデータ(例えばエンティティ、非構造化データ、およびXMLデータ)のキャッシュ
・多様なキャッシュアクセスモード(例えば読み出し専用、読み書き、共有等)
・保存されているデータとの(例えばSQLサーバーに保存されたデータに対する)キャッシュコヒーレンシ
・アプリケーションフェイルオーバーのための複数のCDPキャッシュ間のキャッシュ(ある種のデータ、例えばセッションコンテクストデータ)のコヒーレンシ
明示的キャッシュに対するプログラミングサーフェスは次のものを公開することができる:
・キャッシュの作成
・キャッシュのポピュレート(データ投入)
・基礎となるストアへの(データの一部の)キャッシュの永続化
・キャッシュされたデータに対するクエリおよび更新
ユーティリティオペレーション。CDPは、エンティティおよびエンティティのコレクションに対するさまざまな管理オペレーションおよびユーティリティオペレーションのサポートを提供する。このようなオペレーションの例としては、コピー、移動、シリアライズ/デシリアライズ、およびバックアップ/リストアがある。
次に図18を参照して、エンティティを利用するアイテムのモデリングについて説明する。データベース型ファイルストレージシステム(例えばWINFS)の実装は、CDPおよびユーザアプリケーションフレームワーク(UAF)の両方の側面を包含する。なお、CDPアーキテクチャは、データベース型ファイルストレージシステムの書き換えを意味しているのではなく、単にその内部のコンポーネントの区分のし直しを意味している。
このセクションでは、UAFを定義した後、データベース型ファイルストレージシステムの種々のコンポーネントをUAFとCDPにどのように区分できるかについて検討する。
UAFは、「ユーザ」データのモデリングに関係するCDPフレームワークである。ユーザデータとは、ドキュメント、写真、音楽、連絡先等のような、通常のエンドユーザに関係する普通の日常的データを意味する。
基本的なCDPインフラストラクチャに対して、UAFは以下のものを追加する:
・基本アイテム型(および関連する型)
・ユーザデータをモデリングするための実際の型
・有効期間管理、包含等のような制約
・ユーザがアイテムを用いて実行可能なこと:移動、コピー、名前変更、シリアライズ、...
・アイテムに対する組織的コンストラクト:コンテナ、リスト、オートリスト(autolist:自動的に補完リストを表示する)、アノテーション(注釈)、カテゴリ
・(ルール作成等の)アイテムに対するエンドユーザプログラミング抽象化
認識され理解されるように、アプリケーション開発者にとって、CDPはUAFプログラミングモデルである。
具体的には、図18は、UAF内のアイテムの概念およびそれがいくつかのエンティティから実際にどのように派生されるかを示している。ドキュメントアイテム1802は、いくつかのエンティティ、例えば、以下のものに限定されないが、ドキュメント1804、複数のリンク1806およびドキュメントエクステンション1808、から派生可能である。作成者(author)アイテム1810は、いくつかのエンティティ、例えば、以下のものに限定されないが、作成者1812、および作成者エクステンション(拡張子)1814、から派生可能である。
次に図19を参照して、CDPの上にUAFを実装することにより種々の機能を実装するための拡張可能なメカニズムについて説明する。UAFは、CDPの上に構築されるので、CDPの拡張可能性メカニズムを利用して追加機能を実装することができる。CDP上のUAFの構築は、種々のレイヤおよび/またはコンポーネントを含み得る。ストア1902は、CDP制約エンジン1904を含み得る。ここで、CDP制約エンジン1904は少なくとも1つのUAF制約1906を含む。CDPランタイム1908はBLホスト1912を含むことができ、BLホスト1912はUAFアイテム挙動1910を含むことができる。さらに、UAFアイテム挙動1910はUAFバインド可能挙動1914を含み得る。CDPランタイム1908の上には、任意の他のUAFサービス1916が存在し得る。
UAFは、CDPの制約エンジンを用いて、アイテムセマンティクス(および他の型セマンティクス)を強制する。これらはCSDLを用いて作成され、スキーマジェネレータがそれらに対するストアレベルの制約を作成する。移動、シリアライズ等のようなアイテム挙動がCDPのBLメカニズムを用いて実装される。UAF型は、それらに関連するバインド可能挙動を有し得る。これらの挙動は、型が設計されデプロイされた後、UAFアプリケーション開発者によって作成される。同期、メタデータ処理等のような他のUAFサービスは、通常のCDPコードとして実装される。全体として、これらの個別のロジックがCDPの種々のレイヤで動作してUAFを形成する。
以下の説明は、CDPとUAFの間でのデータベース型ファイルストレージシステムの分割に当てはまる。データベース型ファイルストレージシステムにおける以下の機能はCDPレイヤに属する:
1.O−Rマッピング、すなわち、エンティティからテーブルへのマッピング。CDPは、POCO事例およびデータベース型ファイルストレージシステムサーバー事例を扱うための非規範的(non-prescriptive)マッピングをサポートする。また、これは更新マッピングも含み、エンティティ(および派生)型に対する基本的なCUDオペレーションを提供する。
2.OPathクエリマッピング
3.エンティティおよび他のCDMコア型の実装
4.StorageContextおよびStorageSearcher(セッションおよびトランザクションの管理とともに)
5.セッションキャッシュ、キャッシュフラッシュロジック(SaveChanges)
6.変更追跡
7.エンティティ型に対するウォッチャ
8.カーソルサービス(RAVを含む)
9.アイテムレベルのセキュリティ強制メカニズム(行レベルセキュリティ、型ビューに含まれるセキュリティプレディケート)
データベース型ファイルストレージシステムにおける以下の機能はUAFレイヤに属する:
1.バインド可能な、インスタンス単位の挙動
2.データベース型ファイルストレージシステムAPIメタデータ(CLRメタデータとして表現されるクライアントクラスおよび挙動)
3.アイテムレベルのメソッド(コピー、移動、シリアライズ、名前変更)
4.同期、同期スコープ、変更列挙
5.コンテナに対するウォッチャ
6.効率的なパス名計算およびアイテムドメインのためのパステーブル
7.メタデータハンドラ
8.データベース型ファイルストレージシステム名前空間
9.アイテム完全性を強制するためのコード(コンテナ、アイテムパート、リンク、ファイルストリーム、有効期間管理等)
図20は、CDP上に実装されるLOBアプリケーションの一例を示している。以下で、LOBフレームワークの要件と、そうした要件をどのようにCDPによってサポートできるかについて説明する。ビジネスフレームワークアプリケーションはLOBアプリケーションとみなすことができる。ビジネスアプリケーションの中心的な機能のセットは、共有ビジネスコンポーネントとしてのパッケージである。これらのコンポーネントのグループが、財務における総勘定元帳からCRMにおける営業支援システム(sales force automation)サービスに至るさまざまなビジネス機能を管理する。重要な特徴は、これらのコンポーネントがフェイスレス(特定化されない)で、拡張可能であり、どのレベルの機能および複雑さで利用されるかに応じて複数の市場の要求に応えるように利用可能なことである。
ビジネスフレームワーク(Business Framework: BF)は、ビジネスソリューションフレームワーク(Business Solutions Framework)およびビジネスアプリケーションフレームワーク(Business Application Framework)からなることが可能である。ビジネスソリューションフレームワークは、ほとんどのビジネスアプリケーションを構築するために有用な機能を提供する。これは、Money(金額)およびQuantity(数量)のような基本的なビジネスデータ型;顧客、事業部、為替情報および支払条件のようなアプリケーションファミリ規模のビジネスエンティティ;商取引および口座のような一般的なビジネスパターンを実装するための構築ブロック;ならびに商取引を記帳するため等の一般的なビジネスプロセスパターンを含む。
ソリューションフレームワーク(Solution Framework)は、ビジネスアプリケーションフレームワークを用いて書かれる。ビジネスアプリケーションフレームワークは、データアクセス、セキュリティ、ユーザインタフェース、ワークフロー、コンポーネントプログラミングモデルその他多くのことに対するリッチなサービスを提供することによって、コンポーネントを書くことをサポートする。ソリューションフレームワークによって定義されるビジネスモデルおよびルールがアプリケーションにとって適切でない場合には、それをバイパスすることができ、そのアプリケーションの開発者がアプリケーションフレームワークを直接使用することができる。
ビジネスアプリケーションフレームワークは、.NETフレームワークに基づき、その機能をビジネスアプリケーションに集中させる規範的プログラミングモデルを提供する。ビジネスアプリケーションフレームワークは、極めて高い拡張可能性の一方で、システム内でそれを使用するすべてのアプリケーションに対し、より一般的なソリューションが実装および構造の生産性および一貫性を向上させることがないかどうかについて、アプリケーション開発者のためにいくつかの判断を行う。ビジネスアプリケーションフレームワークは、ウェブに基づく分散OLTP(オンライントランザクション処理)アプリケーションを書くためのプログラミングモデルおよびサービスを提供する。ビジネスアプリケーションフレームワークは、製品固有のビジネスロジックを含まなくてよいので、ビジネスアプリケーションだけでなく、その基本的なプロファイルに適合する任意の他のアプリケーションを作成するためも好適である。ビジネスアプリケーションフレームワークは、データアクセス、メッセージング(例えばSOAP(Simple Object Access Protocol)およびその他のプロトコルの使用)、ワークフロー、イベント仲介、インスタンスアクティブ化、診断、コンフィグレーション(設定)、メタデータ管理(反映)、アプリケーションコンポーネントセキュリティ、グローバル化、ビジネスデスクシェル等のサポートを提供するサービスのセットを提供する。CDPに対する要求は主としてBFのビジネスアプリケーションフレームワーク部分、特にデータアクセスの領域およびデータロジックのリモーティングの領域に由来する。
エンティティ永続化(EP)は、ビジネスフレームワーク内のデータアクセスサブシステムであり、実用的なオブジェクトリレーショナルマッピングフレームワークに基づくリッチなデータモデルをサポートする。これは、開発者が、関係行にマッピングされる(C#の)オブジェクトを扱うという意味でオブジェクトリレーショナルである。中心的なデータモデリング概念は、エンティティおよびエンティティ間のリレーションシップ(関係)である。共通データモデル(CDM)が、BFデータアクセスのデータモデリング要求を本質的にサポートする。MBF EPは、以下のデータアクセスアクションに対するサポートを要求する:
・エンティティの作成、読み出し、更新および削除
・データセットを返すアドホッククエリ(任意問合せ)
・データベースで実行される集合系演算(set-based operation)
BFは、分散的なサービス指向構成をサポートするためのエージェント/サービスフレームワークを規定する。いくつかのビジネス機能が与えられると、エージェントはその機能のユーザのできるだけ近くで動作し、サービスはデータのできるだけ近くで動作する。「できるだけ近く」は、各デプロイメント事例およびユーザの種類によって異なる。エージェント/サービスパターンは、2層(クライアント・サーバー)デプロイメントから多層デプロイメントに至るデプロイメントフレキシビリティを提供する。このようなデプロイメントにおいて、サービスは、サービス境界を越えて呼び出し可能なインタフェースを提供する。エージェントは通常、クライアント(ユーザ)に近いデータをフェッチし、それに対して作用し、変更をサービスに伝える。
特に、図20は、LOBフレームワークおよび/またはアプリケーションがどのようにCDPを利用することができるかを例示している。フレームワーク、およびフレームワークを利用して構築されたアプリケーションは、中間層のウルトラアプリケーションサーバー2002にホスティング可能である。ウルトラアプリケーションサーバー2002は、標準的なLOBサービス、例えば、以下のものに限定されないが、ワークフロー、メッセージング、ビジネスプロセス等を、クライアントアプリケーション2004へのウェブサービスインタフェースの形で提供できる。ウルトラアプリケーションサーバー2002は、CDPを利用することにより、ストア制約2006(CDP制約エンジン2014経由で)およびデータ中心ビジネスロジック2008を作成することができる。クライアントアプリケーション2004は、Indigoチャネルを通じて(例えばウェブサービスプロキシ2010およびウェブサービスインタフェース2012を利用して)ウェブサービスメソッドを呼び出すことができる。さらに、クライアントアプリケーション2004は、そのオブジェクト永続化/データアクセスの必要に応じて、クライアント層のCDPを利用することができる。
CDPによって以下のことが満たされる:1)セッション管理;2)CRUD;3)共通データモデル(CDM)サポート(例えばエンティティ抽象化、エンティティ拡張);4)クエリ(例えばアドホック、エンティティ);5)ランニングオブジェクトキャッシュ(暗黙的);6)並行処理管理(例えば楽観的、孤立レベル、コンフリクト(衝突)検出等);7)ビジネスロジック(例えばメソッド内、妥当性検査/デフォルト処理、プロパティパターン、イベント);8)セキュリティ拡張;9)プロバイダとのマッピング(クエリ、スキーマ)(例えばリレーショナル、データベース型ファイルストレージシステム);10)メタデータ拡張機能(エンティティの他のユーザをサポート);11)集合演算;12)ストアドプロシジャ呼び出し機能;そして、13)N層デプロイメント。
BFエンティティ永続化はCDPに自然に適合する。BFの永続化要求のほとんどはCDPによって完全にサポートされる。一部のSOA要求もまたCDPにより解決される。しかし、エージェント/サービスモデル、BFビジネスオペレーションおよびプロセスに対する完全なサポートは、LOBフレームワークとしてCDPの上に構築することができる。MBFのビジネスソリューションフレームワークもまたCDPの上に階層化される。
図21および図22は、本発明による方法論(methodology)を示している。説明を簡単にするため、本方法論は一連のアクト(行為)として図示され説明される。理解され認識されるように、本発明は、例示されているアクトおよび/またはアクトの順序によって限定されない。例えば、アクトは、本明細書に記載されていない他のアクトとともに、さまざまな順序で、および/または並行して生起し得る。さらに、本発明による方法を実施するために、例示されたすべてのアクトが必須とは限らない。また、当業者には理解され認識されるように、本方法は、別法として、状態図やイベントにより、相互に関係する一連の状態として表現することも可能である。
図21は、CDPの種々のコンポーネント内のデータフローの管理を容易にする方法2100を示している。参照符号2102で、アプリケーションが注文データオブジェクトを作成する。注文データクラスは、CDMスキーマに記述されたテーブルセット型を表すことができる。注文データオブジェクトは、ストアと対話するために必要に応じて構成可能なストレージコンテクストオブジェクトを作成する。参照符号2104で、セッションを開始しトランザクションコンテクストを作成することにより、ストアへのコネクションをオープンし、セキュリティコンテクストが確立される。参照符号2106で、ストレージコンテクストのインスタンスがアプリケーションに返される。
参照符号2108で、CDMクエリに基づいてオブジェクトを取得するためのインタフェースが公開される。参照符号2110で、セキュリティを正しく適用しつつクエリがSQLにマッピングされる。また、アプリケーション/ユーザは、見ることを許可されているデータのみを見ることができる。参照符号2112で、クエリからの結果がCDPランタイムに返され、アプリケーションに返される。参照符号2114で、変更をフラッシュするために、カプセル化されたストレージコンテクストオブジェクトに対して変更保存(save changes)ファンクションを呼び出すことができる。
図22は、異なるアプリケーションが各フレームワークに関係し得るような複数の異なるフレームワークにわたるCDPのデプロイを容易にする方法を示している。参照符号2202で、構造化、半構造化、および非構造化データを保存できるデータストアを作成する。参照符号2204で、CDPを作成しデータストアの上にオーバーレイする。続いて参照符号2206で、関連する相異なるアプリケーションを有する複数のフレームワークがデータストアにアクセスできる。参照符号2208で、相異なるフレームワーク上の相異なるアプリケーションに対して共有データが提供される。すなわち、データストア内のデータを、それぞれのフレームワークとは無関係に複数の異なるアプリケーション間で共有することができる。参照符号2210で、プライベートデータが、特定のフレームワーク上の特定のアプリケーション専用となるように、利用可能となる。
次に図23を参照すると、本発明によるCDPならびに関連するコンポーネントおよび/またはプロセスのアーキテクチャを実行するように動作可能なコンピュータのブロック図が示されている。本アーキテクチャの諸態様についてさらに前後関係を説明するため、図23および以下の説明は、本発明の諸態様が実施され得る好適なコンピューティング環境2300の簡単な概説を行うことを意図している。本アーキテクチャは、1つまたは複数のコンピュータ上で動作し得るコンピュータ実行可能命令との一般的関連で説明されるが、当業者には認識されるように、本アーキテクチャは、他のプログラムモジュールと組み合わせて、および/またはハードウェアとソフトウェアの組合せとしても実施可能である。
一般的に、プログラムモジュールは、特定のタスクを実行し、または特定の抽象データ型を実装するルーチン、プログラム、コンポーネント、データ構造等を含む。さらに、当業者には理解されるように、本発明の方法は、シングルプロセッサ方式またはマルチプロセッサ方式のコンピュータシステム、ミニコンピュータ、メインフレームコンピュータ、ならびにパーソナルコンピュータ、ハンドヘルドコンピューティング装置、マイクロプロセッサ方式またはプログラム可能型の消費者電子機器(家電機器)等の他のコンピュータシステム構成でも実施可能であり、これらはそれぞれ1つまたは複数の関連するデバイスに結合して動作可能である。
また、例示した諸態様は、通信ネットワークを通じてリンクされたリモート処理デバイスによってタスクが実行される分散コンピューティング環境でも実施され得る。分散コンピューティング環境では、プログラムモジュールはローカル(近隣)およびリモート(遠隔地)の両方のメモリ記憶装置に配置され得る。
コンピュータは通常、さまざまなコンピュータ可読媒体を含む。コンピュータ可読媒体は、コンピュータによりアクセスできる任意の利用可能な媒体であってよく、揮発性および不揮発性媒体、リムーバブル(取り外し可能)および非リムーバブル(取り外し不能)媒体の両方を含む。例として、限定ではないが、コンピュータ可読媒体はコンピュータ記憶媒体および通信媒体を含み得る。コンピュータ記憶媒体としては、揮発性および不揮発性、リムーバブルおよび非リムーバブルの媒体があり、コンピュータ可読命令、データ構造体、プログラムモジュール、または他のデータのような情報の記憶のための任意の方法あるいは技術で実現される。コンピュータ記憶媒体としては、以下のものに限定されないが、RAM、ROM、EEPROM、フラッシュメモリ等のメモリ技術、CD−ROM、ディジタルビデオディスク(DVD)等の光ディスクストレージ(記憶装置)、磁気カセット、磁気テープ、磁気ディスクストレージ等の磁気記憶装置、または、所望の情報を格納するために使用可能でありコンピュータからアクセス可能な任意の他の媒体がある。
通信媒体は通常、キャリア波等の変調データ信号または他のトランスポート(転送)メカニズムでコンピュータ可読命令、データ構造、プログラムモジュールまたは他のデータを具現化し、いかなる情報配信媒体も含む。「変調データ信号」という用語は、信号中に情報を符号化するように1つまたは複数の信号の特性が設定または変更された信号を意味する。例として、限定ではないが、通信媒体としては、有線ネットワークまたは直接有線コネクションのような有線媒体、および音響、RF、赤外線等の無線媒体がある。上記のいずれかの組合せもまた、コンピュータ可読媒体の範囲内に含まれるべきである。
再び図23を参照すると、諸態様を実施するための例示的環境2300はコンピュータ2302を含む。コンピュータ2302は、処理ユニット2304、システムメモリ2306およびシステムバス2308を含む。システムバス2308は、システムメモリ2306を含む(ただしこれに限定されない)システムコンポーネントを処理ユニット2304に結合する。処理ユニット2304は種々の市販のプロセッサのいずれでもよい。デュアルマイクロプロセッサおよびその他のマルチプロセッサアーキテクチャもまた、処理ユニット2304として使用可能である。
システムバス2308は、さまざまな商用バスアーキテクチャのいずれかを用いたメモリバス(メモリコントローラの有無を問わない)、ペリフェラルバス、およびローカルバスとさらに相互接続され得る数種のバス構成のいずれでもよい。システムメモリ2306は、読み出し専用メモリ(ROM)2310およびランダムアクセスメモリ(RAM)2312を含む。基本入出力システム(BIOS)がROM、EPROM、EEPROM等の不揮発性メモリ2310に記憶され、このBIOSは、起動中等にコンピュータ2302内の要素間で情報を転送するために役立つ基本ルーチンを含む。RAM2312は、データをキャッシュするためのスタティックRAMのような高速RAMを含んでもよい。
コンピュータ2302はさらに、内蔵ハードディスクドライブ(HDD)2314(例えばEIDE、SATA)(この内蔵ハードディスクドライブ2314は、外付け用に適当な筐体(図示せず)内に構成されてもよい)、磁気フロッピー(登録商標)ディスクドライブ(FDD)2316(例えばリムーバブルディスケット2318の読み書きを行う)、および光ディスクドライブ2320(例えばCD−ROMディスク2322の読み出し、またはDVD等の他の大容量光媒体の読み書きを行う)を含む。ハードディスクドライブ2314、磁気ディスクドライブ2316および光ディスクドライブ2320はそれぞれハードディスクドライブインタフェース2324、磁気ディスクドライブインタフェース2326および光ドライブインタフェース2328によってシステムバス2308に接続され得る。外付けドライブ実装のためのインタフェース2324は、ユニバーサルシリアルバス(USB)およびIEEE1394インタフェース技術の少なくとも一方または両方を含む。他の外付けドライブ接続技術も考慮の範囲内である。
ドライブ(駆動装置)およびそれらに関連するコンピュータ可読媒体は、データ、データ構造、コンピュータ実行可能命令等の不揮発性ストレージを備える。コンピュータ2302のために、ドライブおよび媒体は、適当なディジタルフォーマットで任意のデータのストレージを備える。上記のコンピュータ可読媒体の説明はHDD、リムーバブル磁気ディスケット、およびCDやDVDのようなリムーバブル光媒体について述べているが、当業者には理解されるように、zipドライブ、磁気カセット、フラッシュメモリカード、カートリッジ等のような、コンピュータが読むことができる他の種類の媒体もまた、例示的オペレーティング環境において使用可能であり、さらに、任意のこのような媒体が、本アーキテクチャの方法を実行するためのコンピュータ実行可能命令を含んでもよい。
オペレーティングシステム2330、1つまたは複数のアプリケーションプログラム2332、他のプログラムモジュール2334およびプログラムデータ2336を含めて、複数のプログラムモジュールが、ドライブおよびRAM2312に記憶され得る。オペレーティングシステム、アプリケーション、モジュール、および/またはデータの全部または一部が、RAM2312にキャッシュされてもよい。理解されるように、種々の商用オペレーティングシステムまたはオペレーティングシステムの組合せが本アーキテクチャとともに実施され得る。
ユーザは、キーボード2338およびポインティングデバイス(例えばマウス2340)等の1つまたは複数の有線/無線入力デバイスを通じてコンピュータ2302にコマンドおよび情報を入力できる。他の入力デバイス(図示せず)としては、マイクロフォン、IRリモートコントロール、ジョイスティック、ゲームパッド、スタイラスペン、タッチスクリーン等が挙げられる。これらおよびその他の入力デバイスは、システムバス2308に結合した入力デバイスインタフェース2342を通じて処理ユニット2304に接続されることが多いが、パラレルポート、IEEE1394シリアルポート、ゲームポート、USBポート、IRインタフェース等のような他のインタフェースで接続されてもよい。
モニタ2344または他の種類の表示デバイスもまた、ビデオアダプタ2346のようなインタフェース経由でシステムバス2308に接続される。モニタ2344に加えて、コンピュータは通常、スピーカ、プリンタ等のような他の周辺出力デバイス(図示せず)を含む。
コンピュータ2302は、リモートコンピュータ(複数可)2348のような1つまたは複数のリモートコンピュータへの、有線および/または無線通信による論理コネクションを用いたネットワーク環境で動作してもよい。リモートコンピュータ(複数可)2348は、ワークステーション、サーバーコンピュータ、ルータ、パーソナルコンピュータ、ポータブルコンピュータ、マイクロプロセッサ方式の娯楽機器、ピアデバイスまたは他の一般的なネットワークノードであってよく、一般に、コンピュータ2302に関連して説明した要素の多くまたはすべてを含む。ただし、簡単のため、メモリ/ストレージデバイス2350のみが例示されている。図示されている論理コネクションは、ローカルエリアネットワーク(LAN)2352、および/または広域ネットワーク(WAN)2354等のさらに大規模なネットワークへの有線/無線接続を含む。このようなLANおよびWANネットワーキング環境は、事務所や会社で一般的であり、イントラネットのような企業規模のコンピュータネットワークを実現し、それらはすべて、インターネットのようなグローバル通信ネットワークに接続され得る。
LANネットワーキング環境で使用される場合、コンピュータ2302は、有線および/または無線通信ネットワークインタフェース(アダプタ)2356を通じてローカルネットワーク2352に接続される。アダプタ2356は、LAN2352との有線または無線通信を実現でき、無線アダプタ2356と通信するためにLAN2352上に配置された無線アクセスポイントを含んでもよい。
WANネットワーキング環境で使用される場合、コンピュータ2302はモデム2358を含んでもよく、あるいは、WAN2354上の通信サーバーに接続されるか、または、インターネットのようなWAN2354を通じて通信を確立するための他の手段を有する。モデム2358は、内蔵でも外付けでもよく、有線デバイスでも無線デバイスでもよいが、シリアルポートインタフェース2342経由でシステムバス2308に接続される。ネットワーク環境では、コンピュータ2302に関して図示されているプログラムモジュールまたはその一部が、リモートメモリ/ストレージデバイス2350に記憶され得る。理解されるように、図示されているネットワーク接続は例示であり、コンピュータ間で通信リンクを確立する他の手段を使用してもよい。
コンピュータ2302は、任意の無線デバイス、あるいは無線通信において動作可能に配置されたエンティティ(例えば、プリンタ、スキャナ、デスクトップおよび/またはポータブルコンピュータ、携帯情報端末、通信衛星、無線検知可能タグが設けられた任意の機器または場所(例えば、キオスク、新聞売店、化粧室)、および電話機)と通信するように動作可能である。これには、少なくともWi−FiおよびBluetooth(商標)無線技術が含まれる。したがって、通信は、従来型のネットワークと同様のあらかじめ定められた構成であってもよく、あるいは単に、少なくとも2つのデバイス間のアドホック通信であってもよい。
Wi−Fi(Wireless Fidelity)は、家庭の寝椅子、ホテルの部屋のベッド、あるいは勤務時の会議室から、配線なしでインターネットへの接続を可能にする。Wi−Fiは、携帯電話で用いられるものと同様の無線技術であって、例えばコンピュータのようなデバイスが、基地局の電波到達範囲内のどこでも、屋内・屋外を問わずデータを送受信することを可能にする。Wi−Fiネットワークは、IEEE802.11(a、b、g等)と呼ばれる無線技術を用いて、安全で、信頼性のある、高速な無線接続を提供する。Wi−Fiネットワークは、コンピュータを相互に、インターネットに、および有線ネットワークに(これはIEEE802.3すなわちEthernet(登録商標)を使用する)接続するために使用可能である。Wi−Fiネットワークは、例えば、無認可の2.4GHzおよび5GHz電波帯において、11Mbps(802.11a)または54Mbps(802.11b)のデータレートで、あるいは両方の帯域を含む製品(デュアルバンド)で動作するので、このネットワークは、多くのオフィスで用いられる基本的な10BaseT有線Ethernet(登録商標)ネットワークと同様の実際的パフォーマンスを提供することができる。
次に図24を参照すると、データ管理を行うためにCDPならびにそれぞれのコンポーネントおよび/またはプロセスにより利用可能な例示的コンピューティング環境2400の概略ブロック図が示されている。システム2400は、1つまたは複数のクライアント2402を含む。クライアント(複数可)2402は、ハードウェアおよび/またはソフトウェア(例えば、スレッド、プロセス、コンピューティングデバイス)のいずれでもよい。クライアント(複数可)2402は、例えば、本アーキテクチャを使用することによるクッキー(複数可)および/または関連するコンテクスト情報を収容できる。
また、システム2400は、1つまたは複数のサーバー2404も含む。サーバー(複数可)2404もまた、ハードウェアおよび/またはソフトウェア(例えば、スレッド、プロセス、コンピューティングデバイス)のいずれでもよい。サーバー2404は、例えば本アーキテクチャを使用することによって変換を実行するためのスレッドを収容できる。クライアント2402とサーバー2404の間の1つの可能な通信としては、2つ以上のコンピュータプロセスの間での伝送に適合したデータパケットの形態の通信があり得る。データパケットは、例えば、クッキーおよび/または関連するコンテクスト情報を含み得る。システム2400は、クライアント(複数可)2402とサーバー(複数可)2404の間の通信を容易にするために使用可能な通信フレームワーク2406(例えばインターネットのようなグローバル通信ネットワーク)を含む。
通信は、有線(光ファイバを含む)および/または無線技術によって実現可能である。クライアント(複数可)2402は、クライアント(複数可)2402にとってローカルな情報(例えば、クッキー(複数可)および/または関連するコンテクスト情報)を記憶するために使用可能な1つまたは複数のクライアントデータストア2408に動作可能に接続される。同様に、サーバー(複数可)2404は、サーバー2404にとってローカルな情報を記憶するために使用可能な1つまたは複数のサーバーデータストア2410に動作可能に接続される。
以上、実施例について説明した。もちろん、本アーキテクチャを説明する目的で、コンポーネントまたは方法の想定し得るあらゆる組合せを記載することはできないが、当業者には認識されるように、本アーキテクチャのさらに多くの組合せおよび置換が可能である。したがって、本アーキテクチャは、添付の特許請求項の趣旨および範囲内に入るすべてのそのような変更、修正および変形を包含することを意図している。さらに、「includes」(含む)という用語が詳細な説明または特許請求の範囲で用いられる限り、この用語は、「comprising」(「含む」あるいは「備えた」)という用語が請求項における移行語として用いられる場合に解釈されるのと同様に包括的であることを意図している。
本アーキテクチャによる共通データプラットフォーム(CDP)を使用するシステムを示す図である。 本アーキテクチャによるCDPシステムをより詳細に示す図である。 データ管理を容易にする共通データプラットフォームを実装する方法を示す図である。 本発明のアーキテクチャに関連するCDPコンポーネントの概略図である。 CDPの種々のコンポーネント内のデータフローを示す図である。 CDPを用いて実装可能な種々のフレームワークを示す図である。 複数のアプリケーションがデータを共有することを可能にする共通のデータベース型ファイルストレージシステムの事例を示す図である。 CDPおよび関連するアーキテクチャによる複数のフレームワークを利用した単一のアプリケーションを示す図である。 複数の異なるフレームワークに関連する複数のアプリケーションとデータを共有するCDPを示す図である。 データ管理を容易にするためのCDPの2層デプロイメントを示す図である。 データ管理を容易にするための、共有データを用いた2層デプロイメントを示す図である。 アプリケーションが他のアプリケーションによる閲覧および/または利用を望まないプライベートデータを有するような第2の構成を示す図である。 別のアプリケーションがストアに直接アクセスするような、関連する第3の構成を示す図である。 CDPコンポーネントの3層デプロイメント構成を示す図である。 CDPコンポーネントの3層デプロイメント構成を示す図である。 クライアント層および中間層の両方で動作するアプリケーションロジックの図である。 クライアント層および中間層の両方で動作するアプリケーションロジックの図である。 少なくとも1つのエンティティを利用するアイテムのモデリングを示す図である。 CDPの上にUAFを組み込むことにより種々の機能を実装するための拡張可能なメカニズムを示す図である。 CDP上に実装されるLOBアプリケーションの一例を示す図である。 CDPの種々のコンポーネント内のデータフローの管理を容易にする方法を示す流れ図である。 異なるアプリケーションが各フレームワークに関係し得るような複数の異なるフレームワークにわたるCDPのデプロイを容易にする方法を示す流れ図である。 本アーキテクチャを実行するように動作可能なコンピュータのブロック図である。 本発明による例示的コンピューティング環境の概略ブロック図である。
符号の説明
102 共通データプラットフォーム(CDP)
104 アプリケーションおよびアプリケーションフレームワーク
106 データストア
108 API(言語統合およびデータアクセス)
110 CDPランタイム
112 制約/セキュリティ
202 データストア/およびストア管理(例:SQLサーバー)
204 アプリケーションフレームワーク
400 アプリケーション
402 共通データモデル(テーブル、エンティティ、リレーションシップ)
404 セッション、トランザクション
406 クエリプロセッサ
408 永続化エンジン(O−Rマッピング、クエリ・更新マッピングを含む)
410 カーソル、ルール
412 サービス(変更追跡、コンフリクト検出、イベンティング)
414 オブジェクトキャッシュ
416 ビジネスロジックホスティング
500 アプリケーション
602 CDP
604 UAF(別名WinFS)
606 ストアレイヤ
608 コラボレーション
610 BF
612 連絡先管理アプリケーション
614 コラボレーションアプリケーション
616 CRMアプリケーション
618 連絡先
620 アイテム
622 ドキュメントライブラリー
624 注文
626 エンティティ
702 CDP+ストア
706 アイテム
708 電子メール
710 ドキュメント
712 連絡先
714 エンティティ
716 電子メールアプリケーション
718 リッチEVITEクライアント
720 プロジェクト
802 CRMアプリケーション
806 連絡先
810 アイテム
812 エンティティ
814 注文明細
816 購入注文書
904 UAF(別名WinFS)
908 コラボレーション
912 連絡先管理アプリケーション
914 コラボレーションアプリケーション
916 CRMアプリケーション
918 連絡先
920 アイテム
922 ドキュメントライブラリー
924 注文
926 エンティティ
928 ストア
1002 API(言語統合およびデータアクセス)
1004 CDPランタイム
1006 アプリケーション
1008 制約/セキュリティ
1010 クライアント層
1012 ストア
1014 サーバー層
1108 共有データ
1110 ストア
1114 制約/セキュリティ
1211 共有データ
1114 制約/セキュリティ
1206 ストア
1210 アプリケーション1プライベートデータ
1211 共有データ
1212 アプリケーション2プライベートデータ
1402 CDPランタイム
1404 ストア
1406 クライアント
1408 ウェブサービスプロキシ
1414 リモーティングエージェント
1410 ウェブサービス
1412 ビジネスロジックホスティング
1416 リモーティングサービス
1420 API(言語統合およびデータアクセス)
1414 リモーティングエージェント
1602 ストア
1604 制約/セキュリティ
1802 ドキュメントアイテム
1804 ドキュメント
1806 リンク
1808 ドキュメントエクステンション
1810 作成者アイテム
1812 作成者
1814 作成者エクステンション
1902 ストア
1904 CDP制約エンジン
1906 UAF制約
1908 CDPランタイム
1910 UAFアイテム挙動
1912 BLホスト
1914 UAFバインド可能な挙動
1916 他のUAFサービス
2002 ウルトラアプリケーションサーバー
2004 LOBクライアント
2006 LOB制約
2008 データ中心BL
2010 ウェブサービスプロキシ
2012 ウェブサービスインタフェース
2014 CDP制約エンジン
2304 処理ユニット
2306 システムメモリ
2308 バス
2314 内蔵HDD
2314 外付けHDD
2318 ディスク
2320 光ドライブ
2322 ディスク
2324,2326,2328 インタフェース
2330 オペレーティングシステム
2332 アプリケーション
2334 モジュール
2336 データ
2338 キーボード
2340 マウス
2342 入力デバイスインタフェース
2344 モニタ
2346 ビデオアダプタ
2348 リモートコンピュータ
2350 メモリ/ストレージ
2356 ネットワークアダプタ
2358 モデム
2402 クライアント
2404 サーバー
2406 通信フレームワーク
2408 クライアントデータストア
2410 サーバーデータストア

Claims (20)

  1. データへの統一的なアクセスを可能にする複数の異なるアプリケーションフレームワークによりアクセス可能なデータサービスを提供することによってデータ管理を容易にするデータプラットフォームにおいて、
    公開クラス、インタフェース、および静的ヘルパ関数の少なくとも1つの形でアプリケーションへの通信を容易にするアプリケーションプログラムインタフェース(API)と、
    前記APIへのインタフェースとなり、オブジェクトリレーショナルマッピング、クエリマッピング、および制約の強制の少なくとも1つを提供するランタイムコンポーネントと、
    前記複数の異なるアプリケーションフレームワークに共通するデータインタフェースを抽出する共通データモデルと
    を備えたことを特徴とするデータプラットフォーム。
  2. 前記共通データモデルが、ドメイン固有の型、制約、およびリレーションシップの少なくとも1つの作成を容易にすることを特徴とする請求項1に記載のプラットフォーム。
  3. 前記ドメイン固有の型が、プロパティおよびメソッドの少なくとも1つのグルーピング(グループ化)に対する指定であるエンティティ型であり、該ドメイン固有の型がエンティティ、テーブル、テーブルセット、およびリレーションシップの少なくとも1つを使用することを特徴とする請求項2に記載のプラットフォーム。
  4. スキーマが前記エンティティ、前記リレーションシップ、および前記テーブルセットの少なくとも1つを定義することにより、名前空間がそれに関連づけられるようにしたことを特徴とする請求項3に記載のプラットフォーム。
  5. 前記共通データモデルが、前記固有のドメイン型システムに対するクエリ言語を定義し、該クエリ言語は、保存されたデータに対する強く型付けされた、オブジェクトに基づく抽象化を提供するオブジェクト構造に対するリッチなクエリを可能にすることを特徴とする請求項2に記載のプラットフォーム。
  6. 前記クエリ言語が、OpathおよびOSQL(オブジェクト指向構造化クエリ言語)の少なくとも1つであることを特徴とする請求項5に記載のプラットフォーム。
  7. 制約の宣言的作成を容易にし、前記データプラットフォームの少なくとも1つのエンティティへのアクセスを制御する制約/セキュリティエンジンをさらに備えたことを特徴とする請求項1に記載のプラットフォーム。
  8. 規範的オブジェクトリレーショナルマッピングおよび非規範的オブジェクトリレーショナルマッピングの少なくとも1つを呼び出すことによって、言語クラスを基礎となるテーブル表現にマッピングするオブジェクトリレーショナルマッピングを呼び出す永続化エンジンをさらに備えたことを特徴とする請求項1に記載のプラットフォーム。
  9. 前記マッピングが、アプリケーション空間から前記共通データモデルへのマッピングであり、前記共通データモデルからストアへのマッピングとは独立であることを特徴とする請求項8に記載のプラットフォーム。
  10. 前記複数の異なるアプリケーションフレームワークが、業務フレームワーク、エンドユーザフレームワーク、システム管理フレームワーク、ユーザアプリケーションフレームワーク、コラボレーションフレームワーク、ビジネスフレームワーク、および個人情報フレームワークの少なくとも1つを含むことを特徴とする請求項1に記載のプラットフォーム。
  11. 前記アプリケーションが、エンドユーザアプリケーション、知識労働者向けアプリケーション、業務アプリケーション、ウェブアプリケーション、連絡先管理アプリケーション、ドキュメント管理アプリケーション、コラボレーションアプリケーション、電子メールアプリケーション、顧客関係管理アプリケーション、企業資源計画アプリケーション、およびシステム管理アプリケーションの少なくとも1つであることを特徴とする請求項1に記載のプラットフォーム。
  12. 前記ランタイムコンポーネントが、識別マッピング、オブジェクト変更追跡、および元の値の少なくとも1つを含むエンティティ状態の管理を提供することを特徴とする請求項1に記載のプラットフォーム。
  13. 前記データプラットフォームおよびそれぞれのコンポーネントが層不問(tier-agnostic)であり、クライアント層、中間層、サーバー層、およびウェブサービス層の少なくとも1つに存在し得ることを特徴とする請求項1に記載のプラットフォーム。
  14. 前記共通データモデルがデータストレージコンポーネント内の共有データを提供することにより、対応するフレームワークに関連する相異なるアプリケーションが前記共有データにアクセスできるようにしたことを特徴とする請求項1に記載のプラットフォーム。
  15. 前記共通データモデルがデータストレージコンポーネント内のプライベートデータを提供することにより、該プライベートデータが特定のフレームワークに関連する特定のアプリケーションのみによってアクセスされるようにしたことを特徴とする請求項1に記載のプラットフォーム。
  16. ルールサービス、変更追跡サービス、コンフリクト検出サービス、イベンティングサービスおよび通知サービスの少なくとも1つをさらに備えたことを特徴とする請求項1に記載のプラットフォーム。
  17. コンピュータにより実現されるデータ管理方法において、
    構造化、半構造化、および非構造化データ型をモデリングし保存するストア上にデータプラットフォームをオーバーレイすることにより、相異なるアプリケーションフレームワークに対してリッチなデータモデル、マッピング、クエリ、およびデータアクセスメカニズムの少なくとも1つをサポートするデータサービスを提供し、
    前記データプラットフォームの上に1つまたは複数のアプリケーションフレームワークをオーバーレイすることにより、各フレームワーク内の少なくとも1つのアプリケーションがデータストアにアクセスすることを可能にし、
    公開クラス、インタフェース、および静的ヘルパ関数の少なくとも1つの形でアプリケーションと通信し、
    オブジェクトリレーショナルマッピング、クエリマッピング、および制約の強制の少なくとも1つを提供し、
    複数の異なるアプリケーションフレームワークに共通するモデリング概念を取り出す
    ことを特徴とするデータ管理方法。
  18. オブジェクトを作成し、
    セッションを用いて前記ストアへのコネクションをオープンしてセキュリティコンテクストを確立し、
    アプリケーションにストレージコンテクストのインスタンスを返し、
    オブジェクトを取得するためのインタフェースを公開し、
    セキュリティを適用しつつクエリをSQLにマッピングし、
    データプラットフォームランタイムおよび前記アプリケーションに結果を返し、
    カプセル化されたストレージコンテクストオブジェクトに対する変更を保存する
    ことをさらに含むことを特徴とする請求項17に記載の方法。
  19. 前記相異なるアプリケーションフレームワーク上の相異なるアプリケーションに共有データを提供し、
    特定の異なるアプリケーションフレームワーク上のアプリケーションに固有のプライベートデータを利用する
    ことをさらに含むことを特徴とする請求項17に記載の方法。
  20. コンピュータにより実現される、データの管理を容易にするシステムにおいて、
    公開クラス、インタフェース、および静的ヘルパ関数の少なくとも1つの形でアプリケーションと通信する手段と、
    オブジェクトリレーショナルマッピング、クエリマッピング、および制約の強制の少なくとも1つを提供する手段と、
    複数の異なるアプリケーションフレームワークに共通するモデリング概念を取り出す手段と
    を備えたことを特徴とするデータの管理を容易にするシステム。
JP2006047523A 2005-02-28 2006-02-23 異なるアプリケーションフレームワーク間のデータサービスのためのプラットフォーム Pending JP2006244488A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US65755605P 2005-02-28 2005-02-28
US11/171,905 US7853961B2 (en) 2005-02-28 2005-06-30 Platform for data services across disparate application frameworks

Publications (1)

Publication Number Publication Date
JP2006244488A true JP2006244488A (ja) 2006-09-14

Family

ID=36607592

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2006047523A Pending JP2006244488A (ja) 2005-02-28 2006-02-23 異なるアプリケーションフレームワーク間のデータサービスのためのプラットフォーム

Country Status (19)

Country Link
US (1) US7853961B2 (ja)
EP (1) EP1696352A3 (ja)
JP (1) JP2006244488A (ja)
KR (1) KR101224670B1 (ja)
CN (1) CN1828527B (ja)
AU (1) AU2006200230B2 (ja)
BR (1) BRPI0600191A (ja)
CA (1) CA2533942A1 (ja)
CO (1) CO5790183A1 (ja)
EG (1) EG25837A (ja)
IL (1) IL173430A0 (ja)
MX (1) MXPA06001208A (ja)
MY (1) MY149824A (ja)
NO (1) NO20060072L (ja)
NZ (1) NZ544991A (ja)
RU (1) RU2425417C2 (ja)
SG (1) SG125173A1 (ja)
TW (1) TWI405091B (ja)
ZA (1) ZA200600754B (ja)

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008171316A (ja) * 2007-01-15 2008-07-24 Nec Corp マッピングシステム、マッピング方法及びプログラム
WO2010050601A1 (ja) * 2008-10-31 2010-05-06 株式会社 東芝 フレームワークプログラム及びクライアント装置
JP2011501267A (ja) * 2007-10-11 2011-01-06 マイクロソフト コーポレーション 一般的モデルの編集フレームワーク
JP2011180887A (ja) * 2010-03-02 2011-09-15 Nec Corp データ更新処理制御装置
JP5807677B2 (ja) * 2011-05-24 2015-11-10 日本電気株式会社 情報処理システム、アクセス権管理方法、情報処理装置およびその制御方法と制御プログラム
JP2017519307A (ja) * 2014-06-23 2017-07-13 オラクル・インターナショナル・コーポレイション マルチテナントアプリケーションサーバ環境における複数のパーティション編集セッションをサポートするためのシステムおよび方法
WO2020008855A1 (ja) 2018-07-03 2020-01-09 オムロン株式会社 コンパイル装置およびコンパイル方法
WO2020008867A1 (ja) 2018-07-03 2020-01-09 オムロン株式会社 制御装置および制御方法

Families Citing this family (159)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6889231B1 (en) * 2002-08-01 2005-05-03 Oracle International Corporation Asynchronous information sharing system
JP4046086B2 (ja) * 2004-01-21 2008-02-13 トヨタ自動車株式会社 可変圧縮比内燃機関
US7603347B2 (en) * 2004-04-09 2009-10-13 Oracle International Corporation Mechanism for efficiently evaluating operator trees
US7516121B2 (en) * 2004-06-23 2009-04-07 Oracle International Corporation Efficient evaluation of queries using translation
EP1759315B1 (en) * 2004-06-23 2010-06-30 Oracle International Corporation Efficient evaluation of queries using translation
US7885980B2 (en) 2004-07-02 2011-02-08 Oracle International Corporation Mechanism for improving performance on XML over XML data using path subsetting
US7921076B2 (en) 2004-12-15 2011-04-05 Oracle International Corporation Performing an action in response to a file system event
US20060195460A1 (en) * 2005-02-28 2006-08-31 Microsoft Corporation Data model for object-relational data
US7685561B2 (en) * 2005-02-28 2010-03-23 Microsoft Corporation Storage API for a common data platform
US7853961B2 (en) 2005-02-28 2010-12-14 Microsoft Corporation Platform for data services across disparate application frameworks
DE102005009529A1 (de) * 2005-03-02 2006-09-07 Siemens Ag Datenverarbeitungssystem zur Integration zweier Frameworks
US8521752B2 (en) 2005-06-03 2013-08-27 Osr Open Systems Resources, Inc. Systems and methods for arbitrary data transformations
US7487191B2 (en) * 2005-06-10 2009-02-03 International Business Machines Corporation Method and system for model-based replication of data
US20070027905A1 (en) * 2005-07-29 2007-02-01 Microsoft Corporation Intelligent SQL generation for persistent object retrieval
US7631011B2 (en) * 2005-07-29 2009-12-08 Microsoft Corporation Code generation patterns
US7685567B2 (en) * 2005-07-29 2010-03-23 Microsoft Corporation Architecture that extends types using extension methods
US20070044083A1 (en) * 2005-07-29 2007-02-22 Microsoft Corporation Lambda expressions
US7702686B2 (en) * 2005-07-29 2010-04-20 Microsoft Corporation Retrieving and persisting objects from/to relational databases
US20070027849A1 (en) * 2005-07-29 2007-02-01 Microsoft Corporation Integrating query-related operators in a programming language
US7676493B2 (en) * 2005-09-07 2010-03-09 Microsoft Corporation Incremental approach to an object-relational solution
US20070136254A1 (en) * 2005-12-08 2007-06-14 Hyun-Hwa Choi System and method for processing integrated queries against input data stream and data stored in database using trigger
US20070174420A1 (en) * 2006-01-24 2007-07-26 International Business Machines Corporation Caching of web service requests
US8219919B2 (en) * 2006-02-06 2012-07-10 Attachmate Group Method for automating construction of the flow of data driven applications in an entity model
US7680767B2 (en) * 2006-03-23 2010-03-16 Microsoft Corporation Mapping architecture with incremental view maintenance
US7647298B2 (en) * 2006-03-23 2010-01-12 Microsoft Corporation Generation of query and update views for object relational mapping
US20070250527A1 (en) * 2006-04-19 2007-10-25 Ravi Murthy Mechanism for abridged indexes over XML document collections
US7526501B2 (en) * 2006-05-09 2009-04-28 Microsoft Corporation State transition logic for a persistent object graph
US20070266041A1 (en) * 2006-05-11 2007-11-15 Microsoft Corporation Concept of relationshipsets in entity data model (edm)
US8887130B2 (en) * 2006-06-16 2014-11-11 Sony Corporation Software design and development in a service oriented environment
US7499909B2 (en) * 2006-07-03 2009-03-03 Oracle International Corporation Techniques of using a relational caching framework for efficiently handling XML queries in the mid-tier data caching
US9747381B1 (en) * 2006-07-14 2017-08-29 Oracle America, Inc. Querying and configuring an identity management framework
US7512748B1 (en) 2006-08-17 2009-03-31 Osr Open Systems Resources, Inc. Managing lock rankings
US8539228B1 (en) 2006-08-24 2013-09-17 Osr Open Systems Resources, Inc. Managing access to a resource
US20080052314A1 (en) * 2006-08-25 2008-02-28 Ritwik Batabyal e-ENABLER FRAMEWORK
US8726299B1 (en) * 2006-09-29 2014-05-13 Symantec Operating Corporation Image-oriented, plugin-based API to storage server appliances
US7996376B2 (en) * 2006-10-27 2011-08-09 Verizon Patent And Licensing Inc. Method and apparatus for managing session data across multiple applications
US8245281B2 (en) 2006-12-29 2012-08-14 Aruba Networks, Inc. Method and apparatus for policy-based network access control with arbitrary network access control frameworks
CA2578472C (en) * 2007-01-12 2013-01-15 Truecontext Corporation Methods and system for orchestrating services and data sharing on mobile devices
US7827405B2 (en) 2007-01-19 2010-11-02 Microsoft Corporation Mechanism for utilizing kerberos features by an NTLM compliant entity
US7899917B2 (en) * 2007-02-01 2011-03-01 Microsoft Corporation Synchronization framework for occasionally connected applications
US20080201234A1 (en) * 2007-02-16 2008-08-21 Microsoft Corporation Live entities internet store service
US20080201338A1 (en) * 2007-02-16 2008-08-21 Microsoft Corporation Rest for entities
US9430552B2 (en) 2007-03-16 2016-08-30 Microsoft Technology Licensing, Llc View maintenance rules for an update pipeline of an object-relational mapping (ORM) platform
US8464209B2 (en) 2007-03-19 2013-06-11 Microsoft Corporation Using collaborative development information in a team environment
US8813101B2 (en) * 2007-03-28 2014-08-19 Microsoft Corporation Software technique to correlate conceptually similar entities
US20080244557A1 (en) * 2007-04-02 2008-10-02 Inventec Corporation Knowledge management system and method for implementing management software using the same
US8024433B2 (en) * 2007-04-24 2011-09-20 Osr Open Systems Resources, Inc. Managing application resources
US9053162B2 (en) * 2007-04-26 2015-06-09 Microsoft Technology Licensing, Llc Multi-tenant hosted application system
US8122055B2 (en) * 2007-04-26 2012-02-21 Microsoft Corporation Hosted multi-tenant application with per-tenant unshared private databases
US8554878B2 (en) * 2007-05-21 2013-10-08 Sap Ag Method and a system for incorporating reliable messaging in web services client applications via an API
US20080306986A1 (en) * 2007-06-08 2008-12-11 Accenture Global Services Gmbh Migration of Legacy Applications
US8060868B2 (en) * 2007-06-21 2011-11-15 Microsoft Corporation Fully capturing outer variables as data objects
US20090006114A1 (en) * 2007-06-26 2009-01-01 Microsoft Corporation Multi-channel commerce-related data management
US7702695B2 (en) * 2007-06-27 2010-04-20 Microsoft Corporation Object relational map verification system
US8676962B2 (en) * 2007-06-29 2014-03-18 International Business Machines Corporation Methods, systems, and computer program products for implementing data asset management activities
US20090030870A1 (en) * 2007-07-27 2009-01-29 Microsoft Corporation Error propagation in object-relational mapping platform
US7949693B1 (en) 2007-08-23 2011-05-24 Osr Open Systems Resources, Inc. Log-structured host data storage
WO2009043037A2 (en) * 2007-09-28 2009-04-02 Xcerion Aktiebolag Network operating system
US8452789B2 (en) * 2007-10-15 2013-05-28 International Business Machines Corporation Searching a database
US20090112915A1 (en) * 2007-10-31 2009-04-30 Microsoft Corporation Class configuration for locally cached remote data binding
US7991768B2 (en) 2007-11-08 2011-08-02 Oracle International Corporation Global query normalization to improve XML index based rewrites for path subsetted index
US8468513B2 (en) * 2008-01-14 2013-06-18 Microsoft Corporation Specification, abstraction, and enforcement in a data center operating system
US20090210400A1 (en) * 2008-02-15 2009-08-20 Microsoft Corporation Translating Identifier in Request into Data Structure
US8561088B2 (en) * 2008-04-08 2013-10-15 Microsoft Corporation Registering network applications with an API framework
US20090254670A1 (en) * 2008-04-08 2009-10-08 Microsoft Corporation Providing access to network applications for standardized clients
WO2009145858A1 (en) * 2008-04-18 2009-12-03 Travelport Operations, Inc. Systems and methods for programmatic generation database statements
US20090271765A1 (en) * 2008-04-29 2009-10-29 Microsoft Corporation Consumer and producer specific semantics of shared object protocols
US20090300649A1 (en) * 2008-05-30 2009-12-03 Microsoft Corporation Sharing An Object Among Multiple Applications
US8762420B2 (en) * 2008-06-20 2014-06-24 Microsoft Corporation Aggregation of data stored in multiple data stores
US8904363B2 (en) * 2008-06-27 2014-12-02 Microsoft Corporation Projecting software and data onto client
US8271938B2 (en) * 2008-09-03 2012-09-18 Microsoft Corporation Flexible base class library
US20100106684A1 (en) * 2008-10-26 2010-04-29 Microsoft Corporation Synchronization of a conceptual model via model extensions
US20100153565A1 (en) * 2008-12-11 2010-06-17 Microsoft Corporation Connection management in line-of-business
US8145593B2 (en) * 2008-12-11 2012-03-27 Microsoft Corporation Framework for web services exposing line of business applications
US8533220B2 (en) * 2009-04-02 2013-09-10 Microsoft Corporation Retrieving data in batches from a line of business system
US20100318394A1 (en) * 2009-06-15 2010-12-16 Microsoft Corporation Executing transactions as an atomic unit
CN102473180B (zh) * 2009-07-30 2015-06-10 株式会社东芝 接收装置
US9361359B1 (en) * 2009-09-25 2016-06-07 Emc Corporation Accessing schema-free databases
US8943508B2 (en) * 2009-12-09 2015-01-27 International Business Machines Corporation Service oriented collaboration
US8909662B2 (en) * 2009-12-30 2014-12-09 Sybase, Inc. Message based mobile object with native PIM integration
US8739118B2 (en) 2010-04-08 2014-05-27 Microsoft Corporation Pragmatic mapping specification, compilation and validation
US9037615B2 (en) * 2010-05-14 2015-05-19 International Business Machines Corporation Querying and integrating structured and unstructured data
EP2397939A1 (en) * 2010-06-17 2011-12-21 Siemens Aktiengesellschaft Accessing entities of a data access layer
CN103080945B (zh) * 2010-06-23 2016-06-01 皇家飞利浦电子股份有限公司 多个数据保护系统之间的互用性
US8825745B2 (en) 2010-07-11 2014-09-02 Microsoft Corporation URL-facilitated access to spreadsheet elements
US8260782B2 (en) * 2010-07-13 2012-09-04 International Business Machines Corporation Data element categorization in a service-oriented architecture
US8375009B2 (en) 2010-08-12 2013-02-12 Microsoft Corporation Scalable and extensible framework for data-driven web services
US9477730B2 (en) * 2010-10-28 2016-10-25 Microsoft Technology Licensing, Llc Web services runtime for dataset transformation
US9128768B2 (en) 2011-01-27 2015-09-08 Microsoft Technology Licensing, LCC Cloud based master data management
US20120198018A1 (en) * 2011-01-27 2012-08-02 Microsoft Corporation Securely publishing data to network service
US9584949B2 (en) 2011-01-27 2017-02-28 Microsoft Technology Licensing, Llc Cloud based master data management architecture
US8667024B2 (en) 2011-03-18 2014-03-04 International Business Machines Corporation Shared data management in software-as-a-service platform
CN102841906B (zh) * 2011-06-24 2016-12-07 阿里巴巴集团控股有限公司 一种整合的交易处理系统及交易处理方法
US8595267B2 (en) * 2011-06-27 2013-11-26 Amazon Technologies, Inc. System and method for implementing a scalable data storage service
CN103842950A (zh) * 2011-09-30 2014-06-04 惠普发展公司,有限责任合伙企业 跨越应用延伸会话
US20130097136A1 (en) * 2011-10-17 2013-04-18 Pie Digital, Inc. Method and system for acessing domain specific in-memory database management system
US8903874B2 (en) 2011-11-03 2014-12-02 Osr Open Systems Resources, Inc. File system directory attribute correction
US8843609B2 (en) 2011-11-09 2014-09-23 Microsoft Corporation Managing capacity in a data center by suspending tenants
US8689044B2 (en) * 2011-11-16 2014-04-01 Hewlett-Packard Development Company, L.P. SAS host controller cache tracking
US8965899B1 (en) * 2011-12-30 2015-02-24 Emc Corporation Progressive indexing for improved ad-hoc query performance
US8694826B2 (en) * 2012-02-29 2014-04-08 Hewlett-Packard Development Company, L.P. SAS host cache control
US9870384B2 (en) 2012-03-30 2018-01-16 International Business Machines Corporation Database system transaction management
US8849747B2 (en) * 2012-04-24 2014-09-30 Sap Ag Business process management
RU2490702C1 (ru) * 2012-05-02 2013-08-20 Корпорация "САМСУНГ ЭЛЕКТРОНИКС Ко., Лтд." Способ ускорения обработки множественных запросов типа select к rdf базе данных с помощью графического процессора
US20140082586A1 (en) * 2012-08-09 2014-03-20 FatFractal, Inc. Application development system and method for object models and datagraphs in client-side and server-side applications
US20140068547A1 (en) * 2012-09-05 2014-03-06 Microsoft Corporation Sharing application code across platforms
CN103019845B (zh) * 2012-12-10 2015-06-03 中国人民解放军理工大学 一种异构数据库平台下应用程序零修改迁移的方法
RU2519447C1 (ru) * 2012-12-14 2014-06-10 Общество с ограниченной ответственностью "Бизнес Семантика" (ООО "Бизнес Семантика") Способ обмена информацией между информационными системами
US8972334B2 (en) 2012-12-21 2015-03-03 International Business Machines Corporation Transparent data service suitable for modifying data storage capabilities in applications
US9513979B2 (en) * 2013-01-11 2016-12-06 Sap Se Mobile communication device providing interconnectivity between apps based on storage scope
US9614932B2 (en) 2013-03-14 2017-04-04 Microsoft Technology Licensing, Llc Managing and implementing web application data snapshots
US10705802B2 (en) 2013-03-20 2020-07-07 Microsoft Technology Licensing, Llc Extensible and queryable strong types
JP5889827B2 (ja) * 2013-04-25 2016-03-22 京セラドキュメントソリューションズ株式会社 画像形成装置及び画像形成方法
CN103440288A (zh) * 2013-08-16 2013-12-11 曙光信息产业股份有限公司 一种大数据存储方法及装置
US9442977B2 (en) 2013-09-06 2016-09-13 Sap Se Database language extended to accommodate entity-relationship models
US9619552B2 (en) 2013-09-06 2017-04-11 Sap Se Core data services extensibility for entity-relationship models
US9639572B2 (en) 2013-09-06 2017-05-02 Sap Se SQL enhancements simplifying database querying
US9575819B2 (en) 2013-09-06 2017-02-21 Sap Se Local buffers for event handlers
US9354948B2 (en) 2013-09-06 2016-05-31 Sap Se Data models containing host language embedded constraints
US9430523B2 (en) 2013-09-06 2016-08-30 Sap Se Entity-relationship model extensions using annotations
US9176801B2 (en) 2013-09-06 2015-11-03 Sap Se Advanced data models containing declarative and programmatic constraints
US9361407B2 (en) 2013-09-06 2016-06-07 Sap Se SQL extended with transient fields for calculation expressions in enhanced data models
CN104717179B (zh) * 2013-12-13 2018-01-30 中国移动通信集团河南有限公司 一种通信业务的处理方法及装置
US10795910B2 (en) 2013-12-31 2020-10-06 Sybase, Inc. Robust communication system for guaranteed message sequencing with the detection of duplicate senders
US9830329B2 (en) 2014-01-15 2017-11-28 W. Anthony Mason Methods and systems for data storage
US10152605B2 (en) * 2014-05-21 2018-12-11 Siddharth Shetye Systems and methods for front-end and back-end data security protocols
US9807143B2 (en) 2014-08-04 2017-10-31 Avaya Inc. Systems and methods for event routing and correlation
CN104536963B (zh) * 2014-11-13 2019-01-25 中国建设银行股份有限公司 一种存储过程的调度方法和系统
EP3040845A1 (en) * 2015-01-05 2016-07-06 Iguazio Systems Ltd. Service oriented data management and architecture
US9953070B1 (en) 2015-04-05 2018-04-24 Simply Data Now Inc. Enterprise resource planning (ERP) system data extraction, loading, and directing
US10692034B2 (en) * 2015-05-06 2020-06-23 9 Spokes Knowledge Limited Methods and systems for use in monitoring the operations of a business
US11829349B2 (en) * 2015-05-11 2023-11-28 Oracle International Corporation Direct-connect functionality in a distributed database grid
CN105138327A (zh) * 2015-08-21 2015-12-09 青岛海信移动通信技术股份有限公司 一种跨平台web应用的打包方法
US10366114B2 (en) 2015-11-15 2019-07-30 Microsoft Technology Licensing, Llc Providing data presentation functionality associated with collaboration database
WO2017107118A1 (en) * 2015-12-24 2017-06-29 Intel Corporation Facilitating efficient communication and data processing across clusters of computing machines in heterogeneous computing environment
CA2954037A1 (en) * 2016-01-21 2017-07-21 Wal-Mart Stores, Inc. Codeless information service for abstract retrieval of disparate data
US10262054B2 (en) * 2016-01-21 2019-04-16 Microsoft Technology Licensing, Llc Database and service upgrade without downtime
US10452634B2 (en) 2016-02-01 2019-10-22 Microsoft Technology Licensing, Llc Provide consumer oriented data service
JP6652477B2 (ja) * 2016-10-03 2020-02-26 日立オートモティブシステムズ株式会社 車載処理装置
CN106600170A (zh) * 2016-12-30 2017-04-26 江苏瑞中数据股份有限公司 一种适用于油气长输管道的自动化数据模型的实现方法
WO2018134680A1 (en) * 2017-01-17 2018-07-26 Clough Limited System and method for integrating disparate computer systems and applications
CN108243180B (zh) * 2017-09-30 2020-06-30 平安科技(深圳)有限公司 银行保单数据对接方法及保单数据服务器
US10992593B2 (en) 2017-10-06 2021-04-27 Bank Of America Corporation Persistent integration platform for multi-channel resource transfers
US10826890B2 (en) 2017-10-06 2020-11-03 Bank Of America Corporation Multi-level authentication system with persistent integration platform
RU2663474C1 (ru) * 2018-01-31 2018-08-06 Федеральное государственное казенное военное образовательное учреждение высшего образования "Академия Федеральной службы охраны Российской Федерации" (Академия ФСО России) Способ поиска подобных файлов, размещённых на устройствах хранения данных
CN108897752B (zh) * 2018-05-07 2022-05-20 中国电子科技集团公司电子科学研究院 面向智能化的电子信息系统体系结构描述方法
CN109062559B (zh) * 2018-07-17 2022-05-24 艾普阳科技(深圳)有限公司 一种数据处理方法和装置
EP3864522A4 (en) * 2018-10-09 2022-06-29 Idiscovery Solutions, Inc. System and method of data transformation
US10592485B1 (en) * 2018-12-31 2020-03-17 Atlassian Pty Ltd Property-based deletion of digital data
CN110096543B (zh) * 2019-05-06 2021-07-09 软通智慧科技有限公司 应用程序的数据操作方法、装置、服务器和介质
WO2020255084A1 (en) * 2019-06-19 2020-12-24 Calgary Scientific Inc. Software collaboration platform for advanced workflows and digital twins
CN112202701B (zh) * 2019-07-08 2022-08-30 腾讯科技(深圳)有限公司 一种数据处理方法、装置、服务器、终端、系统及存储介质
CN111756625B (zh) * 2020-05-11 2023-05-23 宁波吉利汽车研究开发有限公司 基于中央网关的功能转服务方法、装置、系统、电子设备及存储介质
KR102175183B1 (ko) 2020-06-09 2020-11-05 이창근 기업 데이터 통합 관리 방법, 장치, 및 시스템
US11302327B2 (en) * 2020-06-22 2022-04-12 Bank Of America Corporation Priori knowledge, canonical data forms, and preliminary entrentropy reduction for IVR
US11546381B1 (en) * 2021-11-08 2023-01-03 Beijing Bytedance Network Technology Co., Ltd. Unified data security labeling framework
US11941005B2 (en) * 2022-04-05 2024-03-26 Sap Se Data artifact instances faciliating flexible data access
US11907688B2 (en) * 2022-05-11 2024-02-20 RDW Advisors, LLC. System and method for a heterogenous software platform
TWI814425B (zh) * 2022-06-07 2023-09-01 群鼎團隊有限公司 應用程式介面或資料集之介面平台操作方法、系統、電腦可讀取媒體

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2003034285A1 (en) * 2001-10-18 2003-04-24 Bea Systems, Inc. Application view component for system integration

Family Cites Families (77)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5449293A (en) 1992-06-02 1995-09-12 Alberta Research Council Recognition training system
US5576954A (en) 1993-11-05 1996-11-19 University Of Central Florida Process for determination of text relevancy
US5560005A (en) 1994-02-25 1996-09-24 Actamed Corp. Methods and systems for object-based relational distributed databases
US5627979A (en) 1994-07-18 1997-05-06 International Business Machines Corporation System and method for providing a graphical user interface for mapping and accessing objects in data stores
US5799309A (en) 1994-12-29 1998-08-25 International Business Machines Corporation Generating an optimized set of relational queries fetching data in an object-relational database
US5717913A (en) 1995-01-03 1998-02-10 University Of Central Florida Method for detecting and extracting text data using database schemas
AU9010198A (en) 1997-08-14 1999-03-08 Aoraki Corporation Limited Relational database coexistence in object oriented environments
KR100269258B1 (ko) 1997-10-21 2000-10-16 정선종 프로세스 방법론을 위한 통합 case 정보저장소 메타 모델시스템 및 그 통합 지원 방법
US6128624A (en) 1997-11-12 2000-10-03 Ncr Corporation Collection and integration of internet and electronic commerce data in a database during web browsing
US6175837B1 (en) 1998-06-29 2001-01-16 Sun Microsystems, Inc. Object-relational mapping toll that processes views
US6385618B1 (en) 1997-12-22 2002-05-07 Sun Microsystems, Inc. Integrating both modifications to an object model and modifications to a database into source code by an object-relational mapping tool
US6735593B1 (en) 1998-11-12 2004-05-11 Simon Guy Williams Systems and methods for storing data
US6341277B1 (en) 1998-11-17 2002-01-22 International Business Machines Corporation System and method for performance complex heterogeneous database queries using a single SQL expression
US6341289B1 (en) 1999-05-06 2002-01-22 International Business Machines Corporation Object identity and partitioning for user defined extents
US6754885B1 (en) 1999-05-17 2004-06-22 Invensys Systems, Inc. Methods and apparatus for controlling object appearance in a process control configuration system
US6847980B1 (en) 1999-07-03 2005-01-25 Ana B. Benitez Fundamental entity-relationship models for the generic audio visual data signal description
US7152228B2 (en) * 1999-07-08 2006-12-19 Science Applications International Corporation Automatically generated objects within extensible object frameworks and links to enterprise resources
US6633878B1 (en) * 1999-07-30 2003-10-14 Accenture Llp Initializing an ecommerce database framework
US6523027B1 (en) * 1999-07-30 2003-02-18 Accenture Llp Interfacing servers in a Java based e-commerce architecture
US6601233B1 (en) * 1999-07-30 2003-07-29 Accenture Llp Business components framework
US6609128B1 (en) * 1999-07-30 2003-08-19 Accenture Llp Codes table framework design in an E-commerce architecture
US6556983B1 (en) 2000-01-12 2003-04-29 Microsoft Corporation Methods and apparatus for finding semantic information, such as usage logs, similar to a query using a pattern lattice data space
US20010047372A1 (en) 2000-02-11 2001-11-29 Alexander Gorelik Nested relational data model
US20030131338A1 (en) 2000-03-31 2003-07-10 Nektarios Georgalas Resource modelling
US6591275B1 (en) 2000-06-02 2003-07-08 Sun Microsystems, Inc. Object-relational mapping for tables without primary keys
AU2001268674B2 (en) * 2000-06-22 2007-04-26 Microsoft Technology Licensing, Llc Distributed computing services platform
US6795825B2 (en) 2000-09-12 2004-09-21 Naphtali David Rishe Database querying system and method
US6594666B1 (en) * 2000-09-25 2003-07-15 Oracle International Corp. Location aware application development framework
US20050267901A1 (en) 2000-11-10 2005-12-01 Kevin Irlen Distributed single schema data modeling system and method
US20030105732A1 (en) 2000-11-17 2003-06-05 Kagalwala Raxit A. Database schema for structure query language (SQL) server
US6957230B2 (en) 2000-11-30 2005-10-18 Microsoft Corporation Dynamically generating multiple hierarchies of inter-object relationships based on object attribute values
US6711579B2 (en) 2001-04-20 2004-03-23 Sree Ayyanar Spinning And Weaving Mills Limited Data storage schema independent programming for data retrieval using semantic bridge
TWI226771B (en) * 2001-05-24 2005-01-11 Ibm Service application architecture for integrated network service providers
US7043481B2 (en) 2001-06-01 2006-05-09 Thought, Inc. System, method and software for creating, maintaining, navigating or manipulating complex data objects and their data relationships
US20030005019A1 (en) 2001-06-27 2003-01-02 Kuldipsingh Pabla Application frameworks for mobile devices
US20030046266A1 (en) 2001-07-26 2003-03-06 Ward Mullins System, method and software for creating or maintaining distributed transparent persistence of complex data objects and their data relationships
US6907433B2 (en) 2001-08-01 2005-06-14 Oracle International Corp. System and method for managing object to relational one-to-many mapping
US7062516B2 (en) * 2001-09-18 2006-06-13 Sun Microsystems, Inc. Methods, systems, and articles of manufacture for implementing a runtime logging service storage infrastructure
US7158994B1 (en) 2001-09-28 2007-01-02 Oracle International Corporation Object-oriented materialized views
US6836777B2 (en) 2001-11-15 2004-12-28 Ncr Corporation System and method for constructing generic analytical database applications
CA2468573A1 (en) 2001-11-28 2003-06-05 Bow Street Software, Inc. Method and apparatus for creating software objects
US7162721B2 (en) 2001-12-03 2007-01-09 Sun Microsystems, Inc. Application-independent API for distributed component collaboration
US7062502B1 (en) 2001-12-28 2006-06-13 Kesler John N Automated generation of dynamic data entry user interface for relational database management systems
US7058655B2 (en) 2002-01-11 2006-06-06 Sun Microsystems, Inc. Determining object graph and object graph projection
US20030140058A1 (en) 2002-01-18 2003-07-24 Vitria Technology, Inc. Method and apparatus for sharing information between applications using common objects
US7185317B2 (en) * 2002-02-14 2007-02-27 Hubbard & Wells Logical data modeling and integrated application framework
WO2003083700A1 (en) 2002-03-22 2003-10-09 Thought, Inc. Micro edition dynamic object- driven database manipulation and mapping system
US7069260B2 (en) 2002-05-15 2006-06-27 Motorola, Inc. QOS framework system
US6910032B2 (en) 2002-06-07 2005-06-21 International Business Machines Corporation Parallel database query processing for non-uniform data sources via buffered access
US7039898B2 (en) * 2002-07-12 2006-05-02 Netspective Communications, Llc Computer system for performing reusable software application development from a set of declarative executable specifications
US7130856B2 (en) 2002-07-20 2006-10-31 Microsoft Corporation Map and data location provider
US7096216B2 (en) 2002-07-20 2006-08-22 Microsoft Corporation Performing operations on a set of objects in a database system
US7162469B2 (en) 2002-07-20 2007-01-09 Microsoft Corporation Querying an object for properties
US7412436B2 (en) 2002-07-20 2008-08-12 Microsoft Corporation System and interface for manipulating a database
US7191182B2 (en) 2002-07-20 2007-03-13 Microsoft Corporation Containment hierarchy in a database system
US7149733B2 (en) 2002-07-20 2006-12-12 Microsoft Corporation Translation of object queries involving inheritence
US7711675B2 (en) 2002-07-22 2010-05-04 Microsoft Corporation Database simulation of data types
US7730446B2 (en) 2003-03-12 2010-06-01 Microsoft Corporation Software business process model
US7054877B2 (en) 2003-03-31 2006-05-30 International Business Machines Corporation Dealing with composite data through data model entities
US7412569B2 (en) 2003-04-10 2008-08-12 Intel Corporation System and method to track changes in memory
AU2003901968A0 (en) 2003-04-23 2003-05-15 Wolfgang Flatow A universal database schema
TWI243554B (en) * 2003-05-22 2005-11-11 Far Eastone Telecomm Co Ltd Common service platform and software
EP1482418A1 (en) 2003-05-28 2004-12-01 Sap Ag A data processing method and system
EP1482419A1 (en) 2003-05-28 2004-12-01 Sap Ag Data processing system and method for application programs in a data warehouse
FI115676B (fi) 2003-07-28 2005-06-15 Nolics Oy Menetelmä relaatiotyyppisen tiedon oliomuotoiseksi käsittelemiseksi
US7349913B2 (en) 2003-08-21 2008-03-25 Microsoft Corporation Storage platform for organizing, searching, and sharing data
US7599948B2 (en) 2003-10-10 2009-10-06 Oracle International Corporation Object relational mapping layer
US7454428B2 (en) 2003-10-29 2008-11-18 Oracle International Corp. Network data model for relational database management system
US7779386B2 (en) 2003-12-08 2010-08-17 Ebay Inc. Method and system to automatically regenerate software code
US7219102B2 (en) 2003-12-22 2007-05-15 International Business Machines Corporation Method, computer program product, and system converting relational data into hierarchical data structure based upon tagging trees
US7536409B2 (en) 2005-02-15 2009-05-19 International Business Machines Corporation Having a single set of object relational mappings across different instances of the same schemas
US7853961B2 (en) 2005-02-28 2010-12-14 Microsoft Corporation Platform for data services across disparate application frameworks
US7685561B2 (en) 2005-02-28 2010-03-23 Microsoft Corporation Storage API for a common data platform
US20060195460A1 (en) 2005-02-28 2006-08-31 Microsoft Corporation Data model for object-relational data
US7676493B2 (en) 2005-09-07 2010-03-09 Microsoft Corporation Incremental approach to an object-relational solution
US7526501B2 (en) 2006-05-09 2009-04-28 Microsoft Corporation State transition logic for a persistent object graph
US20070266041A1 (en) 2006-05-11 2007-11-15 Microsoft Corporation Concept of relationshipsets in entity data model (edm)

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2003034285A1 (en) * 2001-10-18 2003-04-24 Bea Systems, Inc. Application view component for system integration
JP2005506618A (ja) * 2001-10-18 2005-03-03 ビーイーエイ システムズ, インコーポレイテッド システム統合のためのアプリケーションビューコンポーネント

Cited By (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4632056B2 (ja) * 2007-01-15 2011-02-16 日本電気株式会社 マッピングシステム、マッピング方法及びプログラム
JP2008171316A (ja) * 2007-01-15 2008-07-24 Nec Corp マッピングシステム、マッピング方法及びプログラム
US8880564B2 (en) 2007-10-11 2014-11-04 Microsoft Corporation Generic model editing framework
JP2011501267A (ja) * 2007-10-11 2011-01-06 マイクロソフト コーポレーション 一般的モデルの編集フレームワーク
JP2010108370A (ja) * 2008-10-31 2010-05-13 Toshiba Corp フレームワークプログラム及びクライアント装置
WO2010050601A1 (ja) * 2008-10-31 2010-05-06 株式会社 東芝 フレームワークプログラム及びクライアント装置
JP2011180887A (ja) * 2010-03-02 2011-09-15 Nec Corp データ更新処理制御装置
JP5807677B2 (ja) * 2011-05-24 2015-11-10 日本電気株式会社 情報処理システム、アクセス権管理方法、情報処理装置およびその制御方法と制御プログラム
JP2017519307A (ja) * 2014-06-23 2017-07-13 オラクル・インターナショナル・コーポレイション マルチテナントアプリケーションサーバ環境における複数のパーティション編集セッションをサポートするためのシステムおよび方法
WO2020008855A1 (ja) 2018-07-03 2020-01-09 オムロン株式会社 コンパイル装置およびコンパイル方法
WO2020008867A1 (ja) 2018-07-03 2020-01-09 オムロン株式会社 制御装置および制御方法
US11157297B2 (en) 2018-07-03 2021-10-26 Omron Corporation Control device and control method for preventing unintentional overwriting of data
US11226814B2 (en) 2018-07-03 2022-01-18 Omron Corporation Compiler device and compiling method

Also Published As

Publication number Publication date
AU2006200230A1 (en) 2006-09-14
TW200632699A (en) 2006-09-16
EP1696352A2 (en) 2006-08-30
RU2425417C2 (ru) 2011-07-27
NO20060072L (no) 2006-08-29
SG125173A1 (en) 2006-09-29
MY149824A (en) 2013-10-14
CN1828527A (zh) 2006-09-06
MXPA06001208A (es) 2006-09-19
NZ544991A (en) 2007-07-27
TWI405091B (zh) 2013-08-11
AU2006200230B2 (en) 2011-02-17
ZA200600754B (en) 2008-04-30
US20060195476A1 (en) 2006-08-31
KR101224670B1 (ko) 2013-01-21
EG25837A (en) 2012-09-03
BRPI0600191A (pt) 2006-10-24
US7853961B2 (en) 2010-12-14
KR20060095447A (ko) 2006-08-31
CO5790183A1 (es) 2007-08-31
EP1696352A3 (en) 2007-05-09
CA2533942A1 (en) 2006-08-28
IL173430A0 (en) 2006-06-11
CN1828527B (zh) 2010-09-29
RU2006102526A (ru) 2007-08-10

Similar Documents

Publication Publication Date Title
US7853961B2 (en) Platform for data services across disparate application frameworks
US20070219976A1 (en) Extensible query language with support for rich data types
RU2421798C2 (ru) Модель данных для объектно-реляционных данных
US7536673B2 (en) Application business object processing
US7555497B2 (en) Systems and methods for separating units of information manageable by a hardware/software interface system from their physical organization
CA2534257C (en) Storage api for a common data platform
US7483915B2 (en) Systems and method for representing relationships between units of information manageable by a hardware/software interface system
AU2003259961B2 (en) Systems and methods for interfacing application programs with an item-based storage platform
US8131739B2 (en) Systems and methods for interfacing application programs with an item-based storage platform
JP4394643B2 (ja) アイテムベースのストレージプラットフォームにおけるデータモデリングのためのシステムおよび方法
US20050049994A1 (en) Systems and methods for the implementation of a base schema for organizing units of information manageable by a hardware/software interface system
JP4394644B2 (ja) データの編成、検索、および共有のためのストレージプラットフォーム
Blakeley et al. Next-generation data access: Making the conceptual level real
Krause et al. Data Access
Dayal The Role of Object-Oriented Database Technology in Distributed Information Systems
ZA200600644B (en) Systems and methods for interfacing application programs with an item-based storage platform

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20090126

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20110909

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20120417