プライマリ・コンテンツに移動
Oracle® Fusion Middleware Oracle Coherenceのインストール
12c (12.2.1)
E70046-02
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストへ移動
製品
目次へ移動
目次

前
 
次
 

6 Coherenceのサンプルの実行

Coherenceディストリビューションは、サンプル・コードを提供します。サンプルは、1つまたは複数の使用方法を説明するコードのコレクションとして整理されています。また、各サンプルのビルドおよび実行方法は言語ごとに統一されています。

この章の内容は以下のとおりです。

6.1 Coherenceのサンプルの概要

Coherenceのサンプルは、次のとおりです。

基本機能

Coherenceの基本機能のサンプルには、次のものが含まれています。

表6-1 Coherenceの基本機能のサンプル

サンプル名 説明

基本データ・アクセス

Coherenceデータ・グリッドからデータを「取得」、「挿入」および「削除」します。第6.5.3項「基本データ・アクセスのサンプル」を参照してください。

データのロード

Coherenceデータ・グリッドにサンプル・データをロードします。第6.5.4項「ローダーのサンプル」を参照してください。

パラレル問合せ

Coherenceデータ・グリッドの問合せを行います(索引の使用を含む)。第6.5.5項「問合せのサンプル」を参照してください。

Observable

Coherenceデータ・グリッド内のデータの変化をリスニングします。第6.5.6項「オブザーバのサンプル」を参照してください。

処理

データ自身がCoherenceデータ・グリッドにある共存データを処理します。第6.5.7項「プロセッサのサンプル」を参照してください。

問合せ言語

Coherenceの問合せ言語の使用方法です。第6.5.5項「問合せのサンプル」を参照してください。


セキュリティ機能

Coherenceのセキュリティのサンプルには、次のものが含まれています。

表6-2 Coherenceのセキュリティのサンプル

サンプル名 説明

パスワードのサンプル

Coherenceへのアクセスにパスワードを要求します。第6.6.2項「パスワードのサンプル」を参照してください。

アクセス制御のサンプル

簡略化されたロール・ベースのアクセス制御です。第6.6.3項「アクセス制御のサンプル」を参照してください。

パスワードIDトランスフォーマ

必要なパスワードを含むカスタム・セキュリティ・トークンを作成し、プリンシパル名のリストを追加します。第6.6.4項「パスワードIDトランスフォーマ」を参照してください。

パスワード・アイデンティティ・アサータ

セキュリティ・トークンに必要なパスワードが含まれることをアサートし、プリンシパル名のリストに基づいてサブジェクトを構成します。第6.6.5項「パスワード・アイデンティティ・アサータ」を参照してください。

資格が付与されるキャッシュ・サービス

アクセス制御用にキャッシュ・サービスをラップします。第6.6.6項「資格が付与されるキャッシュ・サービス」を参照してください。

資格が付与される起動サービス

アクセス制御用に起動サービスをラップします。第6.6.7項「資格が付与される起動サービス」を参照してください。

資格が付与される名前付きキャッシュ

アクセス制御用に名前付きキャッシュをラップします。第6.6.8項「資格が付与される名前付きキャッシュ」を参照してください。


ライブ・イベント

Coherenceのライブ・イベントのサンプルは、Javaプラットフォームのみで使用できます。これには次の機能が含まれます。

表6-3 Coherenceのライブ・イベントのサンプル

サンプル名 説明

EventsExamples

イベント・タイプで分割された平均経過時間、イベント後と比較したイベント前の例外スローの異なるセマンティクス、および有効になった際のパーティション移動のロギングなどを提供するライブ・イベントの様々な機能を示しています。第6.7.2項「EventsExamples」を参照してください。

TimedTraceInterceptor

異なるタイプのイベントに対して、コミット前イベントとコミット後イベントの間のタイミングを提供します。第6.7.3項「TimedTraceInterceptor」を参照してください。

CantankerousInterceptor

挿入されるキーに基づいて、コミット前時間またはコミット後時間のどちらかにランタイム例外で応答します。第6.7.4項「CantankerousInterceptor」を参照してください。

RedistributionInterceptor

有効化された場合にパーティション・イベントをログに記録します。第6.7.5項「RedistributionInterceptor」を参照してください。

RedistributionInvocable

クラスタの様々なメンバーで実行されるアクション可能な3つの状態を定義します。状態とは、RedistributionInterceptorによるロギングの有効化、ロギングの無効化、またはinvocable (RedistributionInvocable)が実行されているJVMの終了です。第6.7.6項「RedistributionInvocable」を参照してください。

LazyProcessor

イベントの処理間の実体のない遅延を作成します。第6.7.7項「LazyProcessor」を参照してください。


Java 8機能

Coherence Java 8のサンプルは、Java 8で導入された機能を使用したCoherenceの使用方法を示します。このサンプルは、Javaプラットフォームのみで使用できます。これには次の機能が含まれます。

表6-4 Coherence Java 8のサンプル

サンプル名 説明

StreamsExample

Stream APIを使用してキャッシュを問い合せます。第6.8.2項「ストリーム」を参照してください。

LambdaExample

ラムダ式を使用してキャッシュ操作を実行します。第6.8.3項「ラムダ」を参照してください。

MapDefaultMethodExample

Map APIでオーバーライドされたデフォルトのメソッドを使用して、キャッシュ操作を実行します。第6.8.4項「マップのデフォルト・メソッド」を参照してください。


非同期機能

Coherenceの非同期のサンプルは、AsyncNamedCacheインタフェースを使用した非同期処理の使用方法を示します。このサンプルは、Javaプラットフォームのみで使用できます。これには次の機能が含まれます。

表6-5 Coherenceの非同期のサンプル

サンプル名 説明

DataAccessExample

キャッシュ操作を非同期で実行します。第6.9.2項「非同期のデータ・アクセス」を参照してください。

ProcessorExample

キャッシュ・エントリを非同期で処理します。第6.9.3項「非同期のエントリ・プロセッサ」を参照してください。

AggregatorExample

キャッシュ・エントリを非同期で集計します。第6.9.4項「非同期のアグリゲータ」を参照してください。


フェデレーテッド・キャッシュ

Coherenceのフェデレーテッド・キャッシュのサンプルは、フェデレーテッド・キャッシュの構成方法および使用方法を示します。2つのクラスタが起動し、アクティブ/アクティブ型レプリケーションを使用するように構成されます。これにより、データは一方のクラスタから他方のクラスタにレプリケートできます。クラスタにはGUIが含まれ、クラスタへのデータの挿入またはキャッシュの削除が可能です。フェデレーテッド・キャッシュのサンプルには、クラスタ参加間のSSLを構成する手順も含まれます。このサンプルは、Javaプラットフォームのみで使用できます。

永続性

Coherenceの永続性のサンプルは、キャッシュからディスクへのコンテンツの保存およびリストアの方法を示します。このサンプルは、Javaプラットフォームのみで使用できます。これには次の機能が含まれます。

表6-6 Coherenceの永続性のサンプル

サンプル名 説明

基本的なスナップショット操作

キャッシュからディスクへのコンタクトを持続します。キャッシュを破壊し、ディスクからキャッシュを再ロードします。第6.11.2項「基本的なスナップショット操作」を参照してください。

永続性のある通知

永続的な通知をサブスクライブして、永続性操作の期間を決定します。第6.11.3項「永続性のある通知」を参照してください。

パラレルの永続性操作

複数のサービスにまたがって、永続性操作をパラレルに実行します。第6.11.4項「パラレルの永続性操作」を参照してください。

SFTPアーカイバ

SFTPを使用してスナップショットを格納および取得するカスタムのスナップショット・アーカイバを作成します。第6.11.5項「カスタム・アーカイバのスナップショットのアーカイブ」


REST

Coherence RESTのサンプルは、アプリケーションとCoherenceのキャッシュとのHTTPプロトコルを介した相互作用を示します。サンプルでは、Coherenceの機能を実行する単一のwebベースのアプリケーションを使用します。サンプルは、Javaプラットフォームで使用可能で、クライアント側のアプリケーションはJavaScriptを使用して書き込まれます。これには次の機能が含まれます。

表6-7 Coherence RESTのサンプル

サンプル名 説明

製品のサンプル

キャッシュからのエントリを挿入、編集および削除し、エントリ・プロセッサを使用してエントリを更新します。第6.12.3項「「製品」ページ」を参照してください。

部門のサンプル

キャッシュからのエントリを挿入、編集および削除します。第6.12.4項「「部門」ページ」を参照してください。

連絡先のサンプル

キャッシュからのエントリを挿入、編集および削除します。キャッシュ内のエントリの問合せ。第6.12.5項「連絡先ページ」を参照してください。

Server-Sent Events

製品、部門および連絡先のキャッシュにリスナーを追加し、イベントをモニターします。第6.12.6項「Server-Sent Events」を参照してください。


6.2 サンプルの取得

coherence_version.jarまたはwls_version.jarインストーラ・ファイルでCoherenceの完全なインストールを実行することによって、サンプルを入手できます。Coherenceのサンプルは、Oracle Universal Installerのインストール・オプションとして表示され、COHERENCE_HOME/examplesにインストールされます。

coherence_quick_version.jarを使用してCoherenceをインストールした場合は、coherence_quick_supp_version.jarサプリメンタル・インストーラ・ファイルを実行することでサンプルを入手できます。サプリメンタル・インストーラには、APIのドキュメントおよびサンプルのみが含まれます。coherence_quick_version.jarクイック・インストーラ・ファイルはサンプルやAPIのドキュメントをインストールしないことに注意してください。

6.3 サンプルのビルド方法


注意:

.NETおよびC++用であっても、Javaのサンプルをビルドおよび実行する必要があります。これは、キャッシュ・サーバーはJavaで実行されているためです。

この項の内容は次のとおりです。

6.3.1 Javaサンプルのビルド方法

この項の内容は次のとおりです。

6.3.1.1 Javaでの前提条件

サンプルをビルドするには、CoherenceおよびJava Development Kit (JDK) 1.8以上が必要です。次の環境変数が設定されていることを確認します。

