NoSQLPublisherConfigの使用方法

oracle.kv.pubsub.NoSQLPublisherConfigを使用して、ストアへの接続および認証情報を指定します。このクラスを使用して、パフォーマンス・パラメータを構成することもできます。

ストアへの接続の構成

NoSQLPublisherConfigオブジェクトを構築するとき、oracle.kv.KVStoreConfigオブジェクトを含めます。このオブジェクトは、次のストア接続情報を提供するために使用されます。

  • パブリッシャによってモニターされるストアの名前

  • 1つ以上のヘルパー・ホスト/ポート・ペアのリスト。これらのヘルパー・ホストはストア内のストレージ・ノードです。DNSまたはローカルの/etc/hostsファイルを使用して解決可能である必要があります。

たとえば:

package pubsub;

import oracle.kv.KVStore;
import oracle.kv.KVStoreConfig;
import oracle.kv.KVStoreFactory;

...

String[] hhosts = {"n1.example.org:5088", "n2.example.org:4129"};
KVStoreConfig kconfig = new KVStoreConfig("exampleStore", hhosts); 

認証に対応するように構成されていないストアに接続するには、この簡単な例で十分です。セキュアなストアへの接続の詳細は、セキュアなストアへの認証を参照してください。

基本的なNoSQLPublisherConfigオブジェクトの作成

NoSQLPublisherConfigオブジェクトを構築するには、NoSQLPublisherConfig.Builderを使用します。このクラスのコンストラクタには、KVStoreConfigオブジェクト、およびパブリッシャのルート・ディレクトリ(このディレクトリは、パブリッシャが適切に動作するために必要なファイルの格納に使用されます)へのパスを指定する必要があります。

...

// Create a minimal KVStoreConfig
String[] hhosts = {"n1.example.org:5088", "n2.example.org:4129"};
KVStoreConfig kconfig = new KVStoreConfig("exampleStore", hhosts);

final NoSQLPublisherConfig publisherConfig =
    new NoSQLPublisherConfig.Builder(kconfig, "/export/publisher")
    .build(); 

NoSQLPublisherConfigオブジェクトを作成したら、NoSQLPublisher.get()メソッドへのコールでそれを使用してNoSQLPublisherインスタンスを取得し、ストアに接続できます。この例については、セキュアなストアへの認証を参照してください。

パブリッシャのチューニング

NoSQLPublisherConfigオブジェクトを構築する際、次のようないくつかのチューニング制御を指定できます。

  • 最大同時サブスクリプション

    このパブリッシャが実行できるサブスクライバの最大数を指定します。これは、1以上に設定する必要があります。

    この値を構成するには、NoSQLPublisherConfig.setMaxConcurrentSubs()を使用します。デフォルトは32です。

  • シャード・タイムアウト値。ここで指定した時間内にパブリッシャがソース・シャードから応答を受け取らなかった場合、パブリッシャはNoSQLSubscriber.onWarnへのコールを介してShardTimeoutExceptionをスローします。ShardTimeoutExceptionがスローされても、ストリームとシャードへの接続が稼働し続けている場合は、単に、タイムアウト期間内にそのシャードから受け取った操作がないことを示します。

    この値を構成するには、NoSQLPublisher.setShardTimeoutMs()を使用します。このメソッドでは、タイムアウト値をミリ秒単位で表すlongを使用します。デフォルトは600000 ms (10分)です。

たとえば:

...

// Create a minimal KVStoreConfig
String[] hhosts = {"n1.example.org:5088", "n2.example.org:4129"};
KVStoreConfig kconfig = new KVStoreConfig("exampleStore", hhosts);

final NoSQLPublisherConfig publisherConfig =
    new NoSQLPublisherConfig.Builder(kconfig, "/export/publisher")
    .setMaxConcurrentSubs(2)
    .setShardTimeoutMs(10000)
    .build(); 

セキュアなストアへの認証

