Coherenceディストリビューションのexamples.zip
ファイルでは、多数のサンプル・コードが提供されています。これらのサンプルは、全言語(Java、.NETおよびC++)での基本的なCoherenceの機能、セキュリティおよびイベント機能の使用方法のデモです。サンプルは、1つまたは複数の使用方法を説明するコードのコレクションとして整理されています。また、各サンプルのビルドおよび実行方法は言語ごとに統一されています。
この付録の内容は、次のとおりです。
この付録で説明されているexamples.zip
ファイルのサンプルと、このチュートリアルの本体で説明されているサンプルには、多くの違いがあります。
examples.zip
のサンプルは、コマンド行からビルドおよび実行する必要があります。チュートリアルでは、コードのコンパイルおよび実行にIDEを使用しています。
examples.zip
ファイルのサンプルは、サポートされている全言語(Java、.NETおよびC++)での基本的なCoherenceの機能およびセキュリティの機能の使用方法のデモです。チュートリアルは、Javaの実装のみをカバーしています。
examples.zip
ファイル内のJavaのサンプルは、チュートリアルで説明されているJavaのサンプルのサブセットに過ぎません。
examples.zip
ファイル内のJavaコード・ファイルは、類似しているものの、チュートリアルで使用されているファイルと同一ではありません。多くのインスタンスでは、チュートリアルのコードはデモ用に簡略化されています。
Coherenceの基本機能のサンプルには、次のものが含まれています。
表A-1 Coherenceの基本機能のサンプル
サンプル名 | 説明 |
---|---|
基本データ・アクセス |
Coherenceデータ・グリッドからデータを「取得」、「挿入」および「削除」します。第A.5.3項「基本データ・アクセスのサンプル」を参照してください。 |
データのロード |
Coherenceデータ・グリッドにサンプル・データをロードします。第A.5.4項「ローダーのサンプル」を参照してください。 |
パラレル問合せ |
Coherenceデータ・グリッドの問合せを行います(索引の使用を含む)。第A.5.5項「問合せのサンプル」を参照してください。 |
Observable |
Coherenceデータ・グリッド内のデータの変化をリスニングします。第A.5.6項「オブザーバーのサンプル」を参照してください。 |
処理 |
データ自身がCoherenceデータ・グリッドにある共存データを処理します。第A.5.7項「プロセッサのサンプル」を参照してください。 |
問合せ言語 |
Coherenceの問合せ言語の使用方法です。第A.5.5項「問合せのサンプル」を参照してください。 |
Coherenceのセキュリティのサンプルには、次のものが含まれています。
表A-2 Coherenceのセキュリティのサンプル
サンプル名 | 説明 |
---|---|
パスワードのサンプル |
Coherenceへのアクセスにパスワードを要求します。第A.6.2項「パスワードのサンプル」を参照してください。 |
アクセス制御のサンプル |
簡略化されたロール・ベースのアクセス制御です。第A.6.3項「アクセス制御のサンプル」を参照してください。 |
パスワードIDトランスフォーマ |
必要なパスワードを含むカスタム・セキュリティ・トークンを作成し、プリンシパル名のリストを追加します。第A.6.4項「パスワードIDトランスフォーマ」を参照してください。 |
パスワード・アイデンティティ・アサータ |
セキュリティ・トークンに必要なパスワードが含まれることをアサートし、プリンシパル名のリストに基づいてサブジェクトを構成します。第A.6.5項「パスワード・アイデンティティ・アサータ」を参照してください。 |
資格が付与されるキャッシュ・サービス |
アクセス制御用にキャッシュ・サービスをラップします。第A.6.6項「資格が付与されるキャッシュ・サービス」を参照してください。 |
資格が付与される起動サービス |
アクセス制御用に起動サービスをラップします。第A.6.7項「資格が付与される起動サービス」を参照してください。 |
資格が付与される名前付きキャッシュ |
アクセス制御用に名前付きキャッシュをラップします。第A.6.8項「資格が付与される名前付きキャッシュ」を参照してください。 |
Coherenceのライブ・イベントのサンプルは、Javaプラットフォームのみで使用できます。これには次の機能が含まれます。
表A-3 Coherenceのライブ・イベントのサンプル
サンプル名 | 説明 |
---|---|
EventsExamples |
イベント・タイプで分割された平均経過時間、イベント後と比較したイベント前の例外スローの異なるセマンティクス、および有効になった際のパーティション移動のロギングなどを提供するライブ・イベントの様々な機能を示しています。第A.7.2項「EventsExamples」を参照してください。 |
TimedTraceInterceptor |
異なるタイプのイベントに対して、コミット前イベントとコミット後イベントの間のタイミングを提供します。第A.7.3項「TimedTraceInterceptor」を参照してください。 |
CantankerousInterceptor |
挿入されるキーに基づいて、コミット前時間またはコミット後時間のどちらかにランタイム例外で応答します。第A.7.4項「CantankerousInterceptor」を参照してください。 |
RedistributionInterceptor |
有効化された場合にパーティション・イベントをログに記録します。第A.7.5項「RedistributionInterceptor」を参照してください。 |
RedistributionInvocable |
クラスタの様々なメンバーで実行されるアクション可能な3つの状態を定義します。状態とは、RedistributionInterceptorによるロギングの有効化、ロギングの無効化、またはinvocable (RedistributionInvocable)が実行されているJVMの終了です。第A.7.6「RedistributionInvocable」を参照してください。 |
LazyProcessor |
イベントの処理間の実体のない遅延を作成します。第A.7.7項「LazyProcessor」を参照してください。 |
coherence_
version.jar
またはwls_
version.jar
インストーラ・ファイルでCoherenceの完全なインストールを実行することによって、examples.zip
ファイルを入手できます。Coherenceのサンプルは、Oracle Universal Installerのインストール・オプションに表示されます。
すでにサンプルなしでCoherenceをインストールしている場合は、coherence_quick_supp_
version.jar
サプリメンタル・インストーラ・ファイルを実行することでexamples.zip
ファイルを入手できます。サプリメンタル・インストーラには、APIのドキュメントおよびサンプルのみが含まれます。
coherence_quick_
version.jar
クイック・インストーラ・ファイルはサンプルやAPIのドキュメントをインストールしないことに注意してください。
examples.zip
ファイルの内容をexamples
ディレクトリに解凍します。
注意: .NETおよびC++用であっても、Javaのサンプルをビルドおよび実行する必要があります。これは、キャッシュ・サーバーはJavaで実行されているためです。 |
この項には次の情報が含まれます:
この項には次の情報が含まれます:
サンプルをビルドするには、Coherenceバージョン3.7以上およびJava development kit (JDK) 1.6以上が必要です。次の環境変数が設定されていることを確認します。
環境変数 | 説明 |
---|---|
|
|
|
サンプルをビルドする前に、 |
次で説明するディレクトリ構造は、examples
ディレクトリを基準としたものです。
表A-4 Javaでのディレクトリ構造
ディレクトリ名 | 説明 |
---|---|
|
サンプルをビルドおよび実行するスクリプトです。2セットのスクリプトがあります。ファイルの拡張子がないスクリプトは、bashスクリプトです。ファイルの拡張子が
|
|
すべてのサンプルのソースです。サンプルは、 |
|
ビルドによって出力されるクラス・ファイルです。このディレクトリは、ビルド・スクリプトを実行するまで存在しません。 |
|
サンプルに必須の共通Coherence構成ファイルです。 |
|
サンプルが共通構成のかわりとなる構成を必要とする場合、それは自身のディレクトリにあります。セキュリティのサンプルは、 |
|
サンプルのコンパイルおよび実行に使用されるCoherenceのライブラリです。 |
サンプル・コレクションの名前とともにビルド・スクリプトを実行します。たとえば、bin/build
contacts
、bin/build
security
、またはbin/build
events
のようにします。
スクリプトによってPOFパッケージ・ファイルがビルドされ、次に特定のサンプルのファイルがビルドされます。Windowsでは、ディレクトリを/bin
ディレクトリに変更してからスクリプトを実行します。
この項には次の情報が含まれます:
サンプルをビルドするには、Coherence for .NETバージョン3.7以上およびVisual Studio 2008以上またはVisual Studio 2008 Express以上が必要です。
サンプルを実行するには、Coherence 3.7以上のJavaバージョンおよびJava development kit (JDK) 1.6以上が必要です。Coherence*Extendプロキシおよびキャッシュ・サーバーにはJavaが必要であるため、Javaバージョンが必要になります。また、サンプルはプロキシおよびキャッシュ・サーバーを実行する前にビルドする必要があるJavaサンプル・クラスに依存しています。ビルドおよび実行方法の手順は、Javaサンプルのreadme.txt
ファイルを参照してください。Javaのrun-proxy
スクリプトを実行する必要があることに注意してください。プロキシは記憶域が有効であるため、Javaのrun-cache-server
はオプションです。
次で説明するディレクトリ構造は、examples
ディレクトリを基準としたものです。
表A-5 .NETでのディレクトリ構造
ディレクトリ名 | 説明 |
---|---|
dotnet\src |
すべてのサンプルのソースです。サンプルは、 サンプルは、Visual Studio 2008のサンプル・ソリューションの中にあります。 サンプルに必須のCoherence構成ファイルです。 |
|
サンプルに必須の共通Coherence構成ファイルです。 |
|
サンプルが共通構成のかわりとなる構成を必要とする場合、それは自身のディレクトリにあります。セキュリティのサンプルは、 |
Visual Studioでexamples\dotnet\src\contacts.csproj
ディレクトリからサンプル・プロジェクトを開く
.NET Framework用のCoherence 3.7をインストールする際に、インストーラがアセンブリ・レジストリにcoherence.dll
ライブラリを登録します。含まれているVisual Studioプロジェクトは、デフォルトの場所にあるcoherence.dll
を参照しています。別のバージョンのライブラリが必要な場合、またはデフォルトの場所にインストールされていない場合は、参照を構成する際にCoherence参照がオーバーライドされる可能性があります。local
copy
属性をtrue
に設定していることを確認してください。この設定によって、bin\debug
ディレクトリにある正しいcoherence.dll
がコピーされて登録されます。
必要なCoherence 3.7 for .NETが構成された後、Visual Studioでメニューから「Build」→「Build Solution」を選択するか、「Build Solution」 (F6)などを選択してソリューションをビルドします。
contacts
サンプルをビルドすると、resource\contacts.csv
がビルド出力ディレクトリ(examples\dotnet\src\bin\Debug
)にコピーされます。
この項には次の情報が含まれます:
サンプルを実行するには、Coherence 3.7以上のJavaバージョンおよびJava development kit (JDK) 1.6以上が必要です。Coherence*Extendプロキシおよびキャッシュ・サーバーにはJavaが必要であるため、Javaバージョンが必要になります。また、サンプルはプロキシおよびキャッシュ・サーバーを実行する前にビルドする必要があるJavaサンプル・クラスに依存しています。ビルドおよび実行方法の手順は、Javaサンプルのreadme.txtを参照してください。Javaのrun-proxyスクリプトを実行する必要があることに注意してください。プロキシは記憶域が有効であるため、Javaのrun-cache-serverはオプションです。
次の環境変数が設定されていることを確認します。
環境変数 | 説明 |
---|---|
|
|
|
サンプルをビルドする前に、 |
|
|
次で説明するディレクトリ構造は、examples
ディレクトリを基準としたものです。
表A-6 C++でのディレクトリ構造
ディレクトリ名 | 説明 |
---|---|
|
サンプルをビルドおよび実行するスクリプトです。ファイルの拡張子がないスクリプトは、bashスクリプトです。ファイルの拡張子が |
|
|
|
|
|
|
|
データ・モデルはこのディレクトリ内に加え、シリアライズされるクラスで表されます。これは、既存のデータ・モデルの使用方法を示し、Coherence内で公開するためです。モデル・クラスにはいかなるCoherence固有のコードも含まれていないことが、この点を立証しています。ただし、各モデル・タイプに関連付けられているシリアライザがあります。たとえば 生成される出力は、動的ライブラリ形式です。 |
|
サンプルに必須の共通Coherence構成ファイルです。 |
|
サンプルが共通構成のかわりとなる構成を必要とする場合、それは自身のディレクトリにあります。セキュリティのサンプルは、 |
|
ビルドによって出力されるオブジェクト・ファイルです。このディレクトリは、ビルド・スクリプトを実行するまで存在しません。 |
|
Coherenceのヘッダー・ファイルが含まれています。 |
|
Coherenceのライブラリが含まれています。 |
この項には次の情報が含まれます:
WindowsでのC++のビルド手順
開発環境のコマンド・プロンプトを開きます。これは、Visual StudioまたはプラットフォームSDKとともにインストールされているはずです。C++ examples
ディレクトリに移動し、bin\build.cmd <
example name
>
と入力します。これによって、pof
(モデル)およびexample
実行可能ファイルの両方がビルドされます。たとえば、bin\build.cmd
contacts
またはbin\build.cmd
security
と入力します。
モデルは、pof.lib
およびpof.dll
ファイルをcpp\pof\out
の下に配置します。これらは、contacts
およびsecurity
サンプルのビルドおよび実行に必要です。
実行可能ファイルcontacts.exe
は、cpp\contacts\out
ディレクトリに生成されます。実行可能ファイルsecurity.exe
は、cpp\security\out
ディレクトリに生成されます。
contacts
サンプルを実行するには、プロキシ・サーバー、java\bin\run-proxy
および追加のキャッシュ・サーバーjava\bin\run-cache-server
を起動してから、bin\run.cmd contacts
と入力します。
また、任意のコマンド・ウィンドウよりcd
でC++ bin
ディレクトリに移動し、サンプルをビルドする前にvcvars32.bat
を実行することもできます。デフォルトのVisual Studioのインストールでは、bin
ディレクトリはC:\Program Files\Mircorsoft
Visual
Studio
9.0\vc\bin
です。前の手順に従い、build
スクリプトを実行します。
Linux/MacおよびSolarisでのC++のビルド手順
コマンド・シェルを開きます。C++ examples
ディレクトリに移動し、bin/build <
example name
>
と入力します。これによって、pof
(モデル)およびcontacts
サンプル実行可能ファイルの両方がビルドされます。
モデルの動的ライブラリおよびlib
ファイルがcpp/pof/out
に配置されます。これらは、contacts
およびsecurity
サンプルのビルドおよび実行に必要です。
実行可能ファイルであるcontactsが、cpp/contacts/out
またはcpp/security/out
に生成されます。
この項には次の情報が含まれます:
この項には次の情報が含まれます:
サンプルを実行するには、Coherenceバージョン3.7およびJava development kit (JDK) 1.6以上が必要です。
環境変数 | 説明 |
---|---|
|
|
|
サンプルをビルドする前に、 |
次で説明するディレクトリ構造は、サンプルを解凍したexamples
ディレクトリを基準としたものです。
表A-7 Javaでのディレクトリ構造
ディレクトリ名 | 説明 |
---|---|
|
サンプルをビルドおよび実行するスクリプトです。2セットのスクリプトがあります。ファイルの拡張子がないスクリプトは、bashスクリプトです。ファイルの拡張子が
|
|
ビルドによって出力されるクラス・ファイルです。このディレクトリは、ビルド・スクリプトを実行するまで存在しません。 |
|
サンプルに必須の共通Coherence構成ファイルです。 |
|
サンプルが共通構成のかわりとなる構成を必要とする場合、それは自身のディレクトリにあります。 |
|
サンプルのコンパイルおよび実行に使用されるCoherenceのライブラリです。 |
|
連絡先サンプルの |
run
スクリプトを実行します。サンプルの実行は、2つの部分から構成されています。
連絡先のサンプル
bin/run-cache-server
で1つ以上のキャッシュ・サーバーを起動します。実行するたびにキャッシュ・サーバー・クラスタ・ノードが起動します。ノードを追加するには、新しいコマンド・シェルでコマンドを実行します。
新しいコマンド・シェルで、サンプルの名前を使用してbin/run contacts
を実行します。Driver.main
メソッドがサンプルの機能を実行し、出力はコマンド・ウィンドウ(stdout
)に送られます。
Coherence 3.7以上では、新しい問合せ言語機能のサンプルが追加されています。このサンプルは、Coherence InvocationService
を使用する簡単なヘルパー・クラスFilterFactory
の構成および使用方法を示しています。
セキュリティのサンプル
security
サンプルには、プロキシを使用するCoherence*Extendが必要です。
bin/run-proxy security
を実行して、プロキシを起動します。
オプションで、contacts
サンプルで説明されているように、1つ以上のキャッシュ・サーバーを起動します。プロキシは記憶域が有効であるため、プロキシおよびキャッシュ・サーバー・ノードの両方のように動作します。
新しいコマンド・シェルで、サンプルの名前を使用してbin/run security
を実行します。Driver.main
メソッドがサンプルの機能を実行し、出力はコマンド・ウィンドウ(stdout
)に送られます。
イベントのサンプル
bin/run-cache-server
で1つ以上のキャッシュ・サーバーを起動します。実行するたびにキャッシュ・サーバー・クラスタ・ノードが起動します。ノードを追加するには、新しいコマンド・シェルでコマンドを実行します。
新しいコマンド・シェルで、サンプルの名前を使用してbin/run events
を実行します。Driver.main
メソッドがサンプルの機能を実行し、出力はコマンド・ウィンドウ(stdout
)に送られます。
この項には次の情報が含まれます:
サンプルを実行するには、Coherence for .NETバージョン3.7以上およびVisual Studio 2008以上が必要です。サンプルを実行するには、Javaサンプルをビルドする必要もあります。Coherence*Extendプロキシおよびキャッシュ・サーバーにはJavaが必要であるため、Javaバージョンが必要になります。
また、サンプルはプロキシおよびキャッシュ・サーバーを実行する前にビルドする必要があるJavaサンプル・クラスに依存しています。
次で説明するディレクトリ構造は、「examples
」ディレクトリを基準としたものです。
次の項には、contacts
およびsecurity
サンプルの実行手順が含まれています。
contacts
Javaの手順に従い、1つのプロキシ・サーバー(run-proxy
)およびゼロ個以上のキャッシュ・サーバー(run-cache-server
)を起動します。
Visual Studioからcontacts
プロジェクトをデバッグなしで起動するか、コマンド・シェルのビルドで生成されたcontacts.exe
を実行します。Driver.Main
メソッドがサンプルの機能を実行し、出力はコマンド・ウィンドウ(stdout)に送られます。
Coherence 3.7以上では、新しい問合せ言語機能の新しいサンプルが統合されました。このサンプルは、Coherence InvocationService
を使用する簡単なヘルパー・クラス「FilterFactory
」の構成および使用方法を示しています。
security
Javaのreadme.txtの手順に従い、1つのプロキシ・サーバー(java/bin/run-proxy security
)およびゼロ個以上のキャッシュ・サーバーを起動します。
Visual Studioからsecurityプロジェクトをデバッグなしで起動するか、コマンド・シェルのビルドで生成されたcontacts.exe
を実行します。Driver.Main
メソッドがサンプルの機能を実行し、出力はコマンド・ウィンドウ(stdout)に送られます。
この項には次の情報が含まれます:
サンプルをビルドするには、Coherenceバージョン3.7の適切なC++ライブラリが必要です。また、C++開発環境も必要です。サンプルを実行するには、Javaサンプルをビルドする必要もあります。Coherence*Extendプロキシおよびキャッシュ・サーバーにはJavaが必要であるため、Javaバージョンが必要になります。また、サンプルはプロキシおよびキャッシュ・サーバーを実行する前にビルドする必要があるJavaサンプル・クラスに依存しています。
環境変数 | 説明 |
---|---|
|
|
サポートされているC++コンパイラ:
Windows—Microsoft Visual C++ Express/Studio 2008以上または同等のプラットフォームSDK
Linux—g++ 4.0
Mac—g++ 4.0
次で説明するディレクトリ構造は、examples
ディレクトリを基準としたものです。
表A-9 C++でのディレクトリ構造
ディレクトリ名 | 説明 |
---|---|
|
サンプルをビルドおよび実行するスクリプトです。ファイルの拡張子がないスクリプトは、bashスクリプトです。ファイルの拡張子が
|
|
|
|
ビルドによって出力されるオブジェクト・ファイルです。このディレクトリは、ビルド・スクリプトを実行するまで存在しません。 |
|
contactsのLoaderExampleに使用するデータ・ファイルcontacts.csvです。 |
|
|
|
|
|
|
|
Coherenceのヘッダー・ファイルが含まれています。 |
|
Coherenceのライブラリが含まれています。 |
run
スクリプトを実行します。サンプルの実行は、2つの部分から構成されています。新しいコマンド・シェルから次を実行します。
連絡先のサンプル
java/bin/run-proxy contacts
を実行して、1つのプロキシ・サーバーを起動します。
オプションで、bin/run-cache-server
を実行して1つ以上のキャッシュ・サーバーを起動します。実行するたびにキャッシュ・サーバー・クラスタ・ノードが起動します。ノードを追加するには、新しいコマンド・シェルでコマンドを実行します。
新しいコマンド・シェルで、runにサンプルの名前を付けて実行します。
連絡先サンプルをWindowsで実行する場合:
bin\run.cmd
contacts
と入力
連絡先サンプルをLinux/MacおよびSolarisで実行する場合:
bin/run
contacts
と入力
Driver.main
メソッドがサンプルの機能を実行し、出力はコマンド・ウィンドウ(stdout
)に送られます。
Coherence 3.7以上では、新しい問合せ言語機能のサンプルが追加されています。このサンプルは、Coherence InvocationService
を使用する簡単なヘルパー・クラスFilterFactory
の構成および使用方法を示しています。
セキュリティのサンプル
java/bin/run-proxy security
を実行して、1つのプロキシ・サーバーを起動します。
オプションで、bin/run-cache-server
を実行して1つ以上のキャッシュ・サーバーを起動します。実行するたびにキャッシュ・サーバー・クラスタ・ノードが起動します。ノードを追加するには、新しいコマンド・シェルでコマンドを実行します。
新しいコマンド・シェルで、run
にサンプルの名前を付けて実行します。
セキュリティ・サンプルをWindowsで実行する場合:
bin\run.cmd
security
と入力
セキュリティ・サンプルをLinux/MacおよびSolarisで実行する場合:
bin/run
security
と入力
Driver.main
メソッドがサンプルの機能を実行し、出力はコマンド・ウィンドウ(stdout
)に送られます。
Coherenceの基本機能のサンプルは、単純化された連絡先情報をトラッキングすることによってCoherenceの基本機能の使用方法を説明するサンプルのコレクションで、次のものが含まれています。
基本データ・アクセス—Coherenceデータ・グリッドからデータを「取得」、「挿入」および「削除」します。第A.5.3項「基本データ・アクセスのサンプル」を参照してください。
データのロード—Coherenceデータ・グリッドにサンプル・データをロードします。第A.5.4項「ローダーのサンプル」を参照してください。
パラレル問合せ—Coherenceデータ・グリッドの問合せを行います(索引の使用を含む)。第A.5.5項「問合せのサンプル」を参照してください。
Observable—Coherenceデータ・グリッド内のデータの変化をリスニングします。第A.5.6項「オブザーバーのサンプル」を参照してください。
処理—データ自身がCoherenceデータ・グリッドにある共存データを処理します。第A.5.7項「プロセッサのサンプル」を参照してください。
問合せ言語—新しい3.6 Coherenceの問合せ言語の使用方法です。第A.5.8項「問合せ言語」を参照してください。
このサンプル・セットは、これらのデータ・モデル・クラスで表されるサンプル・データを使用します。
表A-10 機能サンプル用のデータ・モデル・クラス
名前 | 説明 |
---|---|
|
アドレス情報 |
|
連絡先情報(住所および電話番号を含む) |
|
連絡先情報へのキー(連絡先名) |
|
電話番号 |
このサンプル・セットには、サンプルのContacts
情報を含むカンマ区切り値のファイルであるcontacts.csv
ファイルも付属しています。
ドライバ・ファイルには、すべての連絡先サンプルを次の順番で実行するstaticメソッドmain
があります。
LoaderExample
QueryExample
QueryLanguageExample
ObserverExample
BasicExample
ProcessorExample
ドライバ・ファイルは、Coherenceをサポートしている3つのプログラミング言語のそれぞれで実装されています。
言語 | 実装クラス |
---|---|
Java |
|
.NET |
|
C++ |
|
次の概要が示されている各サンプルの詳細は、サンプル・セットのexamples.zip
ファイルを参照してください。
このサンプルは、データの取得、挿入および削除を含むCoherenceの最も基本的なデータ・アクセス機能を示しています。
Java
実装クラス: java/src
内のcom.tangosol.examples.contacts.BasicExample
キャッシュでのContactId
のContact
との関連付け:
cache.put(contactId, contact);
ContactId
と関連付けられたContact
をキャッシュから取得:
contact = (Contact) cache.get(contactId);
ContactId
からContact
へのマッピングをキャッシュから削除:
cache.remove(contactId);
.NET
実装クラス: dotnet/src/contacts
のTangosol.Examples.Contacts
ネームスペース内にあるBasicExample
キャッシュでのContactId
のContact
との関連付け:
cache.Add(contactId, contact);
ContactId
と関連付けられたContact
をキャッシュから取得:
contact = (Contact)cache[contactId];
ContactId
からContact
へのマッピングをキャッシュから削除:
cache.Remove(contactId);
C++
実装クラス: cpp/contacts
のcoherence::examples
ネームスペース内にあるBasicExample
キャッシュでのContactId
のContact
との関連付け:
hCache->put(vContactId, vContact);
ContactId
と関連付けられたContact
をキャッシュから取得:
vContact = cast<Managed<Contact>::View>(hCache->get(vContactId));
ContactId
からContact
へのマッピングをキャッシュから削除:
hCache->remove(vContactId);
出力例(「オブザーバのサンプル」による):
例A-1 基本データ・アクセスのサンプルの出力例
entry inserted: John Nocyefqgqo Addresses Home: 1500 Boylston St. null Obopnof, NM 88824 US Work: 8 Yawkey Way null Ssedhvmdeq, OR 84217 US Phone Numbers work: +11 0 707 3776578 Birth Date: 1971-12-31 entry deleted: John Nocyefqgqo Addresses Home: 1500 Boylston St. null Obopnof, NM 88824 US Work: 8 Yawkey Way null Ssedhvmdeq, OR 84217 US Phone Numbers work: +11 0 707 3776578 Birth Date: 1971-12-31
このサンプルは、ファイルまたはストリームからキャッシュに連絡先をロードします。
ここでは、バルク挿入を使用する最も効率的なキャッシュへのデータの挿入方法を示します。これによって、アプリケーションとキャッシュの間のネットワーク・ラウンドトリップの数が最小化されます。
Java
実装クラス: java/src
内のcom.tangosol.examples.contacts.LoaderExample
cache.putAll(mapBatch);
.NET
実装クラス: dotnet/src/contacts
のTangosol.Examples.Contacts
ネームスペース内にあるLoaderExample
cache.InsertAll(dictBatch);
C++
実装クラス: cpp/contacts
のcoherence::examples
ネームスペース内にあるLoaderExample
hCache->putAll(hMapBatch);
QueryExample
は連絡先を問い合せるサンプルを実行します。
このサンプルの目的は、キャッシュ・データ上にExtractors
を作成する方法およびキャッシュ・キー用のKeyExtractor
を作成する方法を説明することです。また、索引を使用してデータセットをフィルタし、効率的に一致セットを作成する方法も示します。最後に、いくつかの内蔵キャッシュ・アグリゲータを使用してキャッシュ・データに対して簡単な計算タスクを行う方法についても示します。コードのサブセットを次に示します。
Java
実装クラス: java/src
内のcom.tangosol.examples.contacts.QueryExample
問合せをさらに効率化する索引を追加
cache.addIndex(new ChainedExtractor("getHomeAddress.getState"), /*fOrdered*/ false, /*comparator*/ null);
すべてのMassachusettsに住む人の連絡先を検索
Set setResults = cache.entrySet(new EqualsFilter("getHomeAddress.getState", "MA"));
キャッシュ・データセット全体でnAge
よりも年齢が高い人の連絡先をカウント
System.out.println("count > " + nAge + ": " + cache.aggregate(new GreaterFilter("getAge", nAge), new Count()));
.NET
実装クラス: dotnet/src/contacts
のTangosol.Examples.Contacts
ネームスペース内にあるQueryExample
問合せをさらに効率化する索引を追加
cache.AddIndex(new ChainedExtractor("getHomeAddress.getState"),/*fOrdered*/ false, /*comparator*/ null);
すべてのMassachusettsに住む人の連絡先を検索
ICacheEntry[] aCacheEntry = cache.GetEntries(new EqualsFilter("getHomeAddress.getState", "MA"));
キャッシュ・データセット全体でnAge
よりも年齢が高い人の連絡先をカウント
Console.WriteLine("count > " + nAge + ": "+ cache.Aggregate(new GreaterFilter("getAge", nAge), new Count()));
C++
実装クラス: cpp/contacts
のcoherence::examples
ネームスペース内にあるQueryExample
問合せをさらに効率化する索引を追加
ValueExtractor::View vHomeStateExtractor = ChainedExtractor::create( ChainedExtractor::createExtractors("getHomeAddress.getState"));
すべてのMassachusettsに住む人の連絡先を検索
Object::View voStateName = String::create("MA"); Set::View setResults = hCache->entrySet( EqualsFilter::create(vHomeStateExtractor, voStateName));
キャッシュ・データセット全体でnAge
よりも年齢が高い人の連絡先をカウント
Integer32::View nAge = Integer32::valueOf(58); Object::View vResult = hCache->aggregate( (Filter::View) GreaterFilter::create(vAgeExtractor, nAge), Count::create()); std::cout << "count > " << nAge->getValue() << ": " << vResult << std::endl;
10,000件の連絡先および複数の問合せがあるため、出力例は大きくなります。次は、Massachusetts居住者の問合せのサンプルです。
例A-3 問合せのサンプルの出力例
MA Residents ConverterEntry{Key="John Scqngqda", Value="John Scqngqda Addresses Home: 265 Beacon St. Oaskxm, MA 88259 US Work: Yoyodyne Propulsion Systems 330 Lectroid Rd. Grover's Mill, OK 95744 US Phone Numbers work: +11 88 903 8991283 home: +11 98 553 5878221 Birth Date: 1960-01-03"}
ObserverExample
は、MapListener
を使用してキャッシュ・データの挿入、更新および削除などのキャッシュ・イベントをモニターする方法を示します。コードのサブセットを次に示します。
Java
実装クラス: java/src
内のcom.tangosol.examples.contacts.ObserverExample
ContactChangeListener
はMapListener
インタフェースを実装するクラス
cache.addMapListener(new ContactChangeListener());
.NET
実装クラス: dotnet/src/contacts
のTangosol.Examples.Contacts
ネームスペース内にあるObserverExample
ContactChangeListener
はICacheListener
インタフェースを実装するクラス
cache.AddCacheListener(new ContactChangeListener());
C++
実装クラス: cpp/contacts
のcoherence::examples
ネームスペース内にあるObserverExample
ContactChangeListener
はCoherence extend
マクロを使用してMapListener
型を拡張したクラス
ContactChangeListener::Handle hListener = ContactChangeListener::create(); hCache->addFilterListener(hListener);
ContactChangeListener
の定義:
class ContactChangeListener : public class_spec<ContactChangeListener, extends <MapListener> >
このサンプルを実行しても、即座に出力はされません。エントリが挿入、更新および削除されると、登録されたリスナーによってそれが出力されます。更新の場合、古い値および新しい値の両方が出力されます。「基本データ・アクセスのサンプル」および「プロセッサのサンプル」を実行すると、エントリが変更されて出力が発生します。
ProcessorExample
は、プロセッサを使用してキャッシュ内のデータ・セットを変更する方法を示します。次のコード・サンプルでは、MAに住むすべての人の連絡先の勤務先アドレスが更新されます。
Java
実装クラス: java/src
内のcom.tangosol.examples.contacts.ProcessorExample
ヘルパー・クラス: java/src
内のcom.tangosol.examples.contacts.OfficeUpdater
MAに住むすべての人の連絡先にOfficeUpdater
を適用。OfficeUpdater
は、AbstractProcessor
を拡張することによってInvocableMap.EntryProcessor
インタフェースを実装しているクラス
cache.invokeAll(new EqualsFilter("getHomeAddress.getState", "MA"), new OfficeUpdater(addrWork));
.NET
実装クラス: dotnet/src/contacts
のTangosol.Examples.Contacts
ネームスペース内にあるProcessorExample
ヘルパー・クラス: dotnet/src/contacts
のTangosol.Examples.Contacts
ネームスペース内にあるOfficeUpdater
MAに住むすべての人の連絡先にOfficeUpdater
を適用。OfficeUpdater
は、AbstractProcessor
を拡張することによってIEntryProcessor
インタフェースを実装しているクラス
cache.InvokeAll(new EqualsFilter("getHomeAddress.getState", "MA"), new OfficeUpdater(addrWork));
C++
実装クラス: cpp/contacts
のcoherence::examples
ネームスペース内にあるProcessorExample
ヘルパー・クラス: cpp/contacts
のcoherence::examples
ネームスペース内にあるOfficeUpdater
OfficeUpdater
はUpdaterProcessor
型を拡張したクラス
class OfficeUpdater : public class_spec<OfficeUpdater, extends<UpdaterProcessor>, implements<PortableObject> >
MAに住むすべての人の連絡先にOfficeUpdater
を適用。
Filter::View vEqualsFilter = EqualsFilter::create( ChainedExtractor::create(ChainedExtractor::createExtractors( "getHomeAddress.getState")), String::create("MA")); InvocableMap::EntryProcessor::Handle hOffice = OfficeUpdater::create(addrWork); Map::View vMap = hCache->invokeAll(vEqualsFilter, hOffice);
出力例(「オブザーバのサンプル」による)は、連絡先の件数が多いため大きくなります。次のように出力されます。
例A-4 プロセッサのサンプルの出力例
entry updated old value: John Keau Addresses Home: 443 Beacon St. Ophvowvw, MA 06539 US Work: Yoyodyne Propulsion Systems 330 Lectroid Rd. Grover's Mill, FL 86812 US Phone Numbers work: +11 8 919 9456102 home: +11 25 759 588823 Birth Date: 1968-12-31 new value: John Keau Addresses Home: 443 Beacon St. Ophvowvw, MA 06539 US Work: 200 Newbury St. Yoyodyne, Ltd. Boston, MA 02116 US Phone Numbers work: +11 8 919 9456102 home: +11 25 759 588823 entry updated old value: John Lbggblkd Addresses Home: 929 Beacon St. Trwylbmf, MA 50358 US Work: Yoyodyne Propulsion Systems 330 Lectroid Rd. Grover's Mill, AZ 19164 US Phone Numbers work: +11 60 699 203810 home: +11 34 149 5018157 Birth Date: 1964-01-02 new value: John Lbggblkd Addresses Home: 929 Beacon St. Trwylbmf, MA 50358 US Work: 200 Newbury St. Yoyodyne, Ltd. Boston, MA 02116 US Phone Numbers work: +11 60 699 203810 home: +11 34 149 5018157 Birth Date: 1964-01-02 Birth Date: 1968-12-31
このサンプルは、連絡先を問い合せるサンプルの実行方法を示しています。
Java
実装クラス: java/src
内のcom.tangosol.examples.query.QueryExample
問合せをさらに効率化する索引を追加
cache.addIndex(ff.createExtractor("age"), /*fOrdered*/ true, /*comparator*/ null); cache.addIndex(ff.createExtractor("homeAddress.state"), /*fOrdered*/ false, /*comparator*/ null);
すべてのMassachusettsに住む人の連絡先を検索
Set setResults = cache.entrySet(ff.createFilter("homeAddress.state = 'MA'"));
キャッシュ・データセット全体でnAge
よりも年齢が高い人の連絡先をカウント
final int nAge = 58; Object[] aEnv = new Object[] {new Integer(nAge)}; System.out.println("count > " + nAge + ": " + cache.aggregate(ff.createFilter("age > ?1", aEnv), new Count()));
.NET
実装クラス: dotnet/src/query
のTangosol.Examples.Query
ネームスペース内にあるSimpleQueryExample
問合せをさらに効率化する索引を追加
cache.AddIndex(ff.CreateExtractor("age"), /*fOrdered*/ true, /*comparator*/ null); cache.AddIndex(ff.CreateExtractor("homeAddress.state"), /*fOrdered*/ false, /*comparator*/ null);
すべてのMassachusettsに住む人の連絡先を検索
ICollection results = cache.GetEntries(ff.CreateFilter("homeAddress.state = 'MA'"));
キャッシュ・データセット全体でage
よりも年齢が高い人の連絡先をカウント
const int age = 58; object[] env = new object[] { age }; results = cache.GetEntries(ff.CreateFilter("age > ?1", env));
C++
実装クラス: cpp/query
のcoherence::examples
ネームスペース内にあるSimpleQueryExample
問合せをさらに効率化する索引を追加
hCache->addIndex(hff->createExtractor("age"), /*fOrdered*/ true, /*vComparator*/ NULL); hCache->addIndex(hff->createExtractor("homeAddress.state"), /*fOrdered*/ false, /*vComparator*/ NULL);
すべてのMassachusettsに住む人の連絡先を検索
Set::View setResults = hCache->entrySet(hff->createFilter("homeAddress.state is 'MA'")); s
キャッシュ・データセット全体でnAge
よりも年齢が高い人の連絡先をカウント
Integer32::View nAge = Integer32::valueOf(58); ObjectArray::Handle haEnv = ObjectArray::create(1); haEnv[0] = nAge; HashMap::Handle hbinds = HashMap::create(); hbinds->put(String::create("nAge"), nAge); setResults = hCache->entrySet(hff->createFilter("age > ?1", haEnv));
出力例(「問合せのサンプル」による):
例A-5 問合せ言語のサンプルの出力例
MA Residents ConverterCacheEntry{Key="John Wmbltik", Value="John Wmbltik Addresses Home: 785 Beacon St. Vpmji, MA 34400 US Work: 200 Newbury St. Yoyodyne, Ltd. Boston, MA 02116 US Phone Numbers work: +11 62 133 6144503 home: +11 17 238 6189757 Birth Date: 1/1/1968 12:00:00 AM"} ConverterCacheEntry{Key="John Dtpx", Value="John Dtpx Addresses Home: 673 Beacon St. Mvblms, MA 25889 US Work: 200 Newbury St. Yoyodyne, Ltd. Boston, MA 02116 US Phone Numbers work: +11 89 900 8436918 home: +11 32 686 9582798 Birth Date: 1/3/1960 12:00:00 AM"} . . . count > 58 : 496
Coherenceのセキュリティのサンプルは、Coherenceのセキュリティ機能を使用してアクセス制御を提供する方法を説明するサンプルのコレクションです。
これらのサンプルは、Coherenceのセキュリティ機能のみを説明するように簡略化されています。セキュリティのベスト・プラクティスのサンプルではありません。
「パスワードのサンプル」—Coherenceプロキシがキャッシュにアクセスするためにパスワードを要求する方法を説明します。
「アクセス制御のサンプル」—簡略化されたロール・ベースのアクセス制御を説明します。
「パスワードIDトランスフォーマ」—必要なパスワードを含むカスタム・セキュリティ・トークンを作成し、プリンシパル名のリストに追加します。
「パスワード・アイデンティティ・アサータ」—セキュリティ・トークンに必要なパスワードが含まれることをアサートし、プリンシパル名のリストに基づいてサブジェクトを構成します。
「資格が付与されるキャッシュ・サービス」—アクセス制御用にキャッシュ・サービスをラップします。
「資格が付与される起動サービス」—アクセス制御用に起動サービスをラップします。
「資格が付与される名前付きキャッシュ」—アクセス制御用に名前付きキャッシュをラップします。
パスワードを要求するキャッシュ参照を取得します。
異なるロールを必要とするキャッシュおよび起動サービス操作を試行します。
すべてのセキュリティ・サンプルを次の順番で実行するstaticメソッドmain
があります。
PasswordExample
AccessControlExample
.accessCache()
AccessControlExample.accessInvocationService()
Coherenceをサポートしている3つのプログラミング言語のそれぞれで実装されています。
言語 | 実装クラス |
---|---|
Java |
|
.NET |
|
C++ |
|
次の概要が示されている各サンプルの詳細は、サンプル・セットのexample.zip
ファイルを参照してください。
このサンプルは、Coherenceプロキシがキャッシュへの参照を取得するためにパスワードを要求する方法を示しています。
Java
実装クラス: java/src
内のcom.tangosol.examples.security.PasswordExample
コードは、Subject
を取得するためにログインし、そのサブジェクトのコンテキストで実行中のキャッシュ参照を取得しようとします。
「パスワードIDトランスフォーマ」は、パスワードを含むセキュリティ・トークンを生成します。「パスワード・アイデンティティ・アサータ」(プロキシ内で実行)は、パスワードを強制するためにセキュリティ・トークンを検証します。トークンは、プロキシへの接続時に自動的に生成および検証されます。
.NET
実装クラス: dotnet/src/security
のTangosol.Example.Security
ネームスペース内にあるPasswordExample
コードは、Principal
を取得するためにログインし、Principal
をスレッドの現在のプリンシパルにすることによってそのPrincipal
のコンテキストで実行中のキャッシュ参照を取得しようとします。
「パスワードIDトランスフォーマ」は、パスワードを含むセキュリティ・トークンを生成します。「パスワード・アイデンティティ・アサータ」(プロキシ内で実行)は、パスワードを強制するためにセキュリティ・トークンを検証します。トークンは、プロキシへの接続時に自動的に生成および検証されます。
C++
実装クラス: cpp/security
のcoherence::examples
ネームスペース内にあるAccessExample
コードは、Subject
を取得するためにログインし、そのSubject
のコンテキストで実行中のキャッシュ参照を取得しようとします。
「パスワードIDトランスフォーマ」は、パスワードを含むセキュリティ・トークンを生成します。「パスワード・アイデンティティ・アサータ」(プロキシ内で実行)は、パスワードを強制するためにセキュリティ・トークンを検証します。トークンは、プロキシへの接続時に自動的に生成および検証されます。
出力例:
このサンプルは、簡略化されたロール・ベースのアクセス制御について示しています。
Java
実装クラス: java/src
内のcom.tangosol.examples.security.AccessControlExample
コードは、Subject
を取得するために特定のロールを持つユーザーIDでログインし、そのSubject
のコンテキストで実行中のキャッシュ参照を取得し、キャッシュの操作を試行します。ユーザーに付与されたロールに応じて、キャッシュ操作が許可または拒否されます。
writer
ロールを持つユーザーは、挿入および取得が許可されています。reader
ロールを持つユーザーは、取得はできますが、挿入はできません。writer
ロールを持つユーザーは、キャッシュの破棄はできません。admin
ロールを持つユーザーは、キャッシュを破棄できます。
その後、特定のロールを持つユーザーは起動サービスの使用を試行します。reader
による起動は許可されていませんが、writer
では許可されています。
一度あるSubject
のコンテキストでキャッシュまたは起動サービス参照が作成されると、そのIDは永続的にその参照と関連付けられることに注意してください。キャッシュまたはサービス参照の使用すべてがそのIDの代理として行われます。
「パスワードIDトランスフォーマ」は、パスワード、ユーザーIDおよびロールを含むセキュリティ・トークンを生成します。「パスワード・アイデンティティ・アサータ」(プロキシ内で実行)は、パスワードを強制するためにセキュリティ・トークンを検証し、適切なユーザーIDおよびロールを持つSubject
を構築します。
セキュリティ・トークンの生成とアサーションは自動的に実行されます。
アクセス制御の実装については、「資格が付与されるキャッシュ・サービス」, 「資格が付与される起動サービス」および「資格が付与される名前付きキャッシュ」のコードを参照してください。
.NET
実装クラス: dotnet/src/security
のTangosol.Example.Security
ネームスペース内にあるAccessControlExample
コードは、Principal
を取得するために特定のロールを持つユーザーIDでログインし、そのPrincipal
のコンテキストで実行中のキャッシュ参照を取得し、キャッシュの操作を試行します。ユーザーに付与されたロールに応じて、キャッシュ操作が許可または拒否されます。
writer
ロールを持つユーザーは、挿入および取得が許可されています。reader
ロールを持つユーザーは、取得はできますが、挿入はできません。writer
ロールを持つユーザーは、キャッシュの破棄はできません。admin
ロールを持つユーザーは、キャッシュを破棄できます。
その後、特定のロールを持つユーザーは起動サービスの使用を試行します。reader
による起動は許可されていませんが、writer
では許可されています。
一度あるPrincipal
のコンテキストでキャッシュまたは起動サービス参照が作成されると、そのIDは永続的にその参照と関連付けられることに注意してください。キャッシュまたはサービス参照の使用すべてがそのIDの代理として行われます。
「パスワードIDトランスフォーマ」は、パスワード、ユーザーIDおよびロールを含むセキュリティ・トークンを生成します。「パスワード・アイデンティティ・アサータ」(プロキシ内で実行)は、パスワードを強制するためにセキュリティ・トークンを検証し、適切なユーザーIDおよびロールを持つSubject
を構築します。
セキュリティ・トークンの生成とアサーションは自動的に実行されます。
アクセス制御の実装については、「資格が付与されるキャッシュ・サービス」, 「資格が付与される起動サービス」および「資格が付与される名前付きキャッシュ」のコードを参照してください。
C++
実装クラス: cpp/security
のcoherence::examples
ネームスペース内にあるAccessControlExample
コードは、Subject
を取得するために特定のロールを持つユーザーIDでログインし、そのSubject
のコンテキストで実行中のキャッシュ参照を取得し、キャッシュの操作を試行します。ユーザーに付与されたロールに応じて、キャッシュ操作が許可または拒否されます。
writer
ロールを持つユーザーは、挿入および取得が許可されています。reader
ロールを持つユーザーは、取得はできますが、挿入はできません。writer
ロールを持つユーザーは、キャッシュの破棄はできません。admin
ロールを持つユーザーは、キャッシュを破棄できます。
その後、特定のロールを持つユーザーは起動サービスの使用を試行します。reader
による起動は許可されていませんが、writer
では許可されています。
一度あるサブジェクトのコンテキストでキャッシュまたは起動サービス参照が作成されると、そのIDは永続的にその参照と関連付けられることに注意してください。キャッシュまたはサービス参照の使用すべてがそのIDの代理として行われます。
「パスワードIDトランスフォーマ」は、パスワード、ユーザーIDおよびロールを含むセキュリティ・トークンを生成します。「パスワード・アイデンティティ・アサータ」(プロキシ内で実行)は、パスワードを強制するためにセキュリティ・トークンを検証し、適切なユーザーIDおよびロールを持つSubject
を構築します。
セキュリティ・トークンの生成とアサーションは自動的に実行されます。
アクセス制御の実装については、「資格が付与されるキャッシュ・サービス」, 「資格が付与される起動サービス」および「資格が付与される名前付きキャッシュ」のコードを参照してください。
出力例:
例A-7 アクセス制御のサンプルの出力例
------cache access control example begins------ Success: read and write allowed Success: read allowed Success: Correctly cannot write Success: Correctly cannot destroy the cache Success: Correctly allowed to destroy the cache ------cache access control example completed------ ------InvocationService access control example begins------ Success: Correctly allowed to use the invocation service Success: Correctly unable to use the invocation service ------InvocationService access control example completed------
このサンプルは、IdentityTransformer
がIDからセキュリティ・トークンを生成する方法を示しています。
Java
実装クラス: java/src
内のcom.tangosol.examples.security.PasswordIdentityTransformer
コードは、文字列の配列であるセキュリティ・トークンを生成します。最初の文字列はパスワードです。2番目の文字列はユーザーIDで、後続の文字列はユーザーのロールです。文字列の配列は、Coherence*Extendによってカスタム・シリアライザを使用せずにシリアライズされます。
このクラスは、Extendクライアントがプロキシに接続する際、または既存の接続でチャンネルが開かれる際に自動的に起動されます。
.NET
実装クラス: dotnet/src/security
のTangosol.Example.Security
ネームスペース内にあるPasswordIdentityTransformer
コードは、文字列の配列であるセキュリティ・トークンを生成します。最初の文字列はパスワードです。2番目の文字列はユーザーIDで、後続の文字列はユーザーのロールです。文字列の配列は、Coherence*Extendによってカスタム・シリアライザを使用せずにシリアライズされます。
このクラスは、Extendクライアントがプロキシに接続する際、または既存の接続でチャンネルが開かれる際に自動的に起動されます。
C++
実装クラス: cpp/security
のcoherence::examples
ネームスペース内にあるPasswordIdentityTranfromer
コードは、文字列の配列であるセキュリティ・トークンを生成します。最初の文字列はパスワードです。2番目の文字列はユーザーIDで、後続の文字列はユーザーのロールです。文字列の配列は、Coherence*Extendによってカスタム・シリアライザを使用せずにシリアライズされます。
このクラスは、Extendクライアントがプロキシに接続する際、または既存の接続でチャンネルが開かれる際に自動的に起動されます。
このサンプルは、IdentityAsserter
がセキュリティ・トークンを検証し、プリンシパル名のリストからSubject
を生成する方法を示しています。
Java
実装クラス: java/src
内のcom.tangosol.examples.security.PasswordIdentityAsserter
コードは、文字列の配列であるセキュリティ・トークンを処理します。最初の文字列はパスワードである必要があります。後続の文字列はプリンシパルです。トークンの処理に失敗すると、プロキシへのアクセスを拒否するSecurityException
が発生します。
.NET
実装クラス: なし
IdentityAsserter
はプロキシ上でのみ(Javaで)実行されるため、.NETクライアントでは実行できません。そのため、.NET向けのPasswordIdentityAsserter
はありません。
C++
実装クラス: なし
PasswordIdentityAsserter
はプロキシ上でのみ(Javaで)実行されるため、C++クライアントでは実行できません。そのため、C++向けのPasswordIdentityAsserter
はありません。
この例は、リモート・キャッシュ・サービスをラップしてアクセス制御を提供する方法を示しています。
Java
実装クラス: java/src
内のcom.tangosol.examples.security.EntitledCachService
コードは、キャッシュ操作用のアクセス制御を提供する「資格が付与される名前付きキャッシュ」をインスタンス化します。コードは、キャッシュ・サービス・メソッドrelease
およびdestroy
用のアクセス制御も提供しています。アクセス制御チェックは、「セキュリティ・サンプル・ヘルパー」に委任されます。
このクラスは、キャッシュ・サービスがプロキシで起動した際に、自動的にインスタンス化されます。
.NET
.NETの実装はありません。クラスはプロキシ上でのみJavaで実行されます。
C++
C++の実装はありません。クラスはプロキシ上でのみJavaで実行されます。
このサンプルは、リモート起動サービスをラップしてアクセス制御を提供する方法を示しています。
Java
実装クラス: java/src
内のcom.tangosol.examples.security.EntitledInvocationService
コードは、起動サービス・メソッド用のアクセス制御を提供します。アクセス制御チェックは、「セキュリティ・サンプル・ヘルパー」に委任されます。
このクラスは、起動サービスがプロキシで起動した際に、自動的にインスタンス化されます。
.NET
.NETの実装はありません。クラスはプロキシ上でのみJavaで実行されます。
C++
C++の実装はありません。クラスはプロキシ上でのみJavaで実行されます。
このサンプルは、リモート名前付きキャッシュをラップしてアクセス制御を提供する方法を示しています。
Java
実装クラス: java/src
内のcom.tangosol.examples.security.EntitledNamedCache
コードは、NamedCache
メソッド用のアクセス制御を提供します。アクセス制御チェックは、「セキュリティ・サンプル・ヘルパー」に委任されます。
このクラスは、キャッシュ・サービスがプロキシで起動した際に、自動的にインスタンス化されます。
.NET
.NETの実装はありません。クラスはプロキシ上でのみJavaで実行されます。
C++
C++の実装はありません。クラスはプロキシ上でのみJavaで実行されます。
このサンプルは、認証およびアクセス制御用のヘルパー・クラスです。
Java
実装クラス: java/src
内のcom.tangosol.examples.security.SecurityExampleHelper
コードは認証をシミュレートします。簡略化のため、これはSubject
を作成します。実際の実装では、プラットフォームおよび企業に固有な認証を行います。ログインでも、単純にユーザー名をロールにマッピングしています。
checkAccess
メソッドは、ユーザーのロールによって操作が許可されているかを確認します。
.NET
実装クラス: dotnet/src/security
のTangosol.Example.Security
ネームスペース内にあるSecurityExampleHelper
コードは認証をシミュレートします。簡略化のため、これはPrincipal
を作成します。実際の実装では、プラットフォームおよび企業に固有な認証を行います。ログインでも、単純にユーザー名をロールにマッピングしています。
C++
実装クラス: cpp/security
のcoherence::examples
ネームスペース内にあるSecurityExampleHelper
コードは認証をシミュレートします。簡略化のため、これはSubject
を作成します。実際の実装では、プラットフォームおよび企業に固有な認証を行います。ログインでも、単純にユーザー名をロールにマッピングしています。
これらのサンプルは、EntryEvents
、EntryProcessorEvents
およびTransferEvents
を含むCoherenceライブ・イベントの様々なイベント・タイプおよびそれらがどのように処理されるかを示しています。
ライブ・イベントのサンプルはパーティション・サービスの記憶域が有効なメンバーで実行されるため、Javaプログラミング言語でのみ使用可能です。
「EventsExamples」—ライブ・イベントの様々な機能を示しています。
「TimedTraceInterceptor」—異なるタイプのイベントに対して、コミット前イベントとコミット後イベントの間のタイミングを提供します。
「CantankerousInterceptor」—挿入されるキーのタイプに基づいて、コミット前時間またはコミット後時間のどちらかにランタイム例外で応答します。
「RedistributionInterceptor」—有効化された場合にパーティション・イベントをログに記録します。
「RedistributionInvocable」—クラスタの様々なメンバーで実行されるアクション可能な3つの状態を定義します。状態とは、RedistributionInterceptor
によって実行されるロギングの有効化、ロギングの無効化、またはinvocable (RedistributionInvocable
)が実行されているJVMの終了です。
「LazyProcessor」—イベントの処理間の実体のない遅延を作成します。
結果のキャッシュに挿入されるイベント前とイベント後の間の経過時間を計測する方法を示しています。
コミット前イベントおよびコミット後イベントにおける例外スローのセマンティクスを示しています。
パーティション再配布イベントの記録方法を示しています。
実装クラス: java/src
内のcom.tangosol.examples.events.EventsExamples
EventsExamples
クラスは、ライブ・イベントの様々な機能を示しています。これには、次の内容が含まれます。
イベント・タイプで分割された平均経過時間の提供
イベント後と比較したイベント前の例外スローの異なるセマンティクスの説明
有効な場合のパーティション移動のロギングの説明
EventsExamples
クラスでは、次の内部クラスが定義されています。
EventsTimingExample
内部クラスは、TimedTraceInterceptorによって実行されるアクションのきっかけとなります。これは、結果のキャッシュに挿入されるイベント前とイベント後の間の経過時間を計測する方法を示しています。結果キャッシュに挿入されたエントリは、このクラスを実行するプロセスのstdout
を使用して表示されます。
出力例:
例A-8 EventsTimingExampleの出力例
Received stats [memberId=2, eventType=INSERTED, sample=1] = EventStats[name = INSERTED, sampleMean = 0.294040ms, mean = 0.294040ms] Received stats [memberId=3, eventType=INSERTED, sample=1] = EventStats[name = INSERTED, sampleMean = 0.397855ms, mean = 0.397855ms] Received stats [memberId=1, eventType=INSERTED, sample=1] = EventStats[name = INSERTED, sampleMean = 0.373270ms, mean = 0.373270ms] Received stats [memberId=3, eventType=UPDATED, sample=1] = EventStats[name = UPDATED, sampleMean = 0.187132ms, mean = 0.187132ms] Received stats [memberId=2, eventType=UPDATED, sample=1] = EventStats[name = UPDATED, sampleMean = 0.234314ms, mean = 0.234314ms] Received stats [memberId=1, eventType=UPDATED, sample=1] = EventStats[name = UPDATED, sampleMean = 0.237622ms, mean = 0.237622ms]
VetodEventsExample
内部クラスは、CantankerousInterceptorによって実行されるアクションのきっかけとなります。これは、イベント前およびイベント後における例外スローのセマンティクスを示しています。記録する必要がある例外のみが結果キャッシュに挿入されます。結果キャッシュに挿入されたエントリは、このクラスを実行するプロセスのstdout
を使用して表示されます。
出力例:
例A-9 VetodEventsExampleの出力例
Received event [memberId=3, eventType=NON_VETO, count=1] = Objection falls on deaf ears! value = value: 11 Received event [memberId=3, eventType=NON_VETO, count=2] = Objection falls on deaf ears! value = value: 22 Received event [memberId=3, eventType=NON_VETO, count=3] = Objection falls on deaf ears! value = value: 33 Received event [memberId=3, eventType=NON_VETO, count=4] = Objection falls on deaf ears! value = value: 44
RedistributionEventsExample
内部クラスは、RedistributionInterceptorクラスによって実行されるアクションのきっかけとなります。これは、RedistributionInterceptor
でのロギングの有効化およびメンバーの強制終了からパーティション再配布を誘発することによって、パーティション再配布イベントがどのように記録されるかを示しています。
出力例:
実装クラス: java/src
内のcom.tangosol.examples.events.TimedTraceInterceptor
TimedTraceInterceptor
クラスは、イベントの各タイプ(挿入、更新、削除およびエントリ・プロセッサの実行)に対するコミット前イベントとコミット後イベントの間のタイミングを提供します。これらのタイミングは、cSample
パラメータで定義されるサンプル率で収集および平均の計算が行われます。さらに、同時にログにも出力されます。この実装は各バイナリ・キーへの強い参照を維持しますが、同じキーに対するコミット後イベントの受信の際に削除されます。
インターセプタは、EventInterceptor
インタフェースを実装します。@Interceptor
注釈は、identifier
属性でインターセプタの一意名を示し、order
属性で実行順序(Order.HIGH
)を示します。
インターセプタには、保護されたEventTimer
内部クラスも含まれています。このクラスでは、通知対象の各イベントの経過時間が測定されます。インターセプタは、各エントリに対するコミット前イベントとコミット後イベントの間の時間、およびそれぞれのイベント・タイプ(INSERT
、UPDATE
、REMOVE
)を追跡します。タイミングは、サンプル統計と累積統計を表示するCoherenceログにまとめて送信されます。
汎用引数がcom.tangosol.net.events.partition.cache.Event
であるため、ユーザーは、フィルタリングを指定しなくても、そのイベントのコンシューマであるイベント(EntryEvent
およびEntryProcessorEvent
)のみを取得します。
実装クラス: java/src
内のcom.tangosol.examples.events.CantankerousInterceptor
CantankerousInterceptor
クラスは、あるキーの挿入イベントはコミット前またはコミット後のフェーズで実行時例外になるという議論を呼ぶ性質を持ったEventInterceptor
の実装です。
例外がコミット前にスローされた場合は、ロールバックが発生し、例外がクライアントに伝播されます。例外がコミット後に発生した場合は、ログ・イベントが記録されます。例外に使用されるキーは、VETO
およびNON-VETO
です。INSERTING
およびUPDATING
は拒否できるイベントであるのに対して、INSERTED
およびUPDATED
イベントは拒否できません。
実装クラス: java/src
内のcom.tangosol.examples.events.RedistributionInterceptor
RedistributionInterceptor
クラスは、有効化された際にパーティション・アクティビティを記録するEventInterceptor
です。ロギングは、RedistributionInvocable.ENABLED
定数の設定を使用して有効化できます。
実装クラス: java/src
内のcom.tangosol.examples.pof.RedistributionInvocable
RedistributionInvocable
クラスは、クラスタの様々なメンバーで実行されるアクション可能な3つの状態を定義します。この例では、状態を次のように定義します。
DISABLE
: RedistributionInterceptor
イベント・インターセプタによって実行されるロギングを無効にします。
ENABLE
: RedistributionInterceptor
イベント・インターセプタによって実行されるロギングを有効にします。
KILL
: この起動可能(RedistributionInvocable
)が実行されるJVMを終了します。
実装クラス: java/src
内のcom.tangosol.examples.pof.LazyProcessor
LazyProcessor
クラスは、イベントの処理間の実体のない遅延を作成します。クラスでは、このプロセッサがイベントの処理間でスリープする必要があるミリ秒数を指定します。このクラスは、EventsExamplesクラスのEventsTimingExampleサブクラスで使用されます。