環境変数 説明
$COHERENCE_HOME COHERENCE_HOME環境変数が、Coherenceのインストール・ディレクトリの場所を指していることを確認します。
$JAVA_HOME サンプルをビルドする前に、JAVA_HOME環境変数が1.8以上のJDKの場所を指していることを確認します。サンプルを実行するには、1.8以上のJavaランタイムが必要です。

6.3.1.2 Javaでのディレクトリ構造

次で説明するディレクトリ構造は、examplesディレクトリを基準としたものです。

表6-8 Javaでのディレクトリ構造

ディレクトリ名 説明

java/bin

サンプルをビルドおよび実行するスクリプトです。2セットのスクリプトがあります。ファイルの拡張子がないスクリプトは、bashスクリプトです。ファイルの拡張子が.cmdのスクリプトは、Windowsコマンド・スクリプトです。次の説明では、ファイルの拡張子を指定しないスクリプト名を参照しています。

  • build—サンプルをビルド

java/src

すべてのサンプルのソースです。サンプルは、com.tangosol.examples.<example name>パッケージにあります。キャッシュに格納されたオブジェクト用のクラスは、com.tangosol.examples.pofパッケージにあります。

java/classes

ビルドによって出力されるクラス・ファイルです。このディレクトリは、ビルド・スクリプトを実行するまで存在しません。

java/resource/config

サンプルに必須の共通Coherence構成ファイルです。

java/resource/<example name>

サンプルが共通構成のかわりとなる構成を必要とする場合、それは自身のディレクトリにあります。セキュリティのサンプルは、java/resource/securityの構成ファイルを使用します。

$COHERENCE_HOME/lib

サンプルのコンパイルおよび実行に使用されるCoherenceライブラリです。


6.3.1.3 Javaでのビルド手順

サンプル・コレクションの名前を使用してビルド・スクリプトを実行します。

  • bin/build contacts

  • bin/build security

  • bin/build events

  • bin/build java8

  • bin/build async

  • bin/build federation

  • bin/build persistence

スクリプトによってPOFパッケージ・ファイルがビルドされ、次に特定のサンプルのファイルがビルドされます。contactsサンプルは、他のサンプルで必須で、常に最初にビルドする必要があります。

Windowsでは、ディレクトリを/binディレクトリに変更してからスクリプトを実行します。

6.3.2 .NETサンプルのビルド方法

この項の内容は次のとおりです。

6.3.2.1 .NETでの前提条件

サンプルをビルドするには、Coherence for .NETおよびVisual Studio 2008以上またはVisual Studio 2008 Express以上が必要です。.NET要件の詳細は、第3.3.1項「前提条件」を参照してください。

サンプルを実行するには、CoherenceのJavaバージョンおよびJava Development Kit (JDK) 1.8以上が必要です。Coherence*Extendプロキシおよびキャッシュ・サーバーにはJavaが必要であるため、Javaバージョンが必要になります。また、サンプルはプロキシおよびキャッシュ・サーバーを実行する前にビルドする必要があるJavaサンプル・クラスに依存しています。ビルドおよび実行方法の手順は、Javaサンプルのreadme.txtファイルを参照してください。

6.3.2.2 .NETでのディレクトリ構造

次で説明するディレクトリ構造は、examplesディレクトリを基準としたものです。

表6-9 .NETでのディレクトリ構造

ディレクトリ名 説明

dotnet\src

すべてのサンプルのソースです。サンプルは、Tangosol.Examples.<example name>ネームスペース内にあります。キャッシュに格納されたオブジェクト用のクラスは、Tangosol.Examples.Pofネームスペース内にあります。

サンプルは、Visual Studio 2008のサンプル・ソリューションの中にあります。srcディレクトリに、サンプルごとのVisual Studio 2008プロジェクトがあります。たとえば、srcにはcontactsおよびsecurityサンプル用のプロジェクトが含まれています。

サンプルに必須のCoherence構成ファイルです。

src\pof\config

サンプルに必須の共通Coherence構成ファイルです。

src\<example name>\config

サンプルが共通構成のかわりとなる構成を必要とする場合、それは自身のディレクトリにあります。セキュリティのサンプルは、security\configの構成ファイルを使用します。


6.3.2.3 .NETでのビルド手順

Visual Studioでexamples\dotnet\src\contacts.csprojディレクトリからサンプル・プロジェクトを開く

.NET Framework用のCoherence をインストールする際に、インストーラがアセンブリ・レジストリにcoherence.dllライブラリを登録します。含まれているVisual Studioプロジェクトは、デフォルトの場所にあるcoherence.dllを参照しています。別のバージョンのライブラリが必要な場合、またはデフォルトの場所にインストールされていない場合は、参照を構成する際にCoherence参照がオーバーライドされる可能性があります。local copy属性をtrueに設定していることを確認してください。この設定によって、bin\debugディレクトリにある正しいcoherence.dllがコピーされて登録されます。

Coherence for .NETが構成された後、Visual Studioでメニューから「Build」「Build Solution」を選択するか、「Build Solution」 (F6)などを選択してソリューションをビルドします。

contactsサンプルをビルドすると、resource\contacts.csvがビルド出力ディレクトリ(examples\dotnet\src\bin\Debug)にコピーされます。

6.3.3 C++サンプルのビルド方法

この項の内容は次のとおりです。

6.3.3.1 C++での前提条件

サンプルを実行するには、CoherenceのJavaバージョンおよびJava Development Kit (JDK) 1.8以上が必要です。Coherence*Extendプロキシおよびキャッシュ・サーバーにはJavaが必要であるため、Javaバージョンが必要になります。また、サンプルはプロキシおよびキャッシュ・サーバーを実行する前にビルドする必要があるJavaサンプル・クラスに依存しています。ビルドおよび実行方法の手順は、Javaサンプルのreadme.txtを参照してください。

次の環境変数が設定されていることを確認します。

環境変数 説明
%COHERENCE_HOME% COHERENCE_HOME環境変数が、解凍されたCoherence のディレクトリの場所を指していることを確認します。
%JAVA_HOME% サンプルをビルドする前に、JAVA_HOME環境変数が1.8以上のJDKの場所を指していることを確認します。サンプルを実行するには、1.8以上のJavaランタイムが必要です。
%COHERENCE_CPP_HOME% COHERENCE_CPP_HOME環境変数が解凍されたC++開発環境の場所を指していることを確認します。コンパイラ環境がサポートされています。

6.3.3.2 C++でのディレクトリ構造

次で説明するディレクトリ構造は、examplesディレクトリを基準としたものです。

表6-10 C++でのディレクトリ構造

ディレクトリ名 説明

cpp\bin

サンプルをビルドおよび実行するスクリプトです。ファイルの拡張子がないスクリプトは、bashスクリプトです。ファイルの拡張子が.cmdのスクリプトは、Windowsコマンド・スクリプトです。次の説明では、ファイルの拡張子を指定しないスクリプト名を参照しています。

cpp

<example name> (contactsおよびsecurityなど)およびpofディレクトリの下に編成されているすべてのサンプル・ソースです。

cpp\contacts

contactsサンプルのソースです。サンプルは、coherence::examplesネームスペース内にあります。examplesの次のレベルの名前は、関連するサンプル・クラスのセットを表しています。coherence::examples::LoaderExampleの「Driver」は、contactsサンプルのローダーです。サンプルの名前は、coherence::examplesの後の名前です。

cpp\security

securityサンプルのソースです。サンプルは、coherence::examplesネームスペース内にあります。

cpp\pof

データ・モデルはこのディレクトリ内に加え、シリアライズされるクラスで表されます。これは、既存のデータ・モデルの使用方法を示し、Coherence内で公開するためです。モデル・クラスにはいかなるCoherence固有のコードも含まれていないことが、この点を立証しています。ただし、各モデル・タイプに関連付けられているシリアライザがあります。たとえばContactには、モデル・タイプのCoherenceへの登録およびシリアライズ操作を目的とするContactSerializerクラスがあります。

生成される出力は、動的ライブラリ形式です。

cpp\config

サンプルに必須の共通Coherence構成ファイルです。

cpp\config\<example name>

サンプルが共通構成のかわりとなる構成を必要とする場合、それは自身のディレクトリにあります。セキュリティのサンプルは、config/securityの構成ファイルを使用します。

cpp\<example name>\out

ビルドによって出力されるオブジェクト・ファイルです。このディレクトリは、ビルド・スクリプトを実行するまで存在しません。

%COHERENCE_CPP_HOME%\include

Coherenceのヘッダー・ファイルが含まれています。

%COHERENCE_CPP_HOME%\lib

Coherenceのライブラリが含まれています。


6.3.3.3 C++でのビルド手順

この項の内容は次のとおりです。

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サンプルを実行するには、プロキシ・サーバー、およびキャッシュ・サーバーbin/run-cache-serverを起動してから、bin\run.cmd contactsと入力します。キャッシュ・サーバーは、プロキシ・サービスを実行し、Coherence*Extendクライアントからの接続が可能になります。

また、任意のコマンド・ウィンドウより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に生成されます。

6.4 サンプルの実行方法


注意:

Coherenceのサンプルはソースとして配布されるため、まずビルドする必要があります。第6.3項「サンプルのビルド方法」を参照してください。

この項の内容は次のとおりです。

6.4.1 Javaサンプルの実行方法

この項の内容は次のとおりです。

6.4.1.1 Javaでの前提条件

サンプルを実行するには、Coherenceをインストールし、現在サポートされているJDKを使用します。サポートされているJDKの詳細は、「システム要件」を参照してください。

環境変数 説明
$COHERENCE_HOME COHERENCE_HOME環境変数が、解凍されたCoherence のディレクトリの場所を指していることを確認します。
$JAVA_HOME サンプルをビルドする前に、JAVA_HOME環境変数がサポートされているJDKの場所を指していることを確認します。

6.4.1.2 Javaでのディレクトリ構造

次で説明するディレクトリ構造は、サンプルを解凍したexamplesディレクトリを基準としたものです。

表6-11 Javaでのディレクトリ構造

ディレクトリ名 説明

java/bin

