1) データベースの準備
データベースはSymfoware Serverを使用します。国名と総人口のデータを格納するデータベースのテーブルを作成し、アプリケーションの実行に必要なデータを挿入します。また、ワークベンチからデータベースに接続できる環境を整える必要があります。
これらについては、"6.2 入門"で説明していますので、そちらを参照してください。
2-1) JPAプロジェクトの作成
メニューバーから[ファイル] > [新規] > [プロジェクト]を選択すると、[新規プロジェクト]ウィザードが表示されます。
新規プロジェクトウィザードから[JPA] > [JPA プロジェクト]を選択して、[次へ]をクリックします。
以下の設定項目を確認、入力してください。
設定項目 | 設定内容 |
---|---|
プロジェクト名 | JPASample |
ターゲットランタイム | Interstage Application Server V9.2 IJServer Cluster (Java EE) |
構成 | Interstage Application Server V9.2 IJServer Cluster (Java EE) デフォルト構成 |
情報を設定後、[次へ]をクリックしてください。 [JPA ファセット]ページが表示されます。
以下の設定項目を確認、入力してください。以下の情報を設定後、[完了]をクリックしてください。
設定項目 | 設定内容 |
---|---|
プラットフォーム | 汎用 |
接続 | Symfoware_Studio |
接続からデフォルトスキーマを上書きする | チェックしない |
サーバランタイムが提供する実装を使用 | チェックする |
注釈されたクラスを自動的に検出する | チェックする |
orm.xml の作成 | チェックしない |
ポイント
[接続]には、データベースに接続している接続プロファイルを指定することで、データベースのテーブルやカラムの情報をJPA詳細ビューなどで利用することができます。
2-2) persistence.xmlファイルの編集
Entityに関連付けるデータベースのJDBC Resourceをpersistence.xmlに記述します。
作成したプロジェクト(JPASample)を選択して、[src] > [META-INF] > [persistence.xml]をダブルクリックして永続化 XMLエディタで開きます。
永続化 XMLエディタの[接続]タブを選択して、JDBC Resourceの定義を以下のように設定します。
設定項目 | 設定内容 |
---|---|
トランザクションタイプ | JTA |
JTA データソース名 | jdbc/Symfo |
3) Entityの作成
データベースのテーブルとマッピングするEntityを作成します。
ポイント
以下では、JPA構造ビューとJPA詳細ビューの使用方法を説明するため、Javaクラスを作成して、それにデータベースを対応付ける方法を説明していますが、データベースのテーブルからEntityを生成することもできます。詳細は、"4.3.3.4 テーブルからエンティティクラスを生成する"を参照してください。
3-1)エンティティの作成
作成したプロジェクトを選択して、右クリックでコンテキストメニューから[新規] > [その他]を選択すると、新規ウィザードが表示されます。
新規ウィザードから[JPA] > [エンティティ]を選択して、[次へ]をクリックします。
以下の設定項目を確認、入力してください。
設定項目 | 設定内容 |
---|---|
プロジェクト | JPASample |
ソースフォルダ | ¥JPASample¥src |
Java パッケージ | sample |
クラス名 | CountryData |
継承 | エンティティ |
XMLのエンティティマッピングに追加 | チェックしない |
情報を設定後、[次へ]をクリックしてください。[エンティティプロパティ]ページが表示されます。
以下の設定項目を確認、入力してください。以下の情報を設定後、[完了]をクリックしてください。
設定項目 | 設定内容 |
---|---|
エンティティ名 | CountryData |
デフォルトを使用 | チェックしない |
テーブル名 | C_DATA |
エンティティフィールド | 以下のフィールドを追加します |
アクセスタイプ | フィールドベース |
キー | 名前 | 型 |
---|---|---|
チェックする | id | int |
チェックしない | countryName | java.lang.String |
チェックしない | totalPopulation | int |
3-2) テーブルとの関連付け
EntityのCountryDataクラスとデータベースのC_DATAテーブルを関連付けます。[JPA構造]ビューでCountryDataクラスが選択されていることを確認します。[JPA詳細]ビューで[テーブル]グループの[名前]に"C_DATA"が設定されていることを確認します。
ポイント
データベースに接続していない場合にはコンボボックスに候補は表示されませんが、テーブル名を直接指定することはできます。
以下の設定項目を確認、選択してください。
設定項目 | 設定内容 |
---|---|
名前 | デフォルト (CountryData) |
テーブル:名前 | C_DATA |
テーブル:カタログ | デフォルト () |
テーブル:スキーマ | STUDIO |
3-3) カラムとの関連付け
エンティティフィールドとテーブルのカラムを関連付けます。
各フィールドは、以下の表のようにカラムと対応付けます。
フィールド | 対応付け | カラム:名前 |
---|---|---|
id | Id | ID |
countryName | 基本(デフォルト) | C_NAME |
totalPopulation | 基本(デフォルト) | T_POP |
これまでの手順で以下のようなソースが作成されます。
CountryDataクラス
package sample; import java.io.Serializable; import java.lang.String; import javax.persistence.*; /** * Entity implementation class for Entity: CountryData * */ @Entity @Table(name="C_DATA", schema = "STUDIO") public class CountryData implements Serializable { @Id @Column(name="ID") private int id; @Column(name="C_NAME") private String countryName; @Column(name="T_POP") private int totalPopulation; private static final long serialVersionUID = 1L; public CountryData() { super(); } public int getId() { return this.id; } public void setId(int id) { this.id = id; } public String getCountryName() { return this.countryName; } public void setCountryName(String countryName) { this.countryName = countryName; } public int getTotalPopulation() { return this.totalPopulation; } public void setTotalPopulation(int totalPopulation) { this.totalPopulation = totalPopulation; } } |
データベースへの問合せなどを行うPopulationRankingクラスを作成します。
4-1) クラスの作成
作成したプロジェクトを選択して、右クリックでコンテキストメニューから[新規] > [クラス]を選択します。新規Javaクラスウィザードが表示されます。
以下の設定項目を確認、入力してください。以下の情報を設定後、[完了]をクリックしてください。
設定項目 | 設定内容 |
---|---|
ソースフォルダ | JPASample/src |
パッケージ | sample |
名前 | PopulationRanking |
4-2) ロジッククラスの実装
Entityは、javax.persistence.EntityManagerクラスにより管理されています。このクラスを作成するjavax.persistence.EntityManagerFactoryクラスを引数にしたコンストラクタを追加します。PopulationRankingクラスはWebアプリケーションのサーブレットクラスで使用されるので、この引数はサーブレットクラスから渡されます。以下のコードをPopulationRankingクラスに追加します。
コンストラクタの追加
package sample; |
ポイント
必要な実装をコーディングした後にJavaエディタ上で右クリックし、コンテキストメニューから[ソース] > [インポートの編成]を行うと、プロジェクトに設定されたクラスパスに従った適切なimport文が挿入できます。
C_DATAテーブルからIDに対する総人口ランキングを取得するメソッドを追加します。C_DATAテーブルとマッピングしているCountryDataクラスを取得するには、EntityManagerインスタンスのfindメソッドを使用します。テーブルのデータが総人口の多い順番に格納されているので、順位とIDは同じ値になります。
以下のコードをPopulationRankingクラスに追加します。
総人口ランキングを取得するメソッドの追加
public CountryData getCountryData(int rank) { if (rank < 1 || rank > 10) { return null; } CountryData country = em.find(CountryData.class, rank); return country; } |
メニューバーから[ファイル] > [新規] > [プロジェクト]を選択すると、[新規プロジェクト]が表示されます。
新規プロジェクトウィザードから[Java EE] > [エンタープライズアプリケーションプロジェクト]を選択して、[次へ]をクリックします。
以下の設定項目を確認、入力してください。
設定項目 | 設定内容 |
---|---|
プロジェクト名 | JPAEARSample |
ターゲットランタイム | Interstage Application Server V9.2 IJServer Cluster (Java EE) |
EAR バージョン | 5.0 |
構成 | Interstage Application Server V9.2 IJServer Cluster (Java EE) デフォルト構成 |
情報を設定後、[次へ]をクリックしてください。 [エンタープライズアプリケーション]ページが表示されます。
以下の設定項目を確認、入力してください。以下の情報を設定後、[完了]をクリックしてください。
設定項目 | 設定内容 |
---|---|
Java EE モジュール依存関係 | JPASample |
コンテンツフォルダ | EarContent |
Deployment Descriptorの生成 | チェックしない |
6) Webアプリケーションの作成
本来であればWebアプリケーションをクライアントとして作成するための手順が必要ですが、ここではサンプルをインポートしてJPAを使用する場合に重要なポイントを確認していきます。Webアプリケーションの作成についての詳細な手順を知りたい場合は、Webアプリケーションの"2.2 入門"を参照してください。
サンプルのインポートは次の手順で行います。
メニューから[ファイル] > [インポート]を選択します。表示されたインポートウィザードで[一般] > [既存プロジェクトをワークスペースへ]を選択します。[アーカイブファイルの選択]をチェックし、[参照]ボタンを押して、以下のファイルを選択します。
<Java EEワークベンチのインストールフォルダ>¥sample¥JPASample.zip
[プロジェクト]から[JPAClientSample]を選択し、[完了]をクリックしてください。
JPAClientSampleプロジェクトのインポート後に、JPAEARSampleプロジェクトを選択して、右クリックでコンテキストメニューから[プロパティ]を選択します。プロパティダイアログボックスの[Java EEモジュール依存関係]を選択し、JPAClientSampleをチェックしてEARにクライアントを追加します。
6-1) 動的Webプロジェクトの作成
クライアントとして動的Webプロジェクトを作成します。サンプルのインポートで代替済みのため、詳細は省略します。設定項目は以下を参考にしてください。
設定項目 | 設定内容 |
---|---|
プロジェクト名 | JPAClientSample |
ターゲットランタイム | Interstage Application Server V9.2 IJServer Cluster (Java EE) |
構成 | Interstage Application Server V9.2 IJServer Cluster (Java EE) デフォルト構成 |
EARにプロジェクトを追加 | チェックする |
EARプロジェクト名 | JPAEARSample |
6-2) ビルドパスの設定
エンティティクラス(CountryData)やロジッククラス(PopulationRanking)を参照するためのビルドパス(クラスパス)を設定します。インポートしたサンプルプロジェクトでは設定済みです。
設定内容を確認するには、作成したプロジェクト(JPAClientSample)を選択して、右クリックでコンテキストメニューから[プロパティ]を選択します。プロパティダイアログボックスの[Java EEモジュール依存関係]を選択して、[Java EEモジュール]タブを表示します。
以下がチェックされていることを確認します。
設定項目 | 設定内容 |
---|---|
JAR/モジュール | JPASample.jar |
6-3) サーブレットクラスの作成
サーブレットクラスを作成します。インポートしたサンプルプロジェクトでは以下のような設定項目で作成済みです。
設定項目 | 設定内容 |
---|---|
Java パッケージ | sample |
クラス名 | ServletController |
スーパークラス | javax.servlet.http.HttpServlet |
作成するメソッドスタブの選択 | スーパークラスからのコンストラクタ |
6-4) Dependency Injectionの指定
ロジッククラスを呼び出すための実装をサーブレットクラスに行います。インポートしたサンプルプロジェクトのサーブレットソースには実装済みです。
PopulationRankingクラスを作成するためには、コンストラクタにjavax.persistence.EntityManagerFactoryが必要になります。EntityManagerFactoryのフィールドを作成して、以下のようにPersistenceUnitアノテーションを設定し、Dependency Injectionの指定を行います。
PersistenceUnitアノテーションの定義
@PersistenceUnit private EntityManagerFactory emf; |
ポイント
J2EE1.4までのlookupメソッドの代わりに、Java EEではDependency Injectionを利用することで、オブジェクトを取得して使用することができます。(オブジェクトは実行時に自動的にJava EEコンテナによってフィールドに設定されます。)
6-5) サーブレットクラスの実装
以下のようにロジッククラスのインスタンスを作成し、メソッドを呼び出します。インポートしたサンプルプロジェクトのサーブレットソースには実装済みです。
Entityの呼び出しメソッドの定義
PopulationRanking ranking = new PopulationRanking(emf); CountryData country = ranking.getCountryData(rank); |
実装を行ったサーブレットクラスは以下のようになります。(インポートしたプロジェクトのサーブレットソースは、この形式になっています。)
太字の部分が追加した定義になります。
サーブレットクラス(ServletController.java)
package sample; import java.io.IOException; import javax.persistence.EntityManagerFactory; import javax.persistence.PersistenceUnit; import javax.servlet.RequestDispatcher; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class ServletController */ public class ServletController extends javax.servlet.http.HttpServlet { private static final long serialVersionUID = 1L; //@PersistenceUnit @PersistenceUnit private EntityManagerFactory emf; /** * @see HttpServlet#HttpServlet() */ public ServletController() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub request.setCharacterEncoding("Windows-31J"); ServletContext sc = getServletContext(); // 呼び出すファイル種別取得 String mode = request.getParameter("mode"); if (mode != null && mode.equals("top")) { // 入力画面のHTMLファイル呼出し RequestDispatcher inRd = getServletContext().getRequestDispatcher("/default.jsp"); inRd.forward(request, response); return; } int rank; // 入力チェック try{ rank = Integer.parseInt(request.getParameter("rank")); } catch (NumberFormatException e){ RequestDispatcher errRd = sc.getRequestDispatcher("/error.jsp"); errRd.forward(request, response); return; } PopulationRanking ranking = new PopulationRanking(emf); CountryData country = ranking.getCountryData(rank); //取得した値の確認 if(country == null){ RequestDispatcher errRd = sc.getRequestDispatcher("/error.jsp"); errRd.forward(request, response); return; } sc.setAttribute("ranking", country); RequestDispatcher outRd = sc.getRequestDispatcher("/result.jsp"); outRd.forward(request, response); } } |
ポイント
必要な実装をコーディングした後にJavaエディタ上で右クリックし、コンテキストメニューから[ソース] > [インポートの編成]を行うと、プロジェクトに設定されたクラスパスに従った適切なimport文が挿入できます。
6-6) 入出力画面の作成
入出力画面のJSPを作成します。インポートしたサンプルプロジェクトでは以下のようなファイルを作成済みです。
入力画面(default.jsp)
<%@ page language="java" contentType="text/html; charset=windows-31j" pageEncoding="windows-31j"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-31j"> <title>世界総人口ランキング</title> </head> <body> <h1>入力画面</h1> <p>1~10の間で順位を入力してください。</p> <p></p> <form action="ServletController" method="post"> 順位:<br> <input name="rank" type="text" size="10">位<br> <p></p> <input type="submit" value="OK"> <input type="reset" value="クリア"> </form> </body> </html> |
出力画面(result.jsp)
<%@ page language="java" contentType="text/html; charset=windows-31j" pageEncoding="windows-31j"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-31j"> <title>世界総人口ランキング</title> </head> <body> <h1>出力画面</h1> 総人口ランキング${param.rank}位は「${applicationScope.ranking.countryName}」です。<br> 総人口は${applicationScope.ranking.totalPopulation}人です。 <br> <hr> <form action="ServletController" method="post"> <input type="submit" value="入り口に戻る"> <input type="hidden" name="mode" value="top"> </form> |
エラー画面(error.jsp)
<%@ page language="java" contentType="text/html; charset=windows-31j" pageEncoding="windows-31j"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-31j"> <title>世界総人口ランキング</title> </head> <body> <h1>エラー画面</h1> 指定された範囲内の順位が入力されていないか、またはサーバエラーです。<br> <br> <hr> <form action="ServletController" method="post"> <input type="submit" value="入り口に戻る"> <input type="hidden" name="mode" value="top"> </form> </body> </html> |
7) Interstage Application ServerのJDBC設定
Java EEコンテナからSymfowareデータベースを使用できるように、Interstage Application Serverの管理コンソールでJDBCの設定をします。
Interstage管理コンソールの起動の仕方および使用方法については、Interstage Application ServerのJava EE実行環境の使用方法を別途ご確認ください。
7-1) JDBC Console Poolの作成
SymfowareのJDBC Connection Poolを作成します。左のペインから[リソース] > [JDBC] > [接続プール]を選択すると、[接続プール]ページが表示されます。
[新規...]をクリックして、以下の設定項目を入力してください。
設定項目 | 設定内容 |
---|---|
名前 | SymfoPool |
リソースタイプ | javax.sql.ConnectionPoolDataSource |
データベースベンダー | 空白 |
情報を設定後、[次へ]をクリックしてください。
次のページでは、以下の設定項目を入力してください。
設定項目 | 設定内容 |
---|---|
データソースクラス名 | com.fujitsu.symfoware.jdbc2.SYMConnectionPoolDataSource |
最後の行にある[追加プロパティ]で、プロパティを追加します。プロパティの追加は[プロパティを追加]をクリックします。以下の設定項目の入力が完了したら、[完了]をクリックします。
設定項目 | 設定内容 |
---|---|
User | データベースにアクセスするためのユーザIDを指定します |
Password | ユーザ名に対するパスワードを指定します |
PortNumber | 2050 |
networkProtocol | symford |
DatabaseName | COUNTRYDATA |
serverName | myhost |
7-2) JDBC Resourceの作成
作成したJDBC Console Poolに対応するJDBC Resourceを作成します。左のペインから[リソース] > [JDBC] > [JDBCリソース]を選択すると、[JDBCリソース]ページが表示されます。[新規...]をクリックすると、[新しい JDBC リソース]ページが表示されます。
以下の設定項目を入力してください。
設定項目 | 設定内容 |
---|---|
JNDI 名 | jdbc/Symfo |
プール名 | SymfoPool |
ターゲット(選択したターゲット) | MyDebugJEE |
7-3) JDBCドライバのクラスパスの設定
Symfoware JDBCドライバをクラスパスに設定します。左のペインから[設定] > [MyDebugJEE-config] > [JVM 設定]を選択すると、[JVM 一般設定]ページが表示されます。[パス設定]タブをクリックして、以下の設定をします。
以下の設定項目を入力してください。
設定項目 | 設定内容 |
---|---|
クラスパスのサフィックス | C:/SFWCLNT/JDBC/fjjdbc/lib/fjsymjdbc2.jar |
ネイティブライブラリのサフィックス | C:/SFWCLNT/JDBC/fjjdbc/bin |
8) アプリケーションの動作確認
8-1) プロジェクトとサーバの関連付け
サーバビューでサーバを選択し、コンテキストメニューから[プロジェクトの追加および除去]を選択してください。
使用可能なプロジェクトから作成したEARプロジェクトを選択し、[追加]をクリックしてください。構成プロジェクトにEARプロジェクトが追加されていることを確認してください。
以下の情報を確認後、[完了]をクリックしてください。
設定項目 | 設定内容 |
---|---|
構成プロジェクト | JPAEARSample |
ポイント
サーバビューに配備先となるサーバが登録されていない場合は、サーバを追加する必要があります。サーバを追加する方法については、"7.2.6 アプリケーションの動作確認"を参照してください。
8-2) ブレークポイントの設定
ロジッククラスのgetCountryData()メソッドの先頭行にブレークポイントを設定します。ブレークポイントは、エディタの左側のルーラー部分をダブルクリックして、設定もしくは解除します。
8-3) サーバの起動
サーバビューでサーバを選択し、コンテキストメニューから[デバッグ]を選択してください。
ポイント
デバッガを使用せず単純にアプリケーションを起動したい場合には、コンテキストメニューから[開始]を選択します。
サーバが起動する前に自動的にEARファイルが配備されます。
サーバビューで以下の情報を確認してください。
確認項目 | 確認内容 |
---|---|
サーバの状態 | 始動済み |
サーバの状況 | 同期済み |
EARファイル(JPAEARSample)の状況 | 同期済み |
EARファイル配下のJARファイル(JPASample)の状況 | 同期済み |
EARファイル配下のWARファイル(JPAClientSample)の状況 | 同期済み |
8-4) アプリケーションの実行
サーバビューで、配備されているWebプロジェクト(JPAClientSample)を選択して、コンテキストメニューから[Webブラウザ]を選択します。Webブラウザが起動されて、入力画面が開きます。
設定項目 | 設定内容 |
---|---|
入力画面のURL | http://localhost/JPAClientSample/ |
[順位:]の入力フィールドに人口ランキングの順位を入力して、[OK]をクリックします。
ポイント
プロジェクトを選択し、コンテキストメニューから[実行] > [サーバで実行]または[デバッグ] > [サーバでデバッグ]を選択することで、サーバの追加、プロジェクトの追加、サーバの起動、クライアントの起動をまとめて行うことができます。
また、クライアントとして使用するWebブラウザは、メニュー [ウィンドウ] > [Web ブラウザ] から変更することができます。
8-5) アプリケーションのデバッグ
アプリケーションが動作し、ブレークポイントで中断されます。変数ビューの表示を確認します。メニューから[実行] > [ステップオーバ]を選択し、変数ビューでプログラムの状況を確認します。デバッグについては、"7.2.6.1 デバッグする"を参照してください。
ポイント
変数ビューでは値の確認だけでなく、変更も行うことができます。
デバッガで中断している処理は、メニューから[実行] > [再開]を選択することで再開され、サーバ側での処理が終了し、Webブラウザに出力画面が表示されます。入力した順位の国名と総人口が表示されることを確認してください。
9) 運用環境へのアプリケーションの配布
アプリケーションを運用環境に配布するには、EARファイルを作成する必要があります。作成したEARファイルは、サーバの配備機能を利用して、サーバに配備します。
9-1) アプリケーションのエクスポート
EARファイルの作成は、エクスポートウィザードから行います。エクスポートウィザードを起動するには、[ファイル] > [エクスポート]を選択してください。[エクスポート]から[Java EE] > [EARファイル]を選択してください。
EARファイルエクスポートウィザードが表示されます。
以下の設定項目を確認、入力してください。以下の情報を設定後、[完了]をクリックしてください。
設定項目 | 設定内容 |
---|---|
EARアプリケーション | エンタープライズアプリケーションプロジェクトを指定します。 |
宛先 | EARファイルの作成先を指定します。 |
9-2) 運用環境に配備する
運用環境のInterstage管理コンソールにログインし、ローカルにあるEARファイルを指定することにより、リモート環境から運用環境に配備を行うことができます。