JakartaEE(JavaEE)

JSFプロジェクトでJPAによるDB接続処理を追加してみた

JakartaEE(旧称:JavaEE)では、JSF(JavaServer Faces)というJavaベースのWebアプリケーションフレームワークに加え、JPA(Java Persistence API)という、データの永続的な保管や取り出しを容易にする機能も利用することができる。

今回は、Eclipse上のJSFプロジェクトでJPAを利用して、データベース(Oracle)にアクセスしてみたので、その手順とサンプルプログラムを共有する。

前提条件

以下の記事の実装が完了していること。

JSFプロジェクトでチェック処理を実装してみたJSF(JavaServer Faces)プロジェクトを利用して、JavaベースのWebアプリケーションを作成することができるが、その際...

Oracle XEのインストールが完了し、以下のUSER_DATAテーブルが作成済であること。

前提条件_1

やってみたこと

  1. JDBCドライバの配置
  2. JDBC Connection Poolsの設定
  3. JNDIの設定
  4. JPAプロジェクトへの変換
  5. サンプルプログラムの作成
  6. サンプルプログラムの実行結果

JDBCドライバの配置

JPAでデータベースに接続するためには、OracleのJDBCドライバー(jar)を取得し、GlassFishサーバーとJSFプロジェクトに配置する必要がある。その手順は、以下の通り。

1) 以下のサイトにアクセスし、OracleのJDBCドライバー(jar)を取得する。なお、今回はJDK6~8で動作するバージョンのJDBCドライバーを取得している。
https://mvnrepository.com/artifact/com.oracle.database.jdbc/ojdbc6/11.2.0.4

JDBCの設定_1

2) 取得したOracleのJDBCドライバー(jar)を、「(GlassFishサーバーのホームディレクトリ)\domains\domain1\lib」下に配置する。
JDBCの設定_2

3) JSFプロジェクトを作成済のEclipseを起動し、プロジェクトを選択し右クリックし、「ビルド・パス」から「外部アーカイブの追加」を選択する。
JDBCの設定_3

4) 2)で配置したOracleのJDBCドライバー(jar)を選択し、「開く」ボタンを押下する。
JDBCの設定_4

5) 以下のように、「参照ライブラリー」に指定したOracleのJDBCドライバー(jar)が追加されていることが確認できる。
JDBCの設定_5

JDBC Connection Poolsの設定

JPAによって、データベースにアクセスするためのJNDIを利用するには、あらかじめJDBC Connection Poolsを作成しておく必要がある。その手順は、以下の通り。

1) JSFプロジェクトを作成済のEclipse上で、GlassFishサーバーを起動する。
JDBC Connection Poolsの設定_1

2) URL「http://localhost:4848/」にアクセスし、GlassFishサーバーの管理コンソール画面を起動する。
JDBC Connection Poolsの設定_2

3)「JDBC Connection Pools」を開き、「New」ボタンを押下する。
JDBC Connection Poolsの設定_3

4)「Pool Name」に任意の名前、「Resource Type」に「javax.sql.DataSource」、「Database Driver Vendor」に「Oracle」を指定し、「Next」ボタンを押下する。
JDBC Connection Poolsの設定_4

5) 赤枠部分のプロパティ(上から順に、ユーザー名・データベース名・URL・パスワード)の値を設定後、「Finish」ボタンを押下する。
JDBC Connection Poolsの設定_5

6) JDBC Connection Poolsの設定が完了し、以下のように、一覧に追加した「OraclePool」が表示されることが確認できる。ここで接続確認のため、「OraclePool」リンクを押下する。
JDBC Connection Poolsの設定_6

7) 接続設定は「Ping」ボタンで確認できる。接続できていれば、以下のように、「Ping」ボタンを押下すると「Ping Successed」と表示される。
JDBC Connection Poolsの設定_7_1

JDBC Connection Poolsの設定_7_2
「Envader」はLinuxコマンドやDatabase SQL等のスキルを、環境構築不要で習得できる学習サイトだった「Envader」は、ITエンジニアとしてよく使うLinuxコマンドやDatabase SQL等のスキルを、解説を読んだ上で、問題を解き...

JNDIの設定

