DBアクセスをするプログラムをどのように作るかも気になるところです。先ほどのプログラムをJPAを使ったアプリにすることが簡単にできるので、試してみましょう。
Forgeを起動して、「simpleapp」プロジェクトへcdコマンドで移動してから、「persistence setup」コマンドを使って、利用するJPAの実装を指定します。ここで、コンソールで「persistence setup --」まで入力してから、[TAB]キーを入力してみましょう。
次に指定できる候補が表示されるはずです。この[TAB]キー補完機能をうまく利用して、次のように入力しましょう。
$ forge [no project] forge $ cd simpleapp [simpleapp] simpleapp $ persistence setup --provider HIBERNATE --container JBOSS_AS7
ここでは、[provider]に「Hibernate」、[container]に「JBoss AS 7」を指定しました。
ちなみに、[TAB]キー補完で候補に挙がるものを見て分かる通り、[provider]としては、「OpenJPA」「EclipseLink」も選択可能です。
また、[container]としては、「GlassFish 3」「JBoss AS 6」カスタムJDBCといった選択肢があります。
さて、「persistence setup」コマンドを実行すると、次のように試用版のデータソース「java:jboss/datasources/ExampleDS」が用意されます。続いて、JPA 2を使うか、Hibernateの拡張APIを使うかの質問も出てきます。ここでは、いずれもデフォルトのNoで良いので、そのまま[Enter]キーを押しています。指定した結果は「src/main/resources/META-INF/persistence.xml」に保存されます。
***INFO*** Setting transaction-type="JTA" ***INFO*** Using example data source [java:jboss/datasources/ExampleDS] ? Do you want to install a JPA 2 metamodel generator? [y/N] ? The JPA provider [HIBERNATE], also supplies extended APIs. Install these as well? [y/N] ***SUCCESS*** Persistence (JPA) is installed. Wrote /home/user001/workspace/forge/simpleapp/src/main/resources/META-INF/persistence.xml
次に使用するエンティティ用クラスを作成します。この結果、「src/main/java/jp/example/simpleapp/model/UserInfo.java」にJavaプログラムが生成されます。パッケージ名はプロジェクトを作成したときに指定したものをベースとした値ですが、他のパッケージ名にするか聞かれるので、そのタイミングで別のものも指定できます。
[simpleapp] simpleapp $ entity --named UserInfo
Javaプログラムが生成されると自動的にプロンプトが「UserInfo」になる点に注意しましょう。クラス名.javaが表示されているときは、クラスについて指定できます。ここではfieldを追加しましょう。
[simpleapp] UserInfo.java $ field string --named name
「ls」コマンドを実行すると、UserInfoクラスのフィールド、メソッドの一覧が表示できます。自動でidやversionのフィールドができていたり、「getName()」といったアクセッサメソッドが出来上がっていることが分かります。
[simpleapp] UserInfo.java $ ls [fields] private::Long::id; private::String::name; private::int::version; [methods] public::equals(Object that)::boolean public::getId()::Long public::getName()::String public::getVersion()::int public::hashCode()::int public::setId(final Long id)::void public::setName(final String name)::void public::setVersion(final int version)::void public::toString()::String
次に、エンティティクラスに対応する画面を用意します。UserInfo.javaがプロンプトに表示されている状態で、scaffold from-entityコマンドを実行します。質問がいくつか表示されますがデフォルトのままでよいので、[Enter]キーを入力します。
[simpleapp] UserInfo.java $ scaffold from-entity
ここまでの結果として、「src」ディレクトリ配下に次のようにJavaソースファイルが作られます。「model」ディレクトリにはエンティティのモデルクラス、「view」ディレクトリには対応するビュークラスが用意されることが分かります。
src/main/java/
└── jp/
└── example/
└── simpleapp/
├── model/
│ └── UserInfo.java
└── view/
├── UserInfoBean.java
└── ViewUtils.java
表示用のXHTMLファイルは次のようなものが用意されます。作成、検索、表示といった用途のものがあることが分かります。
src/main/webapp/userInfo
├── create.xhtml
├── search.xhtml
└── view.xhtml
他には、「src/main/webapp/resources/scaffold/pageTemplate.xhtml」や「src/main/webapp/WEB-INF/classes/META-INF/forge.taglib.xml」といったファイルが自動で出力されます。
それでは、ビルド、JBoss AS 7の起動、デプロイという順で実行してみましょう。具体的には次のようにForgeで実行します。
[simpleapp] UserInfo.java $ cd ~/workspace/forge/simpleapp/ [simpleapp] simpleapp $ build [simpleapp] simpleapp $ as7 start [simpleapp] simpleapp $ as7 deploy
正しくできていれば、「http://localhost:8080/simpleapp/」をWebブラウザで開くと、左下にUser Infoの文字が表示されているはずです(図6)。
これをクリックすると、UserInfoの一覧表示、新規作成、検索ができるページを開けます(図7)。
動作確認ができたらJBoss AS 7 は停止しておきましょう。停止すると、エラーが表示されます。これは「java:jboss/datasources/ExampleDS」の設定に原因があります。
[simpleapp] simpleapp $ as7 shutdown
「java:jboss/datasources/ExampleDS」が具体的にどのデータベースを利用しているかは、JBoss AS 7の方で管理しています。そのため、エラーを消すためには、「~/applications/jboss-as/standalone/configuration/standalone.xml」にあるデータソースの設定を修正する必要があります。
具体的には、以下を
<connection-url>jdbc:h2:mem:test;DB_CLOSE_DELAY=-1</connection-url>
以下のように書き換えます。
<connection-url>jdbc:h2:mem:test;DB_CLOSE_ON_EXIT=FALSE</connection-url>
使っているDBが試用版でオンメモリに用意されるものなので、ここではそのままエラーを無視しても構いません。
どうでしょうか、簡単にJPAを利用するJava EEアプリが作成できることが理解できたと思います。
Copyright © ITmedia, Inc. All Rights Reserved.