Nashorn から JDBC で Oracle DB に接続する

はじめに

これから何回かに分けて、Nashorn 用の JavaScript プログラムから JDBC の API を呼び出し、Oracle DB に接続する基本的な手順をご紹介していきます。

初回はプログラムを動かすための事前準備と、JDBC の API を呼び出す方法をご紹介します。

このドキュメントの URL は https://blogs.oracle.com/nashorn_ja/entry/nashorn_jdbc_1 です。

実行環境

接続先の DB として、Oracle Linux 6.5 上に Oracle 11.2.0.3.0 がインストールしてあります。

JDBC のクライアントプログラムは DB サーバと同一マシン上で動かします。

処理内容

『Oracle Database JDBC 開発者ガイド』のサンプルプログラムを元にして、Nashorn 用の JavaScript のプログラムを作成し、そのプログラムの中から JDBC で Oracle DB に接続します。

  • Nashorn 用の JavaScript プログラムから JDBC で Oracle DB に接続します
  • JavaScript プログラムは DB サーバと同一マシン上で実行します
  • JavaScript プログラムは oracle ユーザで実行します

JavaScript プログラムを DB サーバと同一マシン上で実行するのは説明をシンプルにするためですが、DB サーバとは別のマシンから JavaScript で接続する方法もほとんど同じ手順で実現できます。

oracle ユーザ以外のユーザで JDBC 接続する場合もほとんど同じ手順で実行できます。

事前準備

DB ユーザの作成

接続する先の DB 上にユーザを作成します。

SQL> create user test identified by "test";
SQL> grant connect, resource to test;

Java 8 のダウンロード

ここから JDK 8 をダウンロードします。この文書を書いた時点の最新バージョンは 8u5 でした。

Java 8 のインストール

ダウンロードした JDK を yum コマンドでインストールします。

# yum install ./jdk-8u5-linux-x64.rpm

JDK がインストールされていることを確認します。

# java -version
java version "1.8.0_05"
Java(TM) SE Runtime Environment (build 1.8.0_05-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.5-b02, mixed mode)

Nashorn の動作確認

oracle ユーザでログインし、PATH を設定します。

$ vi ~/.bash_profile
PATH=${PATH}:/usr/java/latest/bin
export PATH
$ . ~/.bash_profile

jjs コマンドが実行できる事を確認します。

$ jjs -fv 
nashorn full version 1.8.0_05-b13

事前準備はこれで完了です。

JDBC のドライバのバージョンの確認

JDBC の動作確認として、JDBC 開発者ガイド にあるサンプルコードを Nashorn 用の JavaScript プログラムに変換して実行してみます。

元のサンプルコードは JDBC ライブラリののバージョンを出力するプログラムです。

スクリプトファイルとして実行

JavaScript のファイルを作成し、jjs コマンドにそのファイル名(ここでは version.js)を渡してあげると Nashorn で JavaScript プログラムを実行することができます。

JDBC を使用する際は jjs コマンドに -cp オプションで JDBC ドライバの JAR ファイルを指定します。

$ vi version.js
var OracleDataSource = Java.type("oracle.jdbc.pool.OracleDataSource");
var ods = new OracleDataSource();
ods.setURL("jdbc:oracle:thin:test/test@localhost:1521:orcl");
var conn = ods.getConnection();
var meta = conn.getMetaData();
print("JDBC driver version is " + meta.getDriverVersion());
$ jjs -cp ${ORACLE_HOME}/jdbc/lib/ojdbc6.jar version.js 
JDBC driver version is 11.2.0.3.0

ご覧の通り、JavaScript のスクリプトから JDBC ドライバのバージョン (11.2.0.3.0) が確認できました。

Java.type() 関数で作成した JavaClass オブジェクトを new することで Java のオブジェクトを作成することができます。それ以外は元の Java プログラムとほとんど変わりがありません。

型指定が無い分、プログラムは多少シンプルになっています。コンパイルが不要なのでプログラムの修正も簡単です。

実行速度が重要だったり、静的な型付けでコンパイル時にエラーを捕捉したい場合は Java を使用し、プロトタイピングでは JavaScript を使用してトライアンドエラーを繰り返すといった使い方が可能です。

対話的な実行

スクリプトファイルを指定しないで jjs コマンドを実行すると、Nashorn のシェルにアクセスできます。jjs> がプロンプトです。そこにプログラムを入力していきます。

$ jjs -cp ${ORACLE_HOME}/jdbc/lib/ojdbc6.jar 
jjs> var OracleDataSource = Java.type("oracle.jdbc.pool.OracleDataSource");
jjs> var ods = new OracleDataSource();
jjs> ods.setURL("jdbc:oracle:thin:test/test@localhost:1521:orcl");
null
jjs> var conn = ods.getConnection();
jjs> var meta = conn.getMetaData();
jjs> print("JDBC driver version is " + meta.getDriverVersion());
JDBC driver version is 11.2.0.3.0

対話的な実行でも JDBC ドライバのバージョン (11.2.0.3.0) が確認できました。

対話的な実行の利点はプログラムの実行結果を逐一確認できることです。問題が発生したらその場で修正することが可能です。JDBC の学習やプロトタイピングで効果を発揮します。

まとめ

Nashorn のプログラムから JDBC の API を使用するための事前準備と API を呼び出す方法をご紹介しました。

スクリプトによる JavaScript プログラムの実行方法と対話的なプログラムの実行方法をご説明しました。

次回はリモートマシンから JDBC で DB に接続する方法、今回と違う手順で JDBC のライブラリのバージョンを表示する方法をご紹介します。

参考文献

Comments:

Post a Comment:
Comments are closed for this entry.
About

JavaVM 用 JavaScript エンジンの Nashorn について情報発信しているブログです。Nashorn の読み方はナズホーンです。

Search

Archives
« 4月 2015
   
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
  
       
Today