特許第6703527号(P6703527)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ オラクル・インターナショナル・コーポレイションの特許一覧

特許6703527マルチテナントアプリケーションサーバ環境におけるパーティション識別子の決定のためのシステムおよび方法
<>
  • 特許6703527-マルチテナントアプリケーションサーバ環境におけるパーティション識別子の決定のためのシステムおよび方法 図000012
  • 特許6703527-マルチテナントアプリケーションサーバ環境におけるパーティション識別子の決定のためのシステムおよび方法 図000013
  • 特許6703527-マルチテナントアプリケーションサーバ環境におけるパーティション識別子の決定のためのシステムおよび方法 図000014
  • 特許6703527-マルチテナントアプリケーションサーバ環境におけるパーティション識別子の決定のためのシステムおよび方法 図000015
  • 特許6703527-マルチテナントアプリケーションサーバ環境におけるパーティション識別子の決定のためのシステムおよび方法 図000016
  • 特許6703527-マルチテナントアプリケーションサーバ環境におけるパーティション識別子の決定のためのシステムおよび方法 図000017
  • 特許6703527-マルチテナントアプリケーションサーバ環境におけるパーティション識別子の決定のためのシステムおよび方法 図000018
  • 特許6703527-マルチテナントアプリケーションサーバ環境におけるパーティション識別子の決定のためのシステムおよび方法 図000019
  • 特許6703527-マルチテナントアプリケーションサーバ環境におけるパーティション識別子の決定のためのシステムおよび方法 図000020
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6703527
(24)【登録日】2020年5月12日
(45)【発行日】2020年6月3日
(54)【発明の名称】マルチテナントアプリケーションサーバ環境におけるパーティション識別子の決定のためのシステムおよび方法
(51)【国際特許分類】
   G06F 9/455 20060101AFI20200525BHJP
   G06F 9/46 20060101ALI20200525BHJP
   G06F 13/00 20060101ALI20200525BHJP
【FI】
   G06F9/455 150
   G06F9/46 430
   G06F13/00 353C
