(57)【要約】  モバイル装置用に構築されたネイティブアプリケーションは、ネイティブアプリケーション内にライブラリとして埋込まれたＪＡＶＡ仮想マシンによって実行され得る非ネイティブＪＡＶＡコードを、同様に埋込むことができる。企業アプリケーションはモバイル装置による使用のために拡張され得る。アプリケーション用のビジネスロジックが、一度だけ構築され、次に企業アプリケーションおよびモバイル装置アプリケーションの双方において使用され得る。
2015503799.tif 000002
【特許請求の範囲】
【請求項１】
方法であって、
コンピューティング装置によって実行されるネイティブエンティティとコンピューティング装置によって実行されるＪＡＶＡエンティティとの間の通信を容易にするために、コンピューティング装置によって通信チャネルを確立するステップを含み、ネイティブエンティティは、コンピューティング装置のオペレーティングシステム上で作動するように構成されており、前記方法はさらに、
通信チャネルを用いたネイティブエンティティとＪＡＶＡエンティティとの間の１つ以上のメッセージの通信を、コンピューティング装置によって可能にするステップを含む、方法。
【請求項２】
コンピューティング装置は、モバイルコンピューティング装置である、請求項１に記載の方法。
【請求項３】
ネイティブエンティティは、第１のアドレス空間で実行され、
ＪＡＶＡエンティティは、第１のアドレス空間から分離された第２のアドレス空間で実行される、請求項１に記載の方法。
【請求項４】
コンピューティング装置によって、ネイティブアプリケーションを実行するステップをさらに含み、
第１のアドレス空間および第２のアドレス空間は、ネイティブアプリケーションのアドレス空間内にある、請求項３に記載の方法。
【請求項５】
ＪＡＶＡエンティティ内の複数のオブジェクトのうちの各オブジェクトのために、別個の通信チャネルを確立するステップをさらに含み、
複数のオブジェクトのうちの各特定のオブジェクトのために、その特定のオブジェクトとネイティブエンティティとの間の通信が、その特定のオブジェクトのために確立された通信チャネルのみを通して行なわれ、
複数のオブジェクトのうちの他のすべてのオブジェクトは、特定のオブジェクトのために確立された通信チャネルを使用しないよう防止されている、請求項１に記載の方法。
【請求項６】
ネイティブエンティティ内にキャッシュを保持するステップと、
ある特定のＪＡＶＡオブジェクトに関係しているデータがキャッシュに書込まれたことを検出したことに応答して、通信チャネルを介し、ＪＡＶＡエンティティ内の特定のＪＡＶＡオブジェクトに、前記書込みによって生じたデータ変更を伝搬するステップとをさらに含む、請求項１に記載の方法。
【請求項７】
システムであって、
メモリと、
メモリに連結されたプロセッサとを含み、
プロセッサは、
システムによって実行されるネイティブエンティティとシステムによって実行されるＪＡＶＡエンティティとの間の通信を容易にするために、通信チャネルを確立するように構成されており、ネイティブエンティティは、プロセッサのオペレーティングシステム上で作動するように構成されており、プロセッサはさらに、
通信チャネルを用いたネイティブエンティティとＪＡＶＡエンティティとの間の１つ以上のメッセージの通信を可能にするように構成されている、システム。
【請求項８】
システムは、モバイルコンピューティング装置である、請求項７に記載のシステム。
【請求項９】
ネイティブエンティティは、第１のアドレス空間で実行され、
ＪＡＶＡエンティティは、第１のアドレス空間から分離された第２のアドレス空間で実行される、請求項７に記載のシステム。
【請求項１０】
プロセッサは、ネイティブアプリケーションを実行するように構成されており、
第１のアドレス空間および第２のアドレス空間は、ネイティブアプリケーションのアドレス空間内にある、請求項９に記載のシステム。
【請求項１１】
プロセッサは、ＪＡＶＡエンティティ内の複数のオブジェクトのうちの各オブジェクトのために、別個の通信チャネルを確立するように構成されており、
複数のオブジェクトのうちの各特定のオブジェクトのために、その特定のオブジェクトとネイティブエンティティとの間の通信が、その特定のオブジェクトのために確立された通信チャネルのみを通して行なわれ、
複数のオブジェクトのうちの他のすべてのオブジェクトは、特定のオブジェクトのために確立された通信チャネルを使用しないよう防止されている、請求項７に記載のシステム。
【請求項１２】
プロセッサは、
ネイティブエンティティ内にキャッシュを保持し、
ある特定のＪＡＶＡオブジェクトに関係しているデータがキャッシュに書込まれたことを検出したことに応答して、通信チャネルを介し、ＪＡＶＡエンティティ内の特定のＪＡＶＡオブジェクトに、前記書込みによって生じたデータ変更を伝搬するように構成されている、請求項７に記載のシステム。
【請求項１３】
１つ以上のプロセッサによって実行されると、１つ以上のプロセッサに以下のステップを行なわせる複数の命令を格納する、非一時的コンピュータ読取可能記憶媒体であって、前記ステップは、
コンピューティング装置によって実行されるネイティブエンティティとコンピューティング装置によって実行されるＪＡＶＡエンティティとの間の通信を容易にするために、コンピューティング装置によって通信チャネルを確立するステップを含み、ネイティブエンティティは、コンピューティング装置のオペレーティングシステム上で作動するように構成されており、前記ステップはさらに、
通信チャネルを用いたネイティブエンティティとＪＡＶＡエンティティとの間の１つ以上のメッセージの通信を、コンピューティング装置によって可能にするステップを含む、非一時的コンピュータ読取可能記憶媒体。
【請求項１４】
コンピューティング装置は、モバイルコンピューティング装置である、請求項１３に記載の非一時的コンピュータ読取可能記憶媒体。
【請求項１５】
ネイティブエンティティは、第１のアドレス空間で実行され、
ＪＡＶＡエンティティは、第１のアドレス空間から分離された第２のアドレス空間で実行される、請求項１３に記載の非一時的コンピュータ読取可能記憶媒体。
【請求項１６】
前記ステップは、コンピューティング装置によって、ネイティブアプリケーションを実行するステップをさらに含み、
第１のアドレス空間および第２のアドレス空間は、ネイティブアプリケーションのアドレス空間内にある、請求項１５に記載の非一時的コンピュータ読取可能記憶媒体。
【請求項１７】
前記ステップは、ＪＡＶＡエンティティ内の複数のオブジェクトのうちの各オブジェクトのために、別個の通信チャネルを確立するステップをさらに含み、
複数のオブジェクトのうちの各特定のオブジェクトのために、その特定のオブジェクトとネイティブエンティティとの間の通信が、その特定のオブジェクトのために確立された通信チャネルのみを通して行なわれ、
複数のオブジェクトのうちの他のすべてのオブジェクトは、特定のオブジェクトのために確立された通信チャネルを使用しないよう防止されている、請求項１３に記載の非一時的コンピュータ読取可能記憶媒体。
【請求項１８】
前記ステップは、
ネイティブエンティティ内にキャッシュを保持するステップと、
ある特定のＪＡＶＡオブジェクトに関係しているデータがキャッシュに書込まれたことを検出したことに応答して、通信チャネルを介し、ＪＡＶＡエンティティ内の特定のＪＡＶＡオブジェクトに、前記書込みによって生じたデータ変更を伝搬するステップとをさらに含む、請求項１３に記載の非一時的コンピュータ読取可能記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
優先権の主張
本願は、２０１１年１２月２９日に出願された、「モバイルアプリケーションにおけるＪＡＶＡ機能性のイネーブル化」（ENABLING JAVA FUNCTIONALITY IN MOBILE APPLICATIONS）と題された米国仮特許出願整理番号第６１／５８１，４６３号への、米国特許法第１１９条による優先権を主張し、その内容全体はここに引用により援用される。
【背景技術】
【０００２】
背景
企業アプリケーションの構築には、多大な時間と労力が投入されている。そのようなアプリケーションの開発は、複数のユーザインターフェイスの仕様と、それらのユーザインターフェイスの要素とのユーザのやり取りに基づいて呼び出される対応するビジネスロジックとを伴う場合がある。最近、スマートフォンなどのモバイル装置は非常に人気が高くなり、人が日常的に使用する可能性が最も高いかもしれない第１位のコンピューティング装置になっている。残念ながら、企業シナリオ用に開発されたアプリケーションは、モバイル装置のコンテキストに簡単に移植することができないことが多い。自分の企業アプリケーションをモバイル装置で利用できるようにしたいアプリケーション開発者が時々直面する障害のうちの１つは、企業アプリケーションがＪＡＶＡ（登録商標）プログラミング言語に極度に依存するかもしれず、一方、モバイル装置はその言語で特定されるコマンドを解釈するやり方を何も有さないかもしれない、という可能性である。モバイル装置は、ＪＡＶＡ仮想マシンで構成されていないことが多い。したがって、アプリケーション開発者らは、モバイル装置上での実行用にアプリケーションを作成する際に、そのアプリケーション用のビジネスロジックのかなりの部分がＪＡＶＡベースの企業アプリケーション内に既に存在し得るシナリオにおいてさえ、自分たちがほとんどやり直さなければならないことに気づいて落胆することが多い。
【図面の簡単な説明】
【０００３】
【図１】発明の一実施例に従った、柔軟なランタイムアーキテクチャの一例を示すブロック図である。
【図２】発明の一実施例に従った、ネイティブエンティティとＪＡＶＡエンティティとの間のメッセージフローをＶＭチャネルがどのように容易にし得るかの一例を示す図である。
【図３】発明の一実施例に従った、ＶＭチャネルのための状態図である。
【図４Ａ】発明の一実施例に従った、ＶＭチャネルを作成し、ＶＭチャネル用のリスナを登録し、ＶＭチャネルを削除するための制御メッセージシーケンス図である。
【図４Ｂ】発明の一実施例に従った、ＶＭチャネルを作成し、ＶＭチャネル用のリスナを登録し、ＶＭチャネルを削除するための制御メッセージシーケンス図である。
【図５】この発明の一実施例に従った、使用され得るシステム環境のコンポーネントを示す簡略化されたブロック図である。
【図６】この発明の実施例に従った、使用され得るコンピュータシステムの簡略化されたブロック図である。
【発明を実施するための形態】
【０００４】
詳細な説明
以下の説明では、説明の目的で、特定の詳細が、発明の実施例の完全な理解を提供するために述べられる。しかしながら、発明がこれらの特定の詳細なしで実行され得ることは明らかであろう。
【０００５】
概要
モバイル装置用にアプリケーションを構築できる環境が開示される。より具体的には、モバイル装置用にネイティブアプリケーションを構築できる環境が開示される。ここに使用されるように、「ネイティブ」とは、アプリケーション用のソースコードを書くために使用されるプログラミング言語が、モバイル装置のオペレーティングシステムまたはプラットフォームに対応していることを意味する。このため、ｉＯＳのプラットフォームを有するモバイル装置上では、ネイティブアプリケーションはオブジェクティブＣプログラミング言語で書かれる場合がある。アンドロイドのプラットフォームを有するモバイル装置上では、ネイティブアプリケーションはＪＡＶＡプログラミング言語で書かれる場合がある。モバイル装置のユーザの視点から見ると、ネイティブアプリケーションはモバイル装置によってダウンロードされ、モバイル装置上で実行される。
【０００６】
ここに説明される技術を使用すれば、企業アプリケーションはモバイル装置による使用のために拡張され得る。アプリケーション用のビジネスロジックが、一度だけ構築され、次に企業アプリケーションおよびモバイル装置アプリケーションの双方において使用され得る。
【０００７】
コンテナ
発明の実施例は「コンテナ」を伴っていてもよく、それは、モバイル装置のプラットフォームに対応するネイティブプログラミングコードで書かれている。コンテナは、ネイティブアプリケーションがモバイル装置のオペレーティングシステムとやり取りすることを可能にするために必要とされるコンポーネントをすべて含んでいる。これらのコンポーネントは、典型的なアプリケーションであれば実行できなければならないであろうあらゆる種類の動作を、ネイティブアプリケーションが実行することを可能にする。そのような動作は、事象をリッスンすること、事象に反応すること、システムリソースを制御すること、および、ユーザインターフェイスを表示することを含んでいてもよい。コンテナはまた、セキュリティ特性を提供してもよい。
【０００８】
上述のように、モバイル装置用にネイティブアプリケーションを構築できる環境が開示される。異なるモバイル装置のプラットフォームのために、異なる環境が構築されてもよい。たとえば、ある環境はオブジェクティブＣプログラミング言語で構築されてもよく、一方、別の環境はＪＡＶＡプログラミング言語で構築されてもよい。理想的には、アプリケーション開発者は、環境を構築したプログラミング言語の詳細について心配しなければならないことから免れる。したがって、ネイティブアプリケーション用の環境を提供するコンテナが、アプリケーション開発者のために生成される。
【０００９】
埋込まれたＪＡＶＡ仮想マシン
発明の一実施例では、ＪＡＶＡ仮想マシン（JAVA Virtual Machine：ＪＶＭ）がコンテナ内に埋込まれている。ＪＶＭは、ライブラリとして、またはスレーブプロセスとして埋込まれてもよい。ＪＶＭは、ネイティブアプリケーションがＪＡＶＡプログラミング言語でビジネスロジックを実行することを可能にする。ネイティブアプリケーションがＪＡＶＡプログラミング言語で書かれていなくても、これがあてはまる場合がある。コンテナ内で、ＪＶＭは、ネイティブアプリケーションのＪＡＶＡベースのビジネスロジックを解釈し、または他の態様で行使してもよい。
【００１０】
ウェブビュー
発明の一実施例では、ネイティブアプリケーションのユーザインターフェイスは、コンテナ内のウェブビューコンポーネントを利用する。これは、ネイティブアプリケーションがハイパーテキストマークアップ言語（Hypertext Markup Language：ＨＴＭＬ）５．０を使用してユーザインターフェイスを生成することを可能にする。そのようなユーザインターフェイスは、モバイル装置上で実行されるブラウザアプリケーションによって見られてもよい。コンテナ内の接続コンポーネントが、ウェブビューコンポーネントを埋込まれたＪＶＭと接続して、ユーザインターフェイスとＪＶＭとのやり取りをシームレスにする。これらの接続コンポーネントは、ネイティブアプリケーションに代わって、インターフェイスとロジックとの橋渡しのすべてを取扱う。ウェブビューコンポーネントとＪＶＭとの間の通信は、順方向であっても逆方向であってもよく、情報は、接続コンポーネントを通して、ウェブビューコンポーネントからＪＶＭに、およびＪＶＭからウェブビューコンポーネントに流れてもよい。そのような通信は、データ変更が生じ、ネイティブアプリケーションの他の局面へと波及することを可能にする。
【００１１】
モジュラー要素
発明の一実施例では、上述の環境は、ネイティブアプリケーションのモジュラー要素の構築を可能にする。これらのモジュラー要素の各々は、ネイティブアプリケーションの「特性」と呼ばれる。各特性は、その特性のデータおよび動作を他の特性のデータおよび動作から切り離して、ある特性が別の特性を意図せず損なわないようにする小型のサンドボックスとして、概念的に想像されてもよい。特性「Ａ」および「Ｂ」が存在すると仮定すると、特性「Ａ」内で行なわれたどの動作も特性「Ａ」内にとどまり、「アプリケーションスコープ」レベルのある許可されたインスタンスを除き、特性「Ｂ」とのやり取りを引き起こさない。このため、アプリケーション開発者は、あらかじめ構築された特性を採用し、それらを、完全なアプリケーションを構築するための構築ブロックとして使用することができる。アプリケーションの各特性は、そのアプリケーションの特性の各々から保護され、それにより全面的なセキュリティを提供しつつ、コンポーネント間の接続性が達成される。
【００１２】
ユーザインターフェイス
発明の一実施例では、ネイティブアプリケーションのユーザインターフェイスは、本格的なオラクルアプリケーション開発フレームワークで見られるものと似ている。発明の一実施例では、ユーザインターフェイスは、開発者によって開発環境で構築される。この環境において、開発者は、１組のユーザインターフェイスコンポーネントから、構築中のユーザインターフェイスへと、ユーザインターフェイスコンポーネントをドラッグ・アンド・ドロップする。これらのコンポーネントは、これらのコンポーネントを互いに機能的に接続するために、ともにドラッグ・アンド・ドロップされてもよい。発明の一実施例では、ユーザインターフェイス要素を、根本的なビジネスロジックおよびそのようなロジックを実現するビジネスオブジェクトに結合するために、宣言的言語が使用される。発明の一実施例では、オラクルアプリケーション開発フレームワーク（Application Development Framework：ＡＤＦ）モバイル拡張（mobile extensions：ＡＭＸ）層は、この宣言的なスタイルの結合を可能にする。オラクルＡＤＦに関するさらなる情報は、「オラクルＡＤＦ１１ｇ入門書：フュージョンウェブアプリケーションの構築ブロックの紹介」（Oracle ADF 11g Primer: Introduction to the Building Blocks of a Fusion Web Application）（２００７年４月にインターネット上で公開）において見つかるかもしれず、その内容全体はここに引用により援用される。
【００１３】
発明の一実施例では、ビジネスオブジェクトへのユーザインターフェイス要素の結合を可能にする結合層は、２つの異なる部分へと分割される。結合層の一部分は、上述のウェブビューコンポーネントの内部のＪＡＶＡスクリプト環境に含まれ、結合層の別の部分は、上述のようなコンテナ内に埋込まれたライブラリ内に含まれる。上述のように、発明の一実施例では、このライブラリは埋込まれたＪＶＭを表わす。発明の一実施例では、ユーザインターフェイス要素とビジネスオブジェクトとの結合はすべて、この複数部分からなる結合層内で行なわれる。
【００１４】
発明の一実施例では、ＪＡＶＡオブジェクトは、ライブラリとしてスレーブスレッド内で実行される。メインスレッドにおけるユーザインターフェイスは、これらのＪＡＶＡオブジェクトとやり取りしてもよい。上述の態様で結合およびやり取りを行なうことにより、結合およびやり取りは、アプリケーション開発者にとってシームレスになる。
【００１５】
柔軟なランタイムアーキテクチャ
図１は、発明の一実施例に従った、柔軟なランタイムアーキテクチャ１００の一例を示すブロック図である。アーキテクチャ１００は、モバイル装置１０２と、サーバ１０４とを含む。モバイル装置１０２は、コンテナ１０６と、装置サービス１０８と、ローカルデータ１１０とを含む。コンテナ１０６は、装置ネイティブビュー１１２と、ウェブビュー１１４と、ＪＶＭ１１６と、フォンギャップ１１８とを含む。コンテナ１０６はさらに、信用証明管理、シングルサインオン（ＳＳＯ）およびアクセス制御１２０を含む。ウェブビュー１１４は、ＨＴＭＬ５＆ＪＡＶＡスクリプト１２２と、サーバＨＴＭＬ１２４とを含む。ＨＴＭＬ５＆ＪＡＶＡスクリプト１２２は、ＡＤＦモバイル拡張可能マークアップ言語（extensible markup language：ＸＭＬ）ビュー１２６と、ＡＤＦコントローラ１２８と、ローカルＨＴＭＬ１３０とを含む。ＪＶＭ１１６は、管理ビーン１３２と、ＡＤＦデータモデル１３４とを含む。発明の一実施例では、ウェブビュー１１４は、１つ以上の仮想マシンチャネル１３６を通してＪＶＭ１１６と通信する。装置サービス１０８は、装置ネイティブビュー１１２、フォンギャップ１１８、およびＪＶＭ１１６と通信可能に連結されている。ＪＶＭ１１６はまた、ローカルデータ１１０とも通信可能に連結されている。フォンギャップ１１８はまた、ＨＴＭＬ５＆ＪＡＶＡスクリプト１２２とも通信可能に連結されている。フォンギャップ１１８は、オープンソースプロジェクトを介して実現されてもよい。
【００１６】
サーバ１４０は、ＡＤＦモバイル１４０と、ＡＤＦｆａｃｅｓリッチクライアント（ＲＣ）１４２と、第三者ユニフォーム・リソース・ロケータ（uniform resource locator：ＵＲＬ）１４４と、ウェブサービス（ＳＯＡＰ＆ＲＥＳＴ）１４６とを含む。ＳＯＡＰは、シンプル・オブジェクト・アクセス・プロトコル（Simple Object Access Protocol）を表わす。ＲＥＳＴは、レプレゼンテーショナル・ステート・トランスファー（Representational State Transfer）を表わす。サーバコンポーネント１４０〜１４４は、コンテナコンポーネント１２０を通してサーバＨＴＭＬ１２４と通信可能に連結されている。同様に、ウェブサービス（ＳＯＡＰ＆ＲＥＳＴ）１４６は、コンテナコンポーネント１２０を通してＪＶＭ１１６と通信可能に連結されている。
【００１７】
発明の一実施例では、コンテナ１０６は、モバイル装置１０２のプラットフォームに対応するネイティブプログラミング言語で書かれたプログラムコードである。コンテナ１０６は、ネイティブアプリケーションが実行されるシェルである。コンテナ１０６は、モバイル装置１０２のオペレーティングシステムとのやり取りを取扱う。コンテナ１０６は、事象がないかリッスンする。本質的に、コンテナ１０６は、モバイル装置１０２上で実行されるネイティブアプリケーションの本体を構成する。たとえば、モバイル装置１０２上で実行される電話アプリケーションは典型的には、モバイル装置１０２のオペレーティングシステムと適切にやり取りするために、ある一組の動作を実行できなければならない。コンテナ１０６は、アプリケーションがそのような動作を実行することを可能にする。発明の一実施例では、コンテナ１０６は複数のサブシステムを含む。コンテナ１０６は、これらのサブシステムをともに包み込み、接続する。これらのサブシステムは、たとえば、図１に示すサブシステム１１２〜１２０を含んでいてもよい。これらのサブシステムの一部を、以下により詳細に説明する。
【００１８】
発明の一実施例では、装置ネイティブビュー１１２は、モバイル装置１０２にとってネイティブである、ユーザインターフェイスなどのビューを含む。装置ネイティブビュー１１２の存在は、モバイル装置１０２上で実行されるアプリケーションが、モバイル装置１０２のそのようなネイティブユーザインターフェイスにアクセスすることを可能にする。
【００１９】
発明の一実施例では、ウェブビュー１１４は、モバイル装置１０２上で実行されるアプリケーションのＨＴＭＬ５．０コンポーネントを管理する。ウェブビュー１１４は、そのようなアプリケーションが、モバイル装置１０２の外部にあり得るシステムにアクセスすることを可能にする。これらの外部システムは、たとえば、リモートＵＲＬを通してアクセス可能であってもよい。ウェブビュー１１４は、アプリケーションによって使用され得るローカルＨＴＭＬ１３０を管理する。ウェブビュー１１４はまた、ＡＤＦモバイルＸＭＬビュー１２６を管理し、それは、アプリケーションのプログラム構造が宣言的な態様で特定されることを可能にする。一実施例によれば、宣言的コンポーネントが、複数のＡＤＦコンポーネントの機能性を組合わせる。ＡＤＦコンポーネントは、レイアウトコンポーネント、テーブルおよびツリーコンポーネント、値リスト（list of value：ＬＯＶ）コンポーネント、入力コンポーネント、ナビゲーションコンポーネント、出力コンポーネント、クエリコンポーネント、データ可視化コンポーネントなどを、限定なしで含んでいてもよい。一実施例によれば、宣言的コンポーネントはビジネスロジックを有しておらず、データに結合されていない。宣言的コンポーネントの開発者は、消費者がそのコンポーネントの属性を変更できないように、それらの属性を隠すことができる。ウェブビュー１１４はまた、ＡＤＦコントローラ１２８を含み、それは、一実施例では、アプリケーション開発者がタスクフローにおいて定義する、ユーザインタラクションおよびアプリケーションフローを管理する。アプリケーション開発者によって特定されたタスクフローは、アプリケーションタスクを定義する。タスクの定義は、ウェブページと、ユーザがタスクを完了できるようにするためにやり取りするビジネスロジックとを含んでいてもよい。一実施例では、ＡＤＦコントローラ１２８は、アプリケーションの実行中に、ネイティブアプリケーションのウェブページ間の遷移を可能にする。ＡＤＦコントローラ１２８は、ユーザ入力を処理し、エラーを取扱い、そして、アプリケーションの実行中の所与の点でアプリケーションのユーザがどのウェブページを見るべきか決定する。
【００２０】
発明の一実施例では、信用証明管理、ＳＳＯおよびアクセス制御１２０は、ネイティブアプリケーションに代わってセキュリティ機能を行なう。コンポーネント１２０の存在は、そのようなセキュリティ機能をネイティブアプリケーションにカスタムコード化する負担から、アプリケーション開発者を解放する。コンポーネント１２０は、アクセスを認可する前にサインオンが生じることを必要とする（モバイル装置１０２の）外部のリソースに、ネイティブアプリケーションがアクセスしようとする状況下で、ネイティブアプリケーションにサインオン能力を提供してもよい。そのようなサインオンは、シングルテナントまたはマルチテナントであってもよい。そのようなサインオンは、ＨＴＴＰＳプロトコルを使用していてもよく、または非セキュアであってもよい。一実施例では、ネイティブアプリケーションが外部リソースと関わるすべてのセキュアなトランザクションが、コンポーネント１２０を通過する。ウェブページフェッチ、ウェブサービスコール、およびＲＥＳＴコールは、そのようなセキュアなトランザクションの一部として行なわれ得る動作のタイプである。コンポーネント１２０は、ネイティブアプリケーションに、潜在的に悪意のある外部リソースからの保護を提供する。
【００２１】
発明の一実施例では、ＪＶＭ１１６は、埋込まれたＪＡＶＡライブラリとして実現される。発明の一実施例では、アプリケーション開発者によって書かれたＪＡＶＡコードが、ＪＶＭ１１６内で実行される。ＪＶＭ１１６は、コンテナ１０６内でそのようなＪＡＶＡコードを実行する、別個のスレッドおよびサブシステムである。
【００２２】
発明の一実施例では、ＪＶＭ１１６は、管理ビーン１３２と、ＡＤＦモデル１３４とを含む。一実施例では、ＡＤＦモデル１３４は、データアクセスおよびビジネスロジックを実現する。ＡＤＦモデル１３４は、アプリケーションのビュー層をアプリケーションのデータおよびビジネスサービス層に接続するデータ結合設備を含んでいてもよい。ビュー層は典型的には、ユーザインターフェイスコンポーネントを有するウェブページを含む。データ結合設備は、管理ビーン１３２によって実現されるビジネスサービスを呼出してもよい。管理ビーン１３２は、ＪＡＶＡ用の再使用可能なソフトウエアコンポーネントである。管理ビーン１３２は、ＪＡＶＡプログラミング言語で書かれ、ある特定の規定に準拠するクラスである。管理ビーン１３２は、多くの別個のＪＡＶＡオブジェクトを単一のオブジェクト（ビーン）へとカプセル化するために使用されてもよく、それらの複数のＪＡＶＡオブジェクトは、複数の個々のＪＡＶＡオブジェクトとしてではなく単一のビーンオブジェクトとして、ネイティブアプリケーションの異なる部分へと回されることができるようになっている。
【００２３】
発明の一実施例では、ローカルデータ１１０は、ネイティブアプリケーションがモバイル装置１０２上でローカルに読み、更新し、および／または格納し得るデータを含むデータベースである。そのようなデータは、暗号化されてもよく、または暗号化されなくてもよい。発明の一実施例では、コンテナ１０６は、ネイティブアプリケーションがデータベース指向の態様でローカルデータ１１０にアクセスすることを可能にするデータベース接続性サービスを提供する。
【００２４】
発明の一実施例では、装置サービス１０８は、典型的にはモバイル装置１０２に標準装備になっている他のアプリケーションおよびサービスおよび特性を含む。そのようなサービスは、たとえば、カレンダーサービス、電話サービス、カメラサービス、全地球測位システム（global positioning system：ＧＰＳ）サービスなどを含んでいてもよい。発明の一実施例では、コンテナ１０６は、装置装置１０８を、データ制御設備を通してネイティブアプリケーションによって使用するために利用できるようにする。ネイティブアプリケーションが使用しているサービスが電話サービスである場合、ネイティブアプリケーションはフォンギャップ１１８を通してその電話サービスにアクセスしてもよい。ここでの説明の目的で、装置サービス１０８およびローカルデータ１１０は双方とも、モバイル装置１０２上に存在していても、外部リソースであると考えられる。なぜなら、それらのリソースは、コンテナ１０６内に含まれていないためである。
【００２５】
ここでの説明の目的で、サーバ１０４によって提供されるリソースも、外部リソースであると考えられる。なぜなら、そのようなリソースは、コンテナ１０６およびモバイル装置１０２の外部にあるためである。サーバ１０４は、たとえば、企業サーバであってもよい。モバイル装置１０２は、典型的には１つ以上の無線ネットワークおよびインターネットを含む１つ以上のネットワークを通して、サーバ１０４にアクセスしてもよい。モバイル装置１０２上で実行されるネイティブアプリケーションは、サーバ１０４上に常駐するリソースから、リモートウェブページを要求してもよい。そのような状況下で、コンテナ１０６のコンポーネント１２０は、リモートウェブページ内で特定された実行可能コードのどの部分が、モバイル装置１０２上で実行されることを許可されているか、決定してもよい。そのような実行可能コードのある部分がセキュリティ上危険であると考えられる場合、コンポーネント１２０は、それらの部分がモバイル装置１０２上で実行されないようにしてもよい。ネイティブアプリケーションによって利用されるリモートウェブページは、ＡＤＦモバイル１４０、ＡＤＦｆａｃｅｓＲＣ１４２、および第三者ＵＲＬ１４４などのリソースを含んでいてもよい。ＡＤＦモバイル１４０は、ネイティブアプリケーションが利用し得る１組の制御を含む。そのような制御は、ウェブビュー１１４内に示されてもよい。ＡＤＦｆａｃｅｓＲＣ１４２は、レイアウトコンポーネント、テーブルおよびツリーコンポーネント、値リスト（ＬＯＶ）コンポーネント、入力コンポーネント、ナビゲーションコンポーネント、出力コンポーネント、クエリコンポーネント、データ可視化コンポーネントなどを、限定なしで含む。
【００２６】
ネイティブアプリケーションは、それに加えてまたはそれに代えて、サーバ１０４からデータを取得するために、サーバ１０４上のウェブサービス１４６にＳＯＡＰまたはＲＥＳＴコールを行なってもよい。ネイティブアプリケーションはウェブサービス１４６を、アプリケーションデータを取得して格納するための主要コンジットとして使用してもよいが、ネイティブアプリケーションはそれに加えて、そのようなデータをモバイル装置１０２上にローカルにキャッシュしてもよい。たとえば、ネイティブアプリケーションはそのようなデータをローカルデータ１１０内に格納してもよく、および／または、ネイティブアプリケーションはそのようなデータを、コンテナ１０６に割当てられたランダムアクセスメモリ内に保存してもよい。
【００２７】
ＪＶＭ、ランタイムライブラリ、およびアプリケーションコードをスレーブ環境としてネイティブアプリケーションに埋込むこと
ここに説明される技術は、ＪＶＭ、ランタイムライブラリ、およびアプリケーションコードが、スレーブ環境としてネイティブアプリケーション内に埋込まれることを可能にする。この埋込みは、ＪＡＶＡコードが、（ＪＡＶＡで書かれなかったかもしれない）ネイティブアプリケーションの一部として実行されることを可能にする。発明の一実施例では、ＪＶＭ１１６、ならびにランタイムライブラリおよびＪＡＶＡアプリケーションコードは、ネイティブアプリケーションに埋込まれており、スタンドアロンのＪＡＶＡランタイム環境がモバイル装置１０２上に存在しないような状況下であっても、ネイティブアプリケーションがＪＡＶＡコードを実行することを可能にする。
【００２８】
埋込まれたＪＶＭ１１６は、ＪＡＶＡプログラムの実行をネイティブアプリケーションに埋込むためのやり方を提供する。これは、たとえば、ビジネスロジックまたは他のコードがＪＡＶＡ環境内で実行される間に、ユーザインターフェイスがネイティブアプリケーションによって提示されることを可能にする。発明の一実施例では、ＪＡＶＡコードは、ＪＶＭ１１６によって作成され管理されるスレッド内のアプリケーションのネイティブ部分から独立して、かつそれとは非同期的に実行される。ＪＶＭ１１６をネイティブアプリケーション内に埋込むことは、ネイティブアプリケーションの外部のあらゆるＪＡＶＡランタイム環境にネイティブアプリケーションが依存することを必要とすることなく、ネイティブアプリケーションがＪＡＶＡコードを使用することを可能にする。そのような利益は、技術上または商業上の理由で、そのようなスタンドアロンの外部ＪＡＶＡランタイム環境が利用できないかまたは禁止されている状況下で、特に有益である。ＪＶＭ１１６はネイティブアプリケーション内に埋込まれているため、ネイティブアプリケーションの外部のエンティティは、ＪＶＭ１１６が存在するという意識を有する必要がなく、ネイティブアプリケーションは、まるでＪＶＭ１１６が存在していないかのように外部リソースとやり取りしてもよい。
【００２９】
発明の一実施例によれば、実際のＪＡＶＡコードは、アプリケーションのネイティブコードとＪＡＶＡコードとがやり取りでき、互いに協力できるようなやり方で、（ＪＡＶＡで書かれていないかもしれない）ネイティブアプリケーションの内部に埋込まれる。このアプローチは、ＪＡＶＡプログラムの機能性のみがネイティブコードを用いて実現されるアプローチとは対照的であり得る。
【００３０】
発明の一実施例では、コンテナ１０６は、ＣＶＭ  ＪＶＭ、ＣＤＣ、ファンデーションプロファイル、セキュリティオプショナルパッケージ、およびＪＳＲ−１６９（ＪＤＢＣ）ランタイムライブラリといった、モバイル装置１０２のネイティブオペレーティングシステムへのポートを含む。ＪＶＭおよびランタイムライブラリは、ネイティブアプリケーションとリンクされるネイティブライブラリとしてパッケージ化される。発明の実施例は、ＪＶＭ１１６がネイティブアプリケーションのコードによって実行されることを可能にする、ネイティブアプリケーションプログラミングインターフェース（application programming interface：ＡＰＴ）を含む。このＡＰＩは、ランタイムパラメータおよび最初のＪＡＶＡクラスの双方をＪＶＭ１１６に渡す能力を提供する。アプリケーション開発者がネイティブアプリケーションを作成する際、ランタイム性能を高め、起動期間を減少させるために、ランタイムライブラリの一部はＲＯＭ化されてもよい。ＪＡＶＡコードがネイティブアプリケーションに埋込まれていても、アプリケーション開発者は、標準ＪＡＶＡツールを使用して、自分のＪＡＶＡコードをデバッグすることができる。この能力は、アプリケーション開発者がネイティブデバッガを使用しているかどうかにかかわらず、アプリケーション開発者が利用できるようになっていてもよい。
【００３１】
発明の一実施例では、コンテナ１０６は、１つ以上の仮想マシンチャネル１３６を含む。発明の一実施例では、ＪＡＶＡコードがネイティブアプリケーションによって使用されなければならない初回に応答して、コンテナ１０６は、ネイティブアプリケーション内に埋込まれたライブラリに基づいて、ＪＶＭ１１６およびそのサブシステムを作成する。このため、発明の一実施例では、ＪＶＭ１１６およびそのサブシステムの作成は、怠惰な態様で行なわれる。すなわち、その性能が必要になるまで延期される。ＪＶＭ１１６およびそのサブシステムの作成は、たとえば、ネイティブアプリケーションがＪＡＶＡコマンドを呼出すことに応答して行なわれてもよい。また、これに代えて、ＪＶＭおよびそのサブシステムの作成は、ネイティブアプリケーションがＪＡＶＡ結合を参照することに応答して行なわれてもよい。
【００３２】
一実施例では、結合のＪＡＶＡスクリプト部分は、結合がＪＡＶＡサブシステム内でアクセスされなければならないことを検出する。これを検出したことに応答して、ＪＡＶＡスクリプト部分は、フォンギャップ１１８を介して参照コールを行なう。コンテナ１０６は、フォンギャップコマンドを遮る。フォンギャップコマンドを遮ることに応答して、コンテナ１０６は、ＪＶＭ１１６およびそのサブシステムがもう実行形式で存在しているかどうか決定する。ＪＶＭ１１６およびそのサブシステムがまだ実行形式で存在していないという決定に応答して、コンテナ１０６は、ネイティブアプリケーションに埋込まれたライブラリに基づいて、ＪＶＭ１１６およびそのサブシステムを作成する。コンテナ１０６は、ＪＶＭ１１６およびそのサブシステムを作成するために、スレッドフォークを行なってもよい。発明の一実施例では、ＪＶＭ１１６およびそのサブシステムを作成することに加えて、コンテナ１０６はまた、少なくとも１つの仮想マシンチャネル１３６を確立する。この仮想マシンチャネルは、コンテナ１０６とＪＶＭ１１６のサブシステムとの間に通信接続を形成する。より具体的には、一実施例では、仮想マシンチャネルは、コンテナ１０６と、ＪＶＭ１１６のサブシステム内の特性コンテキストマネージャと呼ばれるマイクロサーバとの間に、接続を形成する。この特性コンテキストマネージャは、ＪＶＭ１１６のサブシステム内にある結合およびリソースのすべての制御を有する。
【００３３】
発明の一実施例では、ＪＶＭ１１６のサブシステム内の各別個の特性のために、仮想マシンチャネル１３６のうちの別個の１つが、付加的に作成される。そのような各仮想マシンチャネルは、ウェブビュー１１４とその仮想マシンチャネルが接続されている（ＪＶＭ１１６のサブシステム内の）特定の特性との間のピアツーピア通信チャネルである。仮想マシンチャネル１３６の作成は、並列のエンティティ間、すなわち、ウェブビュー１１４と仮想マシンチャネルが接続されている特性との間に対を作成する。したがって、ウェブビュー１１４は各特性と、その特性自体の仮想マシンチャネルを介して、メッセージ受け渡しシステムを用いてやり取りしてもよい。
【００３４】
その後、ネイティブアプリケーションがＪＶＭ１１６のサブシステム内に存在するＪＡＶＡオブジェクトのプロパティを要求する場合はいつも、そのＪＡＶＡオブジェクト用の仮想マシンチャネルを使用して、アプリケーション開発者にとって透過的にそのプロパティを検索する。そのプロパティは、アプリケーション開発者にとって透過的に、ネイティブアプリケーションのメモリアドレス空間に配置され、それにより使用される。次に、ネイティブアプリケーションは、通常のメモリフェッチ動作を介して、それ自体のメモリアドレス空間からプロパティにアクセスしてもよい。
【００３５】
一実施例では、システムの速度を増加させるために、可能ならいつでも、ネイティブアプリケーションによるＪＶＭ１１６のサブシステムの参照が回避される。そのような参照を回避することを助けるために、一実施例では、上述の態様でＪＶＭ１１６のサブシステムから取得されたデータが、ＪＶＭ１１６のサブシステムの外部のネイティブアプリケーションのメモリアドレス空間にキャッシュされる。一実施例では、アプリケーション開発者の意識または関与を必要することなく、コンテナ１０６が自動的に行なうバックチャネル通信を介して、キャッシュ一貫性が達成される。
【００３６】
上述された技術を使用してＪＡＶＡオブジェクトのプロパティを読むことに加えて、ネイティブアプリケーションは、それらのＪＡＶＡオブジェクトのプロパティを設定するために、以下に説明する技術を使用できる。一実施例では、これらのＪＡＶＡオブジェクトのプロパティの設定は、ウェブビュー１１４内に保持されたライトスルーキャッシュを介して達成される。ライトスルーキャッシュに値が書込まれたことをウェブビュー１１４が検出したことに応答して、ウェブビュー１１４は、仮想マシンチャネル１３６のうちの適切な１つを使用して、書込まれた値が関係しているプロパティを有する適切なＪＡＶＡオブジェクトにその値が伝搬されるようにする。このため、ＪＶＭ１１６のサブシステム内のＪＡＶＡオブジェクトのプロパティは、ライトスルーキャッシュから更新される。
【００３７】
発明の一実施例では、ＪＶＭ１１６のサブシステムは、値がＪＡＶＡオブジェクトに割当てられることを許可する前に、タイプが適切かどうか決定する、検証機構を含む。たとえば、文字列型の値を浮動型のプロパティに割当てる試みがなされていることを検出したことに応答して、検証機構は、試みられた割当てが無効であることを検出してもよい。試みられた割当てが無効であることを検出したことに応答して、検証機構は割当てを防止し、ネイティブアプリケーションが取り扱うように設計されている例外処理を実行する。加えて、検証機構は、関連するライトスルーキャッシュのエントリが、試みられた無効の割当てに先立ってエントリが含んでいた値を反映するようにする。また、これに代えて、ＪＡＶＡオブジェクトプロパティへの有効な変更はウェブビュー１１４に伝搬され、それは次に、変更がユーザインターフェイスに関係する場合、変更を反映するために、モバイル装置１０２のユーザへのネイティブアプリケーションの提示をリフレッシュしてもよい。
【００３８】
発明の一実施例では、ネイティブアプリケーションのウェブビュー１１４は、ＪＶＭ１１６のサブシステム内のＪＡＶＡオブジェクトの方法を呼出そうと試みる。ウェブビュー１１４は、フォンギャップ１１８にコールを行なうことにより、この方法を呼出そうと試みる。コンテナ１０６は、フォンギャップコマンドを遮る。フォンギャップコマンドを遮ることに応答して、コンテナ１０６は、方法の呼出しが関係しているＪＡＶＡオブジェクトに接続されている仮想マシンチャネル１３６のうちの１つに、コマンドを配置する。ＪＶＭ１１６のサブシステムのコンポーネントが次に、適切なＪＡＶＡオブジェクトに関連して方法を呼出す。
【００３９】
状況によっては、そのような方法の呼出しは、モバイル装置１０２ではなくサーバ１０４上に存在するリソースに関係していてもよい。方法の呼出しがそのような外部リソースに関係していることを検出したことに応答して、コンテナ１０６は、ＲＥＳＴウェブサービスコールが、サーバ１０４上のウェブサービス１４６のうちの適切な１つに行なわれるようにする。サーバ１０４は、コール内でなされた要求を処理し、応答をコンテナ１０６に返す。これに応答して、コンテナ１０６は、応答内に含まれるデータが、ＪＶＭ１１６のサブシステム内の関連するＪＡＶＡオブジェクトに伝搬されるようにする。上述のものに似た態様で、結合更新が行なわれ、更新された値はウェブビュー１１４に伝搬され、それは、それに応じてユーザインターフェイスをリフレッシュしてもよい。
【００４０】
発明の一実施例では、コンテナ１０６からサーバ１０４にＲＥＳＴコールが行なわれる場合はいつも、そのコールはコンポーネント１２０を通過する。これに応答して、コンポーネント１２０は、コールにとってセキュリティが必要かどうか、および、必要な場合には必要なセキュリティの種類を決定する。コンポーネント１２０は、ＲＥＳＴコールを行なう際に使用すべきセキュリティプロトコルのタイプを検出してもよい。コールについてシングルサインオン機能性が要求される場合、コンポーネント１２０は、サインオン用の適切な信用証明がモバイル装置１０２上に存在するかどうか決定してもよい。コンポーネント１２０は、サーバ１０４にコールを送信する前に、これらの信用証明をコール内に埋込んでもよい。
【００４１】
発明の一実施例では、ウェブサービス１４６から受信した応答の内容に依存して、ウェブビュー１１４は、内容の一部またはすべてを、モバイル装置１０２上に常駐するさまざまなリポジトリに格納すべきであると決定してもよい。たとえば、ウェブサービス応答が連絡先のリストを特定しているという決定に応答して、ウェブビュー１１４は、リスト内の連絡先がモバイル装置１０２の連絡先リスト内に配置されるべきであると決定してもよい。この連絡先リストは、ネイティブアプリケーションの外部にあってもよく、ネイティブアプリケーションから独立していてもよい。そのような決定に応答して、ウェブビュー１１４、およびより具体的にはＡＤＦコントローラ１２８は、内容を特定するコマンドが、フォンギャップ１１８に送信されるようにしてもよい。コマンドの受信に応答して、フォンギャップ１１８は、装置サービス１０８とインターフェイス接続して、コマンドによって特定された内容を適切なサービス（たとえば、連絡先リストサービス）が受信し、処理するようにしてもよい。連絡先リストサービスの場合、たとえば、この処理は、（以前にサーバ１０４からウェブサービス返信で受信した）連絡先を、連絡先リストサービスによって装置サービス１０８内に保持された連絡先リスト内に格納することを伴っていてもよい。
【００４２】
一実施例では、コンテナ１０６は、ＪＡＶＡデータベースコネクティビティ（JAVA Database Connectivity：ＪＤＢＣ）およびデータベースドライバを使用して、ローカルデータ１１０内にデータを格納し、ローカルデータ１１０からデータを検索する。コンテナ１０６とローカルデータ１１０との間の通信は、暗号化されてもよく、または暗号化されなくてもよい。ネイティブアプリケーションは、ローカルデータ１１０を、ネイティブアプリケーションの状態データを管理するためのデータベースとして使用してもよい。ローカルデータ１１０内のデータは、ＪＶＭ１１６のサブシステム内のＪＡＶＡオブジェクトのプロパティを設定するために使用されてもよい。続いて、ネイティブアプリケーションのユーザは、ウェブビュー１１４によって提示されたユーザインターフェイスを介して、これらのＪＡＶＡオブジェクトのプロパティにアクセスしてもよい。ここでも、コンテナ１０６とコンテナ１０６の外部のリソースとの間のより費用がかかるトランザクションを回避するために、ローカルデータ１１０から検索されたデータは、コンテナ１０６内にキャッシュされてもよい。
【００４３】
特性を作成し、モバイルアプリケーションへと組立てるための標準機構
発明の一実施例では、より小さいアプリケーション特性を作成するために、標準機構が、アプリケーション開発者らなどのユーザに提供される。ここに使用されるように、特性とは、提示とビジネスロジックとの組合せである。標準機構は、これらのより小さい特性が、状態の明確な分離を維持しつつ、単一のモバイルアプリケーションへと組立てられることを可能にする。いかなる個々の特性の破損や改変も防止するために、一実施例では、各特性は、それが同じモバイルアプリケーションの他の特性に直接さらされることが制限されるか完全に排除されるように、別々にサンドボックス化される。発明の一実施例では、モバイルアプリケーションの提示は、そのモバイルアプリケーションのビジネスロジックから分離されており、この分離は、これらの各々を、他のアプリケーション層から切り離された明らかに別個のアプリケーション層に配置することによる。これらの層の各々は、別個のコード、データおよびライフサイクルを有していてもよい。有益に、ここに開示された技術は、より複雑なアプリケーションを迅速に開発できるように、複数の互いに素な特性が、切り離された態様でともに混合されることを可能にする。
【００４４】
ここに開示された技術は、ミニアプリケーションと考えられ得る複数のアプリケーション特性が、単一のアプリケーションへとともに併合されることを可能にした。特性データの可視性を促進するかまたは制限するために、さまざまな異なるアプリケーションスコープの、特性スコープの、およびページフロースコープの変数が、サポートされる。ここに開示された技術を使用して、開発者らは、どのデータが、メタデータ駆動アプリケーションのさまざまな特性にさらされているか判断できるようになっている。
【００４５】
複数の異なるアプリケーション特性を単一のアプリケーションへと組立てることを可能にするために、発明の一実施例は標準機構を利用する。一実施例では、この標準化は、表現言語の使用を通して達成される。使用される表現言語は、たとえば、標準表現言語であってもよい。発明の一実施例では、使用される表現言語はＪＡＶＡ統一表現言語である。
【００４６】
ＪＡＶＡ統一表現言語は、ＪＡＶＡサーバページ（JAVA server pages：ＪＳＰ）での表現を簡略化するためのやり方を提供する。それは、潜在オブジェクトおよびＪＡＶＡクラスにアクセスするために、および、洗練された態様で収集物を操作するために使用される簡単な言語である。この言語は、ＪＳＰスクリプト要素以外のランタイム表現を使用する能力を提供する。ＪＡＶＡ統一表現言語は、プラグ可能で拡張可能なリゾルバ機構、および、データを設定してウェブページから方法を呼出すためのやり方を提供する。ＪＡＶＡ統一表現言語に関する追加の詳細は、「ＪＡＶＡ  ＥＥ５チュートリアル」（The JAVA EE5 Tutorial）（著作権  ２０１０年  オラクル）に見つけることができ、それはここに引用により援用される。
【００４７】
発明の一実施例では、コンテナ１０６は、ＪＡＶＡスクリプトで構築された構文解析器兼評価器と、ＪＡＶＡで構築された構文解析器兼評価器とを含む。これらの構文解析器兼評価器は、モバイルアプリケーションが使用するウェブページに含まれるＪＡＶＡ統一表現言語の表現を構文解析し、評価する。コンテナ１０６がＪＡＶＡスクリプト構文解析器兼評価器を含んでいるため、ＪＡＶＡエンジンを利用することなく、いくつかの表現の構文解析および評価を行なうことが可能であり、それは実行速度の増加を生み出すことができる。ＪＶＭ１１６のサブシステムからＪＡＶＡオブジェクトのプロパティが最初に一旦取得されると、それらのプロパティはキャッシュされ、後でＪＡＶＡスクリプトを使用してアクセスされてもよい。逆に、発明の一実施例では、ＪＡＶＡスクリプト構文解析器兼評価器を使用して構文解析され評価されたオブジェクトのプロパティは、ＪＶＭ１１６のサブシステム内にキャッシュされ、そのため、その後、ＪＡＶＡ構文解析器兼評価器は、ＪＶＭ１１６のサブシステムの外部を参照することなく、これらのオブジェクトのプロパティにアクセスできる。
【００４８】
発明の一実施例では、コンテナ１０６内で生じる各データ変更事象は、同じデータの２つのミラーコピーが修正されるようにする。一方のコピーはＪＶＭ１１６のサブシステム（ＪＡＶＡ層）内にあり、一方のコピーはウェブビュー１１４（ＪＡＶＡスクリプト層）内にある。このため、発明の一実施例では、ウェブビュー１１４またはＪＶＭ１１６内のデータへの変更は、ウェブビュー１１４およびＪＶＭ１１６の他方に自動的にプッシュされる。
【００４９】
発明の一実施例によれば、各オブジェクトのデータをサンドボックス化し、そのデータが任意のキャッシュに存在するようにすることによって、特性間の切離しが維持される。このため、発明の一実施例では、ＪＶＭ１１６のサブシステム内の各ＪＡＶＡオブジェクトは、そのサブシステム内の任意の他のＪＡＶＡオブジェクトのデータにアクセスしないよう防止されており、加えて、そのような各ＪＡＶＡオブジェクトは、任意の他のＪＡＶＡオブジェクトの（たとえばウェブビュー１１４内の）キャッシュされたデータにアクセスしないよう防止されている。さらに、発明の一実施例では、サブシステム１１６内の各ＪＡＶＡオブジェクトは、仮想マシンチャネル１３６のうち、他のＪＡＶＡオブジェクトが共有していないそれ自体用の１つを有する。ＪＡＶＡオブジェクトとウェブビュー１１４におけるそのＪＡＶＡオブジェクトの類似物との間の通信は、発明の一実施例では、そのＪＡＶＡオブジェクトおよびウェブビュー１１４におけるその類似物に割当てられた特定の仮想マシンチャネルを通して、独占的に行なわれる。
【００５０】
発明の一実施例では、各別個のアプリケーション特性には、そのアプリケーション特性に独占的に割当てられ、他のものには割当てられていない、別個のＪＡＶＡクラスローダがロードされる。システムクラスローダは、アプリケーションスコープのクラスをすべてロードする。しかしながら、各特性は、システムクラスローダの子であるそれ自体のクラスローダを含んでいてもよい。各特性はそれ自体のクラスローダによってロードされるため、どの特性も、任意の他の特性のデータに直接アクセスできない。これは、同じクラスファイル内に２つの別個の特性が定義されている場合でもあてはまる。
【００５１】
発明の一実施例では、モバイルアプリケーションは、１組のプロジェクトとして構築される。これらのプロジェクトのうちの１つは、アプリケーションコントローラプロジェクトとして指定される。アプリケーションコントローラプロジェクトに配置されたオブジェクトおよびデータはすべて、スコープがシステム全体であると考えられる。対照的に、各特性は、それ自体の別個のプロジェクトを有する。各特性は、複数のクラスの１組を包含していてもよい。一実施例によれば、ある特定の特性用のクラスローダは、その特定の特性によって包含されるクラスの組にあるクラスにしかアクセスできない。ある特性用のクラスローダは、他の特性によって包含されるクラスを突き止めることができない。しかしながら、あるクラスがアプリケーションコントローラプロジェクトへと推進される場合、すべての特性のクラスローダによってそのクラスを突き止めることができる。なぜなら、その場合、そのクラスは、スコープがシステム全体になったためである。システム全体のスコープへのそのような推進を通して、データは、強力にサンドボックス化された環境であっても、特性間で共有することができる。
【００５２】
埋込まれたプロセス通信のための仮想チャネル
一実施例では、仮想マシンチャネル（ＶＭチャネル）は、ネイティブモバイルアプリケーションと埋込まれた仮想マシンとの間で通信するためのやり方を提供する。そのような一実施例では、基本的なユーザインターフェイス局面はネイティブアプリケーションによって行なわれ、一方、ビジネスロジックは埋込まれた仮想マシンによって行なわれる。この分割を提供するために、コアチャネルおよびフレームワークコマンドならびにアプリケーションレベルメッセージが双方向に移動することを可能にする、超高速チャネリング機構が提供される。
【００５３】
一実施例では、ＶＭチャネルは、双方向性の制御された通信を提供する。この通信は超高速であり、優先度に基づいている。また、それは、チャネルおよびメッセージの双方についての予測可能なライフサイクルを提供する。
【００５４】
一実施例では、ＶＭチャネルは、提示層およびビジネスロジック層が完全に別々の環境およびメモリ空間にあっても、それらが単一のモバイルアプリケーション内で通信するための標準機構を提供する。ＶＭチャネルは、埋込まれた仮想マシンとのやり取りにとって有用である。
【００５５】
ＶＭチャネルの一実施例は、オラクル・コーポレイションからのＡＤＦモバイルフレームワーク製品に取り入れられている。
【００５６】
一実施例では、ＶＭチャネルは、ネイティブエンティティとＪＡＶＡエンティティとの間の通信フローを可能にする、メッセージングフレームワークを提供する。このメッセージングフレームワークは、ＪＡＶＡエンティティ（たとえば、ＪＡＶＡコード）が、ネイティブエンティティ（すなわち、ネイティブコードを用いて実現されたエンティティ）にメッセージを送信し、メッセージに対応する処理をネイティブエンティティに行なわせ、ネイティブエンティティが、ＪＡＶＡエンティティから受信したメッセージに対応するＪＡＶＡエンティティに、応答を送信し、ＪＡＶＡエンティティが応答を受信することを可能にする。他の方向では、ネイティブエンティティはＶＭチャネルを使用して、ＶＭチャネルを介してＪＡＶＡエンティティにメッセージを送信し、ＪＡＶＡエンティティから応答メッセージを受信してもよい。
【００５７】
概念的レベルでは、ＶＭチャネルは、２つのエンドポイント間に通信チャネルを提供する。エンドポイントのうちの一方はＪＡＶＡエンティティであってもよく、他方はネイティブエンティティであってもよい。一実施例では、ＶＭチャネルは、ＪＡＶＡメッセージングシステムとＡＤＦメッセージングとの間に通信チャネルを提供する。
【００５８】
モバイルアプリケーションは、ｉＰｈｏｎｅ（登録商標）、ブラックベリー（登録商標）、アンドロイド（登録商標）フォンなどのモバイル装置上での実行用に書かれたアプリケーションである。ある装置用のネイティブアプリケーションは、その装置のオペレーティングシステムおよびマシンファームウェア上で作動するように具体的に設計されたアプリケーションである。典型的には、ある特定の装置用に書かれたネイティブアプリケーションは、それが異なるオペレーティングシステムおよび／または装置ファームウェアを有する異なる装置上で作動可能になる前に、修正または適合されなければならない。たとえば、ｉＰｈｏｎｅ用に書かれたモバイルネイティブアプリケーションは、アップルのｉＯＳオペレーティングシステム上で作動するように設計されている。別の例として、アンドロイドフォン用に設計されたモバイルネイティブアプリケーションは、アンドロイドオペレーティングシステム上で作動するように設計されている。ネイティブアプリケーションをコード化するために使用され得る言語の例は、ｉＰａｄ（登録商標）／ｉＰｈｏｎｅのプラットフォーム用のオブジェクティブＣ、アンドロイドプラットフォーム用のアンドロイドＪＡＶＡ、マイクロソフトモバイル装置プラットフォーム用のＣ＃などを含む。ネイティブプラットホームもしくはネイティブ言語のタイプまたは性質は、この発明の実施例の範囲を限定するよう意図されてはいないということが理解されるべきである。ＶＭチャネルは、さまざまな異なるプラットホームおよびネイティブアプリケーションを用いて使用されてもよい。
【００５９】
一実施例では、ＶＭチャネルは、２つのエンドポイント間の非同期的で対称的な双方向性のメッセージングを可能にする。一実施例では、各々それ自体のライフサイクルを有する複数のＶＭチャネルが、同時に開かれてもよい。これらの複数のＶＭチャネルは、集中的な態様で管理される。一実施例では、ＶＭチャネルは、可変サイズのメッセージングを可能にする。一実施例では、ＶＭチャネルは、メッセージ間で相関が特定されることを可能にする。これらの相関は、たとえば、要求−応答メッセージングパラダイムを実現するために使用されてもよい。一実施例では、ＶＭチャネルを用いて通信されたメッセージが優先されてもよい。
【００６０】
上述のように、ＶＭチャネルは、ＪＡＶＡエンティティ（たとえばＪＶＭ）とネイティブエンティティとの間の通信を可能にする。これら２つのエンティティは、モバイル装置上で実行されていてもよい。一実施例では、ＪＡＶＡエンティティおよびネイティブエンティティは、同じプロセス空間で実行される。代替的な実施例では、ＪＡＶＡエンティティおよびネイティブエンティティは、異なるプロセスで実行されてもよい。ＶＭチャネルアーキテクチャは、ＪＡＶＡエンティティおよびネイティブエンティティが同じプロセス空間にあることを要求しない。これら２つのエンティティは、同じバックプレーン上にある必要さえない。
【００６１】
一実施例では、ＶＭチャネルを用いてネイティブエンティティと通信するＪＡＶＡエンティティに関し、このＪＡＶＡエンティティは、ネイティブエンティティを含むネイティブアプリケーション内で、ミニランタイムエンジンとして使用されてもよい。アプリケーションのマスターは、ネイティブコードである。ＪＡＶＡエンティティは、ネイティブコードアプリケーション内でのみ作動するスレーブ仮想マシンである。別の実施例では、ＪＡＶＡエンティティは、ネイティブコードの兄弟であってもよい。
【００６２】
図２は、この発明の一実施例に従った、ネイティブエンティティとＪＡＶＡエンティティとの間のメッセージフローをＶＭチャネルがどのように容易にし得るかの一例を示す。図２に示すように、ＶＭチャネル２０２は、ネイティブエンティティ２０４とＪＡＶＡエンティティ２０６との間の通信を容易にする。この例では、ネイティブエンティティおよびＪＡＶＡエンティティは、同じネイティブアプリケーションの一部である。アプリケーションバンドルは、コンパイルされたオブジェクティブＣ executable (*.exe)およびＪＡＶＡ  ｌｉｂを含んでいてもよい。ＪＡＶＡクラスファイルは、ＪＤＭ  ｌｉｂ内で作動するリソースとして扱われる。ＶＭチャネル２０２は、メッセージがネイティブエンティティ２０４からＪＡＶＡエンティティ２０６に、およびＪＡＶＡエンティティ２０６からネイティブエンティティ２０４に渡されることを可能にする。
【００６３】
アプリケーション開発者は、ＶＭチャネルについて知らなくてもよい。アプリケーション開発者は、たとえばネイティブコード化ツールを使用して、以前とまったく同様にネイティブコードを開発できる。アプリケーション開発者は、ＪＤｅｖ（Ｊデベロッパ）などのツールを使用してＪＡＶＡコードを開発してもよい。一実施例では、アプリケーションが構築される際、ＪＡＶＡコードは*.jarファイルの束へとコンパイルされる。次に*.jarは、たとえばプロパティファイルまたはイメージとして、ネイティブアプリケーションに埋込まれる。ＣＶＭが起動されると、Jarファイルはデータとしてロードされ、ＣＶＭ内で実行される。
【００６４】
図１を再度参照して、（ＪＶＭ１１６として示す）ＪＡＶＡエンティティは、コンテナ１０６によって表わされるネイティブアプリケーション内に、ライブラリとして埋込まれる。ＶＭチャネル１３６は、ＪＶＭ１１６とネイティブコードコンポーネントとの間の矢印として示される。ネイティブエンティティおよびＪＡＶＡエンティティは双方とも、コンテナ１０６のアドレス空間内にそれら自体の別個のアドレス空間を有する。ＶＭチャネル１３６は、それら２つの間の通信を可能にするために通信チャネルを提供する。ＶＭチャネル１３６は、メッセージが、メッセージングプロトコルを使用して、２つの環境（すなわち、ネイティブおよびＪＡＶＡ）間で通信されることを可能にする。
【００６５】
１つまたは複数のＶＭチャネルが同時に存在していてもよく、各々異なる特性／連絡先へと作動する。各ＶＭチャネルは、メッセージがあるチャネルから別のチャネルへと境界を越えることができないように、セキュリティ局面を提供する。ＶＭチャネルは、２つのエンドポイントエンティティ間に、ポイントツーポイントチャネルを提供する。あるＶＭチャネル上で送信されたメッセージは、別のＶＭチャネルに乗り換えることができない（すなわち、相互交流なし）。一実施例では、ＶＭチャネルのエンドポイントは、同じアプリケーション空間内にあるものの、それら自体の別個のアドレス空間内にある。これら２つのエンドポイントは、同じプロセスｉｄを有する必要はない。２つのエンティティエンドポイントがそれら自体の別個のアドレス空間内で作動しているため、ＶＭチャネルは、これら２つの間の通信を可能にする。
【００６６】
複数のネイティブエンティティが、ＶＭチャネルを用いて、単一のＪＡＶＡエンティティと通信できる。同様に、単一のＪＡＶＡエンティティが、ＶＭチャネルを用いて、複数のネイティブエンティティと通信できる。２つのエンティティ間でのメッセージングのために、１つ以上のＶＭチャネルが作成され、使用されてもよい。
【００６７】
一実施例では、ＶＭチャネルは、メッセージの通信のために、ネットワーキングスタイル層状プロトコルを使用する。ＶＭチャネルを介して通信されるメッセージは、ヘッダとボディとを含む。ボディは、メッセージ内容またはペイロードを格納する。ヘッダは、ＶＭチャネルを介してメッセージを通信するために使用される情報を含む。一実施例では、ヘッダは、要求の識別、要求メッセージに応答メッセージを相関させるために使用可能な相関情報（たとえば、相関ｉｄ）、メッセージの優先度を示す優先度情報（たとえば、優先度がより高いメッセージは、優先度がより低いメッセージよりも優先される）、サービス情報の品質、および他の情報などの情報を含む。一実施例では、ヘッダは、異なる層に対応する複数のヘッダを含んでいてもよい。
【００６８】
ＶＭチャネルは、２つのエンドポイント間でメッセージをまとめ、かき集めることに関与しており、一方のエンドポイントはＪＡＶＡ環境にあってもよく、他方はネイティブコードにある。ＶＭチャネル自体は、メッセージ内容に依存しない。すなわち、ＶＭチャネルは、通信中のメッセージのボディ／ペイロードの実際の内容について知らない／気にしない。また、ＶＭチャネルを介して通信されるメッセージのサイズは、固定されなくてもよい。たとえば、１つのメッセージは１バイトであってもよく、別のメッセージは数バイトなどであってもよい。
【００６９】
ＶＭチャネルは双方向性である。すなわち、ネイティブエンティティとＪＡＶＡエンティティとの間でＶＭチャネルを使用する際、メッセージは、同じＶＭチャネルを使用して、ネイティブエンティティからＪＡＶＡエンティティへと、およびＪＡＶＡエンティティからネイティブエンティティへと送信可能である。要求−応答シナリオでは、要求がＪＡＶＡ側またはネイティブ側から開始されてもよく、同様に、応答がＪＡＶＡ側またはネイティブ側から送信されてもよい。
【００７０】
いずれのエンドポイントからも、複数のメッセージがＶＭチャネルに投入されてもよい。一実施例では、メッセージングのために「供給−消費者」モデルが使用されてもよく、ここでは、供給業者エンティティは複数のメッセージをＶＭチャネルに送信してもよく、消費者エンティティは一度に１つのメッセージを取り上げ、それを処理し、それから次のメッセージを取り上げることなどを行なってもよい。ＶＭチャネルはこのように、対称的で双方向性の非同期的メッセージングプロトコルを可能にする。
【００７１】
優先度は、ＶＭチャネル内の優先度がより高いメッセージが、優先度がより低いメッセージの前に取扱われるように、メッセージに割当てられてもよい。一実施例では、ＶＭチャネルは、優先度に基づいたキューを使用して、優先度メッセージングを容易にする。
【００７２】
一実施例では、ＶＭチャネルは、ネイティブエンティティ側およびＪＡＶＡエンティティ側でハンドラを使用する。ＶＭチャネルによって受信されたメッセージは、メッセージのさらなる処理のために、受信側でハンドラに提供される。一実施例では、ハンドラは、要求に応答を相関させるのに関与する。
【００７３】
図３は、この発明の一実施例に従った、ＶＭチャネルのための状態図を示す。ＶＭチャネルは、未初期化状態３０２で始まる。CREATE_CHANNELメッセージの送信に応答して、ＶＭチャネルは作成中状態３０４に遷移する。CREATE_CHANNEL_CONFメッセージの受信に応答して、ＶＭチャネルは作成済状態３０６に遷移する。LISTENING_INDメッセージの受信に応答して、ＶＭチャネルは送信可能状態３０８に遷移する。状態３０８から、NOT_LISTENING_INDメッセージが受信されると、ＶＭチャネルは作成済状態３０６に戻るよう遷移する。また、これに代えて、状態３０８から、DELETE_REQメッセージが受信されると、ＶＭチャネルは削除中状態３１０に遷移する。また、これに代えて、状態３０８から、DELETE_REQメッセージの受信およびDELETE_CONFメッセージの送信に応答して、ＶＭチャネルは削除済状態３１２に遷移する。状態３１０から、DELETE_CONFメッセージの受信に応答して、ＶＭチャネルは削除済状態３１２に遷移する。
【００７４】
図４Ａおよび図４Ｂは、この発明の一実施例に従った、ＶＭチャネルを作成し、ＶＭチャネル用のリスナを登録し、ＶＭチャネルを削除するための制御メッセージシーケンス図を示す。たとえば、図４Ａでは、メッセージがネイティブ側からＪＡＶＡ側へと横切って動かされる。メッセージが一旦ＶＭチャネルに入ると、受信側（たとえばＪＡＶＡ側）のチャネルマネージャが、ＶＭチャネルにおけるメッセージの存在を検出し、ＶＭチャネルからメッセージを検索し、それをさらなる処理のために適切なハンドラに渡す。メッセージは次に処理されてもよく、応答が送り返されてもよい。応答メッセージがＪＡＶＡ側からＶＭチャネルにプッシュされ、ＶＭチャネルを介してネイティブ側に通信される。次に、ネイティブ側のチャネルマネージャが、メッセージの存在を検出し、ＶＭチャネルからメッセージを取得し、それをさらなる処理のためにネイティブ側のハンドラに渡す。一実施例では、ハンドラは相関を行なってもよく、適切な応答ハンドラを呼出してもよい。
【００７５】
メッセージ間の相関が行なわれ得るさまざまなやり方がある。たとえば、一実施例では、相関は相関／関連ＩＤを使用して行われる。一実施例では、要求メッセージが送信元によってＶＭチャネルに送信されると、ペンディング要求についての情報が送信元側で保持される。応答メッセージが同じＶＭチャネルを介して送信元によって受信されると、応答について対応する要求を決定するために、ペンディング要求情報においてルックアップが行なわれる。そのような要求が見つかった場合、応答は要求に相関され、要求はペンディング要求情報から除去されてもよい。応答の成否に基づいて、適切なコールバックが呼出されてもよい。応答についてペンディング要求が見つからない場合、エラー条件が示されてエラー回復処理が開始されてもよい。
【００７６】
一実施例では、制御チャネルがあり、それはマスターと考えられる。要求元（たとえば、ネイティブエンティティまたはＪＡＶＡエンティティ）は、２つのエンドポイント間に追加のＶＭチャネルを作成するための要求を送信してもよい。制御チャネルは次に、要求されたＶＭチャネルを作成する。ＶＭチャネルが作成されるよう、ＶＭチャネルが確立される前に、２つのエンドポイント間で交渉が行なわれてもよい。一実施例では、複数レベルの交渉が、たとえば、アプリケーション層（ＡＤＦ層−ルーティング、サンドボックス化、相関を訂正する）で１つ、プロトコル層（ＶＭチャネル層−メッセージ用の頑強でセキュアな安定した環境を確実にする）で１つ、行なわれてもよい。多層アプローチのために、さまざまなヘッダ部分が使用されてもよい。次に、ハンドラが、作成されたＶＭチャネルの各側に関連付けられる。ネイティブ側では、１つ以上のハンドラがネイティブ言語（たとえば、オブジェクティブＣ）で書かれてもよい。ＪＡＶＡ側では、１つ以上のハンドラがＪＡＶＡで書かれている。ハンドラは、相関を行なう機能、エラー条件をチェックする（たとえば、それが未承諾の応答、無効の応答かどうかをチェックする）機能、セキュリティおよびルーティング機能などを含むもののそれらに制限されたさまざまな機能を行なうように構成されてもよい。
【００７７】
一実施例では、ＶＭチャネルは、ＶＭチャネルによって受信されたメッセージが落とされないことを確実にする。ＶＭチャネルは、メッセージが、受信側でリッスンしている人によって適切に取扱われることを確実にする。ＶＭチャネルはまた、タイムアウトを取扱い、ＶＭチャネルの破壊をいつ放棄し、行なうかを決定するなどする。
【００７８】
ＶＭチャネルは、特にモバイル装置上で以前には利用できなかったいくつかの特性を提供する。ＶＭチャネルは、モバイル装置上などのように限定された／小さい設置面積において迅速なアクセスを提供しつつ、サイズまたは指向性によって制限されない、非同期的通信機構を提供する。それは、優先度と結び付けられた柔軟性を提供する。それは、誰が送信元か受信元かにかかわらず、埋込まれ得るかまたは外在化され得る２つのエンティティ間の通信のための制御された環境を提供する。
【００７９】
ハードウェア概要
図５は、この発明の一実施例に従った、使用され得るシステム環境１００のコンポーネントを示す簡略化されたブロック図である。図示されているように、システム環境５００は１つ以上のクライアントコンピューティング装置５０２、５０４、５０６、５０８を含み、それらは、ネイティブクライアントアプリケーションを含むクライアントアプリケーション、および、おそらくはウェブブラウザなどの他のアプリケーションを動作させるように構成されている。さまざまな実施例では、クライアントコンピューティング装置５０２、５０４、５０６および５０８は、サーバ５１２とやり取りしてもよい。
【００８０】
クライアントコンピューティング装置５０２、５０４、５０６、５０８は、汎用パーソナルコンピュータ（たとえば、マイクロソフトウィンドウズ（登録商標）および／またはアップルマッキントッシュ（登録商標）オペレーティングシステムのさまざまなバージョンを作動させるパーソナルコンピュータおよび／またはラップトップコンピュータを含む）、携帯電話またはＰＤＡ（マイクロソフトウィンドウズモバイルなどのソフトウェアを作動させ、インターネット、ｅメール、ＳＭＳ、ブラックベリー、または他の通信プロトコルに対応）、および／または、商業的に入手可能なさまざまなＵＮＩＸ（登録商標）またはＵＮＩＸ系オペレーティングシステムのうちのいずれかを作動させるワークステーションコンピュータ（さまざまなＧＮＵ／Ｌｉｎｕｘ（登録商標）オペレーティングシステムを限定なしで含むが）であってもよい。また、これに代えて、クライアントコンピューティング装置５０２、５０４、５０６および５０８は、ネットワーク（たとえば、以下に説明するネットワーク５１０）を通して通信可能な、シンクライアントコンピュータ、インターネット対応ゲームシステム、および／または個人用メッセージング装置といった任意の他の電子機器であってもよい。例示的なシステム環境５００は４つのクライアントコンピューティング装置を有して図示されているが、任意の数のクライアントコンピューティング装置がサポートされてもよい。センサ付き装置などの他の装置が、サーバ５１２とやり取りしてもよい。
【００８１】
システム環境５００は、ネットワーク５１０を含んでいてもよい。ネットワーク５１０は、ＴＣＰ／ＩＰ、ＳＮＡ、ＩＰＸ、AppleTalkなどを限定なしで含む商業的に入手可能なさまざまなプロトコルのうちのいずれかを使用してデータ通信をサポート可能な、当業者によく知られているあらゆるタイプのネットワークであってもよい。ほんの一例として、ネットワーク５１０は、イーサネット（登録商標）ネットワーク、トークンリングネットワークなどのローカルエリアネットワーク（local area network：ＬＡＮ）；ワイドエリアネットワーク；仮想プライベートネットワーク（virtual private network：ＶＰＮ）を限定なしで含む仮想ネットワーク；インターネット；イントラネット；エクストラネット；公衆交換電話網（public switched telephone network：ＰＳＴＮ）；赤外線ネットワーク；無線ネットワーク（たとえば、プロトコルのＩＥＥＥ８０２．１１スイートのいずれか、当該技術分野で公知のBluetooth（登録商標）プロトコル、および／または任意の他の無線プロトコルの下で動作するネットワーク）；および／または、これらのおよび／または他のネットワークの組合せであってもよい。
【００８２】
システム環境５００はまた、１つ以上のサーバコンピュータ５１２を含み、それは、汎用コンピュータ、特化サーバコンピュータ（たとえば、ＰＣサーバ、ＵＮＩＸサーバ、ミッドレンジサーバ、メインフレームコンピュータ、ラック搭載サーバなどを含む）、サーバファーム、サーバクラスタ、もしくは任意の他の適切な構成および／または組合せであってもよい。さまざまな実施例では、サーバ５１２は、１つ以上のサービスまたはソフトウェアアプリケーションを作動させるように適合されてもよい。
【００８３】
サーバ５１２は、上述のいずれかを含むオペレーティングシステム、および商業的に入手可能なあらゆるサーバオペレーティングシステムを作動させてもよい。サーバ５１２はまた、ＨＴＴＰサーバ、ＦＴＰサーバ、ＣＧＩサーバ、ＪＡＶＡサーバ、データベースサーバなどを含む、さまざまな追加のサーバアプリケーションおよび／または中間層アプリケーションのうちのいずれかを作動させてもよい。例示的なデータベースサーバは、オラクル、マイクロソフト、サイベース（Sybase）、ＩＢＭなどから商業的に入手可能なものを限定なしで含む。
【００８４】
システム環境５００はまた、１つ以上のデータベース５１４、５１６を含んでいてもよい。データベース５１４、５１６は、さまざまな場所に存在していてもよい。たとえば、データベース５１４、５１６のうちの１つ以上は、サーバ５１２にとってローカルな（および／またはサーバ５１２に常駐する）非一時的記憶媒体上に存在していてもよい。また、これに代えて、データベース５１４、５１６は、サーバ５１２からリモートであってもよく、ネットワークベースのまたは専用の接続を介してサーバ５１２と通信していてもよい。一組の実施例では、データベース５１４、５１６は、当業者にはよく知られているストレージエリアネットワーク（storage area network：ＳＡＮ）に存在していてもよい。同様に、サーバ５１２に起因する機能を行なうためのあらゆる必要なファイルが、サーバ５１２上にローカルにおよび／またはリモートで、適宜格納されてもよい。一組の実施例では、データベース５１４、５１６は、ＳＱＬフォーマットのコマンドに応答してデータを格納し、更新し、検索するように適合された、オラクルによって提供されるデータベースなどのリレーショナルデータベースを含んでいてもよい。
【００８５】
図６は、この発明の実施例に従った、使用され得るコンピュータシステム６００の簡略化されたブロック図である。たとえば、サーバ５１２、もしくはクライアント５０２、５０４、５０６または５０８は、システム６００などのシステムを用いて実現されてもよい。コンピュータシステム６００は、バス６２４を介して電気的に連結され得るハードウェア要素を含んで図示されている。ハードウェア要素は、１つ以上の中央処理装置（ＣＰＵ）６０２と、１つ以上の入力装置６０４（たとえば、マウス、キーボードなど）と、１つ以上の出力装置６０６（たとえば、表示装置、プリンタなど）とを含んでいてもよい。コンピュータシステム６００はまた、１つ以上の記憶装置６０８を含んでいてもよい。たとえば、記憶装置６０８は、ディスクドライブ、光学記憶装置、ならびに、ランダムアクセスメモリ（random access memory：ＲＡＭ）および／または読出し専用メモリ（read only memory：ＲＯＭ）などのソリッドステート記憶装置などの装置を含んでいてもよく、それらはプログラム可能、フラッシュ更新可能なものであってもよい。
【００８６】
コンピュータシステム６００は加えて、コンピュータ読取可能記憶媒体リーダ６１２と、通信サブシステム６１４（たとえば、モデム、ネットワークカード（無線または有線）、赤外線通信装置など）と、上述のようなＲＡＭ装置およびＲＯＭ装置を含み得る作業メモリ６１８とを含んでいてもよい。いくつかの実施例では、コンピュータシステム６００はまた、処理加速部６１６を含んでいてもよく、それは、デジタル信号プロセッサ（digital signal processor：ＤＳＰ）、専用プロセッサなどを含んでいてもよい。
【００８７】
コンピュータ読取可能記憶媒体リーダ６１２はさらにコンピュータ読取可能記憶媒体６１０に接続可能であり、コンピュータ読取可能な情報を一時的におよび／またはより永続的に含むためのリモートの、ローカルの、固定された、および／またはリムーバブルの記憶装置プラス記憶媒体を、ともに（および、オプションで記憶装置６０８と組合されて）包括的に表わす。通信システム６１４は、データが、ネットワーク５１０および／またはシステム環境５００に関して上述した任意の他のコンピュータと交換されることを許可してもよい。
【００８８】
コンピュータシステム６００はまた、オペレーティングシステム６２０および／またはアプリケーションプログラム（クライアントアプリケーション、ウエブブラウザ、中間層アプリケーション、ＲＤＢＭＳなどであってもよい）などの他のコード６２２を含む、作業メモリ６１８内に現在位置するものとして図示されたソフトウェア要素を含んでいてもよい。例示的な一実施例では、作業メモリ６１８は、上述のようなリライングパーティおよびオープン認証関連の処理のために使用される、実行可能コードおよび関連付けられたデータ構造を含んでいてもよい。コンピュータシステム６００の代替的な実施例は、上述のものからの多数の変形を有していてもよい、ということが理解されるべきである。たとえば、カスタマイズされたハードウェアも使用されてもよく、および／または、特定の要素がハードウェア、ソフトウェア（アプレットなどのポータブルソフトウェアを含む）、またはそれら双方で実現されてもよい。また、ネットワーク入力／出力装置などの他のコンピューティング装置への接続が採用されてもよい。
【００８９】
コードまたはコードの一部を含むための記憶媒体およびコンピュータ読取可能媒体は、当該技術分野で公知のまたは使用されるあらゆる適切な媒体を含んでいてもよく、コンピュータ読取可能な命令、データ構造、プログラムモジュール、もしくは他のデータといった情報の格納および／または送信のための任意の方法あるいは技術で実現される、揮発性および不揮発性（非一時的）、リムーバブルおよび非リムーバブル媒体を含むもののそれらに限定されない記憶媒体および通信媒体を含み、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリまたは他のメモリ技術、ＣＤ−ＲＯＭ、デジタル多用途ディスク（digital versatile disk：ＤＶＤ）または他の光学ストレージ、磁気カセット、磁気テープ、磁気ディスク記憶装置または他の磁気記憶装置、データ信号、データ伝送、もしくは所望の情報を格納または送信するために使用可能であり、コンピュータによってアクセス可能な任意の他の媒体を含む。
【００９０】
発明の特定の実施例を説明してきたが、さまざまな修正、変更、代替的構成、および等価物も発明の範囲内に包含される。この発明の実施例は、ある特定のデータ処理環境内での動作に制限されず、複数のデータ処理環境内で自由に動作できる。加えて、この発明の実施例は、ある特定の一連のトランザクションおよびステップを使用して説明されてきたが、この発明の範囲が上述の一連のトランザクションおよびステップに限定されないことは、当業者には明らかなはずである。
【００９１】
また、この発明の実施例はハードウェアとソフトウェアとのある特定の組合せを用いて説明されてきたが、ハードウェアとソフトウェアとの他の組合せもこの発明の範囲内にあることが認識されるべきである。この発明の実施例は、ハードウェアのみで、またはソフトウェアのみで、またはそれらの組合せを用いて実現されてもよい。
【００９２】
したがって、明細書および図面は、限定的ではなく例示的な意味であると考えられるべきである。しかしながら、より広い精神および範囲から逸脱することなく、追加、削減、削除、ならびに他の修正および変更がそれに行なわれてもよいことは、明らかであろう。
【図１】
2015503799.tif 000003
【図２】
2015503799.tif 000004
【図３】
2015503799.tif 000005
【図４Ａ】
2015503799.tif 000006
【図４Ｂ】
2015503799.tif 000007
【図５】
2015503799.tif 000008
【図６】
2015503799.tif 000009
【国際調査報告】
2015503799.tif 000010
2015503799.tif 000011