Jakarta EE 10 の学習 - Jakarta Persistence でDB接続1 -

記事
IT・テクノロジー

Jakarta Persistence

Jakarta Persistence API を使うとウェブアプリケーションからリレーショナルデータベースへの接続が可能になる。
この記事では Jakarta Persistence の学習のための題材として、Jakarta EE Tutorial に掲載されているサンプルアプリケーションである address-book を取り上げる。

address-book アプリケーション

このアプリケーションでは氏名、生年月日、電話番号、メールアドレスの情報をフォームで入力してデータベースに保存することができる。保存されたデータはリスト表示して確認することができる。

Jakarta EE Tutorial のページ
eclipse-ee4j.github.io/jakartaee-tutorial/#running-the-persistence-examples

対応する github リポジトリ
github.com/eclipse-ee4j/jakartaee-examples/


Netbeans IDE 19 でビルド

今回の記事ではJava ソースファイルの詳細な理解は後にして、まずはアプリケーションのビルドと実行を試してみる。

上記のリポジトリからローカルにクローンしてある前提で進める。

Netbeans IDE を起動し、File > Open Project から jakartaee-examples/tutorial/persistence/address-book を選択してプロジェクトを開く。
address-book.png

GlassFish サーバーの起動
Services タブの Servers > GlassFish Server を右クリックし、メニューから Start をクリックしてサーバーを起動する。

Java DB の起動
同様に Databases > Java DB を右クリックし、メニューから Start Server をクリックしてDBサーバーを起動する。
server-start.png

address-book のビルド
Build Project ボタンでこのアプリケーションをビルドする。ビルドするとサーバーへのデプロイも自動で行われる。

GlassFish の管理画面にアクセス
ブラウザで localhost:4848 にアクセスするとGlassFishサーバーの管理画面が表示される。(または、Servers > GlassFish Server を右クリックし、メニューから View Domain Admin Console をクリックするとブラウザが起動し管理画面にアクセスできる。)

デプロイしたアプリケーションを確認して、アプリケーションページにブラウザでアクセスする。

address-book のトップページ(localhost:8080/address-book)
page1.png

Show All Contact Items リンクをクリックすると List ページに移動する。
最初は連絡先リストが空なのでデータは表示されない。
page2.png
Create New Contact リンクをクリックして入力画面に進む。
page3.png
各項目を入力して Save をクリックするとデータが保存される。
Show All Contact Items をクリックするとリスト表示画面に移動する。
list.png

データベースの設定

アプリケーションで使用するデータベースの設定はどうなっているのか?
アプリケーションサーバーとしてGlassFish を使用してこのプロジェクトをそのままビルドした場合には、データベース管理のソフトとしては Apache Derby を使うことになる。
ここで使用している GlassFish 7.0.6 には Apache Derby 10.15 が含まれているので、特にインストールを行う必要はない。
下の画像で確認できるように、アプリケーションで使用するデータベース名はデフォルトでは sun-appserv-samples となる。(ビルドと同時に作成された)
db.png

persistence.xml

使用するデータベースの設定に関係するファイルとして、プロジェクトの src/main/resources/META-INF ディレクトリにある、persistence.xml ファイルがある。
このファイルの jta-data-source エレメントでは下記のように java:comp/DefaultDataSource という名前が設定されている。
<jta-data-source>java:comp/DefaultDataSource</jta-data-source>

このエレメントは使用するJDBCリソースを指定している。
GlassFish サーバーが管理している JDBC リソースは管理画面の左側にあるツリーから、Resources > JDBC > JDBC Resources をクリックすると一覧表示できる。

persistence.xml ファイルで指定している java:comp/DefaultDataSource が一覧に含まれていることが分かる。
JDBC_Res.png

名前をクリックして、このJDBC リソースの設定を確認する。
Pool Name: の項目が "DerbyPool" に設定されているのが分かる。
defaultData.png

この Pool Name の項目で指定しているのは DerbyPool という名前の JDBC コネクションプールである。
管理されている JDBCコネクションプールは同じく画面左側ツリーの Resources > JDBC > JDBC Connection Pools をクリックすると一覧表示できる。
一覧に DerbyPool というコネクションプールが存在することが分かる。
pools.png

この DerbyPool をクリックして設定画面を開く。
DerbyPool.png

上部の Additional Properties タブを開く。この画面では使用するデータベースサーバーへの接続情報を設定できる。ここでは下記のプロパティが設定されているのが分かる。
・ユーザー名
・パスワード
・ポート番号
・サーバー名
・データベース名
additional.png

上の方で確認していた、"sun-appserv-samples" というデータベース名はここで設定されていたことが分かる。

少し整理すると、
・persistence.xml ファイルで使用する JDBC リソースを指定
・JDBCリソースは特定のJDBCコネクションプールと関連付いている
・JDBCコネクションプールではプロパティとしてデータベースへの接続情報が設定できる
つまり、persistence.xml で指定された JDBC リソースが存在して、そのリソースと関連付いたコネクションプールで正しい接続情報が設定されている必要がある、ということ。(設定に問題があるとビルド時にエラーとなる)

データベース自体は設定された名前で自動的につくられるので、手動で作成する必要はない。
ちなみにデータベースファイルはユーザーのホームディレクトリの .netbeans-derby というディレクトリに保存されている。(この中にデータベースのログファイルもある)

もちろん Apache Derby 以外の DBMS (MySQL, PostgreSQL等) を使用することもできるが、それを試すのはまた別の機会とする。

Java ソースコードの理解は後の記事で行う。

コメント: 記事内の情報は著者が個人的に調べた範囲で理解しているものです。必要に応じて訂正する場合があります。記事中に含まれるURL はプロトコルを含めると禁止ワードに引っ掛かるので省いています。

著者・投稿者: ENARTS05
編集履歴:
2023/10/23 作成
サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す