ひこぽんのーと

覚書と雑記です。

JavaEE 7をやってみよう。 JPA その4

その3のつづき。

JPAプロジェクトにクラスを追加する。
DBのテーブルと対になるクラス(エンティティクラス)を追加する。
要はDBデータを格納するクラスだね。

手作りしてもいいけれど、
ツールから自動生成する方法を学ぶのが目的なので、
Eclipseからの自動生成をやってみる。

ちなみに用意したテーブルは以下の2つ。
書くまでもないが、WARSHIPテーブルは艦艇テーブル。
WARSHIP_TYPEは艦種テーブル。WARSHIPとWARSHIP_TYPEはTYPE_IDで紐づく。
f:id:nagamitsu1976:20151001170537p:plain

[テーブルのDDL](クリックで開く)

  • 艦艇テーブル
CREATE TABLE PUBLIC.WARSHIP
(
    ID                          INTEGER NOT NULL,
    TYPE_ID                     INTEGER,
    NAME                        VARCHAR(100),
    CONSTRAINT WARSHIP_PK PRIMARY KEY (ID),
    CONSTRAINT SYS_IDX_WARSHIP_PK_10092 UNIQUE (ID)
);
CREATE TABLE PUBLIC.WARSHIP_TYPE
(
    TYPE_ID                     INTEGER NOT NULL,
    NAME                        VARCHAR(100),
    CONSTRAINT WARSHIP_TYPE_PK PRIMARY KEY (TYPE_ID),
    CONSTRAINT SYS_IDX_WARSHIP_TYPE_PK_10091 UNIQUE (TYPE_ID)
);

1. 利用DBの選択
JPAプロジェクトのプロパティを出して、サイドツリーからJPAのカテゴリを選択。
接続のプルダウンから対象の接続情報を選択する。
これはデータソースエクスプローラに登録している接続情報がプルダウンに表示されている。
接続情報を選択したら、下の「接続」アンカーを押して、DBへ接続する。
その後、「接続からデフォルトカタログを上書き」、「接続からデフォルト・スキーマをオーバーライド」のチェックを有効にして、それぞれのプルダウンから適切なものを選択する。
適用ボタンを押して、設定画面を閉じる。
f:id:nagamitsu1976:20151001111347p:plain
2. テーブルからエンティティを生成を選択
JPAプロジェクトを選択し、コンテキストメニューから「JPAツール」→「テーブルからエンティティを生成」を選ぶ。f:id:nagamitsu1976:20151001111634p:plain
3. テーブルの関連付け
追加ボタンからテーブルの関連付けを登録する。
f:id:nagamitsu1976:20151001172305p:plain
"単純な関連付け"を選び、表1とテーブル2を選ぶ。
ここではWARSHIPテーブルとWARSHIP_TYPEテーブルの関連を作成する。
f:id:nagamitsu1976:20151001172329p:plain
テーブル間の紐付けるカラムを追加する。
f:id:nagamitsu1976:20151001172744p:plain
WARSHIPのTYPE_IDからWARSHIP_TYPEの1レコードが特定できるため、
関連付けの基数は1対1を選択する。f:id:nagamitsu1976:20151001172852p:plain
完了を押すと関連付けが登録される。
f:id:nagamitsu1976:20151001173304p:plain
追加された関連付けを選択し、生成する関連付け情報を選ぶ。
Warshipクラス→WarshipTypeクラスの関連付け、WarshipTypeクラス→Warshipクラスの関連付けから選べる。
艦艇クラスと艦種クラスの主従を考えると艦艇クラスが主、艦種クラスが従となるので、
Warshipクラス→WarhipTypeクラスの関連付けのみ生成する。
ちなみに両方選択すると、参照時にエラーが発生する。*1f:id:nagamitsu1976:20151008160122p:plain
4. エンティティのカスタマイズ1
キージェネレータの設定だとか、出力するクラスのパッケージ名などを決める。
f:id:nagamitsu1976:20151001173855p:plain
5. エンティティのカスタマイズ2
エンティティごとにプロパティ名だとかマッピングの際の型だとかを決定する。
テーブルの属性により適切な型が自動的に選択されてはいる。
IntegerをBigIntegerにしたいとかそんな時に手動で変えるのだろう。
f:id:nagamitsu1976:20151001174034p:plain
6. 完了
完了ボタンを押すとJavaクラスが自動生成される。
アノテーションを除けばテーブル構造に近いPOJOなクラスができている。
f:id:nagamitsu1976:20151001174511p:plain

