同様の要素が同じ参照番号で示された添付図面を参照して本発明の態様を一例として説明するが、本発明は、これに限定されない。この開示において、「ある」、「1つの」、「種々の」及び「更なる」実施形態という言い方は、必ずしも同じ実施形態ではなく、少なくとも1つを意味することに注意されたい。以下の説明では、本発明を完全に説明するために、多数の特定の細部を説明する。しかしながら、これらの特定の細部を伴わずに本発明を実施できることが当業者に明らかであろう。他の例では、本発明を不明瞭にしないために、良く知られた特徴は、詳細に述べないことにする。
種々の実施形態において、ビジネスプロセスの状況でユーザ間にコラボレーションを与えるシステム及び方法を説明する。これら実施形態の態様において、コラボレーションプロセスは、統合ソフトウェア開発環境(IDE)において開発することもできるし、又は他の適当な手段を使用することにより開発することもできる。IDEの一例は、カリフォルニア州サンノセのBEAシステムズ・インクから入手できるWebLogic(登録商標)ワークショップである。コラボレーションプロセスは、1つ以上のプログラミング言語で書くことができ、マルチスレッドとすることができ、分離されたプロセスへと細分化でき、及び/又は1つ以上のコンピューティング装置/プロセッサ間に分布させることができる。コラボレーションプロセスは、アプリケーションサーバーにおいてスタンドアローンプログラムとして、及び/又は1つ以上のネットワークを通してアクセスできるリソース(例えば、オブジェクト)として展開することができる。最後に、コラボレーションプロセスは、ソフトウェア、ハードウェア、又はハードウェアコンポーネント(1つ又は複数)及びソフトウェアの組み合せとして実施することができる。
図1は、本発明の種々の実施形態においてコラボレーションプロセスのコンポーネント部分を例示する。この図は、コンポーネントを論理的に個別のものとして示すが、これは、単なる例示に過ぎない。当業者に明らかなように、この図に示すコンポーネントは、結合することもできるし、又は個別のソフトウェア、ファームウェア及び/又はハードウェアコンポーネントに分割することもできる。更に、当業者に明らかなように、このようなコンポーネントは、それらをいかに結合し又は分割するかに関わらず、同じコンピューティング装置において実行することもできるし、或いは1つ以上のネットワーク又は他の適当な通信手段により接続された異なるコンピュータ装置間に分布させることもできる。
種々の実施形態において、コラボレーションプロセスは、1つ以上のプログラミング言語(例えば、Java(登録商標)、C#、等)で少なくとも一部分実施することができる。もちろん、本発明の範囲は、特定のプログラミング言語又はパラダイムに制限されない。これら実施形態の態様において、コラボレーションプロセスは、BEAシステムズ・インクから入手できるWebLogic(登録商標)サーバーのような1つ以上のアプリケーションサーバー112に展開されたエンタープライズ・エディション(J2EE)コンポーネントである1つ以上のJava(登録商標)2プラットホームを含むことができる。説明上、コラボレーションプロセスは、次のコンポーネントの1つ以上を含むことができる。
−制御(制御レイヤー108として単独で示されている);
−ウェブサービス100;
−ページフロー102;
−ビジネスプロセス104;及び
−JavaServerページ(JSP)106(その幾つか又は全部が1つ以上のページフローの一部分でよい)。
コンポーネントのロジックを実施するJava(登録商標)コードに加えて、各ソースコードファイルは、ランタイム能力を決定するのに使用できるカスタムJavadoc注釈を含むことができる。これらの注釈により参照されるインフラストラクチャーは、J2EEコンポーネントとして実施することができる。これら実施形態の態様において、コラボレーションプロセスは、最終的に、純粋なJ2EEアプリケーションとして展開することができる。
種々の実施形態において、制御は、ビジネスロジックをカプセル化し、及び/又は1つ以上のリソース110へのプログラムアクセスを与える。これら実施形態の態様において、制御モデルは、コラボレーションプロセスが、単純なJava(登録商標)オブジェクトであるかのように一貫した単純な仕方でビジネスロジック又はリソースへアクセスするのを可能とする。制御は、データベース、Java(登録商標)メッセージサービス(JMS)待ち行列、及びエンタープライズJavaBeansTM(EJB)のような共通のリソースへのアクセスを簡単化することができる。しかしながら、本開示は、特定の制御の実施、プログラミング言語、又はプログラミングパラダイムに制限もされないし、又はそれらに依存もしない。当業者であれば、制御は、ライブラリー、サブルーチン、機能、メソッド、マクロ、手順、並びにプログラムロジック及び/又はリソースをカプセル化する他の適当な手段を含む(これらに限定されないが)多数の他の仕方で実施できることが明らかであろう。
これら実施形態の態様において、説明上、制御は、Java(登録商標)クラスとして実施できると共に、ランタイムにおいてJ2EE EJBコンテナによりマネージすることができる。コンテナは、自動トランザクション、非同期性、状態マネージメント、及び他のサービスを与えることができる。これら実施形態の態様において、制御のJava(登録商標)クラス定義は、制御のランタイム振舞いを定義する注釈(例えば、Javadoc注釈)を含む。制御は、ウェブサービス、ページフロー(pageflow)、JSP、ビジネスプロセス、及び他の制御を使用できると共に、それらからも使用され得る。制御の商業的実施形態は、BEAシステムズ・インクから入手できる。その全体としてこの開示に含まれるBEA WEBLOGIC(登録商標)WORKSHOPTM HELP:ANNOTATIONS REFERENCE(2003年11月、バージョン8.1、SP2)を参照されたい。
種々の実施形態において、ウェブサービスとは、共通のウェブプロトコルを経て拡張可能なマークアップ言語(XML)メッセージを送信することにより機能にアクセスできるところのソフトウェアコンポーネントである。典型的に、これらのメッセージは、SOAP(シンプル・オブジェクト・アクセス・プロトコル)と称される特有のXML方言である。メッセージは、通常、ウェブサービスがあるオペレーションを実行するための要求を表わす。サーバーホスティングウェブサービスは、このようなメッセージを受信すると、それを、ウェブサービスビジネスロジックを実施するエンティティへ配送する。オペレーションが完了すると、ウェブサービスは、通常、そのクライアントに応答して、XML又はSOAP応答メッセージを送信する。
ウェブサービスはXMLを経て通信できるので、クライアント及びウェブサービスは、一般に、他のものが実施されるところのプログラミング言語やオペレーティングシステムに気付かない。例えば、SOAP及びXMLスキーマは、任意の複雑さのデータ形式を記述するための、言語及びオペレーティングシステムとは独立した仕方を与える。ウェブサービスの第1世代は、通常、HTTPを経て呼び出される。しかしながら、ウェブサービスコンセプトの基礎は、メッセージングであり、メッセージを搬送するところのプロトコルは、無関係である。これら実施形態の態様において、ウェブサービスは、Java(登録商標)ウェブサービス(JWS)として指定することができる。JWSは、ウェブサービスオペレーションとして露出できる1つ以上のメソッドを定義する単一のJava(登録商標)クラスを含むことができる。オペレーションは、ウェブサービスのユニフォームリソースロケータ(URL)に対する要求が受け取られたときに呼び出され、この要求は、実行されるべきオペレーションを識別すると共に操作すべきデータを含む適切なXML又はSOAPメッセージを含む。Javadoc注釈は、ウェブサービス及びそのオペレーションの属性を構成するのに使用できる。
種々の実施形態において、ページフローは、多数のウェブページ、通常、JSPの間での情報のプレゼンテーション及びフローをマネージすることができる。ページフローは、アプリケーションを通してユーザの対話型経路を制御できると共に、制御を使用してバックエンドリソースにアクセスすることができる。ページフローは、特定のプログラミング言語、ソフトウェアフレームワーク、又はランタイムパラダイムに依存しない。これら実施形態の態様において、ページフローは、オープンソースファシリティであるストラッツ(Struts)フレームワークを、それらのランタイムインフラストラクチャーに対してアパッチ・ジャカルタ・プロジェクト(Apache Jakarta Project)(http://jakarta.apache.org/struts/)からレバレッジすることができる。ページフローモデルは、ウェブページにわたる情報フローのマネージメントに集中することによりストラッツモデルを改良させる。ページフローは、1つ以上のJava(登録商標)ページフロー(JPF)として定義することができる。JPFは、1つ以上のアクションメソッドを定義する単一のJava(登録商標)ページフロークラスを含むことができる。アクションは、JPFに定義されたルールに基づき、且つ個々のウェブページとのユーザ対話に応答して、呼び出すことができる。Javadoc注釈は、アクションメソッドの属性を構成するのに使用できる。ページフローの商業的実施は、BEAシステムズ・インクからそれらのWebLogic(登録商標)ポータル製品の一部分として入手できる。
種々の実施形態において、ビジネスプロセスは、種々のアプリケーションと人間の関係者との一体化、及びビジネスパートナーとエンタープライズとの間の整合された情報交換を可能にする。ビジネスプロセスは、定義されたオーダリングを伴うアクティビティのセットで構成される。説明上、ビジネスプロセスは、潜在的な種々のビジネスシステム(例えば、ビジネス対ビジネスのオーダー発注及び追跡システム、等)とユーザとの対話であって、ビジネスプロセス自体が事象発生及びメッセージ交換により進められるような対話を編成する。これら実施形態の態様において、ビジネスプロセスは、Java(登録商標)プロセス定義(JPD)により指定することができ、これは、参考としてここにその全体を援用する「JAVA(登録商標) COMMUNITY PROCESS JAVA SPECIFICATION REQUEST (JSR) 207: PROCESS DEFINITION FOR JAVA(登録商標)」(www.jcp.orgにおいて入手可能)に適合するものである。これら実施形態の態様において、ビジネスプロセスは、EJBへとコンパイルされ、そしてアプリケーションサーバーにおいて展開される。エンティティビーンは、ステートフルなプロセスに対して使用することができ、そしてセッションビーンは、ステートレスなプロセスに対して使用することができる。
図2は、本発明の種々の実施形態におけるコンポーネント呼び出しを例示する高レベル図である。これら実施形態の態様において、コンポーネントがコンパイルされるときに、アーティファクトの集合体を発生し、及び/又は展開するように(例えば、アプリケーションサーバーにおいて)構成することができる。これらのアーティファクトは、ディスパッチャー200及びコンポーネントコンテナ202を含むことができる。コンポーネントコンテナは、コンテクストを与えると共に、他のコンポーネントへの一貫したインターフェイスを与える軽量クラスでよい。ウェブティア(tier)は、外部クライアント(例えば、ウェブブラウザ、又はウェブブラウザと一緒に実行されているアプリケーション)からコンポーネントを呼び出すためのプロトコルサポートを与える。トランスポートオブジェクトは、プロトコル特有のフォーマット(208、210)で呼び出し要求を受け取り、そしてそれらを、ディスパッチャーへ通される一般的な要求オブジェクトへと変換する。JMS及びHTTPのような異なるトランスポートをサポートすることができるが、本開示は、特定のトランスポートに限定されず、又はそれに依存することもない。従って、まだ開発されていない新規なトランスポートも本開示の精神及び範囲内に完全に包含される。
種々の実施形態において、HTTPを経て到達するウェブサービス呼び出しは、サーブレット206により受け取ることができる。ウェブサービスがその一部分であるコラボレーションプロセスは、URLに対する全ての要求(例えば、「.jws」で終わる)をこのサーブレットへルーティングするように構成できる。JWS URLルーティングと、特定のウェブサービスURLにおける希望の基本的認証セキュリティとを、標準的なJ2EEウェブアプリケーション展開記述子において指定することができる。JMSプロトコルを経て到達するウェブサービス呼び出しは、特定の構成のJMS待ち行列(図示せず)へ向けることができる。メッセージ駆動ビーン(MDB)204は、この待ち行列を聴取するように展開することができる。
これら実施形態の態様において、ディスパッチャーは、コラボレーションプロセス内の全てのコンポーネントにより構成されそして使用され得る。これら実施形態の態様において、ディスパッチャーは、到来する要求オブジェクトを受け取り、そしてそれらを適宜にルーティングする。特定のアプリケーションに対するディスパッチャーは、コラボレーションプロセスコンポーネントに関連する注釈を経て開発者が選択したランタイム特徴に基づいて、1つ又は2つのEJB(図示せず)を含むことができる。
−コンポーネントメソッドの非同期呼び出しを取り扱うメッセージ駆動ビーン。呼び出し要求は、待ち行列に入れられて、後でサービスされる。このビーンは、コラボレーションプロセスが1つ以上のコンポーネントをバッファされたメソッドと共に含む場合に展開することができる。
−到来する同期メソッド呼び出し要求を受け取るためのステートレスセッションビーン。これは、同期要求を適当なコンポーネントコンテナ(202)へ直接ルーティングし、そして非同期要求をメッセージ駆動ビーンへルーティングすることができる。同期メソッドは、これを指示する注釈を有することができる。
種々の実施形態において、コンテナ(例えば、コンテナEJB202)は、ウェブサービス、制御及びビジネスプロセス定義で見つかったコードをラップするのに使用できる。コンテナは、コンテクストサービス、制御初期化、及び事象ルーティングのような特殊な機能と、要求呼び出し中のコンテナ特有の前/後処理とを与えることができる。コンテナは、それが収容するコンポーネントのパブリックインターフェイスの鏡像であるビジネスインターフェイスを露出させる。これは、コンポーネントに対するメソッドごとの宣言セキュリティを可能にする。コンポーネントのソースファイルにおいて定義されたコードは、最終的に、コンポーネントメソッドが呼び出されたときにコンテナにより直接実行される。
これら実施形態の態様において、2つの形式のコンテナEJBがある。
−ステートレス(非会話的)コンポーネントメソッド呼び出しを取り扱うステートレスセッションビーン。ステートが要求されないので、これら呼び出しは、このステートレスセッションビーンのプールされたインスタンスにより取り扱うことができる。
−ステートフル(会話的)コンポーネントメソッド呼び出しを取り扱うエンティティビーン。ステートフルメソッドは、特定コンポーネントインスタンスの持続ステートへのアクセスを要求する。このEJBは、ウェブアプリケーションが1つ以上のコンポーネントを会話的メソッドと共に含む場合に存在する(例えば、メソッドは、それらが「会話」をスタートするか、継続するか、又は終了させるかを指示するように注釈が付けられる)。会話をスタートするとマークされたメソッドが読み出されたときには、新たな会話インスタンスを表わすために新たなエンティティビーンインスタンスが生成される。エンティティビーンのデータは、コンポーネントのインスタンスの持続ステートである。継続又は終了メソッドのその後の呼び出しは、エンティティビーンのインスタンスに作用する。
種々の実施形態において、情報をクライアントへ返送することができる。同期メソッド呼び出しのケースでは、コンポーネントメソッドの返送値を、XMLマッピングを経てXML又はSOAP応答に変換することができる。この応答は、ディスパッチャーを経て適当なトランスポートオブジェクトに返送することができる。HTTPを経て要求が到達する場合には、その応答をHTTP応答としてパッケージし、そしてサーブレットにより発信HTTP要求に対する応答として返送することができる。JMSを経て到達する要求のケースでは、直接的な応答が必要とされない。非同期メソッド呼び出しのケースでは、クライアントは、そのクライアントが会話中にコールバック位置を供給する(例えば、URLを経て)場合に、メソッドが呼び出されたコンポーネントからコールバックを任意に受信することができる。コンポーネントのコンテナは、コールバックプロキシーを使用して、コールバック行先へ情報を送信することができる。
種々の実施形態において、ページフローコンポーネントは、コラボレーションプロセスにおいて関連ウェブページのセットにわたりナビゲーション及びデータフローを制御する。これら実施形態の態様において、ページフローは、ストラッツウェブアプリケーションである。しかしながら、ページフローは、制御へのアクセスを与えるような多数の重要なエリアにおいてストラッツを改善する。ページフローの更なる情報については、この参照によりその全体としてこの開示に含まれるBEAシステムズ・インクから入手できるBEA WebLogic(登録商標)WorkshopTM Help(2003年11月のバージョン8.1、SP2)を参照されたい。
ストラッツフレームワークは、モデル・ビュー・コントローラ(MVC)のパターンをベースとする。ストラッツは、開発者がモデル及びビュー部分に対して適切な技術を選択するのを許すように設計されるが、実際には、J2EEコンポーネントが各部分に対して使用され、即ちビューは、通常、JSP(JavaServerページ)として実施され、コントローラは、通常、Java(登録商標)サーブレットであり、そしてモデルは、通常、1つ以上のEJB(エンタープライズJavaBeans)で構成される。
ストラッツフレームワークは、ソフトウェア開発者がデフォールトストラッツ振舞いを増大又は交換できるような多数の拡張性ポイントを与える。ページフローは、これらの拡張性ポイントを利用して、その純粋なストラッツを使用するのがより簡単であるプログラミングモデルを与える。図3は、本発明の種々の実施形態におけるページフロー制御フロー及び拡張性ポイントを例示する。
種々の実施形態において、コラボレーションプロセスは、PageFlowJspFilter(「*.jsp」へマップされたサーブレットフィルタ)でJSP要求を遮るように構成される。JSPに対する到来する要求において、JSPに対するディレクトリー経路が、登録されたストラッツモジュール(又はオンザフライで動的に登録されるストラッツモジュール)に対応する場合には、そのモジュールが要求において選択される。ストラッツは、ストラッツアプリケーションにおける全アクションユニバーサルリソース識別子(URI)が向けられるところのActionServletを与える。サーブレットは、特定のURIパターンをストラッツモジュールに関連付けるマッピングを使用して、到来する要求を適切なモジュールに向ける。ストラッツフレームワークは、カスタムアクションサーブレットの置き換えを許す。これらの実施形態の態様において、ActionServletは、カスタムPageFlowActionServlet300に置き換えられる。
ページフローがコンパイルされるときには、ストラッツコンフィギュレーションファイルを、ページフローソースファイルにおける注釈に基づいて発生することができる。種々の実施形態において、ページフローは、コンフィギュレーションファイルを使用して、特定のURI(又はURIパターン)に向けられた到来する要求をサーブレットにマップさせる。例えば、「.do」又は「.jpf」で終わるURIは、PageFlowActionServletへマップすることができる。到来する要求が到達すると、PageFlowActionServletは、要求のURIがマップされるところの登録されたストラッツモデルを探す。それが見つかると、要求が、ストラッツモジュールに関連した要求プロセッサへディスパッチされる。見つかったモジュールは、動的に登録されるページフローストラッツモジュールでよい。
又、ストラッツは、各ストラッツモジュールに関連した要求プロセッサオブジェクトも与える。要求プロセッサは、ユーザロール確認、アクションルックアップ、フォームデータマネージメント、アクションディスパッチ、及び要求転送を含む多数のフェーズを通して要求を見張る。ストラッツフレームワークは、カスタム要求プロセッサの置き換えを許す。これら実施形態の態様において、要求プロセッサは、カスタムPageFlowRequestProcessor302に置き換えられる。
ストラッツフレームワークは、要求の処理において種々のポイントで拡張を許すように要求プロセッサインターフェイスを定義する。PageFlowRequestProcessorは、これらの拡張性ポイントを利用する。processMapping(プロセスマッピング)304の拡張性ポイントは、PageFlowRequestProcessorが、ストラッツコンフィギュレーションで定義されたアクションマッピングを検査して、要求のURIに関連したアクションを見出すのを許す。成功の場合には、processMappingが、アクションプロセスに関する情報をカプセル化するActionMapping(アクションマッピング)を返送する。
コラボレーションプロセスは、特定のアクションを実行するためにユーザを特定のセキュリティロールのメンバーとして認証することを要求するように構成されてもよい。processRole(プロセスロール)306の拡張性ポイントは、発呼ユーザが適当なロールにあるかどうか決定する。ユーザを、要求されたロールに属するものとして認証できない場合には、ブラウザにエラーを返送することができる。
要求プロセッサは、ターゲットアクションが、processActionForm(プロセスアクションフォーム)308の拡張性ポイントに関連フォームビーンを有するかどうか、そしてフォームビーンが、要求に対して見られるべきかセッションに対して見られるべきか決定する。次いで、要求プロセッサは、要求ステート又はセッションステートにおいてフォームビーンにアクセスするよう試みる。それが見つからない場合には、新たなフォームビーンを生成し、そして適当なステートで記憶することができる。次いで、要求プロセッサは、要求の入力データを、processPopulate(プロセスポピュレート)310の拡張性ポイントにおけるprocessActionFormで識別されたフォームビーンへマップする。
要求プロセッサは、次いで、適切なアクションオブジェクトを見つける。ストラッツは、アクションマッピングで指定されたクラスを使用してオブジェクトをインスタンス生成し、そしてprocessActionCreate(プロセスアクション生成)312の拡張性ポイントにおいてオブジェクトを返送する。種々の実施形態において、各ページフローの基本クラスは、ストラッツアクションクラスから導出される。PageFlowRequestProcessor(ページフロー要求プロセッサ)は、適切なページフローオブジェクトをインスタンス生成し(もし必要であれば)、それをセッションにおいてキャッシュし、そしてそれをアクションとして返送する。又、ページフローオブジェクトは、適当な時期に呼び出されるライフサイクルメソッドを任意に実施してもよい。これらのメソッドは、onCreate、beforeAction、afterAction、及びonDestroyである。ページフローがインスタンス生成されるときに、そのonCreateメソッドが呼び出される。
種々の実施形態において、PageFlowRequestProcessorは、ページフローの実行メソッドを呼び出す。このメソッドは、ページフローに使用可能なコンテクストを確立することを含む多数のステップを、ページフローの呼び出しの周りで実行する。要求、応答、セッション及びアクションマッピングオブジェクトは、全て、ページフローオブジェクトに記憶される。実行メソッドは、ページフローのbeforeActionライフサイクルメソッドを呼び出す。次いで、実行メソッドは、返送されるべきアクションフォワードオブジェクトを予想するページフローアクションメソッドを呼び出す。次いで、コントローラは、ページフローのafterActionライフサイクルメソッドをコールし、そしてActionForwardオブジェクトを要求プロセッサへ返送する。ActionForwardオブジェクトは、PageFlowRequestProcessorがprocessForwardConfig314の拡張性ポイントにおいてクライアントを前進させ又は向け直すことのできる行先を表わす。
種々の実施形態において、インターセプターオブジェクトは、ページフロートポロジーをインターセプトすることによりそれを動的に変更することができる。これは、全ページフローを置き換えたり、又はページフローシーケンスを既存のページフローに挿入したりすることを含む種々の状況に対して有用である。これら実施形態の態様において、インターセプターは、ページフローの開始又は終了に発生し、又はbeforeAction及びafterActionメソッドにおいて評価され、そして行先ページフローを動的に決定できるところのActionForwardオブジェクトを生成することができる。説明上、これは、ユーザがウェブページへ初めてナビゲートするときに、ある種の通知が与えられるようなシナリオに有用である。この通知を再検討した後、ユーザは、オリジナルのウェブページに自動的に戻ることができる。アクションの前後に、ページフローは、インターセプトの前後のポステッドフォームデータにアクセスする。インターセプションの後に、ページフローは、更に、インターセプトされたアクションによりポピュレートされるフォームにアクセスすることができる。
種々の実施形態において、インターセプターは、ルール駆動することができる。ルールは、多数の仕方で指定することができる。本発明は、インターセプタールールを指定する方法に依存せず、又はそれに限定されるものではない。説明上、ルールは、影響を受けるページフローの名前、インターセプターがbeforeActionメソッドで生じるかafterActionメソッドで生じるか、及びターゲットアクション/ページフローの識別を指定することができる。これら実施形態の態様において、インターセプタールールに対する変更は、オンザフライで検出することができる。又、インターセプタールールは、「1回」フラグにより変更することもでき、これは、ターゲットページフローを最初に通るときだけインターセプションが生じることを意味する。一実施形態では、インターセプションは、ソース及びターゲットアクションと、同様に1回のインターセプションに対する変更とを定義するXMLファイルを経てコンフィギュレーションすることができる。又、このコンフィギュレーション情報は、ランタイムにアクセス可能であり、従って、コンフィギュレーションされたインターセプションのいずれかをプログラムでオン及びオフにすることもできるし、或いはソース及びターゲット情報をプログラムで更新することもできる。
図4は、本発明の種々の実施形態におけるメッセージングレイヤーを例示する。この図は、コンポーネントを論理的に個別のものとして示すが、これは、単なる例示に過ぎない。当業者に明らかなように、この図に示すコンポーネントは、結合することもできるし、又は個別のソフトウェア、ファームウェア及び/又はハードウェアコンポーネントに分割することもできる。更に、当業者に明らかなように、このようなコンポーネントは、それらをいかに結合し又は分割するかに関わらず、同じコンピューティング装置において実行することもできるし、或いは1つ以上のネットワーク又は他の適当な通信手段により接続された異なるコンピュータ装置間に分布させることもできる。
コラボレーションシナリオ(以下、「コラボレーション」又は「シナリオ」と称する)は、コラボレーションプロセスの整合のもとで一緒に作用する多数のクライアントユーザ及び/又はプロセス(以下、「クライアント」と称する)を含むことができる。種々の実施形態において、シナリオ関係者(即ちクライアント(1人又は複数)及びコラボレーションプロセス)は、それらの間で知られているプロトコルを使用して相互作用することができる。これら実施形態の態様において、プロトコルは、1つ以上のパブリック及び/又はプライベートネットワーク、共有メモリ、ファイルシステム、分布オブジェクト、及び情報交換に適した他の手段を含む(これらに限定されないが)通信媒体を経て送信することができる。
種々の実施形態において、メッセージングレイヤー400は、シナリオ関係者に対する通信媒体を与える。関係者は、アプリケーションプログラミングインターフェイス(API)402を利用することによりメッセージングレイヤーを経て互いに対話することができる。APIは、基礎となる通信ファシリティへの依存性を生じることなくメッセージング機能を露出する。又、APIは、あるタスクを実行するように仕立てられた1つ以上の特殊なAPI(図示せず)も含むことができる。これら実施形態の態様において、API機能は、関係者に対して、ソフトウェアライブラリーとして、1つ以上のオブジェクトとして、及び/又は他の適当な手段により、表面化することができる。
又、メッセージングレイヤーは、1つ以上の通信プロバイダー(406−412)が、SPIの幾つか又は全部を実施し、ひいては、それらのサービスをAPIに利用できるようにすることにより、メッセージングレイヤーに動的に「プラグイン」するのを許すサービスプロバイダーインターフェイス(SPI)404も備えている。これら実施形態の態様において、SPI機能は、ライブラリーとして、1つ以上のオブジェクトとして、及び/又は他の適当な手段により、表面化することができる。これら実施形態の態様において、プロバイダーは、必要な帯域巾、トランスポート信頼性、プロトコル等のパラメータに基づいてプロバイダー実施を命令するSPIファクトリークラスにより、ランタイムに、動的に生成することができる。種々の実施形態において、多数の通信プロバイダーを、メッセージングレイヤーにより同時にサポートすることができる。これは、あるシナリオ内の多数のトランスポートを利用するのを許す(例えば、インスタントメッセージング及びeメール)。これら実施形態の更に別の態様において、多数のプロバイダーが共存するときには、プロバイダーが指定されないときに通信に使用するために「デフォールト」トランスポートとして各々呼称することができる。当業者に明らかなように、通信プロバイダーは、ネットワークベースの通信を与えることに限定されず、任意の情報交換方法、例えば、プロセス間通信、プロセッサ間通信、共有メモリ又は他の記憶システムを通しての通信、及び所与のコンピューティング装置内の他の適当な通信リンク(これらに限定されないが)をベースとすることもできる。
SPIは、APIが、プロバイダー独立形態でプロバイダーの機能にアクセスするのを許す。各プロバイダーは、SPIの幾つか又は全部を実施するので、APIへの変更を必要とせずにプロバイダーを変更することができる。これは、新たな通信ファシリティ及び技術が利用可能になったときにそれらを受け容れるのを許す。というのは、基礎となる通信プロバイダーの性質がSPIにより隠されるからである。従って、本開示は、何らかの特定の通信プロトコル又は物理的レイヤートランスポートに限定されない。本開示の精神及び範囲内で多数のこのようなプロバイダーが考えられることが当業者に明らかであろう。
SPIは、1つ以上の特殊なSPI(図示せず)を含んでもよい。これら実施形態の態様において、SPIは、プロバイダーを初期化し、開始し、そして停止する機能を含むことができる。又、SPIは、特定のタスクに対して仕立てられた特殊なSPIへのアクセスも与えることもできる。これら実施形態の態様において、メッセージプロバイダーSPIは、次のものを含む機能を露出することができる。
−プロバイダーを初期化するための機能。これは、各プロバイダーのサーバー又はもしあれば他のプロセス(例えば、インスタントメッセージングサーバー)を構成することを含んでもよい。
−能力のようなプロバイダー属性を得るための機能。例えば、所与のプロバイダーによりサポートされる暗号化機構及び信頼性。
−ユーザアカウントマネージャーAPIを得るための機能であって、このようなAPIは、ユーザアカウントのマネージに関連した機能を露出する。例えば、ユーザパスワード及びユーザ許可を変更する。
−ユーザ存在マネージャーAPIを得るための機能であって、このようなAPIは、ユーザ存在関連情報を与える機能を露出する。
−接続マネージャーAPIを得るための機能。説明上、このようなSPIは、サーバーにログインする能力、属性のセット(例えば、使用すべき暗号化機構の形式、等)に基づいて有効通信接続を得る能力、接続に対する独特の識別子を得る能力、及びメッセージを送信及び受信する能力のような接続マネージメント機能を露出することができる。
−通信に関連した事象を受け取るための機能。これら実施形態の態様において、このメソッドは、所与のプロバイダー接続を経てメッセージを検索する準備ができたときに通知を受け取るためのメソッド、オブジェクト又は機能(「メッセージリスナー」)の登録を許す。これら実施形態の態様において、多数のメッセージリスナーを所与の接続に関連付けることができる。
−メッセージを処理するメソッド(例えば、情報をパースし、抽出し、等々)。
SPIプロバイダーの1つの形式は、チャンネル(例えば、408及び410)である。チャンネルは、メッセージをトランスポートし、そしてそれらを関係者に利用できるようにする役割を果たす。チャンネルは、非同期及び/又は同期通信を与えることができる。非同期通信の場合には、チャンネルは、受信したメッセージを1つ以上の登録されたメッセージリスナーへ向けることができる。種々の実施形態において、チャンネルは、ジャバー・ソフトウェア・ファウンデーション(www.jabber.org)から入手できる拡張可能なメッセージング及び存在プロトコル(XMPP)をベースとすることができる。このXMPPは、拡張可能なマークアップ言語(XML)をベースとするインスタントメッセージングプロトコルである。XMPPベースのチャンネルプロバイダーは、外部XMPPサーバーと通信して、メッセージを他の関係者と交換し、そして存在情報を伝播することができる。存在情報は、関係者がシナリオに対して他の関係者を見つけるのを許す。本開示の精神及び範囲内で、同様の又は異なる通信技術をベースとする他の実施も考えられる。メッセージングレイヤーの観点から要求される全てのものは、SPIに適合する。
存在の概念は、インスタントメッセージング(IM)の世界で使用される。存在のIMサポートは、各人の名簿(「バディー(友人)リスト」とも称する)内の全てのユーザに対して状態(「利用可能」、「利用不能」、「自分のデスクから離れている」、等々)を与えることを中心とする。これら実施形態の態様において、存在情報は、ロールの使用を通してユーザに関する情報又は他の情報に結合することができる。メッセージの送信及び受信に加えて、メッセージングレイヤーAPIは、SPIプロバイダーのサポートがある場合に(XMPPをベースとするプロバイダーの場合と同様に)、存在及び状態情報を関係者に与えることもできる。存在情報は、シナリオ関係者がそれらの存在及び状態を互いに知らしめるために使用できるチャンネルプロバイダー又は特殊目的の存在プロバイダー(406)により与えることができる(例えば、その情報を他の関係者へブロードキャストするか、又は中央レポジトリーを更新することにより)。説明上、存在プロバイダーは、チャンネルプロバイダーを利用して、存在情報を通信することができる。種々の実施形態において、2つの形式の存在情報、即ちユーザ存在及びアプリケーション存在、がある。ユーザ存在及び状態は、シナリオに対する関係者の利用性に関する情報を与える。これら実施形態の態様において、ユーザ存在は、ロールをベースとすることができる。アプリケーション存在は、特定のアプリケーションの利用性に関する情報を与える。アプリケーションの存在は、必要なアプリケーションを実行している適当な関係者を見つける必要がある場合に重要となる。
種々の実施形態において、APIは、ロール(role)ベースの存在機能を与えることができる。これは、特定のロール及び存在状態へマップするユーザが実行中のシナリオへ動的に招待されるのを許す。これら実施形態の態様において、存在機能は、所与のロールにマップすると共にシナリオへの参加に「利用できる」ユーザのセットを与えることができる。これら実施形態の態様において、ロールは、ユーザの動的なセットである。ロールは、そのメンバーにより共有された属性に基づくことができ、そして1つ以上のメンバーシップ基準により定義することができる。ロールマッピングは、ユーザが所与のロールに対してメンバーシップ基準(Membership Criteria)を満足するかどうか決定するプロセスである。説明上、ロールは、次のように述べることができる。
Role=PMembers + [Membership Criteria]
但し、PMembersは、もしあれば、メンバーシップ基準を受けるこのロールの潜在的メンバーのプールを形成するユーザ(1人又は複数)、グループ(1つ又は複数)及び/又は他のロール(1つ又は複数)のセットである。ロールにあるべきユーザ又はプロセスに対して、それらは、PMembersに属しそしてメンバーシップ基準を満足しなければならない。メンバーシップ基準は、1つ以上の条件を含むことができる。説明上、このような条件は、1つ以上の(おそらくネスト型及び混合型)ブール、数学的、機能的、関連性、及び/又は論理的表現を含むが、これらに限定されない。これらのロールは、ランタイムに動的に評価できるので、シナリオの関係者がアクティブである間にそれらを動的に変更することもできる。これは、システムアドミニストレータに膨大な量の融通性を与える。というのは、作用を受けるプログラムを再コンパイル又は再始動せずに、シナリオの基本的動作パラメータを変更できるからである。
説明上、次のアドミニストレータロールについて考える。
Administrator = Joe, Mary, SuperUser + CurrentTime > 5:00pm
このアドミニストレータロールは、2人のユーザ(Joe及びMary)と、SuperUserという名前のユーザグループに属するユーザとをその潜在的メンバーとして有する。メンバーシップ基準は、現在時間が5:00pm以降であることを要求する条件を含む。従って、ユーザがJoe、Maryであるか、SuperUserグループに属し、そして現在時間が5:00pm以降である場合には、ユーザがアドミニストレータロールのメンバーである。
種々の実施形態において、メンバーシップ基準は、ユーザのプロパティを少なくとも一部分ベースとすることができる。説明上、以下の表1に定義するロールについて考える。
表1:種々の実施形態におけるロールの例
スーパーバイザー(Supervisor)ロールは、ユーザJoe、Marry、Paul及びTimothyをその潜在的メンバーとして含む。ロールについて適任とするために、これらのユーザは、ジョブタイトル‘マネージャー’、部門‘顧客支援’、及び存在状態‘利用可能’を要求するメンバーシップ基準を満足しなければならない。Service_Repロールは、システムの全てのユーザがその潜在的なメンバーであるが、スーパーバイザーロールに対して適任ではなく且つ利用可能な者だけであることを指定する。ロールベースシステムの商業的実施形態は、BEAシステムズ・インクから入手できるBEA WebLogic(登録商標)ポータルである。
種々の実施形態において、ロールベースの存在情報は、必要に応じて評価することができる。というのは、このような決定が処理遅延を導入し得るからである。これら実施形態の態様において、ロールベースの存在情報を最新の状態に保つために、異なるメカニズムを使用することができる。最悪の場合の実施形態では、ロールを参照するたびに、ロールのメンバーシップ基準が再計算される。よりインテリジェントな解決策は、いかに頻繁にロールを再計算する必要があるか決定するために、基準それ自体を見ることができる。
説明上、ある基準は、他の基準より頻繁に変化する。例えば、グループメンバーシップは、通常、システムアドミニストレータにより一度確立されるだけであるから、頻繁に変化しない。従って、グループ基準しかもたないロールは、所与のユーザがログインされる間に再評価される必要はなく、ログイン時間に1回だけでよい。一方、日付/時間基準は、グループメンバーシップより頻繁に変化し、従って、メンバーシップ基準が日付/時間情報に依存するロールは、非常に迅速に(例えば、シナリオのライフスパン中に)古いものとなる。これら実施形態の態様において、存在情報は、設定されたインターバルで日付/時間基準に依存するロールを再評価することにより新鮮さを保つことができる。従って、ロールメンバーシップ基準のセットが与えられると、最も変わり易いと考えられる基準が、ロールを再評価する頻度を駆り立てることになる。
種々の実施形態において、メッセージングAPIは、クライアントプロセス及びコラボレーションプロセスが所与のロール(1つ又は複数)に対する存在情報に契約できるような契約(subscription)の特徴をサポートすることができる。これら実施形態の態様において、存在プロバイダー、チャンネルプロバイダー又は他のプロセスは、ロールメンバーシップに対する変化を監視し、そしてこのような変化の通知を受け取るために登録したクライアントプロセス及び/又はコラボレーションプロセスに通知することができる。メッセージングAPIは、所与のプロセスが1つ以上のロールに契約する能力を与える。これら実施形態の態様において、所与のロールにあるユーザは、それらのプライバシーを保護するために契約要求を断るか又は受け容れることができる。これら実施形態の付加的な態様において、ユーザの入力を不要とするようにルール及び/又はロールの使用を介してこのような承認を自動化することができる。説明上、ユーザは、所与のセットのロールにおいてプロセス/ユーザによる契約要求を自動的に受け容れるように選択してもよい。
図4を再び参照すれば、モニタプロバイダー412は、アドミニストレーション及びオーデットアクティビティをサポートするためにメッセージングレイヤー監視を与えることができる。非限定例として、モニタプロバイダーは、他のプロバイダーに対するメッセージのフローを追跡することができる。これら実施形態の態様において、モニタプロバイダーは、それがどんなアクティビティを追跡するか決定するルールを使用して構成することができる。ルールは、自然言語で、又はグラフィックで、又は表現により、又は他の適当な手段により表現することができる。ルールは、存在情報からの表現変数、ユーザプロフィール情報(例えば、名前、住所、場所等)、又は他の情報に置き換え得る1つ以上の表現を含むことができる。種々の実施形態において、ルールは、数学的、論理的及びブールの演算子、機能/メソッド呼び出し、マクロ、SQL(構造化問合せ言語)、及び他の適当な問合せ言語含むことができる。種々の実施形態において、表現は、変数置き換え、定数フォールディング及び/又はマクロ拡張を実行するために、1回以上、前処理することができる。当業者であれば、本開示の精神及び範囲内で他の多数の形式の表現も考えられることが明らかであろう。
一実施形態では、SPIの機能がアクセスされるたびに、モニタプロバイダーは、SPIにより通知され(例えば、事象を経て)、情報を(任意に)ログし及び/又は情報に作用することができる。それとは別に又はそれに加えて、プロバイダーは、特殊なモニタSPIを経て事象が生じたときにその事象をモニタプロバイダーに先を見越して通知することができる。このように、APIが関係者により呼び出されるかどうかに関わらず、全ての事象(例えば、メッセージの送信及び受信、存在情報の伝播)を追跡することができる。これら実施形態の態様において、モニタプロバイダーは、ルールをトリガーした事象を他のプロセスに通知することができる(例えば、メッセージを送信することにより)。例えば、プロセス「A」が、所与のプロバイダーにより送信されたメッセージの数がある数を越えたときを知りたい場合には、メッセージの数が限界を越えたときにプロセス「A」に通知がなされることを指定するこの条件でルールを指定することができる。
図5は、本発明の種々の実施形態におけるシナリオ関係者を例示する。この図は、プロセス及びコンポーネントを論理的に個別のものとして示すが、これは、単なる例示に過ぎない。当業者に明らかなように、この図に示すコンポーネントは、結合することもできるし、又は個別のソフトウェア、ファームウェア及び/又はハードウェアコンポーネントに分割することもできる。更に、当業者に明らかなように、このようなコンポーネントは、それらをいかに結合し又は分割するかに関わらず、同じコンピューティング装置において実行することもできるし、或いは1つ以上のネットワーク又は他の適当な通信手段により接続された異なるコンピュータ装置間に分布させることもできる。
種々の実施形態において、説明上、シナリオ関係者は、メッセージングレイヤー506を使用して1つ以上のネットワーク520を経て互いに通信することができる。これら実施形態の態様において、メッセージングレイヤーの基礎となる通信プロバイダー(図示せず)は、1つ以上のXMPPベースのIMサーバー510を任意に使用して、メッセージを交換すると共に、存在情報を伝播することができる。この説明では、ビジネスプロセス500及び516により表わされた2つのコラボレーションプロセスと、ウェブブラウザ508及び512により表わされた2つのクライアントプロセスとがある。必要とされないが、クライアントプロセスのユーザインターフェイスは、ページフロー(サーバーに対して実行される)により駆動することができる。ここで、ブラウザ508は、サーバーAにおいてページフロー502により駆動され、一方、ブラウザ512は、サーバーBにおいてページフロー514により駆動される。これら実施形態の態様において、ページフロー及びブラウザは、ハイパーテキスト転送プロトコル(HTTP)及び/又はHTTPのセキュアバージョンであるHTTPSを使用して通信することができる。ブラウザは、HTTP及びメッセージングレイヤーの両方と通信できるので、メッセージングレイヤーは、ウェブブラウザがHTTPストリームの外部のデータを受信できるようにする。
種々の実施形態において、ビジネスプロセスは、ページフローにより開始することもできるし、又はブラウザからのHTTP要求により開始することもできる。後者のケースでは、要求のURIが、ブラウザと通信するサーバーにおいて検査されて、ビジネスプロセスに対応する所定のURIに一致するかどうか決定する。もしそうであれば、サーバーは、ブラウザに代わってビジネスプロセスを開始することができる。新たに開始されたビジネスプロセスは、次いで、ビジネスプロセスにより要求されるエンドユーザアプリケーションに対応する適当なページフローにブラウザを向け直すことができるが、これに限定されない。
扮装(impersonation)とは、システムの部分がユーザに代わってオペレーションを実行する能力である。この概念は、Unix(登録商標)ベースのオペレーティングシステムにおけるユーザの概念と同様である。セキュリティ及び許可の目的に対するUnix(登録商標)プロセスは、特定のユーザ、通常、プロセスをスタートしたユーザの特権で実行される。特権(権利とも称される)は、ユーザがシステムにおいて何ができそして何ができないか支配する。この機構は、ユーザによりスタートされたプロセスが、ユーザに権利が与えられていないオペレーション(例えば、ファイルシステム内の全てのファイルを削除し、システムを再ブートし、等々)を実行するのを防止する。ここで、所与のコラボレーションプロセスは、1つ以上のクライアントプロセスと対話し、各クライアントプロセスは、特定のユーザによりスタートされたものか又は「所有」されたものである。コラボレーションプロセスは、それが所与のユーザとしてあるオペレーションを実行するために、ユーザの特権に基づいてオペレーションを実行することをシステムに命令するコマンドを実行することができる。このように、コラボレーションプロセスは、クライアントプロセスにサービスする間に異なるユーザに「扮装」させ、ひいては、システムの完全性を維持することができる。
ビジネスプロセスは、そのビジネスプロセスと同じコンピューティング装置に存在するかそれとは異なるコンピュータリング装置に存在するかに関わらず、他のビジネスプロセス、ページフロー及びクライアントプロセス(例えば、ウェブブラウザ)と通信することができる。同様に、ページフローは、そのページフローと同じコンピューティング装置に存在するかそれとは異なるコンピュータリング装置に存在するかに関わらず、ビジネスプロセス及びクライアントと通信することができる。又、シナリオ関係者は、非同期の形態で通信を行うことができる。というのは、メッセージングレイヤーは、通信がこれを直接サポートするのを許すからである。この特徴の1つの結論は、HTTP(これは同期プロトコルである)を必要とせずに、そしてクライアントブラウザがウェブページをリフレッシュ又は再ロードさせることなく、情報をコラボレーションプロセスからクライアントウェブブラウザへ転送できることである。
これら実施形態の態様において、シナリオ関係者は、制御レイヤー504の制御を利用し、それらのタスクを実行する上でそれらの助けとなり得る。以下の説明は、異なる制御形式に基づく制御機能を示すが、このような機能は、本開示の精神及び範囲から逸脱せずに、少数の制御へと結合するか、又は多数の制御にわたって分散できることが明らかであろう。
種々の実施形態において、メッセージ制御は、メッセージングレイヤーAPIと対話するための高レベルで且つ簡単化された手段をなすことができる。これら実施形態の態様において、メッセージ制御は、コラボレーションプロセスが通信を試みる各クライアントに対して関係者識別子(「関係者id」)を自動的に得ることができる。種々の実施形態において、関係者idは、シナリオに含まれた関係者により、互いを識別するために使用される。関係者idは、ウェブポータルユーザ及びアプリケーションサーバーに指定できるが、これらに限定されない。これら実施形態の態様において、関係者idは、プールデータ構造体から引き出しそしてそこへ戻して、それらの再使用を容易にすることができる。他の実施形態では、関係者idは、シンプル・メール・トランスポート・プロトコル(SMTP)のようなトランスポートが使用されるときに、その性質がより「永久的」なものとなり得る。SMTPの場合に、関係者idは、eメールアドレスに等しくすることができる。従って、関係者idは、eメールアドレスが滅多に変化しないので、その性質が過渡的とならない。これら実施形態の態様において、関係者idは、それに関連したパスワード及び状態をもつことができる。状態は、関係者idの状態をその生成時に参照することができる。これを使用して、存在情報に依存する判断の基礎とすることができる。
再び図5を参照すれば、クライアントは、それ自身、「リッチUI」アプリケーション522と称される1つ以上のクライアントプロセスを含むことができる(「リッチUI」とは、「リッチユーザインターフェイス」を意味する)。種々の実施形態において、アプリケーション識別子(「アプリケーションid」)は、各クライアントプロセス及び各コラボレーションプロセスに指定することができる。これら実施形態の態様において、関係者id(participant id)及びアプリケーションid(application id)の組み合せを使用して、シナリオメッセージに対する行先(即ち、「routing id」)を指定することができる。
<Routing id> = <Participant id> + <Application id>
図6は、本発明の種々の実施形態における例示的メッセージ制御のクラス図である。MessageControl(メッセージ制御)600は、関係者によりメッセージを送信及び受信するために使用することができる。これは、関係者idを使用してMessageEntityManager(メッセージエンティティマネージャー)602から得ることのできるMessageEntity(メッセージエンティティ)604に依存する。生成時に、MessageControlは、MessageEntityManagerを使用して、それに指定されたMessageEntityを得ることができる。これは、次いで、そのアプリケーションidと、MessageControlへの非同期メッセージ返送に使用できるMessageCallback(メッセージコールバック)608とを登録することができる。
これら実施形態の幾つかにおいて、MessageControlは、時々保留及び/又はシリアル化できるコラボレーションプロセス内で使用できるので、MessageControlは、Participant_idオブジェクトをメンバー変数として維持し(即ち、関係者id及びその関連情報を記憶するために)、そしてそれを使用して、その関連MessageEntityに過渡的にアクセスするだけである。
MessageControlは、MessageEntityを使用して、メッセージを直接送信及び受信することができる。メッセージの同期的受信は、受信するためのメッセージが得られない場合にオペレーションが不定にブロックしないように時間切れパラメータで実行することができる。メッセージを非同期で受信するために、MessageCallbackを使用することができる。MessageControlにおけるwaitForMessage(メッセージ待機)メソッドは、コールバックに対する登録メソッドとして働くことができる。MessageControlは、次いで、MessageEntityにおいてwaitForMessageを呼び出すことができ、これは、特定のアプリケーションidに対して新たなメッセージが到達したときに、登録されたMessageCallbackを使用するようにMessageEntityを構成する。このコールバックは、次いで、発呼プロセスへコールバックするようにMessageControlをトリガーすることができる。MessageEntityは、Connection(接続)610オブジェクトを使用して、メッセージングAPIと対話し、メッセージを送信すると共に、コールバックを登録する。
これら実施形態の幾つかにおいて、コールバックがコラボレーションプロセスに対するMessageEntityに現在登録されず、そしてメッセージがメッセージングレイヤーから到達するときに、メッセージをMessageQueue(メッセージ待ち行列)606に入れることができる。メッセージを同期的又は非同期で受信するその後の試みは、この待ち行列からメッセージを消費することができる。
図7は、本発明の種々の実施形態における例示的存在制御のクラス図である。PresenceControl(存在制御)700は、アプリケーション及びユーザ存在情報を関係者に与えることができる。これら実施形態の態様において、ApplicationPresenceManager(アプリケーション存在マネージャー)706のインスタンスは、全シナリオの現在存在状態を維持する役割を果たす。ScenariosPortalServlet(シナリオポータルサーブレット)702は、関係者エンドユーザ識別子(例えば、ウェブポータルユーザのログイン名)と、所与のエンドユーザに関連した関係者idと、所与の関係者idに対して現在得られるアプリケーション形式との間の関連付けと共に、ApplicationPresenceManagerをポピュレーションする役割を果たす。種々の実施形態において、ScenariosPortalServletは、エンドユーザを行先とするHTML応答を検査して、そのエンドユーザに対してどんなアプリケーション形式が利用でき/存在するか決定するサーブレット/プロセス/スレッドである。このような応答は、エンドユーザのウェブブラウザ又は他のクライアントプロセスに存在を有するアプリケーションを開始し、レンダーし及び/又はそれと対話するためのインストラクションを含むことができる。一実施形態では、ScenariosPortalServlet又はシステムの他の部分は、HTML応答を検査して、アプリケーションが所与のクライアントプロセスに対する範囲に入ったり出たりするとき(即ち、アクティブであるか又は保留されるとき)を決定することにより、アプリケーション状態を追跡することもできる。説明上、アプリケーションが第1の応答においてレンダーされるが、その後の応答ではレンダーされない場合には、アプリケーションの状態が「保留」状態(即ち「アクティブ」でない)をもつことになる。というのは、それがもはや現在ウェブページにないからである。更に別の実施形態では、アプリケーション形式及び状態情報をクライアントプロセスから得ることができ、これは、どのアプリケーションが存在しそしてどんな状態であるかをメッセージングレイヤーに知らせる。この情報は、他の関係者へ中継又はブロードキャストされ、全ての関係者に変化を通知することができる。
ApplicationPresenceManagerの情報は、ScenariosPortalServletに関連付けることのできるAppPresenceEntity704インスタンスにより更新することができる。例えば、AppPresenceEntityは、アプリケーションがもはや存在しないときにメッセージングAPIから通知を受け取り(例えば、コールバックを経て)、それを反映するようにApplicationPresenceManagerを更新することができる。種々の実施形態において、AppPresenceEntityは、特定のクライアントエンティティに関連したアプリケーション形式の通知を受け取り、そしてそれに応じてApplicationPresenceManagerを更新することができる。
PresenceControlは、所与のユーザの存在状態を与えるgetUserStatus(ユーザ状態を得る)メソッドをサポートするためにメッセージングAPIに直接依存する。又、PresenceControlは、アプリケーション存在情報を得るためにApplicationPresenceManagerにも依存する。PresenceControlのgetUserWithRole(ロールでユーザを得る)メソッドは、コラボレーションプロセスが、appTypeに一致するアクティブなアプリケーションを有する特定のロールで利用可能なユーザのリストを得るのを許す。これは、ロール及びアプリケーション形式に基づいて適当なコラボレーション候補のリストを見出すのに有用である。getUserStatusの別の変形を設け、これを使用して、関係者id及びアプリケーション形式を与えることに基づきユーザのリアルタイム状態を決定することもできる。
種々の実施形態において、シナリオ制御は、シナリオセッション生成及び最終決定、関係者及びグループ結合、並びに共有状態へのアクセス、を含むシナリオ関連アクティビティに対する抽象を与えることができる。シナリオセッションは、シナリオに関与した関係者に対する論理的ランタイムコンテクストである。セッションは、シナリオの任意の段階中に確立できるが、通常、早期の段階に生成される。シナリオセッションは、HTTPセッション又はポータルログインセッションに必ずしも等しくない。ポータルログインセッション(匿名のユーザ)がない場合や、HTTPセッションのスパン内で多数のシナリオセッションが生じる場合もあり得る。
シナリオセッションは、セッションの関係者が情報を容易に共有するのを許す共有ステートメカニズムを与える。これら実施形態の態様において、セッションは、持続マップとして実施することができる。シナリオセッションは、ストリング識別子キーによりアクセスされるオブジェクト属性を記憶しそして得るのに使用できるという点で、HTTPセッション又はHTTPServletRequestsと同様である。セッションの全関係者は、これらセッション属性をポピュレートしそして検索してもよいが、これら実施形態の態様において、属性データの全視程は、属性を生成するアクターによりセットされる権利情報に依存し得る。
各セッションには、セッションインスタンスを得るために他のコンテクストに使用できる独特なidが指定される。いかなる関係者もセッションにアタッチすることができるが、種々の実施形態では、セッションは、全ての関係者がそこからデタッチするまで持続する。更に別の実施形態では、セッションは、そのアタッチされた関係者がもはや存在しないか又はインアクティブであることをシステムが検出したときにそのリソースを自動的に開放することができる。これら実施形態の態様において、ある関係者がセッションからデタッチしたときに、そのセッションにアタッチしている他の関係者に通知することができ、従って、それらは、そこからデタッチするか又は他のアクションをとる機会をもつことができる。
種々の実施形態において、シナリオ制御は、次の機能を与えることができる。
−シナリオセッションを生成しそしてそれに対応するシナリオセッションidを与える。
−シナリオセッションにアタッチしそしてそこからデタッチする。
−共有ステート値を記憶し、検索しそして削除する。
−デフォールト関係者を結合する。
−関係者idを関係者に指定する。
−メッセージングアクティビティのためにMessageControlにより使用されるべき関係者idを与える。
−シナリオ内で使用されるべきパースされた入力引数のセットを与える。これらの引数は、ビジネスプロセスを発生したHTTP要求から到来し得る。
−シナリオユーザをシナリオエイリアスに結合する。
−シナリオグループをシナリオグループエイリアスに結合する。
種々の実施形態において、共有ステート機能は、識別子を使用して、共有ステートデータを含む持続マップにアクセスする共有ステート制御として表面化することができる。制御は、関係者がシナリオセッション内の共通の情報セットにアクセスしそしてそれを共有するのを許す。例えば、シナリオがドキュメントレビュープロセスのコンセプトに関して構築される場合、共有ステートの1つのコンポーネントは、コンテンツマネージメントシステムにおけるドキュメントへのリファレンスとなり得る。これら実施形態の態様において、共有ステート制御は、関係者がシリアル化可能なオブジェクトをストリングキーに関連付けるのを許す持続収集機能をサポートする。関係者は、適切な持続マップを探索しそしてロードのために制御により使用されるシナリオセッションidをリファレンスする。
説明上、ビジネスプロセスは、通常、セッションの共有ステートをポピュレートし、一方、ページフローは、通常、共有ステートに関連した情報をHTMLドキュメントにレンダリングするためにその共有ステートから消費する。又、他のエンティティも、それらがセッションidを得る手段をもつ限り、共有ステート制御を使用することができる。これは、HTTP要求を実行するのではなく、メッセージングレイヤーを使用して帯域外のデータを検索するクライアントプロセスからの非同期データ要求を取り扱うのに有用となる。
種々の実施形態において、共有ステート制御は、次の機能を与えることができる。
−制御を、セッションidに基づくセッションに結合する。
−シナリオセッションを生成しそしてそれに対応するシナリオセッションidを与える。
−シナリオセッションにアタッチしそしてそこからデタッチする。
−共有ステート値を記憶し、検索し、そして削除する。
−全ての現在値キーを含むセットを返送する。
共有ステートは、コラボレーションプロセスの全ライフサイクル中持続できると共に、フェイルオーバー及び負荷バランスの目的でサーバークラスター内のいかなるノードからアクセスすることもできる。
種々の実施形態において、共有ステート制御は、コンテンツレポジトリー又はコンテンツマネージメントシステムにおけるドキュメント及びライフサイクルへのレファレンスを操作するのに使用できる。これは、共有情報がシナリオセッションより長く生きるのを許す。というのは、それが個別のシステムに存在するからである。コンテンツレポジトリーは、構造化コンテンツ及び非構造化コンテンツ(例えば、デジタルで走査されるペーパードキュメント、XML、ポータブルドキュメントフォーマット、HTML、電子メール、イメージ、ビデオ及びオーディオストリーム、生のバイナリーデータ、等)を、サーチ可能なコーパスに関連付けることができる。コンテンツレポジトリーは、コンテンツマネージメントシステムに結合し又はそれと一体化することができる。コンテンツマネージメントシステムは、コンテンツライフサイクルマネージメント、バージョニング、コンテンツ再検討及び承認、自動コンテンツ分類、事象駆動のコンテンツ処理、プロセス追跡、及び他のシステムへのコンテンツ配送を行うことができる。
種々の実施形態において、クライアントは、エンドユーザと1つ以上のコラボレーションプロセスとの対話をサポートすることができる。これら実施形態の態様において、クライアントプロセスは、ユーザインターフェイスも与えることができる。非限定例として、ユーザインターフェイスは、次のものの1つ以上を含むことができる。1)ディスプレイ装置にレンダリングされるか又はユーザの網膜に投影されるグラフィックユーザインターフェイス(GUI)(例えば、ハイパーテキストマークアップ言語でレンダリングされる);2)サウンド及び/又はボイスコマンドに応答する能力;3)リモートコントロール装置(例えば、セルラー電話、PDA、又は他の適当なリモートコントロール)からの入力に応答する能力;4)ジェスチャー(例えば、顔面等)に応答する能力;5)同じ又は別のコンピューティング装置のプロセスからのコマンドに応答する能力;及び6)コンピュータマウス及び/又はキーボードからの入力に応答する能力。この開示は、特定のUIに限定されない。当業者であれば、本開示の精神及び範囲内で多数の他のユーザインターフェイスも考えられることが明らかであろう。これら実施形態の態様において、1つのこのようなユーザインターフェイスは、ワシントン州レドモンドのMicrosoft(登録商標)コーポレーションから入手できるMicrosoft(登録商標)インターネットエクスプローラのようなウェブブラウザの助けでレンダリングすることができる。
一実施形態において、クライアントプロセスは、ミニマリストJavaScript/appletを使用して実施することができる。この実施形態は、ウェブページ内に埋め込まれたJava(登録商標)アプレット及びJavaScript機能の組み合せを使用して、コラボレーション機能をイネーブルすることができる。アプレットは、メッセージングレイヤーを経てメッセージを送信及び受信することができる。シナリオメッセージが到着すると、アプレットは、メッセージを取り扱うためにページのJavaScript機能をコールすることができる。ページに埋め込まれたJavaScriptは、ユーザインターフェイス更新、ユーザ対話、データ取り扱い、及びメッセージ送信(アプレットを経て)を全て行う役割を果たすことができる。この解決策の1つの効果は、ウェブブラウザの変更を必要としないことである。
別の実施形態では、重量のクライアントを、ブラウザヘルパーで増大されるか又はその目的でプラグインされたウェブブラウザ内で、又はそれに関連して、ダウンロードして実行することができる。クライアント側のプログラミングモデルは、クライアント側のページフローと、全アプリケーションを実行するための能力のリッチセットとを備え、これは、潜在的にサーバーとの対話を伴わずに多数のページで構成される。非同期通信は、シナリオに必要な事象の両方向通知を許す。クライアントは、持続的又は半持続的データ記憶の効果を得ることができる。クライアント内のユーザインターフェイスエレメントは、制御を使用して表わすことができると共に、ローカルデータ記憶に結合することができる(直接的、又はスクリプトを経て間接的に)。再使用可能な制御は、コードの再使用及びストリームラインアプリケーション開発を最大にする。
更に別の実施形態では、軽量のクライアントを、ブラウザヘルパーで増大されるか又はその目的でプラグインされたウェブブラウザ内で、又はそれに関連して、ダウンロードして実行することができる。ブラウザヘルパーは、ページに埋め込まれたダイナミックHTML(DHTML)及びJavaScriptと共に作用して、クライアントデータ記憶装置に結合される非同期通信及びユーザインターフェイスデータを与える。クライアント側のプログラミングモデルは、クライアント側のページフローを含まない。コラボレーションプロセスは、ページの再ロードを強制せずに、新たなJavaScriptをブラウザへプッシュダウンすることができ、そしてクライアントは、HTMLドキュメントにおいて異なるDIVセクションをアクチベートすることによりコンテンツの多数の「ページ」を示すことができる。クライアント内のユーザインターフェイスエレメントのドキュメントオブジェクトモデル(DOM)は、ユーザインターフェイスエレメントを読み取って操作するのに使用できる。データは、ローカルデータ記憶装置から必要に応じてDOMプロパティに結合することができる。
図8は、本発明の種々の実施形態におけるウェブブラウザ及びアプリケーションサーバーを例示する。この図は、コンポーネントを論理的に個別のものとして示すが、これは、単なる例示に過ぎない。当業者に明らかなように、この図に示すコンポーネントは、結合することもできるし、又は個別のソフトウェア、ファームウェア及び/又はハードウェアコンポーネントに分割することもできる。更に、当業者に明らかなように、このようなコンポーネントは、それらをいかに結合し又は分割するかに関わらず、同じコンピューティング装置において実行することもできるし、或いは1つ以上のネットワーク又は他の適当な通信手段により接続された異なるコンピュータ装置間に分布させることもできる。
この説明において、アプリケーションサーバー830は、コラボレーションプロセス800、802及び804を備え、これらは全て同時に実行することができる。クライアントウェブブラウザ832は、1つ以上のリッチUIクライアント824、826及び828を備え、これらも、同時に実行することができる。関係者と関係者との間の通信は、メッセージングレイヤー808によりサポートされる。先に述べたように、メッセージングレイヤーは、異なる通信プロバイダーが関係者に均一にサービスを提供するのを許す拡張可能な通信プラットホームを与える。この図には示されていないが、メッセージングプロバイダーは、関係者が多数のそして異なる基礎的な通信チャンネルを利用するのを許す。
これら実施形態の態様において、コラボレーションプロセスは、メッセージングレイヤーを経てメッセージを送信及び受信するためにメッセージマネージャー806に登録される。登録の後、メッセージマネージャーは、ルーティング情報をコラボレーションプロセスに与えることができ、次いで、該プロセスは、その情報を、それとの通信を希望する関係者へ与えることができる。これら実施形態の態様において、ルーティング情報は、コラボレーションプロセスに対してクライアントが行う第1の要求に応答して埋め込むことができる。ルーティング情報は、コラボレーションプロセスに対するルーティングidと、それとの通信を確立するために関係者により要求される他の情報とを含むことができる。更に別の態様において、ルーティング情報は、XMPPサーバーの名前と、サーバーに対して使用すべきIM識別子とを含むことができる。メッセージルーティングの目的で、メッセージマネージャーは、一時的又は持続的マップ810においてクライアントプロセスのルーティングidと、それに対応するユニバーサルリソース識別子(URI)との間の関連性を維持することができる。これら実施形態の態様において、メッセージマネージャーは、関係者からメッセージを受け取るときにマップをポピュレートすることができる(例えば、メッセージングレイヤーからソースURIを、そしてメッセージそれ自体からソースルーティングidを得る)。マップは、メッセージの送信時に関係者のURIをルックアップするためにメッセージマネージャーにより使用することができる。
メッセージマネージャーは、コラボレーションプロセスから出て行くメッセージを受け容れ、そしてそれらをメッセージングレイヤーに与える。メッセージマネージャーは、コラボレーションプロセスのルーティング情報、行先関係者のルーティング情報(例えば、存在制御又はメッセージングレイヤーAPIから得た)、及びメッセージコンテンツに基づいてメッセージを構成することができる。これら実施形態の態様において、デフォールト通信プロバイダーは、メッセージを送信するのに使用できる。更に別の態様において、デフォールト通信プロバイダーは、行先関係者が使用するXMPPサーバーを経てメッセージを送信することができる。又、メッセージマネージャーは、メッセージングレイヤーから到来するメッセージを受け容れそしてそれらを適切なコラボレーションプロセス(1つ又は複数)へルーティングすることができる。
種々の実施形態において、メッセージマネージャーは、メッセージングレイヤーの通信プロバイダーをその初期化の一部分としてインスタンス生成することができる。XMPPサーバーに接続するときに使用すべきXMPPサーバーアドレス及びIM識別子のようなコンフィギュレーション情報を各プロバイダーに供給することができる。当業者であれば、本開示は、コンフィギュレーション情報を搬送するための特定の手段に依存せず又はそれに限定されず、且つ多数のこのような仕方が本開示の精神及び範囲内で存在することが明らかであろう。又、コンフィギュレーション情報は、1つのプロバイダーをデフォールトトランスポートとして指定することもできる。
種々の実施形態において、ウェブブラウザヘルパー816(例えば、非同期通信を与えそして情報を表示するためのブラウザプラグイン又は他の適当な手段)は、リッチUIとコラボレーションプロセスとの間の非同期通信を容易にすることができる。ブラウザヘルパーは、コラボレーションプロセスが、例えば、現在ウェブページを再ロードさせることなく、ウェブブラウザにコンテンツをプッシュするのを許す。ブラウザヘルパーは、メッセージをリッチUIクライアントへ/からルーティングできると共に、メッセージングレイヤーを初期化できるという点で、サーバーのメッセージマネージャーと同様に機能する。これら実施形態の態様において、ブラウザヘルパーは、そのホストブラウザのスクリプトエンジンへ露出され、従って、リッチUIイネーブルページがロードされるか又はメッセージを送信する必要があるときにそれが呼び出されるようにする。
説明上、リッチUIクライアントは、コラボレーションプロセスから表示すべきデータレコードの初期セットを受け取り、そしてデータセットが変化するときに、コラボレーションプロセスは、更新されたデータをリッチUIクライアントに送信することができる。更新されたデータが到着すると、リッチUIクライアントは、データを合体するようにそのユーザインターフェイスを更新することができる。種々の実施形態において、グラフィックユーザインターフェイスは、DHTMLを使用することにより適切に更新することができる。又、コラボレーションプロセスは、例えば、エンドユーザにある事象を通知する必要がある場合に、実行可能なコード(例えば、インストラクション)をクライアントに送信するように選択を行ってもよい。これら実施形態の態様において、コラボレーションプロセスは、エンドユーザのウェブページの何かをハイライトするためのカスタムJavaScript機能を発生するか、又は警告ボックスを表示し、次いで、その機能を実行するためのインストラクションと非同期でリッチUIクライアントにコードを送信することができる。
これら実施形態の態様において、ブラウザヘルパーは、ルーティング情報820を使用してコラボレーションプロセスとメッセージを交換することができる。当業者であれば、本開示は、ルーティング情報を搬送するための特定の手段に依存せず又はそれに限定されず、且つ多数のこのような仕方が本開示の精神及び範囲内で存在することが明らかであろう。メッセージルーティングの目的で、ブラウザヘルパーは、一時的又は持続的マップ820においてコラボレーションプロセスのルーティングidと、それに対応するユニバーサルリソース識別子(URI)との間の関連性を維持することができる。これら実施形態の態様において、ブラウザヘルパーは、コラボレーションプロセスからメッセージを受け取るときにマップをポピュレートすることができる(例えば、メッセージングレイヤーからソースURIを、そしてメッセージそれ自体からソースルーティングidを得る)。マップは、メッセージの送信時にコラボレーションプロセスのURIをルックアップするためにブラウザヘルパーにより使用することができる。
ブラウザヘルパーは、メッセージを受信すると、メッセージからルーティング情報を抽出すると共に、メッセージ本体と、それを送信した関係者のルーティング情報とでリッチUIクライアントを呼び出すことができる(例えば、スクリプトメソッドを経て)。これら実施形態の更に別の態様において、ブラウザヘルパーは、XPathと称されるオープンソースC++XMLパージングライブラリーを使用して、到来するメッセージをパースすることができる。これら実施形態の態様において、リッチUIクライアントは、スコープト(scoped)JavaScriptメソッド及びDHTMLディスプレイコンポーネントとして表わすことができる。各リッチUIクライアントは、それ自身のアプリケーションidを有し、そしてそれが通信するコラボレーションプロセスのアプリケーションidが分かる。所与のリッチUIクライアントは、2つ以上のコラボレーションプロセスと通信することができ、そしてそれと逆のことも言える。メッセージに応答するために、リッチUIクライアントは、ブラウザヘルパーにおけるメソッドを呼び出し、そしてそれに、メッセージ本体と、行先関係者のルーティング情報とを与えることができる。次いで、ヘルパーは、この情報に基づいてメッセージを構成し、そしてメッセージングレイヤーを経て行先関係者へそれを送信する。
種々の実施形態において、関係者と関係者との間に送信されるメッセージは、いかなるフォーマットでいかなるプロトコルを使用していかなる情報を含むこともできる。これら実施形態の態様において、XMLフラグメントは、関係者を行先とする情報ペイロードと共にルーティング情報を含むことができる。これら実施形態の更に別の態様において、ルーティング情報は、ソースのアプリケーションidを含むと共に、ある場合には、そのアプリケーションにより使用されるIM識別子を含むことができる。ペイロードは、メッセージに含まれた情報の形式を行先関係者に指示する形式フィールドを含むことができる。
図9は、本発明の種々の実施形態に基づくリッチUIクライアント初期化のフローチャートである。この図は、説明上、機能的ステップを特定の順序で示しているが、プロセスは、必ずしも、ステップの特定の順序又は配列に限定されるものではない。当業者であれば、この図に示された種々のステップは、省略し、再配列し、並列に実行し、組み合せ、及び/又は種々の仕方で適応できることが明らかであろう。
ステップ900において、リッチUIクライアントは、ウェブブラウザへ送信されるウェブページにおいてレンダリングされることが決定される。(所与のページにはリッチUIクライアントが2つ以上存在することがあり、この場合、このフローチャートのステップを各々のクライアントに対して実行できることに注意されたい。)この決定がなされると(例えば、JSPタグ又は他の証拠の使用を検出することにより)、システムは、ステップ902において初期化する上でリッチUIクライアントを助けるためにページに情報を含ませ又は「埋め込む」ことができる。これら実施形態の態様において、この情報は、表2に示すパラメータの幾つか又は全部を含むことができる。この情報は、「リッチUIヘッダー」と称されるもので、所与のページにおける各リッチUIクライアントに対して一度含ませることができる。
表2:種々の実施形態におけるリッチUIヘッダー情報の例
このページがウェブブラウザにより受信されると、リッチUIクライアントは、ステップ904において、ブラウザヘルパーにより初期化することができる。これに付随して、与えられた通信プロトコル及びコンフィギュレーションパラメータに基づいてメッセージングレイヤーを初期化することができる。時間切れ周期が指定された場合には、ブラウザヘルパーが、オープンしている通信セッションを閉じ及び/又はシナリオセッションからデタッチするまでに経過しなければならないインアクティビティの周期を決定する。これら実施形態の態様において、有効なアクティビティは、エンドユーザとウェブブラウザ又は他のユーザインターフェイスとの対話、ウェブブラウザのアクティビティ(例えば、ページロード、リフレッシュ、再指向、等)、及び送信又は受信されるアプリケーション/フレームワークメッセージを含むことができる。更に、シードデータが存在する場合には、それをデータ記憶装置814に入れることができ、このデータ記憶装置は、ブラウザヘルパー及び全てのリッチUIクライアントによりアクセスすることができる。コラボレーションプロセスのルーティングidが存在する場合には、ステップ906において、新たに初期化されるリッチUIクライアントをそれに関連付けることができる。最終的に、リッチUIクライアントは、ステップ908において、ウェブブラウザでレンダリングすることができる。
これらの実施形態の態様において、リッチUIクライアントは、初期化されると、ブラウザヘルパーを経てメッセージを受信及び送信することができる。メッセージは、ソース及び行先ルーティングidを含むエンベロープでカプセル化することができ、この場合、行先ルーティングidは、メッセージの最終的な行先を指定する。ブラウザヘルパーにより受信されたメッセージは、アプリケーションメッセージ、及びフレームワークメッセージ、の2つのカテゴリーに入る。アプリケーションメッセージは、リッチUIクライアントのためのもので、一方、フレームワークメッセージは、ブラウザヘルパーそれ自身により消費されるもので、関係者の制御に使用される。これら実施形態の更に別の態様において、フレームワークメッセージの一形式は、ブラウザヘルパーが全てのリッチUIクライアントを終了させると共に、シナリオセッションからデタッチさせる。フレームワークメッセージは、たとえブラウザが「オフサイト」ページを現在表示しているか又はページ遷移状態にあっても、ブラウザヘルパーにより常時受信して処理することができる。
種々の実施形態において、説明上、ページ遷移がブラウザにおいて生じると、ブラウザヘルパーは、リッチUIクライアントがそれらのシナリオセッション(もしあれば)にアタッチされたままになるのを許す。ブラウザヘルパーにより受信される全てのアプリケーションメッセージは、後で検査するために待ち行列822に入れられる。しかしながら、ページ遷移中に受信されるフレームワークメッセージは、ブラウザヘルパーにより直ちに処理することができる。新たなページがブラウザによりロードされると、ブラウザヘルパーは、関係者idに対してそれを検査する。これら実施形態の態様において、ブラウザヘルパーは、図10に示すように、新たなページに対して反応する。
図10は、本発明の種々の実施形態に基づくリッチUIクライアント初期化のフローチャートである。この図は、説明上、機能的ステップを特定の順序で示しているが、プロセスは、必ずしも、ステップの特定の順序又は配列に限定されるものではない。当業者であれば、この図に示された種々のステップは、省略し、再配列し、並列に実行し、組み合せ、及び/又は種々の仕方で適応できることが明らかであろう。
ヘッダー情報に加えて、ブラウザに送信されるページは、リッチUIヘッダーを含まないページにおけるウェブブラウザの関係者idを含むことができ、従って、ブラウザヘルパーは、そのリッチUIクライアントのステートを維持することができる。ページ遷移の際に、アクティブなリッチUIクライアントが保留され、そしてステップ1000において、新たなページが検査される。ページにエンコードされた関係者idがない場合には(1002)、ブラウザヘルパーは、ステップ1008において、「オフサイトブラウジング」モードに入る。これは、ブラウザが予期せずに外部のウェブサイトに再指向された場合、又はユーザが、リッチUIに対してイネーブルされないウェブサイトの一部分に入る場合に、生じ得る。オフサイトブラウジングモードにあるときに、ブラウザヘルパーは、そのリッチUIクライアントが依存するところのメッセージングレイヤー通信セッションを維持することができる。受信した全てのアプリケーションメッセージは、廃棄するか、又は後で処理するために待ち行列に入れることができるが、フレームワークメッセージは、直ちに処理することができる。
ステップ1016において、ブラウザヘルパーは、ページがブラウザへ埋め込まれた関係者idと共にロードされるのを待機するか、又は時間切れが生じるのを待機する。時間切れが生じる前に、ページがブラウザへ埋め込まれた関係者idと共にロードされた場合には、オフサイトブラウジングモードが終了となり、ステップ1000において処理が再開される。さもなければ、ステップ1018において、メッセージングレイヤー通信セッション及び/又はシナリオセッションを閉じ及び/又はデタッチすることができる。
ステップ1004は、新たなページにエンコードされた関係者idが現在使用中の関係者idに一致しない場合に適用される。非限定例として、これは、ユーザがウェブページを適切に去らず、同じページにブラウズして戻るようにマネージするときに生じ得る。この場合に、リッチUIクライアントにより使用されるメッセージングレイヤー通信セッション及び/又はシナリオセッションを、ステップ1010において、閉じ及び/又はデタッチすることができる。更に、待ち行列822のメッセージを廃棄することもできる。ステップ1014において、ブラウザヘルパーは、もしあれば、新たなページにエンコードされた情報を使用して新たなメッセージングレイヤー通信セッションを開始する。
ステップ1006において、新たなページにエンコードされた関係者idが現在の関係者idに一致する場合には、ブラウザヘルパーは、新たなページを検査して、どのリッチUIクライアントが存在するか決定することができる。各クライアントは、ステップ1012において初期化することができる。次いで、待ち行列822のアプリケーションメッセージは、適当なリッチUIクライアント(1つ又は複数)により受信順に(又はプライオリティ順に)処理することができる。一実施形態では、新たなページに存在しないリッチUIクライアントへ送信されるメッセージが廃棄される。
各クライアントプロセスは、1つ以上のコラボレーションプロセスに関連付けることができる。これら実施形態の態様において、クライアントプロセス(例えば、リッチUIプロセス)は、それらの振舞いをある程度支配するステートを有する。説明上、以下の表3にステートの例を示す。
表3:種々の実施形態におけるクライアントプロセスステートの例
種々の実施形態において、同じウェブブラウザのリッチUIクライアントは、互いにメッセージを送信及び受信することができる。一実施形態では、これは、メッセージングレイヤーにループバック機能を追加することにより達成でき、ここで、メッセージングレイヤーは、ルーティングidがローカルである(即ち、メッセージングレイヤーのプロセススペースにおいてリッチUIクライアントを識別する)かどうか検出することができる。行先ルーティングidがローカルであるメッセージは、チャンネルを経てメッセージを送信せずにローカル行先リッチUIクライアントへメッセージを配送することによりブラウザへ「ループバック」される。別の実施形態では、ブラウザヘルパーは、それ自体、ローカル通信がメッセージングレイヤーに到達する前にそれをキャッチして再指向することができる。関係者の観点から、ローカル通信のための通信メカニズムには認識できるような相違は必要とされない。
種々の実施形態において、クライアントプロセスがアクティブステートであるときに、それは、「関連付け」又は「非関連付け」と考えてもよい。非関連付けのクライアントプロセスは、現在、コラボレーションプロセスに関連付けされていない。一実施形態では、それらは、コラボレーションプロセスからメッセージを受信してもよいが、コラボレーションプロセスへメッセージを送信することはできない。コラボレーションプロセスからメッセージを受信する非関連付けのクライアントプロセスは、それら自体をメッセージ送信者に関連付けるように常に選択することができる。種々の実施形態において、関連付けのクライアントプロセスは、単一のコラボレーションプロセスに関連付けされて、クライアントプロセスから送信されたメッセージをその特定のコラボレーションプロセスに自動的に向けることができる(例えば、ブラウザヘルパー又は他の適当な手段により)。関連付けされるかどうかに関わらず、クライアントプロセスは、同じプロセススペース内でメッセージを他のクライアントプロセスへ送信し及びそこから受信することができると共に、それに関連付けされたものだけではない任意のコラボレーションプロセスからメッセージを受信することができる。
種々の実施形態において、ブラウザヘルパーは、各関連付けされたクライアントプロセス(例えば、リッチUIクライアント)のコラボレーションプロセスに対してルーティングidを追跡する役割を果たす。これら実施形態の態様において、ブラウザヘルパーは、そのリッチUIクライアントへの機能を与えることができる。この機能は、ヘルパーにより任意の仕方で実施できるが、一実施形態では、リッチUIクライアントがコールできるコール可能なJavaScriptファンクション、及びヘルパー呼び出しのリッチUIクライアントファンクションコールバックとして実施できる。更に別の態様では、リッチUIクライアント開始の機能は、リッチUIクライアントがコールできるファンクションとして表わされ、そしてブラウザヘルパー開始の機能は、ヘルパーがリッチUIクライアントにおいて呼び出すファンクション、メソッド、又は起きた「事象」により表わすことができる。種々の実施形態では、クライアント開始の機能は、次のものを含むことができる。
−クライアントプロセスをコラボレーションクライアントプロセスのルーティングidに関連付ける能力。これは、クライアントプロセスを「関連付け」ステートに入れる。クライアントプロセスが別のルーティングidに既に関連付けされている場合には、新たに指定されたルーティングidがクライアントプロセスの新たなデフォールト通信エンドポイントとなる。
−クライアントプロセスとコラボレーションプロセスとの関連付けが存在する場合に、そのような関連付けを除去する能力。これは、クライアントプロセスのインスタンスを「非関連付け」ステートに入れる。
−関連付けされたコラボレーションプロセスへメッセージを送信する能力。
−同じプロセススペース(例えば、同じウェブブラウザ)における別のクライアントプロセスへメッセージを送信する能力。
種々の実施形態において、ブラウザヘルパー開始の機能は、次のものを含むことができる。
−クライアント開始機能のいずれか。
−クライアントプロセスインスタンスを初めて初期化するか、又はそのデータ記憶装置がコラボレーションプロセスによりリセットされた後に初期化する能力。
−ページリフレッシュの後にクライアントプロセスインスタンスを初期化する能力。
−クライアントプロセスを保留するか又はアンロードする能力。
−コラボレーションプロセス又は別のクライアントプロセスにより送信されたクライアントプロセスへ送信されるメッセージを配送する能力。
図11は、本発明の種々の実施形態に基づくリッチUIクライアントページローディングのフローチャートである。この図は、説明上、機能的ステップを特定の順序で示しているが、プロセスは、必ずしも、ステップの特定の順序又は配列に限定されるものではない。当業者であれば、この図に示された種々のステップは、省略し、再配列し、並列に実行し、組み合せ、及び/又は種々の仕方で適応できることが明らかであろう。所与のページにはリッチUIヘッダーが2つ以上の存在することがあり、この場合に、このフローチャートのステップは、このような各ヘッダーに対して実行することができる。図9及びそれに付随する説明を参照されたい。
種々の実施形態において、新たなページがブラウザにロードされると、ブラウザヘルパーは、リッチUIクライアントが適切に動作することを保証する役割を果たす。ステップ1100において、ルーティングidがリッチUIヘッダーに見つかると、それに対応するリッチUIクライアントがルーティングidに関連付けられる。ステップ1102において、リッチUIヘッダーで指定されたアプリケーションidが、保留されたリッチUIクライアントのアプリケーションidに一致すると、ステップ1104において、ヘッダーがシードデータを含むかどうか決定される。もしそうであれば、データは、ステップ1108において、データ記憶装置にコピーされる。このコピーは、そのクライアントに対する既存のシードデータに置き換わる。もしそうでなければ、このステップは、スキップされる。ステップ1112において、保留されたリッチUIクライアントが、保留ステートから出される。ステップ1116において、現在アクティブなリッチUIクライアントは、リッチUIクライアントが保留されていた間に待ち行列に入れられていたものを含むメッセージを送信及び受信することができる。ステップ1103において、リッチUIヘッダーのアプリケーションIDは、保留されたクライアントのアプリケーションIDに一致しない。ステップ1106において、ヘッダーがシードデータを含むかどうか決定される。もしそうであれば、データが、ステップ1108において、データ記憶装置へコピーされる。もしそうでなければ、このステップは、スキップされる。ステップ1114において、リッチUIクライアントが生成されそして初期化される。
種々の実施形態において、上述したシステム及び方法は、無制限の様々なシナリオをアッセンブルするのに使用できる。説明上、1つのこのようなシナリオは、顧客コールセンターである。このアプリケーションでは、顧客サービス代表者(CSR)は、顧客からのコールを受けて種々のアクションを実行するというタスクをもつ。1つのこのようなアクションは、顧客が払い戻しを希望する場合の払い戻し要求である。この例では、経験が6ヶ月未満のCSRは、マネージャーのリアルタイムの承認なしに、$1000.00を越える金額の払い戻しを処理することができない。クライアントプロセス(例えば、リッチUIクライアント)を使用することにより、CSRは、支援を受けるためにリアルタイムでマネージャーにコンタクトすることができる。又、マネージャーは、「ヘルパー」クライアントと称するクライアントプロセス(例えば、リッチUIクライアント)も使用し、これは、彼等が多数の異なるCSRとの多数の「会話」に関与するのを許す。各会話は、CSR−マネージャー接続をマネージするコラボレーションプロセスにより表わされる。
CSRクライアントプロセスがヘルプを要求すると、コラボレーションプロセスが生成される(まだ退出していない場合)。コラボレーションプロセスは、存在情報を使用することにより、ヘルパークライアントを実行する利用可能なマネージャーを動的に探索することができる。コラボレーションプロセスと通信するために、マネージャーのヘルパークライアントは、それ自身をコラボレーションプロセスのルーティングidに関連付けることができる。クライアントプロセスは、いつでもコラボレーションプロセスからメッセージを受信できるので、コラボレーションプロセスは、ヘルプを要求するためのメッセージをマネージャーヘルパークライアントに送信することができる。個々のヘルパークライアントは、その要求メッセージを評価し、そしてそれら自体をコラボレーションプロセスに関連付けるべきかどうか選択することができる。ヘルプセッションが完了すると、マネージャーのヘルパークライアントは、コラボレーションプロセスから解離してもよいし又は必要に応じて別のものと再関連付けしてもよい。
これら実施形態の態様において、コラボレーションプロセスとの関連付け(又は再関連付け)に関するクライアントベースの判断をサポートするために、クライアントは、サーバーからの関連付け要求を受け取って評価する役割を果たす。サーバーは、クライアントへ送信される関連付け要求に任意のデータを含んでもよいので、関連付け要求メッセージに対する標準的な形態はない。むしろ、クライアントにより受信されるメッセージは、潜在的に、関連付け要求であり、クライアントは、ブラウザヘルパーにより与えられる関連付け機能を呼び出すことによりそれ自身の判断で関連付け(又は再関連付け)することができる。
図12a−cは、本発明の種々の実施形態に基づくコラボレーション顧客コールセンターシナリオを例示する図である。この図は、コンポーネントを論理的に個別のものとして示すが、これは、単なる例示に過ぎない。当業者に明らかなように、この図に示すコンポーネントは、結合することもできるし、又は個別のソフトウェア、ファームウェア及び/又はハードウェアコンポーネントに分割することもできる。更に、当業者に明らかなように、このようなコンポーネントは、それらをいかに結合し又は分割するかに関わらず、同じコンピューティング装置において実行することもできるし、或いは1つ以上のネットワーク又は他の適当な通信手段により接続された異なるコンピューティング装置間に分布させることもできる。
図12aには、3つのリッチUIクライアント(「A」、「B」及び「C」)と、2つのコラボレーションプロセス(「1」及び「2」)とが示されている。点線の包囲は、2つの間の関連付けを指示するのに使用される。例えば、クライアント「A」は、コラボレーションプロセス「1」に関連付けされ、一方、クライアント「B」は、コラボレーションプロセス「2」に関連付けられる。クライアント「C」は、非関連付けである。各リッチUIプロセスは、同じウェブブラウザを共有することもできるし、又は異なるブラウザを利用することもできる。
このシナリオにおいて、クライアント「B」と対話しているエンドユーザCSRが顧客からのコールを受ける。CSRは、氏名と、コールに関するある詳細とを含む顧客情報を収集することができる。この情報は、共有ステート制御の使用によりシナリオセッションの共有ステートに入れることができる。次いで、顧客が$1000を越える金額の払い戻しを要求し、そしてCSRが経験6ヶ月未満である場合には、クライアント「B」は、マネージャーと関連付けして承認を得るように試みる。この場合に、「B」は、ヘルプ要求(例えば、メッセージ制御を使用する)をコラボレーションプロセス「2」へ送信する。コラボレーションプロセスは、ユーザがマネージャーで、「利用可能」の存在状態を有し、且つマネージャークライアントを実行させることを要求するロールを使用して、利用可能なマネージャーを探索する。種々の実施形態において、コラボレーションプロセスは、この努力において存在制御を使用することができる。
次いで、コラボレーションプロセスは、メッセージ制御を使用してロールにより識別される利用可能なマネージャーの1つへ関連付け要求を送信する。これら実施形態の態様において、マネージャーがある時間フレーム内に応答する場合には、マネージャーの状態が「ビジー」に変更される。応答がないか又は否定応答の場合には、コラボレーションプロセスは、要求を受け容れるまで、識別されたマネージャーの別の者へ関連付け要求を送信することができる。一実施形態では、コラボレーションプロセスは、関連付け要求を任意の順序で送信することができる。説明上、コラボレーションプロセスは、関連付け要求を、「最もビジーでない」マネージャーに最初に送信することができる。別の実施形態では、コラボレーションプロセスは、オーダリングに続いて関連付け要求を、シナリオ関係者の1つ以上のプロパティに基づいて送信することができる。本開示の精神及び範囲内で他の構成(例えば、ラウンドロビン)も考えられる。
図12bにおいて、マネージャーのクライアント「C」は、それ自身をコラボレーションプロセス「2」に関連付けている。ここで、クライアント「B」及び「C」の両方は、周囲の点線で示されたように、コラボレーションプロセス「2」に関連付けられる。この点において、「B」は、その払い戻し要求を、コラボレーションプロセス「2」を経て「C」へ送信することができる。共有ステート制御を使用して、マネージャーのリッチUIクライアントは、要求に関する関係情報を検査し、次いで、コラボレーションプロセス「2」を経て「B」へ肯定又は否定応答することができる。その後、クライアント「B」及び「C」は、図12cに示すように、コラボレーションプロセスから解離することができる。
図12cは、クライアント「A」がコラボレーションプロセス「1」からヘルプを要求したことも示している。(「A」は、コラボレーションプロセス「2」からヘルプを要求することもできた。)コラボレーションプロセス「1」は、次いで、マネージャーが存在しそしてマネージャークライアントを実行することを示す。コラボレーションプロセスは、関連付け要求を「C」へ送信する。「C」が要求に対して肯定応答する場合には、「A」及び「C」の両方がコラボレーションプロセス「1」に関連付けされ、従って、ダイアログをもつことができる。
更に、説明上、別の考えられるシナリオは、グループチャットである。このアプリケーションでは、ユーザは、それに対応し得る他のユーザを表示するアクティブな「バディー(buddy)」リストを有する。このバディーリストは、各ユーザの状態(例えば、「オンライン」、「オフライン」、「ビジー」、等)を表示することもできる。又、バディーリストは、存在に基づきルールに従ってユーザを表示するルール駆動でもよい。例えば、ルールは、バディーリスト上の人々が存在し、「オンライン」の状態を有し、そしてロサンジェルスエリアに住んでいることを特定してもよい。任意の基準が考えられる。バディーリストは、そのリストに手動で追加されたユーザ及びルールの組み合せに基づいてもよい。
第2のユーザとチャットするために、第1のユーザは、それらのバディーリストから第2のユーザを選択する。第2のユーザは、次いで、それらがチャットしたいかどうか調べるためにコラボレーションプロセスによりコンタクトされる。もしそうであれば、両ユーザのブラウザ(又は他の適当なアプリケーション)においてチャットウインドウがアクチベートされる。又、第1及び/又は第2のユーザは、各バディーリストから付加的なユーザを選択することによりそれらをチャットに加えることもできる。チャットウインドウは、ユーザがリアルタイムでメッセージを交換するのを許す。種々の実施形態において、各ユーザは、1つおきのユーザのメッセージをそれらのチャットウインドウで見る。これら実施形態の態様において、これは、全てのメッセージをコラボレーションプロセスへ送信し、このコラボレーションプロセスが、次いで、そのメッセージを全ての関連ユーザ(即ちグループチャットに含まれたユーザ)にブロードキャストすることにより達成できる。
チャットに含まれるユーザは、同じシナリオセッションの一部分であるから、それらは全てセッションの共有ステートにアクセスすることができる。共有ステート制御は、ユーザが、それらのメッセージと共に他の種類の情報(例えば、サウンド、映像、ビデオ、ファイル、等)をシームレスに交換することができる。更に別の実施形態では、チャットユーザは、同時にナビゲートできるウェブページの共通ビューを共有することもできる。これら実施形態の態様において、チャットウインドウは、いずれかのユーザがURLを指定するのを許すテキストフィールド又は他のユーザインターフェイスを有する。URLは、指定されると、コラボレーションプロセスを経て全てのユーザへ送信することができる。これは、URLをウェブページの各ユーザの共通ビューへロードさせる。
種々の実施形態において、グループチャットは、グループ内のあるユーザから他のユーザへメッセージを中継するように働くコラボレーションプロセスにより容易にされる。チャットクライアントプロセスは、加入すべき新たなユーザを招待するときに、チャット要求をコラボレーションプロセスへ送信し、このコラボレーションプロセスがその招待を新たなユーザへ転送することにより、行うことができる(新たなユーザが利用できそしてチャットクライアントそれ自体を実行していると仮定する)。新たなユーザが招待を断る場合には、コラボレーションプロセスがクライアントプロセスに失敗を通知することができる。さもなければ、新たなユーザは、それ自身をコラボレーションプロセスに関連付け、従って、グループチャットの一部分となる。この点において、新たなユーザは、メッセージをグループに送信すると共に、グループ内の他のユーザからメッセージを受信することができる。
図13a−eは、本発明の種々の実施形態に基づくグループチャットシナリオを例示する図である。この図は、コンポーネントを論理的に個別のものとして示すが、これは、単なる例示に過ぎない。当業者に明らかなように、この図に示すコンポーネントは、結合することもできるし、又は個別のソフトウェア、ファームウェア及び/又はハードウェアコンポーネントに分割することもできる。更に、当業者に明らかなように、このようなコンポーネントは、それらをいかに結合し又は分割するかに関わらず、同じコンピューティング装置において実行することもできるし、或いは1つ以上のネットワーク又は他の適当な通信手段により接続された異なるコンピューティング装置間に分布させることもできる。
図13aには、3つのリッチUIグループチャットクライアント(「A」、「B」及び「C」)と、2つのグループチャットコラボレーションプロセス(「1」及び「2」)とが示されている。点線の包囲は、2つの間の関連付けを指示するのに使用される。例えば、クライアント「A」は、コラボレーションプロセス「1」に関連付けされ、一方、クライアント「B」は、コラボレーションプロセス「2」に関連付けられる。クライアント「C」は、非関連付けである。各リッチUIクライアントは、同じウェブブラウザを共有することもできるし、又は異なるブラウザを利用することもできる。
図13aを参照すれば、チャットクライアント「B」と対話するユーザは、2人のユーザをチャットに招待する。これは、クライアント「B」がそれに代わってユーザを招待するための要求をコラボレーションプロセス「2」に行うようにさせる。コラボレーションプロセスは、これらユーザがチャットクライアント「A」及び「C」に対応することを決定する。従って、コラボレーションプロセスは、関連付け要求を「A」及び「B」に送信する。そのいずれからも応答がないか又は否定応答がある場合には、コラボレーションプロセスは、その通知を「B」へ与えることができる。「A」及び「C」の一方又は両方が肯定応答する場合には、それら自体をコラボレーションプロセス「2」に関連付ける。これが図13bに示されている。「A」、「B」又は「C」によりここで送信されるチャットメッセージは、コラボレーションプロセス「2」によりグループ内の他の者に転送される。
図13cは、クライアント「A」がそれ自身をコラボレーションプロセス「2」から解離するところを示している。これは、チャットからの退出を希望するクライアント「A」のエンドユーザの結果である。図13dは、クライアント「A」がもはやコラボレーションプロセス「2」に関連付けされず、そしてコラボレーションプロセス「1」を経てクライアント「D」をグループチャットに招待するよう試みるところを示している。クライアント「D」が招待を受け容れ、そして両クライアントがコラボレーションプロセス「1」に関連付けされる(図13e)。コラボレーションプロセス「2」により指令されるグループチャットは、コラボレーションプロセス「1」により指令されるグループチャットとは独立している。更に別の実施形態では、クライアントは、2つ以上のコラボレーションプロセスに関連付けることができる。このように、クライアントは、2つ以上のグループチャットに参加することができる。
種々の実施形態は、コンピュータ分野の当業者に明らかなように、本開示の教示に基づいてプログラムされた従来の汎用又は特殊なデジタルコンピュータ又はプロセッサ(1つ又は複数)を使用して実施することができる。ソフトウェア分野の当業者に明らかなように、熟練したプログラマーであれば、本開示の教示に基づいて適切なソフトウェアコードを容易に準備することができよう。又、本発明は、当業者に容易に明らかなように、集積回路を準備するか、又は従来のコンポーネント回路の適切なネットワークを相互接続することにより、実施することもできる。
種々の実施形態は、命令が記憶された記憶媒体(メディア)であると共に/ここに示す特徴のいずれかを実行するように汎用又は特殊なコンピューティングプロセッサ/装置をプログラムするのに使用できるコンピュータプログラム製品を包含する。記憶媒体は、フロッピー(登録商標)ディスク、光学的ディスク、DVD、CD−ROM、マイクロドライブ、磁気−光学ディスク、ROM、RAM、EPROM、EEPROM、DRAM、VRAM、フラッシュメモリデバイス、磁気又は光学カード、ナノシステム(分子メモリ、ICを含む)を含む任意の形式の物理的メディア;ペーパー又はペーパーベースのメディア;並びに命令及び/又はデータを記憶するのに適した任意の形式のメディア又はデバイスを包含し得るが、これらに限定されない。種々の実施形態は、1つ以上のパブリック及び/又はプライベートネットワークを経て送信できるコンピュータプログラム製品を包含し、この送信は、ここに示す特徴のいずれかを実行するようにコンピューティング装置をプログラムするのに使用できるインストラクションを含む。
コンピュータ読み取り可能な媒体(メディア)の1つ以上に記憶されるものであるが、本開示は、汎用/特殊なコンピュータ又はマイクロプロセッサのハードウェアを制御すると共に、コンピュータ又はマイクロプロセッサが本発明の結果を利用して人間のユーザ又は他のメカニズムと対話できるようにするためのソフトウェアも包含する。このようなソフトウェアは、装置ドライバ、オペレーティングシステム、実行環境/コンテナ、及びアプリケーションを含むが、これらに限定されない。
以上、本発明の好ましい実施形態を詳細に説明したが、これは、単なる例示に過ぎない。これは、本発明を余すところなく示すものでもないし、又、ここに開示した正確な形態に制限するものでもない。当業者であれば、多数の変更や修正が明らかであろう。これら実施形態は、本発明の原理及びその実際の応用を説明するために選ばれたものであり、従って、当業者であれば、本発明、種々の実施形態、並びに意図された特定の用途に適する種々の変更を理解することができよう。従って、本発明の範囲は、特許請求の範囲によって限定されるものとする。