サンプルをビルドおよび実行するスクリプトです。2セットのスクリプトがあります。ファイルの拡張子がないスクリプトは、bashスクリプトです。ファイルの拡張子が.cmdのスクリプトは、Windowsコマンド・スクリプトです。次の説明では、ファイルの拡張子を指定しないスクリプト名を参照しています。

  • run—サンプル・コレクションを実行

  • run-cache-server—サンプルが使用するキャッシュ・サーバーを実行。拡張クライアントに必要なプロキシ・サーバーを開始するためにコマンドを使用します。

java/classes

ビルドによって出力されるクラス・ファイルです。このディレクトリは、ビルド・スクリプトを実行するまで存在しません。

java/resource/config

サンプルに必須の共通Coherence構成ファイルです。

java/resource/<example name>

サンプルが共通構成のかわりとなる構成を必要とする場合、それは自身のディレクトリにあります。securityサンプルは、java/resource/securityの構成ファイルを使用します。

$COHERENCE_HOME/lib

サンプルのコンパイルおよび実行に使用されるCoherenceのライブラリです。

resource

連絡先サンプルのLoaderExampleに使用するデータ・ファイルcontacts.csvです。


6.4.1.3 Javaでの手順

runスクリプトを各サンプルで実行します。

連絡先のサンプル

  1. bin/run-cache-serverで1つ以上のキャッシュ・サーバーを起動します。実行するたびにキャッシュ・サーバー・クラスタ・ノードが起動します。ノードを追加するには、新しいコマンド・シェルでコマンドを実行します。

  2. 新しいコマンド・シェルで、サンプルの名前を使用してbin/run contactsを実行します。Driver.mainメソッドがサンプルの機能を実行し、出力はコマンド・ウィンドウ(stdout)に送られます。

Coherence 12.1.2以上では、新しい問合せ言語機能のサンプルが追加されています。このサンプルは、Coherence InvocationServiceを使用する簡単なヘルパー・クラスFilterFactoryの構成および使用方法を示しています。

セキュリティのサンプル

securityサンプルには、プロキシを使用するCoherence*Extendが必要です。

  1. bin/run-cache-server securityで1つ以上のキャッシュ・サーバーを起動します。キャッシュ・サーバーは、プロキシ・サービスを実行し、Coherence*Extendクライアントからの接続が可能になります。

  2. 新しいコマンド・シェルで、サンプルの名前を使用してbin/run securityを実行します。Driver.mainメソッドがサンプルの機能を実行し、出力はコマンド・ウィンドウ(stdout)に送られます。

ライブ・イベントのサンプル

  1. bin/run-cache-server eventsで1つ以上のキャッシュ・サーバーを起動します。実行するたびにキャッシュ・サーバー・クラスタ・ノードが起動します。ノードを追加するには、新しいコマンド・シェルでコマンドを実行します。

  2. 新しいコマンド・シェルで、サンプルの名前を使用してbin/run eventsを実行します。Driver.mainメソッドがサンプルの機能を実行し、出力はコマンド・ウィンドウ(stdout)に送られます。

Java 8機能のサンプル

  1. キャッシュ・サーバー、bin/run-cache-serverを起動します。

  2. 新しいコマンド・シェルで、サンプルの名前を使用してbin/run java8を実行します。Driver.mainメソッドがサンプルの機能を実行し、出力はコマンド・ウィンドウ(stdout)に送られます。出力を検証し、src/com/tangosol/examples/java8のコードを参照します。

非同期機能のサンプル

  1. キャッシュ・サーバー、bin/run-cache-serverを起動します。

  2. 新しいコマンド・シェルで、サンプルの名前を使用してbin/run asyncを実行します。Driver.mainメソッドがサンプルの機能を実行し、出力はコマンド・ウィンドウ(stdout)に送られます。出力を検証し、src/com/tangosol/examples/asyncのコードを参照します。

フェデレーテッド・キャッシュのサンプル

  1. bin/run-cache-server federation ClusterAを使用して、ClusterAを起動します。

  2. 新しいコマンド・シェルで、bin/run-cache-server federation ClusterBを使用してClusterBを起動します。

  3. bin/run federation ClusterAを実行して、GUIを起動し、ClusterAに接続します。cohqlまたはconsole引数を使用して、CohQLまたはGUIのかわりにコンソールを使用します。

  4. bin/run federation ClusterBを実行して、GUIを起動し、ClusterBに接続します。cohqlまたはconsole引数を使用して、CohQLまたはGUIのかわりにコンソールを使用します。

  5. クラスタにオブジェクトを追加し、オブジェクトが別のクラスタにレプリケートされていることを確認します。

  6. クラスタからオブジェクトを削除し、オブジェクトが別のクラスタから削除されていることを確認します。

前述のサンプルでは、クラスタ間で標準TCP接続を使用します。サンプルを構成してSSLを使用することもできます。SSLにより、クラスタ間の接続が暗号化され、認証されたクラスタのみが双方向認証を使用して情報を交換できるようになります。


注意:

SSL構成は、自己署名証明書およびわかりやすいパスワードを使用します。セキュリティのベスト・プラクティスに従って、Coherenceセキュリティ・ドキュメントを参照して本番環境のために構成する必要があります。

SSL構成の要件:

  • 各クラスタのキーストアの生成

  • 各クラスタのSSL証明書の作成

  • 認証されたメンバーのみの接続を許可するトラストストアへの証明書のインポート。


注意:

Windows環境では、%JAVA_HOME%\bin\keytoolを使用します。

次のようにして、SSLをフェデレーションのサンプルに構成します。

  1. ClusterAおよびClusterBのキーストアを生成します

    cd $COHERENCE_HOME/examples/java/classes
    
    $JAVA_HOME/bin/keytool -genkeypair -dname "cn=ClusterA, ou=Coherence, o=Oracle,
       c=US" -alias ClusterA -keypass password -keystore ClusterA-keystore.jks
       -storepass password
    
    $JAVA_HOME/bin/keytool -genkeypair -dname "cn=ClusterB, ou=Coherence, o=Oracle,
       c=US" -alias ClusterB -keypass password -keystore ClusterB-keystore.jks
       -storepass password
    
  2. 次のようにして、各ストアから証明書をエクスポートします。

    $JAVA_HOME/bin/keytool -export -alias ClusterA -storepass password -file
       ClusterA.cer -keystore ClusterA-keystore.jks
    
    $JAVA_HOME/bin/keytool -export -alias ClusterB -storepass password -file
       ClusterB.cer -keystore ClusterB-keystore.jks
    
  3. 両方の証明書を、どのクラスタを接続するかを定義するトラストストアにインポートします。

    $JAVA_HOME/bin/keytool -import -v -trustcacerts -alias ClusterA -file
       ClusterA.cer -keystore trust.jks -storepass password
    
    $JAVA_HOME/bin/keytool -import -v -trustcacerts -alias ClusterB -file
       ClusterB.cer -keystore trust.jks -storepass password
    

    前述の2つに「yes」を入力し、証明書をインポートします。

  4. 次を使用して、トラストストア内のエントリを検証します。

    $JAVA_HOME/bin/keytool -list -keystore trust.jks -storepass password
    

前述の手順が完了すると、次がclassesディレクトリに含まれます。

  • trust.jks – ClusterAおよびClusterB証明書を含むキーストア

  • ClusterA.jks – ClusterAのプライベート・キーを含キーストア

  • ClusterB.jks – ClusterBのプライベート・キーを含キーストア

サンプルを再実行し、SSL環境変数をコマンド・プロンプト・ウィンドウで設定します。

SET SSL=true (Windows)

export SSL=true (Unix)

キャッシュ・サーバー・ログ・ファイルで、接続がtmbs (TCP Message Bus over SSL)であることを確認します。

Connecting to service FederatedPartitionedPofCache at participant ClusterB with
address tmbs://127.0.0.1:56217.39550

注意:

トラスト・ストアから証明書を削除すると、そのメンバーへの通信が無効化され、無許可の通信がシミュレートされます。

別のサンプルを実行する場合、SSLでのフェデレーションのサンプルの実行が完了したら、SSL環境変数の設定を解除します。

永続性のサンプル

  1. bin/run-cache-server persistenceで1つ以上のキャッシュ・サーバーを起動します

  2. 新しいコマンド・シェルで、bin/run persistenceを使用して、永続性のサンプルを実行します。Driver.mainメソッドがサンプルの機能を実行し、出力はコマンド・ウィンドウ(stdout)に送られます。

  3. bin/run persistence notificationsを使用して、通知リスナーを起動します。

  4. bin/run persistenceを使用して、永続性のサンプルを実行します。出力に、永続性操作が完了したことが示されます

  5. CTRL+Cを使用して、通知リスナーを中断します。

  6. bin/run persistence parallelを使用して、永続性パラレルのサンプルを実行します。Driver.mainメソッドがサンプルの機能を実行し、出力はコマンド・ウィンドウ(stdout)に送られます。

  7. JSchライブラリ、jsch-0.1.51.jar以上をダウンロードし、コンテンツをクラス・ディレクトリに抽出します。

  8. bin/build archiverを使用して、アーカイバのサンプルをビルドします。

  9. resource/archiver/tangosol-coherence-override.xmlファイルを更新し、3番目のパラメータをカスタム・アーカイバに変更して、usernamepasswordおよびpathをSSHを実行しているマシンの場所に置き換えます。マシンに対してssh等価設定がある場合、パスワードを省略できます。システム・プロパティを使用して、必要に応じ、パスワードを非表示にすることもできます。

  10. bin/run archiverを使用して、アーカイブのサンプルを実行します。

  11. リモートのSFTPマシンを検証し、アーカイブ・ディレクトリを確認します。

6.4.2 .NETサンプルの実行方法

この項の内容は次のとおりです。

6.4.2.1 .NETでの前提条件

サンプルを実行するには、Coherence for .NETおよびVisual Studio 2008以上が必要です。サンプルを実行するには、Javaサンプルをビルドする必要もあります。Coherence*Extendプロキシおよびキャッシュ・サーバーにはJavaが必要であるため、Javaバージョンが必要になります。

また、サンプルはプロキシおよびキャッシュ・サーバーを実行する前にビルドする必要があるJavaサンプル・クラスに依存しています。

6.4.2.2 .NETでのディレクトリ構造

次で説明するディレクトリ構造は、「examples」ディレクトリを基準としたものです。

