プライマリ・コンテンツに移動
Oracle® Fusion Middleware Oracle Coherenceリモート・クライアントの開発
12c (12.2.1)
E69907-02
目次へ移動
目次

前
次

8 C++クライアントの構成と使用

この章では、Coherence for C++クライアントの設定手順を説明します。

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

一般的な手順

Coherence for C++を構成して使用するには、次の手順が必要です。

  1. C++アプリケーションの実装

  2. アプリケーションのコンパイルとリンク

  3. パスの構成

  4. 拡張プロキシ・サービスの定義

  5. Extendクライアントで使用するキャッシュの定義

  6. リモート・キャッシュの定義

  7. 統合オブジェクトの構築(C++) (『Oracle Coherenceでのアプリケーションの開発』も参照)

  8. プロキシ・サーバーの起動

  9. クライアント・アプリケーションを起動します。

C++アプリケーションの実装

Coherence for C++に用意されているAPIを使用すると、データ、データ・イベント、データ処理などのCoherenceクラスタ化サービスに、Coherenceクラスタ外部からC++アプリケーションを使用してアクセスできます。

Coherence for C++ APIは、次のもので構成されています。

  • 一連のC++パブリック・ヘッダー・ファイル

  • サポートされているすべてのC++コンパイラでビルドした、各バージョンの静的ライブラリ

  • いくつかのサンプル

このライブラリを使用したC++アプリケーションは、Coherenceクラスタ内で稼働するCoherence*Extendのクラスタ化サービス・インスタンスに、高性能なTCP/IPベースの通信レイヤーを使用して接続できます。このライブラリからCoherence*Extendクラスタ化サービスにすべてのクライアント・リクエストが送信され、このサービスは実際のCoherenceクラスタ化サービス(パーティション・キャッシュ・サービス、レプリケート・キャッシュ・サービスなど)に委任することで、クライアント・リクエストに応答します。

「Coherence for C++クライアントAPIの使用」では、APIのキー・クラスの概要を説明します。これらのクラスの詳細は、Coherence for C++のdocディレクトリにあるAPIそのものを参照してください。

アプリケーションのコンパイルとリンク

Coherence for C++を採用したアプリケーションをコンパイルできるプラットフォームのリストは、サポートされているプラットフォームとオペレーティング・システムに関するトピックを参照してください。

たとえば、次に示すWindows 32ビット・プラットフォーム用build.cmdファイルは、Coherence for C++のデモのファイルをビルド、コンパイルおよびリンクします。

@echo off
setlocal

set EXAMPLE=%1%

if "%EXAMPLE%"=="" (
   echo You must supply the name of an example to build.
   goto exit
   )

set OPT=/c /nologo /EHsc /Zi /RTC1 /MD /GR /DWIN32
set LOPT=/NOLOGO /SUBSYSTEM:CONSOLE /INCREMENTAL:NO
set INC=/I%EXAMPLE% /Icommon /I..\include
set SRC=%EXAMPLE%\*.cpp common\*.cpp
set OUT=%EXAMPLE%\%EXAMPLE%.exe
set LIBPATH=..\lib
set LIBS=%LIBPATH%\coherence.lib

echo building %OUT% ...
cl %OPT% %INC% %SRC%
link %LOPT% %LIBS% *.obj /OUT:%OUT%

del *.obj

echo To run this example execute 'run %EXAMPLE%'

:exit

このファイルにある各変数の意味は次のとおりです。

  • OPTおよびLOPTは、コンパイラのオプションをポイントします。

  • INCは、includeディレクトリにあるCoherence for C++ APIのファイルをポイントします。

  • SRCは、commonディレクトリにあるC++のヘッダー・ファイルとコード・ファイルをポイントします。

  • OUTは、コードのコンパイルが完了したときにコンパイラやリンカーで生成する必要のあるファイルをポイントします。

  • LIBPATHは、libraryディレクトリをポイントします。

  • LIBSは、Coherence for C++の共有ライブラリ・ファイルをポイントします。

このファイルは、これらの環境変数を設定した後、C++のコード・ファイルとヘッダー・ファイル、APIファイルおよびOPTファイルをコンパイルし、LOPT、Coherence for C++の共有ライブラリ、生成されたオブジェクト・ファイルおよびOUTファイルをリンクします。オブジェクト・ファイルを削除することによってこの処理は終了します。

パスの構成

