Oracle NoSQL Database Cドライバにより、CアプリケーションがThriftベースのプロキシ・サーバーを使用してOracle NoSQL Databaseにアクセスできるようになります。Cドライバはソース・コードとして提供されるため、ターゲット・プラットフォームに合せてビルドする必要があります。プロキシ・サーバーはこのダウンロード・パッケージにJava JARファイルとして含まれています。
このドキュメントでは、Cドライバ・ライブラリのビルド方法について説明します。アプリケーション・コードでCドライバを使用する方法の詳細は、クイック・スタート・ガイドおよびC APIリファレンスを参照してください。
次の依存関係のいくつかは、バイナリ・ディストリビューションとして提供されないためコンパイルが必要です。
CMake
様々なLinuxディストリビューション用にすぐにインストールできるプリコンパイル済バイナリが用意されています。
Thrift v0.9.2 for C++
次のWebサイトからソースをダウンロードします。
http://thrift.apache.org/download
Thriftライブラリのビルドおよびインストールの詳細は、http://thrift.apache.org/docs/BuildingFromSourceを参照してください。前提条件は次のとおりです。
Thriftの要件の詳細は、http://thrift.apache.org/docs/install/を参照してください
NoSQL Databaseおよびプロキシjarファイルのパス。
kvclient.jarおよびkvproxy.jarがクライアント・アプリケーションで必要です。
kvstore.jarはテスト・スイートのみで使用されます。
Javaランタイム(Java 7以上、Oracle NoSQL DatabaseはJava 7で動作保証されています)。
Thrift C++ライブラリのインストール。
ビルド・ディレクトリを作成します。簡単にクリーンアップできるようにすべてのビルドとCMakeアーティファクトをここに配置します。Cライブラリ・ソースの場所をCMakeに知らせるかぎり、ビルド・ディレクトリはどこに作成してもかまいません。
$ mkdir build
$ cd build
必ず最上位のCドライバ・ソース・ディレクトリを指定して、CMakeを実行します。たとえば、Cドライバ・パッケージが次の場所にあるとします。
/home/me/kv-c-driver-3.3.5
このとき、少なくとも次のようにCMakeコマンドを呼び出します。
cmake /home/me/kv-c-driver-3.3.5/c
次のコマンドライン・オプションが役立つ場合があります。
-DCMAKE_BUILD_TYPE=<build type>
指定できる値は、Debug、Release、RelWithDebInfoおよびMinSizeRelです。デフォルトはRelWithDebInfoです。
-DCMAKE_INSTALL_PREFIX=<path>
ビルド・ライブラリをインストールしようとする場所。デフォルトは/usr/localです
-DKV_PATH_TO_JAR=<path>
kvstore.jarファイルが配置された場所への完全なパス。これはライブラリのテストを実行するために必要です。
-DKVPROXY_PATH_TO_JAR=<path>
kvproxy.jarファイルが配置された場所への完全なパス。これはライブラリのテストを実行するために必要です。
-DKV_TEST_ROOT_DIR=<path>
ライブラリのテストのルート・ディレクトリとして使用されます。デフォルトはbuild/test/kvstoreです。
-DKV_BUILD_TYPE=<build type>
指定できる値はsharedおよびstaticです。1つの静的ライブラリをビルドしてThrift C++ライブラリをリンクする場合は、staticを使用します。デフォルトはsharedです。
-DTHRIFT_PREFIX_DIR=<path>
Thriftライブラリが配置される場所のパス。標準以外の場所にThriftをインストールした場合のみ必要です。
KV_BUILD_TYPEがstaticの場合、バイナリ・インストール・パッケージをビルドできます。次に示すコマンドライン・オプションを使用してインストール・パッケージを構成できます。KV_PACKAGE_PROXY_LIBが設定されると、Cドライバ・パッケージとプロキシ・パッケージの2つがビルドされます。設定されない場合、Cドライバ・パッケージのみがビルドされます。
-DCPACK_PACKAGE_VERSION=<version>
パッケージのバージョン。
-DCPACK_PACKAGE_RELEASE=<number>
パッケージのリリース番号。デフォルトは0です。
-DCPACK_PACKAGING_INSTALL_PREFIX=<install prefix>
ビルト・パッケージで使用されるインストールの接頭辞。デフォルトはCMAKE_INSTALL_PREFIXです。
-DKV_PACKAGE_PROXY_LIB=<path-to-proxy-lib>
プロキシjarファイルとその依存関係を含むディレクトリのパス。これらすべてのファイルがプロキシ・インストール・パッケージにパッケージ化されます。
-DKV_PACKAGE_COMPONENTS_BASED=<true|false>
パッケージには2つのコンポーネントが含まれます。Cドライバ・バイナリとプロキシ関連のjarファイルです。このオプションがtrueの場合、コンポーネントに対応するパッケージがビルドされます。trueでない場合、すべてのCドライバ・バイナリとプロキシ関連jarファイルを含む1つのパッケージがビルドされます。デフォルトはfalseです。
-DKV_PACKAGE_GENERATE_TGZ=<true|false>
これはTGZパッケージのビルドに使用されます。デフォルトはfalseです。
CMakeが正常に終了したら、次のようにドライバ・ライブラリをビルドします。
$ make
問題がある場合は、次の方法で詳細情報(使用されている特定のコンパイラ・フラグなど)を取得できます。
$ VERBOSE=1 make
ビルド・アーティファクトの宛先はbuild/build/{bin,lib,include}です。ドライバで必要なライブラリは、lib/libkvstore*と前提条件ライブラリlibthrift*です。テスト・スイートとサンプル・バイナリの宛先は、binディレクトリです。これらはデプロイメントには必要ありません。
次のようにバイナリ・インストール・パッケージをビルドします。
$ make package
または、次のコマンドを使用してパッケージをビルドできます。
$ cpack -G <package type>
サポートされるパッケージのタイプはRPM、DEBおよびTGZです。Debianベースのディストリビューションではパッケージ・タイプとしてDEBまたはTGZを指定できます。RPMベースのディストリビューションではパッケージ・タイプとしてRPMまたはTGZを指定できます。RPMパッケージをビルドするにはrpmbuildツールが必要です。
テストを実行する方法は2つあります。-DKV_PATH_TO_JARおよび-DKVPROXY_PATH_TO_JARコマンドライン・オプションをCMakeに指定した場合は、次のようにmakeでテストを実行できます。
$ make test
make testの出力は、Testing/Temporary/LastTest.logファイルに生成されます。成功または失敗の詳しい情報を調べることができます。
注意: make testは異常終了する場合があります。その場合は、テストを直接呼び出してください。
テストを実行するもう1つの方法としては、次のようにkvsuiteユーティリティを使用してテストを直接呼び出します。
$ build/bin/kvsuite -r <path-to-kvroot> -k <path-to-kvstore.jar> -d <path-to-kvproxy-jar> -v
注意:
kvrootのパスはkvstoreを含む必要があります。含まない場合には機能しません。つまり、/tmp/kvstoreまたは/tmp/kvstore/ctestのようなパスを使用してください。
テストではkvrootパスに最終ディレクトリしか作成されないことに注意してください。前の例では、テストを実行する前に/tmpまたは/tmp/kvstoreが存在する必要があります。
レジストリ・ポートに関して競合が発生する可能性があるため、現在のノードで他のストアが実行していないことを確認してください。
ドライバ・ライブラリがビルドされるとサンプルが自動的にビルドされます。これらを実行するには、Oracle NoSQL Databaseストアを実行していることが必要です。
ストアを作成する最も単純な方法はKVLiteユーティリティの使用です。これによって1ノードのデプロイメントが作成されます。ローカル・マシンでKVLiteを使用するには、kvstore.jarおよび附属するjarファイルにアクセスする必要があります。
次のコマンドによって、examplesという名前のOracle NoSQL Databaseストアがローカル・マシンにデプロイされます。このストアはホスト名としてlocalhostを使用するため、ローカルのみでアクセスできます。リモートでアクセスできるストアが必要な場合は、有効なホスト名を使用します。
$ mkdir kvroot
$ nohup java -jar <path-to-kvstore.jar> kvlite -root kvroot -store examples -host localhost -port 5000 -admin 5001
nohupを指定すると、コマンドがバックグラウンドで実行されます。これは省略可能です。
ビルド・ディレクトリから、このストアに対してhelloサンプルを実行するには次のようにします。
$ build/bin/hello -store examples -host localhost -port 5010 -helper-hosts localhost:5000 \
-kvproxy kv-c-driver-3.3.5/kvproxy/lib/kvproxy.jar \
-kvclient kv-c-driver-3.3.5/kvproxy/lib/kvclient.jar
プログラムがプロキシを起動するまでに数秒かかり、その後、サンプル・アプリケーションが実行されます。出力はstdoutに送られます。
ドライバのビルドが確認されたら、CMakeの引数で指定した場所にインストールできます。デフォルトでは/usr/localが使用されます。
$ make install
インストール・ディレクトリで追加の権限が必要な場合は、次を使用できます。
$ sudo make install
共有ライブラリの使用
ビルドするには、コンパイル行がドライバ・ディストリビューションのインクルード・ディレクトリを参照し、次を含む依存ライブラリとリンクしている必要があります。
正確なコンパイル行の例は、サンプル・コードのコンパイル行を参照してください。次を実行すると、ビルド・ディレクトリにすべてを再ビルドできます。
$ make clean
$ VERBOSE=1 make
VERBOSE=1と指定すると、ビルドによってコンパイル行が表示されます。
サンプルのコンパイル行を次に示します(ローカル・インストールに合せて変更します。)このケースでは、libkvstore*とlibthrift*はすべて/usr/local/lib (デフォルト)にインストールされます。
gcc -o myprog myprog.c -lkvstore -Wl,-rpath,/usr/local/lib
ライブラリが標準以外の場所にインストールされる場合は、アプリケーションを実行する際に、その場所をLD_LIBRARY_PATH環境変数に指定してください。
静的ライブラリの使用
ビルドするには、コンパイル行がドライバ・ディストリビューションのインクルード・ディレクトリを参照し、libkvstore-static.aとリンクしている必要があります。
libkvstore-static.aにはC++コードがあるため、場合によってはリンカーとしてg++を使用する必要があります。
サンプルのコンパイル行を次に示します(ローカル・インストールに合せて変更します。)このケースでは、libkvstore-static.aは/usr/local/lib (デフォルト)にインストールされます。
gcc -o myprog.c.o -c myprog.c
g++ myprog.c.o -o myprog -lkvstore-static -lpthread
libkvstore-static.aが標準以外の場所にインストールされている場合、アプリケーションをビルドする際に、-L<path-to-installation>を使用して検索ディレクトリを指定してください。