【請求項の数】15
【全頁数】30
(21)【出願番号】特願2017-516313(P2017-516313)
(86)(22)【出願日】2015年9月25日
(65)【公表番号】特表2017-528845(P2017-528845A)
(43)【公表日】2017年9月28日
(86)【国際出願番号】US2015052469
(87)【国際公開番号】WO2016049582
(87)【国際公開日】20160331
【審査請求日】2018年8月23日
(31)【優先権主張番号】62/055,068
(32)【優先日】2014年9月25日
(33)【優先権主張国】US
(73)【特許権者】
【識別番号】502303739
【氏名又は名称】オラクル・インターナショナル・コーポレイション
(74)【代理人】
【識別番号】110001195
【氏名又は名称】特許業務法人深見特許事務所
(72)【発明者】
【氏名】サホー,サンジープ
(72)【発明者】
【氏名】ティヤガラジャン,シバクマール
【審査官】 多胡 滋
(56)【参考文献】
【文献】 米国特許出願公開第2010/0095101(US,A1)
【文献】 米国特許出願公開第2003/0079029(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/455
G06F 9/46
G06F 13/00
(57)【特許請求の範囲】
【請求項1】
アプリケーションサーバ環境におけるパーティション識別子の決定のためのシステムであって、
1つ以上のコンピュータを備え、前記1つ以上のコンピュータは、前記1つ以上のコンピュータ上で実行されるアプリケーションサーバ環境を、
前記アプリケーションサーバ環境内で使用可能な複数のデプロイ可能なリソースと、
各々がドメインの管理およびランタイム区分を提供する1つ以上のパーティションとともに含み、
前記システムはさらに、
1つ以上のコンポーネント呼び出しコンテキストを設定するように構成されたパーティション認識型コンテナと、
コンポーネント呼び出しコンテキストマネージャとを備え、前記コンポーネント呼び出しコンテキストマネージャは、スタックを含み、
前記パーティション認識型コンテナは、現在のコンポーネント呼び出しコンテキストを前記コンポーネント呼び出しコンテキストマネージャに登録すること、および、前記コンポーネント呼び出しコンテキストマネージャにおける現在のコンポーネント呼び出しコンテキストを探索することのうちの一方を実行し、
前記現在のコンポーネント呼び出しコンテキストは、現在のパーティションに関連付けられる、システム。
【請求項2】
前記現在のコンポーネント呼び出しコンテキストを登録することは、
フロントエンドコンポーネントにおいて、ターゲット情報を含む要求を受信することを備え、前記ターゲット情報は、前記現在のパーティションを示し、前記登録することはさらに、
前記パーティション認識型コンテナによって前記現在のコンポーネント呼び出しコンテキストを決定することと、
前記パーティション認識型コンテナによって、アプリケーションプログラムインターフェイスを介して、前記現在のコンポーネント呼び出しコンテキストを前記コンポーネント呼び出しコンテキストマネージャに登録することとを備える、請求項1に記載のシステム。
【請求項3】
前記パーティション認識型コンテナは、前記現在のコンポーネント呼び出しコンテキストを前記コンポーネント呼び出しコンテキストマネージャに登録した後、前記要求の完了時に、前記コンポーネント呼び出しコンテキストマネージャにおける前記現在のコンポーネント呼び出しコンテキストを登録解除するように構成され、前記登録解除することは、
前記パーティション認識型コンテナによって、前記アプリケーションプログラムインターフェイスを介して、前記コンポーネント呼び出しコンテキストマネージャにおける前記現在のコンポーネント呼び出しコンテキストを登録解除することを備える、請求項2に記載のシステム。
【請求項4】
ワークマネージャをさらに備え、
前記パーティション認識型コンテナによって前記現在のコンポーネント呼び出しコンテキストを前記コンポーネント呼び出しコンテキストマネージャに登録することは、前記現在のコンポーネント呼び出しコンテキストを前記コンポーネント呼び出しコンテキストマネージャに登録するために前記パーティション認識型コンテナによって前記ワークマネージャに命令を渡すことを備える、請求項1から3のいずれか1項に記載のシステム。
【請求項5】
前記現在のコンポーネント呼び出しコンテキストを探索することは、
前記パーティション認識型コンテナによって、前記コンポーネント呼び出しコンテキストマネージャ前記現在のコンポーネント呼び出しコンテキストを要求することと、
前記パーティション認識型コンテナ内で前記現在のコンポーネント呼び出しコンテキストを設定することとを備える、請求項1から4のいずれか1項に記載のシステム。
【請求項6】
前記現在のパーティションは、前記1つ以上のパーティションのうちの1つからなる群またはグローバルパーティションのうちの1つであり、前記グローバルパーティションは、前記ドメインに関連付けられる、請求項1から5のいずれか1項に記載のシステム。
【請求項7】
前記アプリケーションサーバ環境は、マルチテナントアプリケーションサーバ環境を備え、前記システムは、テナントによる使用のために前記1つ以上のパーティションを前記テナントに関連付けることができる、請求項1から6のいずれか1項に記載のシステム。
【請求項8】
アプリケーションサーバ環境におけるパーティション識別子の決定のための方法であって、
1つ以上のコンピュータ上で実行されるアプリケーションサーバ環境を含む1つ以上のコンピュータにおいて、
前記アプリケーションサーバ環境内で使用可能な複数のデプロイ可能なリソースと、
各々がドメインの管理およびランタイム区分を提供する1つ以上のパーティションと、
コンポーネント呼び出しコンテキストマネージャとをともに設けるステップを備え、前記コンポーネント呼び出しコンテキストマネージャは、スタックを備え、前記方法はさらに、
パーティション認識型コンテナにおいて、1つ以上のコンポーネント呼び出しコンテキストを設定するステップと、
前記パーティション認識型コンテナによって、現在のコンポーネント呼び出しコンテキストを前記コンポーネント呼び出しコンテキストマネージャに登録すること、および、前記コンポーネント呼び出しコンテキストマネージャにおける現在のコンポーネント呼び出しコンテキストを探索することのうちの一方を実行するステップと、
前記現在のコンポーネント呼び出しコンテキストを現在のパーティションに関連付けるステップとを備える、方法。
【請求項9】
前記現在のコンポーネント呼び出しコンテキストを登録することは、
フロントエンドコンポーネントにおいて、ターゲット情報を含む要求を受信することを備え、前記ターゲット情報は、前記現在のパーティションを示し、前記登録することはさらに、
前記パーティション認識型コンテナによって前記現在のコンポーネント呼び出しコンテキストを決定することと、
前記パーティション認識型コンテナによって、アプリケーションプログラムインターフェイスを介して、前記現在のコンポーネント呼び出しコンテキストを前記コンポーネント呼び出しコンテキストマネージャに登録することとを備える、請求項8に記載の方法。
【請求項10】
前記パーティション認識型コンテナは、前記現在のコンポーネント呼び出しコンテキストを前記コンポーネント呼び出しコンテキストマネージャに登録した後、前記要求の完了時に、前記コンポーネント呼び出しコンテキストマネージャにおける前記現在のコンポーネント呼び出しコンテキストを登録解除するように構成され、前記登録解除することは、
前記パーティション認識型コンテナによって、前記アプリケーションプログラムインターフェイスを介して、前記コンポーネント呼び出しコンテキストマネージャにおける前記現在のコンポーネント呼び出しコンテキストを登録解除することを備える、請求項9に記載の方法。
【請求項11】
アプリケーションサーバ環境が実行される前記1つ以上のコンピュータにワークマネージャをさらに設けるステップをさらに備え、
前記パーティション認識型コンテナによって前記現在のコンポーネント呼び出しコンテキストを前記コンポーネント呼び出しコンテキストマネージャに登録することは、前記現在のコンポーネント呼び出しコンテキストを前記コンポーネント呼び出しコンテキストマネージャに登録するために前記パーティション認識型コンテナによって前記ワークマネージャに命令を渡すことを備える、請求項8から10のいずれか1項に記載の方法。
【請求項12】
前記現在のコンポーネント呼び出しコンテキストを探索することは、
前記パーティション認識型コンテナによって、前記コンポーネント呼び出しコンテキストマネージャ前記現在のコンポーネント呼び出しコンテキストを要求することと、
前記パーティション認識型コンテナ内で前記現在のコンポーネント呼び出しコンテキストを設定することとを備える、請求項8から11のいずれか1項に記載の方法。
【請求項13】
前記現在のパーティションは、前記1つ以上のパーティションのうちの1つからなる群またはグローバルパーティションのうちの1つであり、前記グローバルパーティションは、前記ドメインに関連付けられる、請求項8から12のいずれか1項に記載の方法。
【請求項14】
前記アプリケーションサーバ環境は、マルチテナントアプリケーションサーバ環境を備え、前記方法は、
テナントによる使用のために前記1つ以上のパーティションを前記テナントに関連付けるステップをさらに備える、請求項8から13のいずれか1項に記載の方法。
【請求項15】
1つ以上のコンピュータシステム上で実行されるプログラム命令を備えるコンピュータプログラムであって、前記プログラム命令は、実行されたときに、前記1つ以上のコンピュータシステムに、請求項8から14のいずれか1項に記載の方法を実行させる、コンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
著作権表示
この特許文献の開示の一部は、著作権保護の対象となる題材を含んでいる。著作権の所有者は、特許商標庁の包袋または記録に掲載されるように特許文献または特許情報開示を誰でも複製できることに対して異議はないが、その他の点ではすべての如何なる著作権をも保有する。
【0002】
発明の分野:
本発明の実施形態は、概して、アプリケーションサーバおよびクラウド環境に関し、特に、マルチテナントアプリケーションサーバ環境におけるパーティション識別子の決定のためのシステムおよび方法に関する。
【背景技術】
【0003】
背景:
アプリケーションサーバは、概して、ソフトウェアアプリケーションをデプロイして実行することができる管理された環境を提供する。クラウドベースの環境は、クラウドによって提供される分散型リソース内でアプリケーションを実行して、当該分散型リソースを利用することを可能にする。このような環境は、多くのユーザまたはテナントをサポートすることができ、それらのうちのいくつかは、そのユーザまたはテナントに特有の特定条件を有する可能性がある。
【発明の概要】
【課題を解決するための手段】
【0004】
概要:
一実施形態に従って、アプリケーションサーバ環境におけるパーティション識別子の決定のためのシステムおよび方法が本明細書に記載される。例示的な方法は、アプリケーションサーバ環境が実行される1つ以上のコンピュータに、アプリケーションサーバ環境内で使用可能な複数のデプロイ可能なリソースと、各々がドメインの管理およびランタイム区分を提供する1つ以上のパーティションと、コンポーネント呼び出しコンテキストマネージャとをともに設けるステップから開始することができ、コンポーネント呼び出しコンテキストマネージャはスタックを備える。当該方法は、パーティション認識型コンテナにおいて1つ以上のコンポーネント呼び出しコンテキストを設定することができる。パーティション認識型コンテナは、現在のコンポーネント呼び出しコンテキストをコンポーネント呼び出しコンテキストマネージャに登録すること、または、コンポーネント呼び出しコンテキストマネージャにおいて現在のコンポーネント呼び出しコンテキストを探索することのうちの1つを実行することができる。現在のコンポーネント呼び出しコンテキストは、現在のパーティションに関連付けることができる。
【0005】
一実施形態に従うと、マルチテナント動作環境のコンテキストにおいて本明細書に記載されている方法およびシステムは、サーブレットがEJBコンテナをコールする例に下記されるように、非マルチテナント動作環境内でも使用することができる。
【0006】
一実施形態に従うと、WebLogic環境におけるドメイン内のパーティションなどのパーティションは、ドメイン内のテナントとして位置決めすることができる。本システムおよび方法は、一般的な態様(すなわち、当該システムおよび方法がマルチテナントアプリケーションサーバ環境内でも非マルチテナントアプリケーションサーバ環境内でもテナント要求を識別できることを一般的に意味する)でのテナント要求の早期の識別を可能にすることができる。
【図面の簡単な説明】
【0007】
図1】一実施形態に従った、アプリケーションサーバ、クラウドまたは他の環境においてマルチテナンシをサポートするためのシステムを示す図である。
図2】一実施形態に従った、アプリケーションサーバ、クラウドまたは他の環境においてマルチテナンシをサポートするためのシステムをさらに示す図である。
図3】一実施形態に従った、アプリケーションサーバ、クラウドまたは他の環境においてマルチテナンシをサポートするためのシステムをさらに示す図である。
図4】一実施形態に従った、例示的なマルチテナント環境で使用されるドメイン構成を示す図である。
図5】一実施形態に従った例示的なマルチテナント環境をさらに示す図である。
図6】一実施形態に従ったマルチテナントアプリケーションサーバ環境におけるパーティション識別子の決定を示す図である。
図7】一実施形態に従ったマルチテナントアプリケーションサーバ環境におけるパーティション識別子の決定を示す図である。
図8】一実施形態に従ったマルチテナントアプリケーションサーバ環境におけるパーティション識別子の決定を示す図である。
図9】一実施形態に従ったマルチテナントアプリケーションサーバ環境におけるパーティション識別子の決定のための方法をフローチャートによって示す図である。
【発明を実施するための形態】
【0008】
詳細な説明:
一実施形態に従って、アプリケーションサーバ環境におけるパーティション識別子の決定のためのシステムおよび方法が本明細書に記載される。例示的な方法は、アプリケーションサーバ環境が実行される1つ以上のコンピュータに、アプリケーションサーバ環境内で使用可能な複数のデプロイ可能なリソースと、各々がドメインの管理およびランタイム区分を提供する1つ以上のパーティションと、コンポーネント呼び出しコンテキストマネージャとをともに設けるステップから開始することができ、コンポーネント呼び出しコンテキストマネージャはスタックを備える。当該方法は、パーティション認識型コンテナにおいて1つ以上のコンポーネント呼び出しコンテキストを設定することができる。パーティション認識型コンテナは、現在のコンポーネント呼び出しコンテキストをコンポーネント呼び出しコンテキストマネージャに登録すること、または、コンポーネント呼び出しコンテキストマネージャにおいて現在のコンポーネント呼び出しコンテキストを探索することのうちの1つを実行することができる。現在のコンポーネント呼び出しコンテキストは、現在のパーティションに関連付けることができる。
【0009】
一実施形態に従うと、マルチテナント動作環境のコンテキストにおいて本明細書に記載されている方法およびシステムは、サーブレットがEJBコンテナをコールする例に下記されるように、非マルチテナント動作環境内でも使用することができる。
【0010】
一実施形態に従うと、WebLogic環境におけるドメイン内のパーティションなどのパーティションは、ドメイン内のテナントとして位置決めすることができる。本システムおよび方法は、一般的な態様(すなわち、当該システムおよび方法がマルチテナントアプリケーションサーバ環境内でも非マルチテナントアプリケーションサーバ環境内でもテナント要求を識別できることを一般的に意味する)でのテナント要求の早期の識別を可能にすることができる。
【0011】
アプリケーションサーバ(たとえば、マルチテナント(Multi-Tenant:MT))環境
図1は、一実施形態に従った、アプリケーションサーバ、クラウドまたは他の環境においてマルチテナンシをサポートするためのシステムを示す。
【0012】
図1に示されるように、一実施形態に従うと、アプリケーションサーバ(たとえばマルチテナント(MT))環境100または他のコンピューティング環境は、ソフトウェアアプリケーションのデプロイメントおよび実行を可能にするものであって、アプリケーションサーバドメインを定義するためにランタイム時に用いられるドメイン102の構成を含み、当該ドメイン102の構成に従って動作するように構成することができる。
【0013】
一実施形態に従うと、アプリケーションサーバは、ランタイム時に使用されるよう定義される1つ以上のパーティション104を含み得る。各々のパーティションは、グローバルユニークパーティション識別子(identifier:ID)およびパーティション構成に関連付けることができ、さらに、リソースグループテンプレートの参照126および/またはパーティション特有のアプリケーションもしくはリソース128とともに、1つ以上のリソースグループ124を含み得る。ドメインレベルのリソースグループ、アプリケーションおよび/またはリソース140も、任意にはリソースグループテンプレートの参照とともに、ドメインレベルで定義することができる。
【0014】
各々のリソースグループテンプレート160は、1つ以上のアプリケーションA162、B164、リソースA166、B168および/または他のデプロイ可能なアプリケーションもしくはリソース170を定義することができ、リソースグループによって参照することができる。たとえば、図1に例示されるように、パーティション104におけるリソースグループ124は、リソースグループテンプレート160を参照する(190)ことができる。
【0015】
概して、システムアドミニストレータは、パーティション、ドメインレベルのリソースグループおよびリソースグループテンプレート、ならびにセキュリティ領域を定義することができるとともに、パーティションアドミニストレータは、たとえば、パーティションレベルのリソースグループを作成するか、アプリケーションをパーティションにデプロイするかまたはパーティションについての特定の領域を参照することによって、それら自体のパーティションのアスペクトを定義することができる。
【0016】
図2は、一実施形態に従った、アプリケーションサーバ、クラウドまたは他の環境においてマルチテナンシをサポートするためのシステムをさらに示す。
【0017】
図2に示されるように、一実施形態に従うと、パーティション202は、たとえば、リソースグループテンプレート210の参照206を含むリソースグループ205と、仮想ターゲット(たとえば仮想ホスト)情報207と、プラグ接続可能なデータベース(pluggable database:PDB)または他のデータソース情報208とを含み得る。リソースグループテンプレート(たとえば210)は、たとえば、Java(登録商標)メッセージサーバ(Java Message Server:JMS)サーバ213、ストア・アンド・フォワード(store-and-forward:SAF)エージェント215、メールセッションコンポーネント216またはJavaデータベースコネクティビティ(Java Database Connectivity:JDBC)リソース217などのリソースとともに、複数のアプリケーションA211およびB212を定義することができる。
【0018】
図2に例示されるリソースグループテンプレートが一例として提供される。他の実施形態に従うと、さまざまなタイプのリソースグループテンプレートおよび要素を提供することができる。
【0019】
一実施形態に従うと、パーティション(たとえば202)内のリソースグループが、特定のリソースグループテンプレート(たとえば210)を参照する(220)と、パーティション特有の情報230(たとえば、パーティション特有のPDB情報)を示すために、特定のパーティションに関連付けられた情報を、参照されたリソースグループテンプレートと組合わせて用いることができる。次いで、パーティション特有の情報は、パーティションによって使用されるリソース(たとえば、PDBリソース)を構成するようにアプリケーションサーバによって使用可能である。たとえば、パーティション202に関連付けられたパーティション特有のPDB情報は、そのパーティションによって使用されるべき適切なPDB238または他のデータソースを備えたコンテナデータベース(container database:CDB)236を構成する(232)ようにアプリケーションサーバによって使用可能である。
【0020】
同様に、一実施形態に従うと、特定のパーティションに関連付けられた仮想ターゲット情報を用いて、そのパーティションによって使用されるべきパーティション特有の仮想ターゲット240(たとえば、ユニフォーム・リソース・ロケータ(uniform resource locator:URL)(たとえば、http://baylandurgentcare.com)によってアクセス可能にすることができるbaylandurgentcare.com)を定義する(239)ことができる。
【0021】
図3は、一実施形態に従った、アプリケーションサーバ、クラウドまたは他の環境においてマルチテナンシをサポートするためのシステムをさらに示す。
【0022】
一実施形態に従うと、config.xml構成ファイルなどのシステム構成を用いて、パーティションを定義する。当該パーティションは、そのパーティションに関連付けられたリソースグループについての構成エレメントおよび/または他のパーティションプロパティを含む。値は、プロパティ名/値の対を用いてパーティションごとに指定することができる。
【0023】
一実施形態に従うと、複数のパーティションは、管理されたサーバ/クラスタ242内で、または、CDB243にアクセス可能でありかつウェブ層244を介してアクセス可能である同様の環境内で、実行することができる。これにより、たとえば、ドメインまたはパーティションを(CDBの)PDBのうち1つ以上のPDBに関連付けることが可能となる。
【0024】
一実施形態に従うと、複数のパーティションの各々、この例においてはパーティションA250およびパーティションB260は、そのパーティションに関連付けられた複数のリソースを含むように構成することができる。たとえば、パーティションAは、アプリケーションA1 252と、アプリケーションA2 254と、JMS A 256と、さらには、PDB A 259に関連付けられたデータソースA257とをともに含むリソースグループ251を含むように構成することができる。この場合、パーティションは仮想ターゲットA258を介してアクセス可能である。同様に、パーティションB260は、アプリケーションB1 262と、アプリケーションB2 264と、JMS B 266と、さらには、PDB B 269に関連付けられたデータソースB267とをともに含むリソースグループ261を含むように構成することができる。この場合、パーティションは仮想ターゲットB268を介してアクセス可能である。
【0025】
上述の例のうちいくつかはCDBおよびPDBの使用を例示しているが、他の実施形態に従うと、他のタイプのマルチテナントのデータベースまたは非マルチテナントのデータベースをサポートすることができる。この場合、特定の構成は、たとえば、スキーマを使用するかまたはさまざまなデータベースを使用することによって、各々のパーティションのために提供することができる。
【0026】
リソース
一実施形態に従うと、リソースは、環境のドメインにデプロイすることができるシステムリソース、アプリケーションまたは他のリソースもしくはオブジェクトであり得る。たとえば、一実施形態に従うと、リソースは、アプリケーション、JMS、JDBC、JavaMail、WLDFもしくはデータソースであり得るか、または、サーバ、クラスタもしくは他のアプリケーションサーバターゲットにデプロイすることができる他のシステムリソースもしくは他のタイプのオブジェクトであり得る。
【0027】
パーティション
一実施形態に従うと、パーティションは、パーティション識別子(partition identifier:ID)および構成に関連付けられ得るドメインのうちランタイムおよび管理の区分またはスライスであるとともに、アプリケーションを含み得て、ならびに/または、リソースグループおよびリソースグループテンプレートを使用することによってドメイン全体に渡るリソースを参照し得る。パーティションは、テナントまたはプラットフォームテナントにも関連付けることができる。
【0028】
一実施形態に従うと、パーティションは、アプリケーションを含み、リソースグループテンプレートを介してドメイン全体に渡るアプリケーションを参照し、それ自体の構成を有し得る。
【0029】
一実施形態に従うと、パーティション内のリソースグループは、任意には、リソースグループテンプレートを参照することができる。パーティションは、複数のリソースグループを有し得るとともに、それらの各々はリソースグループテンプレートを参照し得る。各々のパーティションは、パーティションのリソースグループが参照するリソースグループテンプレートにおいて指定されていない構成データについてのプロパティを定義することができる。これにより、パーティションが、リソースグループテンプレートで定義されたデプロイ可能なリソースをそのパーティションで使用されるべき特定の値にバインドするものとして機能することが可能となる。場合によっては、パーティションは、リソースグループテンプレートによって指定される構成情報を無効にすることができる。
【0030】
一実施形態に従うと、パーティション構成は、たとえば、config.xml構成ファイルによって定義されるように、複数の構成エレメントを含み得る。複数の構成エレメントは、たとえば、「パーティション(partition)」(そのパーティションを定義する属性および子エレメントを含む);「リソース・グループ(resource-group)」(パーティションにデプロイされるアプリケーションおよびリソースを含む);「リソース・グループ・テンプレート(resource-group-template)」(そのテンプレートによって定義されるアプリケーションおよびリソースを含む);「jdbc・システム・リソース・無効化(jdbc-system-resource-override)」(データベース特有のサービス名、ユーザ名およびパスワードを含む);ならびに、「パーティション・プロパティ(partition-properties)」(リソースグループテンプレートにおいてマクロ置換のために使用可能なプロパティキー値を含む)を含む。
【0031】
始動後、システムは、構成ファイルによって提供される情報を用いて、リソースグループテンプレートから各々のリソースについてのパーティション特有の構成エレメントを生成することができる。
【0032】
リソースグループ
一実施形態に従うと、リソースグループは、名前付けされ完全に修飾されたデプロイ可能なリソースの集合であって、ドメインまたはパーティションのレベルで定義することができ、かつ、リソースグループテンプレートを参照することができる。リソースグループにおけるリソースは、完全修飾されているものと見なされる。というのも、アドミニストレータが、それらのリソースを開始させるのに必要とされるかまたはそれらのリソースに接続するのに必要とされるすべての情報、たとえば、データソースに接続するためのクレデンシャル、またはアプリケーションについての目標情報、を提供しているからである。
【0033】
パーティションレベルでは、アドミニストレータは、任意のセキュリティ制限下で、或るパーティションにおいて0個以上のリソースグループを構成することができる。たとえば、SaaS使用事例においては、さまざまなパーティションレベルのリソースグループは、ドメインレベルのリソースグループテンプレートを参照することができる。PaaS使用事例においては、リソースグループテンプレートを参照しないが代わりにそのパーティション内でのみ利用可能にされるべきアプリケーションおよびそれらの関連するリソースを表わすパーティションレベルのリソースグループを作成することができる。
【0034】
リソースグループテンプレート
一実施形態に従うと、ドメインは、任意に、リソースグループテンプレートを含み得る。リソースグループテンプレートは、リソースグループから参照することができドメインレベルで定義されるデプロイ可能なリソースの集合であり、そのリソースを起動するのに必要な情報のうちいくらかは、パーティションレベル構成の仕様をサポートするように、テンプレート自体の一部として記憶されない可能性がある。ドメインは、リソースグループテンプレートをいくつ含んでもよく、それらの各々は、たとえば、1つ以上の関連するJavaアプリケーションと、それらのアプリケーションが依存するリソースとを含み得る。
【0035】
一実施形態に従うと、特定のリソースグループテンプレートは、1つ以上のリソースグループによって参照可能である。概して、任意の所与のパーティション内では、リソースグループテンプレートは一度に1つのリソースグループによって参照することができる。すなわち、同じパーティション内で複数のリソースグループによって同時に参照することはできない。しかしながら、異なるパーティションにおける別のリソースグループによって同時に参照することができる。リソースグループを含むオブジェクト、たとえばドメインまたはパーティションは、プロパティ名/値の割当てを用いて、任意のトークンの値をリソースグループテンプレートで設定することができる。システムは、参照するリソースグループを用いてリソースグループテンプレートを起動させると、それらのトークンを、リソースグループが含むオブジェクトにおいて設定された値と置換えることができる。場合によっては、システムはまた、静的に構成されたリソースグループテンプレートおよびパーティションを用いて、パーティション/テンプレートの組合せごとにランタイム構成を生成することができる。
【0036】
テナント
一実施形態に従うと、テナントは、パーティションIDに関連付けることができる。たとえば、テナントは、別個のユーザ組織、たとえばさまざまな外部会社、または特定の企業内のさまざまな部門(たとえばHRおよび財務部)などに関連付けることができる。
【0037】
一実施形態に従うと、システムは、互いに異なるテナント(すなわちパーティション)の管理およびランタイムを分離することを可能にする。たとえば、(たとえばパーティションユーザ組織の)認定ユーザは、関連付けられたパーティションにおけるアプリケーションのいくつかの挙動、およびそれらがアクセスできるリソースを構成することができる。システムは、テナント間の分離を確実にし、かつ、ランタイム時に、特定のテナントの代わりに機能するアプリケーションがそのテナントに関連付けられたリソースのみを参照するが他のテナントに関連付けられたリソースは参照しないことを確実にすることができる。
【0038】
例示的なドメイン構成およびマルチテナント環境
一実施形態に従うと、アプリケーションは、ドメインレベルでリソースグループテンプレートにデプロイすることができるか、または、パーティションに範囲指定されているかもしくはドメインに範囲指定されているリソースグループにデプロイすることができる。アプリケーション構成は、アプリケーション毎またはパーティション毎に指定されたデプロイメントプランを用いて無効化することができる。デプロイメントプランはまた、リソースグループの一部として指定することができる。
【0039】
図4は、一実施形態に従った、例示的なマルチテナント環境で使用されるドメイン構成を示す。
【0040】
一実施形態に従うと、システムがパーティションを始動させると、当該システムは、提供された構成に従って、それぞれのデータベースインスタンスに対して、各パーティションごとに1つずつ、仮想ターゲット(たとえば仮想ホスト)および接続プールを作成する。
【0041】
典型的には、各々のリソースグループテンプレートは、1つ以上の関連するアプリケーションと、それらアプリケーションが依存するリソースとを含み得る。各々のパーティションは、それが参照するリソースグループテンプレートにおいて指定されていない構成データを提供することができるが、これは、場合によっては、リソースグループテンプレートによって指定されるいくつかの構成情報を無効にすることを含めて、パーティションに関連付けられた特定値に対するリソースグループテンプレートにおけるデプロイ可能なリソースのバインディングを行なうことによって、実行可能である。これにより、システムは、各々のパーティションが定義したプロパティ値を用いて、パーティション毎にリソースグループテンプレートによってさまざまに表わされるアプリケーションを始動させることができる。
【0042】
いくつかのインスタンスにおいては、パーティションが含み得るリソースグループは、リソースグループテンプレートを参照しないか、または、それら自体のパーティション範囲指定されたデプロイ可能なリソースを直接定義する。パーティション内で定義されるアプリケーションおよびデータソースは、概して、そのパーティションにとってのみ利用可能である。リソースは、パーティション:<partitionName>/<resource JNDI name>、またはドメイン:<resource JNDI name>を用いて、パーティションの中からアクセスすることができるようにデプロイ可能である。
【0043】
たとえば、MedRecアプリケーションは、複数のJavaアプリケーション、データソース、JMSサーバおよびメールセッションを含み得る。複数のテナントのためにMedRecアプリケーションを実行させるために、システムアドミニストレータは、テンプレートにおけるそれらのデプロイ可能なリソースを公開している単一のMedRecリソースグループテンプレート286を定義することができる。
【0044】
ドメインレベルのデプロイ可能なリソースとは対照的に、リソースグループテンプレートにおいて公開されたデプロイ可能なリソースは、テンプレートにおいて完全には構成されない可能性があるか、または、いくつかの構成情報が不足しているので、そのままでは起動させることができない。
【0045】
たとえば、MedRecリソースグループテンプレートは、アプリケーションによって用いられるデータソースを公開し得るが、データベースに接続するためのURLを指定しない可能性がある。さまざまなテナントに関連付けられたパーティション、たとえば、パーティションBUC−A290(Bayland Urgent Care:BUC)およびパーティションVH−A292(Valley Health:VH)は、各々がMedRecリソースグループテンプレートを参照する(296,297)MedRecリソースグループ293,294を含むことによって、1つ以上のリソースグループテンプレートを参照することができる。次いで、当該参照を用いて、Bayland Urgent Careテナントによって使用されるBUC−Aパーティションに関連付けられた仮想ホストbaylandurgentcare.com304と、Valley Healthテナントによって使用されるVH−Aパーティションに関連付けられた仮想ホストvalleyhealth.com308とを含む各々のテナントのための仮想ターゲット/仮想ホストを作成する(302,306)ことができる。
【0046】
図5は、一実施形態に従った例示的なマルチテナント環境をさらに示す。図5に示されるように、2つのパーティションがMedRecリソースグループテンプレートを参照している上述の例から引続いて、一実施形態に従うと、サーブレットエンジン310は、この例においてはBayland Urgent Careの医師テナント環境320およびValley Healthの医師テナント環境330といった複数のテナント環境をサポートするために用いることができる。
【0047】
一実施形態に従うと、各々のパーティション321,331は、そのテナント環境についての入来トラフィックを受入れるための異なる仮想ターゲットと、異なるURL322,332とを定義することができる。異なるURL322,332は、パーティションと、この例ではBayland Urgent CareデータベースまたはValley Healthデータベースを含むそれぞれのリソース324,334とに接続するためのものである。同じアプリケーションコードが両方のデータベースに対して実行され得るので、データベースインスタンスは互換性のあるスキーマを用いることができる。システムがパーティションを始動させると、当該システムは、それぞれのデータベースインスタンスに対する接続プールおよび仮想ターゲットを作成することができる。
【0048】
パーティション識別子
一実施形態に従うと、アプリケーションサーバ環境内で、JNDI(Javaネーミングおよびディレクトリインターフェイス)、JMX(Java管理拡張機能)、ロギング、ウェブコンテナおよびRCM(リソース消費管理)などのコンテナは、現在のまたは実行中の要求のパーティションIDをパーティション特有の処理、ロギングおよび分離ニーズに合わせて使用するために当該パーティションIDを決定することができる。
【0049】
一実施形態に従うと、コンポーネント呼び出し要求または一般にアプリケーションサーバで受信されるその他の要求のために、ドメインにおけるパーティション内には当該要求のターゲットリソースが存在し得る。ターゲットリソース(すなわち要求のターゲットリソース)が存在するパーティションは、当該要求のためのパーティションコンテキストを決定することができる。
【0050】
一実施形態に従うと、内部サーバ動作は、さまざまに処理されることができる。たとえば、内部サーバ動作は、特にドメイン内の特定の/個々のパーティション(たとえばパーティションに属するログファイルの回転)のために実行されることができる。このような内部サーバ動作では、パーティションコンテキストは、ターゲットリソースが存在するパーティションではなく、動作が実行されているパーティションであり得る。
【0051】
一実施形態に従うと、他の内部サーバ動作は、任意の個々の/特定のパーティションに起因するものではない。このような内部サーバ動作としては、サーバランタイムの初期化および/または終了、コンテナのロードなどが挙げられるが、それらに限定されるものではない。特定のパーティションに起因しないこのような動作では、パーティションコンテキストは一般的な値に設定することができる。
【0052】
図6は、一実施形態に従ったアプリケーションサーバ環境におけるパーティション識別子の決定を示す。図6に示される実施形態では、アプリケーションサーバ環境600は、ドメイン620を含む。ドメイン620は、フロントエンドコンポーネント630に関連付けることができ、コンテナ640と、CIC(コンポーネント呼び出しコンテキスト)API645と、コンポーネント呼び出しコンテキストマネージャ(CICマネージャ)650と、パーティションA660と、パーティションB670と、仮想ターゲットA662と、仮想ターゲットB672とを含み得る。フロントエンドコンポーネントは、たとえばオラクル(商標)トラフィックディレクタなどの、入来要求を処理することができる任意のフロントエンドコンポーネントであり得る。コンテナ640は、たとえばJNDI、JMX、ロギング、RCMなどのパーティション認識型コンテナであり得る。パーティションAおよびBは、それぞれリソースグループ661および671を含み得る。リソースグループ661および671は、それぞれ仮想ターゲットA662および仮想ターゲットB672に関連付けることができる。CICマネージャ650は、スレッドローカルスタック651などのスタックを含み得る。
【0053】
一実施形態に従うと、ユーザまたはプロセス610は、要求615を開始することができ、当該要求は、ドメイン620内の当該要求のターゲットのためのターゲット情報を含む。たとえば、パーティションA660の認定ユーザは、パーティションA内の特定のアプリケーションを実行するよう要求することができる。この状況において、要求615に関連付けられたターゲット情報は、少なくともパーティションAを要求のターゲットとして識別するであろう。
【0054】
一実施形態に従うと、ターゲット情報615を含む要求などの要求がドメイン620に向けられると、当該要求はトラフィックディレクタなどのフロントエンドコンポーネント630に転送されることができる。フロントエンドコンポーネント630で受信されると、コンテナ640は、要求のターゲットコンポーネント/リソースのさまざまな詳細を決定することができる。これらの詳細は、たとえば、要求内に含まれるターゲット情報を調べることによって取得することができる。コンテナ640が要求のターゲットコンポーネント/リソースを決定すると、コンテナはコンポーネント呼び出しコンテキスト652を作成することができ、当該コンポーネント呼び出しコンテキスト652は、呼び出しを表わすオブジェクトとして返すことができる。一実施形態に従うと、決定されたコンポーネント呼び出しコンテキスト652は、要求次第で、パーティション識別子665または675に関連付けることができる。
【0055】
入来要求の詳細を決定してコンポーネント呼び出しコンテキストオブジェクトを作成するコンテナの一例として、入来要求615がHTTP要求であるとする。入来HTTP要求のURIを介して、ウェブ(HTTP)コンテナは、HTTP要求がターゲットとするパーティションID、アプリケーションID、モジュールおよびコンポーネントIDを決定することができる。この決定は、たとえば、要求のターゲットを区別できるように十分な情報が要求から読取られた後にHTTPプロトコルハンドラによってソケットリーダスレッドにおいて行うことができる。この情報に基づいて、コンテナは、入来HTTP要求のためのオブジェクト、すなわちコンポーネント呼び出しコンテキストを作成することができる。
【0056】
一実施形態に従うと、要求がドメイン620に向けられると、当該要求はトラフィックディレクタなどのフロントエンドコンポーネント630に転送されることができる。フロントエンドコンポーネント630で受信されると、コンテナ640は、要求のターゲットコンポーネント/リソースのさまざまな詳細を決定することができる。これらの詳細は、たとえば、要求内に含まれるターゲット情報を調べることによって取得することができる。コンテナ640が要求のターゲットコンポーネント/リソースを決定すると、コンテナはコンポーネント呼び出しコンテキスト652を作成することができ、当該コンポーネント呼び出しコンテキスト652は、呼び出しを表わすためのオブジェクトであり得る。一実施形態に従うと、決定されたコンポーネント呼び出しコンテキスト652は、パーティション識別子665または675に関連付けることができる。
【0057】
一実施形態に従うと、コンテナが決定を行って入来要求のコンポーネント呼び出しコンテキスト、すなわちオブジェクトを作成すると、コンテナは、次いで、コンポーネント呼び出しコンテキストをコンポーネント呼び出しコンテキストマネージャ650に登録することができ、当該コンポーネント呼び出しコンテキストマネージャ650は、スタック、たとえばスレッドローカルスタック651を含み得て、当該スレッドローカルスタック651は、さらには、さまざまなコンポーネント呼び出しコンテキスト、たとえばコンポーネント呼び出しコンテキスト(A)〜(D)652〜655を含む。なお、スレッドローカルスタック651は、コンポーネント呼び出しコンテキストをいくつ含んでもよく、図6に示される4つのコンポーネント呼び出しコンテキストに限定されるものではない。コンポーネント呼び出しコンテキストマネージャ650は、現在のコンポーネント呼び出しコンテキストの探索、登録および登録解除を可能にすることができる。
【0058】
一実施形態に従うと、コンテナは、CIC API645を介してコンポーネント呼び出しコンテキストオブジェクトをコンポーネント呼び出しコンテキストマネージャに直接登録することができる。コンテナは、このコンポーネント呼び出しコンテキストの直接的な登録を、要求のための決定されたコンポーネント呼び出しコンテキストをプッシュするためのpushComponentInvocationContextなどのコマンドを用いて実現することができる。このような新たなコンポーネント呼び出しコンテキストをコンポーネント呼び出しコンテキストマネージャに登録する方法を利用するコンテナは、要求に関連付けられた呼び出しが完了するとコンポーネント呼び出しコンテキストの設定解除/登録解除も処理することができる。呼び出しが成功裏に完了して初めてコンテナがコンポーネント呼び出しコンテキストマネージャにおけるコンポーネント呼び出しコンテキストを登録解除/設定解除することは、必要条件ではない。呼び出しの結果として例外処理が実行されるなど、呼び出しが失敗に終わったことによっても、コンテナは、コンポーネント呼び出しマネージャにおけるコンポーネント呼び出しコンテキストの設定解除/登録解除を行うことができる。コンポーネント呼び出しコンテキストマネージャにおけるコンポーネント呼び出しコンテキストの設定解除/登録解除は、コンポーネント呼び出しコンテキストマネージャ上でpopComponentInvocationContetなどのコマンドを介して実行することができる。
【0059】
一実施形態に従うと、コンテナは、CIC API645を介してコンポーネント呼び出しコンテキストオブジェクトをコンポーネント呼び出しコンテキストマネージャに直接登録することができる。コンテナは、実行すべきcallabeを渡すことによってrunAs方法を使用することができる。この状況において、コンポーネント呼び出しコンテキストマネージャは、コンポーネント呼び出しコンテキストを確立することができる。これにより、コンテナは、コンポーネント呼び出しコンテキストのコンテキストにおいて動作を起動し、動作を実行し、呼び出しが完了した後にコンポーネント呼び出しコンテキストを設定解除することが可能になる。
【0060】
一実施形態に従うと、コンテナは、CIC API645を介してコンポーネント呼び出しコンテキストオブジェクトをコンポーネント呼び出しコンテキストマネージャに直接登録することができる。コンテナは、try-with-resourcesスタイルブロック内のsetCurrentComponentInvocationContext方法によって返されるAutoCloseableを使用することができる。この場合、CICマネージャは、AutoCloseableによるtryブロックの終了時に自動的に呼び出しコンテキストを設定解除することができる。このアプローチは、作業の実行中にCICマネージャが正しいCICコンテキストを確立するという利点がありながらも、呼び出し元が作業をRunnableまたはCloseableに変更する必要がないなどの利点を提供することができる。
【0061】
図7は、一実施形態に従ったアプリケーションサーバ環境におけるパーティション識別子の決定を示す。図7に示される実施形態では、アプリケーションサーバ環境600は、ドメイン620を含む。ドメイン620は、フロントエンドコンポーネント630に関連付けることができ、コンテナ640を含み得て、当該コンテナ640は、サービスプロバイダインターフェイス720を含み得る。ドメインは、ワークマネージャ730と、コンポーネント呼び出しコンテキストマネージャ(CICマネージャ)650と、パーティションA660と、パーティションB670と、仮想ターゲットA662と、仮想ターゲットB672とをさらに含み得る。フロントエンドコンポーネントは、たとえばオラクル(商標)トラフィックディレクタなどの、入来要求を処理することができる任意のフロントエンドコンポーネントであり得る。コンテナ640は、たとえばJNDI、JMX、ロギング、RCMなどのパーティション認識型コンテナであり得る。パーティションAおよびBは、それぞれリソースグループ661および671を含み得る。リソースグループ661および671は、それぞれ仮想ターゲットA662および仮想ターゲットB672に関連付けることができる。CICマネージャ650は、スレッドローカルスタック651などのスタックを含み得る。
【0062】
一実施形態に従うと、ユーザは、要求615を開始することができ、当該要求は、ドメイン620内の要求のターゲットのターゲット情報を含む。たとえば、ユーザ、プロセッサ、またはパーティションA660へのアクセスを有する他のアプリケーションは、パーティションA内の特定のアプリケーションを実行するよう要求することができる。この状況において、要求615に関連付けられたターゲット情報は、少なくともパーティションAを要求のターゲットとして識別するであろう。要求が(同一のドメイン内または別のドメインからの)別のパーティションから生じる状況においては、発生元のパーティションのコンポーネント呼び出しコンテキストは要求に含まれない。
【0063】
一実施形態に従うと、ターゲット情報615を含む要求などの要求がドメイン620に向けられると、当該要求はトラフィックディレクタなどのフロントエンドコンポーネント630に転送されることができる。フロントエンドコンポーネント630で受信されると、コンテナ640は、要求のターゲットコンポーネント/リソースのさまざまな詳細を決定することができる。これらの詳細は、たとえば、要求内に含まれるターゲット情報を調べることによって取得することができる。コンテナ640が要求のターゲットコンポーネント/リソースを決定すると、コンテナはコンポーネント呼び出しコンテキスト652を作成することができ、当該コンポーネント呼び出しコンテキスト652は、呼び出しを表わすためのオブジェクトであり得る。一実施形態に従うと、決定されたコンポーネント呼び出しコンテキスト652は、要求次第で、パーティション識別子665または675に関連付けることができる。
【0064】
一実施形態に従うと、コンテナが決定を行って入来要求のコンポーネント呼び出しコンテキスト、すなわちオブジェクトを作成すると、コンテナは、コンポーネント呼び出しコンテキストをコンポーネント呼び出しコンテキストマネージャ650に間接的に登録することができ、当該コンポーネント呼び出しコンテキストマネージャ650は、スレッドローカルスタック651などのスタックを含み得て、当該スレッドローカルスタック651は、さらには、さまざまなコンポーネント呼び出しコンテキスト、たとえばコンポーネント呼び出しコンテキスト(A)〜(D)652〜655を含む。スレッドローカルスタック651は、コンポーネント呼び出しコンテキストをいくつ含んでもよく、図7に示される4つのコンポーネント呼び出しコンテキストに限定されるものではない。コンポーネント呼び出しコンテキストマネージャ650は、現在のコンポーネント呼び出しコンテキストの探索、登録および登録解除を可能にすることができる。
【0065】
一実施形態に従うと、コンポーネント呼び出しコンテキストの間接的な登録は、ワークマネージャ730によって実行することができる。たとえば、コンテナ640は、ワークマネージャ730を介して別個のスレッドにおいて非同期的に要求の次のレベルの処理をディスパッチすることができる。SPIは、スレッドにおけるコンポーネントコンテキストの設定を容易にすることができる。コンポーネント要求インターフェイス710は、コンテナ640によって提供されることができ、それ自体のコンポーネント呼び出しコンテキストに従って、要求に関連付けられた作業を実行することを可能にすることができる。コンポーネント要求インターフェイス710は、コンテナがターゲットコンポーネントの詳細(すなわちコンポーネント呼び出しコンテキスト戻り値)を提供するためのgetComponentInvocationContextなどのコマンドも含み得る。コンポーネント要求710インスタンスが実行される前に、ワークマネージャ730は、コンポーネント呼び出しコンテキストマネージャ650を探索して、getComponentInvocationContextコマンドによって提供されるコンポーネント呼び出しコンテキストを用いて新たなコンポーネント呼び出しコンテキストを登録することができる。コンポーネント要求710インスタンスの実行が完了すると、ワークマネージャ730は、コンポーネント呼び出しコンテキストマネージャからコンポーネント呼び出しコンテキストを自動的に除去することができる。
【0066】
一実施形態に従うと、CICマネージャは、現在の呼び出し要求のためのスレッドローカルスタックを用いることによってスレッドごとにCIC状態を維持することができる。なぜなら、要求は一般に単一のスレッドに関連付けられるからである。要求に対する作業が複数のスレッドによって処理される状況においては、異なるスレッドにおいて作業を実行するコンテナは、上記のgetComponentInvocationContextコマンドを利用して、スレッドのCICを新たなスレッドに渡すことを確実にすることができる。
【0067】
図8は、一実施形態に従ったアプリケーションサーバ環境におけるパーティション識別子の決定を示す。図8に示される実施形態では、アプリケーションサーバ環境600は、ドメイン620を含む。ドメイン620は、フロントエンドコンポーネント630と、コンテナ640と、CIC API645と、コンポーネント呼び出しコンテキストマネージャ(CICマネージャ)650と、パーティションA660と、パーティションB670と、仮想ターゲットA662と、仮想ターゲットB672とを含む。フロントエンドコンポーネントは、たとえばオラクル(商標)トラフィックディレクタなどの、入来要求を処理することができる任意のフロントエンドコンポーネントであり得る。コンテナ640は、たとえばJNDI、JMX、ロギング、RCMなどのパーティション認識型コンテナであり得る。パーティションAおよびBは、それぞれリソースグループ661および671を含み得る。リソースグループ661および671は、それぞれ仮想ターゲットA662および仮想ターゲットB672に関連付けることができる。CICマネージャ650は、スレッドローカルスタック651などのスタックを含み得る。
【0068】
一実施形態に従うと、コンテナ640は、getCurrentComponentInvocationなどのコマンドによってAPI645を介してコンポーネント呼び出しマネージャから現在のコンポーネント呼び出しコンテキストを検索することができる。たとえば、図8に示されるように、コンポーネント呼び出しコンテキストマネージャは、考えられるコンポーネント呼び出しコンテキスト、たとえばコンポーネント呼び出しコンテキスト(A)〜(D)652〜655の中から、現在はコンポーネント呼び出しコンテキスト652に設定されている。コンテナ640は、API645を介してコンポーネント呼び出しコンテキストマネージャ650から現在のコンポーネント呼び出しコンテキスト810を得ることができる。
【0069】
図9は、一実施形態に従ったマルチテナントアプリケーションサーバ環境におけるパーティション識別子の決定のための方法をフローチャートによって示す。例示的な方法900は、ステップ910から開始することができ、ステップ910では、アプリケーションサーバ環境が実行される1つ以上のコンピュータに、アプリケーションサーバ環境内で使用可能な複数のデプロイ可能なリソースと、各々がドメインの管理およびランタイム区分を提供する1つ以上のパーティションと、コンポーネント呼び出しコンテキストマネージャとをともに設け、コンポーネント呼び出しコンテキストマネージャはスタックを備える。当該方法はステップ920に進み、ステップ920では、当該方法は、パーティション認識型コンテナにおいて、1つ以上のコンポーネント呼び出しコンテキストを設定することができる。ステップ930において、当該例示的な方法は、続いて、パーティション認識型コンテナによって、現在のコンポーネント呼び出しコンテキストをコンポーネント呼び出しコンテキストマネージャに登録すること、または、コンポーネント呼び出しコンテキストマネージャにおいて現在のコンポーネント呼び出しコンテキストを探索することのうちの1つを実行する。当該例示的な方法は、ステップ940において終了することができ、ステップ940では、現在のコンポーネント呼び出しコンテキストを現在のパーティションに関連付ける。
【0070】
コンポーネント呼び出しコンテキストの伝搬
一実施形態に従うと、コンポーネント呼び出しコンテキストマネージャは、関連付けられた要求の期間中ずっと、コンポーネント呼び出しコンテキストの詳細の伝搬を担当することができる。パーティションコンテキスト情報は、ローカル呼び出し全体に伝搬することができる。コンポーネント呼び出しコンテキストの他のサブコンテキストは、どのコンポーネントが要求の処理に関与するかに基づいてそれぞれのコンテナによって決定することができる。コンポーネント呼び出しコンテキストは、どのAPIを用いてスレッドを生成するかにかかわらず、新たなスレッドが生成されるたびに自動的に受け継がれることができる。
【0071】
コンポーネント呼び出しコンテキストの検索
上記のように、一実施形態に従うと、コンポーネント呼び出しコンテキストの詳細(たとえばパーティションId)を必要とするいかなる内部コードまたは(JNDIなどの)コンテナも、コンポーネント呼び出しコンテキストマネージャを探索して、getCurrentComponentInvocationなどの方法を介して現在のコンポーネント呼び出しコンテキストを決定することができる。コンポーネント呼び出しコンテキストのパーティションIDは、グローバルパーティションIDおよびユーザパーティションIDを含むいくつかの値を有することができる。
【0072】
一実施形態に従うと、グローバルパーティションIDは、以下の状況で使用することができる。要求のターゲットコンポーネントがグローバルパーティション(すなわちドメイン)に存在するとサーバが判断すると、コンテナは、パーティションIDをグローバルパーティションのIDに設定することができる。また、グローバルパーティションIDは、ユーザパーティションに特有でない内部サーバ動作(たとえば、サーバランタイムの初期化/終了、コンテナのロードなど)で使用することができる。サーバランタイム時のこのような動作が特にパーティションを代表して行われているのではない場合、コンテナは、パーティションIDをグローバルパーティションのIDに設定することができる。他の実施形態では、グローバルパーティション作業と、パーティションidが共有システムパーティションを表わすようにすることによる共有作業とを区別することができる。
【0073】
一実施形態に従うと、ユーザパーティションIDは、以下の状況で使用することができる。要求がユーザパーティションに存在するコンポーネントをターゲットとする場合、サーバは、パーティションIDをユーザパーティションのIDに設定することができる。また、任意のサーバ動作が或るパーティション(たとえば、特定のパーティションのためのログファイルの自動回転)のために特別に実行される場合、コンポーネント呼び出しコンテキストにおいてパーティションのIDを設定することができる。
【0074】
一実施形態に従うと、現在のコンポーネント呼び出しコンテキストは、ヌルでない値である。たとえば、スレッドがコンテキストを確立させない状況においては、グローバルパーティションを表わす(すなわち、アプリケーション、モジュール、ならびにコンポーネントIDおよび名前のためのヌル値を有する)ヌルでないコンポーネント呼び出しコンテキストを返すことができる。別の例として、スレッドが作成されるが当該スレッドにおいて新たなコンテキストが確立されない状況においては、スレッドは、作成されたスレッドのコンテキストを自動的に受け継ぐことができる。
【0075】
コンポーネント呼び出しコンテキストスタック
一実施形態に従うと、要求が(たとえば、別のコンポーネントに対するローカルコールとして、たとえばenterprise JavaBean(EJB)をコールするサーブレットとして)複数のコンポーネントにまたがる状況においては、ターゲットコンテナ(この例においては、EJBコンテナ)は、EJB呼び出しを処理する前に、新たなモジュールおよびコンポーネントIDを含む新たなコンポーネント呼び出しコンテキストを確立することができる。また、ターゲットコンテナは、EJBコールが成功裏に完了すると、コンポーネント呼び出しコンテキストを設定解除することができる。コンポーネント呼び出しコンテキストマネージャは、コンポーネント呼び出しのリストをスタックとして内部で管理することができる。当該スタックは、呼び出しのコンテキスト内でなされるローカルコールに関連付けられたコンポーネント呼び出しコンテキストを表わすことができる。
【0076】
一例として、サーブレットS1がローカルEJB E1をコールする状況においては、コンポーネント呼び出しコンテキストマネージャは、サーブレットS1およびEJB E1に対応するコンポーネント呼び出しコンテキストのスタックを内部に維持することができる。EJB E1の実行中、componentinvocationcmanager.getCurrentComponentInvocationContext()に対するコールは、E1に対応するコンポーネント呼び出しコンテキストを現在のコンポーネント呼び出しコンテキストとして返すことができる。EJB E1の実行が完了するとすぐに、EJBコンテナは、E1に対応するコンポーネント呼び出しコンテキストを設定解除することができ、コンポーネント呼び出しコンテキストマネージャは、次いで、componentinvocationcontextmanager.getCurrentComponentInvocationContext()に対するいかなる後続のコールについても、S1に対応するコンポーネント呼び出しコンテキストを現在の呼び出しコンテキストとして確立するであろう。
【0077】
一実施形態に従うと、スタック内の全ての呼び出しオブジェクトを検索するための内部方法も利用可能にすることができる。
【0078】
API
ここで、一実施形態に従って、APIクラスおよびインターフェイスの例を列挙する。
【0079】
【数1】
【0080】
一実施形態に従って、APIクラスComponentInvocationContextManagerの例示的なインプリメンテーションを以下に記載する。
【0081】
【数2】
【0082】
ここで、さらなる例示的なAPIを記載する。
【0083】
【数3】
【0084】
この発明は、この開示の教示に従ってプログラミングされた1つ以上のプロセッサ、メモリおよび/またはコンピュータ読取り可能記憶媒体を含む、1つ以上の従来の汎用または特化型デジタルコンピュータ、コンピューティング装置、マシン、またはマイクロプロセッサを使用して都合よく実現されてもよい。ソフトウェア技術の当業者には明らかであるように、この開示の教示に基づいて、適切なソフトウェアコーディングが、熟練したプログラマによって容易に準備され得る。
【0085】
実施形態によっては、本発明は、本発明のプロセスのうちいずれかを実行するためにコンピュータをプログラムするのに使用できる命令が格納された非一時的な記憶媒体または(1つもしくは複数の)コンピュータ読取り可能な媒体であるコンピュータプログラムプロダクトを含む。この記憶媒体は、フロッピー(登録商標)ディスク、光ディスク、DVD、CD−ROM、マイクロドライブ、および光磁気ディスクを含む、任意の種類のディスク、ROM、RAM、EPROM、EEPROM、DRAM、VRAM、フラッシュメモリデバイス、磁気もしくは光カード、ナノシステム(分子メモリICを含む)、または、命令および/もしくはデータを格納するのに適した任意の種類の媒体もしくはデバイスを含み得るものの、これらに限定されない。
【0086】
本発明のこれまでの記載は例示および説明を目的として提供されている。すべてを網羅するかまたは本発明を開示された形態そのものに限定することは意図されていない。当業者には数多くの変更および変形が明らかであろう。当該変更および変形は、開示されている特徴の任意の関連の組み合わせを含む。実施形態は、本発明の原理およびその実際の応用を最もうまく説明することによって他の当業者がさまざまな実施形態および意図している特定の用途に適したさまざまな変形で本発明を理解できるようにするために、選択され説明されている。本発明の範囲は添付の特許請求の範囲およびそれらの同等例によって規定されるものと意図されている。
図1
図2
図3
図4
図5
図6
図7
図8
図9