IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ オラクル・インターナショナル・コーポレイションの特許一覧

(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2025-03-03
(45)【発行日】2025-03-11
(54)【発明の名称】オブジェクト属性動的検証
(51)【国際特許分類】
   G06F 11/36 20250101AFI20250304BHJP
   G06F 8/41 20180101ALI20250304BHJP
   G06F 9/448 20180101ALI20250304BHJP
【FI】
G06F11/3604 112
G06F8/41
G06F9/448 120
【請求項の数】 18
(21)【出願番号】P 2022553129
(86)(22)【出願日】2021-01-20
(65)【公表番号】
(43)【公表日】2023-04-19
(86)【国際出願番号】 US2021014127
(87)【国際公開番号】W WO2021178056
(87)【国際公開日】2021-09-10
【審査請求日】2023-12-12
(31)【優先権主張番号】16/809,025
(32)【優先日】2020-03-04
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】502303739
【氏名又は名称】オラクル・インターナショナル・コーポレイション
(74)【代理人】
【識別番号】110001195
【氏名又は名称】弁理士法人深見特許事務所
(72)【発明者】
【氏名】ブゾッホ,パベル
【審査官】円子 英紀
(56)【参考文献】
【文献】特開2010-250378(JP,A)
【文献】米国特許出願公開第2006/0248467(US,A1)
【文献】米国特許出願公開第2012/0272221(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 11/36
G06F 8/41
G06F 9/448
(57)【特許請求の範囲】
【請求項1】
1つ以上のプロセッサによって実行されると前記1つ以上のプロセッサに動作を実行させる命令を含むプログラムであって、前記動作は、
プログラミング言語フレームワークにおいて、オブジェクトのインスタンスを受け取ることを含み、前記オブジェクトの定義は制約で注釈付けされ、前記動作はさらに、
前記プログラミング言語フレームワークにおいて、ある注釈で注釈付けられた1つ以上のバリデータを受け取ることを含み、前記注釈は、
前記オブジェクトの前記定義における属性と、
前記属性の値とを識別し、前記プログラミング言語フレームワークは、前記1つ以上のバリデータの各々が継承される抽象クラスの定義を含み、前記抽象クラスは、カスタム制約に対してオブジェクトを検証する保護された関数を含み、前記動作はさらに、
前記プログラミング言語フレームワークにおいて、前記1つ以上のバリデータのうち、前記オブジェクトの前記インスタンスにおける前記属性の値が前記注釈における前記属性の前記値に一致するバリデータを識別することと、
前記オブジェクトの前記インスタンスを使用して前記バリデータを実行することとを含む、プログラム。
【請求項2】
前記バリデータは、前記オブジェクトの前記定義における追加の属性の値を検証する、請求項1に記載のプログラム。
【請求項3】
前記1つ以上のバリデータは、追加のバリデータを含み、前記オブジェクトの前記インスタンスにおける前記属性の前記値は、前記追加のバリデータの前記注釈における前記属性の値に一致しない、請求項1または2に記載のプログラム。
【請求項4】
前記オブジェクトの前記定義を注釈付ける前記制約は、前記プログラミング言語フレームワークに、静的検証ではなく動的検証を使用させる、請求項1~3のいずれか1項に記載のプログラム。
【請求項5】
前記プログラミング言語フレームワークは、前記オブジェクトの前記定義を注釈付ける前記制約のための定義を含み、前記制約のための前記定義は、前記制約がオブジェクトタイプターゲット上で実行されてもよいことを指定する、請求項4に記載のプログラム。
【請求項6】
前記プログラミング言語フレームワークは、前記1つ以上のバリデータを注釈付ける前記注釈のための定義を含み、前記定義は、属性名および属性値パターンを含む、請求項1~5のいずれか1項に記載のプログラム。
【請求項7】
前記抽象クラスは、制約がオブジェクトに対して有効であるかどうかを判定する抽象関数を含む、請求項1~6のいずれか1項に記載のプログラム。
【請求項8】
前記プログラミング言語フレームワークは、クラスパスをスキャンし、前記クラスパスにおいて前記1つ以上のバリデータの各々を識別するクラスの定義を含む、請求項1~7のいずれか1項に記載のプログラム。
【請求項9】
前記クラスの前記定義は、前記1つ以上のバリデータのうち、前記オブジェクトの前記インスタンスにおける前記属性の前記値が前記注釈における前記属性の値に一致しないバリデータをフィルタ除去する関数を含む、請求項8に記載のプログラム。
【請求項10】
前記プログラミング言語フレームワークは、前記オブジェクトの前記インスタンスを受け取るときに動的検証のためのエントリポイントとして前記クラスの前記定義に基づいてインスタンスを作成する、請求項8に記載のプログラム。
【請求項11】
前記クラスの前記定義は、まず、任意の静的検証を実行した後に、任意の動的検証を実行する、請求項8に記載のプログラム。
【請求項12】
前記オブジェクトの前記インスタンスは、前記属性および追加の属性を含む、請求項1に記載のプログラム。
【請求項13】
前記属性は、前記追加の属性に割り当てられた値を検証するために前記1つ以上のバリデータのうちのどれが使用されるべきかを決定する、請求項12に記載のプログラム。
【請求項14】
前記属性はキーを含み、前記追加の属性はキー-値ペアにおける値を含む、請求項13に記載のプログラム。
【請求項15】
前記キーは、前記値のデータタイプを示す、請求項14に記載のプログラム。
【請求項16】
前記バリデータは、前記オブジェクトの前記定義における追加の属性および前記追加の属性に対する追加の値を識別する追加の注釈で注釈付けされ、
前記オブジェクトの前記インスタンスにおける追加の属性の値は、前記バリデータの前記追加の注釈における前記追加の属性の前記追加の値と一致する、請求項1に記載のプログラム。
【請求項17】
システムであって、
1つ以上のプロセッサと、
前記1つ以上のプロセッサによって実行されると前記1つ以上のプロセッサに動作を実行させる命令を含む1つ以上のメモリデバイスとを備え、前記動作は、
プログラミング言語フレームワークにおいて、オブジェクトのインスタンスを受け取ることを含み、前記オブジェクトの定義は制約で注釈付けされ、前記動作はさらに、
前記プログラミング言語フレームワークにおいて、ある注釈で注釈付けられた1つ以上のバリデータを受け取ることを含み、前記注釈は、
前記オブジェクトの前記定義における属性と、
前記属性の値とを識別し、前記プログラミング言語フレームワークは、前記1つ以上のバリデータの各々が継承される抽象クラスの定義を含み、前記抽象クラスは、カスタム制約に対してオブジェクトを検証する保護された関数を含み、前記動作はさらに、
前記プログラミング言語フレームワークにおいて、前記1つ以上のバリデータのうち、前記オブジェクトの前記インスタンスにおける前記属性の値が前記注釈における前記属性の前記値に一致するバリデータを識別することと、
前記オブジェクトの前記インスタンスを使用して前記バリデータを実行することとを含む、システム。
【請求項18】
プログラミング言語フレームワークにおいて動的検証を実行する方法であって、
1つ以上のプロセッサが、プログラミング言語フレームワークにおいて、オブジェクトのインスタンスを受け取ることを含み、前記オブジェクトの定義は制約で注釈付けされ、前記方法はさらに、
前記1つ以上のプロセッサが、前記プログラミング言語フレームワークにおいて、ある注釈で注釈付けられた1つ以上のバリデータを受け取ることを含み、前記注釈は、
前記オブジェクトの前記定義における属性と、
前記属性の値とを識別し、前記プログラミング言語フレームワークは、前記1つ以上のバリデータの各々が継承される抽象クラスの定義を含み、前記抽象クラスは、カスタム制約に対してオブジェクトを検証する保護された関数を含み、前記方法はさらに、
前記1つ以上のプロセッサが、前記プログラミング言語フレームワークにおいて、前記1つ以上のバリデータのうち、前記オブジェクトの前記インスタンスにおける前記属性の値が前記注釈における前記属性の前記値に一致するバリデータを識別することと、
前記1つ以上のプロセッサが、前記オブジェクトの前記インスタンスを使用して前記バリデータを実行することとを含む、方法。
【発明の詳細な説明】
【技術分野】
【0001】
関連出願への相互参照
本出願は、2020年3月4日に提出された、”DYNAMIC VALIDATION FRAMEWORK EXTENSION”と題される米国特許出願第16/809,025号の利益および優先権を主張し、それは、参照によりその全体が本明細書に組み込まれる。
【背景技術】
【0002】
背景
プログラミング言語は、最近、メンバ変数、クラス、および関数に対する制約を実施するために高度なメカニズムを提供している。制約を、異なるデータフィールドを検証するために使用して、それらが何らかの1つ以上の事前定義された要件を満たすことを保証するようにしてもよい。従来、制約は、ソフトウェア全体に含まれるカスタマイズされたエラーチェック用コードを使用して実施されてきた。しかしながら、現代のプログラミング言語は、制約のセットに対してデータを検証するための機構を、プログラミング言語フレームワークの一部として提供し始めている。制約および検証コードをプロジェクトごとおよびデータセットごとに書き換える代わりに、プログラマは、代わりに、プログラミング言語フレームワークの制約実施機構を使用して、ソフトウェア開発の効率および共通データタイプが検証され得る整合性を改善することができる。
【0003】
例えば、Javaプログラミング言語は、クラスモジュールまたは「beans」に課される制約に対する検証を提供する。Bean検証は、Java beansの静的検証を可能にするJSR380規格で定義されている。静的検証では、beanの内部の属性(例えば、メンバ変数)は、ヌルでない、空でない、指定された数値範囲内など、いくつかの事前定義された基準を満たす。これらの事前定義された基準が満たされない場合、フレームワークは制約違反を報告する。検証フレームワークはまた、ユーザがユーザ定義の制約およびユーザ定義のバリデータを作成することを可能にする。これらは、ユーザが、様々な検証ルーチンを、所望のデータフォーマットに適合するようにカスタマイズすることを可能にする。
【発明の概要】
【0004】
概要
現代のプログラミング言語フレームワークは、事前定義された制約を使用してランタイム値に対して静的検証を実行する構成を提供する。ランタイムインスタンスが作成されると、変数および/またはメンバ属性に記憶されるランタイム値は、ランタイム値が事前定義された制約に適合することを確実にするバリデータ関数に提供されてもよい。事前定義された制約は、数値範囲、許容可能なストリングパターン、日付範囲、特定のフォーマッティング、および/またはデータ値に対して実施されてもよい他の要件を含んでもよい。制約をアクティブにするために、変数またはメンバ属性は、特定のバリデータ関数を指すテキスト文字列で注釈付けされてもよい。したがって、特定の変数に使用されるべきバリデータ関数は、実行時ではなく、プログラミング時に設定される。
【0005】
本明細書に記載の実施形態は、動的検証を提供するためにプログラミング言語フレームワークを強化する。動的検証は、任意の変数に対するバリデータが、プログラミング時に静的に宣言されるのではなく、実行時に選択されることを可能にする。特定のバリデータ関数または制約タイプを指す注釈で変数を注釈付ける代わりに、プログラマは、バリデータ関数が実行時に動的に選択されることを示す注釈で変数を注釈付けることができる。変数のランタイムインスタンスが作成されると、プログラミング言語フレームワークは、変数上の動的検証注釈を識別し、次いで、変数におけるランタイム値を使用して、どのバリデータ関数が使用されるべきかを決定してもよい。
【0006】
プログラミング言語フレームワークは、追加の注釈定義を含むように修正されてもよい。1つの注釈定義を使用して、上述のように動的検証を受けるべき変数を注釈付けてもよい。別の注釈定義を使用して、ユーザ定義動的値バリデータ関数自体を注釈付けてもよい。第2の注釈は、動的に検証されるべき属性についての名前および/または値を受け取ってもよい。例えば、クラス定義は、キー-値ペア(例えば、ストリングキー、ストリング値)として動作する2つのメンバ属性を含んでもよい。第2の注釈は、「key(キー)」属性を参照し、「key」属性における値が、このキー-値ペアに電話番号(例えば、key = "phone"; value = "571-555-1534")が記憶されることを示すかどうかを判定してもよい。バリデータ関数上で使用される注釈は、「key」と名付けられた属性が「phone」の値を有するときに使用されるべきであることを指定することができ、バリデータ関数内のコードは、次いで、「value(値)」属性を検証して、それが適切にフォーマットされた電話番号を記憶するかどうかを判定することができる。「key」値が、「日付」または「時間」など、異なるものを記憶する場合、このバリデータはこのクラスインスタンス上では実行されないであろう。この判断は、フレームワークによって実行時に行われる。
【0007】
プログラミング言語フレームワークが、動的検証のために注釈を付けられた変数をランタイムで受け取ると、フレームワークは、まず、任意の従来の静的検証を実行してもよい。静的検証が失敗した場合、動的検証は必要とされなくてもよい。静的検証が完了した後、プログラミング言語フレームワークは、クラスパスまたはプログラムディレクトリにおいて利用可能なすべての動的バリデータ関数のリストを生成してもよい。利用可能な動的バリデータのリストは、プログラマによって定義された任意のカスタム動的値バリデータ関数を含んでもよい。次いで、フレームワークは、利用可能な動的値バリデータ関数のリストを循環し、注釈付き変数のランタイム値が動的値バリデータ関数に対する注釈付き制約を満たす、任意の動的値バリデータ関数を識別してもよい。上記の例を続けると、フレームワークは、クラスパス内で電話番号値バリデータ関数を識別し、関数注釈におけるattributeName = "key"およびattributeValue = "phone"制約を変数のランタイム値と比較してもよい。次いで、任意の識別されたバリデータ関数が、ランタイム値に対して実行されてもよい。いくつかの実施形態では、フレームワークは、動的検証を実行するための保護されたヘルパー関数を含む抽象ベースクラスを提供してもよく、この抽象ベースクラスは、プログラマによって書かれたカスタム動的値バリデータにおいてオーバーライドされてもよい。
【0008】
これらのプログラミング言語フレームワーク改善は、プログラマが、ランタイム時に動的に選択される異なるバリデータ関数においてメンバ属性間の異なる依存関係をカプセル化することを可能にする。静的検証のみが使用される場合、バリデータ関数は、異なる可能な値を比較するif/thenステートメントの分岐を含むことが必要とされた。これらのステートメントは、コードが発展するにつれて経時的に維持することが困難である。しかしながら、動的検証を使用する場合、検証のための各変数依存関係は、別々にかつ独立して取り扱うことができ、新たな依存関係は、新たなバリデータ関数を追加された依存関係で注釈付けることによって、制限なく容易に追加することができる。
【0009】
図面の簡単な説明
様々な実施形態の性質および利点のさらなる理解は、明細書の残りの部分および図面を参照することによって実現され得、同様の参照番号は、いくつかの図面を通して、同様の構成要素を指すよう使用される。場合によっては、下位ラベルが、複数の同様のコンポーネントのうちの1つを示すよう、参照番号に関連付けられる。既存の下位ラベルを指定せずに参照番号に言及する場合、そのような複数の同様のコンポーネントすべてを参照することが意図される。
【図面の簡単な説明】
【0010】
図1】いくつかの実施形態による、プログラミング言語のための制約検証フレームワークの図を示す。
図2A】いくつかの実施形態による、組み込み制約注釈を使用するbeanの例を示す。
図2B】カスタムバリデータ/制約の定義を示す。
図3】いくつかの実施形態による、beanにおいて制約を検証するプログラムを示す。
図4】いくつかの実施形態による、動的検証のためのフレームワーク拡張の図を示す。
図5】いくつかの実施形態による動的検証制約注釈を示す図である。
図6】いくつかの実施形態による、動的検証を使用するbeanの例を示す。
図7】いくつかの実施形態による、動的値間の関係を定義する、フレームワークに追加される新たな注釈を示す。
図8】いくつかの実施形態による、DynamicValueValidatorのための抽象クラスの例を示す。
図9A】いくつかの実施形態による、DynamicValidatorクラスのための定義を示す。
図9B】いくつかの実施形態による、DynamicValidatorに対するisValid( )関数を示す。
図9C】いくつかの実施形態による、DynamicValidatorが、静的検証、およびDynamicValue注釈において定義されたメタデータと対応するbeanとの間のマッチングを実行するための方法を示す。
図10A】いくつかの実施形態による、動的検証のためのユーザ定義カスタム動的値バリデータの一例を示す。
図10B】いくつかの実施形態による、複数の制約注釈を伴うカスタム動的値バリデータの一例を示す。
図11】いくつかの実施形態による、動的検証が呼び出されてもよいプログラムの例を示す。
図12】いくつかの実施形態による、ランタイムにおいて変数依存関係を動的に検証するための方法のフローチャートを示す。
図13】実施形態のうちのいくつかを実現するための分散システムの簡略化されたブロック図を示す。
図14】実施形態のシステムの構成要素によって提供されるサービスがクラウドサービスとして提供されてもよいシステム環境の構成要素の簡略化されたブロック図を示す。
図15】様々な実施形態が実現されてもよい例示的なコンピュータシステムを示す図である。
【発明を実施するための形態】
【0011】
詳細な説明
Javaプログラミング言語では、様々な規格(JSR380、JSR349、JSR303など)が、Java beans内の属性の検証のために使用されてもよいフレームワークを記述している。Bean検証は、一般に、データがプレゼンテーション層からパーシスタンス層に流れるときに使用される。このフレームワークの前に、ユーザは通常、自身のアプリケーションの各層において自身の検証コードを複製しなければならなかった。検証フレームワークは、ユーザが、ドメインまたはクラスに追加されるメタデータを介して単一の機構を使用して、検証を実行することを可能にする。メタデータは、XML記述子を介して追加される制約を含んでもよい。例えば、Javaクラスのためのデフォルトメタデータソースは、ターゲットに追加されるJava注釈を含んでもよい。次いで、ターゲットデータは、実行時に注釈によって参照される制約に対して検証されてもよい。
【0012】
制約は一般に、2つの別々の部分からなる。制約の第1の部分は、制約注釈を含み、これは、ランタイム制約を識別するためにコードに追加されてもよい注釈を含む。ジェネリックな制約注釈は、フィールド、メソッド、コンストラクタ、パラメータ、タイプなどをターゲットとしてもよい。制約の第2の部分は、制約を実現するバリデータの集合を含んでもよい。例えば、制約は、メンバ変数のための許容可能な数値範囲を含んでもよく、バリデータは、メンバ変数のランタイム値が許容可能な数値範囲内に入るかどうかを判定するコードを含むisValid( )関数を含んでもよい。したがって、制約注釈とその制約注釈のためのバリデータとが協働して、プログラムデータに対する制約のランタイム検証を実行する。
【0013】
図1は、いくつかの実施形態による、プログラミング言語のための制約検証フレームワーク102の図100を示す。コンピュータプログラミングでは、ソフトウェアフレームワークは、汎用機能を提供するソフトウェアがユーザコードによって拡張され得る抽象化である。フレームワーク102は、概して、アプリケーションを構築および展開するための標準化されたライブラリならびに方法を提供し、ソフトウェアアプリケーションの開発を促進するために、より大きいソフトウェアプラットフォームの一部である機能性を提供してもよい。たとえば、フレームワーク102は、サポートプログラム、コンパイラ、コードライブラリ、ツールセット、アプリケーションプログラミングインターフェイス(API)、および他のコンポーネントまたは開発環境を含んでもよい。たとえば、Javaプログラミング言語は、制約検証を実現するために使用されてもよいユーティリティ、プログラミング言語特徴、およびコードライブラリを提供する様々なフレームワークと組み合わせられてもよい。本明細書で使用されるように、フレームワーク102自体は、ユーザコードまたはカスタム、ユーザ定義バリデータおよび制約注釈と区別されてもよい。
【0014】
ユーザプログラム106は、ソフトウェアアプリケーションとしてコンパイルされ、アセンブルされ、解釈され、および/または実行されるユーザコードを含んでもよい。例えば、プログラム106は、クラスオブジェクトをインスタンス化し、関数を実行し、変数を記憶し、および/またはソフトウェアアプリケーションの様々な局面を他の態様で実現するmain( )関数を含んでもよい。プログラム106は、ユーザコードと見なされてもよく、フレームワーク102と区別してもよい。加えて、ユーザコードは、1つ以上のカスタムクラス/オブジェクト定義を含んでもよい。Javaプログラミング言語では、これらのクラスは、「beans」と呼ばれるパッケージに編成されてもよい。プログラム106は、bean108におけるクラス定義を使用してランタイムオブジェクトをインスタンス化してもよい。
【0015】
多くのクラス定義において共通であるように、bean108内のクラスは、メンバ変数、メンバ関数、および他のデータを含んでもよい。制約注釈110は、様々な位置で、bean108におけるクラス定義に追加されてもよい。注釈110の範囲は、注釈110の位置および/または対応する制約注釈定義の定義に基づいて変化してもよい。以下の例で説明するように、注釈110は、典型的には、制約を識別するコードの行を含み、制約を検証するときに使用されてもよいメッセージおよび/または他の情報などの、制約のための値を提供してもよい。
【0016】
制約を検証するために、プログラム106によってバリデータが実行されてもよい。場合によっては、フレームワーク102は、1つ以上の組み込みバリデータ104を含んでもよい。組み込みバリデータは、組み込み制約定義のセットを検証するコードを含んでもよい。たとえば、いくつかのJavaフレームワークは、単純な制約のための組み込みサポートを含んでもよい。javax.validation.constraintsパッケージは、最小値/最大値を実施し、ヌル値/非ヌル値を実施し、事前定義された正規表現パターンを実施し、予め定められたサイズを実施する等の制約等の組み込み制約を含む。bean108は、対応する注釈110をbean108のコードに単に追加することによって、これらの組み込みバリデータ/制約104を利用してもよい。
【0017】
組み込みバリデータ/制約104を使用することに加えて、プログラム106はまた、カスタムバリデータ/制約112を使用してもよい。カスタムバリデータおよび/またはカスタム制約を使用するために、ユーザ定義バリデータ定義および/または制約定義がプログラム106に提供されてもよい。カスタムバリデータ/制約112は各々、組み込みバリデータ/制約104がランタイムで使用されるのと同じようにカスタムバリデータ/制約112がフレームワーク102によって実行され得るように、フレームワーク102によって提供される事前定義されたインターフェイスおよび/または抽象クラスを実現してもよい。
【0018】
図2Aは、いくつかの実施形態による、組み込み制約注釈110を使用するbean108の例を示す。このbeanは、キー-値データ構造をカプセル化するパブリッククラスの定義を含む。多くの現代のデータ構造は、多くの異なるデータタイプを統合されたフォーマットで記憶するためにこのパラダイムを使用する。ある汎用フォーマットは、データがキー-値ペアとして記憶されるキー-値構造を使用してもよい。ペアのキー部分は、ペアの値部分に関するデータタイプ(または任意の他のタイプのメタデータ)を記述するために使用されてもよい。例えば、ペアのキー部分は、電話番号、アドレス、ユーザ名などのデータタイプを定義してもよい。ペアの対応する値部分は、特定の電話番号、特定の住所、特定のユーザの名前などを含んでもよい。この柔軟なシステムは、キーがデータタイプを定義し、値がデータ値を定義する限り、任意のタイプのデータが記憶されることを可能にする。このKeyValueクラスは、本明細書では、以下で説明されるように動的検証を使用してもよいbeanの一例として使用されてもよい。しかしながら、このクラスは、例としてのみ使用され、限定することを意味しない。動的検証は、クラスおよびデータの他のカプセル化を含む、任意のデータ構造とともに使用されてもよい。
【0019】
bean108は、キーおよび値の両方に対してプライベートメンバ変数を含んでもよい。図2Aの例は、ストリングの値を検証するために使用されてもよい制約注釈110を含む。いくつかのJavaフレームワークにおける組み込み制約のいくつかは、キー変数におけるストリング値がブランクであるべきではないことを示す@NotBlank制約を含んでもよい。注釈110は、制約違反に付随するメッセージを「key is blank(キーは空白である」などの指定された値に設定するパラメータを含む。カスタム検証コードを書く代わりに、ユーザは、単に制約注釈110を含めることにより、追加のコードを書くことなく、フレームワークにおける機能によって自動的に検証することができる事前定義された制約を実施することができる。
【0020】
組み込み制約を使用することに加えて、プログラミング言語フレームワークはまた、ユーザがそれらの制約を検証するためにユーザ自身のカスタム制約注釈およびカスタムバリデータを定義することを可能にしてもよい。図2Bは、カスタムバリデータ/制約112の定義を示す。まず、ユーザがユーザ自身の制約注釈を定義することを可能にする制約定義220の例が提供される。制約定義220は、制約が適用されてもよいターゲット(例えば、フィールド、メソッド、タイプなど)を指定してもよい。制約定義220はまた、メッセージ、グループ、および/またはペイロードフィールドを含んでもよい。検証を強化し得る情報または他の設定を提供するために、他のフィールドを追加してもよい。たとえば、メッセージフィールドを用いて、図2Aに示すようにパラメータによって上書きされてもよいエラーメッセージを作成してもよい。グループフィールドは、制約が属するグループを定義してもよい。ペイロードフィールドは、制約が関連付けられてもよい他のデータを指定してもよい。例えば、ペイロードは、重大度を制約に関連付けるために使用されてもよい。
【0021】
制約定義220とともに、バリデータ定義222も、制約注釈定義220の制約を具体的に検証するために提供される。Javaプログラミング言語の文脈におけるバリデータ定義222は、ConstraintValidatorインターフェイスを実現してもよく、2つのパブリック関数をオーバーライドしてもよい。initialize( )関数は、制約注釈からデータを受け取り、バリデータを初期化するために使用されてもよい。isValid( )関数は、対応する制約を対応するオブジェクトに対して検証するために使用されるコードを保持する。制約定義220に対する注釈が、バリデータ定義222におけるオブジェクトタイプに対応するターゲットオブジェクト上で使用される場合、制約は検証されてもよい。場合によっては、バリデータ定義222は、ターゲットクラスがObjectタイプのものであるように、包括的に定義されてもよい。この場合、フレームワークは、制約で注釈付けされたすべてのターゲットに対してユーザ定義検証コードを呼び出す。たとえば、バリデータ定義222は、あるタイプのMyObjectを有する@MyConstraint制約で注釈付けされたすべてのターゲットbeanを検証してもよい。バリデータ定義222は、オブジェクト内の属性のランタイム値に基づいて選択することはできないことに留意されたい。
【0022】
図3は、いくつかの実施形態による、bean108において制約を検証するプログラム106を示す。第1に、プログラム106は、デフォルトタイプのバリデータ302をインスタンス化する。次いで、プログラム106は、パラメータリストにおけるオブジェクトの指定されたリストに対して検証を実行するvalidate( )関数308を定義する。プログラム106のmain( )関数は、次いで、キーおよび値属性のための指定されたストリングで新たなKeyValueオブジェクトをインスタンス化する。次いで、このインスタンス化されたオブジェクトは、パラメータ306として検証関数に渡される。次いで、検証関数308は、指定されたバリデータをオブジェクトに対して実行し、制約違反があれば報告する。
【0023】
ユーザは、既存のプログラミング言語フレームワークにおいてカスタムバリデータおよび制約を定義してもよいが、本明細書に記載される実施形態は、既存のプログラミング言語フレームワークを改善して、ランタイム値に基づいてフレームワークを通して属性間の依存関係を検証するための機構を提供する。これらの改善は、カスタムバリデータおよび制約が、ある属性に対する値が別の属性上で検証される制約のタイプに影響を及ぼし得る深い検証を提供するよう容易に実現されることを可能にする。例えば、KeyValueオブジェクトにおけるキーに対する値が「phone」のストリング値を含む場合、ユーザは、そのストリングが適切にフォーマットされた電話番号であることを保証するために、それを値属性において検証することを望んでもよい。別の例では、キーが「date(日付)」である場合、ユーザは、そのストリングが適切にフォーマットされた日付であることを保証するよう、その値を検証することを望んでもよい。これは、ターゲットの単一の値のみが検証されるので、静的検証では実行できない。そして、ユーザは、自身の制約を定義し、検証コードを提供することによって、関係を検証することができるが、ユーザは、ターゲットにおける各関係について制約とバリデータとの新たな組合せを定義する必要があるだろう。このコードは、維持が非常に困難であり、解析が非常に困難である。本明細書で説明される実施形態は、代わりに、各関係について特定のコードを必要とするのではなく、包括的な態様でこの問題を解決する検証フレームワークへの拡張を説明する。
【0024】
図4は、いくつかの実施形態による、動的検証のためのフレームワーク拡張の図400を示す。この図400は、フレームワーク102がいくつかの追加のモジュール、すなわち、動的検証402注釈、動的バリデータ404、動的値注釈406、および動的値バリデータ408を含むよう拡張されていることを除いて、図1図100と同様である。これらのモジュールの各々は、以下でより詳細に説明される。要するに、これらのモジュールは、フレームワークが、@DynamicValidation注釈を取り扱い、次いで、上述のKeyValueクラスにおけるキーと値との間の関係といった、ランタイム値に基づく異なるデータフィールド間の異なる関係を動的に検証することを可能にする。これらのモジュールは、プログラミング言語フレームワークの一部であり、ユーザが書くことを要求されるユーザ定義クラスではないことに注目されたい。これらは、フレームワーク102とともに展開されてもよいモジュールであり、したがって、ユーザがフレームワーク102と対話するために書いてもよいコードと区別されてもよい。
【0025】
この例では、bean416は、以下で詳細に説明する@DynamicValidation注釈などの動的注釈410を含んでもよい。プログラム414が、bean416において定義されるオブジェクトのインスタンスを作成すると、動的注釈410は、ユーザによって定義されるカスタム動的値バリデータ412を使用して動的検証を実行するように、フレームワーク102に命令する。以下で説明するように、カスタム動的値バリデータ412は、フレームワーク102に対する拡張において利用可能にされる抽象ベースクラスを拡張してもよく、したがって、ユーザが書くことを要求され得るコードを最小限に抑えることができる。
【0026】
図5は、いくつかの実施形態による動的検証制約注釈を示す図である。動的検証の開始点は、制約注釈およびその対応するバリデータの定義である。動的検証制約定義402は、従来の検証ではなく動的検証が実行されるべきであることをフレームワークに示すためにクラスに追加されてもよい注釈を定義する。動的検証は、クラスの、異なるメンバ変数間の関係を評価するために使用されてもよいので、制約定義402は、ターゲット値をTYPEに設定し、これは、オブジェクト定義内の属性のすべてへのアクセスを可能にする。この制約定義402に与えられる名称は、DynamicValidation(@DynamicValidation注釈に対応する)である。しかしながら、この名称は、例としてのみ使用され、限定することを意味しない。任意の他の名称が、動的検証制約定義402のために使用されてもよい。いくつかの実施形態では、注釈とともにデフォルトメッセージ502を定義する必要はない。以下で説明されるように、この注釈内で定義される任意のメッセージは、バリデータによる検証中に省略され、置換されてもよい。また、定義502は、この制約がDynamicValidatorクラスによって検証されてもよいことを指定することに注目されたく、その名称は例示に過ぎず、その機能は以下に詳細に記載される。
【0027】
図6は、いくつかの実施形態による、動的検証を使用するbean416の例を示す。図5において上記で説明された定義を使用して、KeyValueクラスは、@DynamicValidation制約注釈を用いて注釈付けられてもよい。これは、フレームワークが、キーおよび値メンバ属性のランタイム値間の関係を動的に評価するバリデータを呼び出すことを可能にする。動的検証制約定義402のターゲット値はTYPEであるので、動的注釈410は、個々のメンバ変数レベルではなくクラスレベルで適用されてもよいことに注目されたい。動的検証制約定義402に基づくこの動的注釈410は、動的検証を呼び出すべき任意のbeanの同様の位置に追加されてもよい。
【0028】
図7は、いくつかの実施形態による、動的値間の関係を定義する、フレームワークに追加される新たな注釈を示す。以下で詳細に説明されるように、この注釈は、バリデータが呼び出されることを引き起こしてもよいランタイム属性値を示すよう、カスタム動的値バリデータのために使用されてもよい。具体的には、図7は、値間の関係を定義する動的値注釈定義406を示す。この特定の注釈は、2つのメソッド、すなわち、attributeNameおよびvaluePatternを含む。attributeNameメソッドは、値がターゲットbeanにおいてチェックされることになる属性の名称を返す。valuePatternメソッドは、値をチェックするための正規表現を返す。この注釈は、以下で詳細に説明されるDynamicValueValidatorのインスタンス上で使用されてもよい。この拡張は、@DynamicValueで定義された関係定義を満たすbeanのみがさらに検証される必要があることを保証する。加えて、この注釈は、ユーザが複数の関係を定義することを可能にするために、ターゲットDynamicValueValidatorインスタンス上で複数回使用されてもよい。例えば、DynamicValueValidatorに対して、より多くの@DynamicValue注釈が存在する場合、注釈によって定義されるこれらの関係の各々は、さらに検証されることができる。
【0029】
図8は、いくつかの実施形態による、DynamicValueValidatorのための抽象クラスの例を示す。まず、DynamicValueValidatorクラスが抽象クラスであることに注目されたく、これは、ユーザによって定義される任意のカスタム動的値バリデータクラスがDynamicValueValidator408を拡張すべきであり、その拡張は、少なくとも1つの上述の@DynamicValueで注釈付けられるべきであることを意味する。この抽象クラスは、通常のユーザ定義バリデータによって拡張される、いくつかのJavaフレームワークにおけるjavax.validation.ConstraintValidator抽象クラスの後に、パターン化されてもよい。
【0030】
DynamicValueValidatorクラスを拡張する各バリデータは、isValid( )メソッド802の実現例を提供すべきである。このメソッドは、@DynamicValueで定義された関係が、検証されたbeanについて満たされる場合、拡張されたクラスによって呼び出されてもよい。具体的には、実際の検証を提供するためのコードは、カスタム動的値バリデータにおいて、この抽象関数を抽象ベースクラスにおいてオーバーライドするisValid( )関数において、提供されてもよい。
【0031】
さらに、DynamicValueValidator408は、2つの保護されたメソッド、すなわち、validateCustomConstraints( )804およびuseConstraint( )806を含み、それらは、ユーザ定義バリデータを容易にするために使用されてもよい。validateCustomConstraints( )メソッド804は、それが、それ自体のオブジェクトを静的に検証されるよう定義する場合に、ユーザにより生成されたバリデータにおいて使用されてもよい。検証の背後にある核心概念の1つは、バリデータが、制約で注釈付けられた属性を有するそれ自体の内部クラスを定義することである。次いで、これらの属性は、検証されているbeanからのデータでポピュレートされる。クラスのインスタンスは、次いで、validateCustomConstraints( )メソッド804に渡される。このメソッド804が、検証されたオブジェクトにおいて制約違反を識別する場合、それは、その違反から第1のメッセージを取り出し、それをConstraintValidationContextに渡し、偽を返す。ヘルパーメソッドuseConstraint( )806は、ユーザが、失敗した、beanの深い検証を特定した場合に、ユーザ定義のメッセージを与えるために、使用してもよい(例えば、ユーザは、提供されたURLへの接続を開くことができるかどうかを検証する)。これらの関数の両方は、このクラスを拡張するユーザによって書かれたカスタム動的値バリデータによって呼び出されてもよい。フレームワーク拡張の一部として、これらの機能は、カスタム動的値バリデータを書くために必要なコードの量を低減する。
【0032】
図9Aは、いくつかの実施形態による、DynamicValidator404クラスのための定義を示す。DynamicValidatorは、フレームワークにおいて既に定義されているConstraintValidatorテンプレートを実現する。重要なことに、DynamicValidator404は、動的検証を実行するために本明細書で説明する実施形態によって追加されるフレームワーク拡張に対するエントリポイントとして働く。このクラスは、まず、静的に定義された制約をチェックするためのバリデータを作成し、クラスパススキャンからロードされる動的バリデータのリストを作成し、VALIDATORの静的インスタンスを作成する。DynamicValidatorは、任意のタイプのbeanに対して使用されてもよいことに注目されたい。ConstraintValidatorのインスタンスが作成されると、それは、上述のDynamicValueValidatorを拡張するすべてのクラスをロードする。コンストラクタ902は、図9Aのコードに従ってDynamicValidatorのインスタンスを作成する。具体的には、クラスパスにおける動的バリデータのいずれかがまだインスタンス化されていない場合、それらは同期的にロードされ、インスタンス化される。図9Aに示されるように、コードは、任意の抽象クラス、引数のないコンストラクタのないクラス、および少なくとも1つの正しい@DynamicValidation注釈を有さないクラスをフィルタ除去する。次に、これらのクラスの各々がインスタンス化され、キャッシュされる。いくつかの実施形態は、フルクラスパススキャンを使用してもよく、他の実施形態は、コンテキストおよび依存関係注入(Contexts and Dependency Injection)(CDI)を使用して、@DynamicValidation注釈を有するDynamicValueValidatorのすべてのインスタンスを取得してもよい。CDIが使用される場合、ユーザ定義の動的beanバリデータは、それらの範囲を、CDIルックアップに対して可視であるよう定義すべきである。このアプローチは、Java EE環境において好ましくてもよい。
【0033】
図9Bは、いくつかの実施形態による、DynamicValidatorに対するisValid( )910関数を示す。isValid( )メソッド910がDynamicValidator404において呼び出されるとすぐに、それは、bean内において、静的に定義された制約の検証を実行してもよい(912)。静的制約に違反する場合、動的検証は必要でなくてもよく、したがって、isValid( )メソッドは戻り、終了してもよい。静的に定義された制約は、いくつかの実施形態では、動的に定義された制約よりも高い優先度を有してもよい。代替的に、静的に定義された制約に制約違反がない場合、動的検証を開始してもよい。上記でコンストラクタ902においてポピュレートされた動的バリデータのリストをフィルタリングして、この特定のタイプのbeanについて定義され、@DynamicValueにおいて定義された関係が満たされるバリデータを見つけてもよい(914)。属性がタイプStringを有さない場合、属性のストリング表現を取り出すために、toString( )メソッドが呼び出されてもよいことに注目されたい。次いで、最後に、これらの条件を満たす任意のバリデータが、それらのそれぞれのisValid( )メソッドに渡されてもよい(916)。
【0034】
図9Cは、いくつかの実施形態による、DynamicValidatorが、静的検証、およびDynamicValue注釈において定義されたメタデータと対応するbeanとの間のマッチングを実行するための方法を示す。isStaticValid( )関数920は、現在のクラスにおいて見出されるすべてのプロパティに対して、および任意の親クラスにおいて再帰的に、検証を実行してもよい。このプライベート関数920は、上で図9Bにおいて呼び出されて、まず、いずれかの動的検証を実行する前にいずれかの静的検証が失敗したかどうかを判定する。matchDynamicAnnotation( )関数922は、DynamicValue注釈において定義されたメタデータとbeanとの間でマッチングを行ってもよい。このプライベートメンバ関数は、注釈において定義されたデータがbeanで見出されたデータと一致する場合、真を返してもよい。この関数922は、上で、図9Bにおいて、指定された関係条件を有さない動的バリデータをフィルタリングする際に、呼び出される。
【0035】
図7図9Cは、いくつかの実施形態による、動的検証を実行するためにフレームワーク拡張に含まれてもよい様々なモジュールの実現例を示す。これらの例示的なモジュールは、Javaプログラミング言語および特定のJavaコンストラクトを例として使用して、実施可能な開示を提供してもよい。しかしながら、これらの例は、限定することを意味しない。動的検証を提供するためにフレームワークを拡張するための原理は、任意のプログラミング言語に適用されてもよく、これらの図において例として具体的に使用されるもの以外の異なる実現例を有してもよい。
【0036】
図10Aは、いくつかの実施形態による、動的検証のためのユーザ定義カスタム動的値バリデータ412の例を示す。カスタム動的値バリデータ412は、動的検証を採用するためにユーザによって書かれる必要がある唯一のコードであってもよい。まず、バリデータ412は、1つ以上の@DynamicValue注釈1002のインスタンスを含むべきである。バリデータ412はまた、上記で図8において説明したDynamicValueValidator抽象クラスを拡張するべきである(1004)。この拡張されたクラスは、親クラスから抽象isValid( )関数1006のための実現例を提供する。いくつかの実施形態はまた、検証を実行するためにプライベートヘルパー関数を提供してもよい。
【0037】
動的@DynamicValue注釈1002は、この動的検証をトリガする変数およびその変数の値を指定する。この例では、ターゲットオブジェクトが属性名「key」を有する変数を含むとき、その属性の値が注釈1002に示される「phone number」テキストを有するストリングを含む場合に、動的検証がトリガされることになる。バリデータ412は、DynamicValueValidator抽象親クラスを、特に、上記で図2Aおよび図6において説明したKeyValueタイプのオブジェクトについて拡張する(1004)。isValid( )は、ターゲットKeyValueオブジェクトを受け取り、次いで、プライベートPhoneNumberクラスを使用して電話番号を検証する。この時点で、KeyValueターゲットオブジェクトにおいて可変の値は、ある有効な電話番号が検証されることが期待され、なぜならば、キー変数がそのように動的に示すからである。KeyValueオブジェクトにおける属性の値がカスタム動的値バリデータ412の注釈における値と一致しなかった場合、バリデータはそのオブジェクトのインスタンス上で実行されないであろうことに注目されたい。
【0038】
図10Bは、いくつかの実施形態による、複数の制約注釈を伴うカスタム動的値バリデータの一例を示す。図10Aの例は、単一の@DynamicValue注釈のみを使用するが、他の実現例は、複数の@DynamicValue注釈を使用してもよい。例えば、上述のKeyValueクラスは、単一のキーを単一の値において含む。他の実施形態は、2つのキーおよび単一の値を含むTwoKeyValueクラスを含む。第1のキー(key1)は、依然として、値が電話番号であることを指定するために使用されてもよく、第2のキー(key2)は、国コードを指定するために使用されてもよい。各国は、その電話番号に対して異なるフォーマットを有し得るので、両方のキーは、この特定のカスタム動的値バリデータ412が呼び出されるために、@DynamicValue注釈1010に個別に含まれてもよい。このバリデータ412は、クラスの拡張(1012)がKeyValueクラスではなくTwoKeyValueクラスを使用して行われてもよいことを除いて、図10Aのバリデータと同じように動作してもよい。同様に、isValid( )関数1014は、KeyValueオブジェクトではなくTwoKeyValueオブジェクトを受け取ってもよい。
【0039】
図11は、いくつかの実施形態による、動的検証が呼び出されてもよいプログラム414の例を示す。図6に関連して上述したように、KeyValueクラスは@DynamicValidation制約で注釈付けされている。KeyValueクラスの新たなインスタンス1104が作成されると、ストリング値が、キーおよび値属性のために提供されてもよい。この例では、キーは、図10のカスタム動的値バリデータ412に適格である「phone」に設定される。次いで、検証()関数を呼び出して、キーの値(「phone」)を動的にチェックし、カスタム動的値バリデータ412を呼び出して、値属性において与えられる電話番号が適切なフォーマットのものであることを保証してもよい。
【0040】
図12は、いくつかの実施形態による、ランタイム時に変数依存関係を動的に検証するための方法のフローチャート1200を示す。本方法は、プログラミング言語フレームワークにおいて、オブジェクトのインスタンスを受け取ること(1202)を含んでもよい。オブジェクトのインスタンスは、オブジェクト定義からインスタンス化されてもよい。例えば、クラスオブジェクトが、クラス定義ファイルに基づいてインスタンス化されてもよい。クラス定義は、beanまたは他のソフトウェアモジュールの一部であってもよい。クラス定義などのオブジェクトの定義は、制約で注釈付けされてもよい。制約は、オブジェクトのインスタンスが、静的検証または他の形態のカスタムのユーザ定義検証ルーチンではなく、動的検証を受けるべきであることを示してもよい。動的検証は、オブジェクトのインスタンスに適用されるあるタイプの検証ルーチンおよび制約が、オブジェクトインスタンスにおける可変ランタイム値に依存することを暗示してもよい。例えば、@DynamicValidation制約注釈は、図6に示すようなクラス定義上で使用してもよい。オブジェクト(例えば、KeyValueオブジェクト)のインスタンスは、インスタンス化され、図3に示されるように、検証関数の一部としてフレームワークに渡されてもよい。
【0041】
本方法はまた、オブジェクトの定義における属性およびその属性の値を識別する注釈で注釈付けされる、1つ以上のバリデータを受け取ることを含んでもよい(1204)。例えば、図10Aおよび図10Bのカスタム動的値バリデータには、図7から@DynamicValue注釈を使用して注釈を付けることができる。注釈は、オブジェクトの定義における属性を識別する属性名を、その属性の対応する値とともに、含んでもよい。例えば、属性は、「key」等の属性名によって識別されてもよく、値は、上記の例で使用されるような「phone number」等の値ストリングを含んでもよい。バリデータは、フレームワークが抽象ベースクラスを拡張するときに、フレームワークによって受け取られてもよい。バリデータはまた、値が制約を通過したかどうかの指示を返すブール関数(たとえば、isValid( )関数)を実現してもよい。バリデータは、フォーマット、最小、最大、範囲、および/または任意の他の可変制約等の制約を実現する、ユーザ定義コードを含んでもよい。
【0042】
本方法は、加えて、1つ以上のバリデータのうち、オブジェクトのインスタンスにおける属性の値が注釈における属性の値に一致するバリデータを識別することを含んでもよい(1206)。例えば、図9AのDynamicValidatorクラスは、ランタイムパスにおける、または別様にプログラムに関連付けられたバリデータのすべてを識別してもよい。次いで、DynamicValidatorのためのコンストラクタは、利用可能なバリデータの各々を循環し、注釈(たとえば、DynamicValueパラメータ)がオブジェクトインスタンスにおける対応する属性の値と一致するバリデータを識別してもよい。いくつかの実施形態では、各バリデータは、1つより多い(すなわち、複数の)DynamicValue注釈を有してもよく、その各々は、バリデータをオブジェクトインスタンス上で実行するよう満足されてもよい。
【0043】
本方法は、オブジェクトのインスタンスを使用してバリデータを実行することをさらに含んでもよい(1208)。識別されたバリデータは、注釈基準に合致する任意の他のバリデータとともに、オブジェクトのインスタンス上で実行されてもよい。例えば、ある属性値が、ある制約に対して検証されてもよく、その制約は、別の属性の値に基づいて選択されてもよく、したがって、属性依存関係が、どのバリデータが実行されるか、およびそれらのバリデータの結果に影響を及ぼすことを可能にする。
【0044】
図12に図示される具体的ステップは、種々の実施形態による、動的検証を行う特定の方法を提供することを理解されたい。ステップの他のシーケンスも、代替的な実施形態に従って実行されてもよい。例えば、代替実施形態は、上記で概説されるステップを異なる順序で実行してもよい。さらに、図12に示す個々のステップは、個々のステップの必要に応じて様々なシーケンスで実行してもよい複数のサブステップを含んでもよい。さらに、特定の用途に応じて追加のステップを追加または除去してもよい。
【0045】
本明細書で説明される方法の各々は、コンピュータシステムによって実現されてもよい。これらの方法の各ステップは、コンピュータシステムによって自動的に実行されてもよく、および/またはユーザに関与する入力/出力が提供されてもよい。例えば、ユーザは、ある方法の各ステップに対する入力を提供してもよく、これらの入力の各々は、そのような入力を要求する特定の出力に応答してもよく、その出力は、コンピュータシステムによって生成される。各入力は、対応する要求出力に応答して受信されてもよい。さらに、入力は、ユーザから、別のコンピュータシステムからデータストリームとして受信されてもよく、メモリ位置から取得されてもよく、ネットワークを介して取得されてもよく、ウェブサービスから要求されてもよい。同様に、出力は、ユーザに、データストリームとして別のコンピュータシステムに提供されてもよく、メモリ位置に記憶されてもよく、ネットワークを介して送信されてもよく、ウェブサービスに提供されてもよい。要するに、本明細書に記載される方法の各ステップは、コンピュータシステムによって実施されてもよく、ユーザが関与してもしなくてもよい、コンピュータシステムへの、およびコンピュータシステムからの、任意の数の入力、出力、および/または要求を含んでもよい。ユーザが関与しないステップは、人的介入なしにコンピュータシステムによって自動的に実行されると言ってもよい。したがって、本開示に照らして、本明細書で説明される各方法の各ステップは、ユーザへの入力およびユーザからの出力を含むように変更され得るか、または任意の決定がプロセッサによって行われる場合、人的介入を伴わずにコンピュータシステムによって自動的に行われ得ることが理解されるであろう。さらに、本明細書で説明される方法の各々のいくつかの実施形態は、有形のソフトウェア製品を形成するために、有形の非一時的記憶媒体上に記憶される命令のセットとして実現されてもよい。
【0046】
図13は、実施形態の1つを実現するための分散型システム1300の簡略図を示す。図示の実施形態では、分散型システム1300は、1つ以上のクライアントコンピューティングデバイス1302,1304,1306,および1308を含み、これらは、1つ以上のネットワーク1310を介してウェブブラウザ、所有権付きクライアント(たとえば、Oracle Forms)などのクライアントアプリケーションを実行し動作させるよう構成される。サーバ1312は、ネットワーク1310を介してリモートクライアントコンピューティングデバイス1302,1304,1306,および1308と通信可能に結合されてもよい。
【0047】
種々の実施形態では、サーバ1312は、システムのコンポーネントのうちの1つ以上によって提供される1つ以上のサービスまたはソフトウェアアプリケーションを実行するように適合されてもよい。いくつかの実施形態では、これらのサービスは、ウェブベースのサービスもしくはクラウドサービスとして、またはソフトウェア・アズ・ア・サービス(SaaS)モデルの下で、クライアントコンピューティングデバイス1302、1304、1306、および/または1308のユーザに対して提供されてもよい。クライアントコンピューティングデバイス1302、1304、1306、および/または1308を動作させるユーザは、次いで、1つ以上のクライアントアプリケーションを利用してサーバ1312と対話して、これらのコンポーネントによって提供されるサービスを利用してもよい。
【0048】
図に示される構成では、システム1300のソフトウェアコンポーネント1318,1320および1322は、サーバ1312上で実現されるものとして示される。他の実施形態では、システム1300のコンポーネントのうちの1つ以上および/またはこれらのコンポーネントによって提供されるサービスは、クライアントコンピューティングデバイス1302,1304,1306および/または1308のうちの1つ以上によって実現されてもよい。クライアントコンピューティングデバイスを動作させるユーザは、次いで、1つ以上のクライアントアプリケーションを利用して、これらのコンポーネントによって提供されるサービスを用いてもよい。これらのコンポーネントは、ハードウェア、ファームウェア、ソフトウェア、またはそれらの組み合わせで実現されてもよい。分散型システム1300とは異なってもよいさまざまな異なるシステム構成が可能であることが理解されるべきである。図に示される実施形態は、したがって、実施形態のシステムを実現するための分散型システムの一例であり、限定的であるよう意図されるものではない。
【0049】
クライアントコンピューティングデバイス1302,1304,1306および/または1308は、携帯可能なハンドヘルドデバイス(たとえば、iPhone(登録商標)、セルラー電話、iPad(登録商標)、コンピューティングタブレット、携帯情報端末(PDA))またはウェアラブルデバイス(たとえばGoogle Glass(登録商標)頭部装着型ディスプレイ)であってもよく、Microsoft Windows Mobile(登録商標)などのソフトウェア、および/もしくは、iOS, Windows Phone, Android, BlackBerry 10, Palm OSなどのさまざまなモバイルオペレーティングシステムを実行し、インターネット、電子メール、ショートメッセージサービス(SMS)、Blackberry(登録商標)、または他の有効にされた通信プロトコルである。クライアントコンピューティングデバイスは、汎用パーソナルコンピュータとすることができ、一例として、Microsoft Windows(登録商標), Apple Macintosh(登録商標), および/もしくはLinux(登録商標)オペレーティングシステムのさまざまなバージョンを実行するパーソナルコンピュータならびに/またはラップトップコンピュータを含む。クライアントコンピューティングデバイスは、例えばGoogle(登録商標) Chrome OSなどの様々なGNU/Linux(登録商標)オペレーティングシステムを含むがこれに限定されない、様々な市販のUNIX(登録商標)またはUNIXのようなオペレーティングシステムのいずれかを実行するワークステーションコンピュータとすることができる。代替として、または加えて、クライアントコンピューティングデバイス1302,1304,1306,および1308は、ネットワーク1310を介して通信することが可能な、シンクライアントコンピュータ、インターネット対応ゲームシステム(例えば、Kinect(登録商標)ジェスチャ入力装置を伴うかまたは伴わないMicrosoft Xboxゲームコンソール)、および/またはパーソナルメッセージングデバイス等の任意の他の電子デバイスであってもよい。
【0050】
例示の分散型システム1300は、4つのクライアントコンピューティングデバイスとともに示されているが、任意の数のクライアントコンピューティングデバイスがサポートされてもよい。センサを伴うデバイスなど、他のデバイスがサーバ1312と対話してもよい。
【0051】
分散型システム1300内のネットワーク1310は、TCP/IP(伝送制御プロトコル/インターネットプロトコル)、SNA(システムネットワークアーキテクチャ)、IPX(インターネットパケット交換)、AppleTalkなどを含むがこれらに限定されない様々な市販のプロトコルのいずれかを使用してデータ通信をサポートすることができる、任意のタイプのネットワークであってもよい。単に一例として、ネットワーク1310は、イーサネット(登録商標)、トークンリングなどに基づくものなどのローカルエリアネットワーク(LAN)であってもよい。ネットワーク1310は、ワイドエリアネットワークおよびインターネットであってもよい。それは、仮想プライベートネットワーク(VPN)、イントラネット、エクストラネット、公衆交換電話網(PSTN)、赤外線ネットワーク、無線ネットワーク(例えば、米国電気電子学会(IEEE)802.11プロトコル一式、Bluetooth(登録商標)、および/もしくは任意の他の無線プロトコルのいずれかの下で動作するネットワーク)を含むがこれらに限定されない仮想ネットワーク;ならびに/またはこれらおよび/もしくは他のネットワークの任意の組み合わせを含むことができる。
【0052】
サーバ1312は、1つ以上の汎用コンピュータ、専用サーバコンピュータ(例として、PC(パーソナルコンピュータ)サーバ、UNIX(登録商標)サーバ、ミッドレンジサーバ、メインフレームコンピュータ、ラックマウント型サーバなどを含む)、サーバファーム、サーバクラスタ、または任意の他の適切な構成および/もしくは組合せから構成されてもよい。種々の実施形態では、サーバ1312は、前述の開示で説明される1つ以上のサービスまたはソフトウェアアプリケーションを実行するように適合されてもよい。例えば、サーバ1312は、本開示のある実施形態に従って上記で説明された処理を実行するためのサーバに対応してもよい。
【0053】
サーバ1312は、上述のもののいずれかを含むオペレーティングシステム、および任意の市場で入手可能なサーバオペレーティングシステムを実行してもよい。サーバ1312はまた、HTTP(ハイパーテキスト転送プロトコル)サーバ、FTP(ファイル転送プロトコル)サーバ、CGI(コモンゲートウェイインターフェイス)サーバ、JAVA(登録商標)サーバ、データベースサーバなどを含むさまざまなさらに他のサーバアプリケーションおよび/または中間層アプリケーションのうちのいずれかを実行してもよい。例示的なデータベースサーバは、Oracle, Microsoft, Sybase, IBM(登録商標)(インターナショナルビジネスマシンズ)などから市場で入手可能なものを含むが、それらに限定されるものではない。
【0054】
いくつかの実現例では、サーバ1312は、クライアントコンピューティングデバイス1302,1304,1306,および1308のユーザから受信されたデータフィードおよび/またはイベント更新を分析および整理統合するための1つ以上のアプリケーションを含んでもよい。一例として、データフィードおよび/またはイベント更新は、センサデータアプリケーション、金融株式相場表示板、ネットワーク性能測定ツール(たとえば、ネットワーク監視およびトラフィック管理アプリケーション)、クリックストリーム解析ツール、自動車交通監視などに関連するリアルタイムのイベントを含んでもよい、1つ以上の第三者情報源および連続データストリームから受信される、Twitter(登録商標)フィード、Facebook(登録商標)更新またはリアルタイムの更新を含んでもよいが、それらに限定されるものではない。サーバ1312は、クライアントコンピューティングデバイス1302,1304,1306,および1308の1つ以上のディスプレイデバイスを介してデータフィードおよび/またはリアルタイムイベントを表示するための1つ以上のアプリケーションも含んでもよい。
【0055】
分散型システム1300は、1つ以上のデータベース1314および1316も含んでもよい。データベース1314および1316は、様々な場所に存在してもよい。例として、データベース1314および1316のうちの1つ以上は、サーバ1312にローカルな(および/または常駐する)非一時的記憶媒体上に常駐してもよい。代替として、データベース1314および1316は、サーバ1312から遠隔にあり、ネットワークベースの接続または専用の接続を介してサーバ1312と通信してもよい。一組の実施形態では、データベース1314および1316は、ストレージエリアネットワーク(SAN)内に常駐してもよい。同様に、サーバ1312に帰する機能を実行するための任意の必要なファイルが、適宜、サーバ1312上にローカルに、および/または遠隔で、記憶されてもよい。一組の実施形態では、データベース1314および1316は、SQLフォーマット化されたコマンドに応答してデータを記憶、更新、および検索するように適合される、Oracleによって提供されるデータベース等のリレーショナルデータベースを含んでもよい。
【0056】
図14は、本開示の一実施形態による、実施形態のシステムの1つ以上のコンポーネントによって提供されるサービスをクラウドサービスとして提供してもよいシステム環境1400の1つ以上のコンポーネントの簡略ブロック図である。図示される実施形態では、システム環境1400は、クラウドサービスを提供するクラウドインフラストラクチャシステム1402と対話するためにユーザによって使用されてもよい、1つ以上のクライアントコンピューティングデバイス1404,1406,および1408を含む。クライアントコンピューティングデバイスは、クラウドインフラストラクチャシステム1402によって提供されるサービスを使用するためにクラウドインフラストラクチャシステム1402と対話するためにクライアントコンピューティングデバイスのユーザによって使用されてもよい、ウェブブラウザ、知的所有権下にあるクライアントアプリケーション(たとえば、Oracle Forms)、または何らかの他のアプリケーションなどのクライアントアプリケーションを動作させるよう構成されてもよい。
【0057】
図示のクラウドインフラストラクチャシステム1402は、図示されるコンポーネント以外のコンポーネントを有していてもよいことを理解されたい。さらに、図に示す実施形態は、ある実施形態を組み込んでもよいクラウドインフラストラクチャシステムの一例にすぎない。いくつかの他の実施形態では、クラウドインフラストラクチャシステム1402は、図に示されるよりも多いまたは少ないコンポーネントを有してもよく、2つ以上のコンポーネントを組み合わせてもよく、またはコンポーネントの異なる構成もしくは配列を有してもよい。
【0058】
クライアントコンピューティングデバイス1404,1406,および1408は、1302,1304,1306,および1308について上で説明されたものと同様のデバイスであってもよい。
【0059】
例示的なシステム環境1400は3つのクライアントコンピューティングデバイスとともに示されるが、任意の数のクライアントコンピューティングデバイスがサポートされてもよい。センサを伴うデバイスなどの、他のデバイスが、クラウドインフラストラクチャシステム1402と対話してもよい。
【0060】
ネットワーク1410は、クライアント1404,1406,および1408とクラウドインフラストラクチャシステム1402との間のデータの通信および交換を容易にしてもよい。各ネットワークは、ネットワーク1310について上で説明されたものを含む、様々な市販のプロトコルのいずれかを使用してデータ通信をサポートすることができる、任意のタイプのネットワークであってもよい。
【0061】
クラウドインフラストラクチャシステム1402は、サーバ1312について上述したものを含んでもよい1つ以上のコンピュータおよび/またはサーバを含んでもよい。
【0062】
ある実施形態では、クラウドインフラストラクチャシステムによって提供されるサービスは、オンラインデータストレージおよびバックアップソリューション、ウェブベースの電子メールサービス、ホストされたオフィススイートおよびドキュメントコラボレーションサービス、データベース処理、管理された技術サポートサービス等、オンデマンドでクラウドインフラストラクチャシステムのユーザに利用可能にされるサービスのホストを含んでもよい。クラウドインフラストラクチャシステムによって提供されるサービスは、そのユーザのニーズを満たすように動的にスケーリングすることができる。クラウドインフラストラクチャシステムによって提供されるサービスの特定のインスタンス化は、本明細書では「サービスインスタンス」と呼ばれる。一般に、クラウドサービスプロバイダのシステムからインターネットなどの通信ネットワークを介してユーザに利用可能にされる任意のサービスは、「クラウドサービス」と呼ばれる。典型的には、パブリッククラウド環境では、クラウドサービスプロバイダのシステムを構成するサーバおよびシステムは、顧客自身のオンプレミスサーバおよびシステムとは異なる。例えば、クラウドサービスプロバイダのシステムは、アプリケーションをホストしてもよく、ユーザは、インターネット等の通信ネットワークを介して、オンデマンドで、そのアプリケーションを注文および使用してもよい。
【0063】
いくつかの例では、コンピュータネットワーククラウドインフラストラクチャ内のサービスは、ストレージ、ホストされたデータベース、ホストされたウェブサーバ、ソフトウェアアプリケーション、またはクラウドベンダによってユーザに提供されるかもしくは当技術分野で公知の他のサービスへの、保護されたコンピュータネットワークアクセスを含んでもよい。例えば、サービスは、インターネットを介したクラウド上のリモートストレージへのパスワード保護されたアクセスを含むことができる。別の例として、サービスは、ウェブサービスベースのホストされたリレーショナルデータベースと、ネットワーク化された開発者による私的使用のためのスクリプト言語ミドルウェアエンジンとを含むことができる。別の例として、サービスは、クラウドベンダのウェブサイト上でホストされる電子メールソフトウェアアプリケーションへのアクセスを含むことができる。
【0064】
ある実施形態では、クラウドインフラストラクチャシステム1402は、セルフサービスであり、サブスクリプションベースであり、弾性的にスケーラブルであり、信頼性があり、高い可用性があり、セキュリティ保護のある態様で顧客に配信される、アプリケーション、ミドルウェア、およびデータベースサービス提供の一式を含んでもよい。そのようなクラウドインフラストラクチャシステムの例は、本譲受人によって提供されるOracle Public Cloudである。
【0065】
さまざまな実施形態において、クラウドインフラストラクチャシステム1402は、クラウドインフラストラクチャシステム1402によって提供されるサービスに対する顧客のサブスクリプションを自動的にプロビジョニングし、管理し、追跡するように適合されてもよい。クラウドインフラストラクチャシステム1402は、異なる展開モデルを介してクラウドサービスを提供してもよい。例えば、サービスは、クラウドインフラストラクチャシステム1402が(例えば、Oracleによって所有される)クラウドサービスを販売する組織によって所有され、サービスが一般公衆または異なる業界企業に利用可能にされる、公衆クラウドモデルの下で提供されてもよい。別の例として、サービスは、クラウドインフラストラクチャシステム1402が単一の組織に対してのみ動作し、その組織内の1つ以上のエンティティにサービスを提供してもよいプライベートクラウドモデルの下で提供してもよい。クラウドサービスはまた、クラウドインフラストラクチャシステム1402およびクラウドインフラストラクチャシステム1402によって提供されるサービスが関連するコミュニティ内のいくつかの組織によって共有されるコミュニティクラウドモデルの下で提供されてもよい。クラウドサービスはまた、2つ以上の異なるモデルの組み合わせであるハイブリッドクラウドモデルの下で提供されてもよい。
【0066】
いくつかの実施形態では、クラウドインフラストラクチャシステム1402によって提供されるサービスは、サービスとしてのソフトウェア(SaaS)カテゴリ、サービスとしてのプラットフォーム(PaaS)カテゴリ、サービスとしてのインフラストラクチャ(IaaS)カテゴリ、またはハイブリッドサービスを含むサービスの他のカテゴリの下で提供される1つ以上のサービスを含んでもよい。顧客は、クラウドインフラストラクチャシステム1402によって提供される1つ以上のサービスを、サブスクリプション注文を介して注文してもよい。次いで、クラウドインフラストラクチャシステム1402は、顧客のサブスクリプション注文におけるサービスを提供するための処理を実行する。
【0067】
いくつかの実施形態では、クラウドインフラストラクチャシステム1402によって提供されるサービスは、アプリケーションサービス、プラットフォームサービス、およびインフラストラクチャサービスを含んでもよいが、それらに限定はされない。いくつかの例では、アプリケーションサービスは、SaaSプラットフォームを介して、クラウドインフラストラクチャシステムによって提供されてもよい。SaaSプラットフォームは、SaaSカテゴリに該当するクラウドサービスを提供するよう構成されてもよい。例えば、SaaSプラットフォームは、統合された開発および展開プラットフォーム上でオンデマンドアプリケーションの一式を構築および配信するための能力を提供してもよい。SaaSプラットフォームは、SaaSサービスを提供するための基底のソフトウェアおよびインフラストラクチャを管理ならびに制御してもよい。SaaSプラットフォームによって提供されるサービスを利用することによって、顧客は、クラウドインフラストラクチャシステム上で実行するアプリケーションを利用することができる。顧客は、別途のライセンスおよびサポートを購入する必要なく、アプリケーションサービスを取得することができる。様々な異なるSaaSサービスが提供されてもよい。例としては、販売実績管理、企業統合、および大規模組織のための事業柔軟性のためのソリューションを提供するサービスが挙げられるが、それらに限定されない。
【0068】
いくつかの実施形態では、プラットフォームサービスは、PaaSプラットフォームを介して、クラウドインフラストラクチャシステムによって提供されてもよい。PaaSプラットフォームは、PaaSカテゴリに該当するクラウドサービスを提供するよう構成されてもよい。プラットフォームサービスの例は、組織(Oracle等)が共有の共通アーキテクチャ上で既存のアプリケーションを統合することを可能にするサービス、およびプラットフォームによって提供される共有サービスを活用する新たなアプリケーションを構築する能力を含んでもよいが、それらに限定されない。SaaSプラットフォームは、SaaSサービスを提供するための基底のソフトウェアおよびインフラストラクチャを管理ならびに制御してもよい。顧客は、顧客が別途のライセンスおよびサポートを購入する必要なく、クラウドインフラストラクチャシステムによって提供されるPaaSサービスを取得することができる。プラットフォームサービスの例は、Oracle Java Cloud Service (JCS), Oracle Database Cloud Service (DBCS)などを含むが、これらに限定されない。
【0069】
PaaSプラットフォームによって提供されるサービスを利用することによって、顧客は、クラウドインフラストラクチャシステムによってサポートされるプログラミング言語およびツールを採用することができ、展開されたサービスを制御することもできる。いくつかの実施形態では、クラウドインフラストラクチャシステムによって提供されるプラットフォームサービスは、データベースクラウドサービス、ミドルウェアクラウドサービス(例えば、Oracle Fusion Middlewareサービス)、およびJavaクラウドサービスを含んでもよい。一実施形態では、データベースクラウドサービスは、組織がデータベースリソースをプールし、顧客にサービスとしてのデータベースをデータベースクラウドの形で提供することを可能にする共有サービス展開モデルをサポートしてもよい。ミドルウェアクラウドサービスは、顧客が様々なビジネスアプリケーションを開発および展開するためのプラットフォームを提供してもよく、Javaクラウドサービスは、顧客がクラウドインフラストラクチャシステムにおいてJavaアプリケーションを展開するためのプラットフォームを提供してもよい。
【0070】
様々な異なるインフラストラクチャサービスが、クラウドインフラストラクチャシステムにおいてIaaSプラットフォームによって提供されてもよい。インフラストラクチャサービスは、SaaSプラットフォームおよびPaaSプラットフォームによって提供されるサービスを利用する顧客のためにストレージ、ネットワーク、および他の基本的なコンピューティングリソース等の基底のコンピューティングリソースの管理ならびに制御を促進する。
【0071】
ある実施形態では、クラウドインフラストラクチャシステム1402はまた、クラウドインフラストラクチャシステムの顧客に様々なサービスを提供するために使用されるリソースを提供するためのインフラストラクチャリソース1430を含んでもよい。一実施形態では、インフラストラクチャリソース1430は、PaaSプラットフォームおよびSaaSプラットフォームによって提供されるサービスを実行するためにサーバ、ストレージ、およびネットワーキングリソースなどのハードウェアの事前統合され最適化された組合せを含んでもよい。
【0072】
いくつかの実施形態では、クラウドインフラストラクチャシステム1402におけるリソースは、複数のユーザによって共有され、需要ごとに動的に再割り当てされてもよい。加えて、リソースは、異なる時間帯においてユーザに割り当てられてもよい。たとえば、クラウドインフラストラクチャシステム1430は、第1の時間帯における第1の組のユーザがクラウドインフラストラクチャシステムのリソースを指定された時間数にわたって利用することを可能にし、次いで、異なる時間帯にいる別の組のユーザに同じリソースを再割り当てることを可能にし、それによってリソースの利用を最大にしてもよい。
【0073】
ある実施形態では、クラウドインフラストラクチャシステム1402の異なるコンポーネントまたはモジュールによって、およびクラウドインフラストラクチャシステム1402によって提供されるサービスによって共有されるいくつかの内部共有サービス1432が提供されてもよい。これらの内部共有サービスは、セキュリティおよびアイデンティティサービス、統合サービス、企業リポジトリサービス、企業マネージャサービス、ウイルススキャンおよびホワイトリストサービス、高可用性、バックアップおよび回復サービス、クラウドサポートを可能にするためのサービス、電子メールサービス、通知サービス、ファイル転送サービスなどを含んでもよいが、これらに限定されない。
【0074】
特定の実施形態では、クラウドインフラストラクチャシステム1402は、クラウドインフラストラクチャシステムにおけるクラウドサービス(例えば、SaaS、PaaS、およびIaaSサービス)の包括的な管理を提供してもよい。一実施形態では、クラウド管理機能は、クラウドインフラストラクチャシステム1402によって受信された顧客のサブスクリプションをプロビジョニングし、管理し、追跡するための能力などを含んでもよい。
【0075】
一実施形態では、図に示すように、クラウド管理機能は、注文管理モジュール1420、注文オーケストレーションモジュール1422、注文プロビジョニングモジュール1424、注文管理および監視モジュール1426、ならびにアイデンティティ管理モジュール1428などの1つ以上のモジュールによって提供されてもよい。これらのモジュールは、汎用コンピュータ、専用サーバコンピュータ、サーバファーム、サーバクラスタ、もしくは任意の他の適切な構成および/もしくは組み合わせであってもよい1つ以上のコンピュータならびに/もしくはサーバを含むか、またはそれらを使用して提供されてもよい。
【0076】
例示的な動作1434において、クライアントデバイス1404、1406または1408などのクライアントデバイスを使用する顧客は、クラウドインフラストラクチャシステム1402によって提供される1つ以上のサービスを要求し、クラウドインフラストラクチャシステム1402によって提供される1つ以上のサービスのサブスクリプションの注文を出すことによって、クラウドインフラストラクチャシステム1402と対話してもよい。ある実施形態では、顧客は、クラウドユーザインターフェイス(UI)、クラウドUI1412、クラウドUI1414、および/またはクラウドUI1416にアクセスし、これらのUIを介してサブスクリプション注文を行ってもよい。顧客が注文を行うことに応答してクラウドインフラストラクチャシステム1402によって受信される注文情報は、顧客と、顧客が加入しようとする、クラウドインフラストラクチャシステム1402によって提供される1つ以上のサービスとを識別する情報を含んでもよい。
【0077】
顧客によって注文が行われた後、クラウドUI1412、1414および/または1416を介して注文情報が受信される。
【0078】
動作1436において、注文は注文データベース1418に記憶される。注文データベース1418は、クラウドインフラストラクチャシステム1418によって操作され他のシステム要素と関連して操作されるいくつかのデータベースのうちの1つであることができる。
【0079】
動作1438において、注文情報は注文管理モジュール1420に転送される。いくつかの例では、注文管理モジュール1420は、注文を検証し、検証されると注文を記帳するなど、注文に関連する料金請求および経理機能を実行するよう構成されてもよい。
【0080】
動作1440において、注文に関する情報は、注文オーケストレーションモジュール1422に通信される。注文オーケストレーションモジュール1422は、注文情報を利用して、顧客によって行われた注文に対してサービスおよびリソースのプロビジョニングをオーケストレーションしてもよい。いくつかの例では、注文オーケストレーションモジュール1422は、注文プロビジョニングモジュール1424のサービスを使用して、サブスクライブされたサービスをサポートするためにリソースのプロビジョニングをオーケストレーションしてもよい。
【0081】
特定の実施形態では、注文オーケストレーションモジュール1422は、各注文に関連付けられるビジネスプロセスの管理を可能にし、ビジネスロジックを適用して、注文がプロビジョニングに進むべきかどうかを判断する。動作1442において、新たなサブスクリプションの注文を受信すると、注文オーケストレーションモジュール1422は、リソースを割り当て、サブスクリプション注文を満たすのに必要とされるリソースを構成するよう、要求を注文プロビジョニングモジュール1424に送信する。注文プロビジョニングモジュール1424は、顧客によって注文されたサービスに対するリソースの割り当てを可能にする。注文プロビジョニングモジュール1424は、クラウドインフラストラクチャシステム1400によって提供されるクラウドサービス間の抽象化のレベル、および要求されたサービスを提供するためのリソースをプロビジョニングするために使用される物理的なインプリメンテーション層を提供する。したがって、注文オーケストレーションモジュール1422は、サービスおよびリソースが実際にオンザフライでプロビジョニングされるか、または事前にプロビジョニングされ、要求に応じてのみ割り振られる/割り当てられるかどうかなど、実現の詳細から隔離されてもよい。
【0082】
動作1444において、サービスおよびリソースがプロビジョニングされると、提供されたサービスの通知が、クラウドインフラストラクチャシステム1402の注文プロビジョニングモジュール1424によってクライアントデバイス1404、1406および/または1408上の顧客に送信されてもよい。
【0083】
動作1446において、顧客のサブスクリプション注文は、注文管理および監視モジュール1426によって管理ならびに追跡されてもよい。いくつかの事例では、注文管理および監視モジュール1426は、使用されるストレージの量、転送されるデータの量、ユーザの数、ならびにシステム起動時間およびシステム停止時間の量など、サブスクリプション注文におけるサービスについて使用統計を収集するよう構成されてもよい。
【0084】
ある実施形態では、クラウドインフラストラクチャシステム1400は、アイデンティティ管理モジュール1428を含んでもよい。アイデンティティ管理モジュール1428は、クラウドインフラストラクチャシステム1400におけるアクセス管理および認可サービスなどのアイデンティティサービスを提供するよう構成されてもよい。いくつかの実施形態では、アイデンティティ管理モジュール1428は、クラウドインフラストラクチャシステム1402によって提供されるサービスを利用することを望む顧客に関する情報を制御してもよい。そのような情報は、そのような顧客の素性を認証する情報、およびそれらの顧客が様々なシステムリソース(例えば、ファイル、ディレクトリ、アプリケーション、通信ポート、メモリセグメントなど)に対してどのアクションを実行することを許可されるかを記述する情報を含むことができる。アイデンティティ管理モジュール1428はまた、各顧客についての記述情報、ならびにその記述情報にアクセスしそれを変更することができる方法および人についての記述情報の管理も含んでもよい。
【0085】
図15は、様々な実施形態が実現されてもよい例示的なコンピュータシステム1500を示す。システム1500は、上記で説明されるコンピュータシステムのうちのいずれかを実現するために使用されてもよい。図に示されるように、コンピュータシステム1500は、バスサブシステム1502を介していくつかの周辺サブシステムと通信する処理ユニット1504を含む。これらの周辺サブシステムは、処理加速ユニット1506、I/Oサブシステム1508、ストレージサブシステム1518、および通信サブシステム1524を含んでもよい。ストレージサブシステム1518は、有形のコンピュータ可読記憶媒体1522およびシステムメモリ1510を含む。
【0086】
バスサブシステム1502は、コンピュータシステム1500のさまざまなコンポーネントおよびサブシステムに、意図されるように互いに通信させるための機構を提供する。バスサブシステム1502は、単一のバスとして概略的に示されるが、バスサブシステムの代替実施形態は、複数のバスを利用してもよい。バスサブシステム1502は、さまざまなバスアーキテクチャのうちのいずれかを用いるメモリバスまたはメモリコントローラ、周辺バスおよびローカルバスを含むいくつかのタイプのバス構造のうちのいずれかであってもよい。たとえば、そのようなアーキテクチャは、業界標準アーキテクチャ(ISA)バス、マイクロチャネルアーキテクチャ(MCA)バス、拡張ISA(EISA)バス、ビデオ・エレクトロニクス・スタンダーズ・アソシエーション(VESA)ローカルバス、およびIEEE P1386.1規格に従って製造される中二階バスとして実現され得る周辺コンポーネントインターコネクト(PCI)バスを含んでもよい。
【0087】
処理ユニット1504は、1つ以上の集積回路(例えば、従来のマイクロプロセッサまたはマイクロコントローラ)として実現することができ、コンピュータシステム1500の動作を制御する。1つ以上のプロセッサが処理ユニット1504に含まれてもよい。これらのプロセッサは、シングルコアプロセッサまたはマルチコアプロセッサを含んでもよい。特定の実施形態では、処理ユニット1504は、シングルコアプロセッサもしくはマルチコアプロセッサが各処理ユニットに含まれる1つ以上の独立した処理ユニット1532および/または1534として実現されてもよい。他の実施形態では、処理ユニット1504はまた、2つのデュアルコアプロセッサを単一のチップに統合することによって形成されるクワッドコア処理ユニットとして実現されてもよい。
【0088】
様々な実施形態では、処理ユニット1504は、プログラムコードに応答して様々なプログラムを実行することができ、複数の同時に実行されるプログラムまたはプロセスを維持することができる。任意の所与の時間に、実行されるべきプログラムコードの一部またはすべてが、プロセッサ1504、および/またはストレージサブシステム1518に常駐することができる。好適なプログラミングを通して、プロセッサ1504は、上記で説明される種々の機能性を提供することができる。コンピュータシステム1500は、デジタル信号プロセッサ(DSP)、特殊目的プロセッサなどを含み得る処理加速ユニット1506をさらに含んでもよい。
【0089】
I/Oサブシステム1508は、ユーザインターフェイス入力デバイスおよびユーザインターフェイス出力デバイスを含んでもよい。ユーザインターフェイス入力デバイスは、キーボード、マウスまたはトラックボールなどのポインティングデバイス、ディスプレイに組み込まれたタッチパッドまたはタッチスクリーン、スクロールホイール、クリックホイール、ダイヤル、ボタン、スイッチ、キーパッド、音声コマンド認識システムを伴う音声入力デバイス、マイクロフォン、および他のタイプの入力デバイスを含んでもよい。ユーザインターフェイス入力デバイスは、例えば、ユーザが、ジェスチャおよび発話コマンドを使用して、ナチュラルユーザインターフェイスを通して、Microsoft Xbox(登録商標)360ゲームコントローラ等の入力デバイスを制御し、それと相互作用することを可能にする、Microsoft Kinect(登録商標)モーションセンサ等のモーション感知および/またはジェスチャ認識デバイスを含んでもよい。ユーザインターフェイス入力デバイスは、ユーザから目の動き(たとえば、写真を撮っている間および/またはメニュー選択を行なっている間の「まばたき」)を検出し、アイジェスチャを入力デバイス(たとえばGoogle Glass(登録商標))への入力として変換するGoogle Glass(登録商標)瞬き検出器などのアイジェスチャ認識デバイスも含んでもよい。加えて、ユーザインターフェイス入力デバイスは、ユーザが音声コマンドを介して音声認識システム(たとえばSiri(登録商標)ナビゲータ)と対話することを可能にする音声認識感知デバイスを含んでもよい。
【0090】
ユーザインターフェイス入力デバイスは、三次元(3D)マウス、ジョイスティックまたはポインティングスティック、ゲームパッドおよびグラフィックタブレット、ならびにスピーカ、デジタルカメラ、デジタルカムコーダ、ポータブルメディアプレーヤ、ウェブカム、画像スキャナ、指紋スキャナ、バーコードリーダ3Dスキャナ、3Dプリンタ、レーザレンジファインダ、および視線追跡デバイスなどの聴覚/視覚デバイスも含んでもよいが、それらに限定されるものではない。加えて、ユーザインターフェイス入力デバイスは、例えば、コンピュータ断層撮影、磁気共鳴撮像、ポジトロン断層撮影、医療用超音波検査装置等の医療用撮像入力デバイスを含んでもよい。ユーザインターフェイス入力デバイスはまた、例えば、MIDIキーボード、デジタル楽器等の音声入力デバイスを含んでもよい。
【0091】
ユーザインターフェイス出力デバイスは、ディスプレイサブシステム、インジケータライト、または音声出力デバイス等の非視覚的ディスプレイを含んでもよい。ディスプレイサブシステムは、陰極線管(CRT)、液晶ディスプレイ(LCD)またはプラズマディスプレイを使用するものなどのフラットパネルデバイス、投影デバイス、タッチスクリーンなどであってもよい。一般に、「出力デバイス」という語の使用は、コンピュータシステム1500からユーザまたは他のコンピュータに情報を出力するためのすべての考えられ得るタイプのデバイスおよび機構を含むよう意図される。たとえば、ユーザインターフェイス出力デバイスは、モニタ、プリンタ、スピーカ、ヘッドフォン、自動車ナビゲーションシステム、プロッタ、音声出力デバイスおよびモデムなどの、テキスト、グラフィックスならびに音声/映像情報を視覚的に伝えるさまざまな表示デバイスを含んでもよいが、それらに限定されるものではない。
【0092】
コンピュータシステム1500は、現在のところシステムメモリ1510内に位置しているものとして示されているソフトウェア要素を含むストレージサブシステム1518を備えてもよい。システムメモリ1510は、処理ユニット1504上でロード可能および実行可能なプログラム命令、ならびにこれらのプログラムの実行中に生成されるデータを記憶してもよい。
【0093】
コンピュータシステム1500の構成およびタイプに応じて、システムメモリ1510は、揮発性(ランダムアクセスメモリ(RAM)など)および/または不揮発性(読み出し専用メモリ(ROM)、フラッシュメモリなど)であってもよい。RAMは、典型的には、処理ユニット1504に即座にアクセス可能である、ならびに/もしくは処理ユニット1504によって現在操作および実行されている、データならびに/またはプログラムモジュールを含む。いくつかの実現例では、システムメモリ1510は、スタティックランダムアクセスメモリ(SRAM)またはダイナミックランダムアクセスメモリ(DRAM)など、複数の異なるタイプのメモリを含んでもよい。いくつかの実現例では、起動中などにコンピュータシステム1500内の要素間で情報を転送するのに役立つ基本的なルーチンを含むベーシックインプット/アウトプットシステム(BIOS)が、典型的には、ROMに記憶されてもよい。限定ではなく例として、システムメモリ1510はまた、クライアントアプリケーション、ウェブブラウザ、中間層アプリケーション、リレーショナルデータベース管理システム(RDBMS)などを含んでもよいアプリケーションプログラム1512、プログラムデータ1514、およびオペレーティングシステム1516も示す。例として、オペレーティングシステム1516は、様々なバージョンのMicrosoft Windows(登録商標)、Apple Macintosh(登録商標)、および/もしくはLinux(登録商標)オペレーティングシステム、様々な市販のUNIX(登録商標)もしくはUNIX様オペレーティングシステム(様々なGNU/Linuxオペレーティングシステム、Google Chrome(登録商標)OSなどを含むが、これらに限定されない)、ならびに/またはiOS, Windows(登録商標)Phone, Android(登録商標)OS、BlackBerry(登録商標)10OS、およびPalm(登録商標)OSオペレーティングシステムなどのモバイルオペレーティングシステムを含んでもよい。
【0094】
記憶サブシステム1518はまた、いくつかの実施形態の機能性を提供する基本的なプログラミングおよびデータ構造を記憶するための有形のコンピュータ可読記憶媒体も提供してもよい。プロセッサによって実行されると上述の機能を提供するソフトウェア(プログラム、コードモジュール、命令)が、ストレージサブシステム1518に格納されてもよい。これらのソフトウェアモジュールまたは命令は、処理ユニット1504によって実行されてもよい。ストレージサブシステム1518はまた、ある実施形態に従って使用されるデータを記憶するためのリポジトリを提供してもよい。
【0095】
ストレージサブシステム1500はまた、コンピュータ可読記憶媒体1522にさらに接続され得るコンピュータ可読記憶媒体リーダ1520を含み得る。システムメモリ1510とともに、およびオプションとして、システムメモリ1510と組み合わせて、コンピュータ可読記憶媒体1522は、コンピュータ可読情報を、一時的および/またはより恒久的に収容、記憶、伝送、および検索するために、遠隔の、ローカルな、固定された、および/またはリムーバブルなストレージデバイスに記憶媒体を加えたものを包括的に表してもよい。
【0096】
コードまたはコードの一部を含むコンピュータ可読記憶媒体1522はまた、限定はしないが、情報の記憶および/または伝送のための任意の方法または技術で実現される揮発性および不揮発性の、リムーバブルおよび非リムーバブル媒体などの、記憶媒体ならびに通信媒体を含む、任意の適切な媒体を含むことができる。これは、RAM、ROM、電子的に消去可能プログラマブルROM(EEPROM)、フラッシュメモリもしくは他のメモリ技術、CD-ROM、デジタル多用途ディスク(DVD)、または他の光学記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置もしくは他の磁気記憶装置、または他の有形のコンピュータ可読媒体等の有形のコンピュータ可読記憶媒体を含んでもよい。これはまた、データ信号、データ伝送、または所望の情報を伝送するために使用することができ、コンピューティングシステム1500によってアクセスすることができる、任意の他の媒体等の非有形のコンピュータ可読媒体を含むことができる。
【0097】
例として、コンピュータ可読記憶媒体1522は、非リムーバブル不揮発性磁気媒体に対して読み書きするハードディスクドライブ、リムーバブル不揮発性磁気ディスクに対して読み書きする磁気ディスクドライブ、CD ROM、DVDおよびBlu-Ray(登録商標)ディスクなどの、リムーバブル不揮発性光ディスクに対して読み書きする光ディスクドライブ、または他の光学媒体を含んでもよい。コンピュータ可読記憶媒体1522は、Zip(登録商標)ドライブ、フラッシュメモリカード、ユニバーサルシリアルバス(USB)フラッシュドライブ、セキュアデジタル(SD)カード、DVDディスク、デジタルビデオテープなどを含んでもよいが、これらに限定されない。コンピュータ可読記憶媒体1522はまた、フラッシュメモリベースのSSD、エンタープライズフラッシュドライブ、ソリッドステートROMなどの不揮発性メモリに基づくソリッドステートドライブ(SSD)、ソリッドステートRAM、ダイナミックRAM、スタティックRAMなどの揮発性メモリに基づくSSD、DRAMベースのSSD、磁気抵抗RAM(MRAM)SSD、およびDRAMとフラッシュメモリベースのSSDとの組み合わせを使用するハイブリッドSSDも含んでもよい。ディスクドライブおよびそれらに関連付けられるコンピュータ可読媒体は、コンピュータ可読命令、データ構造、プログラムモジュール、および他のデータの不揮発性記憶をコンピュータシステム1500に提供してもよい。
【0098】
通信サブシステム1524は、他のコンピュータシステムおよびネットワークに対するインターフェイスを提供する。通信サブシステム1524は、他のシステムとコンピュータシステム1500との間のデータの送受のためのインターフェイスとして働く。例えば、通信サブシステム1524は、コンピュータシステム1500がインターネットを介して1つ以上のデバイスに接続することを可能にしてもよい。いくつかの実施形態では、通信サブシステム1524は、(たとえば、セルラー電話技術、3G、4GもしくはEDGE(グローバル進化のための高速データレート)などの先進データネットワーク技術、WiFi(IEEE802.11ファミリー規格、もしくは他のモバイル通信技術、またはそれらのいずれかの組み合わせを用いて)無線音声および/もしくはデータネットワークにアクセスするための無線周波数(RF)送受信機コンポーネント、グローバルポジショニングシステム(GPS)受信機コンポーネント、ならびに/または他のコンポーネントを含んでもよい。いくつかの実施形態では、通信サブシステム1524は、無線インターフェイスに加えて、またはその代わりに、有線ネットワーク接続性(例えば、イーサネット(登録商標))を提供することができる。
【0099】
いくつかの実施形態では、通信サブシステム1524はまた、コンピュータシステム1500を使用してもよい1人以上のユーザの代わりに、構造化されたおよび/または構造化されていないデータフィード1526、イベントストリーム1528、イベント更新1530等の形式で入力通信を受信してもよい。
【0100】
例として、通信サブシステム1524は、Twitter(登録商標)フィード、Facebook(登録商標)更新、Rich Site Summary(RSS)フィードなどのウェブフィード、および/もしくは1つ以上の第三者情報源からのリアルタイム更新などの、ソーシャルネットワークならびに/または他の通信サービスのユーザからリアルタイムでデータフィード1526を受信するよう構成されてもよい。
【0101】
加えて、通信サブシステム1524はまた、連続データストリームの形式でデータを受信するよう構成されてもよく、これは、明示的な終端を伴わない、本質的に連続的または無限であってもよい、リアルタイムイベントのイベントストリーム1528および/またはイベント更新1530を含んでもよい。連続データを生成するアプリケーションの例としては、たとえば、センサデータアプリケーション、金融株式相場表示板、ネットワーク性能測定ツール(たとえば、ネットワーク監視およびトラフィック管理アプリケーション)、クリックストリーム解析ツール、自動車交通監視などが含まれてもよい。
【0102】
通信サブシステム1524はまた、構造化されたおよび/または構造化されていないデータフィード1526、イベントストリーム1528、イベント更新1530などを、コンピュータシステム1500に結合される1つ以上のストリーミングデータソースコンピュータと通信してもよい1つ以上のデータベースに出力するよう構成されてもよい。
【0103】
コンピュータシステム1500は、ハンドヘルドポータブルデバイス(例えば、iPhone(登録商標)携帯電話、iPad(登録商標)コンピューティングタブレット、PDA)、ウェアラブルデバイス(例えば、Google Glass(登録商標)ヘッドマウントディスプレイ)、PC、ワークステーション、メインフレーム、キオスク、サーバラック、または任意の他のデータ処理システムを含む、種々のタイプの1つとすることができる。
【0104】
常に変化するコンピュータおよびネットワークの性質のため、図に示されるコンピュータシステム1500の記載は、単に具体的な例として意図される。図に描写されるシステムより多いまたは少ないコンポーネントを有する、多くの他の構成が可能である。たとえば、カスタマイズされたハードウェアも使用されるかもしれず、および/または、特定の要素が、ハードウェア、ファームウェア、ソフトウェア(アプレットを含む)、または組み合わせで実現されるかもしれない。さらに、ネットワーク入力/出力デバイス等の他のコンピューティングデバイスへの接続が採用されてもよい。本明細書に提供される開示および教示に基づいて、種々の実施形態を実現するために、他の態様および/または方法を用いてもよい。
【0105】
前述の説明では、説明の目的で、様々な実施形態の完全な理解のために、多数の具体的な詳細を記載した。しかしながら、これらの実施形態は、これらの具体的な詳細のいくつかがなくても実施されてもよいことが明らかであろう。他の例では、周知の構造およびデバイスがブロック図形式で示される。
【0106】
前述の説明は、例示的な実施形態のみを提供し、本開示の範囲、適用性、または構成を限定することを意図しない。むしろ、例示的な実施形態の前述の説明は、少なくとも1つの実施形態を実施するための実施可能な説明を提供する。特許請求の範囲に記載されているある実施形態の精神および範囲から逸脱することなく、要素の機能および構成にさまざまな変更を加えることができることを理解されたい。
【0107】
上記の説明では、実施形態の完全な理解を与えるために具体的な詳細が与えられている。しかしながら、実施の形態はこれらの具体的な詳細なしに実施されてもよい。例えば、回路、システム、ネットワーク、プロセス、および他のコンポーネントは、実施形態を不必要な詳細において不明瞭にしないために、ブロック図の形態でコンポーネントとして示されている場合がある。他の事例では、周知の回路、プロセス、アルゴリズム、構造、および技術は、実施形態を不明瞭にすることを回避するために、不必要な詳細を伴わずに示されている場合がある。
【0108】
また、個々の実施形態は、フローチャート、フロー図、データフロー図、構造図、またはブロック図として描写されるプロセスとして記載されている場合があることに留意されたい。あるフローチャートは動作を逐次プロセスとして記載している場合があるが、動作の多くは並列または同時に実行され得る。加えて、動作の順序は並べ替えられてもよい。プロセスは、その動作が完了されるときに終結されるが、図に含まれない追加のステップを有し得る。プロセスは、方法、関数、プロシージャ、サブルーチン、サブプログラムなどに対応してもよい。プロセスが関数に対応する場合では、その終結は、その関数が呼出関数または主関数に戻ることに対応し得る。
【0109】
「コンピュータ可読媒体」という用語は、命令および/またはデータを記憶するか、含むか、または担持することができるポータブルまたは固定された記憶装置、光記憶装置、ワイヤレスチャネルおよびさまざまな他の媒体を含むが、それらに限定はされない。コードセグメントまたは機械実行可能な命令は、プロシージャ、関数、サブプログラム、プログラム、ルーチン、サブルーチン、モジュール、ソフトウェアパッケージ、クラス、または命令、データ構造、もしくはプログラム文の任意の組合せを表してもよい。コードセグメントは、情報、データ、引数、パラメータ、またはメモリコンテンツを受け渡すおよび/または受け取ることによって、別のコードセグメントまたはハードウェア回路に結合されてもよい。情報、引数、パラメータ、データなどは、メモリ共有、メッセージ受渡し、トークン受渡し、ネットワーク伝送などを含む任意の好適な手段を介して渡されるか、転送されるか、または伝送されてもよい。
【0110】
さらに、実施形態は、ハードウェア、ソフトウェア、ファームウェア、ミドルウェア、マイクロコード、ハードウェア記述言語、またはそれらの任意の組合せによって実現されてもよい。ソフトウェア、ファームウェア、ミドルウェア、またはマイクロコードで実現されるとき、必要なタスクを実行するプログラムコードまたはコードセグメントは、機械可読媒体に記憶されてもよい。必要なタスクはプロセッサが実行してもよい。
【0111】
前述の明細書においては、様々な実施形態の局面が、その特定の実施形態を参照して説明されているが、すべての実施形態がそれに限定されるわけではない。上記の実施形態のさまざまな特徴および局面は、個々に、または一緒に用いられてもよい。さらに、実施形態は、本明細書の、より広い精神および範囲から逸脱することなく、本明細書に説明されるものを超えて、任意の数の環境および用途において利用されることができる。したがって、明細書および図面は、限定的ではなく例示的であると見なされるべきである。
【0112】
さらに、例示の目的のため、方法が特定の順序で説明された。代替の実施形態では、方法は、説明された順序とは異なる順序で実行されてもよいことを理解されたい。また、上記の方法は、ハードウェアコンポーネントによって実行されてもよいし、マシン実行可能命令であって、用いられると、そのような命令でプログラムされた汎用もしくは専用のプロセッサまたは論理回路などのマシンに上記の方法を実行させるマシン実行可能命令のシーケンスで具体化されてもよいことも理解されたい。これらのマシン実行可能命令は、CD-ROMもしくは他のタイプの光ディスク、フロッピー(登録商標)ディスケット、ROM、RAM、EPROM、EEPROM、磁気もしくは光カード、フラッシュメモリなど、または電子命令を記憶するために好適な他のタイプの機械可読媒体等の、1つ以上の機械可読媒体上に記憶されてもよい。代替的に、本方法は、ハードウェアとソフトウェアとの組合せによって実行されてもよい。
図1
図2A
図2B
図3
図4
図5
図6
図7
図8
図9A
図9B
図9C
図10A
図10B
図11
図12
図13
図14
図15