セキュアなストアへの認証を行うには、ログイン資格証明を入力する必要があります。ストリーム処理アプリケーションをセキュアなストアに接続する最も簡単な方法は、oracle.kv.securityシステム・プロパティの値を指定することです。これには、セキュアなストアのユーザー・ログインの設定中に生成されるセキュリティ・プロパティ設定を格納するファイルのパス名が含まれます。セキュリティ・プロパティ・ファイルを生成するようにセキュアなストアを設定する方法の詳細は、セキュリティ・ガイドOracle NoSQL Databaseのセキュア・インストールの実行を参照してください。

前述の方法に従うことを選択した場合、アプリケーション・コードを変更する必要はありません。セキュアなストアに接続する例を実行するには、次のコマンドを使用します。

java -Doracle.kv.security=mylogin 
-cp $KVHOME/lib/kvstore.jar:. pubsub.NoSQLStreamExample

再認証

パブリッシャがストアへの最初の認証接続を確立すると、認証資格証明は失われます。これらがメモリー内に保持されたり、キャッシュされることはありません。

最初の接続後は、それぞれのサブスクリプションも認証される必要があります。この認証プロセスによって、サブスクリプションの取得対象となる表に対する適切な読取りアクセス権がサブスクライバにあることが確認されます。ユーザーが1つの表または小さい表セットをサブスクライブしようとする場合、それぞれの表に対するREAD_TABLEアクセス権が必要です。ユーザーがストア内のすべての表をサブスクライブする場合は、便宜上、そのユーザー・アカウントをREAD_ANY_TABLEアクセス権で構成できます。

サブスクリプションで認証を行うことができるようにするには、ReauthenticationHandlerクラスを実装し、NoSQLPublisherConfig.setReauthHandler()メソッドを使用してNoSQLPublisherConfigオブジェクトにそれを提供します。

次の例では、前の項に示した認証の例を拡張して再認証ハンドラを追加します。

最初に、ReauthenticationHandlerを実装する必要があります。非常に簡単な実装の例を次に示します。

package pubsub;

import oracle.kv.ReauthenticationHandler;
import oracle.kv.PasswordCredentials;

public class MyReauthHandler implements ReauthenticationHandler {
    public void reauthenticate(KVStore reauthStore) {

    // The code you use to obtain the username and password strings
    // should be consistent with the code you use to perform
    // simple authentication for your publisher. Here we do
    // the simplest -- and least secure -- thing possible.

    // This is really not what you should do for production 
    // code.

    final String username = "beth";
    final String password = "my_clever_password00A";

    PasswordCredentials cred = new PasswordCredentials(username,
    password.toCharArray());

    reauthStore.login(cred); 

その後、実装したReauthenticationHandlerを使用するように前述の認証の例を拡張します。次の例で太字で示している1つのコード行でこれを行います。

package pubsub;

...

// Create a KVStoreConfig object that is configured
// for a secure store.
String[] hhosts = {"n1.example.org:5088", "n2.example.org:4129"};
KVStoreConfig kconfig = new KVStoreConfig("exampleStore", hhosts);

// Need to set some required security properties.
Properties secProps = new Properties();
secProps.setProperty(KVSecurityConstants.TRANSPORT_PROPERTY,
                     KVSecurityConstants.SSL_TRANSPORT_NAME);

// The client.trust file is created when you install your 
// store. It must be moved locally to every machine where
// client code will run.
secProps.setProperty
	(KVSecurityConstants.SSL_TRUSTSTORE_FILE_PROPERTY,
	"/home/kv/client.trust");
kconfig.setSecurityProperties(secProps);

// Create a PasswordCredentials instance. We hard-code
// the credentials here, but in a production environment
// this information should be provided in a significantly
// more secure way.

// username and password must have been configured for the store
// by its administrator.

final String username = "beth";
final String password = "my_clever_password00A";

PasswordCredentials pc = 
    new PasswordCredentials(username,
                            password.toCharArray());

// Create the publisher's configuration object.
// Keeping it simple.
final NoSQLPublisherConfig publisherConfig =
    new NoSQLPublisherConfig.Builder(kconfig, "/export/publisher")
 .setReauthHandler(new MyReauthHandler())
    .build(); 

// Now connect to the store
try {
    NoSQLPublisher publisher =
        NoSQLPublisher.get(publisherConfig, pc);
} catch (PublisherFailureException pfe) {
        System.out.println("Connection or authentication failed.");
        System.out.println(pfe.toString());
}