Comments
Transcript
WebSphere Application Server 7.0 チュートリアル
WebSphere Application Server 7.0 Rational Application Developer Assembly and Deploy Features for WebSphere Software チュートリアル ver. 1.0 日本アイ・ビー・エム株式会社 ソフトウェア事業 2009 年 2 月 1 目次 1 はじめに _____________________________________________________________________3 1.1 2 3 4 5 RADAD とは ............................................................................................................. 3 事前の準備 ___________________________________________________________________5 2.1 RADAD の導入 ............................................................................................................. 5 2.2 WAS V7.0 導入とアプリケーション・サーバーの作成.......................................... 13 チュートリアル概要 __________________________________________________________15 3.1 環境.................................................................................................................... 15 3.2 チュートリアルの流れ....................................................................................... 16 テスト用サーバーの設定 ______________________________________________________17 4.1 RADAD の起動........................................................................................................ 17 4.2 テスト用サーバーの作成 ................................................................................... 18 HelloWorld サーブレットの作成と実行 __________________________________________21 5.1 HelloWorld サーブレットの作成 ............................................................................. 21 5.1.1 5.2 6 7 8 補足 動的 Web モジュールのバージョン ............................................... 25 HelloWorld サーブレットの実行 ............................................................................. 26 テーブルから JPA エンティティ・クラスの作成 ___________________________________28 6.1 JPA プロジェクトの作成 ........................................................................................ 28 6.2 JPA エンティティ・クラスの利用とユーティリティ JAR の指定 ......................... 40 6.3 サーブレットからの JPA エンティティ・クラスの利用 ................................... 41 データ・ソースの定義と実行 __________________________________________________43 7.1 テスト用サーバー管理コンソールでデータ・ソースの定義............................. 43 7.2 デバッグ・モードでのテスト ............................................................................ 47 7.3 補足 DB2 使用時の操作 .................................................................................. 49 7.3.1 JAAS-J2C 認証データの登録 .................................................................. 49 7.3.2 JDBC プロバイダーの定義...................................................................... 50 RAD との違い _______________________________________________________________55 2 1 はじめに 当文書は WebSphere Application Server 7.0 に同梱している IBM Rational Application Developer Assembly and Deploy Features for WebSphere Software (以下 RADAD)を使用して、簡単なサーブレットや JPA(Java Persistence API)を使用し てシンプルなエンティティを利用するアプリケーション開発と配置の手順を示すものです。 当文書はできるだけ正確を期して作成しておりますが、製品の稼動を保証するものではあり ません。 IBM からの正式な技術サポートは、お客様との保守契約に基づいて提供されます。 また、当文書内では、各製品・コンポーネントについて、以下の略称を使用しております。 正式名称 略称 IBM WebSphere Application Server WAS IBM Rational Application Developer Assembly and Deploy Features for WebSphere Software RADAD 1.1 RADAD とは IBM Rational Application Developer Assembly and Deploy Features for WebSphere Software(以下 RADAD)は、WAS V7 に同梱されている Eclipse3.4 ベー スの開発・配置ツールです。WAS V6.1 に同梱していた Application Server Toolkit V6.1 (以下 AST)の後継製品です。 RADAD は、WAS V7 用に Java EE 5、J2EE 1.4、J2EE 1.3 、Java SE 6 のアプリケー ションや配置記述子の開発を支援します。特に JPA および EJB 3.0 を含む機能が向上しま した。 Eclipse Web Tools Platform(WTP)と比較しても、動的 Web プロジェクト(サーブレッ ト 2.5, 2.4 、JSP、配置記述子)の開発と WASV7.0 をテスト用サーバーとて効率よく連 携できるのでテスト・デバッグの効率を向上させることができます。 3 RADAD は、WAS と同じ PC か異なる PC、どちらに導入しても利用できます。 WAS と RADAD が同一 PC の場合、WAS の起動・停止も RADAD から可能で、テスト・ デバッグやプロファイリングに役立ちます。 このような一人一台の開発環境を廉価に構築するために、「WAS 開発者版」ライセンスが 提供されています。 RADAD と WAS が異なる PC の場合、WAS は、RADAD から起動することができないので、 別途起動する必要があります。 配置コードの作成用に RADAD を使用することで、ビルドや配置でのエラーを減らすこと ができます。 4 2 事前の準備 2.1 RADAD の導入 RADAD を導入します。以下の手順に従います。 1. RADAD_SETUP の下の launchpad.exe を実行します。 2. 言語:日本語を選択し、「OK」をクリックします。 3. IBM Rational Application Developer Assembly and Deployment Features for WebSphere Software のインストールをクリックします。 5 4. IBM Installation Manager が起動します。パッケージのインストールで、「次へ」をク リックします。 5. 「使用条件の条項に同意します」を選択して、 「次へ」をクリックします。 6 6. 「インストール」をクリックします。 7. 「Installation Manager の再起動」をクリックします。 7 8. 「インストール」をクリックします。 9. 「パッケージのインストール」で、「IBM Rational Application Developer Assembly and Deployment フィーチャー」を選択し、 「次へ」をクリックします。 8 10. 「使用条件の条項に同意します。 」を選択して、「次へ」をクリックします。 11. インストール・ディレクトリーを指定して、「次へ」をクリックします。 9 12. 既存の Eclipse を拡張するか否かを選択します。 13. 言語:日本語をチェックし、「次へ」をクリックします。 14. インストールするフィーチャーとして、J2EE のアセンブリーとデプロイ、WebSphere Application Server バージョン 7.0 用のツールを選択し(デフォルトのまま)、 「次 へ」をクリックします。 10 15. 「ヘルプへのアクセス方法」を指定し、 「次へ」をクリックします。ここでは、 「Web からヘルプにアクセス」を選択します。 11 16. 導入の確認を行い、 「インストール」をクリックします。 17. インストール完了の画面が表示されます。「終了」をクリックします。 18. 再起動すると「Warning: Help content not installed」と表示されます。「Ignore」 をクリックします。 12 19. RADAD「ようこそ」画面が表示されます。 2.2 WAS V7.0 導入とアプリケーション・サーバーの作成 WAS V7.0 を導入し、アプリケーション・サーバーを作成します。導入に関しては、リ ンク先の「WebSphere Application Server V7.0 導入ガイド」をご参照下さい。このチ ュートリアルでは、管理セキュリティは、無効にしています。 http://www.ibm.com/developerworks/jp/websphere/library/was/was7_install/ RADAD を導入した PC と同じ PC に、アプリケーション・サーバーを作成します。 1. プロファイル管理ツールを起動します。 <導入ディレクトリー>/ bin/ProfileManagement /pmt.bat を起動します。 2. プログラム > IBM WebSphere > Application Server V7.0 > プロファイル管理ツ ール」をクリックします。 3. 「プロファイル管理ツール 7.0」で、 「プロファイル管理ツールを起動」をクリックしま す。 4. 「作成」をクリックします。 13 5. 環境の選択で、「アプリケーション・サーバー」を選択し、 「次へ」をクリックします。 6. プロファイル作成オプションで、 「標準プロファイル作成」を選択します。(拡張プロファ イルを選択しても問題ありません。後で、テスト用サーバーとして利用する場合に必要に なるのは、ポート番号やユーザー名、パスワードの情報です。標準にすると自動的に割り 当てられるので、ポート番号を控えておいて下さい) 7. 「管理セキュリティを有効にする」のチェックをはずし、「次へ」をクリックします。有 効にした場合は、テスト環境設定時にユーザー名、パスワードを指定します。 8. プロファイル管理サマリーに、ポート番号が表示されます。後で確認のために覚えておい てください。 「終了」をクリックします。 9. 「プロファイル作成の完了」画面で、プロファイル管理ツールは、プロファイルを正常に 作成しました。メッセージが表示されていれば、OK です。 10. ファースト・ステップ・コンソールの起動」にチェックをつけたまま、「終了」をクリッ クします。 11. 「インストール検査」を実行します。または、以下のコマンドを実行します。 <導入ディレクトリー>/profiles/<プロファイル名>/bin/ivt.bat 12. 以下のメッセージが確認できれば、OK です。 IVTL0070I: Installation Verification Tool 検査は正常に終了しました。 IVTL0080I: インストール検査が完了しました。 13. アプリケーション・サーバーを終了し、 「ファースト・ステップ・コンソールの起動」 「プ ロファイル管理ツール」を終了します。 14 3 チュートリアル概要 3.1 環境 当ガイドでは、下図の構成をチュートリアルでの操作に利用します。 1 台のマシンにアプリケーション・サーバーと RADAD を導入し、RADAD のワークスペー スに作られるサンプルの Derby のデータベースの EMPLOYEE テーブルを検索するアプリ ケーションを作成します。 テストの実行は、RADAD のワークスペースを直接利用する形式で行います。 15 3.2 チュートリアルの流れ RADAD の操作の流れは以下の通りです。 準備 ・ RADAD の導入 ・ WAS 単一プロセスのアプリケーション・サーバーとしてプロファイルを作成 テスト用サーバーの設定 ・ RADAD の起動 ・ WAS をテスト環境として定義 HelloWorld サーブレットの作成と実行 ・ 動的 Web プロジェクトとエンタープライズ・アプリケーション・プロジェクトを作成 ・ サーブレットを作成、テスト実行 テーブルから JPA エンティティ・クラスの作成 ・ JPA プロジェクトの作成 ・ JPA エンティティ作成ウィザードで表からエンティティ・クラスを生成 ・ データ・ソース・エクスプローラーで DB への接続 ・ @Table, @NamedQuery, @Id アノテーションを追加 ・ persistence.xml に JTA データ・ソースの記述を追加 ・ サーブレットに JPA エンティティ・クラスの呼び出しロジックの追加 テスト用サーバーへのデータソースの定義と実行 ・ WAS 管理コンソールでデータ・ソースの定義 ・ データ・ソース・エクスプローラーで DB と切断 ・ WAS 再起動 16 4 テスト用サーバーの設定 4.1 RADAD の起動 それでは、RADAD を起動して、動的 Web プロジェクトを作成しましょう。 1. ウィンドウズの場合、「プログラム」「IBM Software Delivery Platform > IBM Rational Application Developer 7.5 > IBM Rational Application Developer」を クリックします。 2. ワークスペース・ランチャーで、ワークスペースのフォルダーを入力します。(例: C:¥RAD75WK¥ejb3test ) RADAD「ようこそ」画面が表示されます。 17 3. ようこそビューを閉じると「Java EE」パースペクティブが開いています。 4.2 テスト用サーバーの作成 WAS V7.0 で作成したアプリケーション・サーバーを、RADAD からテスト環境として利 用できるように定義します。 1. 「サーバー」ビューの上で、右クリックし、コンテキスト・メニュー「新規 > サーバー」を クリックします。 18 2. 「新規サーバー」画面が表示されます。サーバー名の横の「追加」をクリックします。 3. WAS V7.0 の導入ディレクトリーを指定し、「次へ」をクリックします。 4. 「WebSphere サーバーの設定」画面が表示されます。WebSphere プロファイル名を指定 し、WAS 管理セキュリティを有効にしている場合は、セキュリティを有効にし、ユーザー ID、パスワードを指定します。 「終了」をクリックします。 別 PC に、WAS を導入している場合には、RMI と SOAP のポート番号を確認し違ってい る場合には指定してください。 19 5. 「サーバー」ビューには、次のようにサーバーが登録されます。 6. 「コンソール」ビューに System.out と System.err ログが表示され、WAS が起動します。 をクリックします。 「サーバー」ビューでは、状態:起動済み、状況:同期済み となります。 7. 「サーバー」ビューで、停止したいサーバーを選択し、 バーを停止することができます。 20 停止をクリックするとサー 5 HelloWorld サーブレットの作成と実行 5.1 HelloWorld サーブレットの作成 それでは、サーブレットを作成し、WAS で実行してみましょう。 1. メニュー・バー「ファイル > 新規 > 動的 Web プロジェクト」を選択します。 2. 「新規動的 Web プロジェクト」画面で、以下を指定します。「EAR にプロジェクトを追 加」がチェックされていると、プロジェクト名を入力すると EAR プロジェクト名も自動 で設定されます。「次へ」をクリックします。 プロジェクト名:DemoWeb ターゲット・ランタイム:WebSphere Application Server v7.0 動的 Web モジュール バージョン: 2.5 構成: WebSphere Application Server v7.0 のデフォルト構成 EAR メンバーシップ:DemoWebEAR 21 3. 「Web モジュール」の設定を構成します。今回はデフォルトのままです。「終了」ボタン をクリックします。デプロイメント記述子の生成に チェックがあると、web.xml が 生成されます。 4. 「関連付けられたパースペクティブを開きますか?」で、「この種類のプロジェクトは、 Web パースペクティブに関連付けられます。このパースペクティブを開きますか?」と 聞かれるので、「はい」をクリックします。 5. この時、「Web」パースペクティブに自動的に切り替わります。 6. プロジェクト「DemoWeb」を選択し、右クリックで、コンテキスト・メニュー「新規 > サーブレット」をクリックします。 22 7. 「サーブレットの作成」画面で、Java パッケージ:hello クラス名:HelloWorld と入 力し、 「終了」をクリックします。 8. サーブレットのスケルトンが生成されます。 そこに、doGet()メソッドに以下を入力して、HelloWorld サーブレットを完成させます。 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html; charset=Shift_JIS"); PrintWriter out = response.getWriter(); out.println("<h1>Hello World!</h1>"); out.close(); } 23 // 追加 // 追加 // 追加 // 追加 9. 入力を終えたら、ctrl + S キーで保管してください。 10. エンタープライズ・エクスプローラーの DemoWeb 以下を開いて、web.xml をダブル・ クリックします。 Web アプリケーション・デプロイメント記述子エディターが開きます。以前の AST のも のと少し異なっていますが。<servlet><servlet-mapping>が自動的に追加されている ことが分かります。 RADAD では、この画面で web.xml を編集することもできます。「ソース」タブをクリ ックすると web.xml をそのまま見ることができます。 24 <servlet> <description></description> <display-name>HelloWorld</display-name> <servlet-name>HelloWorld</servlet-name> <servlet-class>hello.HelloWorld</servlet-class> </servlet> <servlet-mapping> <servlet-name>HelloWorld</servlet-name> <url-pattern>/HelloWorld</url-pattern> </servlet-mapping> 5.1.1 補足 動的 Web モジュールのバージョン RADAD では、指定した動的 Web モジュールのバージョン 2.5 と 2.4 以前で Web モジュール・デプロイメント記述子エディターが異なっています。2.4 を選ぶと AST V6.1 と同様な画面が表示されます。 25 5.2 HelloWorld サーブレットの実行 それでは、作成したサーブレットを実行してみましょう。 1. 「エンタープライズ・エクスプローラー」ビューで、HelloWorld サーブレットを選択し、 右クリックします。 「実行 > サーバーで実行」をクリックします。 2. 「サーバーで実行」画面が表示されます。実行するサーバーを選択しますが、ここでは、 ひとつしかないので、そのまま、 「次へ」をクリックします。 26 3. 「サーバーで実行 –プロジェクトの追加および除去 」でプロジェクトが追加されること を確認し、「実行」をクリックします。 4. サーバーが起動し、サーブレットが呼び出されます。 Eclipse WTP のご経験があれば、RADAD を始めての方でも違和感なく利用できることと 思います。この機能で Web アプリケーションの開発とテストを効率よく実施することがで きます。 27 6 テーブルから JPA エンティティ・クラスの 作成 つぎは、新たにサポートされた RADAD の JPA 開発機能に触れてみましょう。 RADAD で利用できる JPA 開発機能は、以下のとおりです。 1.JPA プロジェクト作成ウィザード JPA プロジェクトは、プロジェクト・ファセットで、デフォルトで JPA とユーティリティ JAR としての登録が設定された Java プロジェクトです。 2.エンティティ Bean 生成ウィザード RDB カラムをプロパティとしてエンティティ・アノテーションをセットしたクラス)生成 3.マッピング・ファイル(orm.xml)生成ウィザード 4.コンテンツ・アシスト 5.JPA 詳細プロパティ(アノテーション・パラメーター設定支援機能) WAS V7.0 は、二つのパーシスタンス・プロバイダーが組み込まれています。 ・JPA for WebSphere Application Server(デフォルト) ・Apache OpenJPA この 二つのプロバイダーのいずれか、またはサード・パーティー製のパーシスタンス・プロバ イダーを使用することができます。JPA for WebSphere Application Server は、OpenJPA から ビルドされ互換性があります。拡張された機能は、SQL ステートメント・バッチ、JPA アクセ ス・インテント、バージョン ID などがあります。 このチュートリアルでは、RADAD 利用時に作成される Derby または、DB2 SAMPLE DB に 含まれる EMPLOYEE テーブルにアクセスする JPA を、 「エンティティ Bean」ウィザードを 利用してボトムアップで作成していきます。 JPA に関しては、developerWorks の他の記事でもいろいろと書かれていますので、詳細は記述 せずに、RADAD での操作について触れていくことにします。 JPA について、さらに詳しくしりたい方は、次の記事とその参照先をご覧下さい。 レガシー Hibernate アプリケーションから OpenJPA および EJB 3.0 へのマイグレーション http://www.ibm.com/developerworks/jp/opensource/techjournal/0708_vines/0708_vines.html 6.1 JPA プロジェクトの作成 RADAD では、JPA プロジェクトを作るウィザードが用意されています。これは、Java プロジ ェクトの拡張です。この JAR を利用するための指定が必要になりますが、Web コンテナーや EJB コンテナーのアプリケーションから利用しやすくするためかと思われます。 28 1. 「ファイル > 新規 > その他」をクリックし、「JPA」を開き、 「JPA プロジェクト」を 選択して、「次へ」をクリックします。 2. 「新規 JPA プロジェクト」では、プロジェクト名:DemoJPA、構成:WAS V7.0 のデ フォルト構成 を選択し、EAR にプロジェクトを追加にチェックし、EAR プロジェクト も選択します。 3. 「新規 JPA プロジェクト –JPA ファセット」で、以下を選択し「終了」をクリックしま す。 プラットフォーム:RAD JPA プラットフォーム 接続:Derby Sample Connection 29 Derby を利用する場合には、補足(ア)∼(ウ)の操作は飛ばしてください。 (ア) 補足 他の DB を利用する場合 例:DB2 「新規接続プロファイル」画面で、DB を選択し、名前を入力して、「次へ」をクリッ クします。 30 (イ) 「JDBC および SQLJ 用 IBM Data Server ドライバーデフォルト」のまま、デー タベース、ホスト、ポート番号、ユーザー名、パスワードを入力し、接続のテスト をクリックします。専用 PC ならパスワードの保存にチェックしても構いません。 接続が確認できたら、「終了」をクリックします。 (ウ) 3の「新規 JPA プロジェクト –JPA ファセット」画面で、接続が新たに作成した接 続名になります。「終了」をクリックします。 4. 「このプロジェクトに結び付けられたパースペクティブを開きますか?」に Yes を選択 すると、「JPA」パースペクティブが開きます。 5. プロジェクト「DemoJPA」を選択して、右クリック、「JPA ツール > エンティティの生 成」をクリックします。 注. 2009/02/05 に RADAD のソフトウェア更新を行うと、メニュー画面が一部英語表 記になります。このメニューは、 「JPA Tools > Generate Entities from Tables」と 表示されています。 また、 「JPA Tools > Generate Tables from Entities 」は、RAD を購入しないと動 作しないようで、「ライセンスが交付されていません」とメッセージが表示されます。 31 6. 「エンティティの生成(Generate Entities)」画面で、Connect をクリックします。 7. スキーマが選択できるようになるので、 「SAMP」を選択し、「次へ」をクリックします。 8. 「エンティティの生成 - テーブルからエンティティを生成」で、パッケージを入力し (例:demo.sample)、「Synchronize classes in persistence.xml」にチェックし、テ ーブル(EMPLOYEE)を選択します。 「終了」をクリックします。 32 9. Employee.java が生成されます。 10. 生成した Employee.java に対して、@Table と@NamedQuery ステートメントをコン テンツ・アシスト(ctrl+[space])を利用して追加します。 33 @T と入力し、(ctrl+[space])キーを押し、@Table ます。 - javax.persistence を選択し 11. 「データ・ソース・エクスプローラー」で、「Derby Sample Connection」を選択し、 右クリック。 「接続」をクリックします。ここで、DB に接続しておくと「JPA の詳細(JPA Tetailes)」での指定が楽になります。 12. カーソルを @Table の行に置いたまま、「JPA の詳細(JPA Details)」ペインをクリック します。 34 13. 「JPA の詳細」ペインでは、アノテーションのパラメータを指定することができます。 DB に接続しているとスキーマ(Schema)に候補が表示されるので、「SAMP」を選択しま す。 すると、テーブル(Table)の名前(Name)にも候補が表示されるので、「EMPLOYEE」 を選択します。 @Table ステートメントにパラメータが設定され、各フィールドのエラー表示が消えま す。 35 補足. DB2 サンプルの DB を利用している場合、スキーマ名は、デフォルトではサンプル 作成時のユーザーID になります。 14. さらに、その下の照会(Queries)の横の「追加(Add)」ボタンをクリックします。照会 の名前を入力する画面(New Named Query)が表示されるので、名前(Name)を入力し、 「OK」をクリックします。 15. 照会の複数行入力フィールドに SELECT e FROM EMPLOYEE e と入力すると query のパラメータが作成されます。 もちろん、(14)∼(16)の操作は、エディターでそのまま編集しても同じです。 36 16. 「JPA Structure」ペインで、「empno」を選択、右クリック「Map As > 択します。 これで、JPA エンティティ・クラスが完成です。 37 Id」を選 package demo.sample; import java.io.Serializable; import java.math.BigDecimal; import java.sql.Date; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.NamedQuery; import javax.persistence.Table; @Entity @NamedQuery(name="selectEmp",query="SELECT e FROM Employee e" ) // 生成後追加 @Table(name="EMPLOYEE", schema = "SAMP") // 生成後追加 public class Employee implements Serializable { @Id // 生成後追加 private String empno; private String firstnme; private String midinit; private String lastname; private String workdept; private String phoneno; private Date hiredate; private String job; private short edlevel; private String sex; private Date birthdate; private BigDecimal salary; private BigDecimal bonus; private BigDecimal comm; private static final long serialVersionUID = 1L; public Employee() { super(); } public String getEmpno() { return this.empno; } public void setEmpno(String empno) { this.empno = empno; } ∼ 以下 getter/setter 省略 ∼ 38 17. persistence.xml に必要なクラスとデータベースの情報を定義します。 「DemoJPA > JPA コンテンツ > persistence.xml」を選択し、右クリック、コンテキ スト・メニューで、 「クラスの同期化(Synchronize class lists)」をクリックします。 18. persistence.xml に生成したクラスの情報が生成されます。 19. パーシスタンス XML エディター にパーシスタンス・ユニット(DemoJPA)が表示され るので選択します。右側に詳細が表示されます。JTA データ・ソースに JDBC データ・ ソースの名前を入力します。 xml ソースは以下のように生成されます。 <?xml version="1.0" encoding="UTF-8"?> <persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"> <persistence-unit name="DemoJPA"> <jta-data-source>jdbc/sample1</jta-data-source> <class>demo.sample.Employee</class> </persistence-unit> </persistence> 39 6.2 JPA エンティティ・クラスの利用とユーティリティ JAR の指定 Java プロジェクトとして作成したクラスをユーティティ JAR として Web プロジェクトか ら利用できるように指定します。 1. Web プロジェクト「DemoWeb」を選択、右クリックし、コンテキスト・メニューーで 「プロパティ」をクリックします。 2. 「プロパティ」画面で、「Java EE モジュール依存関係」を選択し、JAR/モジュールの 「DemoJPA.jar」にチェックし、 「OK」をクリックします。 DemoWebEAR プロジェクトのプロパティ JavaEE モジュール依存関係で指定されてい ると上記画面から選択できるように表示されます。ここでは、J2EE モジュールとして定 義しました。これは、EAR の中に JPA プロジェクトが JAR として含まれ、サーブレット からは MANIFEST の指定で JAR を参照することになります。 補足 以下のように「Web ライブラリー」ペインで定義する方法でも構いません。この場合は、 WAR 内の WEB-INF¥lib の下に jar が展開されます。 40 6.3 サーブレットからの JPA エンティティ・クラスの利用 JPA エンティティ・クラスを使ってテーブルを検索するサーブレットを作りましょう。 1. プロジェクト「DemoWeb」を選択し、右クリックで、コンテキスト・メニュー「新規 > サーブレット」をクリックします。 2. 「サーブレットの作成」画面で、Java パッケージ:hello クラス名:HelloJPA と入力 し、「終了」をクリックします。 3. 前述した手順で、サーブレットを作成します。この例では、HelloJPA.java としていま す。 Package hello; import java.io.IOException; import java.io.PrintWriter; import java.util.Iterator; import java.util.List; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import javax.persistence.Query; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import demo.sample.Employee; public class HelloJPA extends HttpServlet { @PersistenceContext() // 追加(1) private EntityManager em; // 追加(2) private static final long serialVersionUID = 1L; public HelloJPA() { super(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType(“text/html; charset=Shift_JIS”); PrintWriter out = response.getWriter(); Query query = em.createNamedQuery(“selectEmp”);//追加(3) List<Employee> listEmployee=query.getResultList();//追加(4) out.println(“<h1>社員リスト</h1>”); for (Iterator iterator = listEmployee.iterator(); iterator.hasNext();) { Employee employee = (Employee) iterator.next(); // 追加(5) out.println(employee.getEmpno()+” “+employee.getLastname() +” “+employee.getFirstnme()+”<br>”); } } JPA クライアントからは、EntityManager インターフェースのメソッドを使用して、エ 41 ンティティの操作を行います。 PersistenceContext は、エンティティのインスタンスの集合を管理しているクラスで す。EntityManager と関連付けられ、その中で個々のエンティティ・インスタンスのラ イフサイクルが管理されます。 追加(1) @PersistenceContext アノテーション。EntityManager 宣言の直前に入れることで、 EntityManager との関連付けが行われます。 追加(2) EntityManager エンティティを操作するための JPA 提供のインターフェースです。 persist 新しいエンティティ・インスタンスの追加 find キーによる検索 remove 削除 merge エンティティの更新 flush データベースとの同期 fefresh データベースからの再ロード createQuery 照会インスタンスを作成 createNamedQuery 事前定義された照会インスタンスの作成 creareNativeQuery(String) ネイティブ SQL 実行用インスタンスを作成。 例)Update,delete createNativeQuery(String, Class) ネイティブ SQL 実行用インスタンスを作成。 結果はひとつ createNativeQuery(String, String resultSetMapping) 結果が複数 追加(3) EntityManager の createNamedQuery()メソッドを使ってインスタンスを取得し ています。 Query も JPA 提供のインターフェースです。永続化されているエンティティを取得す るメソッドを提供します。JPQL(Java Persistence Query Language)という操作言語 で指定します。JPQL は、二つのタイプの照会を定義しています。 ・名前付きクエリー 事前に名前をつけ定義したクエリーの呼び出し。 ・動的クエリー クライアントで JPQL を生成し実行 executeUpdate()メソッドでは、複数行の更新・削除、JOIN、副照会、GROUP BY /HAVING 文節の使用が可能です。 追加(4) 名前付きクエリーを実行し、結果を List に返します 追加(5) エンティティ・クラスで DB のデータを操作します。 JPQL の詳細については、 「JSR220 Enterprise JavaBeans, V3.0 Java Persistence API」http://jcp.org/aboutJava/communityprocess/final/jsr220/index.html ま たは、RAD V7.5 Programing Guide http://www.redbooks.ibm.com/Redbooks.nsf/RedpieceAbstracts/sg247672.html?Open Chapter 12. Persistence using the Java Persistence API をご参照ください。 42 7 データ・ソースの定義と実行 7.1 テスト用サーバー管理コンソールでデータ・ソースの定義 RADAD で使用した Derby の定義をコピーし、WAS から利用できるようにします。 DB2 をご利用の場合、7.3 補足 DB2 使用時へお進み下さい。 1. 「データ・ソース・エクスプローラー」ペインで、「Derby Sample Connection」を選 択、右クリックし、コンテキスト・メニューから「プロパティ」を選択します。 2. 「Derby Sample Connection のプロパティ」で、JDBC 接続プロパティの データベ ース・ロケーションをクリップボードにコピーします。 例) <RADAD ワークスペース >¥.metadata¥.plugins¥com.ibm.datatools.db2.cloudscape.driver¥SAMPLE 3. 「データ・ソース・エクスプローラー」ペインで、「Derby Sample Connection」を選 択、右クリックし、コンテキスト・メニューから「切断」を選択します。 43 Derby の場合、こちらで接続していると WAS から利用できません。 4. 5. 6. WAS へのデータ・ソースの定義を管理コンソールから行います。 「サーバー」ペインで WAS を選択し、起動します。 サーバーを選択し、右クリック、コンテキスト・メニューー「管理 > 管理コンソール」 をクリックします。 Derby については、JDBC プロバイダーは定義されていますので、データ・ソースの定 義を行います。 「リソース > JDBC > データ・ソース」をクリックし、データ・ソースの画面を開きま す。有効範囲に「ノード= xxxxxxxxNodenn, サーバー=server1」サーバーを選択し ます。 7. 「新規作成」をクリックします。 8. データ・ソース名(例:sample1)、JNDI 名は、(jdbc/sample1)パーシスタンス XML で JTA データ・ソースに指定したものに合わせます。「次へ」をクリックします。 44 9. 「JDBC プロバイダーを選択」では、既存 JDBC プロバイダーを選択し、 「Derby JDBC Provider」を選択し、「次へ」をクリックします。 10. データベース名に RADAD でクリップボードに保管した DB ロケーションを値に入力し、 「次へ」をクリックします。 例) <RADAD ワークスペース >¥.metadata¥.plugins¥com.ibm.datatools.db2.cloudscape.driver¥SAMPLE 45 11. 認証別名は、何も入力しないで「次へ」をクリックします。 12. アクションの要約画面で、 「終了」をクリックします。 13. 保存をクリックします。 14. 「サーバー」ビューでサーバーを選択し、「サーバーの停止」アイコンをクリックします。 46 7.2 デバッグ・モードでのテスト 今度は、デバッグ・モードで実行してみましょう。 1. HelloJPA サーブレットの doGet()メソッドにブレイク・ポイントを設定します。行の左 のエリアでダブル・クリックします。 2. 「サーバー」ビューでサーバーを選択し、コンテキスト・メニュー「デバッグ」をクリッ クします。 3. サーバーが起動したら、「Web」パースペクティブの「Web ブラウザーを開く」アイコ ンをクリックします。 4. ブラウザーが、Eclipse のペインとして開くので、HelloJPA サーブレットを呼び出す URL を入力します。呼び出すと、次の確認画面が表示されるので、「はい」をクリックします。 5. 「デバッグ」パースペクティブに切り替わります。操作は、Eclipse のデバッグと同じで す。 47 6. PF8(再開)キーを押すとプログラムが実行され、リストが表示されます。 JPA の開発としては、非常にシンプルなものですが、RADAD 機能の理解に役立てば幸い です。 48 7.3 補足 DB2 使用時の操作 DB2 を利用されてチュートリアルを実施されている方は、データ・ソースの WAS への登 録の操作は、こちらをご参照下さい。 7.3.1 JAAS-J2C 認証データの登録 コンテナーに認証させる場合は、データ・ソース定義前に JAAS-J2C 認証データ別名を登 録しておくと便利です。 1. 「セキュリティ > グローバル・セキュリティー」を選択し、「認証 > Java 認証・承認 サービス > J2C 認証データ」をクリックします。 2. 「新規作成」ボタンをクリックします。 3. (次の項目を入力し、「OK」をクリックします。 別名: ユーザーID: 49 パスワード: 4. 「保存」をクリックします。 7.3.2 JDBC プロバイダーの定義 1. 管理コンソールで、 「リソース > JDBC > JDBC プロバイダー」を選択します。 2. 有効範囲の指定に「ノード= XXXXXXXXX, サーバー=server1 」を選択します。 3. 「新規作成」をクリックします。 4. 以下を指定し、「次へ」をクリックします。 例)データベース・タイプ:DB2 プロバイダー・タイプ:DB2 Universal JDBC Driver Provider 実装タイプ:XA データ・ソース 名前:任意(デフォルト DB2 Universal JDBC Driver Provider (XA) ) 50 5. 次を入力し、 「次へ」をクリックします。 WebSphere 変数 DB2UNIVERSAL_JDBC_DRIVER_PATH: c:¥sqllib¥java (例) DB2UNIVERSAL_JDBC_DRIVER_NATIVEPATH: 6. 入力内容を確認し、 「終了」をクリックします。 7. 「保存」をクリックします。 51 8. 右の「リソース > JDBC > データ・ソース」を選択し、有効範囲でサーバーを選択、 「新 規作成」ボタンをクリックします。 9. 次を入力し、 「次へ」をクリックします。 例)データ・ソース名:sample1 10. JNDI 名:jdbc/sample1 (persistence.xml で指定したものと合わせます) 52 11. 先ほど作成した、JDBC プロバイダーを選択します。 12. 以下を入力し、「次へ」をクリックします。 例)ドライバー・タイプ:4 データベース名:sample サーバー名:localhost ポート番号:5000 13. 別途作成しておいた、J2C 認証別名を指定します。「次へ」をクリックします。 53 14. 入力内容を確認し、 「終了」をクリックします。 15. 「保存」クリックします。 16. 「サーバー」ペインでサーバーを選択し、停止アイコンをクリックしてサーバーを停止 します。 7.2 デバッグ・モードでのテストに戻ってサーブレットを動かしみてください。 54 8 RAD との違い RADAD は、その名のとおり WAS V7.0 用の開発・配置ツールの位置づけですが、JSF や Struts 向けの開発機能や複数のテスト・サーバーが利用できる Rational Application Developer for WebSphere Software という製品があります。 ビジュアルに JSP を編集したり、複数のバージョンに対する WAS アプリケーション開発 者向けにお勧めです。 以下に機能の違いを示します。 55