ドライバライブラリには、Couchbaseサーバーに接続するさまざまな方法が含まれています。まず、それらのメソッドについて議論することから始め、Couchbaseクラスタに接続するチャットルームクライアントアプリケーションを作成するためにその中の1つのメソッドを利用してみましょう。
ドライバから、1つまたは複数のCouchbaseサーバと接続する方法が複数あります:
CouchbaseClientインスタンスを生成し、1つまたは複数のアドレスを渡すことで、直接接続することができます。例えば:
URI server = new URI(addresses); ArrayList<URI> serverList = new ArrayList<URI>(); serverList.add(server); CouchbaseClient client = new CouchbaseClient( serverList, "default", "");
接続先のサーバがダウンした場合に簡単にクライアントが復旧出来るように、Couchbaseクラスタに参加しているサーバ内の複数のサーバアドレスを指定することが推奨されます。
CouchbaseConnectionFactory
接続ファクトリクラスのコンストラクタを利用してサーバに接続します:
URI base = new URI(String.format( "http://%s:8091/pools", serverAddress)); ArrayList<URI> serverList = new ArrayList<URI>(); serverList.add(base); CouchbaseConnectionFactory cf = new CouchbaseConnectionFactory(serverList, "default", "");
CouchbaseConnectionFactory
を使ってSASLによる認証を行う接続を生成します。認証情報とバケットを指定するだけで、認証された接続を確立します。ここで指定するユーザ名とパスワードはCouchbase
Server側で定義したバケットの情報です。ユーザ名はバケット名で、パスワードはバケット生成時に指定したパスワードになります。これについては後ほど詳しく説明します、ここでは認証してSASL認証付きのバケットを利用するのに必要なコードを示します。
CouchbaseConnectionFactory cf = new CouchbaseConnectionFactory(baseURIs, "rags", "password"); client = new CouchbaseClient((CouchbaseConnectionFactory) cf);
チュートリアルのMain.java
クラスに初めての接続を行うための変更を加えてみましょう。ここでは認証の必要ないASCIIプロトコルを利用してサーバに接続します。チュートリアルのコードが動作した後、戻ってconnect()
メソッドで認証を利用するように、簡単に変更することが出来ます。
まず、mainメソッドで、読み込むように修正します:
public static void main(String[] args) { if (args.length != 1) { System.err.println("usage: serveraddress"); System.exit(1); } String serverAddress = args[0]; System.out.println(String.format("Connecting to %s",serverAddress)); try { connect(serverAddress); client.shutdown(1, TimeUnit.MINUTES); } catch (IOException ex) { ex.printStackTrace(); } }
次に、connect()
メソッドを追加します
private void connect(String serverAddress) throws Exception { URI base = new URI(String.format("http://%s:8091/pools",serverAddress)); List<URI> baseURIs = new ArrayList<URI>(); baseURIs.add(base); CouchbaseConnectionFactory cf = new CouchbaseConnectionFactory(baseURIs, "default", ""); client = new CouchbaseClient((CouchbaseConnectionFactory) cf);
これは単一サーバへの接続のコンストラクタですね。このコネクションが確立されたときの状態、あるいはコネクションを失ったときに何が起こっているのか知りたい場合、どうしたらよいでしょうか?connectメソッドを変更して次のコードを追加し、コネクションオブザーバを追加することができます:
public void connectionLost(SocketAddress sa) { System.out.println("Connection lost to " + sa.toString()); } public void connectionEstablished(SocketAddress sa, int reconnectCount) { System.out.println("Connection established with " + sa.toString()); System.out.println("Reconnected count: " + reconnectCount); } }); }
1台のサーバのみに接続している場合、オフラインになったらどうしますか?これはconnectメソッドの最初の3行を変更することで、簡単に解決できます。
URI fallback = new URI( String.format("http://%s:8091/pools",fallbackAddress)); baseURIs.add(fallback);
このクラスはコロンで区切られたIPv6アドレスでも動作します。
最後に、クライアントインスタンスを格納するために、クラスの先頭で静的メンバ変数を作成する必要があります:
private static CouchbaseClient client;
これで、アプリケーションをコンパイルして実行できるようになりました。
2つのコネクションを生成していることを示すドライバのログ情報が出力されます。connect()
メソッドに追加したコネクションオブザーバが2台のサーバのアドレスを指定して実行されていることが分かるでしょう。そして再接続カウントが1ということはネットワークに問題がないことを示しています。これで準備は整いました。