Coherence for C++ライブラリへの構成パスを設定します。この手順では、ライブラリをポイントする環境変数を設定します。環境変数名とライブラリのファイル名は、使用しているプラットフォーム環境によって異なります。プラットフォームごとの環境変数とライブラリ名のリストは、「Coherence C++クライアントの概要」を参照してください。

C++によるキャッシュ参照の取得

次のようにcoherence::net::CacheFactoryクラスを使用することによって、構成済キャッシュへの参照を名前によって取得できます。

NamedCache::Handle hCache = CacheFactory::getCache("cache_name");

キャッシュに関連付けられたリソースのクリーンアップ

すべてのNamedCache実装のインスタンスは、不要になった時点でNamedCache::release()メソッドをコールして明示的に解放し、インスタンスで保持されているリソースをすべて解放する必要があります。

特定のNamedCacheがアプリケーションの継続期間を通して使用される場合、リソースはそのアプリケーションがシャットダウンされたとき、または停止したときにクリーンアップされます。ただし、わずかの間だけ使用される場合は、使い終わった時点でアプリケーションからrelease()メソッドをコールする必要があります。

Coherence for C++クライアント・ライブラリの構成と使用

C++アプリケーションでCoherence for C++ライブラリを使用するには、そのアプリケーションにCoherence for C++ライブラリをリンクし、Coherence for C++のキャッシュ構成と場所を指定する必要があります。

キャッシュ構成ファイルの場所は、サンプル・アプリケーションの項で指定した環境変数、またはプログラム上の処理で設定できます。

環境変数による構成ファイルの場所の設定

「ランタイム・ライブラリと検索パスの設定」の説明のとおり、coherence.cacheconfigシステム・プロパティは、キャッシュ構成ファイルの場所を指定します。Windowsでこの構成ファイルの場所を設定するには、次のコマンドを実行します。

c:\coherence_cpp\examples> set coherence.cacheconfig=config\extend-cache-config.xml

プログラム処理による構成ファイルの場所の設定

DefaultConfigurableCacheFactory::createCacheFactory::configure(必要に応じてCacheFactory::loadXmlFileヘルパー・メソッドを使用)のいずれかを使用して、プログラム処理で構成ファイルの場所を設定できます。

DefaultConfigurableCacheFactoryクラスのcreateメソッドで、新しいCoherence cacheファクトリを作成します。vsFileパラメータで、ロードするCoherenceの構成ファイルの名前と場所を指定します。次に例を示します。

static Handle coherence::net::DefaultConfigurableCacheFactory::create (String::View vsFile = String::NULL_STRING)

configureメソッドで、CacheFactoryとローカル・メンバーを構成します。coherence-cache-config.xsdに対応するXML要素をvXmlCacheパラメータで指定し、coherence-operational-config.xsdに対応するXML要素をvXmlCoherenceパラメータで指定します。次に例を示します。

static void coherence::net::CacheFactory::configure (XmlElement::View vXmlCache, XmlElement::View  vXmlCoherence = NULL)

loadXmlFileメソッドで、指定されたファイルからXmlElementを読み取ります。このメソッドでは、CacheFactoryを構成しませんが、configureメソッドに対して指定できる構成を取得します。パラメータvsFileで、読込み元であるファイルの名前を指定します。次に例を示します。

static XmlElement::Handle coherence::net::CacheFactory::loadXmlFile (String::View vsFile)

CacheFactory::configureメソッドを使用して、サーバー/クラスタのキャッシュ構成ファイル(coherence-extend-config.xml)の場所およびC++クライアントのキャッシュ構成ファイル(tangosol-operation-config.xml)の場所を設定します。次に例を示します。

...
// Configure the cache
CacheFactory::configure(CacheFactory::loadXmlFile(String::create(
   "C:\coherence-extend-config.xml")), CacheFactory::loadXmlFile(String::create(
   "C:\tangosol-operation-config.xml")));
...

オペレーション構成ファイル(tangosol-coherence-override.xml)

オペレーション構成オーバーライド・ファイル(デフォルトではtangosol-coherence-override.xml)では、Oracle Coherenceで使用する操作設定とランタイム設定を制御して、そのクラスタリング、通信およびデータ管理のサービスを作成、構成および維持します。Javaクライアント同様、C++クライアントでもこのファイルの使用はオプションです。オペレーション構成オーバーライド・ファイルの詳細は、『Oracle Coherenceでのアプリケーションの開発』を参照してください。

