JP4729172B2 - 宣言型パラダイムをサポートするステートレスなウェブ環境におけるトランザクションを実行するための方法および装置 - Google Patents
宣言型パラダイムをサポートするステートレスなウェブ環境におけるトランザクションを実行するための方法および装置 Download PDFInfo
- Publication number
- JP4729172B2 JP4729172B2 JP2000519352A JP2000519352A JP4729172B2 JP 4729172 B2 JP4729172 B2 JP 4729172B2 JP 2000519352 A JP2000519352 A JP 2000519352A JP 2000519352 A JP2000519352 A JP 2000519352A JP 4729172 B2 JP4729172 B2 JP 4729172B2
- Authority
- JP
- Japan
- Prior art keywords
- transaction
- message
- cartridge
- execution engine
- request
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Lifetime
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q30/00—Commerce
- G06Q30/06—Buying, selling or leasing transactions
- G06Q30/0601—Electronic shopping [e-shopping]
- G06Q30/0633—Lists, e.g. purchase orders, compilation or processing
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/1001—Protocols in which an application is distributed across nodes in the network for accessing one among a plurality of replicated servers
- H04L67/1004—Server selection for load balancing
- H04L67/1008—Server selection for load balancing based on parameters of servers, e.g. available memory or workload
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/40—Network security protocols
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/1001—Protocols in which an application is distributed across nodes in the network for accessing one among a plurality of replicated servers
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/1001—Protocols in which an application is distributed across nodes in the network for accessing one among a plurality of replicated servers
- H04L67/10015—Access to distributed or replicated servers, e.g. using brokers
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/30—Definitions, standards or architectural aspects of layered protocol stacks
- H04L69/32—Architecture of open systems interconnection [OSI] 7-layer type protocol stacks, e.g. the interfaces between the data link level and the physical level
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10—TECHNICAL SUBJECTS COVERED BY FORMER USPC
- Y10S—TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10S707/00—Data processing: database and file management or data structures
- Y10S707/99941—Database schema or data structure
- Y10S707/99944—Object-oriented database structure
- Y10S707/99945—Object-oriented database structure processing
Description
【発明の属する技術分野】
本発明は、ネットワーク接続されたコンピュータシステムにおけるトランザクションの処理に関し、より具体的には、ステートレスなウェブ環境における複数リクエストのトランザクションの処理に関する。
【0002】
【発明の背景】
ワールド・ワイド・ウェブ(World Wide Web)はインターネット(Internet)上のサーバのネットワークを含み、その各々は1つ以上のHTML(Hypertext Markup Language:ハイパテキスト・マークアップ言語)ページに関連付けられている。サーバに関連付けられているHTMLページは、情報と、そのサーバおよび(通常は)他のサーバ上の他の文書へのハイパテキストリンクとを提供する。サーバはハイパテキスト・トランスファー・プロトコル(HTTP:Hypertext Transfer Protocol)を用いてクライアントと通信する。サーバはクライアントからのHTMLページに関するリクエストを聞くことから、多くの場合、「リスナ」と称される。
【0003】
ワールド・ワイド・ウェブのユーザはブラウザと呼ばれるクライアントプログラムを用いてリスナから情報をリクエストし、デコードし、表示する。ブラウザのユーザがあるHTMLページ上のリンクを選択すると、そのページを表示しているブラウザはそのリンク内で特定されるユニバーサル・リソース・ロケータ(URL:Universal Resource Locator)と関連付けられるリスナにインターネットを通じてリクエストを送る。そのリクエストに応答して、リスナはそのリクエストを発行したブラウザにリクエストされた情報を送信する。ブラウザは情報を受取り、受取った情報をユーザに示し、次のユーザリクエストを待つ。
【0004】
従来、リスナに蔵置される情報は静的HTMLページの形態である。静的HTMLページは、ウェブブラウザからのリクエストに先立ち作成されリスナに蔵置される。リクエストに応答して、静的HTMLページが単に記憶から読出され、リクエストを行なっているブラウザに送信される。現在、ブラウザリクエストに応答して動的オペレーションを行なうリスナを開発しようとする趨勢にある。たとえば、リスナはリクエストに応答する際にデータベースにクエリーを発行し、そのクエリーの結果を含むウェブページを動的に構成し、動的に構成されたHTMLページをリクエストを行なっているブラウザに送信してもよい。動的オペレーションを行なうために、リスナの機能性を向上または増強させなければならない。動的オペレーションをサポートするようリスナを拡張するためにさまざまなアプローチが開発されてきた。
【0005】
ウェブの主な特徴の1つは、これがステートレスな環境を提供するということである。すなわち、HTTPは、メッセージ間の関係を示す機構を全く用いず、1メッセージ単位で情報を通信する。これは、現在のリクエストに対しサービスを行なうプロセスが、現在のリクエストが前のリクエストと同じクライアントから来たものか否かを判定できない、ということを意味する。さらに、このサービスプロセスは、現在のリクエストが前のリクエストといかに関係しているか、または関係しているか否かを判定することができない。
【0006】
ステートレスな環境を用いることに関する欠点は、複数リクエストのトランザクションを処理するのが困難であるという点である。複数リクエストトランザクションは、(1)2以上のリクエストにおいて特定される、および(2)作業のアトミック単位として実行しなければならない、1組のオペレーションである。たとえば、複数リクエストのトランザクションは、購入物品A、売却物品B、および手持ちの物品数を反映するための在庫の更新などの3つの別々のオペレーションを含むことがある。これら3つのオペレーションの各々は別々のリクエストにおいて特定できるが、各オペレーションは、3つのオペレーションすべてが実行され得る場合のみ実行されるべきである。購入物品A、売却物品Bおよび在庫の更新が同じ単一のトランザクションからのものであることを適切に決定するためには、3つのリクエストを受取るサービスプロセスによってトランザクションのステート情報を保持しておく必要がある。
【0007】
このステートレスの問題に対して考えられ得る解決策の1つは、リクエスト発行ソースの各々(各「クライアント」)についてサービスプロセスを発生することである。クライアントからのリクエストを受取るたびに、そのリクエストを処理するために同じサービスプロセスが呼出される。所与のクライアントに対して同じプロセスが起動されるので、特定のトランザクションに対するトランザクションステート情報はそれに関連づけられるサービスプロセスによって維持でき、よって複数リクエストトランザクションの処理が可能になる。
【0008】
しかしながら、この解決策は重大な欠点を有する。第1に、ほとんどのクライアントはサービスプロセスに対して継続的にリクエストを与えるわけではないので、各クライアントに対して別々のサービスプロセスを維持するのは無駄である。各クライアントリクエストの間では、サービスプロセスは単に待機し、何の作業も実行せずにシステムリソースを消費する。この解決策の第2の欠点は、これがスケーラブルでないということである。サービスプロセスが各クライアントに対して発生し、かつ維持されると、システムリソースは、たとえクライアント数が比較的少なくても、すぐに消費されるであろう。したがって、各クライアントに対してサービスプロセスを発生させることは、大規模システムに対しては実行不可能な解決策である。
【0009】
第2に考えられ得る解決策は、各サービスプロセスに対し、それが現在処理しているトランザクションの現在のステートを維持するよう要請することである。トランザクションのステート情報を維持することにより、各サービスプロセスは、複数リクエストが確実に正しく処理されるようにすることができる。
たとえば、背景についてのさらなる詳細、および本発明の実施例によって解決される問題は、1997年10月30日に出願され「データアクセスのためのシステムおよび方法(SYSTEM AND METHOD FOR DATA ACCESS)」と題された、特許協力条約(PCT)に基づいて公開された国際出願(WO97/40457)に記載されている。この文書には、ステートレスプロトコルを用いてサーバのデータにアクセスする、クライアント−サーバシステムが記載される。サーバシステムをクライアントシステムとリンクさせることにより、ネットワーク上でのネットワーク通信の効率が向上する。記載によれば、初期クライアントシステムのトランザクションリクエストの各々に対して、サーバは一意の識別子またはトークンを生成し、これはネットワークを通じてクライアントシステムに戻され、このトークンを受け取ると、クライアントシステムがその接続を終了してそれを解放するまで、アクティブまたはオープンな状態でサーバに対する論理接続を保持するように作動する。サーバで、トークンは、サーバに保持されて後続のクライアントとの通信に用いられるクライアントステート情報(ユーザコンテキスト情報とも呼ばれる)を識別するために用いられる。クライアントからの後続の通信は、蔵置されているクライアントステート情報を識別するためにサーバが用いる、トークンを含む。したがって、サーバシステムとクライアントシステムとの間のネットワーク接続を生かしておくことにより、記載されたシステムはネットワークオーバヘッドを減じ、よってシステムオーバヘッド全体を減じることができる。
しかしながら、各サービスプロセスにトランザクションステート情報を維持するよう要請することに関する欠点は、このことにより、リクエストされたトランザクションステート情報を維持するために余分なコードを書くという負担が、各サービスプロセスの開発者にかかってしまうという点である。
【0010】
以上の点を踏まえて、トランザクションステート情報を維持するためにサービスプロセスを必要としない、ステートレスな環境における複数リクエストトランザクションの処理のための機構を提供することが望ましい。
【0011】
【発明の概要】
ステートレスな環境において複数リクエストトランザクションを処理するための方法およびシステムが提供される。
【0012】
本発明の一局面によると、カートリッジ実行エンジンは、カートリッジに向けられたブラウザリクエストを代行受信する。カートリッジ実行エンジンは、このブラウザリクエストがトランザクションと関連づけられているか否かを判定する。ブラウザリクエストがトランザクションと関連づけられている場合、カートリッジ実行エンジンはトランザクションマネージャにトランザクション制御メッセージを送る。カートリッジ実行エンジンはまた、カートリッジにオペレーションメッセージも送る。カートリッジは、オペレーションメッセージ中で特定されたオペレーションを実行する。カートリッジ実行エンジンからのトランザクション制御メッセージに応答して、トランザクションマネージャは、複数リクエストトランザクションを作業のアトミック単位としてコミットさせるかまたはロールバックさせるかのいずれかを行なう。
【0013】
本発明の別の局面によると、トランザクションに関連づけられたブラウザリクエストは、特定のブラウザリクエストに関連づけられたブラウザを識別するために用いられ得るトランザクションIDと関連づけられる。
【0014】
本発明の別の局面によると、トランザクションに関連づけられたブラウザリクエストは、トランザクションIDと関連づけられ、特定のブラウザリクエストと関連づけられたブラウザを識別するために用いられる。
【0015】
本発明の別の局面によると、トランザクションIDは特定のブラウザリクエストに関連づけられているブラウザ上のクッキーとして維持される。
【0016】
本発明の別の局面によると、トランザクションIDは、特定のブラウザリクエストに関連づけられているブラウザ上のURLとして維持される。
【0017】
この発明は限定によってではなく例によって、添付の図面において例示され、添付の図面において類似の参照番号は類似の要素を指す。
【0018】
【好ましい実施例の詳細な説明】
ネットワークにわたって複数リクエストトランザクションを処理するための方法および装置を説明する。以下において説明のため、この発明の完全な理解をもたらすように数多くの特定の詳細事項を挙げている。しかしながら、当業者にはこの発明がこれらの特定の詳細事項がなくても実施できることが明らかになるであろう。場合によっては不必要にこの発明を曖昧にすることを避けるため周知の構造および装置をブロック図の形態で示している。
【0019】
ハードウェアの概観
図1は、この発明の実施例が実装され得るコンピュータシステム100を示すブロック図である。コンピュータシステム100は、バス102または情報を通信するための他の通信機構と、バス102に結合され情報を処理するためのプロセッサ104とを含む。コンピュータシステム100はまた、バス102に結合され情報およびプロセッサ104が実行すべき命令を蔵置するための、ランダムアクセスメモリ(RAM)または他の動的記憶装置などのメインメモリ106を含む。メインメモリ106はまた、プロセッサ104が実行すべき命令の実行の間に一時変数または他の中間情報を蔵置するのに用いられてもよい。コンピュータシステム100はさらに、バス102に結合され静的情報およびプロセッサ104に対する命令を蔵置するための読取専用メモリ(ROM)108または他の静的記憶装置を含む。磁気ディスクまたは光ディスクなどの記憶装置110が設けられ、バス102に結合されて情報および命令を蔵置する。
【0020】
コンピュータシステム100はバス102を介して、陰極線管(CRT)などの表示装置112に結合されコンピュータユーザに対して情報を表示してもよい。英数字および他のキーを含む入力装置114がバス102に結合され、情報およびコマンド選択をプロセッサ104に伝える。別のタイプのユーザ入力装置は、プロセッサ104に方向情報およびコマンド選択を伝え、かつ表示装置112上のカーソル移動を制御するためのマウス、トラックボールまたはカーソル方向キーなどのカーソル制御装置116である。この入力装置は典型的に2つの軸、すなわち第1の軸(たとえばx)および第2の軸(たとえばy)において2つの自由度を有し、これは装置が平面上の位置を特定できるようにする。
【0021】
この発明はコンピュータシステム100を用いてブラウザからのメッセージに応答して特定のオペレーションを行なうことに関する。この発明の一実施例によれば、プロセッサ104がメインメモリ106に含まれる1つ以上の命令の1つ以上のシーケンスを実行することに応答してコンピュータシステム100がオペレーションを行なう。このような命令は、記憶装置110などの別のコンピュータ可読媒体からメインメモリ106に読込んでもよい。メインメモリ106に含まれる命令のシーケンスを実行することにより、プロセッサ104がここに説明するプロセスステップを実行することとなる。代替の実施例では、ソフトウェア命令の代わりにまたはソフトウェア命令と併せて、結線回路を用いてこの発明を実現してもよい。すなわち、この発明の実施例はハードウェア回路およびソフトウェアの如何なる特定の組合せにも限定されない。
【0022】
「コンピュータ可読媒体」という用語はここでは、実行のためにプロセッサ104に命令を提供するのにかかわるすべての媒体を指して用いる。このような媒体は、不揮発性媒体、揮発性媒体および伝送媒体を含むが、これらに限定されない数多くの形態を取り得る。不揮発性媒体には、たとえば、記憶装置110などの光ディスクまたは磁気ディスクが含まれる。揮発性媒体には、メインメモリ106などのダイナミックメモリが含まれる。伝送媒体には、バス102を構成するワイヤを含む、同軸ケーブル、導線および光ファイバが含まれる。伝送媒体はまた、電波および赤外線データ通信において生成されるもののような音波または光波の形態を取ることもある。
【0023】
コンピュータ可読媒体の一般的な形態にはたとえば、フロッピーディスク、フレキシブルディスク、ハードディスク、磁気テープまたは何らかの他の磁気媒体、CD−ROMおよび何らかの他の光媒体、パンチカード、せん孔テープおよび孔のパターンを有する何らかの他の物理的媒体、RAM、PROM、EPROM、FLASH−EPROMおよび何らかの他のメモリチップまたはカートリッジ、以下に説明するような搬送波、またはコンピュータが読むことのできるものであればどのような他の媒体でも含まれる。
【0024】
実行のために1つ以上の命令の1つ以上のシーケンスをプロセッサ104に与える上でさまざまな形態のコンピュータ可読媒体がかかわり得る。たとえば、命令は初めに遠隔コンピュータの磁気ディスク上に担持されてもよい。遠隔コンピュータは命令をそのダイナミックメモリにロードし、その命令をモデムを用いて電話回線を介して送ることができる。コンピュータシステム100がローカルに有するモデムが電話回線上でデータを受取り、赤外線送信機を用いてそのデータを赤外線信号に変換できる。バス102に結合される赤外線検出器は赤外線信号で運ばれるデータを受取り、そのデータをバス102上に出力することができる。バス102はそのデータをメインメモリ106へ運び、そこからプロセッサ104は命令を取出して実行する。メインメモリ106が受取った命令は場合により、プロセッサ104による実行の前または後に記憶装置110に蔵置されてもよい。
【0025】
コンピュータシステム100はまた、バス102に結合される通信インターフェイス118を含む。通信インターフェイス118はローカルネットワーク122に接続されるネットワークリンク120への両方向データ通信結合を提供する。たとえば、通信インターフェイス118は、対応するタイプの電話回線に対してデータ通信接続を提供するサービス統合デジタル網(ISDN)カードまたはモデムであってもよい。別の例としては、通信インターフェイス118は、互換性のあるローカル・エリア・ネットワーク(LAN)に対するデータ通信接続を提供するローカル・エリア・ネットワーク(LAN)カードであってもよい。また、無線リンクを実現してもよい。このような実現例のいずれにおいても、通信インターフェイス118はさまざまなタイプの情報を表わすデジタルデータストリームを運ぶ電気信号、電磁気信号または光信号を送受信する。
【0026】
ネットワークリンク120は典型的に1つ以上のネットワークを介して他のデータ装置へのデータ通信を提供する。たとえば、ネットワークリンク120はローカルネットワーク122を介してホストコンピュータ124または、インターネットサービスプロバイダ(ISP:Internet Service Provider)126により運用されるデータ装置に対する接続を提供してもよい。ISP126はこれを受けて、現在一般的に「インターネット」128と称される世界規模のパケットデータ通信網を介するデータ通信サービスを提供する。ローカルネットワーク122およびインターネット128はともに、デジタルデータストリームを運ぶ電気信号、電磁気信号または光信号を用いる。コンピュータシステム100へまたはコンピュータシステム100からデジタルデータを運ぶ、さまざまなネットワークを介する信号およびネットワークリンク120上の、通信インターネット118を介する信号は情報を運ぶ搬送波の典型的な形態である。
【0027】
コンピュータシステム100はネットワーク、ネットワークリンク120および通信インターネット118を介して、メッセージを送り、プログラムコードを含むデータを受取ることができる。インターネットの例では、サーバ130はインターネット128、ISP126、ローカルネットワーク122および通信インターネット118を介してアプリケーションプログラムに対するリクエストされたコードを送信するかもしれない。
【0028】
受取られたコードはそれが受取られると同時にプロセッサ104によって実行され、および/または後に実行するために記憶装置110または他の不揮発性記憶に蔵置されてもよい。このように、コンピュータシステム100は搬送波の形態でアプリケーションコードを得ることもある。
【0029】
アプリケーションサーバ機能の概要
図2は、この発明の一実施例に従って設計されたシステム200のブロック図である。システム200は、HTTPプロトコルに従ってインターネット208にわたって複数のリスナ210、216および222と通信する複数のブラウザ202、204および206を含む。ブラウザからのリクエストに応答して、リスナはウェブアプリケーションサーバ280にここでカートリッジと称するソフトウェアモジュールを呼出させる。例示の実施例では、ウェブアプリケーションサーバ280は3つのカートリッジ230、234および238の実行を開始している。
【0030】
ウェブアプリケーションサーバ280は、トランスポート・アダプタ212、218および224、ディスパッチャ214、220および226、認証サーバ252、仮想パスマネージャ250、リソースマネージャ254、コンフィギュレーションプロバイダ256および複数のカートリッジ実行エンジン228、232および236を含む、数多くの構成要素からなる。ウェブアプリケーションサーバ280のさまざまな構成要素について以下により詳しく説明する。
【0031】
重要なことであるが、ウェブアプリケーションサーバ280の数多くの構成要素はオブジェクトリクエストブローカ(Object Request Broker)282などのマシン間通信機構を介して通信する。マシン間通信機構を用いることにより、ブラウザリクエストにおいて特定されるオペレーションを実行するカートリッジインスタンスは、リクエストを受取るリスナおよびリクエストを発行するブラウザとは異なるマシン上で実行することができる。カートリッジ・インスタンスがリスナとは異なるマシン上にあるため、リスナは障害のあるカートリッジ・インスタンスからよりよく隔離されることとなり、システムの信頼性および安全性が向上する。さらに、リスナが実行されるマシンと同じマシンでなく、数多くのマシン間でカートリッジインスタンスを実行する処理の負担を分散することによってシステムのスケーラビリティが大幅に増加する。複数のマシンにわたってカートリッジ・インスタンスの実行を分散できることから、いつどこで新しいカートリッジ・インスタンスを生じさせるかを決定するのに数多くのタイプの負荷の最適配分の技法を用いることができる。
【0032】
システム200内の典型的なオペレーションには一般的に以下の段階が含まれる。
【0033】
ブラウザがインターネット208にわたってリクエストを送信する。
リスナがそのリクエストを受取ってトランスポートアダプタを介してディスパッチャに渡す。
【0034】
ディスパッチャは仮想パスマネージャ250と通信してブラウザリクエストによって選択されたカートリッジを識別し、そのカートリッジが認証を必要とするか否かを判定する。
【0035】
カートリッジが認証を必要とすれば、ディスパッチャは認証サーバ252と通信し、ブラウザが選択されたカートリッジにアクセスする権限を与えられているか否かを判定する。
【0036】
認証サーバ252が、このブラウザは選択されたカートリッジにアクセスする権限を与えられていないと判定すれば、アクセスが拒絶されたことがブラウザに知らされる。
【0037】
しかしながら、アクセスが権限を与えられているかまたは仮想パスマネージャ250が認証は必要ないと判定した場合、ディスパッチャは2つのうち1つのことを行なう。ディスパッチャがそのカートリッジに関する使用されていないインスタンスのことを知っている場合、ディスパッチャはそのインスタンスにリクエストを送る。そのカートリッジに関して使用されていないカートリッジインスタンスがない場合、ディスパッチャはリソースマネージャ254に新しいカートリッジインスタンスを作るよう依頼する。そのインスタンスがうまく起動した後に、カートリッジはその存在をリソースマネージャに知らせる。リソースマネージャ254はそこで、ディスパッチャに新しいインスタンスのことを知らせる。ディスパッチャはブラウザリクエストに基づいて変更されたリクエストを作り、その変更されたリクエストを新しいインスタンスに送る。
【0038】
カートリッジインスタンスはその変更されたリクエストを処理して、ディスパッチャに応答を送る。
【0039】
ディスパッチャはその応答をリスナを介してクライアントに戻す。
これらの段階について以下により詳しく説明する。
【0040】
カートリッジ
カートリッジは特定のアプリケーションまたはシステム機能を行なうためのコードのモジュールである。カートリッジはシステム200における分散の基本単位を形成する。この発明の一実施例によれば、カートリッジはユニバーサル・リソース・ロケータ(URL)を用いて名付けられる。すなわち、カートリッジ名(URL)には2つの部分、すなわちカートリッジが存在するサーバのIPアドレスと、コンパイルされたカートリッジコードのサーバディレクトリ構造における仮想パスとがある。カートリッジはURLを用いて名付けられるため、カートリッジ名空間はグローバルであり、文書などの他のウェブリソースにアクセスするのに用いられるのと同じメッセージ通信技術を用いてカートリッジにアクセスすることができる。
【0041】
この発明の一実施例によれば、各カートリッジはすべてのカートリッジに対して共通の全体構造をもたらす標準インターフェイスを有する。この標準インターフェイスは、特定の条件の下でウェブアプリケーションサーバ280により呼出されるルーチンのインターフェイスを規定する。この発明の一実施例によれば、抽象カートリッジインターフェイスは以下のとおりである。
【0042】
【表1】
【0043】
init()ルーチンはカートリッジインスタンスを初期化する役割を果たす。このことには、いくつかのサブオブジェクトのコンストラクタを呼出すことと、スレッドを予め分岐させることと、他のすべての必要となる共用リソースを獲得することとが含まれ得る。
【0044】
shutdown()ルーチンはすべてのリソースを片付けカートリッジインスタンスをシャットダウンする役割を果たす。カートリッジインスタンスに対して一度shutdown()ルーチンが呼出されると、直ちにカートリッジインスタンスは後続のリクエストを処理するのに利用不可能となる。
【0045】
authenticate()ルーチンではカートリッジのサービスをリクエストしているクライアントがそのサービスを用いることを許可されているかどうかを検証する。
【0046】
exec()ルーチンはカートリッジに対してすべてのサービスリクエストをディスパッチする包括的なやり方である。
【0047】
例示的カートリッジ
各カートリッジは、明確に定義された機能を行なうカートリッジとして構成されるか、またはあるアプリケーションのためのインタプリタまたはルーチン環境として作用するプログラム可能なカートリッジとして構成される。プログラム可能なカートリッジの一例はPL/SQLランタイムであり、これは構造的問合せ言語(Structured Query Language)を用いるオラクルベースのプログラム言語(Oracle-based Programming Language)(PL/SQL)に従ってデータベースクエリーを処理するよう構成される。PL/SQLランタイムはデータベースクエリーを有するブラウザリクエストを実行する。PL/SQLランタイムは、たとえば、データリンクを介してカートリッジインスタンスと通信しているデータベースサーバにアクセスすることによってリクエストを処理する。
【0048】
プログラム可能なカートリッジの別の例はJAVAランタイムインタプリタである。JAVAランタイムインタプリタカートリッジのおかげで、ウェブアプリケーション開発者らはブラウザリクエストを処理するためのサーバ側のJAVAアプリケーションを書くことができる。同様に、たとえば第三者のサーバによって実行されるプロセスにアクセスするなどの動的オペレーションをもたらすために、カスタムサーバをカートリッジとして構成してもよい。
【0049】
ディスパッチャ
ディスパッチャは、リスナが受取ったリクエストを適当なカートリッジへ経路選択するよう構成されるソフトウェアモジュールである。この発明の一実施例によれば、ディスパッチャはサーバ側のプログラム拡張(すなわち、「プラグイン」)として実現される。そのため、ディスパッチャはそれらが属するリスナと同じアドレス空間にロードされそこで実行される。ディスパッチャはコンパイル時にリスナコードとリンクされてもよいし、実行時に動的にロードされてもよい。
【0050】
例示される実施例では、ディスパッチャ214、220および226はそれぞれ、リスナ210、216および222に関連付けられる。ディスパッチャ214、220および226は、リスナ210、216および222が受取ったブラウザリクエストをカートリッジへ選択的に経路制御する。
【0051】
たとえば、リスナ210がユニフォーム・リソース・ロケータ(URL:Uniform Resource Locator)の形態で運ばれるブラウザリクエストをインターネット208から受取ると仮定する。このブラウザリクエストは、たとえばHTMLページまたは実行すべきオペレーションであるウェブオブジェクトに対する識別子の役割を果たす。リスナ210はそのブラウザリクエストの解釈を全く試みることなくディスパッチャ214に受渡す。ブラウザリクエストを受取ると、ディスパッチャ214は、
(1) 仮想パスマネージャ250と通信してブラウザリクエストによって選択されるカートリッジを識別し、かつそのカートリッジが認証を要するかどうかを判定し、
(2) そのカートリッジが認証を必要とする場合、認証サーバ252と通信してブラウザがその選択されたカートリッジにアクセスすることが許されるかどうかを判定し、
(3) アクセスが許可された場合に、リソースマネージャと通信してブラウザリクエストを送るべき選択されたカートリッジの特定のインスタンスを定め、
(4) カートリッジの特定されたインスタンスによる実行のため、変更されたブラウザリクエストを作りかつディスパッチする。
【0052】
変更されたブラウザリクエストは元のブラウザリクエストで受取った情報を再パッケージする。変更されたブラウザリクエストはたとえば、カートリッジの正しいオペレーションに必要なデータを含むコンテキストオブジェクトを含んでいてもよい。カートリッジの正しいオペレーションに必要なデータには、たとえば、そのブラウザリクエストが関連付けられるトランザクションを識別するトランザクションIDが含まれる。
【0053】
カートリッジがリクエストに返答すると、そのカートリッジはディスパッチャにその返答を送り、ディスパッチャはこの返答をリスナに渡してそのリクエストを開始したブラウザへ送信されるようにする。
【0054】
コンフィギュレーションプロバイダ
この発明の一実施例によれば、ウェブアプリケーションサーバ280とともに用いるべきカートリッジはまずウェブアプリケーションサーバ280に登録される。登録プロセスの間、そのカートリッジに関する情報がコンフィギュレーションプロバイダ256に供給される。コンフィギュレーションプロバイダ256はその情報をメタデータ258として蔵置してウェブアプリケーションサーバ280の構成要素が後からアクセスできるようにする。
【0055】
メタデータ258はたとえば、
(1) カートリッジ名、
(2) 必要となるインスタンスの最小数、
(3) インスタンスの最大数、
(4) カートリッジを実装するコードの場所、
(5) コールバック機能(初期化、リクエストハンドラ、シャットダウン)を実行するためカートリッジ実行エンジンが用いるプログラムに依存した関数名、
(6) カートリッジを実行するためのマシンのリスト、
(7) カートリッジのためのアイドルタイム(カートリッジのインスタンスがシャットダウンされる前にアイドル状態でいることができる時間量)、
(8) オブジェクト識別子および
(9) もしあれば、カートリッジとともに用いるべき、認証サービスのタイプを示すデータ
を含んでいてもよい。
【0056】
オブジェクト識別子は、対応するカートリッジによるオペレーションの実行をリクエストするためにブラウザリクエストが供給しなければならないデータを特定する。オブジェクトタイプは特定のワードまたはURLであってもよく、または「/java」などの仮想パスを含んでいてもよい。
【0057】
一度コンフィギュレーションプロバイダ256が特定のカートリッジに対するコンフィギュレーション情報をメタデータ258内に蔵置すると、そのカートリッジはウェブアプリケーションサーバ280が起動される際に自動的に登録される。
【0058】
カートリッジがウェブアプリケーションサーバ280に登録された後、リソースマネージャ254はカートリッジに対する最小インスタンスをイニシエートする。一度最小数のインスタンスがイニシエートされると、ウェブアプリケーションサーバ280はブラウザリクエストを処理する準備が整う。
【0059】
仮想パスマネージャ
上に述べたように、ディスパッチャは仮想パスマネージャ250と通信して各々の変更されたブラウザリクエストをどこに経路選択するかを定める。特定的には、各ブラウザリクエストは典型的にURLを含む。ブラウザリクエストを受取ると、ディスパッチャはそのリクエスト内のURLを仮想パスマネージャ250に送る。仮想パスマネージャ250はこれに応答して、もしあれば、URLに関連付けられるカートリッジを識別するデータをディスパッチャに送る。
【0060】
必要とされる情報をディスパッチャに供給するため、仮想パスマネージャ250はURLをカートリッジにマッピングするメタデータ258を調べる。ブラウザリクエストを受取ったことに応答して、仮想パスマネージャ250はマッピングデータを用いて、もしあれば、ブラウザリクエストに含まれるURLに対応するカートリッジを判定する。
【0061】
たとえば、ブラウザリクエストが仮想パス「/java」で始まるURLリクエストである場合、マッピングにより、JAVAインタプリタカートリッジが仮想パス「/java」を有するリクエストを取扱うよう構成されていることが示されるかもしれない。
【0062】
この発明の一実施例によれば、仮想パスマネージャ250はまた、URLに関連付けられたカートリッジが認証を必要とするかどうかを判定する。カートリッジが認証を要する場合、仮想パスマネージャ250はディスパッチャに送る応答において、認証が必要であることを示す。認証が必要でない場合、ディスパッチャは認証サーバ252を呼出すことなく、カートリッジのインスタンスに対する変更されたブラウザリクエストを作って送る。認証が必要である場合、変更されたリクエストをカートリッジのインスタンスに送出してもよいことを認証サーバが示した後に初めてディスパッチャはそのカートリッジのインスタンスに変更されたリクエストを送る。
【0063】
リソースマネージャ
ウェブアプリケーションサーバ280のリソースマネージャ254は、カートリッジに対して予め定められた最小数のインスタンスをイニシエートし、各カートリッジのインスタンスの間で負荷の最適配分を行ない、所与のカートリッジの予め定められた最大数のインスタンスまで必要に応じてカートリッジの新しいインスタンスをイニシエートすることによってカートリッジの各々の実行を管理する。
【0064】
たとえば、ある特定のカートリッジ(C1)のためのメタデータが以下の情報を含んでいると仮定する。
【0065】
名称=C1
最小インスタンス=10
最大インスタンス=50
ホストマシン=M1、M3、M8
アイドルタイム=30秒
このメタデータに基づいて、カートリッジC1が初めに登録される際に、リソースマネージャ254はC1の10のインスタンスをイニシエートさせる。リソースマネージャ254はラベルM1、M3およびM8に関連付けられるマシン上の10のインスタンスをイニシエートすることになる。
【0066】
C1をアクセスするリクエストをディスパッチャから受取った際、リソースマネージャ254はC1のいずれかの既存のインスタンスが利用可能であるかどうかを判定する。リクエストを受取った際にC1のどのインスタンスも利用可能でない場合、リソースマネージャ254はC1の最大数のインスタンスが既に実行されているかどうかを判定する。C1の最大数のインスタンスが既に実行されていない場合、リソースマネージャ254は可能なホストマシンの1つの上でC1の新しいインスタンスをイニシエートし、リクエストを発行したディスパッチャにこの新しいインスタンスを識別するメッセージを送信する。C1の最大数のインスタンスが既に実行されている場合、リソースマネージャ254はリクエストを発行したディスパッチャに対し、その時点でそのリクエストを取扱うことができないことを示すメッセージを送る。
【0067】
負荷の最適配分
この発明の一実施例によれば、リソースマネージャ254は1組の負荷の最適配分の規則を適用して、2つ以上の可能なホストマシンがある中、カートリッジのインスタンスをどこでイニシエートするかを定める。すなわち、上の例では、M1、M2およびM3はすべてカートリッジC1のインスタンスを実行することが可能である。M1、M2およびM3が同じ処理能力を有する場合、インスタンスを3つのマシンにわたって均等に分散するのが望ましいであろう。しかしながら、M1がM2およびM3の10倍の処理力を有するなら、C1のインスタンスのすべてをある時点まではM1でイニシエートし、それからさらなるインスタンスをM1、M2およびM3の間で均等に分散させるのが望ましいであろう。
【0068】
可能なマシンの間で負荷の最適配分を如何に行なうかを定める上でリソースマネージャ254を助けるため、各カートリッジに対して蔵置されるメタデータはさらなる詳細を含んでいてもよい。たとえば、メタデータは各マシンに対してインスタンスの別個の最小および最大数を特定してもよい。マシンごとの最小および最大値を、すべてのマシンに適用される最小および最大値の代わりにまたはそれと併せて用いてもよい。その場合リソースマネージャ254は、最大許容可能なインスタンスに対して現在実行されているインスタンスの比が最も低いマシンはどれかに基づいて、マシン間で新しいインスタンスを分散させることができる。
【0069】
メタデータはまた、ある特定のカートリッジを実行できるマシンのための順序を特定してもよい。その順序においてN+1の位置にあるマシンは、その順序においてN番目の位置にあるマシンが既にN番目のマシンで許容されるその最大数のインスタンスを実行している場合にだけカートリッジのインスタンスを実行するのに用いられる。
【0070】
カートリッジインスタンスステータスの管理
この発明の一実施例によれば、リソースマネージャ254は作られたカートリッジインスタンスを管理するためステート情報を維持する。ステート情報には、インスタンスを識別し、そのインスタンスを実行するマシンを識別し、そのインスタンスが割当てられたリスナを識別するデータが含まれる。
【0071】
図5には、このステート情報を蔵置するためリソースマネージャ254が維持し得る表500が示される。表500には、インスタンス列502、カートリッジ列504、リスナ列506およびマシン列508が含まれる。表500の各行は別個のカートリッジインスタンスに対応する。所与のカートリッジインスタンスに対する行内で、カートリッジ列504はカートリッジインスタンスに関連づけられるカートリッジを識別し、インスタンス列502はそのカートリッジインスタンスのインスタンス番号を示す。たとえば、行510はカートリッジC1のインスタンスに対応する。このため、行510のカートリッジ列504はカートリッジC1を示す。行510のインスタンス列502は行510に関連づけられるカートリッジインスタンスがカートリッジC1のインスタンス1であることを示す。
【0072】
リスナ列506は、ある行に関連づけられるカートリッジインスタンスが割当てられたリスナを示す。マシン列508は、ある行に関連づけられるカートリッジインスタンスが実行されているマシンを示す。たとえば、行510に関連づけられるカートリッジインスタンスはリスナ210に割当てられており、マシンM1上で実行されている。
【0073】
リソースマネージャ254と同様に、各ディスパッチャはそのディスパッチャが設けられているリスナに割当てられたカートリッジインスタンスに対するステート情報を維持する。このようなステート情報はたとえば、図4に示されるような表400において維持されてもよい。表500と同様に、表400にはそれぞれインスタンス番号およびカートリッジ識別子を保持するインスタンス列402およびカートリッジ列404が含まれる。しかしながら、表500ではリソースマネージャ254によって割当てられるすべてのカートリッジインスタンスに対して1つずつエントリが含まれるのに対し、表400では特定のリスナに割当てられたカートリッジインスタンスに対するエントリしか含まれない。たとえば、表400は、表500に列挙されたカートリッジインスタンスのうちリスナ200に割当てられたもののみに対するエントリを含む。
【0074】
インスタンス列402およびカートリッジ列404に加えて、表400にはステータス列406が含まれる。各行に対し、ステータス列406はその行に関連づけられるインスタンスのステータスを示す値を保持する。たとえば、行408のステータス列406はカートリッジC1にインスタンス1が現在ビジーであることを示している。例示される実施例では、ステータス列406はカートリッジインスタンスがBUSYまたはFREEのいずれかであることを示すフラグを保持する。カートリッジステータスの重要性について、リソースマネージャ254とディスパッチャ214および220とのオペレーションに関連して以下に説明する。
【0075】
ディスパッチャとリソースマネージャとの相互作用
上述のように、ディスパッチャは特定のカートリッジに変更されたブラウザリクエストを送る必要がある際にリソースマネージャ254と通信する。この発明の一実施例によれば、ディスパッチャはまず、適当なカートリッジのインスタンスが(1)これに既に割当てられているかどうか、また(2)新しい変更されたブラウザリクエストを処理するのに利用可能であるかどうかを判定する。適当なカートリッジインスタンスがディスパッチャに既に割当てられており新しい変更されたブラウザリクエストを処理するのに現在利用可能である場合、ディスパッチャはリソースマネージャ254とさらに通信することなく、変更されたブラウザリクエストをカートリッジインスタンスへ転送する。
【0076】
たとえば、仮想パスマネージャ250によればカートリッジC1が処理しなければならないブラウザリクエストをリスナ210が受取ったと仮定する。また、表400がリスナ210に割当てられたカートリッジインスタンスの現在のリストおよびステータスを反映すると仮定する。リスナ210からブラウザリクエストを受取ると、ディスパッチャ214は表400を調べてカートリッジC1のFREEインスタンスがあるか探す。例示される表400では、行410がカートリッジC1のインスタンス3が現在FREEであることを示している。したがって、ディスパッチャ214はさらにリソースマネージャ254と通信することなく変更されたブラウザリクエストを直接カートリッジC1のインスタンス3に転送する。変更されたブラウザリクエストを送ることに応答してディスパッチャ214は行410のステータス列406のステータス値をBUSYに変える。
【0077】
リスナに現在利用可能である適当なカートリッジインスタンスが既に割当てられていない場合、カートリッジに関連づけられるディスパッチャはリソースマネージャ254からのカートリッジインスタンスをリクエストする。必要とされるカートリッジのインスタンスが利用可能でなく、かつ必要とされるカートリッジの既存のインスタンスの数が最大数より下であることをリソースマネージャ254が判定した場合、リソースマネージャ254は新しいカートリッジをイニシエートする。新しいカートリッジをイニシエートする際に、リソースマネージャ254は表500に新しいカートリッジインスタンスのためのエントリを挿入する。
【0078】
たとえば、カートリッジC3が処理しなければならないブラウザリクエストをリスナ210が受取ったと仮定する。また、カートリッジC3のインスタンス3がまだイニシエートされていないものと仮定する。こうした条件の下では、ディスパッチャ214はリソースマネージャ254にカートリッジC3のインスタンスに対するハンドルを求めるリクエストを送る。このリクエストに応答して、リソースマネージャ254はマシンM3上でカートリッジC3のインスタンス3をイニシエートする。さらに、リソースマネージャ254は行512に見られるエントリを表500に挿入する。
【0079】
表500にカートリッジC3のインスタンス3のための行512を挿入した後、リソースマネージャ254はディスパッチャ214に新しく作られたインスタンスに対するハンドルを送り返す。このハンドルを受取ったことに応答して、ディスパッチャ214はそのステータス表400に新しいインスタンスのためのエントリ(行412)を挿入する。ディスパッチャ214はそこで、変更されたブラウザリクエストをカートリッジC3のインスタンス3に送信する。
【0080】
カートリッジインスタンスの解放
この発明の一実施例によれば、リスナはカートリッジインスタンスが未処理のブラウザリクエストに応答し終わった際にカートリッジインスタンスの所有権を自動的に解放することはない。たとえば、カートリッジC3のインスタンス3が変更されたブラウザリクエストを受取り、その変更されたブラウザリクエストを処理して、ディスパッチャ214に応答を送り返すと想定する。ディスパッチャ214はその応答をリスナ210に渡し、これがブラウザリクエストを発行したブラウザに送り返されるようにする。
【0081】
この時点で、リスナ210はカートリッジC3のインスタンス3の所有権をもはや必要としない。しかしながら、カートリッジC3のインスタンス3の所有権をリソースマネージャ254に戻す代わりに、ディスパッチャ214は単に行412のステータス列406をBUSYからFREEに変える。
【0082】
行412のステータス列406の値をFREEに変えることによって、カートリッジC3のインスタンス3がもはやリクエストを処理しておらず、よって後続のリクエストを処理する準備ができていることが示される。しかしながら、カートリッジC3のインスタンス3が利用可能であることを示す表400はディスパッチャ214によって局所的に維持されているため、カートリッジC3のインスタンス3はリスナ210に到達する後続のブラウザリクエストに対してだけ利用可能である。リソースマネージャ254が維持する表500の行512はカートリッジC3のインスタンス3をリスナ210が所有していることを引続き示す。
【0083】
リスナはリクエストが処理されるたびにカートリッジインスタンスを自動的に解放するわけではないため、リソースマネージャ254とさまざまなディスパッチャとの間での通信に関連するオーバーヘッドは大幅に減少される。たとえば、カートリッジC3に伝えなければならない10の連続したリクエストをリスナ210が受取るものと仮定する。10のリクエストの各々に対してリソースマネージャ254と通信するのではなく、ディスパッチャ214は最初のリクエストに応答してリソースマネージャ254と通信してもよい。ディスパッチャ214は後続の9つのリクエストをリソースマネージャ254と通信することなく処理することができるが、これはディスパッチャ214が最初のリクエストを処理するC3の同じインスタンスを用いて9つの後続のリクエストを処理するためである。
【0084】
各リクエストを処理する際にカートリッジインスタンスのリスナ所有権を自動的に解放しないことでウェブアプリケーションサーバ280の効率が向上されるとはいえ、リスナは無期限にカートリッジインスタンスの所有権を維持することはできない。たとえば、長い期間にわたって用いられなかったインスタンスはリソースマネージャ254に戻され、リソースを空けるためにその割当ての解除ができるようにすべきである。さらに、他のリスナがそのカートリッジのインスタンスを必要としているところに、1つのリスナが比較的長い時間使っていなかったカートリッジのインスタンスの所有権を維持することは効率的ではない。
【0085】
したがって、リソースマネージャ254は、リスナに渡される各カートリッジインスタンスのための最大アイドルタイムを各リスナに伝える。最大アイドルタイムとは、リスナがカートリッジインスタンスの所有権を解放しなければならなくなる前にそのカートリッジインスタンスが使用されない状態でいられる最大の時間を示すものである。たとえば、カートリッジC3のインスタンス3のための最大量のアイドルタイムが10分であることをリソースマネージャ254がリスナ210に示すものと仮定する。この情報に基づいて、リスナ210は、カートリッジC3のインスタンス3が10分より長い間アイドル状態またはFREEとならない限りにおいてカートリッジC3のインスタンス3を続けて用いてカートリッジC3に対するブラウザリクエストを処理することができる。
【0086】
カートリッジC3のインスタンス3が10分より長い間アイドル状態である場合、ディスパッチャ214は表400から行412を取除き、リスナ210がカートリッジC3のインスタンス3の所有権を解放することをリソースマネージャ254にメッセージを送って知らせる。このメッセージに応答して、リソースマネージャ254は行512を更新して、カートリッジC3のインスタンス3がいずれのリスナによっても所有されておらず、よって別のリスナに再割当てされるか終了され得ることを示す。
【0087】
代替の実施例では、カートリッジインスタンスのためのアイドルタイムが満了した際にもディスパッチャはカートリッジインスタンスを自動的に解放しない。代わりに、ディスパッチャはリソースマネージャ254にメッセージを送り、満了となったインスタンスを解放することを申し出る。リソースマネージャ254はこの申し出に応答して、リスナがカートリッジインスタンスを解放するようリクエストするか、またはリスナがその満了となったカートリッジインスタンスの所有権を持ち続けることを許可してもよい。
【0088】
この発明の一実施例によれば、リソースマネージャ254は直ちに処理することのできないリクエストのキューを維持する。キュー内のリクエストを処理することが可能となると、そのリクエストはキューから取除かれ処理される。
【0089】
たとえば、カートリッジC1が処理しなければならないブラウザリクエストをリスナ222が受取り、そのリスナ222にカートリッジC1のいずれのインスタンスも割当てられていなかったと仮定する。ディスパッチャ226はリソースマネージャ254にC1のインスタンスに対するリクエストを送る。さらに、C1の最大50のインスタンスが許容され、C1の50のインスタンスがリスナ210に割当てられたと仮定する。こうした条件の下では、リソースマネージャ254はリスナ222からのリクエストを処理することができない。このため、リソースマネージャ254はそのリクエストをキューにおく。リスナ210がC1のインスタンスを解放すると、リソースマネージャ254はリスナ222にC1のインスタンスが利用可能であることを伝える。
【0090】
ある特定の条件の下で、リソースマネージャ254は強制的にリスナにカートリッジインスタンスを解放させることがある。たとえば、リソースマネージャ254はシステムオーバロード状況を検出し、これに応答して1組のカートリッジインスタンスを終了することがあり、これはそのカートリッジインスタンスが終了されることになることをそのカートリッジインスタンスが現在割当てられているリスナに知らせる前または知らせた後に行なわれる。
【0091】
また、リソースマネージャ254はリスナの間での公平性の方針を実現するために強制的にリスナにカートリッジインスタンスを解放させることがある。たとえば、別のリスナが予め定められたしきい値より長い時間にわたってカートリッジのインスタンスを待っている場合、リソースマネージャ254は所与のカートリッジの最も多い数のインスタンスを保持するリスナにそのカートリッジのあるインスタンスを解放させてもよい。たとえば、リスナ210にカートリッジC1の50のインスタンスが割当てられ、C1は最大で50のインスタンスを有する場合、リソースマネージャ254は別のリスナからC1のインスタンスに対するリクエストを受取ってから10秒後にリスナ210にC1のあるインスタンスを解放させてもよい。
【0092】
カートリッジ実行エンジン
この発明の一実施例によれば、各カートリッジインスタンスはカートリッジ実行エンジンおよびカートリッジから構成される。カートリッジ実行エンジンは、マシン間通信機構およびウェブアプリケーションサーバ280の複雑さからカートリッジを隔離するコードモジュールである。カートリッジは、関数テーブルにカートリッジ関数に対するポインタを蔵置することによってカートリッジ実行エンジンに利用可能となる。一実施例によれば、すべてのカートリッジが、上述の例示のカートリッジインターフェイスにおいて特定された関数を提供する。すべてのカートリッジが同じインターフェイスをサポートするようにさせることにより、単一の標準カートリッジ実行エンジンをすべてのカートリッジに対して用いることができる。
【0093】
この発明の一実施例によれば、カートリッジは共用ライブラリとして実装され、カートリッジ実行エンジンは標準カートリッジインターフェイスを用いて共用ライブラリ内のルーチンを呼出す実行可能なプログラムである。カートリッジ実行エンジンはカートリッジとディスパッチャとの間でインターフェイスをもたらし、カートリッジの制御のフローを指示し、カートリッジが用いるサービスを提供する。
【0094】
リソースマネージャ254が新しいカートリッジインスタンスの生成を必要とする場合、リソースマネージャ254はカートリッジ実行エンジンのインスタンスを生成させる。これに対し、このようにして作られたカートリッジ実行エンジンのインスタンスは適当なカートリッジのインスタンスを生成させる。リソースマネージャ254はたとえば、カートリッジが実行されるマシン上にある「カートリッジ実行エンジンファクトリ」と呼出すことによってカートリッジ実行エンジンのインスタンスを生成させることができる。カートリッジ実行エンジンのインスタンスはたとえば、そのカートリッジを構成する共用ライブラリ内のルーチンのうちの1つに呼出を行なうことによってカートリッジのインスタンスを生成させることができる。
【0095】
図2に示されるように、ウェブアプリケーションサーバ280はカートリッジ230、234および238の各々に対しカートリッジ実行エンジン228、232および236を含む。カートリッジ実行エンジンは標準のカートリッジインターフェイスを介してカートリッジへの呼出を行なうことにより対応するカートリッジの実行を制御する。以下に述べるように、カートリッジ実行エンジンとカートリッジとの間で基本的なコールバック機能を確立することにより、そのカートリッジをコールバック機能に応答するよう構成し、次にそのカートリッジをコンフィギュレーションプロバイダ256に登録することによってどんなカートリッジもウェブアプリケーションサーバ280に統合することができる。
【0096】
したがって、PL/SQLランタイムカートリッジがリクエストを処理するのに適当なカートリッジであるとディスパッチャ214が判定すると、ディスパッチャ214はそのPL/SQLランタイムカートリッジに関連づけられるカートリッジ実行エンジンを含むカートリッジインスタンスにそのリクエストをディスパッチする。新しいインスタンスをイニシエートする必要がある場合、リソースマネージャ254は別個のアドレス空間においてPL/SQLランタイムカートリッジの新しいインスタンスを作り、その新しいインスタンスのカートリッジ実行エンジン228へそのリクエストをディスパッチする。プログラムのインスタンスを実行するのに用いられるアドレス空間は、ウェブアプリケーションサーバ280の構成要素の1つ以上が実行されているコンピュータシステムのメモリ内にあるか、または別のコンピュータシステム上にあってもよい。
【0097】
ディスパッチャからのメッセージに応答して、カートリッジ実行エンジンはカートリッジにリクエストハンドラコールバック機能を発行し、カートリッジにそのリクエストを処理させる。そのリクエストを処理するカートリッジはその結果をカートリッジ実行エンジンに返し、カートリッジ実行エンジンはその結果をディスパッチャに転送する。ウェブアプリケーションサーバ280がオペレーションにおいて障害を検出した場合にはカートリッジ実行エンジンはカートリッジのシャットダウン関数を発行する。
【0098】
このように、カートリッジ実行エンジンは、実行すべき予め定められたオペレーションを特定するウェブアプリケーションサーバ280へのアプリケーションプログラミングインターフェイスを提供する。標準のカートリッジインターフェイスを使用することにより、カートリッジのプログラマが、カートリッジがともに用いられることになる特定のウェブリスナが用いるプロトコルとは無関係に、各カートリッジをウェブアプリケーションサーバ280へ高レベルで統合化するよう構成することができる。
【0099】
トランスポートアダプタ
リスナは、サーバ側のプラグインが使用するためのプログラミングインターフェイスおよびプロトコルを提供することによってそのようなプラグインの使用を可能にする。残念なことに、リスナが提供するプログラミングインターフェイスおよびプロトコルはリスナごとに異なる。たとえば、ネットスケープ・サーバ・アプリケーション・プログラミング・インターフェイス(NSAPI:Netscape Server Application Programming Interface)、インターネット・サーバ・アプリケーション・プログラミング・インターフェイス(ISAPI:Internet Server Application Programming Interface)およびアプリケーション開発インターフェイス(ADI:Application Development Interface)は現在リスナによりもたらされる別個のプログラミングインターフェイスの3つの例である。
【0100】
トランスポートアダプタはウェブリスナが用いる私的プロトコルおよびインターフェイスからディスパッチャを隔離する。特定的には、各トランスポートアダプタはさまざまなリスナのプロトコルを認識し、リスナから受取ったブラウザリクエストを変換してリスナのプロトコルとは無関係の標準ディスパッチャプロトコルを有する変換されたブラウザリクエストを生じるよう構成される。同様に、トランスポートアダプタはディスパッチャからの返答をリスナのトランスポートプロトコルに変換する。
【0101】
このように、トランスポートアダプタにより、ウェブアプリケーションサーバ280を異なるベンダのリスナとともに用いることが可能となる。さらに、トランスポートアダプタは異なるサーバアーキテクチャおよびオペレーティングシステムに対応するよう構成されてもよい。
【0102】
ウェブアプリケーションサーバのオペレーション
図3Aおよび図3Bはこの発明の一実施例によるブラウザリクエストに応答する方法を示すフロー図である。ステップ350においてリスナがブラウザリクエストを受取る。説明のために、このブラウザリクエストはブラウザ202により発行されリスナ210により受取られるものと仮定する。
【0103】
ブラウザリクエストを受取ると、リスナ210はステップ352においてウェブアプリケーションサーバ280にそのリクエストを転送する。特定的には、リスナ210はリスナ210の私的プログラミングインターフェイスを用いてそのリクエストをトランスポートアダプタ212に渡す。トランスポートアダプタ212は、必要に応じてそのリクエストを標準ディスパッチャプログラミングインターフェイスを用いて変換しそのリクエストをディスパッチャ214に渡す。
【0104】
ディスパッチャ214は、仮想パスマネージャ250と通信することによって、ブラウザリクエストにより特定される仮想パスに基づいて、ステップ354においてブラウザリクエストに対応するリクエストオブジェクトタイプを識別する。リクエストのオブジェクトタイプがカートリッジに対応するものであれば、仮想パスマネージャは、認証が必要であるか否かもディスパッチャ214に示す。
【0105】
ディスパッチャ214はステップ356において、そのリクエストオブジェクトタイプが識別可能なカートリッジに対応するかどうかを判定する。そのリクエストオブジェクトタイプが識別可能なカートリッジに対応していない場合、そのリクエストはステップ358においてリスナ210に戻される(図3Bを参照)。ステップ358においてそのリクエストが静的HTMLページに対するリクエストであることをリスナ210が認識すると、リスナはその静的HTMLページにアクセスし、そのHTMLページをステップ360においてブラウザ202に送る。ブラウザリクエストがリスナ210によって認識されない場合、ステップ360において返答がブラウザ202に送られそのリクエストが認識不可能であったことを示す。
【0106】
ステップ356において、リクエストをカートリッジに送らなければならないことをディスパッチャ214が判定すると、ディスパッチャは認証サーバ252と通信することにより、何らかの必要な認証を行なう。この認証プロセスについては後により詳細に述べる。さらに、ステップ356で、現在FREEであるカートリッジのどのインスタンスにもリスナ210が割り当てられていない場合、ディスパッチャ214は、そのブラウザリクエストを送ることのできるカートリッジ230のインスタンスが割当てられることになるリソースマネージャ254と通信する。
【0107】
図3Bに示されるステップ362では、リソースマネージャ254は、識別されたカートリッジのインスタンスが既存のインスタンスの数の中で利用可能である(所有されていない)かどうかを判定する。説明のため、このリクエストはカートリッジ230に関連づけられるものであり、カートリッジ230はPL/SQLランタイムカートリッジであると仮定する。
【0108】
ステップ362においてリソースマネージャが利用可能なインスタンス、たとえばPL/SQLランライム230のインスタンス260を識別すると、リソースマネージャ254はリクエストをインスタンス260に送るべきであることをディスパッチャ214に知らせる。ディスパッチャ214はそこで、変更されたブラウザリクエストを作りステップ368においてインスタンス260のカートリッジ実行エンジン228にその変更されたブラウザリクエストを送って、以下に説明するように利用可能なインスタンス260にそのリクエストを処理させる。
【0109】
しかしながら、ステップ362においてカートリッジ230のインスタンスが1つも利用可能でない場合、リソースマネージャ254はステップ364において、既存のインスタンスの数が最大所定数を超えるかどうかを判定する。ステップ364において既存のインスタンスの数が最大所定数を超える場合、リソースマネージャ254はその時点ではそのリクエストを処理できないことをディスパッチャ214に示す。これに応答して、ディスパッチャ214はステップ358においてそのリクエストをリスナ210に返し、その後に、ウェブリスナ210はステップ360においてネットワークを介してブラウザ202へ返答を送り、そのリクエストが処理されなかったことを示す。
【0110】
代わりに、カートリッジインスタンスがリクエストを処理するためにその現時点で利用可能でない場合、リスナ210はそのカートリッジインスタンスに対する待ちリストにそのリクエストを入れてもよい。カートリッジインスタンスが利用可能となると、変更されたブラウザリクエストが待ちリストから取除かれカートリッジインスタンスに転送される。変更されたブラウザリクエストが予め定められた時間より長い間待ちリストに残っている場合、リスナ210はそのリクエストを待ちリストから取除いてブラウザ202にメッセージを送りそのリクエストが処理できなかったことを示すようにしてもよい。
【0111】
ステップ364において既存のインスタンスの数が最大所定数を超えない場合、リソースマネージャ254は識別されたプログラムの新しいインスタンスをイニシエートし、ブラウザリクエストに基づく変更されたブラウザリクエストを新しいインスタンスに送るべきであることをディスパッチャ214に知らせる。そこでディスパッチャ214は変更されたブラウザリクエストをその新しいインスタンスのカートリッジ実行エンジンへディスパッチする。
【0112】
たとえば、リソースマネージャ254がブラウザリクエストに応答してインスタンス260をイニシエートしたと仮定する。その初期化の間、PL/SQLランタイムのための蔵置された命令シーケンスにアクセスが行なわれ、ディスパッチャ214が実行しているアドレス空間とは別個のアドレス空間においてカートリッジ230の新しいインスタンス260が作られる。一実施例によれば、初期化はカートリッジ実行エンジン228をロードし、そのカートリッジ実行エンジンにカートリッジ230内の初期化ルーチンを呼出させることによって行なわれる。
【0113】
一度新しいインスタンス260が実行されると、ディスパッチャ214はステップ368においてその新しいインスタンス260に関連づけられているカートリッジ実行エンジン228にリクエストをディスパッチする。カートリッジ実行エンジン228は新しいインスタンス260にコールバックメッセージを送りそのリクエストの実行を要求する。そのコールバックメッセージにおいて、カートリッジ実行エンジン228はそのリクエストを処理する上でインスタンス260が必要とする全てのパラメータを渡す。このようなパラメータにはたとえば、パスワード、データベース探索キー、またはインスタンス260が実行する動的オペレーションのための他のどんな引き数を含んでいてもよい。
【0114】
次にインスタンス260はリクエストを実行する。ステップ368におけるインスタンスによるリクエストの実行の間、ディスパッチャ214はステップ370においてインスタンスを監視して障害が発生するかどうかを判定する。ステップ370においてディスパッチャ214が障害を検出すると、ディスパッチャ214はステップ372において対応するカートリッジ実行エンジン228を呼出し、その障害を有するインスタンス260を打ち切る。これに対し対応するカートリッジ実行エンジン228はAPIを通して障害のあるインスタンスに対してシャットダウンコマンドを発行する。そのインスタンスはカートリッジ実行エンジン228によるシャットダウンコマンドに応答して、他のどんなアドレス空間における他のどんなプロセスにも影響を与えることなくシャットダウンする。
【0115】
ステップ370において障害が検出されない場合、ディスパッチャ214はステップ374において実行の完了の際にインスタンス260から返答を受取る。ステップ376においてディスパッチャ214はその返答をリスナ210に転送し、リスナ210は実行されたインスタンス260からの返答をもってブラウザに応答する。インスタンス260を実行した後、ステップ378においてディスパッチャ214はステップ378に示されるようにメモリ内にインスタンスを維持し、後続のリクエストの実行を可能にする。
【0116】
ウェブサーバの分散アーキテクチャ
重要なことであるが、ウェブアプリケーションサーバ280のさまざまな構成要素は、それら構成要素が同じアドレス空間において実行される必要がなく同じマシン上で実行されることさえ必要としない通信機構を用いて互いに通信する。例示される実施例では、ウェブアプリケーションサーバ280の構成要素はオブジェクトリクエストブローカ(ORB:Object Request Broker)282を介して通信するよう構成される。オブジェクトリクエストブローカは「共通オブジェクトリクエストブローカ:アーキテクチャおよび仕様(CORBA)」("Common Object Request Broker: Architecture and Specification (CORBA)")に詳しく記載されている。CORBAに関連するこのおよび他の文献はワールド・ワイド・ウェブのhttp://www.omg.orgにおいて見つけることができる。
【0117】
この発明の実施例はCORBAに従ったORBを介する通信に関連して説明するが、他のクロスプラットフォーム通信機構を用いてもよい。たとえば、ウェブアプリケーションサーバ280の構成要素は代わりに、遠隔手続き呼出(RPC:Remote Procedure Calls)、UNIXパイプ、Microsoft COMを用いて互いに通信してもよい。
【0118】
ウェブアプリケーションサーバ280のさまざまな構成要素がマシンから独立した通信機構を用いて互いに通信するため、構成要素が互いに対してどこに存在するかということに関して固有の制約はない。たとえば、リスナ210、216および222は同じマシン上で実行していてもよく、またはそれぞれがこのようなオペレーティングシステムを有する3つの完全に異なったマシン上で実行してもよい。同様に、認証サーバ252、仮想パスマネージャ250、リソースマネージャ254およびコンフィギュレーションプロバイダ256は同じマシン上で実行していてもよく、または4つの異なるマシン上で実行していてもよい。さらに、これらの4つの異なるマシンはリスナ210、216および222を実行する3つのマシンと少しも重複していなくてもよい。
【0119】
カートリッジ実行エンジン228、232および236は、オブジェクトリクエストブローカ282を介してウェブアプリケーションサーバ280の他の構成要素と通信するのに必要な論理のすべてを組込んでいる。したがって、カートリッジインスタンス自体の場所は通信機構によって本質的に制約されるものではない。すなわち、インスタンス260はこれがリクエストを受取るディスパッチャとは全く異なるマシンおよびオペレーティングシステムにおいて実行されてもよい。同様に、インスタンス260は、リソースマネージャ254、または同じウェブアプリケーションサーバ280によって管理される他のカートリッジのインスタンスを含む、ウェブアプリケーションサーバ280の他の構成要素のいずれとも異なるマシンおよびオペレーティングシステム上にあってもよい。
【0120】
重要なことだが、ウェブアプリケーションサーバ280が用いるカートリッジが享受する場所の独立性は、カートリッジそのものにおける何らかのカスタムプログラミングを介してではなくカートリッジ実行エンジンの通信論理を介して達成される。したがって、分散アプリケーションサーバ環境における実行のために特別にカートリッジを設計する必要がない。このように、カートリッジ設計者らは分散システムの複雑さから隔離され、カートリッジが作られる目的であるタスクと関連する論理に労力を集中させることができる。
【0121】
トランザクションの処理
本発明の一実施例によれば、トランザクションは、特定のタイプのトランザクションについての特定の情報を示すメタデータを用いることにより、ステートレスな環境において実現される。メタデータ中に供給されたトランザクションについての情報は、ここではトランザクションの属性と呼ばれる。トランザクションの特定の属性を示すためにメタデータを用いることにより、ステート情報を持続的に維持するためにカートリッジを必要としないシステムが可能となる。そのようなシステム中のトランザクションは、プログラム型ではなく宣言型であり、メッセージ自体がそれらの所属するトランザクションを示すというものである。たとえば、2つの特定のタイプのトランザクションについてのメタデータ、TX1およびTX2は、以下のとおりであり得る。
【0122】
トランザクションの各タイプに対して、メタデータはさまざまな属性を含む。一実施例に従うと、属性は、カートリッジ名、トランザクション名、所属先リスト(belong−to−list)、リソースリスト(resource−list)、開始(begin)、コミット(commit)、およびロールバック(rollback)TRANSACTION URLを含む。上記の例では、TX1のカートリッジ名はSTOREFRONTであり、トランザクション名はSTOREACCOUNTSであり、所属先リストは/STOREFRONTおよび/BANKINGを含み、リソースリストは/SEARSおよび/BANK1を含み、開始トランザクションURLは/storefront/open sessionであり、コミットトランザクションURLは/storefront/commit sessionであり、さらに、ロールバックトランザクションURLは/storefront/rollback sessionである。
【0123】
カートリッジ名の属性は、トランザクションのオペレーションを実行するためにディスパッチャが通信する特定のタイプのカートリッジを識別する。トランザクション名の属性は、他のトランザクションのタイプと関連するトランザクションのタイプを一意に識別する。あるトランザクションタイプの所属先リストは、そのトランザクションのオペレーションに関与し得るカートリッジをリストする。リソースリストは、、そのトランザクションタイプのトランザクションのオペレーションによって影響されるリソースのリストである。開始トランザクションURLは、このタイプのトランザクションが開始されようとしていることを知らせるURLである。コミットトランザクションURLは、現在進行中のこのタイプのトランザクションがコミットされるべきであることを知らせるURLである。ロールバックトランザクションURLは、既に始まっているこのタイプのトランザクションがロールバックされるべきであることを示すURLである。トランザクションの実行中にこれらの属性値の各々がいかに使用されるかについては、以下により詳細に述べる。
【0124】
トランザクションの概要
図6は、本発明の一実施例によるステートレスな環境における複数リクエストトランザクションの処理を提供する、システム600のブロック図である。図6は図2と類似しているので、同様の構成要素には同じ番号が付されている。この文書中では、ブラウザリクエストという用語とトランザクションリクエストという用語は、互換的に用いられる。複数リクエストのトランザクションという用語は、2以上のブラウザリクエストを含む単一のトランザクションのことを指すのに用いられる。
【0125】
カートリッジ実行エンジン228は、ブラウザリクエストを受取るために、オブジェクトリクエストブローカ282を通じて複数のディスパッチャ(たとえば1以上のディスパッチャ214、220および226)と通信する。これらのブラウザリクエストは、インターネット208に接続された複数のブラウザから送られ得る。複数のディスパッチャに加えて、カートリッジ実行エンジン228は、カートリッジ230、コンフィギュレーションプロバイダ256およびトランザクションマネージャ606とも通信する。上述したように、カートリッジ230は、明確に定義された関数を実行するカートリッジとして、またはアプリケーションに対するインタープリタまたはルーチン環境として作動するプログラマブルカートリッジとしてかのいずれかで構成される、コードのモジュールを表わす。カートリッジ実行エンジン228、トランザクションマネージャ606およびカートリッジ230の組合せは、カートリッジインスタンスを構成する。
【0126】
特定のカートリッジは、複数のデータベースにアクセスするために複数のデータベースサーバと関連づけられ得る。この例では、カートリッジ230は、データベースサーバ608およびデータベースサーバ612のそれぞれを通じてデータベース610およびデータベース614にアクセスすることにより、SQL(Structured Query Language)に従って、データベーストランザクションを処理する能力を有する。
【0127】
トランザクションマネージャ606は、カートリッジ実行エンジン228と関連づけられる調整モジュールを表わし、ステートレスなウェブ環境における複数リクエストトランザクションの実行を調整するように機能する。複数リクエストトランザクションの実行の調整において、トランザクションマネージャ606は複数リクエストトランザクションに対していかなるステート情報も保持しない。トランザクションマネージャ606はカートリッジ実行エンジン228と通信して、トランザクション制御メッセージを受取る。トランザクション制御メッセージに含まれる情報を用いて、トランザクションマネージャ606はデータベースサーバ608および612と相互作用し、複数リクエストトランザクションの間にそれぞれのデータベース610および614に対してなされた変更を、作業のアトミック単位としてコミットまたはロールバックさせる。
【0128】
トランザクションの識別
複数リクエストトランザクションと関連づけられるブラウザリクエストは、グローバルに一意のトランザクションIDを含む。ブラウザリクエスト内のグローバルに一意のトランザクションIDは、このブラウザリクエストが所属している複数リクエストトランザクションを識別するために用いられる。一実施例によると、開始トランザクションURLを含むブラウザリクエストを受けると、トランザクションマネージャはグローバルに一意のトランザクションIDを作成する。このグローバルに一意のトランザクションIDは送信ブラウザに戻され、同じ複数リクエストトランザクションと関連した後続のブラウザリクエストのブラウザによって送られる。
【0129】
特定の実施例においては、複数リクエストトランザクションが開始されたブラウザに戻されると、特定の複数リクエストトランザクションに関連づけられるグローバルに一意なトランザクションIDは、ブラウザを実行するクライアントのクッキー情報として蔵置される。後続のブラウザリクエストがブラウザから送られると、ディスパッチャは、後続のリクエストが開始トランザクションURLを含むか否かを判定する。このリクエストが開始トランザクションURLを含まなければ、ディスパッチャは、HTTPプロトコル標準を用いて送信ブラウザのクッキー情報を読出すことによってブラウザリクエストに関連づけられる、グローバルに一意のトランザクションIDを獲得する。
【0130】
たとえば、ブラウザ202がトランザクションに関連づけられる第1のブラウザリクエストおよび開始トランザクションURLを送信すると、トランザクションマネージャ606は一意のブラウザ識別子を作成し、それをディスパッチャ214に送る。ディスパッチャ214は次いで、グローバルに一意のトランザクションIDをブラウザ202におけるクッキー情報として蔵置する。ブラウザ202が同じトランザクションと関連づけられている第2のブラウザリクエストを送信すると、ディスパッチャ214はブラウザ202のクッキー情報に含まれるグローバルに一意のトランザクションIDを獲得する。
【0131】
グローバルに一意のトランザクションIDを用いて、ブラウザリクエストを最終的に処理するデータベースサーバは、第1のブラウザリクエストおよび第2のブラウザリクエストの両方が同じ複数リクエストトランザクションに関連づけられていると判定することができる。特定の実施例においては、特定のブラウザが、一度に1以上のトランザクションを実行することができるので、その特定のトランザクションのカートリッジ名はグローバルに一意のトランザクションIDの各々内に含まれ、グローバルに一意のトランザクションIDが対応している特定のトランザクションの識別を助けるために用いられる。
【0132】
特定の状況においては、特定のブラウザでクッキー情報が使用できない場合もある。たとえば、特定のブラウザはクッキーの使用をサポートしない場合もあり、または特定のユーザがブラウザのクッキー情報へのアクセスを拒絶すると選択する場合もある。したがって、特定の実施例では、トランザクション識別子はブラウザに戻されたメッセージ内に埋込まれ、後続のブラウザリクエストにおいてブラウザによって送信される。これは、ブラウザ202に戻されるHTMLページのハイパーリンクと関連づけられているURLに注釈をつけることにより、達成できる。ブラウザリクエストURLの一部として送信されたグローバルに一意のトランザクションIDに基づいて、ブラウザリクエスト中で特定されたオペレーションを最終的に実行するデータベースサーバは、グローバルに一意のトランザクションIDを用いて特定のブラウザリクエストの各々が所属している複数リクエストトランザクションを識別することができる。
【0133】
トランザクションカートリッジのインスタンス生成
各ブラウザリクエストは、HTMLページのハイパテキストリンクを選択するブラウザのユーザに応答して送信ブラウザから送信されるURL情報を含む。URL情報は、URI(Uniform Resource Indicator)部分とヘッダ部分とを含む。URI部分はトランザクションのステート情報およびカートリッジ名を含む。トランザクションのステート情報は、複数リクエストトランザクションの特定のステートを識別するのに用いられる。カートリッジ名は、カートリッジのタイプを識別するのに用いられ、カートリッジ実行エンジンがブラウザリクエストに関連づけられているメタデータを識別できるようにする。
【0134】
ヘッダ部分は、特定のトランザクションリクエストに関連づけられている複数リクエストトランザクションを識別するためにデータベースサーバによって用いられる、グローバルに一意のトランザクションIDを蔵置するために用いられる。
【0135】
リスナはブラウザリクエストを受けると、そのブラウザリクエストをディスパッチャに伝達する。ディスパッチャはその後、仮想パスマネージャと通信してブラウザリクエストに関連づけられるカートリッジのタイプを決定する。一実施例では、ディスパッチャはURI内に含まれる情報を仮想パスマネージャに送る。URI内の情報を用いて、仮想パスマネージャはコンフィギュレーションプロバイダと通信し、ブラウザリクエストと関連づけられているカートリッジのタイプを決定する。
【0136】
一旦カートリッジのタイプが識別されると、仮想パスマネージャはカートリッジのタイプを識別するデータをディスパッチャに戻す。ディスパッチャはその後、特定のディスパッチャと前に関連づけられていたカートリッジインスタンスに対するポインタを含むカートリッジインスタンスポインタリストをサーチする。ディスパッチャがブラウザリクエストと関連づけられているカートリッジタイプのものであるカートリッジインスタンスに対するポインタの場所を突き止めると、ディスパッチャはこのポインタを用いて変更されたブラウザリクエストをカートリッジインスタンスに送信する。
【0137】
ディスパッチャがブラウザリクエストに関連づけられているカートリッジインスタンスのタイプに対するポインタの場所を突き止めなければ、ディスパッチャはリソースマネージャと通信してそのタイプのカートリッジインスタンスを獲得する。カートリッジインスタンスを獲得する際に、ディスパッチャは仮想パスマネージャによって前に識別されたカートリッジのタイプを含むリソースマネージャにメッセージを送る。
【0138】
ディスパッチャメッセージを受取ると、リソースマネージャはこのリクエストタイプのカートリッジインスタンスが使用できるか否かをカートリッジインスタンスポインタテーブルをサーチすることによって判定する。このリクエストタイプのカートリッジインスタンスポインタがカートリッジインスタンスポインタテーブル中で見付けられると、リソースマネージャは使用可能なカートリッジインスタンスに対するポインタをディスパッチャに送って戻す。
【0139】
しかしながら、このリクエストタイプのカートリッジインスタンスが使用できない場合、リソースマネージャはこのリクエストタイプのカートリッジのインスタンスが生成されるようにする。本発明の一実施例では、リソースマネージャは、特定のカートリッジファクトリプロセスをリクエストしてリクエストタイプのカートリッジインスタンスを作成することにより、そのリクエストタイプのカートリッジインスタンスを生成する。カートリッジファクトリプロセスは複数の機器にわたって位置づけられ得る。カートリッジインスタンスを生成するために特定のカートリッジファクトリプロセスがリクエストされると、それはカートリッジファクトリが現在実行されているものと同じマシン上でカートリッジインスタンスを生成する。したがって、リソースマネージャはリソースマネージャがカートリッジインスタンスの生成のために選択する特定のマシンに基づいて、どのカートリッジファクトリを用いるかを選択する。
【0140】
カートリッジインスタンスを生成するためのリクエストを受取ると、カートリッジファクトリプロセスはカートリッジ実行エンジンのインスタンスを生成する。一旦カートリッジ実行エンジンが生成されると、カートリッジ実行エンジンはリクエストされたカートリッジのタイプに関連づけられているトランザクション情報を(存在すれば)獲得する。たとえば、リクエストされたカートリッジのタイプが上記のTX1に記載されるようなSTOREFRONTタイプであれば、カートリッジ実行エンジンはTX1と関連づけられたメタデータ情報を獲得し、蔵置する。このメタデータ情報はトランザクションを処理するためにカートリッジのインスタンスによって用いられる。
【0141】
メタデータ情報の獲得後、カートリッジ実行エンジンはリクエストされたカートリッジタイプのカートリッジを生成する。作成されたカートリッジのインスタンスはカートリッジ実行エンジンと動的にリンクする。カートリッジ実行エンジンは次いで、トランザクションマネージャをインスタンス生成する。トランザクションマネージャのインスタンスは、カートリッジおよびカートリッジ実行エンジンと動的にリンクされ、カートリッジインスタンスを形成する。
【0142】
一旦カートリッジインスタンスが形成されると、トランザクションマネージャはカートリッジ実行エンジンによって前に蔵置されていたメタデータ情報を用いて、メタデータのリソースリスト中で特定されたデータベースとのコネクションを開く。これらのコネクションはトランザクションマネージャによって保持され、後に関連のカートリッジにデータベースのハンドルを与えて、複数リクエストのトランザクションの処理を制御するために用いられる。たとえば、リクエストされたカートリッジのタイプがSTOREFRONTタイプであれば、リソースリストはSEARSおよびBANK1データベースと関連づけられる。リソースリスト情報を用いて、トランザクションマネージャは、SEARSおよびBANK1データベースと関連づけられるデータベースサーバとのコネクションをそれぞれ確立することによって、SEARSデータベースおよび/BANK1データベースとのコネクションを開く。これらのコネクションはトランザクションマネージャによって保持され、TX1タイプのトランザクションを処理するために用いられる。
【0143】
トランザクションマネージャが(適切なデータベースと関連するデータベースサーバを通じて)適切なデータベースとそのコネクションを確立した後、カートリッジ実行エンジンは、カートリッジインスタンスに対するポインタをカートリッジファクトリに戻すことにより、カートリッジインスタンスが生成されたことをカートリッジファクトリに知らせる。カートリッジインスタンスポインタを受取ると、カートリッジファクトリはこのカートリッジインスタンスポインタをリソースマネージャへ送る。
【0144】
リソースマネージャはその後、カートリッジインスタンスポインタをそのカートリッジインスタンスポインタテーブルに登録する。リソースマネージャは次いで、カートリッジインスタンスポインタをディスパッチャに送る。リソースマネージャからカートリッジインスタンスポインタを受取ると、ディスパッチャはカートリッジインスタンスポインタをそれに関連するカートリッジインスタンスポインタリストに蔵置する。ディスパッチャはその後、カートリッジインスタンスポインタを用いて、変更されたブラウザリクエストをカートリッジインスタンスに送る。
【0145】
変更されたブラウザリクエストの作成
カートリッジインスタンスポインタを獲得すると、ディスパッチャはブラウザリクエストに関連する情報を用いて変更されたブラウザリクエストを作成する。この変更されたブラウザリクエストは、URI、ヘッダ情報、カートリッジのタイプ、およびメッセージをディスパッチャに戻せるようにするディスパッチャポインタを含む。たとえば、上述のTX1タイプのトランザクションに対する変更されたリクエストは、次の情報を含み得る。
【0146】
URI = /storefront/open_session
header = NULL
cartridge name =[STOREFRONT]
dispatcher pointer = address XXXXX
この例では、URIは開始トランザクションURI(複数リクエストトランザクションの開始を識別するためにカートリッジ実行エンジンによって用いられるURI)である。このURIは開始トランザクションURIであるので、グローバルに一意のトランザクションIDが、複数リクエストトランザクションと関連づけられているわけではない。よって、トランザクションIDを含む筈であるヘッダはNULLにセットされる。進行中の(すなわちブラウザリクエストが/storefront/open sessionのURIを含まないとき)、またそこでグローバルに一意のトランザクションIDを蔵置するためにクッキーを用いる複数リクエストのトランザクションに関して、ヘッダは一意のトランザクションIDを含むであろう。この一意のトランザクションIDにより、データベースサーバはトランザクションリクエストを進行中の複数リクエストトランザクションと関連づけることができるようになる。
【0147】
カートリッジ名はカートリッジのタイプを特定し、特定のブラウザリクエストと関連づけられたトランザクションのタイプについての情報を含むメタデータを特定するためにカートリッジ実行エンジンによって用いられる。この例では、STOREFRONTのカートリッジ名はTX1に関連づけられたメタデータがブラウザリクエストに関連づけられているとして識別する。
【0148】
変更されたブラウザリクエストの作成後、ディスパッチャは前に獲得されたカートリッジのインスタンスポインタを用いて変更されたブラウザリクエストをカートリッジのインスタンスに送る。カートリッジのインスタンスが変更されたブラウザリクエストを受取ると、カートリッジのインスタンスはカートリッジタイプの情報を用いてブラウザリクエストと関連づけられているメタデータを識別する。メタデータの識別後、カートリッジ実行エンジンはURI情報を用いてブラウザリクエストに関連づけられたトランザクションのステートを判定する。
【0149】
たとえば、ブラウザリクエストが「/storefront/open session」というURIおよびSTOREFRONTというカートリッジタイプを含むと仮定する。
【0150】
カートリッジタイプSTOREFRONTと関連づけられたメタデータ(すなわち上記のTX1に記載されるメタデータ)を見ることにより、カートリッジ実行エンジン228は/storefront/open_sessionというURIが「開始」トランザクションステートに対応することを決定する。この同じ機構を用いて、カートリッジ実行エンジン228は、/storefront/commit_sessionというURIを含むブラウザリクエストが「コミット」トランザクションステートに対応し、また/storefront/rollback_sessionというURIを含むブラウザリクエストが「ロールバック」トランザクションステートに対応するということを決定し得る。
【0151】
URIが特定のステートを含まない(すなわちURIが/storefrontのみから成る)場合、カートリッジ実行エンジン228は、ブラウザリクエストがコミットまたはロールバックのいずれの準備もできていない進行中の複数リクエストトランザクションと関連づけられていると想定する。
【0152】
カートリッジ実行エンジンが「開始」トランザクションと関連づけられていない変更されたブラウザリクエストを受取ると、カートリッジ実行エンジンはヘッダをチェックしてそれがグローバルに一意のトランザクションIDを特定しているか否かを判定する。ヘッダがグローバルに一意のトランザクションIDを特定していれば、グローバルに一意のトランザクションIDを蔵置するためにクッキー情報が用いられた。ヘッダがグローバルに一意のトランザクションIDを特定していなければ、カートリッジ実行エンジンはURIをサーチし、ブラウザリクエストと関連づけられるグローバルに一意のトランザクションIDを識別する。カートリッジ実行エンジンがグローバルに一意のトランザクションIDを見出すと、カートリッジ実行エンジンはトランザクションマネージャに送られるトランザクション制御メッセージ中にトランザクションIDを含ませる。トランザクションマネージャは関連するデータベースサーバとの通信においてグローバルに一意のトランザクションIDを使用し、複数リクエストトランザクションが作業のアトミック単位としてコミットされるかまたはロールバックされるかのいずれかになるようにする。
【0153】
トランザクションの処理
図7Aから7Iは、本発明の一実施例に従ってステートレスな環境において複数リクエストトランザクションを処理するための方法を表わすフロー図である。
【0154】
ステップ702で、カートリッジ230に向けられた変更されたブラウザリクエストはカートリッジ実行エンジン228によって代行受信される。説明の目的で、変更されたブラウザリクエストはディスパッチャ214によって送られたと仮定され、変更されたブラウザリクエストが上記のトランザクションTX1と関連づけられていると仮定する。
【0155】
ステップ704で、カートリッジ実行エンジン228は変更されたブラウザリクエストがトランザクションと関連づけられているか否かを判定する。変更されたブラウザリクエストがトランザクションと関連づけられていない場合、ステップ706で、カートリッジ実行エンジン228が変更されたブラウザリクエストをカートリッジ230に送り、カートリッジ230が変更されたブラウザリクエストと関連づけられるリクエストされた非トランザクション機能を実行するようにする。カートリッジはリクエストされた非トランザクション機能を一旦実行すると、カートリッジ実行エンジン228が次の変更されたブラウザリクエストを代行受信できるように、制御はステップ702へ戻る。
【0156】
そうでなく、変更されたブラウザリクエストがトランザクションと関連づけられている場合、ステップ708で、カートリッジ実行エンジン228はまず、変更されたブラウザリクエストが開始トランザクションURIと関連づけられているか否かを判定することにより、トランザクションのステートを決定する。変更されたブラウザリクエストが開始トランザクションURIと関連づけられているか否かを判定する際に、カートリッジ実行エンジン228は、カートリッジ名を用いて変更されたブラウザリクエスト中で特定されたトランザクションタイプのトランザクションの属性を含む、前に蔵置されていたメタデータを特定する。前に蔵置されたメタデータを用いて、カートリッジ実行エンジン228は変更されたブラウザリクエストが開始トランザクションURIと関連づけられているか否かを判定する。
【0157】
たとえば、変更されたブラウザリクエストが、STOREFRONTというカートリッジ名および/storefront/open_sessionというURIを含んでいたと仮定する。STOREFRONTというカートリッジ名を用いて、カートリッジ実行エンジン228は、変更されたブラウザリクエストがトランザクションTX1についてのメタデータと関連づけられていると判定する。このメタデータを用いて、カートリッジ実行エンジン228は、/storefront/open_sessionというURIが開始トランザクションと関連づけられていることを決定する。
【0158】
カートリッジ実行エンジン228が、変更されたブラウザリクエストが開始トランザクションと関連づけられていないと判定すると、制御はステップ744に進む。
【0159】
カートリッジ実行エンジン228が、変更されたブラウザリクエストが開始トランザクションと関連づけられていると判定すれば、ステップ712で、カートリッジ実行エンジン228はトランザクション制御メッセージ中に開始トランザクション識別子(tx_begin)を含ませる。カートリッジ実行エンジン228はその後、トランザクション制御メッセージをトランザクションマネージャ606に送る。
【0160】
ステップ714で、開始トランザクション識別子を受取ると、トランザクションマネージャ606はこの複数リクエストトランザクションに関連づけられている後続のブラウザリクエストを識別するために用いられる、グローバルに一意のトランザクションIDを作成する。本発明の特定の実施例では、トランザクションIDはブラウザIPアドレス、トランザクション名および特定のタイムスタンプ値を用いて形成される。
【0161】
ステップ716で、カートリッジ実行エンジン228は、変更されたブラウザリクエスト中に含まれる情報から形成されたオペレーションメッセージをカートリッジ230に送る。このオペレーションメッセージはまた、変更されたブラウザリクエストを送ったディスパッチャ(ディスパッチャ214)を特定するディスパッチャポインタも含む。このポインタにより、カートリッジ230はディスパッチャに再び情報を書くことができるようになる。ステップ718で、オペレーションメッセージを受取ると、カートリッジ230はトランザクションマネージャ606にメッセージを送り、トランザクションと関連づけられているデータベースにアクセスするためのハンドルをリクエストする。
【0162】
ステップ720で、トランザクションマネージャ606は、カートリッジ230がトランザクションリクエストを処理できるようにするために、ハンドルを適切なデータベースサーバに戻す。たとえば、データベース610がSEARSデータベースと関連づけられ、データベース614がBANK1データベースと関連づけられていると仮定すれば、トランザクションマネージャ606はデータベースサーバ608および612にそれぞれハンドルを戻すであろう。
【0163】
ステップ722で、カートリッジ230はトランザクションマネージャ606から戻されたハンドルを用いてカートリッジ実行エンジン228によって送られたオペレーションメッセージ中で特定されたオペレーションを実行する。
【0164】
ステップ724で、カートリッジ230は、送信ブラウザがクッキー情報をブラウザに関連づけるか否かを判定する。ブラウザがブラウザにクッキー情報を関連づけさせれば、ステップ726で、カートリッジ230は、このトランザクションリクエストの実行に応答して生成されたHTMLページのハイパーリンクがグローバルに一意のトランザクションIDを含むようにする。HTMLページのハイパーリンクに注釈をつけることにより、後続のブラウザリクエストに含まれるURIはグローバルに一意のトランザクションIDを含むであろう。
【0165】
ステップ728で、カートリッジ230はディスパッチャポインタを用いて、トランザクションリクエストの実行に応答して生成されたHTMLページをディスパッチャ214に戻す。カートリッジ230はその後、カートリッジ実行エンジン228に、トランザクションリクエストの実行が完了したことを知らせる。
【0166】
ステップ730で、カートリッジ実行エンジン228はトランザクションマネージャ606にメッセージを送り、トランザクションをサスペンドするようにリクエストする。ステップ732で、トランザクションマネージャ606はサスペンドリクエストをデータベースサーバ608および612に送り、それらにトランザクションの実行をサスペンドさせる。サスペンドリクエストはグローバルに一意のトランザクションIDを含むので、データベースサーバ608および612はどのトランザクションをサスペンドすべきかを知る。データベースサーバ608および612にサスペンドリクエストを送ることにより、他のブラウザもデータベース610および614に関連づけられているトランザクションを実行できるようになる。
【0167】
ステップ734で、トランザクションマネージャ606はカートリッジ実行エンジン228にグローバルに一意のトランザクションIDを送る。ステップ736で、カートリッジ実行エンジン228は送信ブラウザがクッキー情報をブラウザに関連づけているか否かを判定する。ブラウザがクッキー情報をブラウザに関連づけていない場合、ステップ738で、ディスパッチャ214は変更されたブラウザリクエストの処理が完了したことを知らされる。その後、制御はステップ702に戻り、別の変更されたブラウザリクエストを代行受信する。
【0168】
ブラウザが、クッキー情報をそのブラウザに関連づけると、ステップ740で、カートリッジ実行エンジン228はグローバルに一意のトランザクションIDを用いて、送信ブラウザと関連づけられるようにクッキー情報を作成する。
【0169】
ステップ742で、カートリッジ実行エンジン228はクッキー情報をディスパッチャ214に送るので、それは送信ブラウザに伝送され、変更されたブラウザリクエストの処理が完了したことをディスパッチャ214に知らせることができる。その後、制御はステップ702に戻り、別の変更されたブラウザリクエストを代行受信する.
ステップ744で、カートリッジ実行エンジン228は、変更されたブラウザリクエストがコミットトランザクションURLと関連づけられているか否かを判定する。変更されたブラウザリクエストがコミットトランザクションURIと関連づけられているか否かを判定する際に、カートリッジ実行エンジン228はカートリッジ名を用いて、変更されたブラウザリクエストに関連するトランザクションのタイプについて前に蔵置されたメタデータを特定する。前に蔵置されたメタデータを用いて、カートリッジ実行エンジン228は、変更されたブラウザリクエストがコミットトランザクションURIと関連づけられているか否かを判定する。
【0170】
たとえば、変更されたブラウザリクエストがSTOREFRONTというカートリッジ名および/storefront/commit_sessionというURIを含むと仮定する。このSTOREFRONTというカートリッジ名を用いて、カートリッジ実行エンジン228は変更されたブラウザリクエストがトランザクションTX1についてのメタデータと関連づけられていると判定する。このメタデータを用いて、カートリッジ実行エンジン228は、/storefront/commit_sessionというURIがコミットトランザクションと関連づけられていると判定する。
【0171】
カートリッジ実行エンジン228が、変更されたブラウザリクエストがコミットトランザクションと関連づけられていないと判定した場合、制御はステップ774へと進む。
【0172】
カートリッジ実行エンジン228が、変更されたブラウザリクエストがコミットトランザクションに関連づけられていると判定した場合、ステップ746で、カートリッジ実行エンジン228は変更されたブラウザリクエストのヘッダ部分がクッキー情報を含むか否かを判定する。カートリッジ実行エンジン228が、変更されたブラウザリクエストのヘッダ部分がクッキー情報を含むと判定すれば、ステップ748でカートリッジ実行エンジン228はそのクッキー情報からグローバルに一意のトランザクションIDを抽出する。そして制御はステップ752へと進む。
【0173】
カートリッジ実行エンジン228が、変更されたブラウザリクエストのヘッダ部分がクッキー情報を含まないと判定した場合、ステップ750でカートリッジ実行エンジン228は注釈付きURLからグローバルに一意のトランザクションIDを抽出する。
【0174】
ステップ752で、カートリッジ実行エンジン228は再開トランザクション識別子(tx_resume)をトランザクション制御メッセージ中にパックする。カートリッジ実行エンジン228はその後トランザクション制御メッセージをトランザクションマネージャ606に送る。
【0175】
ステップ754で、再開トランザクション識別子を受取ると、トランザクションマネージャ606は再開リクエストをデータベースサーバ608および612に送り、それらにトランザクションの実行を再開させる。再開リクエストは、データベースサーバ608および612が現在のトランザクションリクエストと関連づけられている複数リクエストトランザクションを識別できるようにするグローバルに一意のトランザクションIDを含む。
【0176】
ステップ756で、カートリッジ実行エンジン228は、変更されたブラウザリクエストに含まれるトランザクション情報に基づくオペレーションメッセージをカートリッジ230に送る。このオペレーションメッセージはまた、変更されたブラウザリクエストを送ったディスパッチャ(ディスパッチャ214)を特定し、かつカートリッジ230がディスパッチャに情報を再び書き込むことができるようにする、ディスパッチャポインタも含む。ステップ758で、オペレーションメッセージを受取ると、カートリッジ230は、トランザクションと関連づけられるデータベースにアクセスするためのハンドルをリクエストするメッセージをトランザクションマネージャ606に送る。
【0177】
ステップ760で、トランザクションマネージャ606はハンドルを適切なデータベースサーバに戻し、カートリッジ230がトランザクションリクエストを処理できるようにする。たとえば、データベース610がSEARSデータベースに関連づけられ、データベース614がBANK1データベースに関連づけられると仮定すれば、トランザクションマネージャ606はデータベースサーバ608および612にそれぞれハンドルを戻すであろう。
【0178】
ステップ762で、カートリッジ230はトランザクションマネージャ606から戻されたハンドルを用いて、カートリッジ実行エンジン228によって送られたオペレーションメッセージにより特定されたオペレーションを実行する。
【0179】
ステップ764で、カートリッジ230は、送信ブラウザがクッキー情報をブラウザに関連づけるのを許容するか否かを判定する。ブラウザがクッキー情報をブラウザに関連づけさせない場合、ステップ766で、カートリッジ230は、トランザクションと関連づけられたHTMLページすべての注釈付きハイパーリンクからグローバルに一意のトランザクションIDを取除く。HTMLページのハイパーリンクからトランザクションIDの注釈を取除くことにより、HTMLページからのハイパーリンクの選択に応答して発行される後続のブラウザリクエストはグローバルに一意のトランザクションIDを含まないことになり、したがって、この複数リクエストトランザクションと誤って関連づけられることはないであろう。
【0180】
ステップ768で、カートリッジ230はディスパッチャポインタを用いて、ディスパッチャ214へのブラウザリクエストにおいて特定されたオペレーションの実行に応答して生成されたHTMLページを戻し、カートリッジ実行エンジン228にトランザクションリクエストの実行が完了したことを知らせる。
【0181】
ステップ770で、カートリッジ実行エンジン228はトランザクション制御メッセージをトランザクションマネージャ606に送り、それにトランザクションをコミットするようにリクエストする。ステップ771で、トランザクションマネージャ606はコミットリクエストをデータベースサーバ608および612に送り、複数リクエストトランザクションに所属するさまざまなブラウザリクエストに応答してなされたすべての変更を、作業のアトミック単位としてコミットさせる。このコミットリクエストは、データベースサーバ608および612が関連の複数リクエストトランザクションを識別できるようにするグローバルに一意のトランザクションIDを含む。
【0182】
ステップ772で、カートリッジ実行エンジン228はディスパッチャ214に、変更されたブラウザリクエストの処理が完了したことを知らせ、またディスパッチャ214に、コミットされた複数リクエストトランザクションに関連づけられたクッキー情報を送信ブラウザから取除くように知らせる。送信ブラウザに関連づけられたクッキー情報からトランザクションIDを取除くことにより、後続のブラウザリクエストはグローバルに一意のトランザクションIDを含まないことになり、したがって、コミットされた複数リクエストトランザクションと誤って関連づけられることもないであろう。この後制御はステップ702へ戻り、別の変更されたブラウザリクエストを代行受信する。
【0183】
ステップ774で、カートリッジ実行エンジン228は変更されたブラウザリクエストがロールバックトランザクションURIと関連づけられているか否かを判定する。変更されたブラウザリクエストがロールバックトランザクションURIと関連づけられているか否かを判定する際に、カートリッジ実行エンジン228は、カートリッジ名を用いて、変更されたブラウザリクエスト中で示されたトランザクションのタイプに対応する、前に蔵置されたメタデータを識別する。前に蔵置されたメタデータを用いて、カートリッジ実行エンジン228は変更されたブラウザリクエストがロールバックトランザクションURIを含むか否かを判定する。
【0184】
たとえば、変更されたブラウザリクエストはSTOREFRONTというカートリッジ名、および/storefront/rollback_sessionというURIを含むと仮定される。STOREFRONTというカートリッジ名を用いて、カートリッジ実行エンジン228は、変更されたブラウザリクエストがトランザクションTX1についてのメタデータに関連づけられていると判定する。このメタデータを用いて、カートリッジ実行エンジン228は/storefront/rollback_sessionというURIがロールバックトランザクションに関連づけられていると判定する。
【0185】
カートリッジ実行エンジン228が、変更されたブラウザリクエストがロールバックトランザクションと関連づけられていないと判定すれば、制御はステップ804に進む。
【0186】
カートリッジ実行エンジン228が、変更されたブラウザリクエストがロールバックトランザクションと関連づけられていると判定すれば、ステップ776で、カートリッジ実行エンジン228は変更されたブラウザリクエストのヘッダ部分がクッキー情報を含むか否かを判定する。変更されたブラウザリクエストのヘッダ部分がクッキー情報を含むとカートリッジ実行エンジン228が判定すれば、ステップ778で、カートリッジ実行エンジン228はそのクッキー情報からグローバルに一意のトランザクションIDを抽出する。その後制御は782へ進む。
【0187】
変更されたブラウザリクエストのヘッダ部分がクッキー情報を含まないとカートリッジ実行エンジン228が判定すれば、ステップ780で、カートリッジ実行エンジン228は注釈付きURIからグローバルに一意のトランザクションIDを抽出する。
【0188】
ステップ782で、カートリッジ実行エンジン228は、再開トランザクション識別子(tx_resume)をトランザクション制御メッセージに組込む。カートリッジ実行エンジン228はその後、トランザクション制御メッセージをトランザクションマネージャ606に送る。
【0189】
ステップ784で、再開トランザクション識別子を受取ると、トランザクションマネージャ606は再開リクエストをデータベースサーバ608および612に送り、それらにトランザクションの実行を再開させる。この再開リクエストは、データベースサーバ608および612が現在のトランザクションリクエストと関連づけられている複数リクエストトランザクションを識別できるようにするグローバルに一意のトランザクションIDを含む。
【0190】
ステップ786で、カートリッジ実行エンジン228は、変更されたブラウザリクエストに含まれるトランザクション情報に基づくオペレーションメッセージをカートリッジ230に送る。このオペレーションメッセージはまた、変更されたブラウザリクエストを送ったディスパッチャ(ディスパッチャ214)を特定してカートリッジ230が情報を再びディスパッチャに書込めるようにする、ディスパッチャポインタも含む。ステップ788で、オペレーションメッセージを受取ると、カートリッジ230はメッセージをトランザクションマネージャ606に送り、特定のタイプのトランザクションにおいて用いられるデータベースにアクセスするためのハンドルをリクエストする。
【0191】
ステップ790で、トランザクションマネージャ606は適切なデータベースサーバにハンドルを戻し、カートリッジ230がトランザクションリクエストを処理できるようにする。たとえば、データベース610はSEARSデータベースと関連づけられ、データベース614はBANK1データベースと関連づけられていると仮定すれば、トランザクションマネージャ606はそれぞれデータベースサーバ608および612にハンドルを戻すであろう。
【0192】
ステップ792で、カートリッジ230はトランザクションマネージャ606から戻されたハンドルを用いて、カートリッジ実行エンジン228によって送られたオペレーションメッセージに関連づけられているトランザクション情報を実行する。
【0193】
ステップ794で、カートリッジ230は、送信ブラウザがクッキー情報をブラウザに関連づけるのを許容するか否かを判定する。ブラウザがクッキー情報をブラウザに関連づけさせない場合、ステップ796で、カートリッジ230は、HTMLページすべての注釈付きハイパーリンクからグローバルに一意のトランザクションIDを取除き、ブラウザに戻す。トランザクションIDの注釈をHTMLページのハイパーリンクから取除くことにより、後続のブラウザリクエストがグローバルに一意のトランザクションIDを含むことはなくなり、したがってこの複数リクエストトランザクションと誤って関連づけられることもないであろう。
【0194】
ステップ798で、カートリッジ230は、ディスパッチャポインタを用いて、トランザクションの実行と関連づけられたHTMLページをディスパッチャ214に戻し、カートリッジ実行エンジン228にトランザクションリクエストの実行が完了したことを知らせる。
【0195】
ステップ800で、カートリッジ実行エンジン228はトランザクション制御メッセージをトランザクションマネージャ606に送り、それにトランザクションのロールバックをリクエストする。ステップ801で、トランザクションマネージャ606はロールバックリクエストをデータベースサーバ608および612に送り、複数リクエストトランザクションに所属するブラウザリクエストに応答してなされたすべての変更を、作業のアトミック単位としてロールバックさせる。ロールバックリクエストは、データベースサーバ608および612が正しい複数リクエストトランザクションを特定しかつロールバックできるようにする、グローバルに一意のトランザクションIDを含む。
【0196】
ステップ802で、カートリッジ実行エンジン228はディスパッチャ214に、変更されたブラウザリクエストの処理が完了したことを知らせ、またディスパッチャ214にロールバック複数リクエストトランザクションに関連づけられるクッキー情報を送信ブラウザから取除くように知らせる。トランザクションIDを送信ブラウザに関連づけられるクッキー情報から取除くことにより、後続のブラウザリクエストはグローバルに一意のトランザクションIDを含まなくなり、したがってロールバックされた複数リクエストトランザクションと誤って関連づけられることもないであろう。この後、制御はステップ702へ戻り、別の変更されたブラウザリクエストを代行受信する。
【0197】
ステップ804で、カートリッジ実行エンジン228は、変更されたブラウザリクエストのヘッダ部分がクッキー情報を含むか否かを判定する。変更されたブラウザリクエストのヘッダ部分がクッキー情報を含むとカートリッジ実行エンジン228が判定した場合、ステップ806でカートリッジ実行エンジン228はクッキー情報からグローバルに一意のトランザクションIDを抽出する。その後、制御は810へ進む。
【0198】
変更されたブラウザリクエストがクッキー情報を含まないとカートリッジ実行エンジン228が判定すれば、ステップ808で、カートリッジ実行エンジン228は注釈付きURIからグローバルに一意のトランザクションIDを抽出する。
【0199】
ステップ810で、カートリッジ実行エンジン228がトランザクション制御メッセージに再開トランザクション識別子(tx_resume)をパックする。カートリッジ実行エンジン228はその後、トランザクション制御メッセージをトランザクションマネージャ606に送る。
【0200】
ステップ812で、再開トランザクション識別子を受取ると、トランザクションマネージャ606は再開リクエストをデータベースサーバ608および612に送り、それらにトランザクションの実行を再開させる。この再開リクエストは、データベースサーバ608および612が現在のトランザクションリクエストと関連づけられている複数リクエストトランザクションを特定できるようにする、グローバルに一意のトランザクションIDを含む。
【0201】
ステップ814で、カートリッジ実行エンジン228は、変更されたブラウザリクエストに含まれるトランザクション情報に基づくオペレーションメッセージをカートリッジ230に送る。オペレーションメッセージはまた、変更されたブラウザリクエストに送られたディスパッチャ(ディスパッチャ214)を識別してカートリッジ230が再びディスパッチャに情報を書込めるようにするディスパッチャポインタも含む。ステップ816で、オペレーションメッセージを受取ると、カートリッジ230はメッセージをトランザクションマネージャ606に送り、トランザクションに関連づけられるデータベースへのアクセスのためのハンドルをリクエストする。
【0202】
ステップ818で、トランザクションマネージャ606はハンドルを適切なデータベースサーバに戻し、カートリッジ230がトランザクションリクエストを処理できるようにする。たとえば、データベース610がSEARSデータベースと関連づけられ、データベース614がBANK1データベースと関連づけられていると仮定すると、トランザクションマネージャ606はハンドルをそれぞれデータベースサーバ608および612に戻すであろう。
【0203】
ステップ820で、カートリッジ230はトランザクションマネージャ606から戻されたハンドルを用いて、カートリッジ実行エンジン228によって送られたオペレーションメッセージ中で特定されたオペレーションを実行する。
【0204】
ステップ822で、カートリッジ230は、送信ブラウザがクッキー情報をブラウザと関連づけるのを許容するか否かを判定する。ブラウザがクッキー情報をブラウザと関連づけさせなければ、ステップ824で、カートリッジ230は、オペレーションの実行に応答して生成されるHTMLページのハイパーリンクに注釈をつけてグローバルに一意のトランザクションIDを含むようにする。HTMLページのハイパーリンクに注釈をつけることにより、HTMLページにおけるリンクの選択に応答して発行される後続のブラウザリクエストのURIは、グローバルに一意のトランザクションIDを含むであろう。
【0205】
ステップ826で、カートリッジ230は、ディスパッチャポインタを用いてこのようにして生成されたHTMLページをディスパッチャ214に戻し、カートリッジ実行エンジン228に、トランザクションリクエストの実行が完了したことを知らせる。
【0206】
ステップ828で、カートリッジ実行エンジン228はメッセージをトランザクションマネージャ606に送り、トランザクションをサスペンドするようにリクエストする。ステップ830で、トランザクションマネージャ606はデータベースサーバ608および612にサスペンドリクエストを送り、それらにトランザクションの実行をサスペンドさせる。このサスペンドリクエストは、データベースサーバ608および612が、サスペンドされるべき複数リクエストトランザクションを正確に特定できるようにする、グローバルに一意のトランザクションIDを含む。この後、制御はステップ702へ戻り、別の変更されたブラウザリクエストを代行受信する。
【0207】
トランザクションタイムアウト
本発明の一実施例に従って、タイムアウト値は各トランザクションと関連づけられる。タイムアウト値は、特定された時間アクティブにされていなかった複数リクエストのトランザクションを識別するために用いられる。一実施例では、各データベースサーバは、そのデータベースサーバによってサービスを受けている複数リクエストトランザクションについてのタイムアウト値を維持する。したがって、複数リクエストトランザクションが実行を開始すると常に、関連のデータベースサーバは特定のトランザクションについてのタイムアウト値を初期化する。グローバルに一意のトランザクションIDに関連づけられる再開トランザクションリクエストを受取ると、データベースサーバはグローバルに一意のトランザクションIDに関連づけられる複数リクエストトランザクションについてのタイムアウト値をリセットする。複数リクエストトランザクションがタイムアウトすれば、データベースサーバは複数リクエストトランザクションの一部としてなされたすべての変更を作業のアトミック単位としてロールバックさせる。複数リクエストトランザクションが一旦ロールバックされると、メッセージは関連のブラウザへ送られ、トランザクションのステートを示す。
【0208】
ステートレスなウェブ環境におけるトランザクションの実行
本発明は、ウェブなどのステートレスな環境において複数リクエストトランザクションを実行するための実用的かつ高度にスケーラブルな機構を提供する。本発明に従えば、トランザクションマネージャは全トランザクション処理を調整するために用いられる。好ましくは、トランザクションマネージャは、ステート情報がトランザクションマネージャ自体がステート情報を持続的に維持する必要なく、トランザクションについて維持されるように、処理を調整する。
【0209】
好ましい実施例では、クライアントリクエストの処理は次のとおり実行される。トランザクションマネージャはクライアントからリクエストを受取り、そのリクエストがトランザクションリクエストであれば、データベース管理システム(DBMS)などのトランザクション処理機構でトランザクションを開始する。一旦、トランザクションが開始されると、マネージャは好ましくはそのリクエストをアプリケーションなどの別のエンティティに送り、これが実際にリクエストを処理する。リクエストの処理後、制御はマネージャへ戻り、その時点で、マネージャはトランザクションに関連づけられた1組のステート情報を集める。このステート情報は、クライアントのアイデンティティ、トランザクションのステータス、ならびにトランザクション中で既に明らかになっているものを含み得る。一旦集められると、ステート情報は、クライアントリクエストに対する応答とともに、クライアントに再び送られ、クライアントによって維持される。ステート情報は、「クッキー」の形態でクライアントに送られてもよく、またはクライアントに戻されるURLに組込まれてもよい。そうすることが可能であるのに対して、ステート情報はマネージャまたはリクエストを処理したアプリケーションによって持続的に維持されないことが好ましい。
【0210】
クライアントが同じトランザクションに関する第2のリクエストを出すとき、そのクライアントはマネージャによって前に与えられたステート情報とともに送る。第2のリクエストを受取ると、マネージャはそのリクエストからステート情報を抽出し、それを用いて、DBMSで前に開始されたトランザクションを再開する。トランザクションが一旦再開されると、マネージャはステート情報を含む第2のリクエストを別のエンティティ(同じまたは異なるアプリケーション)に送り、処理する。第2のリクエストの処理後、マネージャはトランザクションに関連づけられたステート情報を更新し、その更新したステート情報を第2のリクエストに対する応答とともにクライアントへ送る。クライアントは将来のリクエストにおいてこの更新されたステート情報を送り、トランザクションを再開するであろう。このプロセスはトランザクションがコミットされるかまたはロールバックされるまで繰返される。
【0211】
本発明はいくつかの重要な利点を提供する。第1に、リクエストを処理するトランザクションマネージャおよびアプリケーションはステートレスのままであることに注目されたい。すなわち、トランザクションマネージャおよびアプリケーションは、トランザクションに対していかなるステート情報も維持する必要がない。その情報はすべてクライアントによって維持される。これは、情報を蔵置するためのオーバーヘッドが全く生じないということを意味する。より重要なことに、クライアントがそれ自体のステート情報を維持するという事実は、クライアントからのいかなるリクエストでも何らかのスレッド、プロセス、またはノードによって処理できるということを意味する。これにより、各クライアントに対して専用のプロセスまたはスレッドを有する必要がなくなるので、スケーラビリティは著しく向上する。
【0212】
別の留意すべき点は、クライアントがステート情報を維持しているとしても、クライアントはトランザクション特有のステート情報を維持していることに気づかないという点である。上述したように、ステート情報はトランザクションマネージャによってクライアントに与えられる。クライアントは単に、それが次のリクエストを出すときにこの情報をトランザクションマネージャに戻す。クライアントは、それがステート情報を維持していることを意識していないし、また意識する必要もない。これは本発明の非常に有利な局面である。なぜなら、このことにより、クライアントに何らかのステート管理論理を課す必要が回避できるからである。これはまた、本発明を適切に実行するために、クライアントに対していかなる変更または追加をする必要もないということを意味する。
【0213】
したがって、本発明は、ステートレスな環境においてトランザクションを実行するための実用的、スケーラブル、かつ効果的な機構を提供する。本発明のこれらおよび他の利点は、本発明をさらに詳細に述べることにより明らかになるであろう。
【0214】
URLSへのステート情報の組込み
本発明は、ウェブなどのステートレスな環境において複数リクエストオペレーション(トランザクションを含むがそれに限定されない)をサポートするための、効果的かつ高度にスケーラブルな機構を提供する。本発明に従って、クライアントリクエストの全処理を調整するために、好ましくはサーバが用いられる。好ましくは、このサーバは、(1)複数リクエストオペレーションと関連づけられるステート情報がリクエストを出すクライアントによって維持され、(2)クライアントがそれらがオペレーション特有のステート情報を維持していることに気づかず、さらに(3)サーバ自体はステート情報を持続的に維持する必要がないのでステートレスのままであるように、この調整機能を実行する。
【0215】
好ましい実施例では、クライアントリクエストの処理は次のように行なわれる。サーバがクライアントからのリクエストを受取り、そのリクエストが複数リクエストオペレーションについてのものであれば、サーバはオペレーションを開始する。オペレーションが一旦開始されると、サーバは、リクエストを処理するために別々のエンティティ(アプリケーションなど)に送るか、またはサーバがそのリクエストをそれ自体で処理するかのいずれかであり得る。リクエストの処理後、サーバはオペレーションに関連づけられる1組のステート情報を集める。このステート情報は、クライアントのアイデンティティ、オペレーションのIDおよびステータス、オペレーションにおいて既に明らかになっているもの、およびオペレーションに関連づけられる他の何らかのコンテキスト情報を含み得る。一旦集められると、ステート情報はURLに組込まれる。このURLは、クライアントリクエストに対する応答とともに、再びクライアントに送られ、クライアントによって維持される。このステート情報は、サーバによって持続的に維持されないことが好ましい。
【0216】
クライアントが同じオペレーションに関する第2のリクエストを出すと、クライアントはステート情報を含むサーバによって前に与えられたURLを送る。第2のリクエストを受取ると、サーバはURLからステート情報を抽出し、それを用いて前に開始されたオペレーションを再開する。このステート情報のおかげで、サーバは前のリクエストが止まったまさにその点でオペレーションを再開することができる。オペレーションが一旦再開されると、サーバはリクエストを処理するか、またはそれを別のエンティティへ送ってから処理させる。第2のリクエストの処理後、サーバはオペレーションに関連づけられるステート情報を更新し、その更新したステート情報を別のURLに組込む。このURLは、第2のリクエストに対する応答とともに、再びクライアントに送られてクライアントによって維持される。クライアントは将来のリクエストの際に、このURLを送ってオペレーションを再開させるであろう。このプロセスはオペレーションが完了するかまたはキャンセルされるかのいずれかまで、繰返される。
【0217】
本発明はいくつかの重要な利点を提供する。まず、サーバがステートレスのままであることに留意されたい。すなわち、サーバはトランザクションに対していかなるステート情報も維持する必要がない。その情報はすべてクライアントによって維持される。これは、情報の蔵置のためのオーバーヘッドが全く生じないということを意味する。より重要なことには、クライアントがそれ自体のステート情報を維持するという事実は、クライアントからのいかなるリクエストも、何らかのスレッド、プロセス、またはノードによって処理できるということを意味する。これにより、各クライアントに対して専用のプロセスまたはスレッドを有する必要がなくなるので、スケーラビリティは著しく向上する。
【0218】
別の留意すべき点は、クライアントがステート情報を維持していても、クライアントはそれがオペレーション特有のステート情報を維持していることを意識していないという点である。上述したように、ステート情報はURLの形式でサーバからクライアントに与えられる。クライアントはそれがサーバからのサービスをリクエストするたびにこのURLを単に送るだけである。クライアントはこのURLを他のすべてのURLと同様に扱う。クライアントは、このURLがステート情報を含んでいることを意識していないし、意識する必要もない。これは本発明の非常に有利な局面である。なぜなら、これによりクライアントに何らかのステート管理論理を課す必要が回避できるからである。これはまた、本発明を適切に実行するためにクライアントに対していかなる変更または追加をなす必要もないということを意味する。
【0219】
したがって、本発明は、ステートレスな環境において複数リクエストのオペレーションをサポートするための実用的、スケーラブル、かつ効果的な機構を提供する。本発明のこれらおよび他の利点は本発明をさらに詳細に述べるにつれて明らかになるであろう。
【0220】
これまで述べてきた明細書では、本発明はその特定の実施例に関して述べられている。しかしながら、当然、本発明のより広い範囲から離れることなく、これに対してさまざまな変更および修正をなすことができる。したがって、明細書および図面は限定的なものではなく例示的なものとしてみなされるべきである。
【図面の簡単な説明】
【図1】 この発明の一実施例が実装され得るコンピュータシステムのブロック図である。
【図2】 この発明の一実施例による分散アプリケーションサーバのブロック図である。
【図3A】 この発明の一実施例によるブラウザリクエストを処理するためのステップを示すフローチャートの一部の図である。
【図3B】 この発明の一実施例によるブラウザリクエストを処理するためのステップを示すフローチャートの別の部分の図である。
【図4】 この発明の一実施例によるディスパッチャが維持する情報を含む表のブロック図である。
【図5】 この発明の一実施例によるリソースマネージャが維持する情報を含む表のブロック図である。
【図6】 本発明の一実施例に従ったトランザクションの処理に対する分配されたアプリケーションのブロック図である。
【図7A】 本発明の一実施例に従ったステートレスな環境における複数リクエストトランザクションの処理に対するステップを表すフロー図の一部である。
【図7B】 本発明の一実施例に従ったステートレスな環境における複数リクエストトランザクションの処理に対するステップを表すフロー図の別の部分である。
【図7C】 本発明の一実施例に従ったステートレスな環境における複数リクエストトランザクションの処理に対するステップを表すフロー図の別の部分である。
【図7D】 本発明の一実施例に従ったステートレスな環境における複数リクエストトランザクションの処理に対するステップを表すフロー図の別の部分である。
【図7E】 本発明の一実施例に従ったステートレスな環境における複数リクエストトランザクションの処理に対するステップを表すフロー図の別の部分である。
【図7F】 本発明の一実施例に従ったステートレスな環境における複数リクエストトランザクションの処理に対するステップを表すフロー図の別の部分である。
【図7G】 本発明の一実施例に従ったステートレスな環境における複数リクエストトランザクションの処理に対するステップを表すフロー図の別の部分である。
【図7H】 本発明の一実施例に従ったステートレスな環境における複数リクエストトランザクションの処理に対するステップを表すフロー図の別の部分である。
【図7I】 本発明の一実施例に従ったステートレスな環境における複数リクエストトランザクションの処理に対するステップを表すフロー図の別の部分である。
Claims (43)
- ステートレスな環境において複数リクエストトランザクションを処理するためにコンピュータシステムで実行される方法であって、前記コンピュータシステムは、1つ以上のコンピュータプロセッサを含み、ブラウザを実行するクライアントが前記コンピュータシステムに接続されており、前記1つ以上のコンピュータプロセッサは、命令を実行することにより、カートリッジ実行エンジンと、カートリッジと、トランザクションマネージャとして機能し、前記複数リクエストトランザクションは、前記ブラウザから送られるメッセージ中で特定されたオペレーションを構成し、前記方法は、
前記カートリッジ実行エンジンが、前記カートリッジに向けられて1つ以上のブラウザから送られたメッセージを代行受信するステップと、
前記カートリッジ実行エンジンが、前記メッセージが前記トランザクションと関連づけられているか否かを判定するステップとを含み、
前記メッセージが前記トランザクションと関連づけられている場合に実行されるステップとして、
前記カートリッジ実行エンジンが前記メッセージに基づくトランザクション制御メッセージを、前記カートリッジとは別に実現されるトランザクションマネージャに送るステップと、
前記カートリッジ実行エンジンが前記メッセージに基づくオペレーションメッセージを前記カートリッジに送るステップと、
前記カートリッジ実行エンジンからの前記オペレーションメッセージに応答して、前記カートリッジが、前記オペレーションが属する複数リクエストトランザクションについてのトランザクションの状態を示す情報を持続的に記憶することなく、前記オペレーションメッセージ中で特定されたオペレーションを実行するステップと、
前記トランザクションマネージャが、前記トランザクションの状態を示す情報を前記カートリッジ実行エンジンから取得するステップと、
前記トランザクションマネージャが、取得した前記トランザクションの状態を示す情報からトランザクションID(Identification)を作成するステップであって、前記トランザクションIDは、前記クライアントに送信されるものであり、かつ、前記クライアントによって記憶されるものである、前記作成するステップと、
前記カートリッジ実行エンジンが、前記複数リクエストトランザクションのうちの他のリクエストと、前記記憶している前記トランザクションIDとを、前記クライアントから受信するステップと、
前記カートリッジ実行エンジンからの前記トランザクション制御メッセージに応答して、前記トランザクションマネージャが、前記複数リクエストトランザクションのオペレーションの全てを、アトミック単位としてコミットまたはロールバックさせるステップとを含む、方法。 - 前記オペレーションメッセージ中で特定された前記オペレーションをコミットさせるステップが、前記トランザクションマネージャが1以上のデータベースサーバにコミットメッセージを送るステップを含み、このコミットメッセージは、前記1以上のデータベースサーバに、前記複数リクエストトランザクションに関連づけられている変更をアトミック単位としてコミットさせる、請求項1に記載の方法。
- 前記オペレーションメッセージ中で特定されたオペレーションをロールバックさせるステップが、前記トランザクションマネージャが1以上のデータベースサーバにロールバックメッセージを送るステップを含み、このロールバックメッセージは、前記1以上のデータベースサーバに前記複数リクエストトランザクションに関連づけられている変更をアトミック単位としてロールバックさせる、請求項1に記載の方法。
- トランザクションに関連づけられているメッセージは、トランザクションIDに関連づけられ、トランザクションIDが特定のメッセージに関連づけられているブラウザを識別する、請求項1に記載の方法。
- トランザクションIDがクッキーとして維持され、クッキーが特定のメッセージに関連づけられているブラウザに維持される、請求項4に記載の方法。
- トランザクションIDが、特定のメッセージに関連づけられているブラウザに表示される1以上のウェブページにおける1以上のタグに関連づけられているURLとして維持される、請求項4に記載の方法。
- 前記カートリッジ実行エンジンが、前記メッセージがトランザクションと関連づけられているか否かを判定するステップは、
特定のメッセージに関連づけられているURLを獲得するステップと、
前記特定のメッセージに関連づけられているURLを用いて、前記特定のメッセージに関連づけられているトランザクションの状態を判定するステップとを含む、請求項1に記載の方法。 - トランザクションIDがタイムアウト期間と関連づけられ、タイムアウト期間の満了が、トランザクションIDと関連づけられているトランザクションは無効とされるべきであることを示す、請求項4に記載の方法。
- ステートレスな環境においてコンピュータシステムが複数リクエストトランザクションを処理するための命令シーケンスを保持するコンピュータ読み取り可能な記録媒体であって、前記コンピュータシステムは、1つ以上のコンピュータプロセッサを含み、前記コンピュータシステムには、ブラウザを実行するクライアントが接続されており、前記複数リクエストトランザクションは前記ブラウザから送られるメッセージ中で特定されたオペレーションを構成し、前記命令シーケンスは命令を含み、前記命令は1つ以上のプロセッサによって実行され、前記命令は、前記1つ以上のコンピュータプロセッサに、
カートリッジ実行エンジンとして、カートリッジに向けられた1つ以上のブラウザから送られたメッセージを代行受信するステップと、
前記カートリッジ実行エンジンとして、前記メッセージがトランザクションと関連づけられているか否かを判定するステップとを実行させ、
前記メッセージがトランザクションと関連づけられていれば、
前記カートリッジ実行エンジンとして、前記メッセージに基づくトランザクション制御メッセージを、前記カートリッジとは別に実現されるトランザクションマネージャに送るステップと、
前記カートリッジ実行エンジンとして、前記メッセージに基づくオペレーションメッセージを前記カートリッジに送るステップと、
前記カートリッジ実行エンジンからの前記オペレーションメッセージに応答して、前記カートリッジとして、オペレーションが属する複数リクエストトランザクションについてのトランザクションの状態を示す情報を持続的に記憶することなく、前記オペレーションメッセージ中で特定されたオペレーションを実行するステップと、
前記トランザクションマネージャとして、前記トランザクションの状態を示す情報を前記カートリッジ実行エンジンから取得するステップと、
前記トランザクションマネージャとして、取得した前記トランザクションの状態を示す情報からトランザクションID(Identification)を作成するステップであって、前記トランザクションIDは、前記クライアントに送信されるものであり、かつ、前記クライアントによって記憶されるものである、前記作成するステップと、
前記カートリッジ実行エンジンとして、前記複数リクエストトランザクションのうちの他のリクエストと、前記記憶している前記トランザクションIDとを、前記クライアントから受信するステップと、
前記カートリッジ実行エンジンからの前記トランザクション制御メッセージに応答して、前記トランザクションマネージャとして、複数リクエストトランザクションのオペレーションの全てを、アトミック単位としてコミットまたはロールバックさせるステップとを実行させる、コンピュータ読み取り可能な記録媒体。 - トランザクションに関連づけられているメッセージがトランザクションIDと関連づけられ、トランザクションIDが特定のメッセージに関連づけられているブラウザを識別する、請求項9に記載のコンピュータ読み取り可能な記録媒体。
- 前記カートリッジ実行エンジンが前記メッセージがトランザクションと関連づけられているか否かを判定するステップが、
特定のメッセージに関連づけられているURLを獲得するステップと、
特定のメッセージに関連づけられているURLを用いて特定のメッセージに関連づけられているトランザクションの状態を判定するステップとを含む、請求項9に記載のコンピュータ読み取り可能な記録媒体。 - ステートレスな環境において複数リクエストトランザクションを処理するためのシステムであって、前記システムは、ブラウザを実行するクライアントに接続されており、複数リクエストトランザクションは、前記ブラウザから送られるメッセージ中で特定されたオペレーションを構成し、前記システムは、
メモリと、
メモリに結合された1以上のプロセッサと、
メモリ内に含まれる1組のコンピュータ命令とを含み、1組のコンピュータ命令は、1以上のプロセッサによって実行されるとき1以上のプロセッサに以下のステップを実行させるコンピュータ命令を含み、前記ステップは、
カートリッジ実行エンジンとして、カートリッジに向けられて1つ以上のブラウザから送られたメッセージを代行受信するステップと、
前記カートリッジ実行エンジンとして、前記メッセージがトランザクションと関連づけられているか否かを判定するステップとを含み、
前記メッセージがトランザクションに関連づけられている場合に実行されるステップとして、
前記カートリッジ実行エンジンとして、前記メッセージに基づくトランザクション制御メッセージを前記カートリッジとは別に実現されるトランザクションマネージャに送るステップと、
前記カートリッジ実行エンジンとして、前記メッセージに基づくオペレーションメッセージを前記カートリッジに送るステップと、
前記カートリッジ実行エンジンからの前記オペレーションメッセージに応答して、前記カートリッジとして、オペレーションが属する複数リクエストトランザクションについてのトランザクションの状態を示す情報を持続的に記憶することなく、前記オペレーションメッセージ中で特定されたオペレーションを実行するステップと、
前記トランザクションマネージャとして、前記トランザクションの状態を示す情報を前記カートリッジ実行エンジンから取得するステップと、
前記トランザクションマネージャとして、取得した前記トランザクションの状態を示す情報からトランザクションID(Identification)を作成するステップであって、前記トランザクションIDは、前記クライアントに送信されるものであり、かつ、前記クライアントによって記憶されるものである、前記作成するステップと、
前記カートリッジ実行エンジンとして、前記複数リクエストトランザクションのうちの他のリクエストと、前記記憶している前記トランザクションIDとを、前記クライアントから受信するステップと、
前記カートリッジ実行エンジンからの前記トランザクション制御メッセージに応答して、前記トランザクションマネージャが複数リクエストトランザクションのオペレーションを、アトミック単位としてコミットまたはロールバックさせるステップとを含む、システム。 - トランザクションに関連づけられているメッセージがトランザクションIDに関連づけられ、トランザクションIDが特定のメッセージに関連づけられているブラウザを識別する、請求項12に記載のシステム。
- 前記カートリッジ実行エンジンが前記メッセージがトランザクションと関連づけられているか否かを判定するステップは、
特定のメッセージに関連づけられているURLを獲得するステップと、
特定のメッセージに関連づけられているURLを用いて、特定のメッセージに関連づけられているトランザクションの状態を判定するステップとを含む、請求項12に記載のシステム。 - 前記カートリッジ実行エンジンがメッセージを代行受信するステップが、前記カートリッジ実行エンジンが開始トランザクションコマンドを含むメッセージを代行受信するステップを含み、
前記カートリッジ実行エンジンが開始トランザクションコマンドを含むメッセージを受信したことに応答して、前記カートリッジ実行エンジンがトランザクション制御メッセージを前記トランザクションマネージャに送り、前記トランザクションマネージャに前記トランザクションを開始させる、請求項1に記載の方法。 - 前記カートリッジ実行エンジンがメッセージを代行受信するステップが、前記カートリッジ実行エンジンがコミットトランザクションコマンドを含むメッセージを代行受信するステップを含み、
前記カートリッジ実行エンジンがコミットトランザクションコマンドを含むメッセージを受信したことに応答して、前記カートリッジ実行エンジンが前記トランザクションマネージャにトランザクション制御メッセージを送り、前記トランザクションマネージャに前記トランザクションをコミットさせる、請求項1に記載の方法。 - 前記カートリッジ実行エンジンがメッセージを代行受信するステップが、前記カートリッジ実行エンジンがロールバックトランザクションコマンドを含むメッセージを代行受信するステップを含み、
前記カートリッジ実行エンジンがロールバックトランザクションコマンドを含むメッセージを受信したことに応答して、前記カートリッジ実行エンジンは前記トランザクションマネージャにトランザクション制御メッセージを送り、前記トランザクションマネージャに前記トランザクションをロールバックさせる、請求項1に記載の方法。 - ブラウザに表示されたウェブページのタグに関連づけられる制御の選択に応答して、前記カートリッジ実行エンジンにおいてURLの形式で前記開始トランザクションコマンドを受信するステップをさらに含む、請求項15に記載の方法。
- ブラウザに表示されるウェブページのタグに関連づけられる制御の選択に応答して、前記カートリッジ実行エンジンにおいてURLの形式で前記コミットトランザクションコマンドを受信するステップをさらに含む、請求項16に記載の方法。
- ブラウザに表示されるウェブページのタグに関連づけられる制御の選択に応答して、前記カートリッジ実行エンジンにおいてURLの形式で前記ロールバックトランザクションコマンドを受信するステップをさらに含む、請求項17に記載の方法。
- 前記オペレーションメッセージ中で特定されたオペレーションをコミットさせるステップが、前記トランザクションマネージャがコミットメッセージを1以上のデータベースサーバに送るステップを含み、コミットメッセージが前記1以上のデータベースサーバに、前記複数リクエストトランザクションに関連づけられている変更をアトミック単位としてコミットさせる、請求項9に記載のコンピュータ読み取り可能な記録媒体。
- 前記オペレーションメッセージ中で特定されたオペレーションをロールバックさせるステップが、前記トランザクションマネージャがロールバックメッセージを1以上のデータベースサーバに送るステップを含み、ロールバックメッセージは、前記1以上のデータベースサーバに、前記複数リクエストトランザクションに関連づけられている変更をアトミック単位としてロールバックさせる、請求項9に記載のコンピュータ読み取り可能な記録媒体。
- 前記カートリッジ実行エンジンとして、メッセージを代行受信するステップが、前記カートリッジ実行エンジンが開始トランザクションコマンドを含むメッセージを代行受信するステップを含み、
前記コンピュータ読み取り可能な記録媒体は、前記カートリッジ実行エンジンが開始トランザクションコマンドを含むメッセージを受信したことに応答して、前記カートリッジ実行エンジンがトランザクション制御メッセージを前記トランザクションマネージャに送り、前記トランザクションマネージャに前記トランザクションを開始させるステップを実行するための命令をさらに含む、請求項9に記載のコンピュータ読み取り可能な記録媒体。 - 前記カートリッジ実行エンジンがメッセージを代行受信するステップが、前記カートリッジ実行エンジンがコミットトランザクションコマンドを含むメッセージを代行受信するステップを含み、
前記コンピュータ読み取り可能な記録媒体は、前記カートリッジ実行エンジンがコミットトランザクションコマンドを含むメッセージを受信したことに応答して、前記カートリッジ実行エンジンがトランザクション制御メッセージを前記トランザクションマネージャに送り、前記トランザクションマネージャに前記トランザクションをコミットさせるステップを実行するための命令をさらに含む、請求項9に記載のコンピュータ読み取り可能な記録媒体。 - 前記カートリッジ実行エンジンがメッセージを代行受信するステップが、前記カートリッジ実行エンジンがロールバックトランザクションコマンドを含むメッセージを代行受信するステップを含み、
前記コンピュータ読み取り可能な記録媒体は、前記カートリッジ実行エンジンがロールバックトランザクションコマンドを含むメッセージを受信したことに応答して、前記カートリッジ実行エンジンがトランザクション制御メッセージを前記トランザクションマネージャに送り、前記トランザクションマネージャに前記トランザクションをロールバックさせるステップを実行するための命令をさらに含む、請求項9に記載のコンピュータ読み取り可能な記録媒体。 - トランザクションIDをクッキーとして維持するための命令をさらに含み、クッキーは、特定のメッセージに関連づけられているブラウザに維持される、請求項10に記載のコンピュータ読み取り可能な記録媒体。
- トランザクションIDをURLとして維持するための命令をさらに含み、URLは、特定のメッセージに関連づけられているブラウザに表示される1以上のウェブページにおける1以上のタグに関連づけられる、請求項10に記載のコンピュータ読み取り可能な記録媒体。
- タイムアウト期間をトランザクションIDと関連づけるための命令をさらに含み、タイムアウト期間の満了が、トランザクションIDと関連づけられているトランザクションは無効とされるべきであることを示す、請求項10に記載のコンピュータ読み取り可能な記録媒体。
- ブラウザに表示されたウェブページのタグに関連づけられている制御の選択に応答して、前記カートリッジ実行エンジンにおいてURLの形式で前記開始トランザクションコマンドを受信するステップを実行するための命令をさらに含む、請求項23に記載のコンピュータ読み取り可能な記録媒体。
- ブラウザに表示されたウェブページのタグに関連づけられている制御の選択に応答して、前記カートリッジ実行エンジンにおいてURLの形式で前記コミットトランザクションコマンドを受信するステップを実行するための命令をさらに含む、請求項24に記載のコンピュータ読み取り可能な記録媒体。
- ブラウザに表示されたウェブページのタグに関連づけられている制御の選択に応答して、前記カートリッジ実行エンジンにおいてURLの形式で前記ロールバックトランザクションコマンドを受信するステップを実行するための命令をさらに含む、請求項25に記載のコンピュータ読み取り可能な記録媒体。
- 前記オペレーションメッセージ中で特定されたオペレーションをコミットさせるステップが、前記トランザクションマネージャがコミットメッセージを1以上のデータベースサーバに送るステップを含み、このコミットメッセージが、前記1以上のデータベースサーバに、前記複数リクエストトランザクションに関連づけられている変更をアトミック単位としてコミットさせる、請求項12に記載のシステム。
- 前記オペレーションメッセージ中で特定されたオペレーションをロールバックさせるステップが、前記トランザクションマネージャがロールバックメッセージを1以上のデータベースサーバに送るステップを含み、ロールバックメッセージが前記1以上のデータベースサーバに、前記複数リクエストトランザクションに関連づけられている変更をアトミック単位としてロールバックさせる、請求項12に記載のシステム。
- 前記カートリッジ実行エンジンがメッセージを代行受信するステップが、前記カートリッジ実行エンジンが開始トランザクションコマンドを含むメッセージを代行受信するステップを含み、
前記カートリッジ実行エンジンが開始トランザクションコマンドを含むメッセージを受信したことに応答して、前記カートリッジ実行エンジンはトランザクション制御メッセージを前記トランザクションマネージャに送り、前記トランザクションマネージャに前記トランザクションを開始させる、請求項12に記載のシステム。 - 前記カートリッジ実行エンジンがメッセージを代行受信するステップが、前記カートリッジ実行エンジンがコミットトランザクションコマンドを含むメッセージを代行受信するステップを含み、
前記カートリッジ実行エンジンがコミットトランザクションコマンドを含むメッセージを受信したことに応答して、前記カートリッジ実行エンジンはトランザクション制御メッセージを前記トランザクションマネージャに送り、前記トランザクションマネージャに前記トランザクションをコミットさせる、請求項12に記載のシステム。 - 前記カートリッジ実行エンジンがメッセージを代行受信するステップが、前記カートリッジ実行エンジンがロールバックトランザクションコマンドを含むメッセージを代行受信するステップを含み、
前記カートリッジ実行エンジンがロールバックトランザクションコマンドを含むメッセージを受信したことに応答して、前記カートリッジ実行エンジンはトランザクション制御メッセージを前記トランザクションマネージャに送り、前記トランザクションマネージャに前記トランザクションをロールバックさせる、請求項12に記載のシステム。 - 前記カートリッジに向けられたメッセージを代行受信する前に、開始トランザクションURI(Uniform Resource Indicator)を「開始」属性に関係付けるメタデータを蔵置するステップと、
前記カートリッジに向けられたメッセージを代行受信することに応答して、前記代行受信されたメッセージのうちの特定のメッセージが前記開始トランザクションURIを含むか否かを判定するステップと、
前記特定のメッセージが前記開始トランザクションURIを含むとの判定に応答して、トランザクション制御メッセージ内に、前記トランザクションマネージャにトランザクションを開始させる開始トランザクション識別子を含めるステップとをさらに含む、請求項1に記載の方法。 - 前記カートリッジに向けられたメッセージを代行受信する前に、開始トランザクションURI(Uniform Resource Indicator)を「開始」属性に関係付けるメタデータを蔵置するステップと、
前記カートリッジに向けられたメッセージを代行受信することに応答して、前記代行受信されたメッセージのうちの特定のメッセージが前記開始トランザクションURIを含むか否かを判定するステップと、
前記特定のメッセージが前記開始トランザクションURIを含むとの判定に応答して、トランザクション制御メッセージ内に、前記トランザクションマネージャにトランザクションを開始させる開始トランザクション識別子を含めるステップとを実行するための命令をさらに含む、請求項9に記載のコンピュータ読み取り可能な記録媒体。 - 前記カートリッジに向けられたメッセージを代行受信する前に、開始トランザクションURI(Uniform Resource Indicator)を「開始」属性に関係付けるメタデータを蔵置するステップと、
前記カートリッジに向けられたメッセージを代行受信することに応答して、前記代行受信されたメッセージのうちの特定のメッセージが前記開始トランザクションURIを含むか否かを判定するステップと、
前記特定のメッセージが前記開始トランザクションURIを含むとの判定に応答して、トランザクション制御メッセージ内に、前記トランザクションマネージャにトランザクションを開始させる開始トランザクション識別子を含めるステップとを、前記コンピュータ命令が1以上のプロセッサによって実行されるときに、1以上のプロセッサによって実行されるステップとして、さらに含む、請求項12に記載のシステム。 - 前記カートリッジ実行エンジンが前記メッセージに基づくトランザクション制御メッセージを、前記カートリッジとは別に実現されるトランザクションマネージャに送る前記ステップは、前記カートリッジ実行エンジンが、前記メッセージに含まれるトランザクションの状態を示す前記情報に基づくトランザクション制御メッセージを、前記カートリッジとは別に実現されるトランザクションマネージャに送るステップを含み、
前記カートリッジ実行エンジンが前記メッセージに基づくオペレーションメッセージを前記カートリッジに送る前記ステップは、前記カートリッジ実行エンジンが、前記メッセージに含まれるトランザクションの状態を示す前記情報に基づくオペレーションメッセージを、前記カートリッジに送るステップを含む、請求項1に記載の方法。 - 前記メッセージを生成した1つ以上のブラウザに、トランザクションの状態を示す前記情報を送信させるステップをさらに含む、請求項1に記載の方法。
- 前記メッセージを生成した1つ以上のブラウザに、トランザクションの状態を示す前記情報を送信させる前記ステップは、前記メッセージを生成した1つ以上のブラウザに、1つ以上のクッキーでトランザクションの状態を示す前記情報を送信させるステップを含む、請求項41に記載の方法。
- 前記メッセージを生成した1つ以上のブラウザに、トランザクションの状態を示す前記情報を送信させる前記ステップは、前記メッセージを生成した1つ以上のブラウザに、1つ以上のURLでトランザクションの状態を示す前記情報を送信させるステップを含む、請求項41に記載の方法。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US08/962,536 US6334114B1 (en) | 1997-10-31 | 1997-10-31 | Method and apparatus for performing transactions in a stateless web environment which supports a declarative paradigm |
US08/962,536 | 1997-10-31 | ||
PCT/US1998/022698 WO1999023557A1 (en) | 1997-10-31 | 1998-10-27 | Method and apparatus for performing transactions in a stateless web environment which supports a declarative paradigm |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2001522086A JP2001522086A (ja) | 2001-11-13 |
JP4729172B2 true JP4729172B2 (ja) | 2011-07-20 |
Family
ID=25506031
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2000519352A Expired - Lifetime JP4729172B2 (ja) | 1997-10-31 | 1998-10-27 | 宣言型パラダイムをサポートするステートレスなウェブ環境におけるトランザクションを実行するための方法および装置 |
Country Status (8)
Country | Link |
---|---|
US (1) | US6334114B1 (ja) |
EP (1) | EP1025497B1 (ja) |
JP (1) | JP4729172B2 (ja) |
AU (1) | AU742797B2 (ja) |
CA (1) | CA2308801C (ja) |
DE (1) | DE69810654T2 (ja) |
HK (1) | HK1029001A1 (ja) |
WO (1) | WO1999023557A1 (ja) |
Families Citing this family (132)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6718387B1 (en) * | 1997-12-10 | 2004-04-06 | Sun Microsystems, Inc. | Reallocating address spaces of a plurality of servers using a load balancing policy and a multicast channel |
US6345278B1 (en) * | 1998-06-04 | 2002-02-05 | Collegenet, Inc. | Universal forms engine |
US6691165B1 (en) * | 1998-11-10 | 2004-02-10 | Rainfinity, Inc. | Distributed server cluster for controlling network traffic |
US6687900B1 (en) * | 1998-11-19 | 2004-02-03 | X/Net Associates, Inc. | Method and system for loading instructions into an executing process |
US7334184B1 (en) | 1999-03-10 | 2008-02-19 | American Express Travel Related Services Company, Inc. | Method for online information sharing for completing electronic forms |
US6801949B1 (en) | 1999-04-12 | 2004-10-05 | Rainfinity, Inc. | Distributed server cluster with graphical user interface |
US7350139B1 (en) * | 2000-06-16 | 2008-03-25 | American Express Travel Related Services Company, Inc. | System and method for utilizing a drag and drop technique to complete electronic forms |
GB2368692B (en) * | 1999-06-25 | 2003-02-12 | Jacobs Rimell Ltd | Automated provisioning system |
US7287084B1 (en) | 1999-07-15 | 2007-10-23 | F5 Networks, Inc. | Enabling encryption of application level persistence between a server and a client |
US7346695B1 (en) | 2002-10-28 | 2008-03-18 | F5 Networks, Inc. | System and method for performing application level persistence |
US6970933B1 (en) | 1999-07-15 | 2005-11-29 | F5 Networks, Inc. | Enabling application level persistence between a server and another resource over a network |
US6947982B1 (en) * | 1999-10-11 | 2005-09-20 | I2 Technologies Us, Inc. | Distributed session services |
US6876991B1 (en) | 1999-11-08 | 2005-04-05 | Collaborative Decision Platforms, Llc. | System, method and computer program product for a collaborative decision platform |
CA2293062A1 (en) * | 1999-12-22 | 2001-06-22 | Ibm Canada Limited-Ibm Canada Limitee | Efficient use of domain socket pairs in communication for tightly coupled transactions |
CA2400438A1 (en) * | 2000-02-16 | 2001-08-23 | Bea Systems, Inc. | Open market collaboration system for enterprise wide electronic commerce |
DE10102649B4 (de) * | 2000-03-30 | 2006-05-24 | International Business Machines Corp. | System und Verfahren für die Realisierung von Transaktionen mit Unterstützung durch ein Verzeichniszugriffs-LDAP-Protokoll |
US20080162298A1 (en) * | 2000-06-15 | 2008-07-03 | American Express Travel Related Services Company, Inc. | Online ordering system and method |
US7412409B2 (en) * | 2000-06-15 | 2008-08-12 | American Express Travel Related Services Company, Inc. | Online ordering medium and method |
AU2002214748A1 (en) * | 2000-06-12 | 2001-12-24 | Infospace, Inc. | Universal shopping cart and order injection system |
WO2001097143A2 (en) * | 2000-06-15 | 2001-12-20 | Infospace, Inc. | Unified product purchasing system and method |
AU2001276932B2 (en) * | 2000-07-27 | 2007-06-21 | Oracle International Corporation | System and method for concentration and load-balancing of requests |
US6751635B1 (en) * | 2000-08-18 | 2004-06-15 | Network Appliance, Inc. | File deletion and truncation using a zombie file space |
US6823358B1 (en) * | 2000-09-29 | 2004-11-23 | International Business Machines Corporation | Enabling multiple client access to a process-based system or program from a single java virtual machine |
US7814198B2 (en) * | 2007-10-26 | 2010-10-12 | Microsoft Corporation | Model-driven, repository-based application monitoring system |
US6609126B1 (en) | 2000-11-15 | 2003-08-19 | Appfluent Technology, Inc. | System and method for routing database requests to a database and a cache |
US9002734B2 (en) * | 2001-01-23 | 2015-04-07 | Verizon Patent And Licensing Inc. | Method and system for procuring telecommunications services on-line |
US20020107795A1 (en) * | 2001-02-02 | 2002-08-08 | Brian Minear | Application distribution and billing system in a wireless network |
US7657590B2 (en) * | 2001-02-07 | 2010-02-02 | Ubs Ag | Load balancing system and method |
US6996537B2 (en) | 2001-08-13 | 2006-02-07 | Qualcomm Incorporated | System and method for providing subscribed applications on wireless devices over a wireless network |
US9203923B2 (en) * | 2001-08-15 | 2015-12-01 | Qualcomm Incorporated | Data synchronization interface |
US7152204B2 (en) | 2001-10-18 | 2006-12-19 | Bea Systems, Inc. | System and method utilizing an interface component to query a document |
US7552222B2 (en) * | 2001-10-18 | 2009-06-23 | Bea Systems, Inc. | Single system user identity |
US8285880B2 (en) | 2001-11-30 | 2012-10-09 | Oracle International Corporation | Servicing requests that are issued in a protocol other than the protocol expected by the service |
US7194473B1 (en) | 2002-02-15 | 2007-03-20 | Oracle International Corporation | Application platform development environment |
US7444410B1 (en) | 2002-02-15 | 2008-10-28 | Oracle International Corporation | Application platform execution environment |
US7516447B2 (en) | 2002-02-22 | 2009-04-07 | Bea Systems, Inc. | Methods and apparatus for building, customizing and using software abstractions of external entities |
US20030172077A1 (en) * | 2002-03-08 | 2003-09-11 | Mir3, Inc. | Device-independent notification system |
US7111020B1 (en) * | 2002-03-26 | 2006-09-19 | Oracle International Corporation | Incremental refresh of materialized views containing rank function, and rewrite of queries containing rank or rownumber or min/max aggregate functions using such a materialized view |
US7519976B2 (en) * | 2002-05-01 | 2009-04-14 | Bea Systems, Inc. | Collaborative business plug-in framework |
US7155438B2 (en) * | 2002-05-01 | 2006-12-26 | Bea Systems, Inc. | High availability for event forwarding |
US20040078440A1 (en) * | 2002-05-01 | 2004-04-22 | Tim Potter | High availability event topic |
US7526519B2 (en) | 2002-05-01 | 2009-04-28 | Bea Systems, Inc. | High availability application view deployment |
US7257645B2 (en) * | 2002-05-01 | 2007-08-14 | Bea Systems, Inc. | System and method for storing large messages |
US8135772B2 (en) | 2002-05-01 | 2012-03-13 | Oracle International Corporation | Single servlets for B2B message routing |
US7493628B2 (en) * | 2002-05-02 | 2009-02-17 | Bea Systems, Inc. | Shared common connection factory |
US7484224B2 (en) | 2002-05-02 | 2009-01-27 | Bae Systems, Inc. | Adapter deployment without recycle |
US7676538B2 (en) * | 2002-05-02 | 2010-03-09 | Bea Systems, Inc. | Systems and methods for application view transactions |
US7222148B2 (en) | 2002-05-02 | 2007-05-22 | Bea Systems, Inc. | System and method for providing highly available processing of asynchronous service requests |
US6988099B2 (en) * | 2002-06-27 | 2006-01-17 | Bea Systems, Inc. | Systems and methods for maintaining transactional persistence |
WO2004006499A1 (en) * | 2002-07-02 | 2004-01-15 | America Online Incorporated | Seamless cross-site user authentication status detection and automatic login |
US7181482B2 (en) * | 2002-08-01 | 2007-02-20 | Oracle International Corporation | Buffered message queue architecture for database management systems |
US20040024771A1 (en) * | 2002-08-01 | 2004-02-05 | Oracle International Corporation | Buffered message queue architecture for database management systems with transactional enqueue support |
US7203706B2 (en) * | 2002-08-01 | 2007-04-10 | Oracle International Corporation | Buffered message queue architecture for database management systems with memory optimizations and “zero copy” buffered message queue |
US7185034B2 (en) | 2002-08-01 | 2007-02-27 | Oracle International Corporation | Buffered message queue architecture for database management systems with guaranteed at least once delivery |
US7185033B2 (en) | 2002-08-01 | 2007-02-27 | Oracle International Corporation | Buffered message queue architecture for database management systems with unlimited buffered message queue with limited shared memory |
US7113766B2 (en) * | 2002-08-15 | 2006-09-26 | Qualcomm Inc. | Transaction processing |
US7430755B1 (en) | 2002-09-03 | 2008-09-30 | Fs Networks, Inc. | Method and system for providing persistence in a secure network access |
US7797450B2 (en) * | 2002-10-04 | 2010-09-14 | Oracle International Corporation | Techniques for managing interaction of web services and applications |
US7860957B1 (en) * | 2002-12-20 | 2010-12-28 | Cisco Technology, Inc. | System and method for managing network services in a distributed system |
US7584474B2 (en) * | 2003-02-25 | 2009-09-01 | Bea Systems, Inc. | Systems and methods for transaction chaining |
US20050022164A1 (en) * | 2003-02-25 | 2005-01-27 | Bea Systems, Inc. | Systems and methods utilizing a workflow definition language |
US7293038B2 (en) | 2003-02-25 | 2007-11-06 | Bea Systems, Inc. | Systems and methods for client-side filtering of subscribed messages |
US20040167915A1 (en) * | 2003-02-25 | 2004-08-26 | Bea Systems, Inc. | Systems and methods for declaratively transforming data objects between disparate representations |
US7774697B2 (en) * | 2003-02-25 | 2010-08-10 | Bea Systems, Inc. | System and method for structuring distributed applications |
US7650276B2 (en) * | 2003-02-26 | 2010-01-19 | Bea Systems, Inc. | System and method for dynamic data binding in distributed applications |
US7539985B2 (en) | 2003-02-26 | 2009-05-26 | Bea Systems, Inc. | Systems and methods for dynamic component versioning |
US8032860B2 (en) | 2003-02-26 | 2011-10-04 | Oracle International Corporation | Methods for type-independent source code editing |
US7299454B2 (en) | 2003-02-26 | 2007-11-20 | Bea Systems, Inc. | Method for multi-language debugging |
US7076772B2 (en) | 2003-02-26 | 2006-07-11 | Bea Systems, Inc. | System and method for multi-language extensible compiler framework |
US7707564B2 (en) | 2003-02-26 | 2010-04-27 | Bea Systems, Inc. | Systems and methods for creating network-based software services using source code annotations |
US7444620B2 (en) | 2003-02-28 | 2008-10-28 | Bea Systems, Inc. | Systems and methods for a common runtime container framework |
US7636722B2 (en) * | 2003-02-28 | 2009-12-22 | Bea Systems, Inc. | System and method for describing application extensions in XML |
US7650592B2 (en) | 2003-03-01 | 2010-01-19 | Bea Systems, Inc. | Systems and methods for multi-view debugging environment |
US9232077B2 (en) | 2003-03-12 | 2016-01-05 | Qualcomm Incorporated | Automatic subscription system for applications and services provided to wireless devices |
US7853525B2 (en) * | 2003-07-15 | 2010-12-14 | Microsoft Corporation | Electronic draft capture |
US8365193B2 (en) | 2003-08-14 | 2013-01-29 | Oracle International Corporation | Recoverable asynchronous message driven processing in a multi-node system |
US7237224B1 (en) * | 2003-08-28 | 2007-06-26 | Ricoh Company Ltd. | Data structure used for skeleton function of a class in a skeleton code creation tool |
JP2007519120A (ja) | 2004-01-21 | 2007-07-12 | クゥアルコム・インコーポレイテッド | 無線加入者ネットワークにおけるアプリケーションをベースにした価値課金 |
US8825702B2 (en) * | 2004-02-24 | 2014-09-02 | Oracle International Corporation | Sending control information with database statement |
EP2341432A1 (en) | 2004-03-13 | 2011-07-06 | Adaptive Computing Enterprises, Inc. | System and method of co-allocating a reservation spanning different compute resources types |
US8782654B2 (en) | 2004-03-13 | 2014-07-15 | Adaptive Computing Enterprises, Inc. | Co-allocating a reservation spanning different compute resources types |
WO2005089241A2 (en) | 2004-03-13 | 2005-09-29 | Cluster Resources, Inc. | System and method for providing object triggers |
WO2005089246A2 (en) | 2004-03-13 | 2005-09-29 | Cluster Resources, Inc. | System and method for providiing advanced reservations in a compute environment |
US7197427B2 (en) * | 2004-03-31 | 2007-03-27 | Genworth Financial Inc. | Method for risk based testing |
US8090806B1 (en) * | 2004-06-10 | 2012-01-03 | Cisco Technology, Inc. | Two-stage network device configuration process |
US20070266388A1 (en) | 2004-06-18 | 2007-11-15 | Cluster Resources, Inc. | System and method for providing advanced reservations in a compute environment |
US8176490B1 (en) | 2004-08-20 | 2012-05-08 | Adaptive Computing Enterprises, Inc. | System and method of interfacing a workload manager and scheduler with an identity manager |
US7860840B2 (en) * | 2004-10-05 | 2010-12-28 | Microsoft Corporation | Maintaining correct transaction results when transaction management configurations change |
US8271980B2 (en) | 2004-11-08 | 2012-09-18 | Adaptive Computing Enterprises, Inc. | System and method of providing system jobs within a compute environment |
US8181182B1 (en) * | 2004-11-16 | 2012-05-15 | Oracle America, Inc. | Resource allocation brokering in nested containers |
US7818386B2 (en) * | 2004-12-30 | 2010-10-19 | Oracle International Corporation | Repeatable message streams for message queues in distributed systems |
US7779418B2 (en) * | 2004-12-30 | 2010-08-17 | Oracle International Corporation | Publisher flow control and bounded guaranteed delivery for message queues |
US8863143B2 (en) | 2006-03-16 | 2014-10-14 | Adaptive Computing Enterprises, Inc. | System and method for managing a hybrid compute environment |
US7996455B2 (en) | 2005-06-17 | 2011-08-09 | Adaptive Computing Enterprises, Inc. | System and method for providing dynamic roll-back reservations in time |
US9231886B2 (en) | 2005-03-16 | 2016-01-05 | Adaptive Computing Enterprises, Inc. | Simple integration of an on-demand compute environment |
EP3203374B1 (en) | 2005-04-07 | 2021-11-24 | III Holdings 12, LLC | On-demand access to compute resources |
US9350875B2 (en) | 2005-05-31 | 2016-05-24 | Qualcomm Incorporated | Wireless subscriber billing and distribution |
US9185538B2 (en) | 2005-05-31 | 2015-11-10 | Qualcomm Incorporated | Wireless subscriber application and content distribution and differentiated pricing |
US8196150B2 (en) * | 2005-10-07 | 2012-06-05 | Oracle International Corporation | Event locality using queue services |
US7680793B2 (en) * | 2005-10-07 | 2010-03-16 | Oracle International Corporation | Commit-time ordered message queue supporting arbitrary read and dequeue patterns from multiple subscribers |
US9143622B2 (en) | 2006-02-17 | 2015-09-22 | Qualcomm Incorporated | Prepay accounts for applications, services and content for communication devices |
US8037127B2 (en) * | 2006-02-21 | 2011-10-11 | Strangeloop Networks, Inc. | In-line network device for storing application-layer data, processing instructions, and/or rule sets |
US9185234B2 (en) | 2006-02-22 | 2015-11-10 | Qualcomm Incorporated | Automated account mapping in a wireless subscriber billing system |
US8799043B2 (en) | 2006-06-07 | 2014-08-05 | Ricoh Company, Ltd. | Consolidation of member schedules with a project schedule in a network-based management system |
US8050953B2 (en) * | 2006-06-07 | 2011-11-01 | Ricoh Company, Ltd. | Use of a database in a network-based project schedule management system |
JP4271211B2 (ja) * | 2006-06-30 | 2009-06-03 | 株式会社東芝 | 放送番組のメタデータを提供する装置及びプログラム |
US8566452B1 (en) | 2006-08-03 | 2013-10-22 | F5 Networks, Inc. | Intelligent HTTP based load-balancing, persistence, and application traffic management of SSL VPN tunnels |
US9219757B2 (en) * | 2006-12-28 | 2015-12-22 | Cable Television Laboratories, Inc. | Message correlation |
US9027025B2 (en) | 2007-04-17 | 2015-05-05 | Oracle International Corporation | Real-time database exception monitoring tool using instance eviction data |
US8024396B2 (en) | 2007-04-26 | 2011-09-20 | Microsoft Corporation | Distributed behavior controlled execution of modeled applications |
US7970892B2 (en) * | 2007-06-29 | 2011-06-28 | Microsoft Corporation | Tuning and optimizing distributed systems with declarative models |
US8239505B2 (en) | 2007-06-29 | 2012-08-07 | Microsoft Corporation | Progressively implementing declarative models in distributed systems |
US8230386B2 (en) * | 2007-08-23 | 2012-07-24 | Microsoft Corporation | Monitoring distributed applications |
US8041773B2 (en) | 2007-09-24 | 2011-10-18 | The Research Foundation Of State University Of New York | Automatic clustering for self-organizing grids |
US8181151B2 (en) | 2007-10-26 | 2012-05-15 | Microsoft Corporation | Modeling and managing heterogeneous applications |
US8099720B2 (en) | 2007-10-26 | 2012-01-17 | Microsoft Corporation | Translating declarative models |
US7974939B2 (en) | 2007-10-26 | 2011-07-05 | Microsoft Corporation | Processing model-based commands for distributed applications |
US7926070B2 (en) * | 2007-10-26 | 2011-04-12 | Microsoft Corporation | Performing requested commands for model-based applications |
US8225308B2 (en) | 2007-10-26 | 2012-07-17 | Microsoft Corporation | Managing software lifecycle |
US8732709B2 (en) * | 2008-02-05 | 2014-05-20 | Red Hat, Inc. | Transaction management in a web service messaging environment |
US9128895B2 (en) | 2009-02-19 | 2015-09-08 | Oracle International Corporation | Intelligent flood control management |
US9081616B2 (en) * | 2009-05-29 | 2015-07-14 | Lexmark International Technology, SA | System and method for adjusting a number of processing modules based on processing load |
US20100306005A1 (en) * | 2009-05-29 | 2010-12-02 | Perceptive Software, Inc. | Workflow Management System and Method |
US11720290B2 (en) | 2009-10-30 | 2023-08-08 | Iii Holdings 2, Llc | Memcached server functionality in a cluster of data processing nodes |
US10877695B2 (en) | 2009-10-30 | 2020-12-29 | Iii Holdings 2, Llc | Memcached server functionality in a cluster of data processing nodes |
US9165086B2 (en) | 2010-01-20 | 2015-10-20 | Oracle International Corporation | Hybrid binary XML storage model for efficient XML processing |
US8458530B2 (en) | 2010-09-21 | 2013-06-04 | Oracle International Corporation | Continuous system health indicator for managing computer system alerts |
US9342351B1 (en) * | 2013-11-01 | 2016-05-17 | Bmc Software, Inc. | Systems and methods for efficient DB2 outage operations |
US10540217B2 (en) | 2016-09-16 | 2020-01-21 | Oracle International Corporation | Message cache sizing |
CN110134698A (zh) * | 2019-04-15 | 2019-08-16 | 平安普惠企业管理有限公司 | 数据管理方法及相关产品 |
JP7157716B2 (ja) | 2019-08-09 | 2022-10-20 | 株式会社日立製作所 | データベースサーバ装置、サーバシステム及びリクエスト処理方法 |
US11163619B2 (en) | 2019-12-30 | 2021-11-02 | Motorola Solutions, Inc. | Timer-based message handling for executing stateful services in a stateless environment |
Family Cites Families (51)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4918595A (en) | 1987-07-31 | 1990-04-17 | International Business Machines Corp. | Subsystem input service for dynamically scheduling work for a computer system |
US5210824A (en) | 1989-03-03 | 1993-05-11 | Xerox Corporation | Encoding-format-desensitized methods and means for interchanging electronic document as appearances |
AU639802B2 (en) | 1990-08-14 | 1993-08-05 | Oracle International Corporation | Methods and apparatus for providing dynamic invocation of applications in a distributed heterogeneous environment |
US5249290A (en) | 1991-02-22 | 1993-09-28 | At&T Bell Laboratories | Method of and apparatus for operating a client/server computer network |
US5212793A (en) | 1991-09-04 | 1993-05-18 | International Business Machines Corp. | Generic initiators |
JPH0797782B2 (ja) * | 1991-09-18 | 1995-10-18 | インターナショナル・ビジネス・マシーンズ・コーポレイション | 異種トランザクションの調整方法 |
US5361350A (en) | 1991-12-12 | 1994-11-01 | International Business Machines Corporation | Object oriented method management system and software for managing class method names in a computer system |
GB2263797B (en) | 1992-01-31 | 1996-04-03 | Plessey Telecomm | Object orientated system |
ES2154647T3 (es) | 1992-07-01 | 2001-04-16 | Ericsson Telefon Ab L M | Metodo y sistema de especificacion de interfaz independiente de la implementacion. |
US5329619A (en) | 1992-10-30 | 1994-07-12 | Software Ag | Cooperative processing interface and communication broker for heterogeneous computing environments |
JP3003440B2 (ja) | 1993-01-19 | 2000-01-31 | 株式会社日立製作所 | 負荷分散制御方法および分散処理システム |
JP3365576B2 (ja) | 1993-06-14 | 2003-01-14 | インターナショナル・ビジネス・マシーンズ・コーポレーション | オブジェクトの実行方法および装置 |
AU681433B2 (en) | 1993-08-03 | 1997-08-28 | Sun Microsystems, Inc. | Flexible multi-platform partitioning for computer applications |
EP1235177A3 (en) | 1993-12-16 | 2003-10-08 | divine technology ventures | Digital active advertising |
US5504897A (en) | 1994-02-22 | 1996-04-02 | Oracle Corporation | Method and apparatus for processing electronic mail in parallel |
US5592654A (en) | 1994-06-03 | 1997-01-07 | Integrated Device Technology, Inc. | Apparatus and method for converting a job conforming to a first protocol into a job conforming to a second protocol |
US5715314A (en) | 1994-10-24 | 1998-02-03 | Open Market, Inc. | Network sales system |
US5623656A (en) | 1994-12-15 | 1997-04-22 | Lucent Technologies Inc. | Script-based data communication system and method utilizing state memory |
DE69531599T2 (de) | 1994-12-20 | 2004-06-24 | Sun Microsystems, Inc., Mountain View | Verfahren und Gerät zum Auffinden und Beschaffen personalisierter Informationen |
US5822585A (en) | 1995-02-21 | 1998-10-13 | Compuware Corporation | System and method for cooperative processing using object-oriented framework |
US5857102A (en) | 1995-03-14 | 1999-01-05 | Sun Microsystems, Inc. | System and method for determining and manipulating configuration information of servers in a distributed object environment |
US5907675A (en) | 1995-03-22 | 1999-05-25 | Sun Microsystems, Inc. | Methods and apparatus for managing deactivation and shutdown of a server |
US5802291A (en) | 1995-03-30 | 1998-09-01 | Sun Microsystems, Inc. | System and method to control and administer distributed object servers using first class distributed objects |
US5761684A (en) | 1995-05-30 | 1998-06-02 | International Business Machines Corporation | Method and reusable object for scheduling script execution in a compound document |
US5752246A (en) | 1995-06-07 | 1998-05-12 | International Business Machines Corporation | Service agent for fulfilling requests of a web browser |
US5708780A (en) | 1995-06-07 | 1998-01-13 | Open Market, Inc. | Internet server access control and monitoring systems |
US5737592A (en) | 1995-06-19 | 1998-04-07 | International Business Machines Corporation | Accessing a relational database over the Internet using macro language files |
US5872969A (en) | 1995-06-23 | 1999-02-16 | International Business Machines Corporation | System and method for efficiently synchronizing cache and persistent data in an object oriented transaction processing system |
US5737607A (en) | 1995-09-28 | 1998-04-07 | Sun Microsystems, Inc. | Method and apparatus for allowing generic stubs to marshal and unmarshal data in object reference specific data formats |
US5774670A (en) * | 1995-10-06 | 1998-06-30 | Netscape Communications Corporation | Persistent client state in a hypertext transfer protocol based client-server system |
US5862318A (en) * | 1995-10-26 | 1999-01-19 | Microsoft Corporation | System for generating a gapless series of identity values |
US5706442A (en) | 1995-12-20 | 1998-01-06 | Block Financial Corporation | System for on-line financial services using distributed objects |
US5745681A (en) | 1996-01-11 | 1998-04-28 | Sun Microsystems, Inc. | Stateless shopping cart for the web |
US5761673A (en) | 1996-01-31 | 1998-06-02 | Oracle Corporation | Method and apparatus for generating dynamic web pages by invoking a predefined procedural package stored in a database |
US5859971A (en) | 1996-02-15 | 1999-01-12 | International Business Machines Corp. | Differencing client/server communication system for use with CGI forms |
US5862325A (en) | 1996-02-29 | 1999-01-19 | Intermind Corporation | Computer-based communication system and method using metadata defining a control structure |
US5761507A (en) | 1996-03-05 | 1998-06-02 | International Business Machines Corporation | Client/server architecture supporting concurrent servers within a server with a transaction manager providing server/connection decoupling |
WO1997040457A2 (en) * | 1996-04-19 | 1997-10-30 | Intergraph Corporation | System and method for data access |
US5894554A (en) | 1996-04-23 | 1999-04-13 | Infospinner, Inc. | System for managing dynamic web page generation requests by intercepting request at web server and routing to page server thereby releasing web server to process other requests |
US5835712A (en) | 1996-05-03 | 1998-11-10 | Webmate Technologies, Inc. | Client-server system using embedded hypertext tags for application and database development |
US5864871A (en) | 1996-06-04 | 1999-01-26 | Multex Systems | Information delivery system and method including on-line entitlements |
US5961601A (en) | 1996-06-07 | 1999-10-05 | International Business Machines Corporation | Preserving state information in a continuing conversation between a client and server networked via a stateless protocol |
US5857191A (en) | 1996-07-08 | 1999-01-05 | Gradient Technologies, Inc. | Web application server with secure common gateway interface |
US5860072A (en) | 1996-07-11 | 1999-01-12 | Tandem Computers Incorporated | Method and apparatus for transporting interface definition language-defined data structures between heterogeneous systems |
US5796393A (en) | 1996-11-08 | 1998-08-18 | Compuserve Incorporated | System for intergrating an on-line service community with a foreign service |
US5991802A (en) | 1996-11-27 | 1999-11-23 | Microsoft Corporation | Method and system for invoking methods of objects over the internet |
US5826239A (en) | 1996-12-17 | 1998-10-20 | Hewlett-Packard Company | Distributed workflow resource management system and method |
US5875296A (en) | 1997-01-28 | 1999-02-23 | International Business Machines Corporation | Distributed file system web server user authentication with cookies |
US5864866A (en) | 1997-03-26 | 1999-01-26 | International Business Machines Corporation | Apparatus and method for providing externalization in an object-oriented environment |
US6070191A (en) | 1997-10-17 | 2000-05-30 | Lucent Technologies Inc. | Data distribution techniques for load-balanced fault-tolerant web access |
US5890161A (en) * | 1997-10-28 | 1999-03-30 | Microsoft Corporation | Automatic transaction processing of component-based server applications |
-
1997
- 1997-10-31 US US08/962,536 patent/US6334114B1/en not_active Expired - Lifetime
-
1998
- 1998-10-27 EP EP98956226A patent/EP1025497B1/en not_active Expired - Lifetime
- 1998-10-27 DE DE69810654T patent/DE69810654T2/de not_active Expired - Lifetime
- 1998-10-27 CA CA002308801A patent/CA2308801C/en not_active Expired - Lifetime
- 1998-10-27 AU AU12801/99A patent/AU742797B2/en not_active Expired
- 1998-10-27 WO PCT/US1998/022698 patent/WO1999023557A1/en active IP Right Grant
- 1998-10-27 JP JP2000519352A patent/JP4729172B2/ja not_active Expired - Lifetime
-
2000
- 2000-10-28 HK HK00106874A patent/HK1029001A1/xx not_active IP Right Cessation
Also Published As
Publication number | Publication date |
---|---|
CA2308801C (en) | 2002-12-10 |
EP1025497B1 (en) | 2003-01-08 |
DE69810654T2 (de) | 2003-09-25 |
AU742797B2 (en) | 2002-01-10 |
US6334114B1 (en) | 2001-12-25 |
HK1029001A1 (en) | 2001-03-16 |
CA2308801A1 (en) | 1999-05-14 |
JP2001522086A (ja) | 2001-11-13 |
WO1999023557A1 (en) | 1999-05-14 |
DE69810654D1 (de) | 2003-02-13 |
EP1025497A1 (en) | 2000-08-09 |
AU1280199A (en) | 1999-05-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4729172B2 (ja) | 宣言型パラダイムをサポートするステートレスなウェブ環境におけるトランザクションを実行するための方法および装置 | |
US6225995B1 (en) | Method and apparatus for incorporating state information into a URL | |
US6710786B1 (en) | Method and apparatus for incorporating state information into a URL | |
JP3853592B2 (ja) | 分散ウェブアプリケーションサーバ | |
AU746391B2 (en) | Method and system for facilitating distributed software development in a distribution unaware manner | |
JP3853593B2 (ja) | ウェブアプリケーションサーバにおいて拡張可能な認証機構を実現するための方法および装置 | |
EP0956687B1 (en) | Web request broker controlling multiple processes | |
US6944666B2 (en) | Mechanism for enabling customized session managers to interact with a network server | |
US6463446B1 (en) | Method and apparatus for transporting behavior in an event-based distributed system | |
US6708171B1 (en) | Network proxy | |
WO1999023558A1 (en) | Method and apparatus for conducting a transaction in a stateless web environment | |
JP2002505491A (ja) | 分散形システムにおける動的情報証明のための装置及び方法 | |
JP2002505463A (ja) | 分散システム内の遠隔処理呼出に関連する処理をおこなうためのダウンロード可能なスマートプロキシ |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A711 | Notification of change in applicant |
Free format text: JAPANESE INTERMEDIATE CODE: A711 Effective date: 20050913 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20051122 |
|
A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20060221 |
|
A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20060228 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20060519 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20060829 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20061222 |
|
A911 | Transfer to examiner for re-examination before appeal (zenchi) |
Free format text: JAPANESE INTERMEDIATE CODE: A911 Effective date: 20070105 |
|
A912 | Re-examination (zenchi) completed and case transferred to appeal board |
Free format text: JAPANESE INTERMEDIATE CODE: A912 Effective date: 20070316 |
|
A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20090227 |
|
A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20090304 |
|
A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20090401 |
|
A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20090407 |
|
A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20090501 |
|
A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20090511 |
|
A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20091027 |
|
A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20091030 |
|
A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20091126 |
|
A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20091202 |
|
A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20091225 |
|
A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20100105 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20100127 |
|
A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20100608 |
|
A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20100614 |
|
A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20100708 |
|
A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20100714 |
|
A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20100806 |
|
A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20100817 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20100909 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20110224 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20110418 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20140422 Year of fee payment: 3 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
EXPY | Cancellation because of completion of term |