表6-12 .NETでのディレクトリ構造

ディレクトリ名 説明

resource

連絡先サンプルのLoaderExampleに使用するデータ・ファイルcontacts.csvです。


6.4.2.3 .NETでの手順

次の項には、contactsおよびsecurityサンプルの実行手順が含まれています。

連絡先

  1. bin/run-cache-serverで1つ以上のキャッシュ・サーバーを起動します。キャッシュ・サーバーは、プロキシ・サービスを実行し、Coherence*Extendクライアントからの接続が可能になります。

  2. Visual Studioからcontactsプロジェクトをデバッグなしで起動するか、コマンド・シェルのビルドで生成されたcontacts.exeを実行します。Driver.Mainメソッドがサンプルの機能を実行し、出力はコマンド・ウィンドウ(stdout)に送られます。

Coherence 12.1.2以上では、新しい問合せ言語機能の新しいサンプルが統合されました。このサンプルは、Coherence InvocationServiceを使用する簡単なヘルパー・クラス「FilterFactory」の構成および使用方法を示しています。

セキュリティ

  1. java readme.txtの手順に従って、bin/run-cache-server securityで1つ以上のキャッシュ・サーバーを起動します。キャッシュ・サーバーは、プロキシ・サービスを実行し、Coherence*Extendクライアントからの接続が可能になります。

  2. Visual Studioからsecurityプロジェクトをデバッグなしで起動するか、コマンド・シェルのビルドで生成されたcontacts.exeを実行します。Driver.Mainメソッドがサンプルの機能を実行し、出力はコマンド・ウィンドウ(stdout)に送られます。

6.4.3 C++サンプルの実行方法

この項の内容は次のとおりです。

6.4.3.1 C++での前提条件

サンプルをビルドするには、Coherenceの適切なC++ライブラリが必要です。また、C++開発環境も必要です。サンプルを実行するには、Javaサンプルをビルドする必要もあります。Coherence*Extendプロキシおよびキャッシュ・サーバーにはJavaが必要であるため、Javaバージョンが必要になります。また、サンプルはプロキシおよびキャッシュ・サーバーを実行する前にビルドする必要があるJavaサンプル・クラスに依存しています。

環境変数 説明
$COHERENCE_CPP_HOME COHERENCE_CPP_HOME環境変数が、解凍されたCoherenceのC++インストールのディレクトリの場所を指していることを確認します。

サポートされているC++コンパイラ:

  • Windows—Microsoft Visual C++ Express/Studio 2008以上または同等のプラットフォームSDK

  • Linux—g++ 4.0

  • Mac—g++ 4.0

6.4.3.2 C++でのディレクトリ構造

次で説明するディレクトリ構造は、examplesディレクトリを基準としたものです。

表6-13 C++でのディレクトリ構造

ディレクトリ名 説明

cpp/bin

サンプルをビルドおよび実行するスクリプトです。ファイルの拡張子がないスクリプトは、bashスクリプトです。ファイルの拡張子が.cmdのスクリプトは、Windowsコマンド・スクリプトです。次の説明では、ファイルの拡張子を指定しないスクリプト名を参照しています。

  • run—サンプルを実行し、java/bin/run-cache-serverを実行してプロキシ・サーバーを起動するよう要求します。

cpp

contactsおよびmodelディレクトリの下に編成されているすべてのサンプル・ソースです。

contact/out

ビルドによって出力されるオブジェクト・ファイルです。このディレクトリは、ビルド・スクリプトを実行するまで存在しません。

resource

contactsのLoaderExampleに使用するデータ・ファイルcontacts.csvです。

cpp/contacts

contactsのサンプル・ソースが含まれています。

cpp/security

securityのサンプル・ソースが含まれています。

cpp/pof

datamodelのソースおよびシリアライズに必要なすべてのクラスが含まれています。

$COHERENCE_CPP_HOME/include

Coherenceのヘッダー・ファイルが含まれています。

$COHERENCE_CPP_HOME/lib

Coherenceのライブラリが含まれています。


6.4.3.3 C++での手順

runスクリプトを実行します。サンプルの実行は、2つの部分から構成されています。新しいコマンド・シェルから次を実行します。

連絡先のサンプル

  1. bin/run-cache-serverで1つ以上のキャッシュ・サーバーを起動します。キャッシュ・サーバーは、プロキシ・サービスを実行し、Coherence*Extendクライアントからの接続が可能になります。

  2. 新しいコマンド・シェルで、runにサンプルの名前を付けて実行します。

    連絡先サンプルをWindowsで実行する場合:

    bin\run.cmd contactsと入力

    連絡先サンプルをLinux/MacおよびSolarisで実行する場合:

    bin/run contactsと入力

    Driver.mainメソッドがサンプルの機能を実行し、出力はコマンド・ウィンドウ(stdout)に送られます。

Coherence 12.1.2以上では、新しい問合せ言語機能のサンプルが追加されています。このサンプルは、Coherence InvocationServiceを使用する簡単なヘルパー・クラスFilterFactoryの構成および使用方法を示しています。

セキュリティのサンプル

  1. bin/run-cache-server securityで1つ以上のキャッシュ・サーバーを起動します。キャッシュ・サーバーは、プロキシ・サービスを実行し、Coherence*Extendクライアントからの接続が可能になります。

  2. 新しいコマンド・シェルで、runにサンプルの名前を付けて実行します。

    セキュリティ・サンプルをWindowsで実行する場合:

    bin\run.cmd securityと入力

    セキュリティ・サンプルをLinux/MacおよびSolarisで実行する場合:

    bin/run securityと入力

    Driver.mainメソッドがサンプルの機能を実行し、出力はコマンド・ウィンドウ(stdout)に送られます。

6.5 Coherenceの基本機能のサンプル

Coherenceの基本機能のサンプルは、単純化された連絡先情報をトラッキングすることによってCoherenceの基本機能の使用方法を説明するサンプルのコレクションで、次のものが含まれています。

このサンプル・セットは、これらのデータ・モデル・クラスで表されるサンプル・データを使用します。

表6-14 機能サンプル用のデータ・モデル・クラス

名前 説明

Address

アドレス情報

Contact

連絡先情報(住所および電話番号を含む)

ContactId

連絡先情報へのキー(連絡先名)

PhoneNumber

電話番号


このサンプル・セットには、サンプルのContacts情報を含むカンマ区切り値のファイルであるcontacts.csvファイルも付属しています。

6.5.1 サンプル・セットの実行

  1. 次の情報を確認します。

  2. 第6.5.2項「機能ドライバ・ファイルの理解」にあるドライバの実装情報を確認します。

6.5.2 機能ドライバ・ファイルの理解

ドライバ・ファイルには、すべての連絡先サンプルを次の順番で実行するstaticメソッドmainがあります。

  1. LoaderExample

  2. QueryExample

  3. QueryLanguageExample

  4. ObserverExample

  5. BasicExample

  6. ProcessorExample

ドライバ・ファイルは、Coherenceをサポートしている3つのプログラミング言語のそれぞれで実装されています。

言語 実装クラス
Java java/srccom.tangosol.examples.contacts.Driver
.NET dotnet/src/contactsのTangosol.Examples.Contactsネームスペース内にあるDriver
C++ cpp/contactscoherence::examplesネームスペース内にあるDriver

6.5.3 基本データ・アクセスのサンプル

このサンプルは、データの取得、挿入および削除を含むCoherenceの最も基本的なデータ・アクセス機能を示しています。

Java

実装クラス: java/src内のcom.tangosol.examples.contacts.BasicExample

  • キャッシュでのContactIdContactとの関連付け:

    cache.put(contactId, contact);
    
  • ContactIdと関連付けられたContactをキャッシュから取得:

    contact = (Contact) cache.get(contactId);
    
  • ContactIdからContactへのマッピングをキャッシュから削除:

    cache.remove(contactId);
    

.NET

実装クラス: dotnet/src/contactsTangosol.Examples.Contactsネームスペース内にあるBasicExample

  • キャッシュでのContactIdContactとの関連付け:

    cache.Add(contactId, contact);
    
  • ContactIdと関連付けられたContactをキャッシュから取得:

    contact = (Contact)cache[contactId];
    
  • ContactIdからContactへのマッピングをキャッシュから削除:

    cache.Remove(contactId);
    

C++

実装クラス: cpp/contactscoherence::examplesネームスペース内にあるBasicExample

  • キャッシュでのContactIdContactとの関連付け:

    hCache->put(vContactId, vContact);
    
  • ContactIdと関連付けられたContactをキャッシュから取得:

    vContact = cast<Managed<Contact>::View>(hCache->get(vContactId));
    
  • ContactIdからContactへのマッピングをキャッシュから削除:

    hCache->remove(vContactId);
    

6.5.3.1 出力の例

出力例(「オブザーバのサンプル」による):

例6-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

6.5.4 ローダーのサンプル

このサンプルは、ファイルまたはストリームからキャッシュに連絡先をロードします。

ここでは、バルク挿入を使用する最も効率的なキャッシュへのデータの挿入方法を示します。これによって、アプリケーションとキャッシュの間のネットワーク・ラウンドトリップの数が最小化されます。

Java

実装クラス: java/src内のcom.tangosol.examples.contacts.LoaderExample

cache.putAll(mapBatch);

.NET

実装クラス: dotnet/src/contactsTangosol.Examples.Contactsネームスペース内にあるLoaderExample

cache.InsertAll(dictBatch);

C++

実装クラス: cpp/contactscoherence::examplesネームスペース内にあるLoaderExample

hCache->putAll(hMapBatch);

6.5.4.1 出力例

例6-2 LoaderExampleの出力例

.........Added 10000 entries to cache

6.5.5 問合せのサンプル

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/contactsTangosol.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/contactscoherence::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;
    

6.5.5.1 出力例

10,000件の連絡先および複数の問合せがあるため、出力例は大きくなります。次は、Massachusetts居住者の問合せのサンプルです。

例6-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"}

6.5.6 オブザーバのサンプル

ObserverExampleは、MapListenerを使用してキャッシュ・データの挿入、更新および削除などのキャッシュ・イベントをモニターする方法を示します。コードのサブセットを次に示します。

Java