といったところで、エンティティの自動生成は終わり。
テーブルがあっさりしたものなので、生成の設定も簡単だった。

これをどう使用するとDB参照できるのかについては、
次回以降に続く。

*1:というのも、艦種から艦艇を一意に抽出できないことが原因のよう。"More than one row with the given identifier was found"なんてエラーが出る。

JavaEE 7をやってみよう。 JPA その3

その2のつづき。

Eclipseのプロジェクトを作成する。
作るプロジェクトは4つ。

  • Enterprize Applicationプロジェクト
  • JPAプロジェクト
  • EJBプロジェクト
  • 動的Webプロジェクト

JPAを試すだけだけど、Webアプリに仕立てるのでそうなった。
(というか、参考サイトの手順通りなんだが)

1. Enterprize Applicationプロジェクト
新規プロジェクトからエンタープライズアプリケーションプロジェクトを選ぶ。
プロジェクト名を入力し、
ターゲットランタイムがWildflyになっていることを確認して、完了を押す。
f:id:nagamitsu1976:20150930182408p:plain
2. JPAプロジェクト
新規プロジェクトからJPAプロジェクトを選ぶ。
プロジェクト名を入力し、EARにプロジェクトを追加のチェックを付ける。
追加するEARをブルダウンから選択する。
対象は先に作ったエンタープライズアプリケーションプロジェクト。
ターゲットランタイムがWildflyであることも合わせて確認する。
問題なければ完了を押す。
f:id:nagamitsu1976:20150930182809p:plain
3. EJBプロジェクト
新規プロジェクトからEJBプロジェクトを選ぶ。
プロジェクト名を入力し、JPAプロジェクトと同じようにEARにプロジェクトを追加する。
f:id:nagamitsu1976:20150930183502p:plain
その後、次へを2度押し、EJBクライアントモジュールのJarファイル生成オプションのチェックを外す。
そして、完了を押す。
f:id:nagamitsu1976:20150930183603p:plain
4. 動的Webプロジェクト
新規プロジェクトから動的Webプロジェクトを選ぶ。
プロジェクト名を入力し、EARにプロジェクトを追加するまでは同じ。
f:id:nagamitsu1976:20150930184153p:plain
その後、ランタイム構成の変更ボタンを押して、Java Server Facesのファセットを追加する。f:id:nagamitsu1976:20150930184246p:plain
最終的には、ランタイムがカスタムになっているのを確認して、完了。
f:id:nagamitsu1976:20150930184416p:plain
完了後、EJBプロジェクトをビルドパスに追加するのを忘れずに。*1
f:id:nagamitsu1976:20151008150331p:plain

これでJPAを含んだブランクプロジェクトが完成。

動的Webプロジェクト → EJBプロジェクト → JPAプロジェクト → DB

上記の流れでDB参照を行うサンプルアプリを以降、作っていく。
といったところで、次回へ続く。

*1:これでも動くけど、こっちの方が設定的に正しいかもしれない。
JavaEE 7をやってみよう。 Webデプロイメントアセンブリー - ひこぽんのーと

JavaEE 7をやってみよう。 JPA その2

その1のつづき。

まず、プロジェクトを作る前に、JPA用にデータソースの設定をWildflyに仕込む。
プロジェクトを作って、JPA用のモジュールを作る分には必要ではないが、
後々の動確用に予め仕込んでおく。

