詳細な説明
ウェブサービスを提供するコンピュータシステム(たとえば、ウェブサーバ)は、1人以上のユーザのためのビジネスロジックコードなどのコードを同時にコンパイルおよび実行するために使用し得る。このような構成は、ユーザにとって大きな利点を有し得る。ユーザによって使用されているローカルデバイスはコードのコンパイルおよび実行を行なわないので、ローカルデバイスで使用するおよび/または必要とする処理能力は低くてもよい。ウェブサービスによってコンパイルされ実行されるコードは、注入コード(injected code)と呼ばれることがある。このような注入コードは、リモートコンピュータシステムからコンパイルおよび/または実行のために提供される。コードを記述またはコンパイルする開発者は、コードを見たりコンパイルしたりするためにローカルコンピュータシステムを使用し得るが、コンパイルおよび実行のためにウェブサービスへコードを転送し得る。
リモートコンピューティングデバイスからネットワーク接続を介してウェブサービスへアクセスし得る一部のユーザは、ウェブサービスコンピュータシステムによって実行されるランタイムスレッドを有し得る。このようなランタイムスレッドは、デバッグ機能なしに実行されているコンパイル済みビジネスロジックコードなどのコンパイル済み注入コードであってもよい。このようなことから、ウェブサービスコンピュータシステムによって実行されているランタイムスレッドは、ブレークポイントを含まないかもしくは実施しなくてもよく、コードにおける各々の式の実行を進める入力のために停止および待機しなくてもよく、注入コード内にあるさまざまな変数の値を出力しなくてもよい。ウェブサービスの異なるユーザは、異なるランタイムスレッドに関連付けられ得る。異なるユーザについて実行されているランタイムスレッドは、コンパイル済みコードの同じまたは異なるピースに対応し得る(たとえば、特定のコンパイル済みのコードのピースが複数のユーザのための複数のスレッドとして実行し得る)。このようなことから、ネットワーク(たとえば、インターネット)を介してウェブサービスへアクセスするユーザは、ランタイムスレッドを実行するウェブサービスを有し得る一方、ネットワークを介してウェブサービスへアクセスする他のユーザは、第1のランタイムスレッドとは無関係の第2のランタイムスレッドを実行するウェブサービスを有し得る。
これらのランタイムスレッドの各々は、ウェブサービスコンピュータシステムの同じ仮想マシンによって実行し得る。このような仮想マシンは、排他的に特定のモードで実行するように構成し得る。たとえば、この仮想マシンは、デバッグモードまたはランタイムモードのいずれかで実行するように構成し得る。これらのモードは、排他的であってもよい。仮想マシンによって実行されるすべてのスレッドはデバッグモードで実行される必要がある場合がある、または仮想マシンによって実行されるすべてのスレッドはランタイムモードで実行される必要がある場合がある。
開発者が記述または修正したビジネスロジックコード等のコードを特定のユーザ(たとえば、ビジネスロジック開発者)がデバッグしたい場合、開発者はデバッグモードを所望してもよい。デバッグにより、開発者は、実行を継続することを開発者が表示するまでビジネスロジックの実行を停止する点であるブレークポイントを注入コード内に設定すること、式ごとに注入コードの実行をステップスルーすること、ならびにコンパイル済み注入コードの実行時に変数の値を見るおよび/またはコンパイルすることなどのデバッグアクティビティのうちの1つ以上を行なうことが可能となり得る。
さらに、開発者によってデバッグされるコードは1つ以上のサブセクションを有することなどによって複雑になる場合があることを理解すべきである。開発者が注入コードの部分をデバッグすることを望み得る一方、開発者は注入コードの他の部分をデバッグ機能なしに実行することを望み得る。このような構成により、注入コードの特定の部分をターゲットとしてデバッグすることを可能にし得る一方、デバッグ機能が開発者に提供されることなく注入コードの残りを実行することができる。
1人以上の開発者がコードをデバッグできるように仮想マシンがデバッグモードで実行される場合、ウェブサーバ上の他のユーザのための注入コードの実行は有効となり、デバッグモードで実行するよう強いられ得る。このようなことから、1つ以上の他のスレッドがランタイムモードで実行されている(デバッグ機能なし)間に一部が同時にデバッグされる1つ以上のスレッドを同じ仮想マシンに実行させることは、ウェブサーバにアクセスするすべてのユーザが所望のモードでコードを実行するために望まれるものであってもよい。
ウェブサービスによってデバッグ機能なしにランタイムモードで他のスレッドが同時に実行されている間に1人以上の開発者が注入コードをデバッグできるようにするために、ウェブサービスの仮想マシンはランタイムモードで排他的に実行し得る。デバッグすることが望まれる注入コードがコンパイルされるとき、コンパイラは、デバッグ機能を含むようにコンパイルされている注入コードをコンパイルし得る。ひとたびコンパイルされると、注入コードから作成されるバイトコードがランタイムとして仮想マシンによって実行し得る。このようなことから、ウェブサービスの仮想マシンの視点からは、コンパイル済み注入コードに基づくスレッドがランタイムとして実行される。しかしながら、開発者の視点からは、仮想マシンがデバッグモードであった場合と比較すると、スレッドは同一または類似のデバッグ機能を有する。デバッグ機能により、注入コードをデバッグすることができ、これはこのようなデバッグ機能がコンパイル処理時に注入コードに加えられたためである。
開発者は注入コードの特定の部分をデバッグすることを望み得る一方、開発者は注入コードの他の部分を開発者に提供されるデバッグ機能なしに実行することを望み得る。デバッグすることが望ましくない注入コードの部分に対してデバッグ機能を有効にすると、開発者がデバッグすることを望むコードの1つ以上の部分をデバッグする開発者の能力を阻害、遅延、および/またはそれ以外に悪影響を与えるよう作用し得る。
注入コードは、さまざまなタスクフローによって呼出され得る。「タスクフロー」は、一連の要求であるコードの1つ以上のセクションまたはピース、および/または共通関数に関連するコードの部分を定義し得る。タスクフローは、アプリケーションにおける特定の機能タスクを行なうために合わせてシーケンスで実行されるアクティビティの集合を定義する。アクティビティは、新しいページの表示、アプリケーションデータの入力、またはアプリケーションデータの保存など、全体的なアプリケーションコードの一部の部分集合を行なうように定義し得る。コードからコンパイルされたウェブアプリケーションにおいて、特定のタスクフローのアクティビティは、ユーザのブラウザから発信される要求によって呼出し得る。タスクフローは、注入コードの特定のピースまたは部分を呼出し得る。タスクフローは、注入コードを呼出し得るとともに、静的コードも呼出し得る。静的コードは、注入されていない、および/または開発者がコンパイルすることができないコードを意味し得る。このような静的コードは、アプリケーションが呼出し得る元のアプリケーション開発者、および/または他のサービスのプロバイダによって提供し得る。タスクフローは、事前に定義し得る(すなわち、開発者がコンパイルすることができない)、または開発者による作成および/または修正が可能であってもよい。タスクフローは、注入コードを呼出すことが可能な1つ以上の事前に定義された「フック」ポイントを含み得る。このため、タスクフローは、静的コードの1つ以上のピースの実行を含み得るものであり、かつ、任意で注入コードの1つ以上のピースが実行されることを可能にし得る。
全体的に、Oracle(登録商標)ERPアプリケーション開発者によって実行されるコードは、Oracle(登録商標)によって提供されたコードに大きく依存し得る。静的コードとともに、タスクフローは、静的コードの機能を修正および/またはカスタマイズすることを可能にする1つ以上の注入コードのピースを呼出し得る。このような静的コードは、開発者によって注入されるのではなく、ウェブサーバを用いて展開し得る。このため、開発者はコンパイルされるべき注入コードを提供し得るものの、静的コードは既に格納されているか、そうでなければウェブサーバからアクセス可能である。静的コードは、注入コードを実行している同一のランタイムの一部として実行し得る。このため、特定のランタイムスレッドは、静的コードと注入コードとに関連付けられたランタイムを実行し得る。
タスクフローは、アプリケーション(たとえば、注入コードおよび/または静的コードから構築される)における制御の流れを定義するためのモジュール方式を提供し得る。このため、アプリケーションは、さまざまなタスクを達成するために複数の異なるタスクフローを呼出し得る。単一の大きなページフローとしてアプリケーションを表わす代わりに、アプリケーションは、再使用可能なタスクフローの集合に分解することができる。各タスクフローは、アプリケーションナビゲーショナルグラフの部分を含み得る。一例として、航空システムは、航空予約をコンパイルするのに必要な注入および静的コードを呼出す作成/コンパイル予約タスクフローを含み得る。頻度の高いフライヤータスクフローは、頻度の高いフライヤーアカウントの作成および/または使用に必要な注入および静的コードを呼出し得る。他の例として、管理アカウントタスクフローは、アカウント保持者のアドレス、誕生日、パスワードなどを管理するためのコードを含み得る。異なるタスクフローは異なるコンテキストにおける同じ注入コードのピースを呼出し得ることを理解すべきである。このため、注入コードのピースは、複数のタスクフローによって呼出し得る。一例として、航空システムの例では、同じ注入コードのピースが、航空機の利用可能な座席の合計数を判定する際に使用されるものと同様に、どの座席が利用可能であるかを判定するために使用し得る。
デバッグすることが望まれる注入コードのコンパイルは、開発者から受取った修正済みのコード内にある式、および/または加えられた付加的な式を伴い得る。このような追加および/修正により、各式の実行後に停止する(開発者が次の式の実行についての承認を提供するまで)、式が処理を開始したことについての表示を出力する、式が処理を完了したことについての表示を出力する、コード内にある変数の値の表示を出力する、および/または、1つ以上の式の実行前に変数の値を設定することを可能にする、コンパイル済みコードを与え得る。注入コードに対するこれらの追加および/または修正の各々により、コードがランタイムとして実行されている(たとえば、リアルタイムで)間に開発者がコードをデバッグすることが可能になり得る。
開発者は、デバッグのための1つ以上のタスクフローを選択または表示することが可能になり、選択されたタスクフローに関連付けられた注入コードをデバッグできるようになる。デバッグのためのタスクフローインスタンスを示すことにより、開発者は、開発者が示されたタスクフローに関連付けられた注入コードの1つ以上の部分のためのデバッグ機能を望むが示されたタスクフローインスタンスに関連付けられていない注入コードの1つ以上の部分のためのデバッグ機能を望まないことを示している。(さらに、静的コードのためのデバッグは、デバッグのために関連付けられたタスクフローが選択されているかに関わらず、利用可能でない。)一部の実施形態において、開発者は、デバッグのための複数のタスクフローを選択することができる。タスクフローのタスクフローインスタンスをデバッグすることにより、開発者は、タスクフローの他のインスタンスがデバッグ機能なしに実行される間にタスクフローをデバッグすることができる。注入コードのピースが複数のタスクフローによって呼出される場合、注入コードはデバッグの対象として選択された1つ以上のタスクフローにおいてのみ利用可能であってもよく、デバッグの対象として選択されなかった1つ以上のタスクフローが実行されているときは利用可能でない。
仮想マシンは、デバッグされておらず他のユーザのためのランタイムとして実行されている他の(場合によっては注入済みの)コードに対応する他のスレッドと同時にデバッグされているコンパイル済み注入コードのスレッド(タスクフローによって呼出された)をランタイムモードで実行し得る。デバッグを行なっている開発者に対し、開発者のコードにおける式の修正および/または追加は、デバッグモードで実行されている仮想マシンなしに開発者にデバッグ機能を提供する。デバッグ機能は、デバッグが望まれることを開発者が示す特定のタスクフローについてのみ開発者に提供し得る。このため、開発者の注入コードは、開発者の注入コードが呼出される示されたタスクフローの実行時にのみデバッグ機能を有し得る。同じ注入コードのピースまたは他の注入コードのピースは、少なくとも開発者からの視点において、デバッグ機能が要求されなかったタスクフローの一部として実行されるときには、デバッグ機能のないランタイムとして実行されるように表われ得る。デバッグ機能が望まれないコードのこのような部分について、コードの部分は、各式の実行後に停止する、式が処理を開始したことについての表示を出力する、式が処理を完了したことについての表示を出力する、コード内にある変数の値の表示を出力する、および/または1つ以上の式の実行前に変数の値を設定することを可能にする機能を起動し得ない。一部の実施形態において、式の修正および/または追加は、開発者がデバッグを望まないタスクフローに関連付けられたコードの部分に対して加えられ得る。しかしながら、注入コードを実行するウェブサービスコンピュータシステムは、開発者がデバッグを望むタスクフローに関連付けられた注入コードの部分に到達するまでこのようなデバッグ式を無視してコードの実行を継続し得る。コードのこの部分について、コードがロジックインサイトスレッドとして実行されている間、デバッグ式は無視され得ず、開発者にデバッグ機能を提供するために使用し得る。
以下のシステムおよび方法は、1人以上の開発者がデバッグのためのスレッドを実行している間に1人以上のユーザのためにランタイムモードでスレッドを同時に実行するためにクラウドベースのウェブサービスコンピュータシステムなどのマルチユーザシステムがどのように使用し得るのかについての詳細を提供する。さらに、以下では、注入コードの残りをランタイムとして実行させながらデバッグのための1つ以上のタスクフロー内の注入コードを開発者がどのように分離することができるのかについて詳述する。
本明細書において記載される原理は、さまざまなプログラミング言語で記述されたさまざまなコードの形式に適用可能であってもよい。本明細書において詳述するように、例はビジネスロジックコードと呼ばれるものに焦点を当てている。ビジネスロジックコードは、Java(登録商標)およびGroovy(登録商標)などのプログラミング言語で記述されてもよく、特定の「事業ドメイン」に適用し得る。たとえば、式は、会計または保険に固有の関数について行なうことが可能であってもよい。ビジネスロジックは、それ自体がJava(登録商標)などの一部の一般的なプログラミング言語よりも高水準のプログラミングを可能とするものとして考えられ得る。本明細書で詳述されている同様の原理を、他のプログラミング言語および非ビジネスロジック構成に適用し得ることが、理解されるはずである。
この文書の全体にわたってさまざまな用語が使用される。明瞭化のために、これらの用語は以下のとおりに定義される。
「注入コード」とは、第1のコンピュータシステムから第2のコンピュータシステムによるコンパイルおよび/実行のために提供(「注入」)されるコードのことである。第1のコンピュータシステムは、第2のコンピュータシステムから遠隔の場所に位置していてもよく、ネットワークを介して互いに通信し得る。たとえば、一部の実施形態において、開発者コンピュータシステムは、コードの記述および/またはコンパイルに使用され、コードは、注入コードのコンパイルおよび/または実行を行なうウェブサービスコンピュータシステムに注入コードとして注入される。注入コードは、デバッグ機能なしに、またはデバッグ機能を含むようにコンパイルおよび実行し得る。
「注入コードランタイム」は、ランタイムモードで仮想マシンによって実行される注入コードに少なくとも部分的に基づくコンパイル済みコードのことである。仮想マシンは、注入コードランタイムのためのデバッグ機能を提供しない。
「ランタイムスレッド」は、注入コードランタイムを実行するスレッドのことである。ランタイムスレッドは、デバッグ機能を提供しない。注入コードランタイムスレッドは、ランタイムモードで仮想マシンによって実行される。同じ注入コードランタイムの複数のランタイムスレッドは同時にウェブサービスコンピュータシステムによって実行し得る。ランタイムスレッドは、静的コードに基づいて1つ以上のランタイムを付加的に実行し得る。
「ロジックインサイト注入コードランタイム」は、ランタイムモードで仮想マシンによって実行されるとともにデバッグ機能を提供するコンパイル済みコード(ビジネスロジックコードに基づき得る)のことである。ロジックインサイト注入コードは、開発者(デバッグ機能を望む開発者と同じ、または同じでない)から受けた注入コードから少なくとも部分的にコンパイルされる。
「ロジックインサイトスレッド」は、ロジックインサイト注入コードランタイムを実行するスレッドのことである。ロジックインサイトスレッドは、開発者にデバッグ機能を提供する。ロジックインサイトスレッドは、ランタイムモードでウェブサービスコンピュータシステムの仮想マシンによって実行される。ロジックインサイトスレッドは、静的コードに基づいて1つ以上のランタイムを付加的に実行し得る。
図1は、複数のユーザのためにランタイムスレッドおよびロジックインサイトスレッドを同時に実行するように構成されたシステム100の実施形態を示す。システム100はさらに、デバッグの対象として1つ以上の特定のタスクフローを開発者が指定できるように、かつ、デバッグを望まないタスクフローに関連付けられた他のコードの部分のためのデバッグ機能が開発者に提示されないように、構成し得る。システム100は、ユーザコンピュータシステム110と、ネットワーク120と、開発者コンピュータシステム130と、ウェブサービスコンピュータシステム140とを含み得る。ウェブサービスコンピュータシステム140は、仮想マシン150と、コンパイラ160と、ランタイムスレッド170と、ロジックインサイトスレッド180とを含み得る。
ランタイムスレッド170およびロジックインサイトスレッド180の両方は、どのコンパイル済みコードのピースが実行されるかを判定するために使用される1つ以上のタスクフローを参照し得る。異なるランタイムスレッド170および/または異なるロジックインサイトスレッド180は、異なるタスクフローを参照し得る。このようなタスクフローは、ウェブサービスコンピュータシステム140に格納されてもよく、ウェブサービスコンピュータシステム140によってアクセス可能であり、および/または注入コードと同様の方法で開発者によって提供される。
各ユーザコンピュータシステム110は、ウェブサービスコンピュータシステム140の仮想マシン150によって実行されるランタイムスレッド170のランタイムスレッドに関連付けられるユーザによって操作し得る。ユーザコンピュータシステム110のユーザは、ランタイムスレッド170がデバッグ機能なしにコンパイルされる、および/または実行されることを、所望し指定することができる。このため、ユーザコンピュータシステム110のためのランタイムスレッド170の各々の実行には、ブレークポイント、ビジネスロジックコード内からユーザコンピュータシステム110への変数値の出力、またはランタイムスレッド170内の式の処理を発生させるためにユーザコンピュータシステム110から要求される入力を含むユーザに対して提供されるデバッグ機能は、伴い得ない。ユーザコンピュータシステム110は、互いに関連がないものであってもよい。たとえば、各ユーザコンピュータシステム110は、インターネットを介してウェブサービスコンピュータシステム140へアクセスするユーザとは異なるユーザによって操作し得る。代替的には、一部またはすべてのユーザコンピュータシステム110は、特定の事業組織など、特定の組織のユーザによって操作し得る。ウェブサービスコンピュータシステム140によって実行されるランタイムスレッドは、同じまたは異なるランタイムスレッドに基づき得る。ランタイムスレッド170は、ユーザコンピュータシステム110を介して、または一部の他のコンピュータシステム(開発者コンピュータシステム130の開発者コンピュータシステムなど)によってウェブサービスコンピュータシステム140に提供される(ビジネス)コードに基づいて(ウェブサービスコンピュータシステムによって)コンパイルされた注入コードランタイムに基づき得る。図1において、3つのユーザコンピュータシステムが示され、これは例示のみを目的としている。より少ない数または追加のユーザコンピュータシステム110が、ウェブサービスコンピュータシステム140の仮想マシン150によって実行されるランタイムスレッドに対応付けられ得る。ウェブサービスコンピュータシステム140は「ウェブサービス」コンピュータシステムと呼ばれているが、コンパイルおよび実行サービスは、インターネットおよび私的イントラネットを含むさまざまな形式のネットワークを介して提供し得ることを理解すべきである。
ユーザコンピュータシステム110は、ウェブベースインターフェイスを介してウェブサービスコンピュータシステム140と対話し得る。たとえば、ウェブベースインターフェイスは、ウェブサービスコンピュータシステム140によってユーザコンピュータ110に提供することができ、コンパイルのためにウェブサービスコンピュータシステム140にコードを注入することを可能にする。ウェブブラウザを介してユーザコンピュータシステム110上に提示し得るウェブベースインターフェイスは、注入コードから作成された注入コードランタイムに基づいて実行されるランタイムスレッドに対するユーザコンピュータシステム110のユーザの対話を可能にする。明確にすると、「ウェブベース」インターフェイスは、ブラウザを介して動作することができ、インターネットおよび私的イントラネットを含むさまざまな形態のネットワークを通したデータの交換を可能にする。
ウェブサービスコンピュータシステム140は第三者によって操作し得ることを理解すべきである。たとえば、企業体は、ウェブサービスコンピュータシステム140を操作し、コンパイル、デバッグ、および/または実行サービスを1つ以上の他の実体(ユーザコンピュータシステム110のユーザがそのメンバーであってもよい)に提供し得る。代替的には、ウェブサービスコンピュータシステム140は、エージェント(たとえば、従業員)のためのコンパイル、デバッグ、および/または実行サービスを提供する実体によって操作し得る。
ネットワーク120−1は、1つ以上の公衆ネットワークおよび/または1つ以上の私的ネットワークを示し得る。公衆ネットワークはインターネットであってもよく、私的ネットワークは、企業のローカルエリアネットワークなどのイントラネットであってもよい。ユーザコンピュータシステム110の各々は、ネットワーク120−1を介してウェブサービスコンピュータシステム140と通信し得る。ユーザコンピュータシステム110の代わりに実行されるランタイムスレッド170は、ネットワーク120−1を介してユーザコンピュータシステム110とウェブサービスコンピュータシステム140との間で交換される情報を伴い得る。ランタイムスレッド170−1の実行をウェブサービスコンピュータシステム140に代わりに実行させるユーザコンピュータシステム110−1は、ネットワーク120−1を介したHTTP要求および/または他の形式の情報の交換の発生を伴い得る。
ネットワーク120−2も1つ以上の公衆ネットワークおよび/または1つ以上の私的ネットワークを表わし得る。公衆ネットワークはインターネットであってもよく、私的ネットワークは、企業のローカルエリアネットワークなどのイントラネットであってもよい。ネットワーク120−2は、ネットワーク120−1と同じネットワークまたは異なるネットワークを表わし得る。開発者コンピュータシステム130の各々は、ネットワーク120−2を介してウェブサービスコンピュータシステム140と通信し得る。開発者コンピュータシステム130−1の代わりに実行されるロジックインサイトスレッド180−1は、ネットワーク120−2を介した開発者コンピュータシステム130−1とウェブサービスコンピュータシステム140との間の情報の交換を伴い得る。このような情報は、ネットワーク120−2を介したHTTP要求および/または他の形式の情報の交換の発生を伴い得る。
開発者コンピュータシステム130の各開発者コンピュータシステムは、ビジネスロジックコードなどのコードのコーディング、コンパイル、修正、デバッグ、および/または実行テストを行なう開発者によって操作し得る。開発者コンピュータシステム130を操作する開発者は、開発者によってコーディングされた一部またはすべてのビジネスロジックをデバッグ機能とともに実行することを望み得る。このようなことから、ランタイム機能は、ビジネスロジックコードの全ピースについて開発者によって望まれない。図1において、ロジックインサイトスレッド180は、仮想マシン150によって実行されるものとして示される。仮想マシン150は、1人以上のユーザのためにランタイムスレッドを実行する同じ仮想マシンである。ロジックインサイトスレッド180は、デバッグ機能を含むようにロジックインサイト注入コードランタイムとしてコンパイルされた1つ以上の注入コードのピースに基づき得る。ロジックインサイトスレッド180の実行には、ブレークポイント、実行時におけるビジネスロジックコードから開発者コンピュータシステム130の開発者コンピュータシステムへの変数値の出力、またはロジックインサイトスレッド180−1のビジネスロジックコードにおける個別の式の処理を発生させるために開発者コンピュータシステム130の開発者コンピュータシステムから要求される入力の使用を伴い得る。開発者コンピュータシステム130は、互いに関連がない場合がある。たとえば、各開発者コンピュータシステム130は、インターネットを介してウェブサービスコンピュータシステム140上のビジネスロジックコードをコーディング、コンパイル、および/またはデバッグする異なる開発者によって操作し得る。代替的には、一部またはすべての開発者コンピュータシステム130は、事業組織などの特定の組織の開発者によって操作し得る。図1において、3つの開発者コンピュータシステム130が示されるが、これは例示のみを目的としている。より少ない数または追加の開発者コンピュータシステム130がビジネスロジックコードの記述、コンパイル、修正、および/またはデバッグに対応付けられてもよく、このような注入コードは、ロジックインサイトランタイムスレッドとしてウェブサービスコンピュータシステム140の仮想マシン150によってコンパイルおよび実行される。
開発者コンピュータシステム130は、ウェブベースインターフェイスを介してウェブサービスコンピュータシステム140と対話し得る。たとえば、ウェブベースインターフェイスは、ウェブサービスコンピュータシステム140によって開発者コンピュータシステム130に提供されてもよく、コンパイルのためにウェブサービスコンピュータシステム140へのコードの注入を可能にする。このウェブベースインターフェイスは、コードを見ることおよびコンパイルすることを可能にし得るとともに、ウェブサービスコンピュータシステムによって提供されるデバッグ機能に対して開発者が対話することも可能にする。ウェブブラウザを介して開発者コンピュータシステム130上に提示されるウェブベースのインターフェイスは、開発者コンピュータシステム130の1つを使用する開発者が注入コード(ウェブベースインターフェイスを介して開発者によって提供され得た)から作成されたロジックインサイト注入コードランタイムに基づいて実行されるロジックインサイトスレッドと対話することを可能にし得る。
開発者コンピュータシステム130およびユーザコンピュータシステム110は、図1において区別して示される。これは、ロジックインサイト注入コードランタイムとして注入コードをコーディング、コンパイル、コンパイル、およびデバッグする開発者と、ランタイムスレッドとして注入コードの実行を代行させるユーザとを異ならせる目的のためであることを理解すべきである。開発者コンピュータシステム130およびユーザコンピュータシステム110のハードウェアは、類似または同一であってもよい。注入コードがランタイムスレッドとしてコンパイルおよび実行されることを開発者が示す場合、開発者の開発者コンピュータシステムはユーザコンピュータシステムとして考慮し得る。同様に、ロジックインサイト注入コードランタイムとして注入コードがデバッグのためにコンパイルおよび実行されることをユーザが示す場合、ユーザのユーザコンピュータシステムは開発者コンピュータシステムとして考慮し得る。このため、開発者コンピュータシステムまたはユーザコンピュータシステムとしてのコンピュータシステムの指定は、開発者によるデバッグのために注入コードがランタイムスレッドまたはランタイムスレッドとしてコンパイルおよび実行されるかに基づいて異なる。
ウェブサービスコンピュータシステム140は、1つ以上のコンピュータシステムを含み得る。ウェブサービスコンピュータシステム140は、ユーザコンピュータシステム110および開発者コンピュータシステム130との1つ以上のネットワークを介した通信を扱う1つ以上のウェブサーバを含み得る。これらの同じウェブサーバまたは別個のコンピュータシステムは、注入コードおよびスレッドのコンパイルおよび/または実行を行ない得る。ウェブサービスコンピュータシステム140は、複数の開発者によって記述されたビジネスロジックコードをコンパイルおよび/または実行するために使用し得る。このようなビジネスロジックコードは、ユーザコンピュータシステム110および開発者コンピュータシステム130から受けてもよい。ウェブサービスコンピュータシステム140によってコンパイルおよび実行されるビジネスロジックコードは、さまざまなユーザおよび開発者からネットワーク120を介して受けてもよい。コンパイラ160は、ユーザコンピュータシステム110および開発者コンピュータシステム130から受けた注入コードをコンパイルするために使用し得る。注入コードは、ひとたびコンパイルされると、仮想マシン150を使用して実行し得る。一部の実施形態において、コンパイラ160は、仮想マシン150の一部であってもよい。ウェブサービスコンピュータシステム140が受けた注入コードは、注入コードランタイムまたはロジックインサイト注入コードランタイムへコンパイルし得る。デバッグ機能がユーザによって望まれない場合には注入コードランタイムにコンパイルが行なわれる。デバッグ機能がユーザによって望まれる場合にはロジックインサイト注入コードランタイムにコンパイルが行なわれる。注入コードランタイムおよびロジックインサイト注入コードランタイムの両方は、ランタイムモードで仮想マシン150によって実行し得る。このため、ウェブサービスコンピュータシステム140の仮想マシン150の視点から、すべてのコードがランタイムとして実行される。
仮想マシン150は、ウェブサービスコンピュータシステム140によって実行し得る。仮想マシン150は、プログラミング言語インタプリタとして機能し得る。仮想マシン150は、異なる下層ハードウェア(たとえば、ウェブサービスコンピュータシステム140)による同じコードの実行を可能にし得る。仮想マシン150は、ウェブサービスコンピュータシステム140によって実行されるランタイムスレッド170およびロジックインサイトスレッドを実行するために使用し得る。仮想マシン150は、所与の時間にデバッグモードまたはランタイムモードで排他的に機能することを可能にし得る。このようなことから、仮想マシン150によって実行されるすべてのランタイムスレッドおよびロジックインサイトスレッドは、仮想マシン150が機能することを可能にするように同じモードで仮想マシン150によって実行されることが要求される。
同じ注入コードランタイムに対応する複数のスレッドは、同時に実行し得る。たとえば、ランタイムスレッド170−1はユーザコンピュータシステム110−1に関連付けられてもよく、ランタイムスレッド170−2はユーザコンピュータシステム110−2に関連付けられてもよく、ランタイムスレッド170−nはユーザコンピュータシステム110−nに関連付けられてもよい。ランタイムスレッド170の各ランタイムスレッドは、デバッグ機能なしにランタイムスレッドとして実行し得る。このようなことから、ランタイムスレッド170は、ユーザからの進めるための入力を待たずして実行し得る、および/またはランタイムスレッド170のコード内からの変数の値はユーザコンピュータシステム110のユーザが見ることまたはコンパイルすることのために出力されない。ランタイムスレッド170は、同じ注入コードランタイムまたは異なる注入コードランタイムに基づき得る。このようなことから、複数の異なる注入コードランタイムは、ランタイムスレッドとして同時に仮想マシン150によって実行し得る。デバッグ機能なしでユーザコンピュータシステム110(および関連付けられたユーザ)に望まれるように実行されるランタイムスレッド170について、仮想マシン150は、デバッグモードではなく、ランタイムモードであってもよい。
図1では3つのランタイムスレッドが仮想マシン150によって実行されるように示されているが、より少ない数または多い数のランタイムスレッドは、ウェブサービスコンピュータシステム140の仮想マシン150によって同時に実行し得ることを理解すべきである。
ロジックインサイトスレッド180は、開発者コンピュータシステム130−1などの開発者コンピュータシステムを介してデバッグが開発者によって行なわれる、実行中のロジックインサイト注入コードランタイムを表わす。ロジックインサイトスレッド180は、コンパイラ160によってコンパイルし得る。コンパイル時において、開発者は、開発者コンピュータシステム130−1を介して、注入コードを供給し得る(たとえば、ウェブベースインターフェイスを介して)とともに、開発者コンピュータシステム130−1によってコンパイラ160へ供給された注入コードのデバッグが望ましいという表示をコンパイラ160に対して提供する。1人以上の開発者は、デバッグすることが望ましいビジネスロジックコード内の1つ以上のタスクフローを指定し得る。このため、コンパイルされる注入コードについて、ウェブベースのインターフェイスは、開発者に対し、開発者がデバッグ機能を得ることを望む(および望まない)さまざまなタスクフローを選択する(および選択から外す)ためのオプションを提供し得る。デバッグの対象として選択されたタスクフローによって呼出されたコードは、デバッグ機能が設けられた唯一のコードであってもよい。
コンパイラ160は、開発者コンピュータシステム130−1によって供給された注入コードをロジックインサイトスレッド180−1として実行されるロジックインサイト注入コードランタイムへコンパイルし得る。開発者コンピュータシステム130−1から受取ったデバッグを望むという表示に基づき、供給されたビジネスロジックコードは、注入コードランタイムではなくロジックインサイト注入コードランタイムにコンパイルし得る。コンパイルされたロジックインサイト注入コードランタイムは、デバッグ機能を提供する式を含み得るが、コンパイルされたロジックインサイト注入コードはランタイムモードで仮想マシンによって実行される。したがって、ロジックインサイト注入コードランタイムのデバッグ機能属性は、デバッグモードで動作することを仮想マシン150に要求し得ない。コンパイルされているとき、コンパイラ160は、開発者コンピュータシステム130−1から受けた注入コードに対して式の修正および/または追加を行ない、開発者の操作する開発者コンピュータシステム130−1にデバッグ機能を提供し得る。デバッグ機能は、開発者によってコーディングされたロジックインサイトスレッド180−1の各式が実行される前にロジックインサイト仮想マシン(LIVM)210からの入力を待つこと、開発者によってコーディングされたビジネスロジックコードまたは式ごとに実行されるビジネスロジックコード内へのブレークポイントの設定を可能にすること、および開発者への表示のためにロジックインサイトスレッド180の式からの変数値の表示を開発者コンピュータシステム130に提供することを含み得る。
注入コードを呼出すタスクフローの部分集合についてのみデバッグ機能が望まれることを開発者が示した場合、コンパイラ160は、すべてのタスクフローにおけるデバッグ機能を可能にする式を修正および/または挿入し得る。デバッグ機能がユーザによって望まれていないロジックインサイト注入コードランタイムのタスクフローが実行されているとき、ウェブサービコンピュータシステム140は、単にデバッグ機能を開発者に提供するのではない場合がある。このような構成により、開発者は、ロジックインサイト注入コードランタイムの実行時において、タスクフローデバッグ機能が提供される選択を修正することが可能となり得る。注入コード内のデバッグされる1つ以上の特定のタスクフローを開発者が指定した場合、デバッグ機能は、開発者によってデバッグの対象として選択されたタスクフローのうちの1つが実行されない限り、ウェブサービスコンピュータシステムによって無視し得る。静的コードは、デバッグの対象として選択されたタスクフローの一部として呼出されたか否かに関わらず、開発者のために提供されたデバッグ機能を有さないであろう。
コンパイル時にコンパイラ160によって行なわれるビジネスロジック注入コードに対する追加および/または修正に基づき、(バイトコードとして)作成されたロジックインサイト注入コードランタイムは、開発者に対してデバッグ機能を提供する。しかしながら、仮想マシンに対して、ロジックインサイトスレッドとして実行されるロジックインサイト注入コードは、ランタイムモードで実行されるランタイムスレッド170と同様のランタイムである。ロジックインサイト注入コードランタイムがデバッグ機能を開発者に対して提供するが、ロジックインサイト注入コードランタイムは仮想マシンによってデバッグモードで実行されないであろう。ロジックインサイトスレッド180およびランタイムスレッド170は、同時に実行されてもよく、仮想マシンはこれらのスレッドのすべてについてランタイムモードで機能する。さらに、ロジックインサイトスレッドの実行は、他のランタイムスレッドと異なる態様でランタイムスレッド170の実行に影響を与えるものではない。同様に、ランタイムスレッドの実行は、追加のロジックインサイトスレッドの実行と異なる態様でロジックインサイトスレッドの実行に影響を与えるものではない。図1において、3つのロジックインサイトスレッド180が示されているが、これは例示のみを目的としている。より少ない数または追加のロジックインサイトスレッドを仮想マシン150によって実行し得る。
デバッグのために開発者コンピュータシステム130−1を介して供給される注入ビジネスロジックコードがコンパイルされる予定であるという表示を開発者コンピュータシステム130−1の開発者が提供しない場合、ビジネスロジックコードは、ロジックインサイト注入コードではなく注入コードランタイムへコンパイルし得る。コンパイラ160は、複数のユーザ/開発者のために複数の注入コードのピースを同時にコンパイルするように構成し得る。コンパイラ160は、注入ビジネスロジックコードを注入コードランタイムおよび/またはロジックインサイト注入コードランタイムへコンパイルし得る一方、仮想マシン150は、1つ以上のランタイムスレッド170および1つ以上のロジックインサイトスレッド180を実行する。所与の時間において、仮想マシン150は、ランタイムスレッド170またはロジックインサイトスレッド180のいずれかのみを実行することも可能であってもよい。
図2は、ロジックインサイト注入コード内の一部のタスクフローのみの実行がデバッグのために開発者に利用可能となるようにロジックインサイト注入コードをコンパイルおよび実行するように構成されたシステム200の実施形態を示す。システム200は、特定の開発者コンピュータシステム130−1と対話するウェブサービスコンピュータシステム140の実施形態を示し得る。このようなことから、少なくとも一部の実施形態において、システム200はシステム100の一部である。システム200は、開発者コンピュータシステム130−1と、ネットワーク120−2と、ウェブサービスコンピュータシステム140と、仮想マシン150と、コンパイラ160と、ロジックインサイトスレッド180−1と、ロジックインサイト仮想マシン210とを含み得る。システム200は、開発者コンピュータシステム130−1によって提示されるロジックインサイトユーザインターフェイス220を付加的に含み得る。
ロジックインサイト仮想マシン(LIVM)210は、デバッグ機能が開発者によって要求されたときに特定の開発者セッションに関連付けられ得る。「セッション」は、ウェブサービスコンピュータシステム140に対して開かれた開発者コンピュータシステムまたはユーザのウェブブラウザのインスタンスのことである。開発者コンピュータシステム130−1からウェブサービスコンピュータシステム140が受けた情報をウェブサービスコンピュータシステム140において適切なデータに適用し得るように、各HTTPセッションに識別子が割当てられてもよい。HTTPセッションが確立された後、セッション識別子は、開発者コンピュータシステム130−1による各応答を伴ってウェブサービスコンピュータシステム140へ送信し得る。
このようなことから、ウェブサービスコンピュータシステム140との開発者コンピュータシステム130−1のHTTPセッションは、ロジックインサイトスレッド180−1およびLIVM210とリンクされる。LIVM210は、ロジックインサイトスレッド180−1と開発者コンピュータシステム130−1との間の仲介として機能し得る。LIVM210は、ウェブサービスコンピュータシステム140、ウェブサービスコンピュータシステム140の仮想マシン150、リモートコンピュータシステム、または開発者コンピュータシステム130−1によって実行し得る。別個のLIVM210は、さまざまな開発者コンピュータシステムの各セッションのためにウェブサービスコンピュータシステム140によって実行し得る。ロジックインサイト注入コードランタイム(そのロジックインサイトスレッド180−1は実行済みインスタンスである)を作成するためにコンパイラ160がビジネスロジックコードをコンパイルするとき、付加的な式が加えられてもよく、および/または開発者によってコーディングされた各式が実行される前に入力が要求されるように注入コードにおいて式を修正してもよい。たとえば、注入コードに対応するロジックインサイトスレッド180−1における各式の後、ロジックインサイトスレッド180−1の次の式が実行される前にLIVM210から入力が受取られるように要求し得る。静的コードに基づく式は、入力が要求されることなく処理し得る。LIVM210は、これらの入力をロジックインサイトスレッド180へ提供するように機能し得る。開発者によってコーディングされた各式が実行される前に入力を必要とするロジックインサイトスレッド180−1により、開発者は、式ごとにビジネスロジックコードの実行をステップスルーする、ブレークポイントを設定する(およびブレークポイントにおけるコード/変数の状態を見る)、ならびに/または注入コード内の変数の値を見るおよび/または修正することができる。
開発者によって選択されたブレークポイントは、デバッグの対象として選択されたタスクフロー内において、開発者によって設定されたブレークポイントのうちの1つに達するまで、ロジックインサイトスレッド180の実行の継続を許可するよう、LIVM210に命令する機能を有し得る。このようなことから、LIVM210は、デバッグの対象として選択されたタスクフローのコード内のブレークポイントに達するまでロジックインサイトスレッドの各式の実行を許可するためにロジックインサイトスレッド180−1入力を提供し得る。この点において、入力が開発者からLIVM210に要求されてもよく、LIVM210は、ロジックインサイトスレッド180−1の実行を継続するために仮想マシン150に命令を送信する。開発者が式ごとにビジネスロジックコードの実行を望む場合、LIVMは、デバッグの対象として選択されたタスクフロー内でロジックインサイトスレッドの次の式が実行される前に実行された各式の後に開発者から入力が受取られるまで待機し得る。選択されたタスクフロー外の式の実行は、開発者の対話なしにLIVMによって実行し得る。このため、LIVM210の視点から、入力は、実行を継続するために、ロジックインサイトスレッド180−1の各実行された式の後に仮想マシン150へ提供されるよう要求し得る。この入力が自動的に、または開発者コンピュータシステム130−1を介して受取られた開発者入力に応答してLIVM210によって仮想マシン150に提供されるかどうかは、ブレークポイントに達したか、またはロジックインサイトスレッドの実行を式ごとにステップスルーすることを開発者が要求したかどうかに基づき得る。
LIVM210は、タスクフローアナライザ212を含み得る。タスクフローアナライザ212は、ロジックインサイトスレッド180−1において現在実行されている(注入コードからの)式がデバッグのために開発者によって選択されたタスクフローに対応するかしないかを評価し得る。式が選択されたタスクフローの一部である場合、ロジックインサイトユーザインターフェイス220を介して開発者にデバッグ機能が提供される。ロジックインサイトスレッド180−1において現在実行されている式が選択されたタスクフローに対応しない場合、タスクフローアナライザ212は、ロジックインサイトユーザインターフェイス220を介して開発者に提供されているデバッグ機能なしに式の実行をLIVM210に継続させてもよい。このようなことから、ランタイムモードでの実行中にデバッグ機能を有するようにロジックインサイト注入コードをコンパイラ160がコンパイルした一部の実施形態において、LIVM210は、デバッグのためにユーザによって示された、または選択されたタスクフローの式がアクティブであるときに、このようなデバッグ機能をロジックユーザインターフェイス220に提供するのみである。
ロジックインサイトスレッド180−1のランタイムにおいて、デバッグのためにロジックインサイト注入コードの1つ以上のタスクフローを開発者が選択および除外する可能性があり得ることから、その式を変更することにより、デバッグ機能が開発者に提供される結果となる。このような構成は、コンパイルされている注入コードにおける式をコンパイラ160が追加および/または修正し、注入コードのすべてのタスクフローにおいてデバッグ機能を可能とした場合に可能であってもよい。選択されていないタスクフローが実行されているとき、LIVM210は、ロジックインサイトスレッド180−1の実行を進めるべきであることを示す仮想マシン150に対して自動的に(開発者による入力なしに)入力を提供し得る。
LIVM210は、変数値の変更をロジックインサイトスレッド180から受けるように機能し得る。これらの変更は、デバッグの対象として選択されたタスクフローが仮想マシン150によって実行されているときに開発者コンピュータシステム130−1に対して変数値を提供するために使用し得る(たとえば、開発者への提示のために)。ロジックインサイト注入コードランタイムは、変数が作成または修正される度に変数の値および変数の表示がLIVM210に出力されるようにコンパイラ160によってコンパイルし得る。この変数の値および変数の表示は、デバッグのためにユーザによって選択された、タスクフローアナライザ212によって判定されるタスクフローが実行中の式の1つ以上を有しているときに、LIVM210によって受取られてもよく、ロジックインサイトユーザインターフェイス220を介して開発者に変数の表示および変数値を提示するために使用し得る。開発者は、ロジックインサイトユーザインターフェイス220を介して変数値の1つ以上を修正することが可能となり得る。選択されていないタスクフローがアクティブである場合、変数値は、LIV210によってロジックユーザインターフェイス220へ出力されないであろう(しかしながら、LIVM210は、それらを依然として仮想マシン150から受けてもよいが、受けた値を記憶、無視、または廃棄してもよい)。LIVM210は、式が実行されているデバッグの対象として選択されたタスクフローの一部である場合(しかし、選択されていないタスクフローの式が仮想マシン150によって実行されているときではない)、現在実行されている(またはもうすぐ実行される)ロジックインサイトスレッドの注入コードにおける現在の式を開発者に対して示し得る。
LIVM210の視点から、ロジックインサイトスレッド180−1によって実行されるすべてのタスクフローは、コードの後の実行後に中断し、変数値を出力するように構成し得る。しかしながら、LIVM210のタスクフローアナライザ212は、ロジックインサイトユーザインターフェイス220のタスクフロー選択モジュール225を介して受取られた1つ以上の選択されたタスクフローの表示に基づき、LIVM210によって実行がいつ継続されるか、およびロジックインサイトユーザインターフェイス220を介してデバッグ機能がいつ提示されるかを判定し得る。
ロジックインサイトユーザインターフェイス(LIUI)220は、開発者コンピュータシステム130−1を介して開発者から注入コードを受けるために使用し得る。LIUI220は、コードが関連付けられる適切なタスクフローが選択されることを可能にし得る。LIUI220は、ウェブベースインターフェイスであってもよく、ウェブブラウザを介して実施し得る。たとえば、LIUI220は、ユーザが直接的に(たとえば、テキストとして)入力すること、および/またはコンパイルおよび場合によっては実行のためにウェブサービスコンピュータシステム140に対してアップロード(注入)されるビジネスロジックコードを含むファイルを選択することを可能にするウェブページの一部として提示し得る。LIUI220は、ビジネスロジックコードをデバッグのために(ロジックインサイト注入コード実行時として)コンパイルおよび実行するのが望ましいことを開発者が示すことを可能にし得る。LIUI220は、ロジックインサイトスレッド180が実行されている間にユーザが少なくとも注入コードに対してデバッグ機能を行なうことを可能にし得る。したがって、ロジックインサイトスレッド180が実行されている間にこのようなデバッグが発生することから、これはリアルタイムデバッグと言われる。LIUI220を使用して行なわれ得るこのようなデバッグ機能は、ブレークポイントを設定すること(およびこのようなブレークポイントにおける変数の状態を見ること)、式ごとにビジネスロジックコードの実行をステップスルーすること、および/または変数の値を見ること(および/またはコンパイルすること)を含む。ウェブサービスコンピュータシステム140とのセッションを介して、LIVM210を介して開発者からの入力を送信してロジックインサイトスレッド180の実行を制御するために、および開発者への提示のためにLIUI220へ出力されるロジックインサイトスレッド180の実行についての情報を受けるために、ロジックインサイトユーザインターフェイス220を使用できる。
LIUI220はタスクフロー選択モジュール225を含み得る。LIUI220は、LIVM210から、実行されているアプリケーションによって定義されるさまざまなタスクフローの表示を受けることができる。タスクフロー選択モジュール225は、開発者がデバッグすることを望む1つ以上のタスクフローを開発者が選択することを許可し得る。タスクフロー選択モジュール225は、(たとえばタスクフローを選択しないことによって)開発者がデバッグすることを望まない1つ以上のタスクフローを、開発者が表示することを許可し得る。開発者によってデバッグの対象として選択されたタスクフローの表示は、開発者によって選択されたタスクフローの一部である式についてのみデバッグ機能(たとえば、変数値、実行の中断)が開発者に提供されるように、LIVM210に提供されてもよい。LIVM210は、他のタスクフローについてはデバッグ機能なしで実行を続行させることができる。開発者は、ロジックインサイトスレッド180−1の実行中に、タスクフロー選択モジュール225を介して、どのタスクフローを選択するかを調整してもよい。このようなタスクフローの選択の修正はLIVM210に伝達することができ、そうするとLIVM210は、LIUI220を介して開発者に対してデバック機能を与えるタスクフローをどのタスクフローにするか修正する。たとえば、開発者は、特定のタスクフローのデバッグを可能にし、その後、未来のある時点でタスクフローが実行されている間にこのデバックを不能にすることができる。このような選択および選択解除は、どのタスクフローに対してLIVM210がデバッグ機能をロジックインサイトユーザインターフェイス220に出力するかに影響する。いくつかの実施形態において、タスクフロー選択モジュール225を用いて、ロジックインサイトスレッド180−1の実行の前に、1つ以上のタスクフローを選択する。いくつかの実施形態において、タスクフローの選択は、ロジックインサイトスレッド180−1の実行中に行なわれてもよい。
図3は、タスクフローを対象とするデバッグ用に構成されたシステム300の実施形態のブロック図を示す。システム300は、ロジックインサイト注入コードランタイムを作成するのに使用し得る、さまざまなハードウェア、ファームウェア、および/またはソフトウェアモジュールを表わす。特に指定されない限り、示されているモジュールは各々、図1および図2それぞれのシステム100および200のウェブサービスコンピュータシステム140の一部であってもよい(またはウェブサービスコンピュータシステム140によって実行されてもよい)。したがって、少なくともいくつかの実施形態において、システム300はシステム100および/またはシステム200の一部であってもよい。システム300はさまざまなモジュールを含み、これらモジュールは各々、ソフトウェア、ファームウェア、および/またはハードウェアを用いて実装されてもよい。コンポーネントは、コードソースモジュール310、プレコンパイルモジュール315、パーサモジュール320、変換エンジン340、コンパイラ160、仮想マシン150、およびLIVM210を含む。このようなコンポーネントは、より多くの数のコンポーネントに分割してもよく、および/または組み合わせてより少ない数のコンポーネントにしてもよいことが理解されるはずである。
コードソースモジュール310は、注入された(ビジネスロジック)コードを受ける役割を果たすことができる。このコードは、コンパイル時に、構文木レベルでコンパイルできるプログラミング言語の構文で記述することができる。たとえば、ビジネスロジックコードのためのプログラミング言語としてJava(登録商標)を使用してもよい。いくつかの実施形態において、コードソースモジュール310は、ユーザコンピュータシステムまたは開発者コンピュータシステムからウェブベースのインターフェイス(たとえば図2に示されるLIUI220)を介して提示されるコードのようなコードを、リモートコンピュータシステムから受けるように構成されてもよい。受けるこのようなコードを「注入」コードと呼んでもよい。なぜなら、このコードはコンパイルおよび/または実行のためにリモートコンピュータシステムから受けるものであるからである。コードソースモジュール310は、これからコンパイルするコードを含むファイルにアクセスする役割を果たすことができる。注入コードは、他の注入コードを同時にコンパイルおよび実行しているシステムがコンパイルおよび実行してもよい。
プレコンパイルモジュール315は、コードソースモジュール310が受けたビジネスロジックコードのコンパイルプロセスの一部を完成することができる。いくつかの実施形態において、プレコンパイルモジュール315は、コードソースモジュール310が受けたビジネスロジックコードに1つ以上の式を挿入することができる。パーサモジュール320は、この式を含むビジネスロックコードを構文解析して構文木を作成することができる。作成された構文木は抽象構文木であってもよい。この時点で、バイトコードがロジックインサイト注入コードランタイムとしてコンパイルされる前に、何らかのプログラミング言語ではこの構文木を修正することが可能であろう。
変換エンジン340は、パーサモジュール320によって作成された構文木を修正することができる。変換エンジン340は、構文木における式のうちのいくつかまたはすべての式を追加または修正することができる。変数値が最初に設定または修正される場合は常に、変数および変数値の表示がLIVM210に出力されるように、構文木を修正することができる。したがって、実行中、LIVM210は、注入されたビジネスロジックコード内の各変数の現在値を維持することができる。プッシュまたはプルを介して、開発者のLIUIは、LIVM210から、設定または修正された変数および関連する値の表示を受けることができる。式の追加は、ビジネスロジックコード内の各式の実行後に、実行が少なくとも次の式に進むことを示す命令をLIVM210から受けるまで、実行が停止される(たとえば延期またはループモードにされる)ように、行なえばよい。実行された式またはこれから実行される式の表示をLIVM210に与えることができる。そうすると、LIVM210は、どの式が実行された直後であるかまたはどの式をこれから実行しようとしているかの表示を、開発者のLIUIに与えることができる(そうすると、ユーザは注入コードの実行の流れをモニタリングすることができる)。
いくつかの実施形態において、変換エンジン340は、どのタスクフローが選択されたかに関わらず、注入コードをすべて修正してデバッグを許可する。他の実施形態では、デバッグする予定のタスクフローに関連する注入コードの部分のみが、変換エンジン340によって修正される。このような実施形態では、開発者が、コンパイル前に、デバッグすることを望む1つ以上のタスクフローを特定することが必要な場合がある。すべてのタスクフローが変換エンジン340によって修正される実施形態では、開発者は、実行中に、どのタスクフローについてデバッグ機能をLIUI220を介して開発者に与えるかを変更できる。
コンパイラ160は、修正された構文木をコンパイルしてバイトコードにすることができる。このバイトコードは、ロジックインサイトスレッドとして実行されることになるロジックインサイト注入コードランタイムとして参照される。コードソースモジュール310が受け、プレコンパイルモジュール315および変換エンジン340が修正した注入コードを、コンパイラ160はコンパイルできる。このロジックインサイト注入コードランタイムは、ランタイムモードの仮想マシンによって実行されるように構成されている。
LIVM210と通信する仮想マシン150は、ロジックインサイト注入コードランタイムとして、コンパイラ160によってコンパイルされたバイトコードを実行することができる。変換エンジン340によって修正された式ごとに、LIVMがコンタクトされて実行を続けるべきか否か判断してもよい。したがって、LIVM210は、どのタスクフローがデバッグ機能を有する予定であるかモニタリングするとともに、(たとえば、開発者が設定したブレークポイントで、および/または開発者が式ごとに実行を要求している場合)どの式で、開発者入力を受けるまで実行を停止すべきかモニタリングする。LIVM210はまた、変数の値を受けることができる(たとえばこのような変数値が仮想マシン150によって設定または修正される度に)。LIVM210はまた、実行されたまたはこれから実行されるビジネスロジックコードの現在の式の表示を受けることができる。このような情報をLIVM210は受けることができる。バイトコードの続行が許可される前にLIVM210が開発者コンピュータシステムからの入力を要求してもよく、および/またはLIVM210が情報をLIUIを介して開発者に出力してもよい。
ロジックインサイト注入コードランタイムが、ロジックインサイト注入コードのすべてのタスクフローにデバッグ機能が存在するようにコンパイルされた場合、タスクフローアナライザ212は、モニタリングを行なって、ロジックインサイトスレッドのどのタスクフローの式が実行されるか判断し、デバッグ機能を開発者が利用できるようにすべきか否か判断することができる。仮想マシン150が実行している式が、開発者がデバッグを望むと表示したタスクフローと関連していなければ、タスクフローアナライザ212は、LIVM210に、実行を続行すべきであることを、仮想マシン150に対して表示させることができる。この式についてはデバッグ情報を開発者に与えなくてもよい。たとえば、LIVM210が仮想マシン150に対して実行を自動的に続行するよう命令してもよく、および/または変数値を開発者コンピュータシステムに与えなくてもよい。しかしながら、タスクフローアナライザ212が、開発者がデバッグすると表示したタスクフローの式が実行されていることを検出した場合、デバッグ機能がLIUI220に与えられるように、LIVM210がデバッグ機能を実施してもよい。このことは、ブレークポイントを実施すること、変数値を開発者コンピュータシステムに出力すること、および、どの式を実行するかという表示を与えることを含み得る。ロジックインサイトスレッド内で、さまざまなタスクフローを識別できる。タスクフローは、開発者が挿入したタグまたはその他の識別子によって識別されてもよい。これらタグまたはその他の識別子は、開発者によってコードに挿入されて、特定のタスクの実行に関連するロジックコードグループ等のロジックコードグループにコードをグループ化することができる。
図1〜図3のシステム100〜300を用いてさまざまな方法を実行することができる。図4は、タスクフローを対象とするデバッグのための方法400の実施形態を示す。方法400は、図1〜図3それぞれのシステム100、システム200、および/またはシステム300によって実行されることができる。方法400はまた、ランタイムスレッドを実行しロジックインサイト注入コードをコンパイルして実行するための他の形態のシステムによって実行されることができる。ウェブサーバ等の1つ以上のコンピュータシステムを用いて方法400を実行してもよい。方法400を実行するための手段は、1つ以上のコンピュータシステムおよびネットワークを含む。方法400の各ステップはコンピュータシステムを用いて実行することができる。このコンピュータシステムは、1つ以上のウェブサーバ等の互いに通信する1つ以上の個別のコンピュータを含み得る。図2および図3を参照して、方法400の各ステップは、ウェブサービスコンピュータシステム140によって実行されることができる。
ステップ410において、コンピュータシステムは、注入コードを、コンパイルしてロジックインサイト注入コードランタイムにしロジックインサイトスレッドとして実行するために、受けることができる。このコードは、図1および図2に関連して示されているような、開発者コンピュータシステムを介して開発者に与えられるウェブブラウザインターフェイスとネットワーク接続とを介して注入することができる。ステップ410の進行中であって、方法400の他の部分の実行中に、コンピュータシステムは、注入コードランタイム等のさまざまなランタイムスレッドを実行することができる。
コンピュータシステムは、方法400の間に、1人以上のユーザについてランタイムスレッドを実行することができる。図1を参照して、ウェブサービスコンピュータシステム140は、インターネットでもよいネットワーク120−1を介して遠隔からウェブサービスコンピュータシステム140にアクセスするユーザについて、ランタイムスレッドを実行することができる。このランタイムスレッドは、コンパイルおよび/または実行のためにウェブサービスコンピュータシステムに与えられる他の注入コードに基づいていてもよい。実行されているどのランタイムスレッドも、ウェブサービスコンピュータシステムの仮想マシンによって実行されることができる。各ランタイムスレッドは、ウェブサービスコンピュータシステムとの特定のユーザのHTTPセッションと関連付けられていてもよい。これらランタイムスレッドは各々、デバッグ機能なしで実行されてもよい。ランタイムスレッドを実行しているウェブサービスコンピュータシステムの仮想マシンは、これらスレッドをランタイムモードで実行していてもよい。
ステップ420において、開発者は、開発者コンピュータシステムに、注入コードはデバッグ機能を用いて実行される予定であるという表示を与えることができる。ロジックインサイト注入コードランタイムはランタイムモードにおいて仮想マシンが実行することになるが、開発者の観点からすると、これはデバッグモードとみなすことができる。ステップ420で、この表示は、方法400を実行するウェブサービスコンピュータシステムが、受けることができる。ステップ430で、開発者は、デバッグすべき1つ以上のタスクフローの表示を与えることができる。以前に開発者が注入コードを選択して適切なタスクフローと関連付けている場合がある。タスクフローが予め定義されており開発者による編集が不可能な場合、このようなタスクフローは、注入コードを呼出すことができる予め定められた1つ以上のフックポイントを有していてもよい。このような入力は、これから実行すべきタスクフローのリストからユーザが選択して与えてもよい。これに代えて、開発者が、デバッグを所望する1つ以上のタスクフローの名称を与えてもよい。これに加えてまたはこれに代えて、デバッグする1つ以上のタスクフローを、ステップ435のコンパイル後に選択(または選択解除)してもよい。デバッグする1つ以上のタスクフローを表示することにより、注入コード内にある他のタスクフローの実行が開発者に与えられているデバッグ機能とならないようにすることができる。ウェブブラウザベースのインターフェイスは、開発者に、ネットワーク接続および開発者コンピュータシステムを介して、アプリケーション内にあると判断されるさまざまなタスクフローの選択を与えることができる。開発者が1つ以上のタスクフローを選択してもよいが、本実施形態の残りの部分では、開発者がデバッグのための1つのタスクフローを特定すると想定する。ステップ430で、ウェブサービスコンピュータシステムは、開発者が選択したタスクフローの表示を受けることができる。
ステップ435において、注入された注入ビジネスロジックコードをコンパイルしてロジックインサイト注入コードランタイムにすることができる。コンパイルは、図2のコンパイラ160等のコンパイラによって実行することができる。このコンパイルプロセスは、デバッグ機能が所望されるので、通常のコンパイルから変更したものであってもよい。このため、デバッグ機能を、図3に関連して詳述したように構文木レベルのビジネスロジックコードに追加し、コンパイルしてロジックインサイト注入コードランタイムにしてもよい。ステップ435における注入コードのコンパイルは、ウェブサービスコンピュータシステムの仮想マシンによってコンパイルおよび/または実行されている1つ以上のランタイムスレッドと同時に発生してもよい。ロジックインサイト注入コードランタイムは、デバッグ機能を有していてもよいが、このような機能の実現において仮想マシンがデバッグモードで実行することを要求しなくてもよい。デバッグ機能は以下に示すもののうちの1つ以上を含み得る。すなわち、ロジックインサイト注入コードランタイムの実行が停止される、ビジネスロジックコード内の1つ以上のブレークポイントを開発者が選択する機能、式ごとに(リアルタイムで)開発者が与えた注入ビジネスロジックコードの実行をステップスルーする機能、実行中に(リアルタイムで)ビジネスロジックコードの式の中にある変数値を見る(および/または修正する)機能、式の実行がいつ開始されるかの表示を受ける機能、および/または式の実行がいつ完了するかの表示を受ける機能である。他のデバッグ機能も可能である。いくつかの実施形態において、ロジックインサイト注入コードランタイムは、コンパイル済みコードのすべてのタスクフローにデバッグ機能が挿入されるように、コンパイルされる。他の実施形態において、ロジックインサイト注入コードランタイムは、開発者が特に選択したタスクフローにおいてのみデバッグ機能を利用できるように、コンパイルされる。
ステップ440において、ウェブサーバの仮想マシンは、ロジックインサイト注入コードランタイムを、ロジックインサイトスレッドとして実行することができる。このため、実行は、この注入コードを与えた開発者コンピュータシステムから遠隔の場所で生じる。ロジックインサイトスレッドの実行は、1つ以上のランタイムスレッドの実行と同時に発生してもよい。仮想マシンは、ロジックインサイトスレッド(および実行されている他のランタイムスレッド)を仮想マシンのランタイムモードで実行することができる。このため、仮想マシンは、すべてのスレッドをランタイムとして実行し、スレッドをデバッグモード実行しない。しかしながら、ロジックインサイトスレッドはデバッグ機能を有する。なぜなら、ロジックインサイトスレッドのコードはコンパイル中に修正されたからである。ロジックインサイトスレッドが仮想マシンに対してランタイムとして機能している間、コンパイル中の修正は、開発者に、デバッグモードで動作している仮想マシンに一般的に関連する機能を与える。ロジックインサイト注入コードランタイムに存在するデバッグ機能は、開発者が1つ以上のブレークポイントをビジネスロジックコード内にセットする(および実行中にブレークポイントに達したときにコードおよび変数値を見る)機能、(リアルタイムの実行において)式ごとに実行中に開発者によって与えられた注入コードをステップスルーする機能、(リアルタイムの実行において)実行中にビジネスロジックコードの式の中にある変数値を見る(および/または修正する)機能、式の実行をいつ開始するかの表示を受ける機能、および/または式の実行がいつ完了するかの表示を受ける機能を、含み得る。
ロジックインサイトスレッドの実行は、偶然実行されているランタイムスレッドのうちのいずれにも、(これがメモリ、処理、およびネットワークリソースを消費する点を除いて)影響を与えないであろう。より具体的には、デバッグ機能、たとえば、開発者がブレークポイントを設定できるようにする機能、または、ロジックインサイトスレッドに関連するビジネスロジック注入コードを式ごとに実行できるようにする機能は、このようなデバッグ機能がランタイムスレッド内にあることを必要としない。同様に、ランタイムスレッドの実行は、ロジックインサイトスレッドの実行に、(これがメモリ、処理、およびネットワークリソースを消費する点を除いて)影響しない。方法400は、1つのロジックインサイト注入コードランタイムがランタイムモードで動作している仮想マシンによってコンパイルおよび実行されることしか想定していないが、複数のロジックインサイト注入コードがコンパイルおよび/または実行されてもよい。なぜなら、スレッドは、同じウェブサービスコンピュータシステムの同じ仮想マシンによるものだからである。
ステップ450において、コードが実行されている間に、仮想マシンが実行する各式を(ロジックインサイト仮想マシンが)検査することにより、これが、ステップ430においてデバッグを所望すると開発者が表示したタスクフローに関連するか否か判断することができる。そうであれば、この式についてステップ460を実行する。ステップ460で、デバッグ機能を開発者コンピュータシステムが利用できるようにする。これは、次の式の実行を許可する入力を待つこと、変数値を開発者コンピュータシステムに出力すること、(ロジックインサイト仮想マシンに格納されていてもよい)開発者が以前に設定した式に関連するブレークポイントを実施すること、実行されている(またはこれから実行されようとしている)式の表示を与えること、および/または変数値として使用すべき入力を受けることを、含み得る。
ステップ450において、デバッグされることが所望されていないタスクフローに式が関連していると判断した場合、ステップ470を実行する。ステップ470において、開発者コンピュータシステムが利用できるデバッグ機能はない。このことは、次のラインのコードの実行を許可する入力を待たないこと(開発者の入力を待たずに実行を続行する)、開発者コンピュータシステムに変数値を出力しないこと、ブレークポイントを実施しないこと、実行されている(またはこれから実行されようとしている)式の表示を与えないこと、および/または変数値として使用すべき入力を受けないまたは処理しないことを、含み得る。ステップ470は、ロジックインサイト仮想マシンが、自動的に、実行を続行することを表示する入力を、ロジックインサイトスレッドを実行している仮想マシンに与えることを含み得る。式ごとに実行が続行されるので、ステップ450は、この式が開発者がデバッグすることを所望すると表示したタスクフローの一部であるか否か判断するものであると、評価してもよい。
このような実行中に、どの1つ以上のタスクフローをデバッグするかを開発者が修正することを許可してもよい。デバッグの対象として選択したタスクフローのこのような修正は、ステップ450で行なった判断を変える可能性がある。たとえば、特定のタスクフローが実行されている間、開発者は、このタスクフローについてのデバッグ機能を可能にするか不能にするか切換えることができる。このような切換えにより、評価する次の式についてステップ450の結果が変わる可能性がある。開発者のデバッグの目標が満たされるようこのような切換えを必要な回数行なうことを開発者に許可してもよい。
開発者がデバッグする対象であると表示したタスクフローにおいてロジックインサイトスレッドとしてロジックインサイト注入コードランタイムを実行している間、このスレッドの実行は、実行の続行を許可することをLIVMが仮想マシンに表示するまで、停止するかまたはループモードになる場合がある。LIVMは、式ごとに、この式について開発者が指定したブレークポイントの場所であるポイントに達しない限り、この式の実行の続行を許可することができる。ブレークポイントが存在する場合、実行は、実行の継続を許可するという入力を開発者がLIUIを介してLIVMに与えるまで、停止してもよい。ブレークポイントにおいて、変数値および実行すべき式の表示を、LIVMを介してLIUIに与えることができる。いくつかの実施形態において、実行を続行することを開発者がLIUIを介してLIVMに表示するまで、選択されたタスクフローにおける各式の後に実行を停止してもよい。
図5は、タスクフローを対象とするデバッグのための方法の別の実施形態を示す。方法500は、図1および図2それぞれのシステム100および/またはシステム200によって実行することができる。方法500はまた、注入コードをコンパイルし実行するリモートウェブサービスコンピュータシステムと開発者が対話できるようにする他の形態のシステムによって実行してもよい。開発者コンピュータ等の1つ以上のコンピュータシステムを用いて方法500を実行することができる。方法500を実行するための手段は、1つ以上のコンピュータシステムおよびネットワークを含む。方法500の各ステップは、互いに通信する1つ以上の個別のコンピュータを含み得るコンピュータシステムを用いて実行することができる。図1および図2を参照して、方法500の各ステップは、開発者コンピュータシステム130の開発者コンピュータシステムによって実行することができる。方法400はウェブサービスコンピュータシステムによって実行するが、方法500のステップは開発者コンピュータシステムによって実行することができる。
ステップ510において、ウェブベースインターフェイスを、開発者コンピュータシステムによって開発者に与えることができる。ウェブベースインターフェイスは、方法400を実行している可能性があるウェブサービスコンピュータシステムから受けてもよい。ウェブベースインターフェイスにより、開発者は、コンパイルおよび実行のためにウェブサービスコンピュータシステムに注入すべきコードを提供することができる。このコードは、ウェブベースインターフェイスのコードエディタに直接タイピングしてもよく、または、予め記述されたコードの1つ以上のファイルを、ウェブベースインターフェイスを介してウェブサービスコンピュータシステムにアップロードするために選択してもよい。ステップ520で、このコードを、ウェブサービスコンピュータシステムに、ウェブベースインターフェイスと1つ以上のネットワークを介して送信することができる。コードをウェブサービスコンピュータシステムに送信することは、方法400のステップ410に対応し得る。
ステップ530において、ウェブベースインターフェイスは、タスクフローの選択を開発者に提示することができ、そのタスクフローの間に、ステップ520で送信したコードを実行する。ウェブベースインターフェイスはまた、開発者が提供した注入コードをデバッグのためにコンパイルするか否かを開発者に選択させるという選択肢を有していてもよい。ステップ530で、ウェブベースインターフェイスを介して、開発者は、注入コードをデバッグすることを指定することができ、開発者は、注入コードを実行してデバッグする1つ以上のタスクフローを指定してもよい。(この例におけるこの目的のために、1つの第1のタスクフローがデバッグの対象として表示され第2のタスクフローはデバッグの対象として選択されなかったと想定する。)いくつかの実施形態において、ユーザは、方法500における後の時点で、どのタスクフローをデバッグすべきか選択してもよい。加えて、ステップ530で、注入コードを開発者に提示してもよく、開発者に、1つ以上のブレークポイントを指定することを許可してもよく、および/またはデバッグすべきタスクフローを、ブレークポイントまたはエラーが発生するまで実行すべきかまたは式ごとに実行すべきか表示することを許可してもよい。ステップ540で、注入コードをデバッグする予定でありタスクフローをデバッグする予定であるという表示をウェブサービスコンピュータシステムに送信する。ステップ540では、ステップ420〜ステップ470等の、方法400のさまざまなステップを、ウェブサービスコンピュータシステムによって実行することができる。したがって、ウェブサービスコンピュータシステムは、ロジックインサイト注入コードランタイムを作成してもよく、ロジックインサイト注入コードランタイムをロジックインサイトスレッド(ランタイムモードにおいてウェブサービスコンピュータシステムの仮想マシンが実行しているロジックインサイトスレッド)として実行してもよい。
ステップ550において、デバッグ機能を、開発者がデバッグの対象として選択したタスクフローのために、開発者コンピュータシステムによって提示することができる。デバッグ機能は、コンパイル済みの注入コードに対応するタスクフローの部分に対してのみ与えることができる。デバッグ機能は、デバッグの対象として選択されたタスクフローの実行が開始されて初めて(または選択されたタスクフロー内のブレークポイントに達したときに)提示することができる。選択されていない他のタスクフローについて、ロジックインサイトスレッドは、少なくとも開発者の視点から、ランタイムスレッドとして実行してもよい。デバッグ機能は、ウェブベースインターフェイスの一部としてのウェブブラウザ内のLIUIが提示してもよい。デバッグ機能は、開発者が、変数および関連する変数値の表示(および場合によってはこのような変数値を修正する機会)を提示されること、および、実行されている(またはこれから実行されるまたは直前に実行された)注入コード内の式の表示を提示されることを含み得る。デバッグ機能はさらに、1つの式について実行を続行するという選択肢を含み得る(そうすることによりロジックインサイトスレッドの実行をステップスルーできるようする)。もう1つの選択肢は、ブレークポイントまたはエラーが発生するまで実行を続行できるという選択肢である。実行中、ウェブサービスコンピュータシステムは、ステップ450〜ステップ470を実行している可能性がある。すなわち、注入コードランタイムを実行し、選択されたタスクフローに対するデバッグ機能を与える。他のタスクフロー中において、LIVMは、仮想マシンに対し、実行を自動的に(開発者の入力なしで)続行することを命令してもよい。
ロジックインサイトスレッドの実行中に、開発者は、デバッグする予定のタスクフローの選択を修正してもよい。開発者に提示されるウェブインターフェイスを介し、デバッグの対象として、さらに他の、より少ない、または異なるタスクフローを選択してもよい。このようなデバッグするタスクフローの修正は、ウェブサービスコンピュータシステムに送ることができる。図2を参照して、タスクフローアナライザ212は、実行すべき(実行中の)更新されたタスクフローを受けた後に、非選択タスクフローに対してデバッグ機能を開発者に与えることをLIVMに実行させてもよい。ステップ570で、修正後の選択された1つ以上のタスクフローに対し、デバッグ機能が開発者コンピュータシステムおよびウェブベースインターフェイスを介して、開発者に提供される。開発者は引続き、ロジックインサイトスレッドがウェブサービスコンピュータシステムによって実行されるときに、デバッグすべきタスクフローを修正してもよい。
方法500を実行している間に、(同一のまたは異なるロジックインサイト注入コードランタイムに基づく)1つ以上の他のロジックインサイトスレッド、および、1つ以上の注入コードランタイムを、同時に、ウェブサービスコンピュータシステムの仮想マシンによって、1人以上の他の開発者および/またはユーザに対して実行し得ることが、理解されるはずである。したがって、ウェブサービスコンピュータシステムは、ランタイムモードで機能するウェブサービスコンピュータシステムの仮想マシンで、同時に、複数の開発者/ユーザに対し、コンパイル、実行(デバッグ機能有りまたは無し)を提供することができる。
図6〜図8は、ユーザと開発者がウェブサービスコンピュータシステムと遠隔から対話できるようにする分散型システムを如何にして実装し得るかをさらに詳細に示す。図6は、リモート開発者コンピュータシステムの使用を許可する分散型システム600の実施形態を示す。例示された実施形態では、分散型システム600は、(ユーザおよび/または開発者コンピュータシステムを表わし得る)1つ以上のクライアントコンピューティングデバイス602,604,606,および608を含み、これらは、1つ以上のネットワーク610を通じて、ウェブブラウザ、専用クライアント(たとえば、Oracle(登録商標) Forms)などのクライアントアプリケーションを実行および動作させるように構成される。(ウェブサービスコンピュータシステムであってもよい)サーバ612は、ネットワーク610を介してリモートクライアントコンピューティングデバイス602,604,606,および608と通信可能に結合し得る。
さまざまな実施形態において、サーバ612は、システムのコンポーネントの1つ以上によって提供される1つ以上のサービスまたはソフトウェアアプリケーションを実行するように適合させることができる。一部の実施形態において、これらのサービスは、ウェブベースまたはクラウドサービスとして、またはサービス(SaaS)モデルとしてのソフトウェアの下で、クライアントコンピューティングデバイス602,604,606,および/または608のユーザに提供し得る。クライアントコンピューティングデバイス602、604および606,および/または608を動作させるユーザはひいては、1つ以上のクライアントアプリケーションを利用して、サーバ612と対話して、これらのコンポーネントによって提供されるサービスを利用し得る。
図に示される構成において、システム600のソフトウエアコンポーネント618、620および622は、サーバ612上で実施されるものとして示される。他の実施形態において、システム600のコンポーネントの1つ以上および/またはこれらのコンポーネントによって提供されるサービスは、クライアントコンピューティングデバイス602,604,606,および/または608のうち1つ以上によっても実施し得る。クライアントコンピューティングデバイスを動作させるユーザは次いで、1つ以上のクライアントアプリケーションを利用して、これらのコンポーネントによって提供されるサービスを使用し得る。これらのコンポーネントは、ハードウェア、ファームウェア、ソフトウェア、またはそれらの組み合わせにおいて実施し得る。分散型システム600とは異なり得るさまざまな異なるシステムコンフィギュレーションが可能であることが認識されるべきである。図に示される実施形態は、したがって実施形態のシステムを実施するための分散型システムの一例であり、限定するものとは意図されていない。
クライアントコンピューティングデバイス602,604,606,および/または608は、ポータブルハンドヘルドデバイス(たとえばiPhone(登録商標)、携帯電話、iPad(登録商標)、コンピューティングタブレット、携帯情報端末(PDA))、またはウェアラブルデバイス(たとえばGoogle Glass(登録商標)ヘッドマウンテッドディスプレイ)、Microsoft Windows Mobile(登録商標)などの実行ソフトウェア、および/またはiOS(登録商標)、ウィンドウズフォン、アンドロイド、BlackBerry(登録商標) 10、Palm OS等といったさまざまなモバイルオペレーティングシステムであり得、インターネット、電子メール、ショートメッセージサービス(SMS)、Blackberry(登録商標)、または他の通信プロトコルに対応する。クライアントコンピューティングデバイスは、Microsoft Windows(登録商標)、Apple Macintosh(登録商標)、および/またはLinux(登録商標)オペレーティングシステムのさまざまなバージョンを実行するパーソナルコンピュータおよび/またはラップトップコンピュータを例として含む汎用パーソナルコンピュータであってもよい。クライアントコンピューティングデバイスは、たとえばGoogle Chrome OSなどのさまざまなGNU/Linuxオペレーティングシステムを含み、限定されないさまざまな商業的に利用可能なUNIX(登録商標)またはUNIXのようなオペレーティングシステムのいずれかを実行するワークステーションコンピュータであってもよい。代替的に、または加えて、クライアントコンピューティングデバイス602,604,606,および608は、ネットワーク610を通じて通信可能な、シンクライアントコンピュータ、インターネット対応ゲーミングシステム(たとえばKinect(登録商標)ジェスチャー入力デバイスの有無に関わらずMicrosoft Xbox(登録商標)ゲーミングコンソール)、および/またはパーソナルメッセージングデバイスなどの任意の他の電子デバイスであってもよい。
4つのクライアントコンピューティングデバイスを用いて例示的な分散型システム600が示されているが、任意の数のクライアントコンピューティングデバイスをサポートし得る。センサーを有するデバイスなどの他のデバイスが、サーバ612と対話してもよい。
分散型システム600のネットワーク610は、TCP/IP(Transmission control protocol/Internet protocol)、SNA(systems network architecture)、IPX(Internet packet exchange)、AppleTalk(登録商標)などを含みこれらに限定されないさまざまな商業的に利用可能なプロトコルのいずれかを使用してデータ通信をサポートすることができる、当業者によく知られた任意のタイプのネットワークであってもよい。単に例示であるが、ネットワーク610は、イーサネット(登録商標)および/またはトークンリングなどに基づくものなどの、ローカルエリアネットワーク(LAN)であってもよい。ネットワーク610は、広域ネットワークおよびインターネットであってもよい。これは、仮想プライベートネットワーク(VPN)を含むがこれに限定されない仮想ネットワーク、インターネット、イントラネット、エクストラネット、公衆交換電話網(PSTN)、赤外線ネットワーク、無線ネットワーク(たとえば、Institute of Electrical and Electronics (IEEE)802.11プロトコルスイート、Bluetooth(登録商標)、および/または任意の他の無線プロトコルのうちのいずれかにおいて動作するネットワーク)、および/またはこれらおよび/または他のネットワークの組み合わせを含むことができる。
サーバ612は、1つ以上の汎用コンピュータ、専用サーバコンピュータ(たとえば、PC(パーソナルコンピュータ)サーバ、UNIX(登録商標)サーバ、ミッドレンジサーバ、メインフレームコンピュータ、ラックマウントサーバなどを含む)、サーバファーム、サーバクラスタ、または任意の他の適切な構成および/または組み合わせで構成し得る。さまざまな実施形態において、サーバ612は、上記の開示において記載される1つ以上のサービスまたはソフトウェアアプリケーションを実行するように適合させることができる。たとえば、サーバ612は、本開示の実施形態に係る、上記の処理を行なうためのサーバに対応し得る。
サーバ612は、上記のいずれかを含むオペレーティングシステム、ならびに商業的に利用可能なサーバオペレーティングシステムのいずれかを実行し得る。また、サーバ612は、HTTP(hypertext transport protocol)サーバ、FTP(file transfer protocol)サーバ、CGI(common gateway interface)サーバ、JAVA(登録商標)サーバ、データベースサーバなどを含む、さまざまな付加的なサーバアプリケーションおよび/またはミッドティアアプリケーションのいずれかを実行し得る。例示的なデータベースサーバは、Oracle、Microsoft、Sybase、IBM(International Business Machines)などから商業的に入手可能なものも含むが、これらに限定されない。
一部の実施において、サーバ612は、クライアントコンピューティングデバイス602,604,606,および608のユーザから受信されたデータフィードおよび/またはイベントアップデートを分析し統合するための1つ以上のアプリケーションを含み得る。一例として、データフィードおよび/またはイベントアップデートは、限定はしないが、1つ以上の第三者情報源および連続データストリームから受信されたTwitter(登録商標)フィード、Facebook(登録商標)更新、またはリアルタイム更新を含み得る。これらはデータアプリケーション、株式相場ディスプレイデバイス、ネットワーク性能測定ツール(たとえば、ネットワーク監視およびトラフィック管理アプリケーション)、クリックストリーム分析ツール、自動車トラフィック監視などに関連するリアルタイムイベントを含み得る。サーバ612は、クライアントコンピューティングデバイス602,604,606,および608の1つ以上のディスプレイデバイスを介してデータフィードおよび/またはリアルタイムイベントを表示するための1つ以上のアプリケーションも含み得る。
また、分散型システム600は、1つ以上のデータベース614および616を含み得る。データベース614および616は、さまざまな場所に置かれ得る。たとえば、データベース614および616のうちの1つ以上は、サーバ612に対してローカルの(および/またはそこに置かれる)非一時的な記録媒体上に置かれ得る。代替的に、データベース614および616は、サーバ612から遠隔に設けられてもよく、ネットワークベースまたは専属接続を介してサーバ612と通信し得る。一組の実施形態において、データベース614および616は、ストレージエリアネットワーク(SAN)内に置かれ得る。同様に、サーバ612に帰する機能を行なうために必要な任意のファイルを、適宜、サーバ612にローカルに格納することができる、および/または遠隔的に格納することができる。一組の実施形態において、データベース614および616は、SQLフォーマットの命令に応答してデータを記憶、更新、および検索するように適合される、Oracle(登録商標)によって提供されるデータベースなどのリレーショナルデータベースを含み得る。
図7は、サービスをクラウドサービスとして提供し得るシステム環境の実施形態のブロック図を示す。例示される実施形態では、システム環境700は、クラウドサービスを提供するクラウドインフラストラクチャシステム702と対話するためにユーザによって用いられ得る1つ以上のクライアントコンピューティングデバイス704,706,および708を含む。クライアントコンピューティングデバイスは、クラウドインフラストラクチャシステム702と対話してクラウドインフラストラクチャシステム702によって提供されるサービスを使用するためにクライアントコンピューティングデバイスのユーザによって用いられ得るウェブブラウザ、専用クライアントアプリケーション(たとえばOracle(登録商標) Forms)または何らかの他のアプリケーションなどのクライアントアプリケーションを動作させるように構成し得る。
図に示されるクラウドインフラストラクチャシステム702は、図に示されているもの以外のコンポーネントを有し得ることが認識されるべきである。さらに、図に示される実施形態は、開示の実施形態を組込み得るクラウドインフラストラクチャシステムの単なる一例である。一部の他の実施形態において、クラウドインフラストラクチャシステム702は図に示されるよりも多いかまたは少ないコンポーネントを有してもよいし、2つ以上のコンポーネントを組み合わせてもよいし、または異なる構成または配置のコンポーネントを有してもよい。
クライアントコンピューティングデバイス704,706,および708は、602,604,606,および608について上記したのと同様のデバイスであってもよい。典型的なシステム環境700は、3つのクライアントコンピューティングデバイスを用いて例示的なシステム環境700が示されているが、任意の数のクライアントコンピューティングデバイスをサポートすることができる。センサーを有するデバイスなどの他のデバイスが、クラウドインフラストラクチャシステム702と対話し得る。
ネットワーク710は、クライアント704,706、708とクラウドインフラストラクチャシステム702との間のデータの通信および交換を容易にし得る。各ネットワークは、ネットワーク610について上記したものを含むさまざまな商業的に利用可能なプロトコルのいずれかを使用してデータ通信をサポートすることができる、当業者によく知られた任意のタイプのネットワークであってもよい。
クラウドインフラストラクチャシステム702は、サーバ612について上記したものを含み得る1つ以上のコンピュータおよび/またはサーバを含み得る。特定の実施形態において、クラウドインフラストラクチャシステムによって提供されるサービスは、オンラインデータストレージおよびバックアップソリューション、ウェブベースの電子メールサービス、ホストされたオフィスパッケージおよびドキュメントコラボレーションサービス、データベース処理、管理された技術サポートサービス等といったクラウドインフラストラクチャシステムのユーザに対してオンデマンドで利用可能とされる多数のサービスを含み得る。クラウドインフラストラクチャシステムによって提供されるサービスは、そのユーザのニーズを満たすために動的にスケール変更することができる。クラウドインフラストラクチャシステムによって提供されるサービスの具体的なインスタンス化は、本明細書において「サービスインスタンス」と称される。一般に、クラウドサービスプロバイダのシステムから、インターネットなどの通信ネットワークを介してユーザに利用可能とされる任意のサービスは、「クラウドサービス」と称される。典型的に、パブリッククラウド環境において、クラウドサービスプロバイダのシステムを構築するサーバおよびシステムは、カスタマー自身のオンプレミスサーバおよびシステムとは異なる。たとえば、クラウドサービスプロバイダのシステムはアプリケーションをホストしてもよく、ユーザは、インターネットなどの通信ネットワークを介してオンデマンドにアプリケーションをオーダし、使用し得る。
一部の例において、コンピュータネットワーククラウドインフラストラクチャにおけるサービスは、クラウドベンダーによってユーザに提供される記憶部、ホストされたデータベース、ホストされたウェブサーバ、ソフトウェアアプリケーション、または他のサービスに対する保護されたコンピュータネットワークアクセスを含み得るか、または当技術において他の方法で知られている。たとえば、サービスは、インターネットを通じてクラウド上の遠隔ストレージに対するパスワードで保護されたアクセスを含むことができる。別の例として、サービスは、ネットワーク化されたデベロッパーによる私的使用のためのウェブサービスベースのホストされたリレーショナルデータベースおよびスクリプト言語ミドルウェアエンジンを含むことができる。別の例として、サービスは、クラウドベンダーのウェブサイト上にホストされた電子メールソフトウェアアプリケーションに対するアクセスを含むことができる。
特定の実施形態において、クラウドインフラストラクチャシステム702は、セルフサービスで、申込みに基づき、弾力的に拡張可能で、確実で、非常に有効で、安全なやり方でカスタマーに与えられるアプリケーション、ミドルウェアおよびデータベースサービス提供物一式を含み得る。そのようなクラウドインフラストラクチャシステムの一例は、本願の譲受人によって提供されるOracle(登録商標) Public Cloudである。
さまざまな実施形態において、クラウドインフラストラクチャシステム702は、クラウドインフラストラクチャシステム702によって提供されるサービスに対するカスタマーの申込みを自動的にプロビジョニングし、管理し、かつトラックするように適合させることができる。クラウドインフラストラクチャシステム702は、異なるデプロイメントモデルを介してクラウドサービスを提供し得る。たとえば、サービスは、(たとえばOracle所有の)クラウドサービスを販売する組織によってクラウドインフラストラクチャシステム702が所有されるパブリッククラウドモデルの下で提供されてもよく、サービスは、一般大衆または異なる産業企業にとって利用可能とされる。別の例として、サービスは、クラウドインフラストラクチャシステム702が単一の組織のためにのみ動作され、組織内の1つ以上のエンティティのためのサービスを提供し得る個人のクラウドモデルの下で提供し得る。また、クラウドサービスは、クラウドインフラストラクチャシステム702およびクラウドインフラストラクチャシステム702によって提供されるサービスが、関連するコミュニティー内の一部の組織によって共有されるコミュニティークラウドモデルの下で提供し得る。また、クラウドサービスは、2つ以上の異なるモデルの組み合わせであるハイブリッドクラウドモデルの下で提供し得る。
一部の実施形態において、クラウドインフラストラクチャシステム702によって提供されるサービスは、Service(SaaS)カテゴリーとしてのソフトウェア、Service(PaaS)カテゴリーとしてのプラットフォーム、Service(IaaS)カテゴリーとしてのインフラストラクチャ、またはハイブリッドサービスを含む他のカテゴリーのサービスの下で提供される1つ以上のサービスを含み得る。カスタマーは、クラウドインフラストラクチャシステム702によって提供される1つ以上のサービスを申込みオーダによってオーダし得る。クラウドインフラストラクチャシステム702は次いで、カスタマーの申込みオーダにおけるサービスを提供するための処理を行なう。
一部の実施形態において、クラウドインフラストラクチャシステム702によって提供されるサービスは、限定はしないが、アプリケーションサービス、プラットフォームサービスおよびインフラストラクチャサービスを含み得る。一部の例において、アプリケーションサービスは、クラウドインフラストラクチャシステムによってSaaSプラットフォームを介して提供し得る。SaaSプラットフォームは、SaaSカテゴリーに入るクラウドサービスを提供するように構成し得る。たとえば、SaaSプラットフォームは、統合された開発およびデプロイメントプラットフォーム上のオンデマンドのアプリケーション一式を構築し、伝える能力を提供し得る。SaaSプラットフォームは、SaaSサービスを提供するための基礎的なソフトウェアおよびインフラストラクチャを管理し、制御し得る。SaaSプラットフォームによって提供されるサービスを利用することによって、カスタマーは、クラウドインフラストラクチャシステム上で実行するアプリケーションを利用することができる。カスタマーは、カスタマーが別個のライセンスおよびサポートを購入する必要なしに、アプリケーションサービスを得ることができる。さまざまな異なるSaaSサービスが提供し得る。例は、限定はしないが、大きな組織のための販売実績管理、企業統合およびビジネス上のフレキシビリティのためのソリューションを提供するサービスを含む。
一部の実施形態において、プラットフォームサービスは、クラウドインフラストラクチャシステムによってPaaSプラットフォームを介して提供し得る。PaaSプラットフォームは、PaaSカテゴリーに入るクラウドサービスを提供するように構成し得る。プラットフォームサービスの例は、共有の共通アーキテクチャ上の既存のアプリケーションを組織(Oracle(登録商標)など)が統合することを可能にするサービスと、プラットフォームによって提供される共有サービスを活用する新しいアプリケーションを構築する能力とを含み得る。PaaSプラットフォームは、PaaSサービスを提供するための基礎的なソフトウェアおよびインフラストラクチャを管理し、制御し得る。カスタマーは、カスタマーが別個のライセンスおよびサポートを購入する必要なしに、クラウドインフラストラクチャシステムによって提供されるPaaSサービスを得ることができる。プラットフォームサービスの例は、限定はしないが、Oracle(登録商標) Java Cloud Service(JCS)、Oracle(登録商標) Database Cloud Service(DBCS)他を含む。
PaaSプラットフォームによって提供されるサービスを利用することによって、カスタマーは、クラウドインフラストラクチャシステムによってサポートされたプログラミング言語およびツールを採用し、また、デプロイされたサービスを制御することができる。一部の実施形態において、クラウドインフラストラクチャシステムによって提供されるプラットフォームサービスは、データベースクラウドサービス、ミドルウェアクラウドサービス(たとえばOracle Fusion Middleware services)、およびJavaクラウドサービスを含み得る。一実施形態において、データベースクラウドサービスは、組織がデータベースリソースをプールし、かつデータベースクラウドの形態でのサービスとしてカスタマーにデータベースを提示することを可能にする共有サービスデプロイメントモデルをサポートし得る。ミドルウェアクラウドサービスは、カスタマーがさまざまなビジネスアプリケーションを展開しデプロイするためのプラットフォームを提供してもよく、Javaクラウドサービスは、クラウドインフラストラクチャシステムにおいてカスタマーがJavaアプリケーションをデプロイするためのプラットフォームを提供し得る。
さまざまな異なるインフラストラクチャサービスは、クラウドインフラストラクチャシステムにおいてIaaSプラットフォームによって提供し得る。インフラストラクチャサービスは、SaaSプラットフォームおよびPaaSプラットフォームによって提供されるサービスを利用するカスタマーのための記憶部、ネットワーク、および他の基本のコンピューティングリソースといった基礎的なコンピューティングリソースの管理および制御を容易にする。
特定の実施形態において、クラウドインフラストラクチャシステム702は、クラウドインフラストラクチャシステムのカスタマーにさまざまなサービスを提供するために用いられるリソースを提供するためのインフラストラクチャリソース730を含み得る。一実施形態において、インフラストラクチャリソース730は、PaaSプラットフォームおよびSaaSプラットフォームによって提供されるサービスを実行するためのサーバ、記憶部、およびネットワークのリソースといったハードウェアの予め統合され最適化された組み合わせを含み得る。
一部の実施形態において、クラウドインフラストラクチャシステム702におけるリソースは、複数のユーザによって共有され、要求ごとに動的に再び割当てられ得る。加えて、リソースは、異なるタイムゾーンのユーザに割当てられ得る。たとえば、クラウドインフラストラクチャシステム730は、第1のタイムゾーンでの第1の組のユーザに特定数の時間クラウドインフラストラクチャシステムのリソースを利用させ、次いで異なるタイムゾーンに位置する別の組のユーザに対する同じリソースの再割当てを可能にすることが可能であり、それによってリソースの利用を最大化し得る。
特定の実施形態において、クラウドインフラストラクチャシステム702の異なるコンポーネントまたはモジュールによって、かつクラウドインフラストラクチャシステム702により提供されるサービスによって共有される多数の内部共有サービス732が提供し得る。これらの内部共有サービスは、限定はしないが、セキュリティおよびアイデンティティサービス、インテグレーションサービス、企業リポジトリサービス、企業マネージャーサービス、ウィルススキャン、およびホワイトリストサービス、高アベイラビリティ、保存後修復サービス、クラウドサポートを可能にするためのサービス、電子メールサービス、通知サービス、ファイル転送サービス等を含み得る。
特定の実施形態において、クラウドインフラストラクチャシステム702は、クラウドインフラストラクチャシステムにおいてクラウドサービス(たとえばSaaS、PaaSおよびIaaSサービス)の包括的な管理を提供し得る。一実施形態において、クラウド管理機能性は、クラウドインフラストラクチャシステム702によって受信されたカスタマーの申込みをプロビジョニングし、管理し、トラックする機能を含み得る。
一実施形態において、図に示されるように、クラウド管理機能性は、オーダ管理モジュール720、オーダオーケストレーションモジュール722、オーダプロビジョニングモジュール724、オーダ管理および監視モジュール726、およびアイデンティティ管理モジュール728といった1つ以上のモジュールによって提供し得る。これらのモジュールは、汎用コンピュータ、専用サーバコンピュータ、サーバファーム、サーバクラスタ、および/または任意の他の適切な配置および/または組み合わせであってもよい1つ以上のコンピュータおよび/またはサーバを含み得るか、またはそれらを用いて提供し得る。
典型的な動作734において、クライアントデバイス704、706、または708などのクライアントデバイスを用いるカスタマーは、クラウドインフラストラクチャシステム702によって提供される1つ以上のサービスを要求し、クラウドインフラストラクチャシステム702によって提示される1つ以上のサービスに申込むためのオーダを行なうことによって、クラウドインフラストラクチャシステム702と対話し得る。たとえば、このような構成は、注入すべき開発者のコードのコンパイルおよび実行をウェブサービスコンピュータシステムに行なわせるために、カスタマーおよび/または開発者が、使用してもよい。特定の実施形態において、カスタマーは、クラウドユーザインターフェイス(UI)、クラウドUI712、クラウドUI714、および/またはクラウドUI716にアクセスし、これらのUIを介して申込みオーダを行ない得る。カスタマーがオーダを行ったことに応じてクラウドインフラストラクチャシステム702によって受信されるオーダ情報は、カスタマーを識別する情報と、カスタマーが申込むつもりのクラウドインフラストラクチャシステム702によって提供される1つ以上のサービスとを含み得る。カスタマーによってオーダが行なわれた後、オーダ情報は、クラウドUI712,714,および/または716によって受信される。
動作736において、オーダはオーダデータベース718に記憶される。オーダデータベース718は、クラウドインフラストラクチャシステム718によって動作され、他のシステムエレメントとともに動作される一部のデータベースの1つであってもよい。動作738において、オーダ情報はオーダ管理モジュール720に転送される。一部のインスタンスにおいて、オーダ管理モジュール720は、オーダを確認し、確認後にオーダを記入するなどの、オーダに関連する課金および会計機能を行なうように構成し得る。動作740において、オーダに関する情報がオーダオーケストレーションモジュール722に伝えられる。オーダオーケストレーションモジュール722は、カスタマーによって行なわれたオーダのためのサービスおよびリソースのプロビジョニングを調整するためにオーダ情報を利用し得る。一部のインスタンスにおいて、オーケストレーションモジュール722は、リソースのプロビジョニングをオーケストレーションして、申込まれたサービスをオーダプロビジョニングモジュール724のサービスを用いてサポートし得る。
特定の実施形態において、オーダオーケストレーションモジュール722は、各オーダに関連付けられるビジネスプロセスの管理を可能にし、オーダがプロビジョニングに進むべきかどうか判定するためにビジネスロジックを適用する。動作742において、新規申込みのためのオーダを受信すると、オーダオーケストレーションモジュール722は、オーダプロビジョニングモジュール724に要求を送信して、リソースを割当て、申込みオーダを遂行するために必要とされるリソースを構成する。オーダプロビジョニングモジュール724は、カスタマーによってオーダされたサービスのためのリソースの割当てを可能にする。オーダプロビジョニングモジュール724は、クラウドインフラストラクチャシステム700によって提供されるクラウドサービスと、要求されたサービスを提供するためにリソースをプロビジョニングのために用いられる物理的な実施層との間に抽象化レベルを提供する。オーダオーケストレーションモジュール722はしたがって、サービスおよびリソースが実際にオンザフライでプロビジョニングされるかまたは予めプロビジョニングされ、かつ要求後に割当て/アサインされたかどうかといった実施詳細から分離し得る。
動作744において、ひとたびサービスおよびリソースがプロビジョニングされると、プロビジョニングされたサービスの通知が、クラウドインフラストラクチャシステム702のオーダプロビジョニングモジュール724によってクライアントデバイス704、706および/または708上のカスタマーに送信し得る。動作746において、カスタマーの申込みオーダは、オーダ管理および監視モジュール726によって管理され、追跡されてもよい。一部のインスタンスにおいて、オーダ管理および監視モジュール726は、用いられる記憶部の量、転送されるデータ量、ユーザ数、ならびにシステムアップタイムおよびシステムダウンタイムの量といった、申込みオーダにおけるサービスのための使用統計を収集するように構成し得る。
特定の実施形態において、クラウドインフラストラクチャシステム700は、アイデンティティ管理モジュール728を含み得る。アイデンティティ管理モジュール728はクラウドインフラストラクチャシステム700へのアクセス管理および権限付与のサービスといったアイデンティティサービスを提供するように構成し得る。一部の実施形態において、アイデンティティ管理モジュール728は、クラウドインフラストラクチャシステム702によって提供されるサービスを利用したいカスタマーに関する情報を制御し得る。そのような情報は、そのようなカスタマーのアイデンティティを認証する情報と、どの動作によってさまざまなシステムリソース(たとえばファイル、ディレクトリ、アプリケーション、通信ポート、メモリセグメントなど)に対してそれらのカスタマーが行なうことを権限付与されるかを記述する情報とを含むことができる。アイデンティティ管理モジュール728は、各カスタマーについての、またどのように誰によってその記述情報がアクセスされ変更することができるかについての記述情報の管理も含み得る。
図8は、ウェブサービスコンピュータシステム、開発者コンピュータシステム、およびユーザコンピュータシステム等の本明細書で詳述したさまざまな実施形態を実装するために使用し得る、コンピュータシステム800の実施形態を示す。上述のコンピュータシステムはコンピュータシステム800等のコンピュータの1つ以上のインスタンスを含み得ることが理解されるはずである。たとえば、一群のサーバがウェブサービスコンピュータシステムの機能を実行してもよい。図に示されるように、コンピュータシステム800は、バスサブシステム802を介して多くの周辺サブシステムと通信する処理部804を含む。これらの周辺サブシステムは、処理加速部806、I/Oサブシステム808、記憶サブシステム818、および通信サブシステム824を含み得る。記憶サブシステム818は、有形のコンピュータ読取可能記録媒体822およびシステムメモリ810を含む。
バスサブシステム802は、コンピュータシステム800のさまざまなコンポーネントおよびサブシステムを意図されるとおりに互いに通信させるためのメカニズムを提供する。バスサブシステム802は、単母線として概略的に示されるが、バスサブシステムの代替的な実施形態は複数のバスを利用し得る。バスサブシステム802は、多様なバスアーキテクチャのうちのいずれかを用いて、メモリバスまたはメモリコントローラ、周辺バス、およびローカルバスを含むいくつかのタイプのバス構造のいずれかであってもよい。たとえば、そのようなアーキテクチャは、IEEE P1386.1規格で製造されたMezzanineバスとして実施することができるIndustry Standard Architecture(ISA)バス、Micro Channel Architecture(MCA)バス、Enhanced ISA(EISA)バス、Video Electronics Standards Association(VESA)ローカルバス、およびPeripheral Component Interconnect(PCI)を含み得る。
1つ以上の集積回路(たとえば従来のマイクロプロセッサまたはマイクロコントローラ)として実施することができる処理部804は、コンピュータシステム800の動作を制御する。1つ以上のプロセッサが処理部804に含まれ得る。これらのプロセッサは、シングルコアまたはマルチコアプロセッサを含み得る。特定の実施形態において、処理部804は、各処理部に含まれるシングルまたはマルチコアプロセッサを有する1つ以上の独立した処理部832および/または834として実施し得る。他の実施形態において、処理部804は、2つのデュアルコアプロセッサをシングルチップに統合することによって形成されたクアッドコア処理部としても実施し得る。
さまざまな実施形態において、処理部804はプログラムコードに応じてさまざまなプログラムを実行することができ、複数の同時に実行するプログラムまたはプロセスを維持することができる。任意の所与の時間において、実行されるべきプログラムコードの一部またはすべては、プロセッサ804におよび/または記憶サブシステム818に存在し得る。適切なプログラミングによって、プロセッサ804は、上記したさまざまな機能を提供することができる。コンピュータシステム800は加えて、デジタル信号プロセッサ(DSP)、専用プロセッサなどを含むことができる処理加速部806を含み得る。
I/Oサブシステム808は、ユーザインターフェイス入力デバイスおよびユーザインターフェイス出力デバイスを含み得る。ユーザインターフェイス入力デバイスは、キーボード、マウスまたはトラックボールなどのポインティングデバイス、ディスプレイに組込まれたタッチパッドまたはタッチスクリーン、スクロールホイール、クリックホイール、ダイヤル、ボタン、スイッチ、キーパッド、音声コマンド認識システム付きオーディオ入力デバイス、マイクロフォン、および他の種類の入力デバイスを含み得る。ユーザインターフェイス入力デバイスは、たとえば、ジェスチャーおよび口頭での指示を用いた生来のユーザインターフェイスによって、Microsoft Xbox(登録商標)360ゲームコントローラなどの入力デバイスをユーザが制御しそれと対話することを可能にするMicrosoft Kinect(登録商標)モーションセンサなどの動き検知および/またはジェスチャー認識装置を含み得る。ユーザインターフェイス入力デバイスは、ユーザから目の動作(たとえば撮影および/またはメニュー選択を行っている間の「まばたき」)を検出し、アイジェスチャーを入力デバイス(たとえばGoogle Glass(登録商標))への入力として変換するGoogle Glass(登録商標)まばたき検出器などのアイジェスチャー認識装置を含み得る。加えて、ユーザインターフェイス入力デバイスは、ユーザが音声コマンドによって音声認識システム(たとえばSiri(登録商標)ナビゲーター)と対話することを可能にする音声認識検知装置を含み得る。
ユーザインターフェイス入力デバイスは、限定はしないが、三次元(3D)マウス、ジョイスティックまたはポインティングスティック、ゲームパッドおよびグラフィックタブレット、およびスピーカーなどのオーディオ/ビジュアル装置、デジタルカメラ、デジタルビデオカメラ、ポータブルメディアプレイヤー、ウェブカメラ、イメージスキャナ、指紋スキャナ、バーコードリーダー、3Dスキャナ、3Dプリンター、レーザー測距装置、およびアイゲイズトラッキング装置を含み得る。加えて、ユーザインターフェイス入力デバイスは、たとえば、コンピュータ断層撮影装置、磁気共鳴画像装置、ポジトロン断層撮影装置、医療用超音波検査装置などの医療用撮像入力デバイスを含み得る。ユーザインターフェイス入力デバイスは、たとえば、MIDIキーボード、デジタル楽器などといった音声入力装置も含み得る。
ユーザインターフェイス出力デバイスは、ディスプレイサブシステム、表示灯、または音声出力装置などの非視覚的ディスプレイを含み得る。ディスプレイサブシステムは、陰極線管(CRT)、液晶ディスプレイ(LCD)またはプラズマディスプレイを用いるものなどのフラットパネルデバイス、投影デバイス、タッチスクリーンなどであってもよい。一般に、「出力デバイス」という用語の使用は、コンピュータシステム800からユーザまたは他のコンピュータに情報を出力するためのあらゆる可能な種類の装置およびメカニズムを含むことが意図されている。たとえば、ユーザインターフェイス出力デバイスは、限定はしないが、モニタ、プリンター、スピーカー、ヘッドホン、カーナビ、プロッタ、音声出力デバイス、およびモデムといった、テキスト、図形、およびオーディオ/ビデオ情報を視覚的に伝えるさまざまなディスプレイデバイスを含み得る。
コンピュータシステム800は、現在システムメモリ810内にあるものとして示される、ソフトウェア要素を含む記憶サブシステム818を含み得る。システムメモリ810は、処理部804上でローディング可能および実行可能なプログラム命令ならびにこれらのプログラムの実行時に生成されるデータを記憶し得る。
コンピュータシステム800の構成およびタイプに応じて、システムメモリ810は、揮発性(ランダムアクセスメモリ(RAM)など)および/または不揮発性(読取専用メモリ(ROM)、フラッシュメモリなど)であってもよい。RAMは、処理部804に直ちにアクセス可能であり、かつ/または処理部804によって現在動作され実行されているデータおよび/またはプログラムモジュールを典型的に含む。一部の実施において、システムメモリ810は、スタティックランダムアクセスメモリ(SRAM)またはダイナミックランダムアクセスメモリ(DRAM)などの複数の異なるタイプのメモリを含み得る。一部の実施において、起動中などにコンピュータシステム800内の要素間で情報を転送するのを支援する基本的なルーチンを含んでいる基本入力/出力システム(BIOS)は、典型的にROMに格納してもよい。例として、限定ではないが、システムメモリ810は、アプリケーションプログラム812も例示する。アプリケーションプログラム812は、クライアントアプリケーション、ウェブブラウザ、ミッドティアアプリケーション、リレーショナルデータベース管理システム(RDBMS)等、プログラムデータ814、およびオペレーティングシステム816を含み得る。例として、オペレーティングシステム816は、Microsoft Windows(登録商標)、Apple Macintosh(登録商標)および/またはLinuxオペレーティングシステムのさまざまなバージョン、さまざまな商業的に利用可能なUNIX(登録商標)またはUNIXのようなオペレーティングシステム(限定はしないがさまざまなGNU/Linuxオペレーティングシステム、Google Chrome(登録商標)OS等を含む)、および/またはiOS、Windows(登録商標)フォン、Android(登録商標)OS、BlackBerry(登録商標)8 OSおよびPalm(登録商標)OSオペレーティングシステムなどのモバイルオペレーティングシステムを含み得る。
記憶サブシステム818は、一部の実施形態の機能性を提供する基本的なプログラミングおよびデータ構造体を記憶するための有形のコンピュータ読取可能記録媒体も提供し得る。プロセッサによって実行されると上記した機能性を提供するソフトウェア(プログラム、コードモジュール、命令)は、記憶サブシステム818に格納してもよい。これらのソフトウェアモジュールまたは命令は、処理部804によって実行し得る。記憶サブシステム818は、本開示に従って用いられるデータを記憶するためのリポジトリを提供し得る。
記憶サブシステム718は、コンピュータ読取可能記録媒体822にさらに接続することができるコンピュータ読取可能記録媒体読取装置820も含み得る。これらは合わせて、および、選択的には、システムメモリ810と組み合わせて包括的に、遠隔、ローカル、固定、および/またはリムーバブル記憶デバイスと、コンピュータ読取可能情報を一時的および/またはより永続的に含み、記憶し、送信し、かつ取り出すための記録媒体とを加えたものを表わす。
コードまたはコードの一部を含むコンピュータ読取可能記録媒体822は、当該技術において知られる、または使用される任意の適切な媒体も含むことができ、この媒体には、情報の記憶および/または伝達のための任意の方法および技術において実施される揮発性および不揮発性(非一時的)のリムーバブルおよび非リムーバブル媒体などの記録媒体および通信媒体が含まれる。これは、RAM、ROM、電気的消去可能プログラム可能なROM(EEPROM)、フラッシュメモリ、または他のメモリ技術、CD−ROM、デジタルバーサタイルディスク(DVD)、または他の光学記憶部、磁気カセット、磁気テープ、磁気ディスク記憶部、または他の磁気記憶デバイス、または他の有形のコンピュータ読取可能媒体が含むことができる。これは、データ信号、データ伝送、または所望の情報を送信するために用いることができ、コンピューティングシステム800によってアクセスすることができる任意の他の媒体などの非有形のコンピュータ読取可能媒体も含むことができる。
例として、コンピュータ読取可能記録媒体822は、非リムーバブルで不揮発性の磁気媒体から読出すかまたはそこに書込むハードディスクドライブ、リムーバブルで不揮発性の磁気ディスクから読出すかまたはそこに書込む磁気ディスクドライブ、およびCD ROM、DVD、およびBlu−Ray(登録商標)ディスクなどのリムーバブルで不揮発性の光ディスクから読出すかまたはそこに書込む光ディスクドライブ、または他の光媒体を含み得る。コンピュータ読取可能記録媒体822は、限定はしないが、Zip(登録商標)ドライブ、フラッシュメモリカード、ユニバーサルシリアルバス(USB)フラッシュドライブ、セキュアデジタル(SD)カード、DVDディスク、デジタルビデオテープなどを含み得る。コンピュータ読取可能記録媒体822は、フラッシュメモリベースのSSD、企業フラッシュドライブ、ソリッドステートROM等といった不揮発性メモリベースのソリッドステートドライブ(SSD)、ソリッドステートRAM、ダイナミックRAM、スタティックRAM、DRAMベースのSSD、磁気抵抗RAM(MRAM)SSD、ならびにDRAMおよびフラッシュメモリベースのSSDの組み合わせを用いるハイブリッドSSDなどの揮発性メモリベースのSSDも含み得る。ディスクドライブおよびそれらの関連付けられたコンピュータ読取可能媒体は、コンピュータ読取可能命令、データ構造、プログラムモジュール、および他のデータの不揮発性記憶装置をコンピュータシステム800に提供し得る。
通信サブシステム824は、他のコンピュータシステムおよびネットワークへのインターフェイスを提供する。通信サブシステム824は、データを受信し、コンピュータシステム800から他のシステムにデータを送信するためのインターフェイスとして機能する。たとえば、通信サブシステム824は、コンピュータシステム800がインターネットを介して1つ以上の装置に接続することを可能にし得る。一部の実施形態において、通信サブシステム824は、(たとえば携帯電話技術、3G、4GまたはEDGE(enhanced data rates for global evolution)などの高度データネットワーク技術、WiFi(IEEE 802.11系列基準、または他の移動通信技術、またはそれらの任意の組み合わせを用いて)無線音声および/またはデータネットワークにアクセスするための無線周波数(RF)トランシーバーコンポーネント、全地球測位システム(GPS)レシーバーコンポーネント、ならびに/または他のコンポーネントを含むことができる。一部の実施形態において、通信サブシステム824は、無線インターフェイスに加えて、またはその代わりに、有線ネットワークコネクティビティ(たとえばイーサネット(登録商標))を提供することができる。
一部の実施形態において、通信サブシステム824は、コンピュータシステム800を使用し得る一人以上のユーザのために、構造化されたおよび/または構造化されていないデータフィード826、イベントストリーム828、イベントアップデート830などの形態の入力通信も受信し得る。
例として、通信サブシステム824は、Twitter(登録商標)フィード、Facebook(登録商標)更新、Rich Site Summary(RSS)フィードなどのウェブフィード、および/または1つ以上の第三者情報源からのリアルタイム更新などのソーシャルネットワークおよび/または他の通信サービスのユーザからリアルタイムにデータフィード826を受信するように構成し得る。
加えて、通信サブシステム824は、明示的な終わりのない本質的に連続的または無限であり得るリアルタイムイベントのイベントストリーム828および/またはイベントアップデート830を含み得る連続的なデータストリームの形態でデータを受信するようにも構成し得る。連続的なデータを生成するアプリケーションの例は、たとえば、センサーデータアプリケーション、株式相場表示装置、ネットワーク性能測定ツール(たとえば、ネットワーク監視およびトラフィック管理アプリケーション)、クリックストリーム分析ツール、自動車トラフィック監視などを含み得る。
通信サブシステム824はまた、構造化されたデータおよび/または構造化されていないデータフィード826、イベントストリーム828、イベントアップデート830等を、コンピュータシステム800に結合された1つ以上のストリーミングデータソースコンピュータと通信し得る1つ以上のデータベースに出力するように構成し得る。
コンピュータシステム800は、ハンドヘルドポータブルデバイス(たとえばiPhone(登録商標)携帯電話、iPad(登録商標)コンピューティングタブレット、PDA)、ウェアラブルデバイス(たとえばGoogle Glass(登録商標)ヘッドマウンテッドディスプレイ)、PC、ワークステーション、メインフレーム、キオスク、サーバラック、または任意の他のデータ処理システムを含むさまざまな種類のうちの1つであってもよい。
コンピュータおよびネットワークの常に変化する性質により、図に示されるコンピュータシステム800の説明は具体的な一例としてのみ意図される。図に示されるシステムよりも多いかまたは少ないコンポーネントを有する他の多くの構造が可能である。たとえば、カスタマイズされるハードウェアも使用し得る、および/または特定の要素がハードウェア、ファームウェア、ソフトウェア(アプレットを含む)、または組み合わせで実施し得る。さらに、ネットワーク入力/出力デバイスなどの他のコンピューティングデバイスへの接続も採用し得る。本明細書において提供される開示および教示に基づいて、当該分野の当業者は、さまざまな実施形態を実施する他のやり方および/または方法を認識するであろう。
上記方法、システム、および装置は例である。さまざまな構成において、さまざまな手順またはコンポーネントを適宜削除、置換、または追加してもよい。たとえば、代替の構成において、方法は、記載しているものと異なる順序で実行してもよく、および/またはさまざまな段階を追加、削除、および/または組み合わせてもよい。また、特定の構成に関して説明した特徴を、他のさまざまな構成において組み合わせてもよい。構成の異なる側面および要素を同様のやり方で組み合わせてもよい。また、技術は進化するので、要素のうちの多くは、例であり、本開示または請求項の範囲を制限するものではない。
本明細書では具体的な詳細事項を示すことによって代表的な構成(実装例を含む)が十分に理解されるようにしている。しかしながら、構成はこれら詳細事項がなくとも実施し得る。たとえば、周知の回路、プロセス、アルゴリズム、構造、および技術は、構成が曖昧になるのを避けるために、不必要な詳細事項なしで示している。本明細書は、代表的な構成のみを示し、請求項の範囲、適用可能性、または構成を制限しない。むしろ、構成についてのこれまでの説明は、記載されている技術の実装を可能にする説明を当業者に提供するであろう。本開示の精神と範囲から逸脱することなく、要素の機能および構成に変更をなすことができる。
また、フロー図またはブロック図として示されるプロセスとして構成を説明することもできる。各々動作を逐次プロセスとして説明している場合があるが、動作のうちの多くは並列にまたは同時に実行することが可能である。プロセスは、図面に含まれていない追加のステップを有し得る。さらに、方法の例は、ハードウェア、ソフトウェア、ファームウェア、ミドルウェア、マイクロコード、ハードウェア記述言語、またはその任意の組み合わせによって実現し得る。ソフトウェア、ファームウェア、ミドルウェア、またはマイクロコードで実現されるとき、必要なタスクを実行するためのプログラムコードまたはコードセグメントを、記録媒体等の非一時的なコンピュータ読取可能媒体に格納してもよい。プロセッサは記述されているタスクを実行してもよい。
図9は、上記本発明の原理に従い構成されたコードをデバッグするためのシステムの実施形態の機能ブロック図を示す。この装置の機能ブロックは、ハードウェア、ソフトウェア、またはハードウェアとソフトウェアの組み合わせによって実装されて本発明の原理を実行してもよい。図9に示される機能ブロックを組み合わせてまたはサブブロックに分割して上記本発明の原理を実現し得ることを、当業者は理解する。したがって、本明細書における説明は、本明細書に記載の機能ブロックの、可能ないかなる組み合わせまたは分割または他の定義もサポートし得る。
図9に示されるように、コードをデバッグするためのシステム900が提供される。このシステム900はウェブサービスコンピュータシステム910を含み得る。ウェブサービスコンピュータシステム910はさらに、コンパイラ912と、選択部914と、第1の実行部916と、第1のデバッグ機能部918とを含み得る。コンパイラ912はコードをコンパイルしてコンパイル済みコードにするように構成されてもよく、コードは、第1のタスクフローに対応する第1の部分と第2のタスクフローに対応する第2の部分とを含み得る。選択部914は、第1または第2のタスクフローの選択を開発者コンピュータシステム(図示せず)からネットワーク(図示せず)を介して受けるように構成し得る。この選択は、デバッグする予定である第1または第2のタスクフローを示し得る。第1の選択部916は、第1のタスクフローが選択されたときに第1のタスクフローの実行を開始するように構成し得る。第1のデバッグ機能部918は、コンパイル済みコードの第1のタスクフローを第1の実行部916が実行している間に、コードの第1の部分に対するデバッグ機能を開発者コンピュータシステムにネットワークを介して与えるように構成し得る。
一例として、ウェブサービスコンピュータシステム910は、コードをコンパイルする前に、コンパイルする対象であるコードを、開発者コンピュータシステムからウェブブラウザインターフェイスおよびネットワークを介して受信するように構成し得るコード受信部911をさらに含み得る。
一例において、ウェブサービスコンピュータシステム910はさらに、第2のタスクフローを実行するように構成し得る第2の実行部920を含み得る。第2のタスクフローをデバッグするための選択は開発者コンピュータシステムからネットワークを介して受けておらず、コードの第2の部分に関連するデバッグ機能は開発者コンピュータシステムに与えない。一例において、ウェブサービスコンピュータシステム910はさらに、第1のタスクフローと第2のタスクフローとを含む複数のタスクフローの中から選択することを許可するインターフェイスをウェブブラウザを介して開発者コンピュータシステムに与えるように構成し得るインターフェイス提供部922を含み得る。一例において、ウェブサービスコンピュータシステム910はさらに、第1のタスクフローの実行中に第2のタスクフローの選択を開発者コンピュータシステムから選択部914が受けるときに、第2のタスクフローの実行を開始するように構成し得る第3の実行部924と、第3の実行部924がコンパイル済みコードの第2のタスクフローを実行している間に、コードの第2の部分に対するデバッグ機能をネットワークを介して開発者コンピュータシステムに与えるように構成し得る第2のデバッグ機能部926とを含み得る。一例において、第1の実行部916は、コンパイル済みコードをランタイムスレッドとして実行する、コンピュータシステムによって実行される仮想マシンである。一例において、第1のタスクフローを実行している間に、仮想マシンは第2のランタイムスレッドを実行し、第2のランタイムスレッドにはユーザに提供されるデバッグ機能がない。一例において、コンパイラ912はさらに、コンパイル中にコードの第1の部分とコードのダイ2の部分とを修正して追加コードを含むように構成されたコード修正部(図示せず)を含み得る。このスイカコードはデバッグ機能を与える。一例において、第1および第2のデバッグ機能部918および926はそれぞれ、開発者コンピュータシステムにおいてコードの第1の部分および第2の部分の中のブレークポイントで第1および第2のタスクフローの実行を停止させるように構成された停止部(図示せず)、第1および第2のタスクフローの実行中にコードの第1および第2の部分の中から変数を開発者コンピュータシステムに出力するように構成された出力部(図示すせず)、および、コードの第1および第2の部分における個々の式の処理の発生をトリガする開発者コンピュータシステムからの入力を受けるように構成された入力部(図示せず)を含む。
いくつかの実施形態において、コードをデバッグするための装置が提供される。この装置は、コードをコンパイルしてコンパイル済みコードにするための手段を含み得る。このコードの第1の部分は第1のタスクフローに対応し、このコードの第2の部分は第2のタスクフローに対応する。この装置は、第1のタスクフローの選択を開発者コンピュータシステムからネットワークを介して受けるための手段を含み得る。この選択は第1のタスクフローをデバッグする予定であることを表示する。この装置は、コンピュータシステムによる第1のタスクフローの実行を開始するための手段を含み得る。この装置は、コンピュータシステムがコンパイル済みコードの第1のタスクフローを実行している間に、コードの第1の部分に対するデバッグ機能を開発者コンピュータシステムにネットワークを介して与えるための手段を含み得る。
いくつかの代表的な構成について説明してきたが、本開示の精神から逸脱することなく、さまざまな変形、代替構造、および均等物を用いることができる。たとえば、上記要素はより大きなシステムのコンポーネントであってもよく、その場合に、他の規則が本発明のアプリケーションより優先度が高くてもよくそうでなければ本発明のアプリケーションを修正してもよい。また、上記要素が考慮される前、中、または後に、多数のステップが実行されてもよい。