実装クラス: java/src内のcom.tangosol.examples.contacts.ObserverExample

  • ContactChangeListenerMapListenerインタフェースを実装するクラス

    cache.addMapListener(new ContactChangeListener());
    

.NET

実装クラス: dotnet/src/contactsTangosol.Examples.Contactsネームスペース内にあるObserverExample

  • ContactChangeListenerICacheListenerインタフェースを実装するクラス

    cache.AddCacheListener(new ContactChangeListener());
    

C++

実装クラス: cpp/contactscoherence::examplesネームスペース内にあるObserverExample

  • ContactChangeListenerMapListenerインタフェースを実装するクラスで、Coherence implementsを使用します。

    ContactChangeListener::Handle hListener = ContactChangeListener::create();
    hCache->addFilterListener(hListener);
    
  • ContactChangeListenerの定義:

    class ContactChangeListener
       : public class_spec<ContactChangeListener,
          extends<Object>, implements <MapListener> >
    

このサンプルを実行しても、即座に出力はされません。エントリが挿入、更新および削除されると、登録されたリスナーによってそれが出力されます。更新の場合、古い値および新しい値の両方が出力されます。「基本データ・アクセスのサンプル」および「プロセッサのサンプル」を実行すると、エントリが変更されて出力が発生します。

6.5.7 プロセッサのサンプル

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/contactsTangosol.Examples.Contactsネームスペース内にあるProcessorExample

ヘルパー・クラス: dotnet/src/contactsTangosol.Examples.Contactsネームスペース内にあるOfficeUpdater

  • MAに住むすべての人の連絡先にOfficeUpdaterを適用。OfficeUpdaterは、AbstractProcessorを拡張することによってIEntryProcessorインタフェースを実装しているクラス

    cache.InvokeAll(new EqualsFilter("getHomeAddress.getState", "MA"), new OfficeUpdater(addrWork));
    

C++

実装クラス: cpp/contactscoherence::examplesネームスペース内にあるProcessorExample

ヘルパー・クラス: cpp/contactscoherence::examplesネームスペース内にあるOfficeUpdater

  • OfficeUpdaterUpdaterProcessor型を拡張したクラス

    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);
    

6.5.7.1 出力例

出力例(「オブザーバのサンプル」による)は、連絡先の件数が多いため大きくなります。次のように出力されます。

例6-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

6.5.8 問合せ言語

このサンプルは、連絡先を問い合せるサンプルの実行方法を示しています。

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/queryTangosol.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/querycoherence::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));
    

6.5.8.1 出力例

出力例(「問合せのサンプル」による):

例6-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

6.5.9 データ・ジェネレータ

実装クラス: java/src内のcom.tangosol.examples.contacts.DataGenerator

DataGeneratorには、ランダムな連絡先情報を生成し、結果をカンマ区切り値のファイルに格納するstaticなmainメソッドがあります。contactsサンプルとともにパッケージ化されているcontacts.csvは、このクラスによって生成されました。さらに多くのサンプル・データが必要になった場合に備えて、このクラスが含まれています。

実装はJavaのみです。

6.6 Coherenceのセキュリティのサンプル

Coherenceのセキュリティのサンプルは、Coherenceのセキュリティ機能を使用してアクセス制御を提供する方法を説明するサンプルのコレクションです。

これらのサンプルは、Coherenceのセキュリティ機能のみを説明するように簡略化されています。セキュリティのベスト・プラクティスのサンプルではありません。

6.6.1 このサンプル・セット

  • パスワードを要求するキャッシュ参照を取得します。

  • 異なるロールを必要とするキャッシュおよび起動サービス操作を試行します。

6.6.1.1 セキュリティ・サンプル・セットの実行

  1. 次の情報を確認します。

  2. 次の項にあるセキュリティ・ドライバの実装情報を確認します。

6.6.1.2 セキュリティ・ドライバ・ファイルの理解

すべてのセキュリティ・サンプルを次の順番で実行するstaticメソッドmainがあります。

  1. PasswordExample

  2. AccessControlExample.accessCache()

  3. AccessControlExample.accessInvocationService()

Coherenceをサポートしている3つのプログラミング言語のそれぞれで実装されています。

言語 実装クラス
Java java/srccom.tangosol.examples.security.Driver
.NET dotnet/src/securityTangosol.Examples.Securityネームスペース内にあるDriver
C++ cpp/securitycoherence::examplesネームスペース内にあるDriver

次の概要が示されている各サンプルの詳細は、サンプル・セットのexample.zipファイルを参照してください。

6.6.2 パスワードのサンプル

このサンプルは、Coherenceプロキシがキャッシュへの参照を取得するためにパスワードを要求する方法を示しています。

Java

実装クラス: java/src内のcom.tangosol.examples.security.PasswordExample

コードは、Subjectを取得するためにログインし、そのサブジェクトのコンテキストで実行中のキャッシュ参照を取得しようとします。

「パスワードIDトランスフォーマ」は、パスワードを含むセキュリティ・トークンを生成します。「パスワード・アイデンティティ・アサータ」(プロキシ内で実行)は、パスワードを強制するためにセキュリティ・トークンを検証します。トークンは、プロキシへの接続時に自動的に生成および検証されます。

.NET

実装クラス: dotnet/src/securityTangosol.Example.Securityネームスペース内にあるPasswordExample

コードは、Principalを取得するためにログインし、Principalをスレッドの現在のプリンシパルにすることによってそのPrincipalのコンテキストで実行中のキャッシュ参照を取得しようとします。

「パスワードIDトランスフォーマ」は、パスワードを含むセキュリティ・トークンを生成します。「パスワード・アイデンティティ・アサータ」(プロキシ内で実行)は、パスワードを強制するためにセキュリティ・トークンを検証します。トークンは、プロキシへの接続時に自動的に生成および検証されます。

C++

実装クラス: cpp/securitycoherence::examplesネームスペース内にあるAccessExample

コードは、Subjectを取得するためにログインし、そのSubjectのコンテキストで実行中のキャッシュ参照を取得しようとします。

「パスワードIDトランスフォーマ」は、パスワードを含むセキュリティ・トークンを生成します。「パスワード・アイデンティティ・アサータ」(プロキシ内で実行)は、パスワードを強制するためにセキュリティ・トークンを検証します。トークンは、プロキシへの接続時に自動的に生成および検証されます。

出力例:

例6-6 パスワードのサンプルの出力例

------password example begins------
------password example succeeded------
------password example completed------

6.6.3 アクセス制御のサンプル

このサンプルは、簡略化されたロール・ベースのアクセス制御について示しています。

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/securityTangosol.Example.Securityネームスペース内にあるAccessControlExample

コードは、Principalを取得するために特定のロールを持つユーザーIDでログインし、そのPrincipalのコンテキストで実行中のキャッシュ参照を取得し、キャッシュの操作を試行します。ユーザーに付与されたロールに応じて、キャッシュ操作が許可または拒否されます。

writerロールを持つユーザーは、挿入および取得が許可されています。readerロールを持つユーザーは、取得はできますが、挿入はできません。writerロールを持つユーザーは、キャッシュの破棄はできません。adminロールを持つユーザーは、キャッシュを破棄できます。

その後、特定のロールを持つユーザーは起動サービスの使用を試行します。readerによる起動は許可されていませんが、writerでは許可されています。

一度あるPrincipalのコンテキストでキャッシュまたは起動サービス参照が作成されると、そのIDは永続的にその参照と関連付けられることに注意してください。キャッシュまたはサービス参照の使用すべてがそのIDの代理として行われます。

「パスワードIDトランスフォーマ」は、パスワード、ユーザーIDおよびロールを含むセキュリティ・トークンを生成します。「パスワード・アイデンティティ・アサータ」(プロキシ内で実行)は、パスワードを強制するためにセキュリティ・トークンを検証し、適切なユーザーIDおよびロールを持つSubjectを構築します。

セキュリティ・トークンの生成とアサーションは自動的に実行されます。

アクセス制御の実装については、「資格が付与されるキャッシュ・サービス」, 「資格が付与される起動サービス」および「資格が付与される名前付きキャッシュ」のコードを参照してください。

C++

実装クラス: cpp/securitycoherence::examplesネームスペース内にあるAccessControlExample

コードは、Subjectを取得するために特定のロールを持つユーザーIDでログインし、そのSubjectのコンテキストで実行中のキャッシュ参照を取得し、キャッシュの操作を試行します。ユーザーに付与されたロールに応じて、キャッシュ操作が許可または拒否されます。

writerロールを持つユーザーは、挿入および取得が許可されています。readerロールを持つユーザーは、取得はできますが、挿入はできません。writerロールを持つユーザーは、キャッシュの破棄はできません。adminロールを持つユーザーは、キャッシュを破棄できます。

その後、特定のロールを持つユーザーは起動サービスの使用を試行します。readerによる起動は許可されていませんが、writerでは許可されています。

一度あるサブジェクトのコンテキストでキャッシュまたは起動サービス参照が作成されると、そのIDは永続的にその参照と関連付けられることに注意してください。キャッシュまたはサービス参照の使用すべてがそのIDの代理として行われます。

「パスワードIDトランスフォーマ」は、パスワード、ユーザーIDおよびロールを含むセキュリティ・トークンを生成します。「パスワード・アイデンティティ・アサータ」(プロキシ内で実行)は、パスワードを強制するためにセキュリティ・トークンを検証し、適切なユーザーIDおよびロールを持つSubjectを構築します。

セキュリティ・トークンの生成とアサーションは自動的に実行されます。

アクセス制御の実装については、「資格が付与されるキャッシュ・サービス」, 「資格が付与される起動サービス」および「資格が付与される名前付きキャッシュ」のコードを参照してください。

6.6.3.1 出力例

出力例:

例6-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------

6.6.4 パスワードIDトランスフォーマ

このサンプルは、IdentityTransformerがIDからセキュリティ・トークンを生成する方法を示しています。

Java

実装クラス: java/src内のcom.tangosol.examples.security.PasswordIdentityTransformer

コードは、文字列の配列であるセキュリティ・トークンを生成します。最初の文字列はパスワードです。2番目の文字列はユーザーIDで、後続の文字列はユーザーのロールです。文字列の配列は、Coherence*Extendによってカスタム・シリアライザを使用せずにシリアライズされます。