1. Wildfly立ち上げ
EclipseのサーバからWildflyを立ち上げる。
localhost:8080へ繋いで、トップを出す。
f:id:nagamitsu1976:20150930161452p:plain
2. Admin Consoleを起動
トップページの中程にAdmin Consoleのリンクがあるので、そこから管理画面へ入る。
f:id:nagamitsu1976:20150930162303p:plain
2'. 管理画面が開けなかったアナタに
初めて管理画面を開いたり、管理ユーザが一人もいない場合、管理画面は開けない。
表示された手順を元にWildflyの管理ユーザを作る。
手順は英語だが、コマンドラインのハードコピーが表示されているのでわかりやすいと思う。
管理ユーザを追加したら、
もう一度、トップページから管理画面へ入り直すとログインダイアログが表示される。f:id:nagamitsu1976:20150930161740p:plain
3. JDBCドライバの登録
Wildflyではデータソースで使用するJDBCドライバも"デプロイメントモジュール"として登録する。
画面上部の"Deployments"からデプロイ画面を開く。
f:id:nagamitsu1976:20150930162633p:plain
3-1. Jarファイルの選択、名称の決定
"Add"ボタンを押してダイアログを表示する。JDBCドライバファイルを選択し、"Next"ボタンを押下する。
f:id:nagamitsu1976:20150930163136p:plain
登録後、即、有効化したいので、Enableのチェックを忘れずに付けて、"save"ボタンを押す。
f:id:nagamitsu1976:20150930163222p:plain
問題が無ければ、"Deployments"のリストに追加される。
4. データソースの追加
画面上部の"configuration"からコンフィグ画面を出す。
サイドメニューの"Containers" → "DataSources" とたどると、
JDBCデータソースの管理画面が開ける。
f:id:nagamitsu1976:20150930163642p:plain
4-1. データソース名とJNDI名称を決める
接続情報の登録:"Add"ボタンを押してダイアログを表示する。Wildfly上の名前(Name)とJNDI名称(JNDI Name)を決める。当たり前だが、JNDI名称をプログラムで使う。
f:id:nagamitsu1976:20150930164648p:plain
4-2. JDBCドライバを選択
JDBCドライバを選択する。
先に登録したJarファイルがドライバとしてリストから選択できる。
ここではHSQLDBのドライバを使う。f:id:nagamitsu1976:20150930164831p:plain
4-3. 接続情報を追加
JDBCの接続URLを入力する。以前、データソース・エクスプローラで追加した接続設定と同じようにJDBCの接続URLを入力する。
ユーザ、パスワードなどは必要なら入力する。(OracleなどのDBを使った場合)HSQLDBでは特に必要ない。
"Done"を押して完了。
f:id:nagamitsu1976:20150930165242p:plain
4-4. データソースの有効化
登録が正しく行われると非活性状態で登録される。
f:id:nagamitsu1976:20150930165451p:plain
登録したデータソースを選択し、"Enable"ボタンを押す。
設定が正しければ有効化できる。
有効化できない場合は、接続URLが正しいか、
DBが立ち上がっているかなどを見直すと原因がわかるかもしれない。f:id:nagamitsu1976:20150930165735p:plain

ここまでで、データソースの登録は完了だが、
Wildflyを再起動した時、"Deployments"に登録したJDBCドライバが消えていることがある。
(JNDIデータソースは消えない)
原因がよくわからないのだが*1、その場合は、デプロイしたモジュールをすべてアンデプロイして、
再度、JDBCドライバ→Webアプリケーションの順でデプロイし直すと良い。

といったところで、次回へ続く。

*1:翌日、作業再開時によくある。Wildfly起動時にDBが立ち上がっておらず、JNDIデータソースが有効化エラーとなり……、とか、そんなところが原因かもしれない

JavaEE 7をやってみよう。 JPA その1

これからJPAに踏み込みます。

JPAというのは平たく言ってしまえばO/Rマッパーということらしい。
iBatisとかHibernateとかあのへんのことを思い浮かべればよさそうだ。
作ってみるにあたって下記のページをまず読んでみた。

yoshio3.com

読んでみたが、自分の理解力が乏しく、イマイチ消化不良だったので、
概念よりも実際に組んで、動かして、感じてみることから始めることにした。

Eclipse + wildfly環境かつシロートにわかりやすい参考文献が見つけられなかったけれど、
スクラッチビルド用にブランクプロジェクトを作る方法と
簡単なサンプルが掲載されているサイトを見つけたので、
そこを足がかりとした。

Tutorials » Creating Java EE projects with JBoss Tools

まずは、プロジェクトを作成するところから始まる。
プロジェクト作成の詳細は、上記サイトに書いてあるので、
さらっと記録だけしておく。
ちなみにJPAモジュールを含んだWebアプリケーションプロジェクトを作成することになる。

といったところで、次回へつづく。

JavaEE 7をやってみよう。 HSQLDB/DBeaver/データソースエクスプローラ その4

その3のつづき。

その3の途中でJDBCドライバ定義を追加したのだが、
これは一体どこで管理されているのだろう。

追加したドライバ定義を訂正したい!
追加したドライバ定義はもういらない!!

そんな自分のために管理している場所を探してみた。