C++クライアントの場合、このファイルによって、具体的にキャッシングに関連していないCoherenceアプリケーションの一般的な操作設定を指定するかオーバーライドできます。C++クライアントの場合の主要な要素は、ロギング、Coherence製品のエディション、および特定のクラスタ・メンバーの場所とロールの割当てのためのものです。

オペレーション構成は、プログラム上の処理またはtangosol-coherence-override.xmlファイルで構成できます。プログラム上の処理でオペレーション構成を構成するには、CacheFactory::configureメソッド(coherence::net::CacheFactory::configure (View vXmlCache, View vXmlCoherence))のvXmlCoherenceパラメータに要素が記述され、coherence-operational-config.xsdスキーマに従ったXMLファイルを指定します。

  • license-config: license-config要素には、Coherenceのエディションと操作モードの構成を可能にするサブ要素を記述します。edition-nameサブ要素は、メンバーが使用する製品エディション(Grid Edition、Enterprise Edition、Real Time Clientなど)を指定します。この方法では、使用するエディションをメンバーごとに指定することによって、同じくクラスタの中で複数の製品エディションを使用できます。Coherence for C++クライアントの場合は、RTC(リアルタイム・クライアント)およびDC(データ・クライアント)の各値のみを認識できます。license-configは、coherence要素のオプションのサブ要素で、デフォルト値はRTCです。

  • logging-config: logging-config要素は、システムにメッセージのログを記録する方法の構成を可能にするサブ要素を記述します。この要素を使用して、ログ・メッセージの保存先、重大度および書式を指定できます。logging-configは、coherence要素の必須のサブ要素です。ロギングの詳細は、「Loggerの構成」を参照してください。

  • member-identity: member-identity要素は、クラスタ・メンバーの場所とロールの定義に役立つ詳細な識別情報を指定します。この要素は、メンバーが属するクラスタ、ラック、サイト、コンピュータ名、ロールなどを指定するために使用できます。member-identityは、cluster-config要素のオプションのサブ要素です。

次の例は、サンプル・ファイルtangosol-coherence.xmlの内容を示しています。

<?xml version='1.0'?>

<coherence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config"
   xsi:schemaLocation="http://xmlns.oracle.com/coherence/
   coherence-operational-config coherence-operational-config.xsd">
  <cluster-config>
    <member-identity>
      <site-name>extend site</site-name>
      <rack-name>rack 1</rack-name>
      <machine-name>computer 1</machine-name>
    </member-identity>
  </cluster-config>
  
  <logging-config>
    <destination>stderr</destination>
    <severity-level>5</severity-level>
    <message-format>(thread={thread}): {text}</message-format>
    <character-limit>8192</character-limit>
  </logging-config>
  
  <license-config>
    <edition-name>RTC</edition-name>
    <license-mode>prod</license-mode>
  </license-config>
</coherence>

Loggerの構成

Loggerは、オペレーション構成ファイルのlogging-config要素を使用して構成します。この要素では次の属性を指定します。これらの属性では、ログに記録されたエラーに関する詳細情報を記録できます。

  • destination: Loggerで使用するLogOutputのタイプを指定します。有効な値は次のとおりです。

    • stderr (Console.Errorの場合)

    • stdout (Console.Outの場合)

    • ファイル・パス(メッセージをファイルに送信する必要がある場合)

  • severity-level: メッセージをログに記録するために満たすか、または超過する必要のあるログ・レベルを決定します。

  • message-format: ログ・メッセージの書式を決定します。

  • character-limit: ロガー・デーモンがメッセージ・キューから処理する文字の最大数を決定します。この数を超過すると、キューに残っているメッセージがすべて破棄されます。

次の例は、ロギングの構成を記述したオペレーション構成を示しています。オペレーション構成の詳細は、「オペレーション構成ファイル(tangosol-coherence-override.xml)」を参照してください。

<?xml version='1.0'?>

<coherence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config"
   xsi:schemaLocation="http://xmlns.oracle.com/coherence/
   coherence-operational-config coherence-operational-config.xsd">
   <logging-config>
      <destination>stderr</destination>
      <severity-level>5</severity-level>
      <message-format>(thread={thread}): {text}</message-format>
      <character-limit>8192</character-limit>
   </logging-config>
</coherence>