このクラスは、Extendクライアントがプロキシに接続する際、または既存の接続でチャンネルが開かれる際に自動的に起動されます。

.NET

実装クラス: dotnet/src/securityTangosol.Example.Securityネームスペース内にあるPasswordIdentityTransformer

コードは、文字列の配列であるセキュリティ・トークンを生成します。最初の文字列はパスワードです。2番目の文字列はユーザーIDで、後続の文字列はユーザーのロールです。文字列の配列は、Coherence*Extendによってカスタム・シリアライザを使用せずにシリアライズされます。

このクラスは、Extendクライアントがプロキシに接続する際、または既存の接続でチャンネルが開かれる際に自動的に起動されます。

C++

実装クラス: cpp/securitycoherence::examplesネームスペース内にあるPasswordIdentityTranfromer

コードは、文字列の配列であるセキュリティ・トークンを生成します。最初の文字列はパスワードです。2番目の文字列はユーザーIDで、後続の文字列はユーザーのロールです。文字列の配列は、Coherence*Extendによってカスタム・シリアライザを使用せずにシリアライズされます。

このクラスは、Extendクライアントがプロキシに接続する際、または既存の接続でチャンネルが開かれる際に自動的に起動されます。

6.6.5 パスワード・アイデンティティ・アサータ

このサンプルは、IdentityAsserterがセキュリティ・トークンを検証し、プリンシパル名のリストからSubjectを生成する方法を示しています。

Java

実装クラス: java/src内のcom.tangosol.examples.security.PasswordIdentityAsserter

コードは、文字列の配列であるセキュリティ・トークンを処理します。最初の文字列はパスワードである必要があります。後続の文字列はプリンシパルです。トークンの処理に失敗すると、プロキシへのアクセスを拒否するSecurityExceptionが発生します。

.NET

実装クラス: なし

IdentityAsserterはプロキシ上でのみ(Javaで)実行されるため、.NETクライアントでは実行できません。そのため、.NET向けのPasswordIdentityAsserterはありません。

C++

実装クラス: なし

PasswordIdentityAsserterはプロキシ上でのみ(Javaで)実行されるため、C++クライアントでは実行できません。そのため、C++向けのPasswordIdentityAsserterはありません。

6.6.6 資格が付与されるキャッシュ・サービス

この例は、リモート・キャッシュ・サービスをラップしてアクセス制御を提供する方法を示しています。

Java

実装クラス: java/src内のcom.tangosol.examples.security.EntitledCachService

コードは、キャッシュ操作用のアクセス制御を提供する「資格が付与される名前付きキャッシュ」をインスタンス化します。コードは、キャッシュ・サービス・メソッドreleaseおよびdestroy用のアクセス制御も提供しています。アクセス制御チェックは、「セキュリティ・サンプル・ヘルパー」に委任されます。

このクラスは、キャッシュ・サービスがプロキシで起動した際に、自動的にインスタンス化されます。

.NET

.NETの実装はありません。クラスはプロキシ上でのみJavaで実行されます。

C++

C++の実装はありません。クラスはプロキシ上でのみJavaで実行されます。

6.6.7 資格が付与される起動サービス

このサンプルは、リモート起動サービスをラップしてアクセス制御を提供する方法を示しています。

Java

実装クラス: java/src内のcom.tangosol.examples.security.EntitledInvocationService

コードは、起動サービス・メソッド用のアクセス制御を提供します。アクセス制御チェックは、「セキュリティ・サンプル・ヘルパー」に委任されます。

このクラスは、起動サービスがプロキシで起動した際に、自動的にインスタンス化されます。

.NET

.NETの実装はありません。クラスはプロキシ上でのみJavaで実行されます。

C++

C++の実装はありません。クラスはプロキシ上でのみJavaで実行されます。

6.6.8 資格が付与される名前付きキャッシュ

このサンプルは、リモート名前付きキャッシュをラップしてアクセス制御を提供する方法を示しています。

Java

実装クラス: java/src内のcom.tangosol.examples.security.EntitledNamedCache

コードは、NamedCacheメソッド用のアクセス制御を提供します。アクセス制御チェックは、「セキュリティ・サンプル・ヘルパー」に委任されます。

このクラスは、キャッシュ・サービスがプロキシで起動した際に、自動的にインスタンス化されます。

.NET

.NETの実装はありません。クラスはプロキシ上でのみJavaで実行されます。

C++

C++の実装はありません。クラスはプロキシ上でのみJavaで実行されます。

6.6.9 セキュリティ・サンプル・ヘルパー

このサンプルは、認証およびアクセス制御用のヘルパー・クラスです。

Java

実装クラス: java/src内のcom.tangosol.examples.security.SecurityExampleHelper

コードは認証をシミュレートします。簡略化のため、これはSubjectを作成します。実際の実装では、プラットフォームおよび企業に固有な認証を行います。ログインでも、単純にユーザー名をロールにマッピングしています。

checkAccessメソッドは、ユーザーのロールによって操作が許可されているかを確認します。

.NET

実装クラス: dotnet/src/securityTangosol.Example.Securityネームスペース内にあるSecurityExampleHelper

コードは認証をシミュレートします。簡略化のため、これはPrincipalを作成します。実際の実装では、プラットフォームおよび企業に固有な認証を行います。ログインでも、単純にユーザー名をロールにマッピングしています。

C++

実装クラス: cpp/securitycoherence::examplesネームスペース内にあるSecurityExampleHelper

コードは認証をシミュレートします。簡略化のため、これはSubjectを作成します。実際の実装では、プラットフォームおよび企業に固有な認証を行います。ログインでも、単純にユーザー名をロールにマッピングしています。

6.7 Coherenceのライブ・イベントのサンプル

これらのサンプルは、EntryEventsEntryProcessorEventsおよびTransferEventsを含むCoherenceライブ・イベントの様々なイベント・タイプおよびそれらがどのように処理されるかを示しています。

ライブ・イベントのサンプルはパーティション・サービスの記憶域が有効なメンバーで実行されるため、Javaプログラミング言語でのみ使用可能です。

  • 「EventsExamples」—ライブ・イベントの様々な機能を示しています。

  • 「TimedTraceInterceptor」—異なるタイプのイベントに対して、コミット前イベントとコミット後イベントの間のタイミングを提供します。

  • 「CantankerousInterceptor」—挿入されるキーのタイプに基づいて、コミット前時間またはコミット後時間のどちらかにランタイム例外で応答します。

  • 「RedistributionInterceptor」—有効化された場合にパーティション・イベントをログに記録します。

  • 「RedistributionInvocable」—クラスタの様々なメンバーで実行されるアクション可能な3つの状態を定義します。状態とは、RedistributionInterceptorによって実行されるロギングの有効化、ロギングの無効化、またはinvocable (RedistributionInvocable)が実行されているJVMの終了です。

  • 「LazyProcessor」—イベントの処理間の実体のない遅延を作成します。

6.7.1 このサンプル・セット

  • 結果のキャッシュに挿入されるイベント前とイベント後の間の経過時間を計測する方法を示しています。

  • コミット前イベントおよびコミット後イベントにおける例外スローのセマンティクスを示しています。

  • パーティション再配布イベントの記録方法を示しています。

6.7.1.1 ライブ・イベント・サンプル・セットの実行

  1. 次の情報を確認します。

  2. 次の項にあるライブ・イベント・ドライバの実装情報を確認します。

6.7.1.2 ライブ・イベント・ドライバ・ファイルの理解

すべてのライブ・イベント・サンプルを次の順番で実行するstaticメソッドmainがあります。

  1. イベント時間測定サンプル

  2. イベント拒否サンプル

  3. パーティション転送イベント・サンプル

実装はJavaプログラミング言語のみです。

言語 実装クラス
Java java/srccom.tangosol.examples.events.Driver

6.7.2 EventsExamples

実装クラス: java/src内のcom.tangosol.examples.events.EventsExamples

EventsExamplesクラスは、ライブ・イベントの様々な機能を示しています。次のものが含まれます。

  • イベント・タイプで分割された平均経過時間の提供

  • イベント後と比較したイベント前の例外スローの異なるセマンティクスの説明

  • 有効な場合のパーティション移動のロギングの説明

EventsExamplesクラスでは、次の内部クラスが定義されています。

6.7.2.1 EventsTimingExample

EventsTimingExample内部クラスは、TimedTraceInterceptorによって実行されるアクションのきっかけとなります。これは、結果のキャッシュに挿入されるイベント前とイベント後の間の経過時間を計測する方法を示しています。結果キャッシュに挿入されたエントリは、このクラスを実行するプロセスのstdoutを使用して表示されます。

出力例:

例6-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]

6.7.2.2 VetodEventsExample

VetodEventsExample内部クラスは、CantankerousInterceptorによって実行されるアクションのきっかけとなります。これは、イベント前およびイベント後における例外スローのセマンティクスを示しています。記録する必要がある例外のみが結果キャッシュに挿入されます。結果キャッシュに挿入されたエントリは、このクラスを実行するプロセスのstdoutを使用して表示されます。

出力例:

例6-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

6.7.2.3 RedistributionEventsExample

RedistributionEventsExample内部クラスは、RedistributionInterceptorクラスによって実行されるアクションのきっかけとなります。これは、RedistributionInterceptorでのロギングの有効化およびメンバーの強制終了からパーティション再配布を誘発することによって、パーティション再配布イベントがどのように記録されるかを示しています。

出力例:

例6-10 RedistributionEventsExampleの出力例

Choosing to kill member Member(Id=3, Timestamp=2014-01-02 16:38:17.942, Address=10.159.154.103:8092, MachineId=47251, Location=site:,machine:TPFAEFFL-LAP,process:8168, Role=CoherenceServer)

6.7.3 TimedTraceInterceptor

実装クラス: java/src内のcom.tangosol.examples.events.TimedTraceInterceptor