メニューバーの「ウィンドウ」から「設定」を開き、
サイドツリーの「データ管理」- 「接続」 - 「ドライバ定義」から管理画面を出せる。

f:id:nagamitsu1976:20150911142803p:plain

ここから追加も変更も削除も行える。

といったところで、このシリーズは終わりです。
いよいよJPAにはいれるか?

JavaEE 7をやってみよう。 HSQLDB/DBeaver/データソースエクスプローラ その3

その2のつづき。

HSQLDBへの接続設定をデータソースエクスプローラでやってみる。
データソースエクスプローラは「データベース開発」のパースペクティブで開かれる*1

データソースエクスプローラの「データソース接続」を新規追加する場合は、
「データソース接続」を右クリックしてコンテキストメニューから「新規」を選ぶ。

1. 新規接続プロファイル
接続プロファイルタイプとデータベース接続の名称を入力する。
f:id:nagamitsu1976:20150910204604p:plain
2. ドライバ設定
使用するJDBCドライバとパラメータを設定する。設定内容はDBeaverの時と同じように入力する。
いきなりこんな感じでドライバが選択できれば良いのだが。。。
f:id:nagamitsu1976:20150910204930p:plain
2'. ドライバープルダウンにHSQLDBが表示されないアナタに
ドライバープルダウンの右にある新規ドライバ定義ボタンを押して、ドライバ定義を追加する。
f:id:nagamitsu1976:20150910205512p:plainJarが無いと警告が出ているので、ドライバファイルを選択し直す。
DBeaverでダウンロードしたJarファイル*2を使うと一石二鳥で無駄がない。
f:id:nagamitsu1976:20150910210207p:plain
f:id:nagamitsu1976:20150910205528p:plain
OKを押すとドライバ定義が登録できる。
3. 接続テスト
設定に間違いが無いか確認を行う。正しく接続できるとこんなメッセージが出る。f:id:nagamitsu1976:20150910210535p:plain
4. 完了
完了!
データソースが追加されると自動的にDBに接続される。
DBeaverからテーブルを作っておいた場合、そのテーブルがツリーに表示されているはず。
接続はできるのに追加したテーブルが見えない場合は
別のDBに繋いでいる可能性が考えられるので、設定を見直すと良い。
f:id:nagamitsu1976:20150910210705p:plain

といったところで、次回に続く。

*1:この方が楽だよ。多分

*2:Eclipseワークスペース内の.metadata/.plugins/org.jkiss.dbeaver.core/driversに格納されている。

JavaEE 7をやってみよう。 HSQLDB/DBeaver/データソースエクスプローラ その2

その1のつづき。

HSQLDBに対してDBeaverとデータソースエクスプローラから接続を試してみる。
なぜ、データソースエクスプローラからまでと思うだろうが、これは後々の布石なのです!

まずはDBeaverから行ってみます。

1. Database Navigatorから「新規登録 接続」
コンテキストメニューから「新規登録 接続」を選ぶ。
ダイアログからHSQLDB - Serverを選ぶ。
ドライバが未取得の場合はこのタイミングでダウンロードする。
f:id:nagamitsu1976:20150910202159p:plain
2. JDBC接続の設定
ダイアログにJDBC接続設定を入力する。
ホスト、スキーマ名を入力する。
HSQLDBの起動情報と同じものを入力する。
ローカル上にServerを置き、DB名をlocalDBとしたので、図のように設定した。
f:id:nagamitsu1976:20150910202409p:plain
3. 接続テスト
設定が正しいか一応確認する。OKならば下のような感じのメッセージが出る。
f:id:nagamitsu1976:20150910202856p:plain
4. Proxy等々
SSHトンネリングやらProxyなどが必要な場合は設定する。
今回はローカルなので、特に不要。
f:id:nagamitsu1976:20150910203020p:plain
5. 表示名等々
表示名やAuto Commit等の設定を行う。
ローカルなんであまり気にしない。
f:id:nagamitsu1976:20150910203151p:plain
6. 完了
完了!
Database Navigatorに追加されたら、繋いでみよう。
予め表を作っておいたので、図ではテーブルが表示されている。
正しく繋がったらDBeaverで適当に表を作っておくと良い。
f:id:nagamitsu1976:20150910203320p:plain

SQLiteでDBeaverを使ったので迷いは少ないと思う。
といったところで次回に続く。