JPAによってデータベースにアクセスするためのJNDIは、以下の手順で作成する。

1) GlassFishサーバーの管理コンソール画面上で、「JDBC Resources」を選択後、「New」ボタンを押下する。
JNDIの設定_1

2)「JNDI Name」に任意の名前、「Pool Name」に先ほどのJDBC Connection Poolsを設定後、「OK」ボタンを押下する。なお、JNDI名(JNDI Name)は、慣習として「jdbc/」で始まる文字列を使用することが多いようだ。
JNDIの設定_2

3) JNDIの追加が完了し、以下のように、一覧に追加した「jdbc/Oracle」が表示されることが確認できる。
JNDIの設定_3



JPAプロジェクトへの変換

JSFプロジェクトでJPAによるデータベース接続が行えるようにするため、JPAプロジェクトに変換する。その手順は、以下の通り。

1) JSFプロジェクトを作成済のEclipse上で、JSFプロジェクトを選択し右クリックし、「構成」から「JPAプロジェクトへ変換」メニューを押下する。
JPAプロジェクトへの変換_1

2) 以下の画面が起動するため、そのまま「次へ」ボタンを押下する。
JPAプロジェクトへの変換_2

3) そのまま「完了」ボタンを押下する。
JPAプロジェクトへの変換_3

4) 以下のように、DB接続定義を行う「persistence.xml」が追加されたことが確認できる。
JPAプロジェクトへの変換_4

5) 上記「persistence.xml」を以下のように編集し、先ほど作成したJNDIによるデータベース接続設定を追加する。

サンプルプログラムの作成

作成したサンプルプログラムの構成は、以下の通り。
サンプルプログラムの構成
なお、上記の赤枠は、前提条件のプログラムから追加・変更したプログラムである。また、DB接続定義(persistence.xml)の内容は、前項「JPAプロジェクトへの変換」で記載した通りとなる。

USER_DATAテーブルのエンティティクラスの内容は以下の通りで、USER_DATAテーブルの各項目を定義している。

また、USER_DATAテーブルにアクセスするクラスの内容は以下の通りで、USER_DATAテーブルにデータを1件追加する処理を記載している。

さらに、各画面のForm値と画面遷移を定義したクラスの内容は以下の通りで、完了画面に遷移するsendメソッド内で、USER_DATAテーブルにデータを1件追加する処理を呼び出している。

その他のソースコード内容は、以下のサイトを参照のこと。
https://github.com/purin-it/java/tree/master/javaee-add-jpa/demoJsf



サンプルプログラムの実行結果

サンプルプログラムの実行結果は以下の通りで、確認画面で「送信」ボタンを押下した際に、USER_DATAテーブルにデータ登録が正常に行えることが確認できる。

1) GlassFishサーバーを起動後、Webブラウザ上で「http:// (ホスト名):(ポート番号)/(Webアプリケーションのプロジェクト名)/」とアクセスする。
サンプルプログラムの実行結果_1

2) 登録するデータを入力し、「確認」ボタンを押下する。
サンプルプログラムの実行結果_2_1

サンプルプログラムの実行結果_2_2

3) 確認画面で「送信」ボタンを押下する前のUSER_DATAテーブルの内容は、以下の通り。
サンプルプログラムの実行結果_3

4) 確認画面で「送信」ボタンを押下し、完了画面に遷移する。
サンプルプログラムの実行結果_4_1

サンプルプログラムの実行結果_4_2

5) 確認画面で「送信」ボタンを押下した後のUSER_DATAテーブルの内容は以下の通りで、ID=3のデータが追加されていることが確認できる。
サンプルプログラムの実行結果_5

要点まとめ

  • JakartaEE(旧称:JavaEE)では、JSFに加え、JPA(Java Persistence API)という、データの永続的な保管や取り出しを容易にする機能も利用することができる。
  • JPAでデータベースにアクセスするためのJDNIは、GlassFishサーバーの管理コンソール画面上で作成できる。
  • JSFプロジェクトでJPAによるデータベース接続が行えるようにするには、JPAプロジェクトに変換する。
  • JPAで使用するJNDI定義は、設定ファイル(persistence.xml)で定義する。