TimedTraceInterceptorクラスは、イベントの各タイプ(挿入、更新、削除およびエントリ・プロセッサの実行)に対するコミット前イベントとコミット後イベントの間のタイミングを提供します。これらのタイミングは、cSampleパラメータで定義されるサンプル率で収集および平均の計算が行われます。さらに、同時にログにも出力されます。この実装は各バイナリ・キーへの強い参照を維持しますが、同じキーに対するコミット後イベントの受信の際に削除されます。

インターセプタは、EventInterceptorインタフェースを実装します。@Interceptor注釈は、identifier属性でインターセプタの一意名を示し、order属性で実行順序(Order.HIGH)を示します。

インターセプタには、保護されたEventTimer内部クラスも含まれています。このクラスでは、通知対象の各イベントの経過時間が測定されます。インターセプタは、各エントリに対するコミット前イベントとコミット後イベントの間の時間、およびそれぞれのイベント・タイプ(INSERTUPDATEREMOVE)を追跡します。タイミングは、サンプル統計と累積統計を表示するCoherenceログにまとめて送信されます。

汎用引数がcom.tangosol.net.events.partition.cache.Eventであるため、ユーザーは、フィルタリングを指定しなくても、そのイベントのコンシューマであるイベント(EntryEventおよびEntryProcessorEvent)のみを取得します。

6.7.4 CantankerousInterceptor

実装クラス: java/src内のcom.tangosol.examples.events.CantankerousInterceptor

CantankerousInterceptorクラスは、あるキーの挿入イベントはコミット前またはコミット後のフェーズで実行時例外になるという議論を呼ぶ性質を持ったEventInterceptorの実装です。

例外がコミット前にスローされた場合は、ロールバックが発生し、例外がクライアントに伝播されます。例外がコミット後に発生した場合は、ログ・イベントが記録されます。例外に使用されるキーは、VETOおよびNON-VETOです。INSERTINGおよびUPDATINGは拒否できるイベントであるのに対して、INSERTEDおよびUPDATEDイベントは拒否できません。

6.7.5 RedistributionInterceptor

実装クラス: java/src内のcom.tangosol.examples.events.RedistributionInterceptor

RedistributionInterceptorクラスは、有効化された際にパーティション・アクティビティを記録するEventInterceptorです。ロギングは、RedistributionInvocable.ENABLED定数の設定を使用して有効化できます。

6.7.6 RedistributionInvocable

実装クラス: java/src内のcom.tangosol.examples.pof.RedistributionInvocable

RedistributionInvocableクラスは、クラスタの様々なメンバーで実行されるアクション可能な3つの状態を定義します。この例では、状態を次のように定義します。

  • DISABLE: RedistributionInterceptorイベント・インターセプタによって実行されるロギングを無効にします。

  • ENABLE: RedistributionInterceptorイベント・インターセプタによって実行されるロギングを有効にします。

  • KILL: この起動可能(RedistributionInvocable)が実行されるJVMを終了します。

6.7.7 LazyProcessor

実装クラス: java/src内のcom.tangosol.examples.pof.LazyProcessor

LazyProcessorクラスは、イベントの処理間の実体のない遅延を作成します。クラスでは、このプロセッサがイベントの処理間でスリープする必要があるミリ秒数を指定します。このクラスは、EventsExamplesクラスのEventsTimingExampleサブクラスで使用されます。

6.8 Coherence Java 8機能のサンプル

これらのサンプルは、Java 8で使用可能な機能を使用したCoherenceの使用方法を示します。サンプルは、Mapインタフェースで導入されたストリーム、ラムダおよびデフォルト・メソッドの使用方法を示します。機能は3つの個別のサンプルにまとめられます。ただし、これらの機能は互いの上にビルドされるため、一緒に使用することはできません。

6.8.1 このサンプル・セット

  • キャッシュ・エントリの問合せおよび処理をする時の、Javaストリームの使用方法を示します。

  • Coherenceの共通タスクを単純化する時の、ラムダ機能の使用方法を示します。

  • CoherenceのInvocableMapインタフェース内でオーバーライドされたMapインタフェースの新しいデフォルト・メソッドを使用して、キャッシュ・エントリを問い合せ、処理する方法を示します。

6.8.1.1 Java 8機能のサンプル・セットの実行

  1. 次の情報を確認します。

  2. 次の項にあるJava 8 Driverの実装情報を確認します。

6.8.1.2 Java 8のドライバ・ファイルの理解

すべてのJava 8のサンプルを次の順番で実行するstaticメソッドmainがあります。

  1. ストリーム

  2. ラムダ

  3. マップのデフォルト・メソッド

実装はJavaプログラミング言語のみです。

言語 実装クラス
Java java/src内のcom.tangosol.examples.java8.Driver

6.8.2 ストリーム

実装クラス: java/src内のcom.tangosol.examples.java8.StreamsExample

StreamsExampleクラスは、StreamAPIを使用してコンタクト・キャッシュの複数の問合せを実行します。また、ラムダ式が使用できます。問合せの結果はコンソールに出力されます。このクラスは、CoherenceのRemoteCollectorインタフェースを使用して標準Java Collectorインタフェースを拡張し、シリアライズをサポートして配布されるストリーム要素を順番に処理します。

6.8.3 ラムダ

実装クラス: java/src内のcom.tangosol.examples.java8.LambdaExample

LambdaExampleクラスは、ラムダ式を使用してコンタクト・キャッシュにリスナーを追加し、エントリ・プロセッサを使用して連絡先を更新します。最後に、ラムダ式は、CoherenceのFilters APIを使用したコンタクト・キャッシュの問合せに使用されます。

6.8.4 マップのデフォルト・メソッド

実装クラス: java/src内のcom.tangosol.examples.java8.MapDefaultMethdodExample

MapDefaultMethodExampleクラスは、コンタクト・キャッシュの複数の問合せを実行し、Mapインタフェースに追加されたデフォルト・メソッドを使用していくつかのキャッシュ・エントリを更新します。CoherenceはInvocableMapインタフェース内のデフォルト・メソッドをオーバーライドすることに注意してください。また、キャッシュを問い合せる際に、サンプルはラムダ式を使用することも注意してください。

6.9 Coherenceの非同期機能のサンプル

これらのサンプルは、AsyncNamedCache APIを使用して非同期データ・グリッドを実行する方法を示します。サンプルは、java.util.concurrent.CompletableFuture APIも使用し、操作が完了したかどうかチェックし、完了するまで待機し、操作結果を取得します。

6.9.1 このサンプル・セット

  • キャッシュ内のデータの取得および保存を非同期で実行する方法を示します。

  • キャッシュ・エントリを非同期で処理する方法を示します。

  • キャッシュ・エントリを非同期で集計する方法を示します。

6.9.1.1 非同期機能のサンプル・セットの実行

  1. 次の情報を確認します。

  2. 次の項にある非同期のDriverの実装情報を確認します。

6.9.1.2 非同期ドライバ・ファイルの理解

すべての非同期サンプルを次の順番で実行するstaticメソッドmainがあります。

  1. データ・アクセスのサンプル

  2. プロセッサのサンプル

  3. アグリゲータのサンプル

実装はJavaプログラミング言語のみです。

言語 実装クラス
Java java/srccom.tangosol.examples.async.Driver

6.9.2 非同期のデータ・アクセス

実装クラス: java/src内のcom.tangosol.examples.async.DataAccessExample

DataAccessExampleクラスは、AsyncNamedCache APIを使用して、コンタクト・キャッシュのインスタンスを取得します。クラスは新しい連絡先を作成し、AsyncNamedCacheインスタンスを使用して連絡先をキャッシュに保存し、キャッシュから連絡先を取得します。連絡先は変更されて、キャッシュに戻されます。

6.9.3 非同期のエントリ・プロセッサ

実装クラス: java/src内のcom.tangosol.examples.async.ProcessorExample

ProcessorExampleクラスは、AsyncNamedCache APIを使用して、コンタクト・キャッシュのインスタンスを取得します。AsyncNamedCacheインスタンスを使用して、キャッシュを問合せ、連絡先の名前のセットを大文字に変更するエントリ・プロセッサを実行します。次に、エントリ・プロセッサを使用して名前を小文字に戻します。

6.9.4 非同期のアグリゲータ

実装クラス: java/src内のcom.tangosol.examples.async.AggregatorExample

AggregatorExampleクラスは、AsyncNamedCache APIを使用して、コンタクト・キャッシュのインスタンスを取得します。AsyncNamedCacheインスタンスを使用して、キャッシュを問合せ、年齢別の連絡先のセット上で集計を実行します。

6.10 Coherenceのフェデレーテッド・キャッシュのサンプル

フェデレーテッド・キャッシュのサンプルは、2つのクラスタ、ClusterAおよびClusterBを起動します。クラスタは、フェデレーション・トポロジに構成され、キャッシュされたデータは2つのクラスタ間でアクティブに同期されます。

6.10.1 このサンプル・セット

  • フェデレーション・クラスタの参加者構成を示します

  • アクティブ/アクティブ型レプリケーションのトポロジ構成を示します

  • フェデレーテッド・キャッシュのサービス構成を示します

  • クラスタ参加者間の通信をセキュアにするSSL構成を示します

6.10.1.1 フェデレーテッド・キャッシュのサンプル・セットの実行

  1. 次の情報を確認します。

  2. 次の項にあるフェデレーテッド・キャッシュのDriverの実装情報を確認します。

6.10.1.2 フェデレーテッド・キャッシュのドライバ・ファイルの理解

次を実行するstaticメソッド、mainがあります。

  1. 2つのクラスタを起動します。

  2. GUIアプリケーション、CohQLまたはコンソールのいずれかを各クラスタで起動します。

実装はJavaプログラミング言語のみです。

言語 実装クラス
Java java/srccom.tangosol.examples.federation.Driver

6.10.2 フェデレーション構成

フェデレーションのサンプルは、構成を示します。resource/federation/examples-cache-configure.xmlファイルを検証し、フェデレーテッド・キャッシュ構成を確認します。resource/federation/tangosol-coherence-override.xmlファイルを検証し、フェデレーション参加者およびレプリケーション・トポロジの構成方法の詳細を確認します。

6.11 Coherenceの永続性のサンプル

永続性のサンプルは、キャッシュ・データからディスクへの保存およびリカバリの方法を示します。サンプルは、多数の異なる永続性操作をプログラムによって実行します。永続性操作は、PersistenceCoordinatorMBean MBeanおよびCohQLコマンドを使用して実行することもできます。

