WebベースのGridDBクラウドサービスがバージョン1.6にアップデートされ、GridDB CE 5.2がその基盤となりました。GridDBクラウドについては、以前にもGridDBクラウドの紹介やGridDB クラウド Version 1.2 の紹介で紹介しました。
この記事では、GridDBクラウドの新バージョンによってもたらされた新機能、すなわちクラウドと直接接続する新しい方法について解説します。これまでは、オンラインのクラウド仮想ネットワークを使わずにGridDBクラウドにアクセスする唯一の方法はWeb APIでした。Web APIを利用することで、GETやPOSTのHTTPリクエストを行い、空のGridDBデータベースサーバにデータをPUTすることができます。この方法を使えば、Web APIを通じてSQLやTQLコマンドを実行することもできます。
バージョン1.6の登場により、GridDBクラウドにはJava、JDBC、ODBC、C言語を使ってローカルマシンからアクセスすることが出来るようになりました。この記事では、Java、そしてJDBCを使ってクラウドに接続するセットアップ方法と簡単な例について説明します。
$ git clone https://github.com/griddbnet/Blogs.git --branch griddb_cloud_1.6
GridDBクラウドの設定管理
まず、クラウドのポータルのネットワーク部分にアクセスする必要があります。 そこで新しい設定を見ることができるのが 「GridDBアクセス」です。 このパネルでパブリックIPアドレスを例外リストに追加して、クラウドのファイアウォールを通過するためのわずかなスペースを作ることが出来ます。
それが終わったら、サポートセクションに行き、必要な.jar
ファイルをローカルマシンの環境にダウンロードしましょう。サポートページより、"GridDB Cloud Library and Plugin download "という見出しのファイルをダウンロードします。
この.zip
ファイルには様々なファイルが含まれていますが、この記事に関連するファイルはJDBCフォルダの中にあります。ここから、gridstore-5.2.0.jar
、gridstore-jdbc-5.2.0.jar
、gridstore-advanced-5.2.0.jar
が必要になります。
これらをダウンロードしたら、$CLASSPATH
環境に追加し、Javaコマンドを実行するときに、これらの新しいAPIにアクセス出来るようにします。
Javaでクラウドに接続する
始める前に、これらの.jar
ファイルをCLASSPATHに追加しましょう。
export CLASSPATH=${CLASSPATH}:$PWD/gridstore-5.2.0.jar
export CLASSPATH=${CLASSPATH}:$PWD/gridstore-jdbc-5.2.0.jar
export CLASSPATH=${CLASSPATH}:$PWD/gridstore-advanced-5.2.0.jar
そして、GridDBクラウドサーバーと接続するためのJavaコードを書きます。
この記事の主旨ではないので、ソースコードについてはあまり触れないことにします。その代わりに、関連するコードスニペットについて説明します。
通知プロバイダー
Java経由で接続するには、GridDB通知プロバイダ・メソッドを使用します。これは、GridDBクラウドが通知プロバイダのURLを提供してくれるからで、これをGridDB Store変数に差し込むだけで良いのです。
GridBクラウドポータルに、「Notification Provider URL for external connection」という URL があります。そのURLをコピーしてJavaコード内で使用してください。
String provider = "https://dbaasshareextconsta.blob.core.windows.net/dbaas-share-extcon-blob/trial1602.json?sv=2015-04-05&sr=b&st=2023-03-14T00%3A00%3A00.00Z&se=2073-03-14T00%3A00%3A00.0000000Z&sp=r&sig=h2VJ0xAqsnfdgfgdfgRsqWVgfgfg5CAS66RifPIZ1PDCJ0x%2FiXb2FOhA%3D";
Properties props = new Properties();
props.setProperty("notificationProvider", provider);
props.setProperty("clusterName", "clustername");
props.setProperty("user", "admin");
props.setProperty("password", "admin");
props.setProperty("database", "israel_db");
props.setProperty("sslMode", "PREFERRED");
props.setProperty("connectionRoute", "PUBLIC");
store = GridStoreFactory.getInstance().getGridStore(props);
通常FIXED_LISTを接続方式に使用する場合、notificationMemberを使用せず、notificationProviderを使用していることが分かりますが、それ以外にはプロパティに大きな変更はありません。
他の大きな必須の変更は、一番下にある sslMode
と connectionRoute
プロパティ・キーにあります。これらはSSLで保護されたウェブアドレスを使用するために必要です。これは、SSLがPREFERREDであり、connectionRouteがPUBLICであることを接続に伝える必要があることを意味します。
問題がなければ、Javaコードを実行すれば、GridDBクラウドに変更が反映されます。このコードを自分のマシンで実行したい場合は、もちろんGitHubページ(上記リンク)をチェックアウトして、認証情報とURLを使って自分のマシンでコードを実行できます。
$ javac *.java
$ java SimulateData 10 3
簡単なデモを紹介するために、ここで実行しているコードはJava用のIoTデータをシミュレートしています。つまり、ランダムなデータを入れたさまざまなコンテナをクラウドに配置しているのです。そして案の定、クラウドをチェックアウトすると、コンテナがデータとともに表示されます。
JDBCを使用したGridDBクラウドへの接続
もちろん、GridDBでJDBCを使えば、SQLをフルに使うことができます。そして幸運なことに、クラウドに接続するためにJDBCを使用することは、Javaを使用することとほぼ同じなのです。主な違いは、jdbc jar
をCLASSPATHにインクルードする必要があることと(すでにインクルード済み)、jdbc url
を構築する必要があることです。
try {
String provider = "https://dbaasshareextconsta.blob.core.windows.net/dbaas-share-extcon-blob/trial1602.json?sv=2015-04-05&sr=b&st=2023-03-14T00%3A00%3A00.00Z&se=2073-03-14T00%3A00%3A00.0000000Z&sp=r&sig=h2VJ0xAqsnfdgfgdfgRsqWVgfgfg5CAS66RifPIZ1PDCJ0x%2FiXb2FOhA%3D";
String encodeProviderUrl = URLEncoder.encode(provider, "UTF-8");
String clusterName = "clustername";
String encodeClusterName = URLEncoder.encode(clusterName, "UTF-8");
String databaseName = "public";
String encodeDatabaseName = URLEncoder.encode(databaseName, "UTF-8");
String ssl = "&sslMode=VERIFY"; //Necessary
String encodeSsl = URLEncoder.encode(ssl, "UTF-8");
Properties props = new Properties();
String jdbcUrl = "jdbc:gs:///" + encodeClusterName + "/" + encodeDatabaseName + "?notificationProvider="+encodeProviderUrl + encodeSsl;
props.setProperty("user", "admin");
props.setProperty("password", "admin");
props.setProperty("loginTimeout", "60");
props.setProperty("connectionRoute", "PUBLIC"); //Also a new necessary props for this
System.out.println(jdbcUrl);
conn = DriverManager.getConnection(jdbcUrl, props );
System.out.println("Sucessfully connected!");
} catch (Exception e) {
System.out.println("error connecting to DB: "+e);
}
完全なURLは次のようになります。
jdbc:gs:///gs_clustertrial1602/public?notificationProvider=https%3A%2F%2Fdbaasshareextconsta.blob.core.windows.net%2Fdbaas-share-extcon-blob%2Ftrial1602.json%3Fsv%3D2015-04-05%26sr%3Db%26st%3D2023-03-14T00%253A00%253A00.0000000Z%26se%3D2073-03-14T00%2500%253A00.0Z%26sp%3Dr%26sig%3Dh2VJ0xAqsqWV5CAS66RifPIZ1PDCJ0x%252F2FOhA%253D%26sslMode%3DVERIFY
このJDBC URLを作成する際には、必ずsslMode
をPREFERRED
の値でURLに含め、さらにconnectionRoute
をPREFERRED
の値で含める必要があります。
すべての情報がOKになると、あなたがファイル("griddb-jdbc.properties")に含めることを選んだSQLコードがクラウド上で実行されます。今回は、クラウド上に一連のtpchテーブルを作りました。
gridstore-jdbc.propertiesファイルの内容を好きなSQLの内容に変更するだけです。
結論
これで、ローカルマシンをGridDBクラウドのインスタンスに直接接続することに成功しました。GridDBクラウドをセットアップして使うことにより、サーバーの管理を心配する必要がなくなり、Javaアプリケーションを書くだけで、GridDBの素晴らしいパワーをフルに活用することができます。