技術記事については、Qiitaにも稀に投稿しています。

NetBeansとJavaEEで、ポケモンの日英仏独韓の名前を返すRESTなAPIを開発してみた - DB接続編 -

twoSleepyCat

NetBeansとJavaEEを用いて、ポケモンの日本語名、英語名、ドイツ語名、フランス語名、韓国語名を返すRESTfulなAPIを開発してみようという記事のDB接続編です。

“NetBeansとJavaEEで、ポケモンの日英仏独韓の名前を返すRESTなAPIを開発してみた - 実装編 -”の続きです。もうひとつ前に準備編もあります。

DB設定の準備

今回使用したDB情報

テーブル名は準備編にも出ている通りですが、DB名は「_pkmn_db」とし、その他はデフォルト。

  • ホスト: kt-kiyoshi.com
  • ポート: 3306
  • DB名: _pkmn_db

MySQLのJDBCドライバを用意

今回使用するMySQLのバージョンに合わせ、JDBCドライバをダウンロードします。執筆時点での最新は5.1.38でした。

プルダウンは「Platform Independent」(たぶんデフォルトでこれになってる)を選択し、「Platform Independent (Architecture Independent), ZIP Archive」をDLします。

mysql-connector

DLしたZIPファイルを解凍し、中にある「mysql-connector-java-5.1.38-bin.jar」をGlassfishのインストールディレクトリ内にあるlib/extの下に配置します。

mysql-connector_2

今回は以下のような具合になりました。

XXXXXX:ext XXXXXX$ pwd
/Applications/NetBeans/glassfish-4.1.1/glassfish/domains/domain1/lib/ext

XXXXXX:ext XXXXXX$ ls -l
total 1928
-rw-r--r--@ 1 XXXXXX  admin  983914 12  2 09:02 mysql-connector-java-5.1.38-bin.jar

GlassFishの設定

JDBCドライバの配置が完了したので、続いて、GlassFishに接続プールを設定します。NetBeans上でGlassFishを起動し、更にドメイン管理コンソールを開きます。

GlassFish起動 ドメイン管理コンソール
start_glassfish open_domainAdmin

「ドメイン管理コンソールの表示」を押下すると、デフォルトのブラウザで以下のような管理画面が開きます。

domainAdmin

左のTreeにある「Resources -> JDBC -> JDBC Connection Pools」を開き、右の 「NEW」ボタンを押下し、新しいConnection Poolの作成を行います。

Pool Name PkmnPool
Resource Type javax.sql.DataSource
Database Driver Vendor MySql

と入力し、右上の「NEXT」ボタンを押します。(本来ならAdditional Propertiesの入力に進めるはずが。。)

エラーが発生

newConnectionPool

何やらここでエラーになって先へ進めないパターンがあるらしいので、DB接続設定は直接ファイルに書き込むことにします。(ユーザ名やパスワードは適切なものを入力してください。)

cd /Applications/NetBeans/glassfish-4.1.1/glassfish/domains/domain1/config
vi domain.xml

<resources>
    <jdbc-resource pool-name="PkmnPool" jndi-name="jdbc/_pkmn_db" object-type="system-all"></jdbc-resource>

中略----------------------------

    <jdbc-connection-pool datasource-classname="com.mysql.jdbc.jdbc2.optional.MysqlDataSource" is-isolation-level-guaranteed="false" res-type="javax.sql.DataSource" name="PkmnPool">
      <property name="DatabaseName" value="_pkmn_db"></property>
      <property name="User" value="XXXXXX"></property>
      <property name="Password" value="YYYYYY"></property>
      <property name="URL" value="jdbc:mysql://127.0.0.1/_pkmn_db"></property>
      <property name="serverName" value="127.0.0.1"></property>
    </jdbc-connection-pool>
</resources>

これで、Connection Poolの作成とJDBC Resourceの作成も完了です。改めて、ドメイン管理コンソール上で確認してみると...

PkmonPoolが出現

connectionPools

ちなみに、同じく管理コンソール上の「JDBC Resources」のほうにも、jdbc/_pkmn_dbが追加されているのが分かるかと思います。

接続の確認

左のTreeのConnection Poolから、作成した「PkmnPool」を選択し、「Edit JDBC Connection Pool」という画面を開きます。上部に3つ並んだボタンのうち、一番右の「Ping」を押下し、次のようになれば成功です。

pingSuccess

永続性ユニットの作成

NetBeansに戻って、プロジェクト名を右クリックし、「新規 -> その他」から「持続性 -> 持続性ユニット」を選択します。

新規 -> その他 持続性 -> 持続性ユニット
newFile-other persistence

次の入力項目は下記のように設定し、「終了」を押下します。

持続性ユニット名 持続性ユニット名
永続性プロバイダ EclipseLink(JPA 2.1)(デフォルト)
データ・ソース jdbc/_pkmn_db

すると、プロジェクトツリーに「persistence.xml」が作成されます。開いてみると、以下のような画面となります。(XMLファイルとしても編集可能)

persistence_2

これで、準備編実装編”で作ってきたプログラム群と合わせて、ポケモンの日英仏独韓の名前を返すRESTなAPIが動作します。

ビルドとか諸々すっ飛ばしますが、プロジェクト名を右クリックして「実行」で起動します。
(動作確認(全件取得):https://kt-kiyoshi.com:8080/pkmnAPI/rest/pkmn/getAll)

runApi

本当は、JSONP形式で返したり、GET以外のメソッド作ったり(任意のSQLとか)、実際のサーバに置いてみたりとか、色々拡張したいのだけど、それらはまた折を見てやりたいと思います。

バックナンバー

“NetBeansとJavaEEで、ポケモンの日英仏独韓の名前を返すRESTなAPIを開発してみた - 準備編 -”
“NetBeansとJavaEEで、ポケモンの日英仏独韓の名前を返すRESTなAPIを開発してみた - 実装編 -”