6.11.1 このサンプル・セット

  • キャッシュ・スナップショットを保存およびリカバリする方法を示します

  • 永続性のある通知を登録する方法を示します

  • 永続性操作をパラレルで実行する方法を示します

  • カスタム・アーカイバの作成方法および使用方法を示します

6.11.1.1 永続性のサンプル・セットの実行

  1. 次の情報を確認します。

  2. 次の項にある永続性のDriverの実装情報を確認します。

6.11.1.2 永続性のドライバ・ファイルの理解

入力された引数に基づき永続性のサンプルを実行するstaticメソッドmainがあります。

  1. 基本的なスナップショットのサンプル

  2. 永続性のある通知のサンプル

  3. パラレルの永続性操作のサンプル

  4. カスタム・アーカイバのサンプル

実装はJavaプログラミング言語のみです。

言語 実装クラス
Java java/srccom.tangosol.examples.async.Driver

6.11.2 基本的なスナップショット操作

実装クラス: java/src内のcom.tangosol.examples.persistence.BasicSnapshotOperations

BasicSnapshotOperationsクラスは、キャッシュのコンテンツを保存およびリカバリする永続性のスナップショットの使用方法を示します。次のようにして、連絡先のサンプルを使用し、キャッシュの移入およびプログラムによる永続性操作を実行します。

  • 連絡先キャッシュのスナップショットが作成されます。永続性ファイルは、java/persistence-dataにあります。

  • 使用可能なスナップショットのリストが検索されます。

  • 連絡先キャッシュがすべてのデータで削除されます。

  • キャッシュ・コンテンツがスナップショットからリカバリされます。

  • キャッシュのサイズがレポートされます。

  • 連絡先キャッシュのスナップショットが削除されます。

  • 使用可能なスナップショットのリストを検証し、スナップショットが削除されたことを確認します

6.11.3 永続性のある通知

実装クラス: java/src内のcom.tangosol.examples.persistence.NotificationWatcher

NotificationWatcherクラスは、永続性操作からの通知をモニターする方法を示します。基本的なスナップショット操作のサンプルが、モニターされている操作で実行されます。クラスは、永続性のある通知リスナーを連絡先キャッシュ・サービス上に作成して登録します。次に、通知を使用して、永続性操作の実行にかかる時間をモニターします。

6.11.4 パラレルの永続性操作

実装クラス: java/src内のcom.tangosol.examples.persistence.ParallelSnapshotOperations

ParallelSnapshotOperationsクラスは、複数のパーティション化されたキャッシュ・サービスに対するパラレルのスナップショット操作をコールする方法を示します。基本的なスナップショット操作のサンプルが実行され、連絡先キャッシュ・サービスの2つのインスタンスが作成されます。次に、各キャッシュ・サービスに対して永続性操作が実行されます。

6.11.5 カスタム・アーカイバのスナップショットのアーカイブ

実装クラス: java/src内のcom.tangosol.examples.archiver.SFTPSnapshotArchiver

SFTPSnapshotArchiverクラスは、スナップショット・アーカイバのカスタム実装で、JCraft (http://www.jcraft.com/jsch/)のJSchライブラリを使用します。セキュアなFTPを使用してリモート・サーバーにスナップショットをアーカイブするアーカイバを作成します。SFTPSnapshotArchiverクラスは、AbstractSnapshotArchiverクラスを拡張します。このサンプルを実行するには、JSchライブラリをダウンロードし、リモート・サーバーがSSHをサポートしている必要があります。

サンプル・ファイル、Driverは、標準的スナップショット操作のサンプルと同様に実行されますが、アーカイブ操作が含まれます。次のようにして、永続性操作が実行されます。

  • 連絡先キャッシュのスナップショットが作成されます。永続性ファイルは、java/persistence-dataにあります。

  • 使用可能なスナップショットのリストが検索されます。

  • 連絡先キャッシュのスナップショットがSFTPを使用してアーカイブされます。

  • 連絡先キャッシュのスナップショットが削除されます。

  • 連絡先キャッシュがすべてのデータで削除されます。

  • キャッシュのサイズがレポートされます。

  • アーカイブされたスナップショットがSFTPを使用して取得されます。

  • 使用可能なスナップショットのリストが検索されます。

  • キャッシュ・コンテンツがスナップショットからリカバリされます。

  • キャッシュのサイズがレポートされます。

  • スナップショットおよびアーカイブされたスナップショットは、どちらも削除されます。

6.12 Coherence RESTのサンプル

Coherence RESTサンプルは、Coherence REST APIを使用する基本的な単一のWebベースのアプリケーションの作成方法を示します。サンプルは、Grizzly HTTPサーバーを使用して、クライアントHTTPリクエストを受信します。サンプルのクライアントは、いくつかのJavaScriptライブラリおよびAngular JSフレームワークを使用してビルドされます。

他のCoherenceのサンプルとは異なり、Coherence RESTサンプルはApache Mavenを使用してサンプルをビルドおよび実行します。Mavenは、Coherence RESTの使用に適しており、すべてのライブラリ依存性の管理を容易にします。RESTのサンプルは、COHERENCE_HOME/examples/rest/ディレクトリ内のMavenの標準ディレクトリ構造にまとめられています。

  • /src/main/java – Javaソース・ファイルのディレクトリ

  • /src/main/resources – Coherenceの構成ファイルのディレクトリ。

  • /src/main/resources/web – staticのHTMLページのディレクトリ。

Coherence RESTに関するドキュメントは、『Oracle Coherenceリモート・クライアントの開発』を参照してください。

6.12.1 このサンプル・セット

  • Coherence RESTをGrizzly HTTPサーバーを使用し、構成およびデプロイする方法を示します。

  • Coherence REST APIを使用する基本的なJavaScriptクライアントをビルドする方法を示します。

  • CoherenceでRESTのAPIを使用してキャッシュ・エントリを問合せ、作成、更新および削除する方法を示します。

  • カスタム・エントリ・プロセッサの使用方法を示します

  • コンポジット・キーの使用方法、およびKeyConverterクラスの使用方法を示します。

  • Server-Sent Eventsを使用してキャッシュ・イベントを通知する方法を示します。

6.12.2 サンプルのビルドおよび実行

サンプルは、Maven 3.2.5以降を使用してビルドおよび実行され、AngularJS 1.4.1以上をサポートするブラウザが必要です。「Javaでの前提条件」も参照してください。

サンプルをビルドして実行する手順は、次のとおりです。

  1. coherence.jarおよびcoherence-rest.jarライブラリを、ローカルのMavenリポジトリ内に含めます。

    mvn install:install-file -Dfile=COHERENCE_HOME/lib/coherence.jar 
       -DpomFile=COHERENCE_HOME/plugins/maven/com/oracle/coherence/coherence
       /12.2.1/coherence.12.2.1.pom
    
    mvn install:install-file -Dfile=COHERENCE_HOME/lib/coherence-rest.jar 
       -DpomFile=COHERENCE_HOME/plugins/maven/com/oracle/coherence/coherence-rest
       /12.2.1/coherence-rest.12.2.1.pom
    

    注意:

    必要な依存性をダウンロードするには、settings.xmlファイルへのパスを指定する必要があります。次に例を示します。
    mvn -s /path/to/settings.xml ...
    

    設定ファイルが存在せず、インターネットへのアクセスでプロキシ・サーバーを使用している場合、ベース・ディレクトリで提供されるサンプルのsettings.xmlを使用できます。ファイルを変更して、プロキシ・サーバー設定に追加できます。


  2. 次を発行して、RESTのサンプルをビルドします。

    mvn clean compile
    
  3. キャッシュ・サーバーおよびHTTPプロキシを起動します。

    mvn exec:exec -DhttpProxy
    

    アプリケーションが起動し、ホーム・ページが自動的にデフォルトのブラウザにロードされます。ホーム・ページが自動的にデフォルトのブラウザにロードされない場合、次のURLに移動します。

     http://127.0.0.1:8080/application/index.html
    

    注意:

    HTTPサーバーはすべてのIPアドレスをリスニングしますが、次をmvn exec:execコマンドに渡すことで、アプリケーションが実行されるアドレスおよびポートを変更できます。
    mvn exec:exec -DhttpProxy -Dhttp.address=x.x.x.x -Dhttp.port=7777
    

  4. オプションで、追加のキャッシュ・サーバーを(HTTPサーバーなしで)起動します。

    mvn exec:exec -DcacheServer
    

6.12.3 「製品」ページ

実装: COHERENCE_HOME\examples\rest\src\main\resources\web\js\products.js

「製品」ページは、CoherenceでRESTのAPIを使用して、デフォルトの製品を問合せ、作成、更新、削除および移入する方法を示します。ページでは、カスタム・エントリ・プロセッサを使用して、製品価格を増加およびアイテムの追加の量を受信できます。

6.12.4 「部門」ページ

実装: COHERENCE_HOME\examples\rest\src\main\resources\web\js\departments.js

「部門」ページは、CoherenceでRESTのAPIを使用して、デフォルトの部門を問合せ、作成、更新、削除および移入する方法を示します。

6.12.5 「連絡先」ページ

実装: COHERENCE_HOME\examples\rest\src\main\resources\web\js\contacts.js

「連絡先」ページは、CoherenceでRESTのAPIを使用して、デフォルトの連絡先を問合せ、作成、更新、削除および移入する方法を示します。サンプルにはコンポジット・キーがあり、KeyConverterクラスをこれらのキーで実行する使用方法を示します。最後に、サンプルは、RESTのコールで返される問合せをソートする方法を示します。

6.12.6 Server-Sent Events

実装: COHERENCE_HOME\examples\rest\src\main\resources\web\js\sse.js

Server-Sent Eventsページは、Coherence RESTのAPIのイベントをリスニングします。リスニングの開始をクリックして、対応するキャッシュのリスナーを登録します。アプリケーションの新しいインスタンスを起動し、対応するキャッシュを変更します。アプリケーションの元のインスタンスに切り替え、更新された統計を表示します。


注意:

Internet Explorerでは、Server-Sent Eventsはサポートされていません。