(57)【特許請求の範囲】
【請求項１】
方法であって、
サーバ上で実行されるサーバアプリケーションのクライアントアプリケーションとの間の第１のユーザセッション内で行なわれたユーザの１つ以上のアクションを、クライアントコンピューティング装置が受信するステップと、
前記第１のユーザセッション内で行なわれた前記１つ以上のアクションを、前記サーバアプリケーションの履歴に、前記クライアントコンピューティング装置が記録するステップと、
前記サーバアプリケーションの前記クライアントアプリケーションとの間の第２のユーザセッションを、前記クライアントコンピューティング装置がインスタンス化するステップと、
前記サーバが生成した前記クライアントアプリケーションに関連付けられた現在の状態を、前記クライアントコンピューティング装置が受信するステップとを含み、前記現在の状態は、前記第１のユーザセッションに関連付けられたスナップショットに対して、前記サーバが前記サーバアプリケーションの前記履歴に含まれるアクションを実行することで、当該履歴を反映したものであり、
前記サーバアプリケーションの前記クライアントアプリケーションとの間の前記第１のユーザセッション内で行なわれた前記１つ以上のアクションのうちの１つ以上を、前記第２のユーザセッション内でアンドゥするようにという要求を、前記クライアントコンピューティング装置が生成するステップと、
前記要求を前記サーバアプリケーションに送信することで、受信された前記現在の状態に基づいて、前記サーバアプリケーションの前記クライアントアプリケーションとの間の前記第２のユーザセッション内のデータを、前記第１のユーザセッション内のデータの状態を反映するように、前記クライアントコンピューティング装置が修正するステップを含む、方法。
【請求項２】
前記第１のユーザセッション内で行なわれた前記１つ以上のアクションを、前記サーバアプリケーションの前記履歴に、前記クライアントコンピューティング装置が記録するステップは、前記サーバアプリケーションの現在の状態のスナップショットを生成するステップを含む、請求項１に記載の方法。
【請求項３】
前記第１のユーザセッション内で行なわれた前記１つ以上のアクションを、前記サーバアプリケーションの前記履歴に、前記クライアントコンピューティング装置が記録するステップは、前記サーバアプリケーションの以前の状態のチェックサムを用いて、前記サーバアプリケーションの現在の状態のスナップショットを生成するステップを含む、請求項１または２に記載の方法。
【請求項４】
前記第１のユーザセッション内で行なわれた前記１つ以上のアクションを、前記サーバアプリケーションの前記履歴に、前記クライアントコンピューティング装置が記録するステップは、アンドゥ命令を用いて、前記サーバアプリケーションの現在の状態のスナップショットを生成するステップを含む、請求項１〜３のいずれか１項に記載の方法。
【請求項５】
前記第１のユーザセッション内で行なわれた前記１つ以上のアクションを、前記サーバアプリケーションの前記履歴に、前記クライアントコンピューティング装置が記録するステップは、前記サーバアプリケーションの現在の状態のスナップショットを、前記現在の状態と以前の状態との違いに基づいて生成することを含む、請求項１〜４のいずれか１項に記載の方法。
【請求項６】
前記クライアントアプリケーションに関連付けられた前記現在の状態を、前記クライアントコンピューティング装置が受信するステップは、前記現在の状態を決定するために以前のスナップショットおよびデルタを評価することを含む、請求項１〜５のいずれか１項に記載の方法。
【請求項７】
プロセッサと一組の命令を格納するメモリとを含むクライアントコンピューティング装置を備えたシステムであって、
前記一組の命令は、前記プロセッサによって実行されると、前記クライアントコンピューティング装置に、
サーバ上で実行されるサーバアプリケーションのクライアントアプリケーションとの間の第１のユーザセッション内で行なわれたユーザの１つ以上のアクションを受信するステップと、
前記第１のユーザセッション内で行なわれた前記１つ以上のアクションを、前記サーバアプリケーションの履歴に記録するステップと、
前記サーバアプリケーションの前記クライアントアプリケーションとの間の第２のユーザセッションをインスタンス化するステップと、
前記サーバが生成した前記クライアントアプリケーションに関連付けられた現在の状態を受信するステップとを実行させ、前記現在の状態は、前記第１のユーザセッションに関連付けられたスナップショットに対して、前記サーバが前記サーバアプリケーションの前記履歴に含まれるアクションを実行することで、当該履歴を反映したものであり、
前記サーバアプリケーションの前記クライアントアプリケーションとの間の前記第１のユーザセッション内で行なわれた前記１つ以上のアクションのうちの１つ以上を、前記第２のユーザセッション内でアンドゥするようにという要求を生成するステップと、
前記要求を前記サーバアプリケーションに送信することで、受信された前記現在の状態に基づいて、前記サーバアプリケーションの前記クライアントアプリケーションとの間の前記第２のユーザセッション内のデータを、前記第１のユーザセッション内のデータの状態を反映するように修正するステップとを実行させる、システム。
【請求項８】
前記第１のユーザセッション内で行なわれた前記１つ以上のアクションを、前記サーバアプリケーションの前記履歴に記録するために、前記クライアントコンピューティング装置は、前記サーバアプリケーションの現在の状態のスナップショットを生成するように構成される、請求項７に記載のシステム。
【請求項９】
前記第１のユーザセッション内で行なわれた前記１つ以上のアクションを、前記サーバアプリケーションの前記履歴に記録するために、前記クライアントコンピューティング装置は、前記サーバアプリケーションの以前の状態のチェックサムを用いて、前記サーバアプリケーションの現在の状態のスナップショットを生成するように構成される、請求項７または８に記載のシステム。
【請求項１０】
前記第１のユーザセッション内で行なわれた前記１つ以上のアクションを、前記サーバアプリケーションの前記履歴に記録するために、前記クライアントコンピューティング装置は、アンドゥ命令を用いて、前記サーバアプリケーションの現在の状態のスナップショットを生成するように構成される、請求項７〜９のいずれか１項に記載のシステム。
【請求項１１】
前記第１のユーザセッション内で行なわれた前記１つ以上のアクションを、前記サーバアプリケーションの前記履歴に記録するために、前記クライアントコンピューティング装置は、前記サーバアプリケーションの現在の状態のスナップショットを、前記現在の状態と以前の状態との違いに基づいて生成するように構成される、請求項７〜１０のいずれか１項に記載のシステム。
【請求項１２】
コンピュータ実行可能コードを含むコンピュータプログラムであって、
サーバ上で実行されるサーバアプリケーションのクライアントアプリケーションとの間の第１のユーザセッション内で行なわれた１つ以上のユーザの１つ以上のアクションを受信するためのコードと、
前記第１のユーザセッション内で行なわれた前記１つ以上のアクションを、前記サーバアプリケーションの履歴に記録するためのコードと、
前記サーバアプリケーションの前記クライアントアプリケーションとの間の第２のユーザセッションをインスタンス化するためのコードと、
前記サーバが生成した前記クライアントアプリケーションに関連付けられた現在の状態を受信するためのコードとを含み、前記現在の状態は、前記第１のユーザセッションに関連付けられたスナップショットに対して、前記サーバが前記サーバアプリケーションの前記履歴に含まれるアクションを実行することで、当該履歴を反映したものであり、
前記サーバアプリケーションの前記クライアントアプリケーションとの間の前記第１のユーザセッション内で行なわれた前記１つ以上のアクションのうちの１つ以上を、前記第２のユーザセッション内でアンドゥするようにという要求を生成するためのコードと、
前記要求を前記サーバアプリケーションに送信することで、受信された前記現在の状態に基づいて、前記サーバアプリケーションの前記クライアントアプリケーションとの間の前記第２のユーザセッション内のデータを、前記第１のユーザセッション内のデータの状態を反映するように修正するためのコードを含む、コンピュータプログラム。
【請求項１３】
方法であって、
サーバ上で実行されるサーバアプリケーションのクライアントアプリケーションとの間の第１のユーザセッション内で行なわれたユーザの１つ以上のアクションを、前記サーバが受信するステップと、
前記第１のユーザセッション内で行なわれた前記１つ以上のアクションを、前記サーバアプリケーションの履歴に、クライアントコンピューティング装置が記録するステップと、
前記サーバが前記クライアントアプリケーションに関連付けられた現在の状態を生成するステップとを含み、前記現在の状態は、前記第１のユーザセッションに関連付けられたスナップショットに対して、前記サーバが前記サーバアプリケーションの前記履歴に含まれるアクションを実行することで、当該履歴を反映したものであり、
前記サーバが前記現在の状態を前記クライアントコンピューティング装置に送信するステップと、
前記サーバアプリケーションの前記クライアントアプリケーションとの間の前記第１のユーザセッション内で行なわれた前記１つ以上のアクションのうちの１つ以上を、インスタンス化された第２のユーザセッション内でアンドゥするようにという要求を、前記サーバが前記クライアントコンピューティング装置から受信するステップとを含む、方法。
【発明の詳細な説明】
【技術分野】
【０００１】
発明の背景
アプリケーション開発フレームワーク（Application Development Framework：ＡＤＦ）は、アプリケーションの開発において直接的／間接的に使用され得る一組の予め定義されたコード／データモジュールを提供する。ＡＤＦはまた、開発者がアプリケーションの所望のロジックをより迅速／より単純な態様でコード化／実現することを容易にする、ＩＤＥ（integrated development environment：統合開発環境）、コード生成器、デバッガなどのツールを提供してもよい。
【背景技術】
【０００２】
一般に、ＡＤＦは、再使用可能なコンポーネントおよび統合開発環境を提供することによって、アプリケーションの開発を簡略化する。アプリケーション開発者らは、たとえば所望のタスクを行なうためのコンポーネントを選択し、選択されたコンポーネントの外観、挙動、およびやりとりを定義することによって、ユーザインターフェイスおよびアプリケーションロジックを定義するために、再使用可能なコンポーネントおよび統合開発環境を使用できる。ＡＤＦの中には、緩い結合とより簡単なアプリケーション開発および保守とを促進するモデル・ビュー・コントローラデザインパターンに基づくものもある。オラクルアプリケーション開発フレームワークは、このデザインパターンを利用するＡＤＦの一例である。
【０００３】
オラクルＡＤＦは、ビルトインのＨＴＭＬ５およびエイジャックス（Ajax）機能性を有する標準ベースのＪａｖａ（登録商標）サーバフェイス（Java Server Face：ＪＳＦ）コンポーネントのライブラリを含む。これらのコンポーネントにより、ウェブにデプロイされたユーザインターフェイスを、以前にシッククライアントアプリケーション用に確保された機能性およびやりとり性能のレベルを有するように開発することができる。コンポーネントは、リッチクライアントアプリケーション開発をこれまでよりも簡単にする一組の使いやすいコンポーネントにおいて、データやりとり、データ視覚化、およびカプセル化されたブラウザ側操作を提供する。オラクルＡＤＦはさらに、ＩＤＥにおける単純なドラッグアンドドロップ操作を通してビジネスサービスへのＵＩの結合を簡略化するデータ結合フレームワークを提供する。これは、インターフェイスへの注力からのビジネスサービスの独立を依然として保ちながら行なわれる。このフレームワークにより、ＵＩ開発者は、ビジネスサービス層の根底的実装から隔離される。これは、ＵＩを構築するプロセスをビジネスサービス層の実装から真に切り離し、アプリケーションをサービス指向アーキテクチャでの実装のためにより良好に位置付ける。
【０００４】
オラクルＡＤＦを含む多くの現代のコンピュータアプリケーションは、ユーザの直接呼び出しではない態様で実行されるアクションを取り入れている。一例は、ユーザが行なった作業をアプリケーションが周期的に保存する自動保存（またはオートセーブ）機能である。自動保存機能により、ユーザは、ユーザがデータの明確な保存を行なう機会を有する前にユーザのコンピュータシステムまたはアプリケーション自体が故障した場合にユーザの作業の大半が保護されるであろうということをより確信して、作業を続けることができる。
【０００５】
これらの自律的アクションは、たとえば、システム故障時に失われるかもしれない作業を保護したり、またはユーザの追加のキーストロークを省いたり、またはスクリーンディスプレイが不必要にごちゃごちゃにならないようにする上で有用であるものの、それらは他の点で欠点を有する場合がある。自動保存に関する１つの主な問題は、その呼び出しが、ユーザが操作をアンドゥする、または操作をリドゥする能力を取り除くことである。多くのコンピュータアプリケーションでは、ユーザが行なったアクションの履歴をアプリケーションが維持することはよくあることであり、そのため、アクションを逆行させることができる。アンドゥオプションを繰り返し使用することによって多数のアクションを後戻りさせることが、これらの環境において可能であるときもある。ユーザアクションをアンドゥするこの機能は有用であるが、現在の方法は典型的には、アンドゥ履歴におけるある数のアンドゥ操作に制限されている。さらに、アンドゥ履歴の寿命は通常、ユーザセッションの間のみである。
【０００６】
したがって、望まれるのは、自動保存を採用するアプリケーションにおけるアンドゥ履歴に関する問題を解決することであり、それらのうちのいくつかをここに説明する。加えて、望まれるのは、自動保存機能性を採用する現代のクラウドベースのアプリケーションに関する欠点を減らすことであり、それらのうちのいくつかをここに説明する。
【発明の概要】
【課題を解決するための手段】
【０００７】
発明の簡単な概要
この開示の以下の部分は、この開示において見出された１つ以上の革新、実施形態、および／または例の簡略化された概要を、少なくとも主題の基本的理解を提供するという目的のために提示する。この概要は、任意の特定の実施形態または例の広範な概要を提供することを試みていない。加えて、この概要は、実施形態または例の主要／重要要素を識別するよう、またはこの開示の主題の範囲を定めるよう意図されてはいない。したがって、この概要の１つの目的は、この開示において見出されたいくつかの革新、実施形態、および／または例を、後に提示されるより詳細な説明の前置きとして、簡略化された形で提示することであり得る。
【０００８】
さまざまな実施形態において、データセットを作成した完全なアクション履歴（ユーザアクション）を記録するシステムおよび方法が開示される。アクション履歴は次に、データセットの一部として取り入れられ得る。保存されたオブジェクトを与えられて、初期状態（たとえばコンテンツのないもの）と最終状態（たとえば保存されたコンテンツ）との間に経路が構築され得る。アクション履歴において後向きに進むことにより、ユーザは、初期状態までずっと、アクションをアンドゥし続けることができる。
【０００９】
この開示の主題の性質および均等物（ならびに、提供されたあらゆる固有のまたは明白な利点および改良）についてのさらなる理解が、この開示の残りの部分、あらゆる添付図面、および請求項を参照することにより、上述の区分に加えて実現されるはずである。
【００１０】
図面の簡単な説明
この開示において見出されたそれらの革新、実施形態、および／または例を適正に説明し図示するために、１つ以上の添付図面を参照してもよい。１つ以上の添付図面を説明するために使用される追加の詳細または例は、請求される発明のうちのいずれか、現在説明されている実施形態および／または例のうちのいずれか、もしくは、この開示において提示されたいずれかの革新の現在理解されている最良の形態への範囲の限定として考えられるべきでない。
【図面の簡単な説明】
【００１１】
【図１】この発明に従った一実施形態におけるアプリケーション開発フレームワーク（ＡＤＦ）を示すブロック図である。
【図２】この発明に従った一実施形態におけるユーザセッション間にわたる履歴を生成するための方法のフローチャートである。
【図３】この発明に従った一実施形態におけるユーザセッション間にわたる履歴を検索するための方法のフローチャートである。
【図４】この発明に従った一実施形態におけるセッション履歴における不一致を解消するための方法のフローチャートである。
【図５】実施形態のうちの１つを実現するための分散型システムの簡略図である。
【図６】この発明のさまざまな実施形態が実現され得る例示的なコンピュータシステムを示す図である。
【発明を実施するための形態】
【００１２】
発明の詳細な説明
以下の記載では、説明の目的のため、この発明の実施形態の完全な理解を提供するために特定の詳細が述べられる。しかしながら、これらの特定の詳細がなくてもさまざまな実施形態は実践され得る、ということは明らかであろう。図および説明は、限定的であるよう意図されてはいない。
【００１３】
はじめに
ＪａｖａＥＥは、今日の企業アプリケーションの多くにとっての基盤を形成する、標準の頑強でスケーラブルでセキュアなプラットフォームである。ＪａｖａＥＥは、Ｊａｖａ言語を使用して、多層アプリケーションを構築するための一組の仕様を提供する。過去においては、アプリケーションの頑強な性質と、それを達成するために必要とされる複雑性との間には、直接相関があった。しかしながら、オラクルＡＤＦなどのＡＤＦの出現により、極めてリッチなＪａｖａＥＥアプリケーションの実装が、標準パターンおよびプラクティスを守ることによって、大幅に減少した労力で提供され得る。
【００１４】
サービス指向アーキテクチャ（Service Oriented Architecture：ＳＯＡ）原理を利用する複合アプリケーションを組織が構築する必要性の増加により、開発者らは、極めてアジャイルなアプリケーションを作成することを強いられる。これらのベストプラクティスをアジャイルなアプリケーションで実現することは通常、かなりの量のインフラストラクチャコードを書くことを伴い、自分たちの最初のＪａｖａＥＥアプリケーションを構築する開発者らにとって別の障害を追加する。頑強で高性能で保守可能なアプリケーションを提供することに加えて、オラクルＡＤＦは、アジャイルなＳＯＡベースのアプリケーションを実装するためにインフラストラクチャコードを提供し、それにより、組織が「自作する」ことに伴う労力を取り除く。
【００１５】
オラクルＡＤＦはさらに、オラクルJDeveloper 11g開発ツールを通して、ＪａｖａＥＥ開発への視覚的および宣言的アプローチを提供する。オラクルＡＤＦはモデル・ビュー・コントローラデザインパターンを実装して、このアーキテクチャのすべての層を、オブジェクト／リレーショナルマッピング、データ持続性、再使用可能なコントローラ層、リッチなウェブユーザインターフェイスフレームワーク、ＵＩへのデータ結合、セキュリティおよびカスタム化などのエリアに対する解決策でカバーする統合的解決策を提供する。コアウェブベースのＭＶＣアプローチを超えて、ＡＤＦはまた、オラクルＳＯＡおよびウェブセンターポータル（WebCenter Portal）フレームワークと統合されて、完全な複合アプリケーションの作成を簡略化する。
【００１６】
たとえば、オラクルＡＤＦは、ＡＤＦにおけるビルトインビジネスサービスにサービスインターフェイスを結合することによって、サービスとしてデータを公開するアジャイルなアプリケーションを開発することを容易にする。ビジネスサービス実装詳細のこの分離は、オラクルＡＤＦにおいてメタデータを介して行なわれる。このメタデータ駆動型アーキテクチャの使用により、アプリケーション開発者らは、サービスがどのようにアクセスされるかの詳細にではなく、ビジネスロジックおよびユーザ体験に集中できるようになる。
【００１７】
オラクルＡＤＦは、これらのサービスの実装詳細を、ＡＤＦモデル層におけるメタデータに格納する。これにより、開発者らは、ユーザインターフェイスを修正することなくサービスを交換できるようになり、アプリケーションが非常にアジャイルになる。加えて、ユーザインターフェイスを作成する開発者は、ビジネスサービスアクセス詳細に悩まされる必要がない。代わりに、開発者らは、アプリケーションインターフェイスおよびやりとりロジックの開発に集中することができる。ユーザ体験を作り出すことは、ビジュアルページデザイナ上に所望のビジネスサービスをドラッグアンドドロップし、どのタイプのコンポーネントがそのデータを表わすべきかを示すのと同じくらい単純であり得る。
【００１８】
図１は、この発明に従った一実施形態におけるアプリケーション開発フレームワーク（ＡＤＦ）１００を示すブロック図である。図１は、この開示において提示された１つ以上の発明のさまざまな実施形態または実現化例を取り入れ得るシステムの簡略図である。図１は、ここに開示された発明の実施形態または実現化例が、請求項に記載されるような発明の範囲を限定すべきではないことを例示しているに過ぎない。当業者であれば、ここに提示されたこの開示および教示を通して、図に示された実施形態または実現化例に対する他の変形例、修正例、および／または代替例を認識するであろう。
【００１９】
ＡＤＦ１００は、一例ではオラクルＡＤＦとして具現化され得る。したがって、ＡＤＦ１００は、モデル・ビュー・コントローラ（Model-View-Controller：ＭＶＣ）デザインパターンに基づく。ＭＶＣアプリケーションは、１）データソースとのやりとりを扱い、ビジネスロジックを実行するモデル層と、２）アプリケーションユーザインターフェイスを扱うビュー層と、３）アプリケーションフローを管理し、モデル層とビュー層との間のインターフェイスとして作用するコントローラとに分離される。これら３つの層にアプリケーションを分離することは、アプリケーション間にわたるコンポーネントの保守および再使用を簡略化する。各層の他の層からの独立は、緩く結合されたサービス指向アーキテクチャ（ＳＯＡ）をもたらす。
【００２０】
この実施形態では、企業アプリケーションを形成するモジュールがＡＤＦ１００内にあるとして示されており、それらのモジュールはＡＤＦを使用して開発され、次にＡＤＦ１００のコンテキストにおいて実行されることが表わされている。簡潔にするために、ＪＡＶＡプログラミング言語と、オラクル・コーポレイションから入手可能な開発ツールであるJDeveloper 10.1.3の一部として利用可能なオラクルＡＤＦとを使用してアプリケーションが開発されると仮定して、ＡＤＦのさまざまな内部詳細は示されない。しかしながら、以下に説明される本発明の特徴は、ここに提供される開示を当業者が読めば明らかであるように、プログラミング言語とアプリケーション開発フレームワークとのあらゆる所望の組合せを用いて実現され得る。
【００２１】
さまざまな実施形態では、ＡＤＦ１００は、アプリケーションが多層の形で開発されることを可能にし、各層は、予め定義された仕様に従って所望のロジックを実現するコードモジュール／ファイルを含む。このため、一実施形態では、ＡＤＦ１００は、アプリケーションが、アプリケーションのユーザインターフェイスを提供するコードモジュール／ファイルを含むビュー層１１０と、アプリケーションのフローを制御するコードモジュールを含むコントローラ層１２０と、根底的データのための抽象化層を提供するデータ／コードモジュールを含むモデル層１３０と、さまざまなソースからのデータへのアクセスを提供し、ビジネスロジックを扱うコードモジュールを含むビジネスサービス層１４０という４つの層として開発されることを可能にする。
【００２２】
オラクルＡＤＦは、開発者らに、層の各々を実装する際に自分たちが使用したい技術を選択させる。図１は、オラクルＡＤＦアプリケーションを構築する際に開発者らが利用できるさまざまなオプションを示す。ＪａｖａＥＥアプリケーションのさまざまなコンポーネントを統合して開発を非常にフレキシブルにする接着剤が、オラクルＡＤＦモデル層である。ＥＪＢ、ウェブサービス（Web Services）、ＪａｖａＢｅａｎｓ、ＪＰＡ／エクリプスリンク（EclipseLink）／トップリンク（TopLink）オブジェクト、および他の多くがすべて、オラクルＡＤＦモデルのためのビジネスサービスとして使用可能である。ビュー層は、ＪＳＦ、デスクトップスイング（Desktop Swing）アプリケーション、およびＭＳオフィスフロントエンドを用いて実現されるウェブベースのインターフェイスと、モバイル装置のためのインターフェイスとを含み得る。
【００２３】
そのような層状アプローチを使用するアプリケーションの開発はしばしば、さまざまなアプリケーション間にわたるコンポーネント／コードモジュールの保守および再使用を簡略化する、ということが理解され得る。また、各層の他の層からの独立は、緩く結合されたサービス指向アーキテクチャ（ＳＯＡ）をもたらし、それは、開発されたビジネス／企業アプリケーションを複数の／異なるシステム上にデプロイする際に望ましい場合がある。
【００２４】
一局面では、ビュー層１１０は、開発中のアプリケーションのユーザインターフェイスを表わす。ビュー層１１０は、デスクトップビュー、モバイルビュー、およびブラウザベースのビューを有して示されており、それらの各々はユーザインターフェイスのすべてまたは一部を提供するとともに、ビュータイプに対応するさまざまな態様でアクセス可能である。たとえば、ウェブページが、対応するＵＲＬを含むクライアント要求を受信することに応答して、アプリケーションによって送信されてもよい。ウェブページは次に、要求元クライアントシステムに関連付けられた表示部（図示せず）上にブラウザによって表示されてもよく、それにより、要求元クライアントシステムのユーザが企業アプリケーションとやりとりすることを可能にする。オラクルＡＤＦは、ビジネスサービスの再使用を可能にするビジネスサービスへのマルチチャネルアクセスと、ウェブクライアント、クライアント・サーバ・スイングデスクトップベース・アプリケーション（client-server swing desktop-based application）、マイクロソフトエクセルスプレッドシート、スマートフォンなどのモバイル装置、などからのアクセスとをサポートする。
【００２５】
（ウェブページなどの）ビュー層を形成するコードファイル／モジュールは、ハイパーテキストマークアップ言語（hypertext markup language：ＨＴＭＬ）、Ｊａｖａサーバページ（Java server page：ＪＳＰ）、およびＪａｖａサーバフェイス（ＪＳＦ）のうちの１つ以上を使用して実現されてもよい。これに代えて、ユーザインターフェイスは、スイング（Swing）などのＪａｖａコンポーネントおよび／または拡張マークアップ言語（extensible markup language：ＸＭＬ）を使用して実現されてもよい。さらに示されるように、ユーザインターフェイスは、マイクロソフトによるワードおよびエクセルなどのデスクトップアプリケーションについてのユーザの経験および習熟を活用してもよい。
【００２６】
上述のように、ユーザが開発した関連するコード／データモジュールが、層の各々において提供される。しかしながら、各層は典型的には、ＡＤＦ１００によって提供された他の予め定義されたコード／データモジュールを含む。予め定義されたモジュールのうちのいくつかは、たとえば、ウェブページを開発するためのテンプレート、開発されたコードに所望の機能性を含めるためのテンプレートなどとして、開発中に使用されてもよい。（ＵＲＬ書換モジュールなどの）他の予め定義されたモジュールが、開発されたアプリケーションとともにデプロイされてもよく、企業アプリケーションの実行中に追加の機能性（要求されたＵＲＬの、内部名へのマッピング）をユーザに提供してもよい。
【００２７】
コントローラ層１２０は、アプリケーションのフローを制御するコードモジュール／ファイルを含む。各コントローラオブジェクトは、ビュー層１１０において情報を提示する所望の態様に従って実現されたソフトウェア命令および／またはデータを含む。所望の態様は、別のウェブページにおけるリンクがユーザによってクリック／選択されると表示される特定のウェブページ、実行中にエラーが起こると表示される、格納／検索すべき特定のデータを示すページなどを含んでいてもよい。
【００２８】
一局面では、コントローラ層１２０はアプリケーションフローを管理し、ユーザ入力を扱う。たとえば、ページ上でサーチボタンがクリックされると、コントローラは、どのアクションを行なうべきか（サーチを行なう）と、どこにナビゲートすべきか（結果ページ）とを判断する。JDeveloperでは、ウェブベースのアプリケーションについて、標準のＪＳＦコントローラ、またはＪＳＦコントローラ機能性を拡張するＡＤＦコントローラという２つのコントローラオプションがある。どちらのコントローラが使用されても、アプリケーションフローは典型的には、ページおよびナビゲーションルールをダイアグラム上にレイアウトすることによってデザインされる。アプリケーションのフローは、より小さい、再使用可能なタスクフローに分割可能であり、方法コールおよび決定ポイントなどの非視覚的コンポーネントをフローに含めることでき、単一の含有ページの領域内で実行される「ページフラグメント」フローを作成することができる。
【００２９】
コントローラ層１２０を形成するコードモジュール／ファイルはしばしば、クライアント要求を受信するととともに対応する応答として所望のウェブページを送信するＪａｖａサーブレットとして実現される。コントローラオブジェクトはまた、たとえば、アパッチジャカルタストラット（Apache Jakarta Struts）コントローラとして、またはＪＳＦ規格に従って実現されてもよい。
【００３０】
モデル層１３０は、図示されるように、さまざまなビジネスサービスを、それらを他の層で使用するオブジェクトに、たとえば上述のコントローラオブジェクトに、または直接デスクトップアプリケーションに接続する、データ／コードモジュールを含む。モデル層１３０の各抽象データオブジェクトは、任意のタイプのビジネスサービスにアクセスするために使用可能である対応するインターフェイスを提供し、根底的なビジネスサービス層１４０で実行される。データオブジェクトは、クライアントからサービスのビジネスサービス実装詳細を抽象化し、および／または、データ制御方法／属性をビューコンポーネントに公開してもよく、ビュー層とデータ層との分離を提供する。
【００３１】
一局面では、モデル層１３０は、データ制御およびデータ結合という２つのコンポーネントからなり、それらは、インターフェイスを定義するためにメタデータファイルを利用する。データ制御は、クライアントからビジネスサービス実装詳細を抽象化する。データ結合は、データ制御方法および属性をＵＩコンポーネントに公開し、ビューとモデルとのクリーンな分離を提供する。モデル層のメタデータアーキテクチャにより、開発者らは、任意のタイプのビジネスサービス層実装をビュー層およびコントローラ層に結合する際に、同じ開発経験を得る。
【００３２】
オラクルＡＤＦは、開発プロセス全体にわたって宣言的プログラミングパラダイムの使用を強調して、ユーザが、実現詳細に手をつける必要なく、アプリケーション作成のロジックに集中できるようにする。高レベルでは、フュージョン（Fusion）ウェブアプリケーションのための開発プロセスは通常、アプリケーションワークスペースを作成することを伴う。ウィザードを使用して、開発者が選択した技術にとって必要なライブラリおよび構成が自動的に追加され、アプリケーションが、パッケージおよびディレクトリを有するプロジェクトへと構造化される。
【００３３】
データベースオブジェクトをモデル化することにより、オンラインデータベースまたは任意のデータベースのオフラインレプリカが作成可能であり、定義が編集可能であり、スキーマが更新可能である。ＵＭＬモデラーを使用して、使用事例が次に、アプリケーションのために作成可能である。アプリケーション制御およびナビゲーションもデザイン可能である。アプリケーション制御およびナビゲーションのフローを視覚的に判断するために、ダイアグラマ（diagrammer）が使用可能である。次に、フローを記述する根底的なＸＭＬファイルが自動的に作成可能である。開発者が、インポートされたライブラリを、アプリケーションに単純にドラッグアンドドロップすることによって閲覧および使用することを可能にするために、リソースライブラリが使用可能である。データベーステーブルから、エンティティオブジェクトが、ウィザードまたはダイアログを使用して作成可能である。それらのエンティティオブジェクトから、ビューオブジェクトが、アプリケーションにおけるページによって使用されるように作成される。検証ルールおよび他のタイプのビジネスロジックが実現可能である。
【００３４】
この例では、ビジネスサービス層１４０は、データ持続性層とのやりとりを管理する。それは、データ持続性、オブジェクト／リレーショナルマッピング、トランザクション管理、およびビジネスロジック実行などのサービスを提供する。オラクルＡＤＦにおけるビジネスサービス層は、シンプルＪａｖａクラス、ＥＪＢ、ウェブサービス、ＪＰＡオブジェクト、およびオラクルＡＤＦビジネスコンポーネントといったオプションのうちのいずれかで実装可能である。加えて、データは、ファイル（ＸＭＬまたはＣＳＶ）およびＲＥＳＴから直接消費され得る。
【００３５】
このため、各ビジネスサービスは、対応するデータ持続性層とのやりとりを管理し、また、オブジェクト／リレーショナルマッピング、トランザクション管理、ビジネスロジック実行などのサービスを提供する。ビジネスサービス層は、シンプルＪａｖａクラス、エンタープライズＪａｖａＢｅａｎｓ、ウェブサービスなどのうちの１つ以上を使用して実装されてもよい。
【００３６】
ビジネスコンポーネントは、データベース、ウェブサービス、レガシーシステム、アプリケーションサーバなどとのやりとりを提供するために、たとえばオラクルＡＤＦビジネスコンポーネントを使用して実装されるビジネスサービスを表わす。一実施形態では、ビジネスサービス層１４０のビジネスコンポーネントは、ビジネスサービス実装を提供するために協働するアプリケーションモジュール、ビュー／クエリーオブジェクト、およびエンティティオブジェクトの混合を含む。アプリケーションモジュールは、アプリケーション／トランザクションデータと連携するためにＵＩクライアントが通信するトランザクションコンポーネント／コードモジュールであり得る。アプリケーションモジュールは、更新可能なデータモデルを提供してもよく、また、ユーザトランザクションに関する手順／機能（一般にサービス方法と呼ばれる）を提供してもよい。
【００３７】
エンティティオブジェクトは、データベーステーブルにおける対応する行を表わしてもよく、対応する行に格納されたデータの操作（更新、削除など）を簡略化する。エンティティオブジェクトはしばしば、所望のビジネスルールが一貫して実施されることを確実にするために、対応する行のためのビジネスロジックをカプセル化する。エンティティオブジェクトはまた、根底的なデータベースに格納された行間に存在する関係を反映するように、他のエンティティオブジェクトに関連付けられてもよい。
【００３８】
ユーザセッション間にわたるサポートを用いた自動保存
さまざまな実施形態において、データセットを作成した完全なアクション履歴（ユーザアクション）を記録するシステムおよび方法が開示される。アクション履歴は次に、データセットの一部として取り入れられ得る。保存されたオブジェクトを与えられて、初期状態（たとえばコンテンツのないもの）と最終状態（たとえば保存されたコンテンツ）との間に経路が構築され得る。アクション履歴において後向きに進むことにより、ユーザは、初期状態までずっと、アクションをアンドゥし続けることができる。
【００３９】
開示された手法は、アンドゥ状態がメモリに保持される従来のアプローチに少なくともいくつかの利点を提供する。これは通常、アンドゥ操作を予め定められた数のアンドゥに制限する。これは、厳密な数（たとえば、最新の１５個のアクションを記憶する）であるか、またはセッションベースである（たとえば、オンラインサービスは一般に、ブラウザを閉じるまでアンドゥ操作を可能にする）ことが多い。しかしながら、これらは双方とも制限されており、ユーザが以前のアクションをさらにアンドゥしたい場合、ユーザは制限される。
【００４０】
ユーザがコンテンツの状態を明確にフリーズさせ、または自動チェックポイントをイネーブルにすることができても、これらの解決策は、ユーザが自分のデータについてある時点に戻ることを可能にするだけである。この点は、ずっと以前かもしれず、ずっと先かもしれず、またはアクション間の開きが広すぎて、これらの解決策は、ユーザが自分のデータを検索したい時点にユーザを十分に連れていかない。
【００４１】
さまざまな実施形態では、ユーザの作業の自動保存は、ユーザが望ましくない作業を（それがどれほど以前に生成されたものであっても）捨てたり、または以前の操作を再度行なう能力を犠牲にしない。より複雑なクラウドベースのアプリケーション（すなわち、オンラインコードエディタが典型例である）が開発されるにつれて、作業を任意の時点に戻す能力は非常に貴重である。
【００４２】
図２は、この発明に従った一実施形態におけるユーザセッション間にわたる履歴を生成するための方法２００のフローチャートである。図２に示す方法２００における実現または処理は、コンピュータシステムまたは情報処理装置などのロジックマシンの中央処理装置（ＣＰＵまたはプロセッサ）によって実行される際にソフトウェア（たとえば命令またはコードモジュール）によって行なわれてもよく、電子装置または特定用途向け集積回路のハードウェアコンポーネントによって行なわれてもよく、または、ソフトウェア要素とハードウェア要素との組合せによって行なわれてもよい。図２に示す方法２００は、ステップ２１０で開始する。
【００４３】
ステップ２２０で、ユーザアクションを示す情報が受信される。いくつかのパーソナルコンピューティング装置を含む多種多様のコンピューティング装置は、イベント／アクションを追跡して記録するシステム（たとえばユーザインターフェイスシステム）を含むコンピューティング能力を含む。そのようなイベント／アクションは典型的には、ユーザによって直接行なわれたアクション（たとえば、キーストロークおよびポインタ（マウスまたはペン）移動）、ユーザによって間接的に起動されたアクション（たとえば、ユーザによって呼び出されたマクロまたはスクリプトによって行なわれたアクション）、自動的に呼び出されたアクション、などを含む。イベント／アクションは、それら自体の対応するイベント／アクションコードを有し得る。さまざまな実施形態では、イベント／アクションデータを格納するために、バッファを使用することができる。アプリケーションがユーザアクションの表示を受信し、適切なバッファからイベント／アクションデータを検索してもよい。
【００４４】
ステップ２３０で、ユーザアクションに基づいてアンドゥ情報が生成される。一実施形態では、任意のユーザアクションが起こると、そのアクションのために、以前の状態のチェックサム、現在の状態、およびアンドゥ命令が、タイムスタンプ情報とともに記録される。一局面では、以前の状態と現在の状態との違いに基づいて、現在の状態のスナップショットが記録される。さらに、その保存セッション中に行なわれたアクションを記録することができる。
【００４５】
ステップ２４０で、アンドゥ情報およびデータがサーバで記録される。一実施形態では、クライアント装置で自動保存が起こると、その保存セッション中に作成されたすべてのアクションが、サーバ（または保存サービス）に送信される。図２はステップ２５０で終了する。
【００４６】
図３は、この発明に従った一実施形態におけるユーザセッション間にわたる履歴を検索するための方法３００のフローチャートである。図３に示す方法３００における実現または処理は、コンピュータシステムまたは情報処理装置などのロジックマシンの中央処理装置（ＣＰＵまたはプロセッサ）によって実行される際にソフトウェア（たとえば命令またはコードモジュール）によって行なわれてもよく、電子装置または特定用途向け集積回路のハードウェアコンポーネントによって行なわれてもよく、または、ソフトウェア要素とハードウェア要素との組合せによって行なわれてもよい。図３に示す方法３００は、ステップ３１０で開始する。
【００４７】
ステップ３２０で、現在の状態への要求が受信される。たとえば、セッションを再開すると、ユーザは、現在のセッションをまたぐ１つ以上のアンドゥ操作を要求してもよい。アプリケーションがユーザアクションの表示を受信し、サーバから現在の状態のデータを要求してもよい。サーバは要求を受信し、セッション状態情報をどのように生成するかを判断してもよい。
【００４８】
ステップ３３０で、現在の状態を生成するために、１つ以上のアクションがリプレイ（replay）される。たとえば、現在の状態を生成するために、１つ以上の以前のセッション中に行なわれた、１つ以上の記録されたアクションがリプレイされ得る。サーバは、現在の状態を判断するために、以前のスナップショットおよびデルタを評価してもよい。現在の状態を生成するために、命令がサーバ上でリプレイされ得る（状態とアクションとが整合することを確実にする）。アクションはまた、データとともに記録される。データを復元することは最適化であり、そのため、チップデータを迅速に読むことができる。
【００４９】
ステップ３４０で、現在の状態はクライアント装置に送信される。図３はステップ３５０で終了する。
【００５０】
図４は、この発明に従った一実施形態におけるセッション履歴における不一致を解消するための方法４００のフローチャートである。図４に示す方法４００における実現または処理は、コンピュータシステムまたは情報処理装置などのロジックマシンの中央処理装置（ＣＰＵまたはプロセッサ）によって実行される際にソフトウェア（たとえば命令またはコードモジュール）によって行なわれてもよく、電子装置または特定用途向け集積回路のハードウェアコンポーネントによって行なわれてもよく、または、ソフトウェア要素とハードウェア要素との組合せによって行なわれてもよい。図４に示す方法４００は、ステップ４１０で開始する。
【００５１】
ステップ４２０で、セッション履歴に不一致が存在するかどうかについて判断が下される。たとえば、記録のためにアクションが送信されてもよいが、初期状態がアクションの以前の状態のチェックサムと整合しない。ステップ４３０で不一致が存在しないという判断が下されると、ステップ４７０で現在の状態を生成するために１つ以上のアクションがリプレイされる。ステップ４３０で不一致が存在するという判断が下されると、ステップ４４０で、ユーザは、不一致を解消するよう促される。さまざまな実施形態では、ユーザは、別の編集が起こったと通知され得る。ユーザは次に、自分のアクションを破棄して自分のデータを不一致のデータと置き替えるか、または自分のデータでオーバーライドするかを選択できる。
【００５２】
ステップ４５０でユーザが自分のアクションを破棄して自分のデータを不一致のデータと置き替えると決心すると、ステップ４７０で現在の状態を生成するために１つ以上のアクションがリプレイされる。サーバは、最新の以前の状態のチェックサムを新規アクションと整合させ、次に、他のアクションをそれらのクライアント上でリプレイするであろう。ステップ４５０でユーザがデータを自分のデータでオーバーライドすると決心すると、ステップ４６０で以前の状態は新規アクションと整合される。ステップ４７０で現在の状態を生成するために、サーバは、整合する最新の以前の状態のチェックサムを見つけ、次に、ユーザのアクションをリプレイすることができる。図４はステップ４５０で終了する。
【００５３】
結論
図のいくつかに示されたシステムは、さまざまな構成で提供されてもよい。いくつかの実施形態では、システムは、システムの１つ以上のコンポーネントが１つ以上のネットワークを通してクラウドコンピューティングシステムに分散される分散型システムとして構成されてもよい。
【００５４】
図５は、実施形態のうちの１つを実現するための分散型システム５００の簡略図を示す。図示された実施形態では、分散型システム５００は１つ以上のクライアントコンピューティング装置５０２、５０４、５０６、および５０８を含み、それらは、１つ以上のネットワーク５１０を通して、ウェブブラウザ、専用クライアント（たとえば、オラクル・フォームズ（Oracle Forms））などのクライアントアプリケーションを実行し、動作させるように構成される。サーバ５１２は、ネットワーク５１０を介して、リモートクライアントコンピューティング装置５０２、５０４、５０６、および５０８と通信可能に結合されてもよい。
【００５５】
さまざまな実施形態では、サーバ５１２は、システムのコンポーネントのうちの１つ以上によって提供される１つ以上のサービスまたはソフトウェアアプリケーションを実行するように適合されてもよい。いくつかの実施形態では、これらのサービスは、ウェブベースのサービスまたはクラウドサービスとして、もしくはソフトウェア・アズ・ア・サービス（Software as a Service：ＳａａＳ）モデルの下で、クライアントコンピューティング装置５０２、５０４、５０６、および／または５０８のユーザに提供されてもよい。クライアントコンピューティング装置５０２、５０４、５０６、および／または５０８を動作させるユーザは次に、これらのコンポーネントによって提供されるサービスを利用するためにサーバ５１２とやりとりするために、１つ以上のクライアントアプリケーションを利用してもよい。
【００５６】
図に示す構成では、システム５００のソフトウェアコンポーネント５１８、５２０および５２２は、サーバ５１２上で実現されるとして図示されている。他の実施形態では、システム５００のコンポーネントおよび／またはこれらのコンポーネントによって提供されるサービスのうちの１つ以上も、クライアントコンピューティング装置５０２、５０４、５０６、および／または５０８のうちの１つ以上によって実現されてもよい。クライアントコンピューティング装置を動作させるユーザは次に、これらのコンポーネントによって提供されるサービスを使用するために、１つ以上のクライアントアプリケーションを利用してもよい。これらのコンポーネントは、ハードウェア、ファームウェア、ソフトウェア、またはそれらの組合せで実現されてもよい。分散型システム５００とは異なり得るさまざまな異なるシステム構成が可能であることが理解されるべきである。図に示す実施形態はこのため、実施形態システムを実現するための分散型システムの一例であり、限定的であるよう意図されてはいない。
【００５７】
クライアントコンピューティング装置５０２、５０４、５０６、および／または５０８は、携帯型ハンドヘルド装置（たとえば、ｉＰｈｏｎｅ（登録商標）、携帯電話、ｉＰａｄ（登録商標）、コンピューティングタブレット、携帯情報端末（ＰＤＡ））またはウェアラブル装置（たとえば、グーグル・グラス（Google Glass）（登録商標）頭部装着型ディスプレイ）であってもよく、マイクロソフト・ウィンドウズ・モバイル（Microsoft Windows Mobile）（登録商標）などのソフトウェア、および／または、ｉＯＳ、ウィンドウズ（登録商標）フォン、アンドロイド（登録商標）、ブラックベリー（登録商標）１０、パームＯＳなどのさまざまなモバイルオペレーティングシステムを実行し、インターネット、電子メール、ショートメッセージサービス（short message service：ＳＭＳ）、ブラックベリー（登録商標）、または他の通信プロトコルに対応している。クライアントコンピューティング装置は、マイクロソフト・ウィンドウズ（登録商標）、アップル・マッキントッシュ（登録商標）、および／またはＬｉｎｕｘ（登録商標）オペレーティングシステムのさまざまなバージョンを実行するパーソナルコンピュータおよび／またはラップトップコンピュータを例として含む、汎用パーソナルコンピュータであり得る。クライアントコンピューティング装置は、たとえばグーグル・クロームＯＳなどのさまざまなＧＮＵ／Ｌｉｎｕｘオペレーティングシステムを何ら限定されることなく含む、商業的に入手可能なさまざまなＵＮＩＸ（登録商標）またはＵＮＩＸ様オペレーティングシステムのうちのいずれかを実行するワークステーションコンピュータであり得る。それに代えて、またはそれに加えて、クライアントコンピューティング装置５０２、５０４、５０６、および５０８は、ネットワーク５１０を通して通信可能である、シンクライアントコンピュータ、インターネット対応ゲーミングシステム（たとえば、Ｋｉｎｅｃｔ（登録商標）ジェスチャー入力装置を有する、または有さない、マイクロソフトＸｂｏｘゲーミングコンソール）、および／またはパーソナルメッセージング装置といった、任意の他の電子装置であってもよい。
【００５８】
例示的な分散型システム５００は４つのクライアントコンピューティング装置を有して図示されているが、任意の数のクライアントコンピューティング装置がサポートされてもよい。センサを有する装置などの他の装置が、サーバ５１２とやりとりしてもよい。
【００５９】
分散型システム５００におけるネットワーク５１０は、ＴＣＰ／ＩＰ（transmission control protocol/Internet protocol：伝送制御プロトコル／インターネットプロトコル）、ＳＮＡ（systems network architecture：システム・ネットワーク・アーキテクチャ）、ＩＰＸ（Internet packet exchange：インターネットパケット交換）、アップル・トーク（Apple Talk）などを何ら限定されることなく含む、商業的に入手可能なさまざまなプロトコルのうちのいずれかを使用してデータ通信をサポートできる、当業者にはよく知られた任意のタイプのネットワークであってもよい。単なる例として、ネットワーク５１０は、イーサネット（登録商標）、トークンリング（Token-Ring）などに基づくものといった、ローカルエリアネットワーク（local area network：ＬＡＮ）であり得る。ネットワーク５１０は、ワイドエリアネットワークおよびインターネットであり得る。それは、仮想プライベートネットワーク（virtual private network：ＶＰＮ）を何ら限定されることなく含む仮想ネットワーク、イントラネット、エクストラネット、公衆交換電話網（public switched telephone network：ＰＳＴＮ）、赤外線ネットワーク、無線ネットワーク（たとえば、電気電子技術者協会（the Institute of Electrical and Electronics：ＩＥＥＥ）８０２．１１プロトコルスイート、Bluetooth（登録商標）、および／または任意の他の無線プロトコルのうちのいずれかの下で動作するネットワーク）、ならびに／もしくは、これらのおよび／または他のネットワークの任意の組合せを含み得る。
【００６０】
サーバ５１２は、１つ以上の汎用コンピュータ、専用サーバコンピュータ（ＰＣ（パーソナルコンピュータ）サーバ、ＵＮＩＸ（登録商標）サーバ、ミッドレンジサーバ、メインフレームコンピュータ、ラックマウントサーバなどを例として含む）、サーバファーム、サーバクラスタ、もしくは任意の他の適切な構成および／または組合せで構成されてもよい。さまざまな実施形態では、サーバ５１２は、前述の開示で説明された１つ以上のサービスまたはソフトウェアアプリケーションを実行するように適合されてもよい。たとえば、サーバ５１２は、この開示の一実施形態に従った上述の処理を行なうためのサーバに対応していてもよい。
【００６１】
サーバ５１２は、上述のもののうちのいずれかを含むオペレーティングシステム、および商業的に入手可能な任意のサーバオペレーティングシステムを実行してもよい。サーバ５１２はまた、さまざまな追加のサーバアプリケーションおよび／または中間層アプリケーションのうちのいずれかを実行してもよく、ＨＴＴＰ（hypertext transport protocol：ハイパーテキスト伝送プロトコル）サーバ、ＦＴＰ（file transfer protocol：ファイル転送プロトコル）サーバ、ＣＧＩ（common gateway interface：コモンゲートウェイインターフェイス）サーバ、ＪＡＶＡ（登録商標）サーバ、データベースサーバなどを含む。例示的なデータベースサーバは、オラクル、マイクロソフト、サイベース（Sybase）、ＩＢＭ（International Business Machines：インターナショナル・ビジネス・マシーンズ）などから商業的に入手可能なものを何ら限定されることなく含む。
【００６２】
いくつかの実現化例では、サーバ５１２は、クライアントコンピューティング装置５０２、５０４、５０６、および５０８のユーザから受信されたデータフィードおよび／またはイベント更新を分析して統合するための１つ以上のアプリケーションを含んでいてもよい。一例として、データフィードおよび／またはイベント更新は、センサデータアプリケーション、金融ティッカー、ネットワーク性能測定ツール（たとえば、ネットワーク監視およびトラフィック管理アプリケーション）、クリックストリーム分析ツール、自動車交通監視などに関連するリアルタイムイベントを含み得る、１つ以上の第三者情報源および連続データストリームから受信されたツイッター（登録商標）フィード、フェースブック（登録商標）更新またはリアルタイム更新を含んでいてもよいが、それらに限定されない。サーバ５１２はまた、クライアントコンピューティング装置５０２、５０４、５０６、および５０８の１つ以上の表示装置を介してデータフィードおよび／またはリアルタイムイベントを表示するための１つ以上のアプリケーションを含んでいてもよい。
【００６３】
分散型システム５００はまた、１つ以上のデータベース５１４および５１６を含んでいてもよい。データベース５１４および５１６は、さまざまな場所に存在していてもよい。例として、データベース５１４および５１６のうちの１つ以上は、サーバ５１２に対してローカルな（および／または、サーバ５１２内にある）非一時的記憶媒体上に存在していてもよい。それに代えて、データベース５１４および５１６は、サーバ５１２からリモートであってもよく、ネットワークベースの接続または専用接続を介してサーバ５１２と通信してもよい。一組の実施形態では、データベース５１４および５１６は、ストレージエリアネットワーク（storage-area network：ＳＡＮ）に存在していてもよい。同様に、サーバ５１２に帰する機能を行なうための任意の必要なファイルが適宜、サーバ５１２上にローカルに格納されてもよく、および／またはリモートに格納されてもよい。一組の実施形態では、データベース５１４および５１６は、ＳＱＬフォーマットのコマンドに応答してデータを格納し、更新し、検索するように適合された、オラクルによって提供されるデータベースなどのリレーショナルデータベースを含んでいてもよい。
【００６４】
図６は、この発明のさまざまな実施形態が実現され得る例示的なコンピュータシステム６００を示す。システム６００は、上述のコンピュータシステムのうちのいずれかを実現するために使用されてもよい。図に示すように、コンピュータシステム６００は、バスサブシステム６０２を介して多くの周辺サブシステムと通信する処理部６０４を含む。これらの周辺サブシステムは、処理加速部６０６と、Ｉ／Ｏサブシステム６０８と、記憶サブシステム６１８と、通信サブシステム６２４とを含んでいてもよい。記憶サブシステム６１８は、有形のコンピュータ読取可能記憶媒体６２２と、システムメモリ６１０とを含む。
【００６５】
バスサブシステム６０２は、コンピュータシステム６００のさまざまなコンポーネントおよびサブシステムを意図されるように互いに通信させるためのメカニズムを提供する。バスサブシステム６０２は単一のバスとして概略的に図示されているが、バスサブシステムの代替的な実施形態は複数のバスを利用してもよい。バスサブシステム６０２は、さまざまなバスアーキテクチャのうちのいずれかを使用するメモリバスまたはメモリコントローラ、周辺バス、およびローカルバスを含む、いくつかのタイプのバス構造のうちのいずれかであってもよい。たとえば、そのようなアーキテクチャは、ＩＥＥＥ  Ｐ１３８６．１規格で製造されるメザニンバスとして実現可能な、産業標準アーキテクチャ（Industry Standard Architecture：ＩＳＡ）バス、マイクロチャネルアーキテクチャ（Micro Channel Architecture：ＭＣＡ）バス、強化ＩＳＡ（ＥＩＳＡ）バス、ビデオエレクトロニクス標準組織（Video Electronics Standards Association：ＶＥＳＡ）ローカルバス、および周辺コンポーネント相互接続（Peripheral Component Interconnect：ＰＣＩ）バスを含んでいてもよい。
【００６６】
１つ以上の集積回路（たとえば、従来のマイクロプロセッサまたはマイクロコントローラ）として実現され得る処理部６０４は、コンピュータシステム６００の動作を制御する。処理部６０４には、１つ以上のプロセッサが含まれていてもよい。これらのプロセッサは、シングルコアまたはマルチコアプロセッサを含んでいてもよい。ある実施形態では、処理部６０４は、各処理部にシングルまたはマルチコアプロセッサが含まれた、１つ以上の独立した処理部６３２および／または６３４として実現されてもよい。他の実施形態では、処理部６０４はまた、２つのデュアルコアプロセッサをシングルチップへと集積することによって形成されるクアッドコア処理部として実現されてもよい。
【００６７】
さまざまな実施形態では、処理部６０４は、プログラムコードに応答してさまざまなプログラムを実行でき、同時に実行される複数のプログラムまたはプロセスを維持できる。任意の所与の時間において、実行されるべきプログラムコードのうちのいくつかまたはすべては、プロセッサ６０４に、および／または記憶サブシステム６１８にあり得る。好適なプログラミングを通して、プロセッサ６０４は、上述のさまざまな機能性を提供できる。コンピュータシステム６００は加えて処理加速部６０６を含んでいてもよく、それは、デジタル信号プロセッサ（digital signal processor：ＤＳＰ）、専用プロセッサなどを含み得る。
【００６８】
Ｉ／Ｏサブシステム６０８は、ユーザインターフェイス入力装置と、ユーザインターフェイス出力装置とを含んでいてもよい。ユーザインターフェイス入力装置は、キーボード、マウスまたはトラックボールなどのポインティング装置、ディスプレイに組込まれたタッチパッドまたはタッチスクリーン、スクロールホイール、クリックホイール、ダイヤル、ボタン、スイッチ、キーパッド、音声コマンド認識システム付き音声入力装置、マイクロホン、および他のタイプの入力装置を含んでいてもよい。ユーザインターフェイス入力装置は、たとえば、ジェスチャーおよび口頭コマンドを使用したナチュラルユーザインターフェイスを通して、マイクロソフトＸｂｏｘ（登録商標）４６０ゲームコントローラなどの入力装置をユーザが制御し、それとやりとりすることを可能にする、マイクロソフトＫｉｎｅｃｔ（登録商標）運動センサなどの運動感知および／またはジェスチャー認識装置を含んでいてもよい。ユーザインターフェイス入力装置はまた、ユーザから目の活動（たとえば、写真撮影中および／またはメニュー選択中の「まばたき」）を検出し、アイジェスチャーを入力装置（たとえば、グーグル・グラス（登録商標））への入力として変換する、グーグル・グラス（登録商標）まばたき検出器などのアイジェスチャー認識装置を含んでいてもよい。加えて、ユーザインターフェイス入力装置は、ユーザが音声コマンドを通して音声認識システム（たとえば、Ｓｉｒｉ（登録商標）ナビゲータ）とやりとりできるようにする音声認識感知装置を含んでいてもよい。
【００６９】
ユーザインターフェイス入力装置はまた、３次元（３Ｄ）マウス、ジョイスティックまたはポインティングスティック、ゲームパッドおよびグラフィックタブレット、ならびに、スピーカ、デジタルカメラ、デジタルビデオカメラ、携帯型メディアプレイヤー、ウェブカメラ、画像スキャナ、指紋スキャナ、バーコードリーダ４Ｄスキャナ、４Ｄプリンタ、レーザー測距器、および視線追跡装置などの音声／視覚装置を、何ら限定されることなく含んでいてもよい。加えて、ユーザインターフェイス入力装置は、たとえば、コンピュータ断層撮影装置、磁気共鳴撮像装置、ポジトロン放出断層撮影装置、医療用超音波検査装置などの医療用撮像入力装置を含んでいてもよい。ユーザインターフェイス入力装置はまた、たとえば、ＭＩＤＩキーボード、デジタル楽器などの音声入力装置を含んでいてもよい。
【００７０】
ユーザインターフェイス出力装置は、表示サブシステム、表示灯、または、音声出力装置などの非視覚的ディスプレイを含んでいてもよい。表示サブシステムは、陰極線管（cathode ray tube：ＣＲＴ）、液晶ディスプレイ（liquid crystal display：ＬＣＤ）またはプラズマディスプレイを使用するものなどのフラットパネル装置、投影装置、タッチスクリーンなどであってもよい。一般に、「出力装置」という用語の使用は、コンピュータシステム６００からユーザまたは他のコンピュータに情報を出力するためのあらゆる可能なタイプの装置およびメカニズムを含むよう意図されている。たとえば、ユーザインターフェイス出力装置は、モニタ、プリンタ、スピーカ、ヘッドホン、自動車ナビゲーションシステム、プロッタ、音声出力装置、およびモデムといった、テキスト、グラフィックスおよび音声／映像情報を視覚的に伝えるさまざまな表示装置を、何ら限定されることなく含んでいてもよい。
【００７１】
コンピュータシステム６００は、現在システムメモリ６１０内に位置するとして図示された、ソフトウェア要素を含む記憶サブシステム６１８を含んでいてもよい。システムメモリ６１０は、処理部６０４上でロード可能および実行可能なプログラム命令と、これらのプログラムの実行中に生成されたデータとを格納してもよい。
【００７２】
コンピュータシステム６００の構成およびタイプに依存して、システムメモリ６１０は揮発性（ランダムアクセスメモリ（random access memory：ＲＡＭ）など）であってもよく、および／または不揮発性（読出専用メモリ（read-only memory：ＲＯＭ）、フラッシュメモリなど）であってもよい。ＲＡＭは典型的には、処理部６０４に直ちにアクセス可能であり、および／または処理部６０４によって現在動作および実行中のデータおよび／またはプログラムモジュールを含む。いくつかの実現化例では、システムメモリ６１０は、スタティックランダムアクセスメモリ（static random access memory：ＳＲＡＭ）またはダイナミックランダムアクセスメモリ（dynamic random access memory：ＤＲＡＭ）などの複数の異なるタイプのメモリを含んでいてもよい。いくつかの実現化例では、起動中などにコンピュータシステム６００内の要素間で情報を転送するのに役立つ基本ルーチンを含む基本入力／出力システム（basic input/output system：ＢＩＯＳ）が、典型的にはＲＯＭに格納されていてもよい。限定のためではなく例として、システムメモリ６１０はまた、クライアントアプリケーション、ウェブブラウザ、中央層アプリケーション、リレーショナルデータベース管理システム（relational database management system：ＲＤＢＭＳ）などを含み得るアプリケーションプログラム６１２と、プログラムデータ６１４と、オペレーティングシステム６１６とを示す。例として、オペレーティングシステム６１６は、マイクロソフト・ウィンドウズ（登録商標）、アップル・マッキントッシュ（登録商標）、および／またはＬｉｎｕｘオペレーティングシステムのさまざまなバージョン、商業的に入手可能なさまざまなＵＮＩＸ（登録商標）またはＵＮＩＸ様オペレーティングシステム（さまざまなＧＮＵ／Ｌｉｎｕｘオペレーティングシステム、グーグル・クローム（登録商標）ＯＳなどを何ら限定されることなく含む）、および／または、ｉＯＳ、ウィンドウズ（登録商標）フォン、アンドロイド（登録商標）ＯＳ、ブラックベリー（登録商標）１０ＯＳ、パーム（登録商標）ＯＳオペレーティングシステムなどのモバイルオペレーティングシステムを含んでいてもよい。
【００７３】
記憶サブシステム６１８はまた、いくつかの実施形態の機能性を提供する基本プログラミングおよびデータ構造を格納するための有形のコンピュータ読取可能記憶媒体を提供してもよい。プロセッサによって実行されると上述の機能性を提供するソフトウェア（プログラム、コードモジュール、命令）が、記憶サブシステム６１８に格納されてもよい。これらのソフトウェアモジュールまたは命令は、処理部６０４によって実行されてもよい。記憶サブシステム６１８はまた、この発明に従って使用されるデータを格納するためのリポジトリを提供してもよい。
【００７４】
記憶サブシステム６００はまた、コンピュータ読取可能記憶媒体６２２にさらに接続され得るコンピュータ読取可能記憶媒体リーダ６２０を含んでいてもよい。システムメモリ６１０とともに、およびオプションでシステムメモリ６１０と組合わされて、コンピュータ読取可能記憶媒体６２２は、リモート、ローカル、固定および／またはリムーバブルの記憶装置に加えて、コンピュータ読取可能情報を一時的におよび／またはより永続的に含み、格納し、送信し、検索するための記憶媒体を包括的に表わしてもよい。
【００７５】
コードまたはコードの一部を含むコンピュータ読取可能記憶媒体６２２はまた、情報の格納および／または送信のためのあらゆる方法または技術で実現される揮発性および不揮発性でリムーバブルおよび非リムーバブルの媒体を含むがそれらに限定されない記憶媒体および通信媒体を含む、当該技術分野において公知であるかまたは使用されるあらゆる適切な媒体を含み得る。これは、ＲＡＭ、ＲＯＭ、電子的消去可能プログラマブルＲＯＭ（electronically erasable programmable ROM：ＥＥＰＲＯＭ）、フラッシュメモリまたは他のメモリ技術、ＣＤ−ＲＯＭ、デジタル多用途ディスク（digital versatile disk：ＤＶＤ）または他の光学ストレージ、磁気カセット、磁気テープ、磁気ディスクストレージまたは他の磁気記憶装置、もしくは他の有形のコンピュータ読取可能媒体といった、有形のコンピュータ読取可能記憶媒体を含み得る。これは、所望の情報を送信するために使用可能であり、コンピューティングシステム６００によってアクセスされ得るデータ信号、データ送信、または任意の他の媒体といった、非有形のコンピュータ読取可能媒体も含み得る。
【００７６】
例として、コンピュータ読取可能記憶媒体６２２は、非リムーバブルで不揮発性の磁気媒体から読出し、またはそれに書込むハードディスクドライブ、リムーバブルで不揮発性の磁気ディスクから読出し、またはそれに書込む磁気ディスクドライブ、ならびに、ＣＤ  ＲＯＭ、ＤＶＤ、およびＢｌｕ−Ｒａｙ（登録商標）ディスク、または他の光学媒体といった、リムーバブルで不揮発性の光ディスクから読出し、またはそれに書込む光ディスクドライブを含んでいてもよい。コンピュータ読取可能記憶媒体６２２は、Ｚｉｐ（登録商標）ドライブ、フラッシュメモリカード、ユニバーサルシリアルバス（universal serial bus：ＵＳＢ）フラッシュドライブ、セキュアデジタル（secure digitalＳＤ）カード、ＤＶＤディスク、デジタルビデオテープなどを含んでいてもよいが、それらに限定されない。コンピュータ読取可能記憶媒体６２２はまた、フラッシュメモリベースのソリッドステートドライブ（solid-state drive：ＳＳＤ）、企業フラッシュドライブ、ソリッドステートＲＯＭといった、不揮発性メモリに基づいたＳＳＤ、ソリッドステートＲＡＭ、ダイナミックＲＡＭ、スタティックＲＡＭ、ＤＲＡＭベースのＳＳＤ、磁気抵抗ＲＡＭ（ＭＲＡＭ）ＳＳＤといった、揮発性メモリに基づいたＳＳＤ、および、ＤＲＡＭベースのＳＳＤとフラッシュメモリベースのＳＳＤとの組合せを使用するハイブリッドＳＳＤを含んでいてもよい。ディスクドライブおよびそれらの関連付けられたコンピュータ読取可能媒体は、コンピュータ読取可能命令、データ構造、プログラムモジュールおよび他のデータの不揮発性ストレージをコンピュータシステム６００に提供してもよい。
【００７７】
通信サブシステム６２４は、他のコンピュータシステムおよびネットワークへのインターフェイスを提供する。通信サブシステム６２４は、コンピュータシステム６００とは別のシステムからデータを受信し、別のシステムにデータを送信するためのインターフェイスとして機能する。たとえば、通信サブシステム６２４は、コンピュータシステム６００がインターネットを介して１つ以上の装置に接続できるようにしてもよい。いくつかの実施形態では、通信サブシステム６２４は、（たとえば、４Ｇ、４Ｇ、またはＥＤＧＥ（enhanced data rates for global evolution：エンハンスト・データレート・フォー・グローバル・エボリューション）、ＷｉＦｉ（ＩＥＥＥ８０２．１１ファミリー規格）、または他の移動通信技術、またはそれらの任意の組合せといった携帯電話技術、高度なデータネットワーク技術を使用した）無線音声および／またはデータネットワークにアクセスするための無線周波数（radio frequency：ＲＦ）トランシーバコンポーネント、全地球測位システム（global positioning system：ＧＰＳ）受信機コンポーネント、および／または他のコンポーネントを含み得る。いくつかの実施形態では、通信サブシステム６２４は、無線インターフェイスに加えて、またはその代わりに、有線ネットワーク接続（たとえば、イーサネット）を提供できる。
【００７８】
いくつかの実施形態では、通信サブシステム６２４はまた、コンピュータシステム６００を使用し得る１人以上のユーザのために、構造化および／または非構造化データフィード６２６、イベントストリーム６２８、イベント更新６３０などの形をした入力通信を受信してもよい。
【００７９】
例として、通信サブシステム６２４は、ツイッター（登録商標）フィード、フェースブック（登録商標）更新、リッチ・サイト・サマリー（Rich Site Summary：ＲＳＳ）フィードなどのウェブフィード、および／または１つ以上の第三者情報源からのリアルタイム更新といった、ソーシャルネットワークおよび／または他の通信サービスのユーザからのデータフィード６２６をリアルタイムで受信するように構成されてもよい。
【００８０】
加えて、通信サブシステム６２４はまた、リアルタイムイベントのイベントストリーム６２８および／またはイベント更新６３０を含み得る、明確な終わりがなく本質的に連続的または無限であり得る連続データストリームの形をしたデータを受信するように構成されてもよい。連続データを生成するアプリケーションの例は、たとえば、センサデータアプリケーション、金融ティッカー、ネットワーク性能測定ツール（たとえば、ネットワーク監視およびトラフィック管理アプリケーション）、クリックストリーム分析ツール、自動車交通監視などを含んでいてもよい。
【００８１】
通信サブシステム６２４はまた、構造化および／または非構造化データフィード６２６、イベントストリーム６２８、イベント更新６３０などを、コンピュータシステム６００に結合された１つ以上のストリーミングデータソースコンピュータと通信し得る１つ以上のデータベースに出力するように構成されてもよい。
【００８２】
コンピュータシステム６００は、ハンドヘルド携帯装置（たとえば、ｉＰｈｏｎｅ（登録商標）携帯電話、ｉＰａｄ（登録商標）コンピューティングタブレット、ＰＤＡ）、ウェアラブル装置（たとえば、グーグル・グラス（登録商標）頭部装着型ディスプレイ）、ＰＣ、ワークステーション、メインフレーム、キオスク、サーバラック、または任意の他のデータ処理システムを含む、さまざまなタイプのうちの１つであり得る。
【００８３】
コンピュータおよびネットワークの絶えず変化する性質により、図に示すコンピュータシステム６００の説明は、単に特定の一例として意図される。図に示すシステムよりも多い、または少ないコンポーネントを有する多くの他の構成が可能である。たとえば、カスタマイズされたハードウェアも使用されてもよく、および／または、特定の要素が、ハードウェア、ファームウェア、ソフトウェア（アプレットを含む）、または組合せで実現されてもよい。また、ネットワーク入力／出力装置などの他のコンピューティング装置への接続が採用されてもよい。ここに提供される開示および教示に基づいて、当業者であれば、さまざまな実施形態を実現するための他のやり方および／または方法を理解するであろう。
【００８４】
前述の明細書では、この発明の局面がその特定の実施形態に関して説明されているが、当業者であれば、この発明がそれらに限定されないことを認識するであろう。上述の発明のさまざまな特徴および局面は、個々にまたはともに使用されてもよい。また、実施形態は、明細書のより広範な精神および範囲から逸脱することなく、ここに説明されたものを超えるあらゆる数の環境および用途において利用され得る。したがって、明細書および図面は、限定的ではなく例示的であるとみなされるべきである。
【００８５】
その教示がこの開示において提示され得る１つ以上の発明のうちのいずれかのさまざまな実施形態が、ソフトウェア、ファームウェア、ハードウェア、またはそれらの組合せにおけるロジックの形で実現され得る。ロジックは、この開示において提示された発明のさまざまな実施形態において開示され得る一組のステップを行なうように、ロジックマシンの中央処理装置（ＣＰＵまたはプロセッサ）に指示するように適合された一組の命令として、マシンアクセス可能なメモリ、マシン読取可能な物品（article）、有形のコンピュータ読取可能媒体、コンピュータ読取可能記憶媒体、または他のコンピュータ／マシン読取可能媒体に格納されてもよい。ロジックは、コードモジュールが、この開示において提示された発明のさまざまな実施形態において方法またはプロセスを行なうために実行される際に、コンピュータシステムまたは情報処理装置のプロセッサにより動作可能になると、ソフトウェアプログラムまたはコンピュータプログラム製品の一部を形成してもよい。ここに提供されたこの開示および教示に基づいて、当業者であれば、提示された発明の１つ以上のさまざまな実施形態の開示された動作または機能性のいずれかを、ソフトウェア、ファームウェア、ハードウェア、またはそれらの組合せで実現するための他のやり方、変形例、修正例、代替例、および／または方法を理解するであろう。
【００８６】
その教示がこの開示において提示され得るそれらの発明のうちのいずれか１つの開示された例、実現化例、およびさまざまな実施形態は、この開示の教示を適正な明確性で当業者に伝えるように例示的であるに過ぎない。これらの実現化例および実施形態は例示的な図解または特定の図を参照して説明され得るため、説明された方法および／または特定の構造のさまざまな修正例または適合例が、当業者には明らかとなり得る。ここに見出されたこの開示およびこれらの教示に依存し、かつ、教示が技術を進歩させた際に経た、すべてのそのような修正例、適合例、または変形例は、その教示がこの開示において提示され得る１つ以上の発明の範囲内にあると考えられるべきである。よって、開示において提示された発明は、具体的に示された実施形態にまったく限定されないということが理解されるため、本説明および図面は限定的な意味で考えられるべきでない。
【００８７】
したがって、上述の説明およびあらゆる添付図面、図解、および図は、限定的ではなく例示的であるよう意図されている。この開示において提示されたあらゆる発明の範囲はしたがって、上述の説明および図に示されたそれらの実施形態を単純に参照するのではなく、係属中の請求項をそれらの完全な範囲または均等物とともに参照して、判断されるべきである。
【図１】
0006684778.tif 000002
【図２】
0006684778.tif 000003
【図３】
0006684778.tif 000004
【図４】
0006684778.tif 000005
【図５】
0006684778.tif 000006
【図６】
0006684778.tif 000007