Download I B M

Document related concepts
no text concepts found
Transcript
IBM Rational Application Developer V8.0
新機胜ハンズオン資料
2010 幎 10 月 ISE | Rational Solution Group
© Copyright 2010 IBM Corporation
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
•
この資料に含たれる情報は可胜な限り正確を期しおおりたすが、日本アむ・ビヌ・゚ム株匏
䌚瀟ならびに日本アむ・ビヌ・゚ム システムズ・゚ンゞニアリング株匏䌚瀟の正匏な
レビュヌを受けおおりたせん。圓資料は、資料内で説明されおいる補品の仕様を保蚌する
ものではありたせん。
•
資料の内容には正確を期するよう泚意しおおりたすが、この資料の内容は 2010 幎 10 月
珟圚の情報であり、補品の新しいリリヌス、PTF などによっお動䜜、仕様が倉わる可胜性
があるのでご泚意䞋さい。圓資料に蚘茉された補品名たたは䌚瀟名はそれぞれの各瀟の
商暙たたは登録商暙です。
•
資料のすべおあるいは郚を問わず、日本アむ・ビヌ・゚ム システムズ・゚ンゞニアリング
株匏䌚瀟の蚱可なく䜿甚、改倉するこずを犁じたす。
© 2010 IBM Corporation
-1-
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
目次
1
2
3
はじめに ..............................................................................................................................- 4 1.1
抂芁 ..............................................................................................................................- 4 -
1.2
開発の流れず関連する RAD の機胜 ...............................................................................- 5 -
1.3
開発察象のアプリケヌション ...........................................................................................- 7 -
1.4
前提 ..............................................................................................................................- 8 -
Web UI 局の䜜成 ................................................................................................................- 9 2.1
Web2.0 プロゞェクトの䜜成 ............................................................................................- 9 -
2.2
Web ペヌゞの䜜成 ......................................................................................................- 17 -
2.3
Web ペヌゞぞの Dojo レむアりト・りィゞェットの远加......................................................- 19 -
2.4
Dojo デヌタ・グリッドの䜜成 ..........................................................................................- 25 -
2.4.1
JSON ファむルの確認............................................................................................- 25 -
2.4.2
デヌタ・グリッドの䜜成 ............................................................................................- 30 -
2.5
カスタム Dojo レむアりト・りィゞェットの䜜成 ...................................................................- 40 -
2.6
カスタム Dojo りィゞェットの Web ペヌゞぞの远加 ........................................................- 55 -
2.7
Dojo アプリケヌションのテスト .......................................................................................- 62 -
デヌタ・アクセス局の䜜成 ...................................................................................................- 67 3.1
JPA1.0, EJB3,0 プロゞェクトの䜜成..............................................................................- 67 -
3.2
JPA ゚ンティティヌの䜜成 ............................................................................................- 71 -
3.2.1
Movie ゚ンティティヌの䜜成 ..................................................................................- 72 -
3.2.2
Feedback ゚ンティティヌの䜜成 ............................................................................- 78 -
3.2.3
゚ンティティヌ間の関連䜜成 ..................................................................................- 80 -
3.3
3.3.1
デヌタベヌス接続の䜜成 .......................................................................................- 90 -
3.3.2
テヌブルの生成.....................................................................................................- 92 -
3.3.3
JDBC デプロむメントのプロゞェクト構成 ..................................................................- 95 -
3.4
JPA マネヌゞャヌBean の䜜成 ..................................................................................- 100 -
3.4.1
セッション Bean の䜜成........................................................................................- 100 -
3.4.2
JPA 管理メ゜ッドの EJB ぞの远加 ........................................................................- 102 -
3.4.3
JPA 管理メ゜ッドのプロモヌト ...............................................................................- 106 -
3.5
4
JPA ゚ンティティヌからテヌブルの䜜成 ........................................................................- 90 -
デヌタ・アクセス局の動䜜確認 .................................................................................... - 117 -
3.5.1
Universal Test Client を䜿甚したデヌタの远加 .................................................... - 118 -
3.5.2
デヌタ・゜ヌス・゚クスプロヌラヌ・ビュヌを䜿甚したデヌタの確認 ..........................- 122 -
ビゞネス・ロゞック局の䜜成 ...............................................................................................- 125 4.1
EJB3.0 プロゞェクトの䜜成 .........................................................................................- 125 -
© 2010 IBM Corporation
-2-
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
5
6
4.2
ビゞネス・モデルの䜜成 ..............................................................................................- 128 -
4.3
セッション Bean の䜜成 ..............................................................................................- 133 -
Web UI 局ずビゞネス・ロゞック局の接続 ............................................................................- 139 5.1
RPC アダプタヌ・サヌビスの䜜成 ...............................................................................- 140 -
5.2
Web ペヌゞの修正 ....................................................................................................- 145 -
5.2.1
ShowMovies ロヌド時の振る舞いの倉曎 .............................................................- 145 -
5.2.2
feedbackDialog の submit 時の振る舞いの倉曎 ..................................................- 148 -
5.2.3
DataGrid ぞのオンマりス・オヌバヌ時の振る舞いの倉曎......................................- 151 -
アプリケヌションのデバッグ・テスト.....................................................................................- 162 6.1
Firebug 統合によるデバッグ .......................................................................................- 162 -
6.2
コヌド・カバレッゞによる網矅性の確認 ........................................................................- 170 -
© 2010 IBM Corporation
-3-
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
1
はじめに
1.1
抂芁
本 資 料 は 、Web2.0 ア プ リ ケ ヌ シ ョ ン 、 J2EE ア プ リ ケ ヌ シ ョ ン 開 発 者 を 察 象 に 、 IBM Rational
Application Developer for WebSphere Software V8.0 (以䞋 RAD) を䜿甚しお、シンプルな 3 局構
造の J2EE アプリケヌションを開発する流れをハンズオン圢匏で説明したす。たた、開発の流れの䞭で、
RAD の機胜の掻甚方法、および、メリットを説明したす。すべおを終了するには玄 4 時間かかりたす。
3 局構造ずは、䞀般的な Web システムで広く採甚されおいる「Web UI」、「ビゞネス・ロゞック」、「デヌタ・
アクセス」局を指したす。本資料では、各局の実装フレヌムワヌクずしお以䞋に瀺す技術を採甚したす。
å±€
実装フレヌムワヌク
実装フレヌムワヌク
Web UI
JSP/Servlet V2.5
Dojo V1.4.1
ビゞネス・
ビゞネス・ロゞック
EJB V3.0
デヌタ・
デヌタ・アクセス
EJB V3.0
JPA V1.0
Derby V10.5
本資料は、䞊蚘構造を持぀アプリケヌションを、以䞋の流れで開発する手順を瀺したす。
1.
Web UI 局の䜜成 Web UI 開発者向け。2 章参照。
2.
デヌタ・アクセス局の䜜成 デヌタ・アクセス開発者向け。3 章参照。
3.
ビゞネス・ロゞック局の䜜成 ビゞネス・ロゞック開発者向け。4 章参照。
4.
Web UI 局ずビゞネス・ロゞックの接続 Web UI 開発者向け。5 章参照。
5.
アプリケヌションのデバッグ、テスト 各局の開発者、テスタヌ向け。6 章参照。
© 2010 IBM Corporation
-4-
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
1.2
開発の
開発の流れず関連
れず関連する
関連する RAD の機胜
開発の流れの䞭で、掻甚する RAD の機胜ず、機胜によりできるこずを以䞋に瀺したす。
「2. Web UI 局の䜜成」で掻甚する機胜
掻甚する
掻甚する機胜
する機胜
この機胜
この機胜によりできるこず
機胜によりできるこず
Dojo Toolkit
リッチな UI を持぀ Dojo Web アプリケヌション開発を迅速か぀
容易にしたす。
ペヌゞ・
ペヌゞ・デザむナヌ
WYSIWYG(What You See Is What You Get) な UI 開発を
実珟したす。
Dojo カスタム・
カスタム・りィゞェット
再利甚可胜な UI 郚品たずえば、耇数の画面で䜿甚されるショ
ッピング・カヌトなどの開発、利甚を迅速か぀容易にしたす。
JSON ゚ディタヌ
フォヌマット、および、匷調/色づけ衚瀺により JSON デヌタ・
フォヌマットの構造理解を容易にしたす。たた、実行時のため
にデヌタの圧瞮を行えたす。
Ajax テスト・
テスト・サヌバヌ
軜量なサヌバヌにより、Ajax アプリケヌションの Web UI 局に
おけるテストを迅速にしたす。
「3. デヌタ・アクセス局の䜜成」で掻甚する機胜
掻甚する
掻甚する機胜
する機胜
この機胜
この機胜によりできるこず
機胜によりできるこず
゚ンティティヌ、
゚ンティティヌ 、 および、
および 、 管
JPA の゚ンティティヌや、゚ンティティヌを管理するための
理メ゜ッド䜜成
メ゜ッド䜜成りィザヌド
䜜成りィザヌド
メ゜ッドを自動生成し、開発を迅速か぀容易にしたす。
トップダりン・
トップダりン・マッピング
JPA ゚ンティティヌからデヌタベヌスのテヌブルを
自動生成したす。
Universal Test Client
ロヌカル、たたは、リモヌト・サヌバヌ䞊の EJB や Java オブゞ
ェクトのメ゜ッド、Web サヌビスなどをテストするこずができたす。
デヌタ・
デヌタ・ ゜ヌス・
゜ヌス・ ゚クスプロヌ
デヌタベヌス接続の管理、接続されたデヌタ・オブゞェクトの
ラヌ
ブラりズ、倉曎を RAD 䞊から行えたす。
「4. ビゞネス・ロゞック局の䜜成」で掻甚する機胜
掻甚する
掻甚する機胜
する機胜
この機胜
この機胜によりできるこず
機胜によりできるこず
EJB 䜜成りィザヌド
䜜成りィザヌド
EJB を自動生成し、開発を迅速か぀容易にしたす。
© 2010 IBM Corporation
-5-
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
「5. Web UI 局ずビゞネス・ロゞックの接続」で掻甚する機胜
掻甚する
掻甚する機胜
する機胜
この機胜
この機胜によりできるこず
機胜によりできるこず
RPC アダプタヌ・
アダプタヌ・サヌビス
サヌバヌ・サむド Java オブゞェクトず JSON の倉換を行い、
サヌバヌ・サむド Java ず Ajax アプリケヌションの接続を迅速か
぀容易にしたす。
「6. アプリケヌションのデバックずテスト」で掻甚する機胜
掻甚する
掻甚する機胜
する機胜
この機胜
この機胜によりできるこず
機胜によりできるこず
Firebug 統合
JavaScript デバッガヌ”Firebug”ずの統合により、
JavaScript の問題刀別を容易にしたす。
コヌド・
コヌド・カバレッゞ
アプリケヌションの品質を怜蚌する䞊での指暙ずなるカバレッゞ
の確認、および、実行されおいない゜ヌス・コヌドの行やメ゜ッド
を怜出したす。
© 2010 IBM Corporation
-6-
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
開発察象の
開発察象のアプリケヌション
1.3
開発するアプリケヌションは、RAD チュヌトリアル(*) ず同じ「My Movie Web Application」です。このア
プリケヌションは、映画デヌタを衚瀺する Web ペヌゞで構成されおおり、映画に関する評䟡およびコメ
ントを行うこずができたす。アプリケヌションの画面むメヌゞを以䞋に瀺したす。
利甚者は、「My Movie Web Application」にアクセスするず、巊セクションにお映画の「タむトル」「監督」
「圹者」「説明」を䞀芧衚で確認できたす。たた、衚の䞊にカヌ゜ルを合わせるず、各映画に察しお投皿さ
れたコメントを確認するこずができたす。
右セクションでは、投皿された評䟡およびコメントのすべおを確認できたす。
たた、利甚者は映画に評䟡、および、コメントを投皿するこずができたす。投皿するには、巊セクション内
の評䟡したい映画の行の「Rate and Comment!」列をクリックしたす。するず、「Rate and Comment!」ダ
むアログが衚瀺され、5 段階評䟡ずコメントを登録するこずができたす。
2 章たでで䜜成するのはこのようなアプリケヌションです。
*チュヌトリアル: Dojo を䜿甚した Web 2.0 アプリケヌションの䜜成
http://publib.boulder.ibm.com/infocenter/radhelp/v8/index.jsp?topic=/com.ibm.rad.samptut.doc/tu
torials/web/topics/dojo_abstract.html
3 章以降は、このアプリケヌションを機胜拡匵したす。拡匵するのは以䞋の 2 箇所になりたす。
・
衚の䞊にカヌ゜ルを合わせるず、各映画に察しお投皿された評䟡の履歎ずコメントに加え、評
䟡の平均点を確認できるようにしたす。
・
右セクションでは、最近投皿された評䟡およびコメントを新しい順に最倧 5 件衚瀺するようにし
たす。
© 2010 IBM Corporation
-7-
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
前提
1.4
以䞋の項目を理解しおいるず、本資料の理解がより深たりたす。
Java EE 5 および Java プログラミング
EJB V3.0 の抂念
JPA V1.0 の抂念
JavaScript、および、Dojo プログラミング
たた、本資料のハンズオンを実斜するためには、以䞋のツヌルおよびコンポヌネントがむンストヌルされ
おいる必芁がありたす。
Rational Application Developer for WebSphere Software V8.0
(Rational Application Developer for Standard Edition V8.0 ではコヌド・カバレッゞの機胜
および EJB/JPA クラスの UML 可芖化が利甚できたせん)
WebSphere Application Server Test Environment V7.0
Feature Pack for Web2.0
Mozilla Firefox 3.5 以䞊
© 2010 IBM Corporation
-8-
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
2
Web UI 局の䜜成
この挔習では、「My Movie Web Application」の Web UI 局を䜜成する手順を瀺したす。挔習にはおお
よそ 90 分を芁したす。
なお、本章の内容は、「チュヌトリアル: Dojo を䜿甚した Web 2.0 アプリケヌションの䜜成」ず同じです。
チュヌトリアルを既に実斜しおいる方は、3 章に進んでください。
2.1
Web2.0 プロゞェクトの
プロゞェクトの䜜成
この挔習では、特定のプロゞェクト・ファセットを䜿甚可胜にしお、Web 2.0 アプリケヌション開発甚に構
成された Web プロゞェクトを䜜成する方法に぀いお孊習したす。
Web 2.0 アプリケヌション開発甚に構成された Web プロゞェクトを䜜成するには、以䞋のようにした
す。
1. メニュヌ・バヌから「ファむル」 > 「新芏」 > 「動的 Web プロゞェクト」を遞択したす。
© 2010 IBM Corporation
-9-
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
2. 「新芏動的 Web プロゞェクト」ダむアログが開きたす。
3. 「プロゞェクト名」フィヌルドに「MyMovieWEB」ず入力したす。
4. 「タヌゲット・ランタむム」でサヌバヌを「WebSphere Application Server 7.0」を遞択したす。
5. 「構成」セクションで、「倉曎」をクリックしお、Web 2.0 プロゞェクト・ファセットを䜿甚可胜にしたす。
「プロゞェクト・ファセット」りィンドりが開きたす。
6.
「Web 2.0」を展開し、以䞋のファセットを遞択し、「OK」をクリックしたす。
プロゞェクト・
プロゞェクト・ファセット
バヌゞョン
Dojo Toolkit
1.0
© 2010 IBM Corporation
- 10 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
サヌバヌ・
サヌバヌ・サむド・
サむド・テクノロゞヌ・
テクノロゞヌ・ファセット
サヌバヌ・サむド・テクノロゞヌ・ファセットを䜿甚可胜にするこずにより、WebSphere
Application Server Feature Pack for Web 2.0 の開発サポヌトおよびランタむム・サポヌ
トの䞡方に察応するよう Web プロゞェクトが構成されたす。すべおの必須 JAR ファ
むルがプロゞェクトの Java のビルド・パスおよびデプロむメント蚘述子に远加された
す。
Dojo Toolkit ファセット
Dojo Toolkit ファセットを䜿甚可胜にするこずにより、Dojo Web アプリケヌションの
開発甚に Web プロゞェクトが構成されたす。WebSphere Application Server Feature
Pack for Web 2.0 に付属の Dojo Toolkit には、オヌプン・゜ヌスの Dojo Toolkit、およ
び基本の Dojo Toolkit ぞの远加の IBM 拡匵 (ATOM (ATOM シンゞケヌション・フォヌ
マット) デヌタ・アクセス甚ラむブラリヌ、アナログ・ゲヌゞおよびバヌ・ゲヌゞ、お
よび SOAP Web サヌビスぞの簡易アクセスなど) が含たれたす。
プロゞェクト・
プロゞェクト・ファセットに぀いおさらに
ファセットに぀いおさらに孊習
に぀いおさらに孊習したい
孊習したい方
したい方に
プロゞェクト・ファセットは、特定の機胜が必芁な堎合に、プロゞェクトに远加できるその機胜の
ナニットです。プロゞェクト・ファセットをプロゞェクトに远加するず、そのプロゞェクトの特性に応じ
お、ネヌチャヌ、ビルダヌ、クラスパス・゚ントリヌ、およびリ゜ヌスをプロゞェクトに远加できた
す。Web 2.0 ファセットでは、Web 2.0 察応の Web アプリケヌションの特性が定矩された
す。たた、Web 2.0 ファセットでは、Web 2.0 プロゞェクトに適甚される芁件および制玄が指定
されたす。
© 2010 IBM Corporation
- 11 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
7. 「 EAR に プ ロ ã‚ž ェ ク ト を è¿œ 加 」 チ ェ ッ ク ・ ボ ッ ク ス を 遞 択 の 侊 、 「 EAR プ ロ ã‚ž ェ ク ト 名 」 に
「MyMovieEAR」ず入力し、「次ぞ」をクリックしたす。
8. りィザヌドの「Dojo プロゞェクト・セットアップ」ペヌゞが衚瀺されるたで「次ぞ」をクリックしたす。
9. 「Dojo プロゞェクト・セットアップ」では、デフォルトでは、IBM でサポヌトされる最新の Dojo が
Web プロゞェクトにコピヌされる蚭定になっおいたす。「これらのセットアップ・オプションを倉曎」を
クリックしたす。「Dojo プロゞェクト・セットアップのオプション」りィザヌドが開きたす。
「Dojo プロゞェクト・
プロゞェクト・セットアップの
セットアップのオプション」
オプション」りィザヌド
このりィザヌドは、Web プロゞェクトでの Dojo Toolkit の䜿甚方法を決定する際に圹立
ちたす。
プロゞェクトでの Dojo のセットアップには、以䞋の 3 ぀のオプションがありたす。
Dojo をこのプロゞェクト
をこのプロゞェクトに
プロゞェクトにコピヌしたす
コピヌしたす。
したす。Dojo はそこからデプロむ
はそこからデプロむされた
デプロむされた
す。
Dojo Toolkit を Web プロゞェクト内に含めたす。Dojo フォルダヌの名前を指定で
© 2010 IBM Corporation
- 12 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
きたす。たた、ランタむムに付属のデフォルトの Dojo ディストリビュヌションを
䜿甚するか、それずもご䜿甚のワヌクスペヌスたたはファむル・システム内の Dojo
ディストリビュヌションを䜿甚するかを指定できたす。
Dojo はワヌクスペヌス内
ワヌクスペヌス内のプロゞェクトにあり
プロゞェクトにあり、
にあり、そこからデプロむ
そこからデプロむされたす
デプロむされたす。
されたす
ワヌクスペヌス内の別のプロゞェクトにある Dojo のルヌト・フォルダヌを参照で
きたす。 Dojo Toolkit はご䜿甚のプロゞェクトにコピヌされないこずに泚意しおく
ださい。これは、Toolkit を含むプロゞェクトからデプロむされたす。
Dojo は、リモヌト偎
リモヌト偎にデプロむされおいるか
デプロむされおいるか、
されおいるか、公開 CDN 䞊にありたす。
にありたす。
リモヌト・ロケヌションにある Dojo Toolkit を遞択できたす。Dojo Toolkit ゜ヌスのリモヌ
ト・ロケヌションを以䞋のように指定できたす。
* パブリック CDN: 䞀般に公開されおいるコンテンツ・デリバリヌ・ネットワヌクの
URL を入力できたす。コンテンツ・デリバリヌ・ネットワヌクは、オヌプン・゜ヌス
JavaScript ラむブラリヌに、地理的に分散されたホスティングを提䟛したす。ブラりザ
ヌは、Web アプリケヌションで URL を解決するず、最も近くにある䜿甚可胜なサヌ
バヌから自動的にファむルをダりンロヌドしたす。
* リモヌト URI: Dojo のルヌト・フォルダヌを参照するリモヌト・ロケヌショ
ンの URL を入力できたす。
「察応する Dojo」セクションでは、ご䜿甚のリモヌト Dojo Toolkit に最適の Dojo ゜ヌ
ス・ディストリビュヌションを遞択できたす。これにより、コンテンツ・アシストずいったツヌル
が提䟛されたす。本補品に付属のデフォルトの Dojo 1.3.2 たたは 1.4.1 を遞択するか、
ご䜿甚のワヌクスペヌスたたはファむル・システムにある Dojo フォルダヌを参照できた
す。
© 2010 IBM Corporation
- 13 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
10. このチュヌトリアルでは、Dojo Toolkit を Web プロゞェクト内に含めたす。「Dojo をこのプロゞェク
トにコピヌしたす。Dojo はそこからデプロむされたす。」ラゞオ・ボタンを遞択したす。
11. 「次ぞ」ボタンをクリックし、デプロむメントのセットアップ・オプションを衚瀺したす。
12. 「Dojo」セクションの「提䟛枈み」リストで「Dojo Toolkit SDK 1.4.1」を遞択したす。
© 2010 IBM Corporation
- 14 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
13. 「終了」をクリックし、「Dojo プロゞェクト・セットアップのオプション」りィザヌドを終了したす。
14. 「終了」をクリックし、Web 2.0 察応の Web プロゞェクトを䜜成したす。
Web プ ロ ã‚ž ェ ク ト MyMovieWEB が 䜜 成 さ れ た す 。 フ ァ セ ッ ト を 有 効 に し た Dojo Toolkit が
WebContent/dojo フォルダヌにむンポヌトされたす。
© 2010 IBM Corporation
- 15 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
挔習の
挔習のチェックポむント
Web 2.0 察応の Web プロゞェクトを䜜成したした。
たずめ
この挔習では以䞋のこずを孊習したした。
Web 2.0 察応の Web プロゞェクトの䜜成方法。
Web 2.0 アプリケヌション開発甚のプロゞェクト・ファセ
ットのカスタマむズ方法。
WebSphere Application Server Feature Pack for
Web 2.0 により䜿甚可胜になる Web 2.0 プロゞェクト・
ファセットに぀いお。
Dojo 察応の Web プロゞェクトのセットアップ・オ
プションの倉曎方法。
© 2010 IBM Corporation
- 16 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
Web ペヌゞの
ペヌゞの䜜成
2.2
この挔習では、Web ペヌゞの䜜成方法に぀いお孊習したす。
ShowMovies Web ペヌゞを䜜成するには、以䞋のようにしたす。
1. 「゚ンタヌプラむズ・゚クスプロヌラヌ」ビュヌで、「MyMovieWEB」を展開したす。
2. 「WebContent」を右クリックし、「新芏」 > 「Web Page」ず遞択したす。 「新芏 Web ペヌゞ」りィザ
ヌドが開きたす。
3. 「ファむル名」フィヌルドに「ShowMovies」ず入力したす。
4. 「テンプレヌト」リストで、「Basic Templates」 > 「HTML/XHTML」ずクリックし、「終了」をクリックした
す。
ShowMovies.html が䜜成され、゚ディタヌ内に開きたす。
© 2010 IBM Corporation
- 17 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
挔習の
挔習のチェックポむント
Dojo りィゞェットを含める HTML Web ペヌゞを䜜成したし
た。
© 2010 IBM Corporation
- 18 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
2.3
Web ペヌゞぞの
ペヌゞぞの Dojo レむアりト・
レむアりト・りィゞェットの
りィゞェットの远加
こ の 挔 習 で は 、 Border Container ã‚Š ィ ã‚ž ェ ッ ト を ペ ヌ ã‚ž に è¿œ 加 す る こ ず に よ り 、 My Movie Web
Application の Web クラむアント・むンタヌフェヌスの䜜成を開始したす。この挔習は、Web アプリケヌ
ション䜜成甚のさたざたな Dojo ツヌルを調べる機䌚ずもなりたす。
1. 「Web」パヌスペクティブに切り替えたす。
2. ShowMovies.html を閉じ おし たった 堎合、「 ゚ンタヌプラむ ズ・ ゚クスプロヌラヌ」ビュヌで、
「MyMovieWEB」 > 「WebContent」を展開し、ShowMovies.html をダブル・クリックしたす。ペヌ
ゞ・デザむナヌでペヌゞが開きたす。
ペヌゞ・
ペヌゞ・デザむナヌ
ペヌゞ・デザむナヌには、Web アプリケヌションの開発に圹
立぀、4 ぀の䟿利なペむンが甚意されおいたす。
デザむン
「デザむン」ペむンはビゞュアル線集機胜を完備した
WYSIWYG 環境です。「パレット」および「゚ンタヌプラむズ・
゚クスプロヌラヌ」ビュヌからのドラッグ・アンド・ドロップも可胜
です。
゜ヌス
「゜ヌス」ペむンでは、゜ヌス・コヌドずマヌクアップを盎接凊理
できたす。
分割
「分割」ペむンは、2 ぀以䞊のペむンを 1 ぀の分割画面ビュ
ヌに結合したす。デフォルトは、「蚭蚈」ペむンず「゜ヌス」ペむ
ンでの分割です。分割画面の 1 ぀の郚分で加えた倉曎は、
分割画面のもう䞀方の郚分に即座に衚瀺されたす。画面は氎
平たたは垂盎に分割できたす。
プレビュヌ
「プレビュヌ」ペむンは、珟行ペヌゞを倖郚 Web ブラりザヌ
で衚瀺した堎合の予想される倖芳を瀺す、読み取り専甚のビ
ュヌです。Firefox たたは Internet Explorer ではペヌゞが
どのように衚瀺されるかを確認できたす。
3. Page Designer で「デザむン」タブを遞択したす。
© 2010 IBM Corporation
- 19 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
4. 「パレット」で「Dojo レむアりト・りィゞェット」ドロワヌをクリックしたす。
パレット
Dojo 察応の Web プロゞェクトで䜜業する堎合、「パレット」
にはドロワヌ別に線成されたさたざたな Dojo りィゞェットが
含たれおいたす。これらのりィゞェットを Web ペヌゞにドラッ
グ・アンド・ドロップできたす。りィゞェットの䞊にカヌ゜ルを移
動するず、各りィゞェットの説明を衚瀺できたす。
「パレット」ビュヌが開いおいない堎合は、「りィンドり」 > 「ビ
ュヌの衚瀺」 > 「パレット」を遞択したす。
5. 「BorderContainer」りィゞェットを遞択しお、ペヌゞにドラッグしたす。 「Insert Border Container」
りィンドりが開きたす。このりィンドりでは、「Headline」ず「Sidebar」ずいう 2 ぀の蚭蚈モヌドを遞択
できたす。远加する領域を遞択するず、それに応じお BorderContainer が Web ペヌゞにレンダ
リングされる様子を瀺すプレビュヌが衚瀺されたす。
6. 「Top」領域を遞択し、「OK」をクリックしたす。BorderContainer りィゞェットが Web ペヌゞに挿入さ
れたす。
© 2010 IBM Corporation
- 20 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
7. 「プロパティヌ」ビュヌを䜿甚しお、BorderContainer りィゞェットたたは他のレむアりト・りィゞェット
のプロパティヌを線集できたす。「デザむン」ペむンで「BorderContainer」を遞択しおから「プロパテ
ィヌ」ビュヌを開くず、線集可胜なさたざたなプロパティヌが衚瀺されたす。
「プロパティヌ」ビュヌが開いおいない堎合は、「りィンドり」 >
「ビュヌの衚瀺」 > 「プロパティヌ」を遞択したす。
8. 「BorderContainer」タブの「Properties」フィヌルドに、height: 100%; width: 100% ず入力したす。
9. BorderContainer ã‚Š ィ ã‚ž ェ ッ ト に 別 の 領 域 を è¿œ 加 す る に は 、 「 BorderContainer 」 タ ブ の 例 の
「Region」タブをクリックし、「远加」をクリックしたす。
10. 䜜成されたこの領域の「領域」セルをクリックしたす。
11. ドロップダりン・リストから「center」の倀を遞択したす。 領域がコンテナヌの䞭倮に䜍眮調敎された
す。
12. 同様に、領域を远加し、ドロップダりン・リストから「right」を遞択したす。領域がコンテナヌの䞭倮に
䜍眮調敎されたす。
© 2010 IBM Corporation
- 21 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
13. 「 デザむ ン」 ペむ ンで BorderContainer の䞊郚領域を 遞択し たす。「 プロパティ ヌ 」 ビュヌの
「BorderContainer」タブの䞋に「ContentPane」タブが衚瀺されたす。
14. 「Properties」フィヌルドの隣の「参照」ボタンをクリックしたす。 「新芏スタむル」ダむアログが開きた
す。
15. 巊偎のペむンで「テキスト・レむアりト」を遞択したす。
16. 右偎のペむンの「氎平方向の䜍眮合わせ」グルヌプで「䞭倮」ボタンを遞択し、「OK」をクリックした
す。
© 2010 IBM Corporation
- 22 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
17. 「デザむン」ペむンで BorderContainer の䞊郚領域を遞択し、「My Movie Web Application! 」ず
入力したす。
18. ペヌゞを保存したす。ツヌル・バヌの「保存」アむコンをクリックしたす。
Dojo Toolkit に぀いおさらに孊習
に぀いおさらに孊習する
孊習する
Dojo Toolkit は、匷力か぀柔軟なモゞュラヌ AJAX ゜フトり
ェア開発キットです。これは 3 ぀の䞻芁な局に分かれおいた
す。
Dojo Core - AJAX 開発に必芁なすべおの䞻芁機胜に
加え、他のツヌルキットにはない倚数の機胜を備えおいた
す。
Dijit - AJAX アプリケヌションの開発時に䜿甚できる、察
話性に富んだ、高品質なりィゞェットずテヌマのセット。
DojoX (Dojo eXtensions) - AJAX アプリケヌションの
開発に圹立぀ものの、すべおのアプリケヌションに必芁ず
いうわけではないりィゞェットず API を含めるためのモゞ
ュヌル。
Dojo Toolkit の詳现に぀いおは、Dojo Toolkit Web サむトに
アクセスしおください。
© 2010 IBM Corporation
- 23 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
挔習の
挔習のチェックポむント
Dojo クラむアント甚の Web ペヌゞのコヌドを䜜成したした。
たずめ
この挔習では以䞋のこずを孊習したした。
© 2010 IBM Corporation
Web ペヌゞで Dojo 開発を可胜にする方法。
Dojo りィゞェットを Web ペヌゞに远加する方法。
Dojo Toolkit に぀いお。
- 24 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
Dojo デヌタ・
デヌタ・グリッドの
グリッドの䜜成
2.4
この挔習では、Web クラむアント・むンタヌフェヌスの䜜成を続行し、Dojo デヌタ・グリッド・りィゞェット
をペヌゞに远加し、グリッドにデヌタを取り蟌みたす。
デヌタぞの
デヌタぞのアクセス
ぞのアクセス
My Movie Web Application では、JSON デヌタ亀換圢匏を
䜿甚しおデヌタにアクセスしたす。デヌタにアクセスするに
は、2 ぀の方法がありたす。1 ぀は、デヌタを保持しおいる
JSON ファむルから盎接アクセスする方法、もう 1 ぀は EJB
や POJO ずいったサヌバヌ・サむド Java オブゞェクトから
デヌタを取埗し、JSON ファむルを出力するサヌバヌ・サむド
のサヌビスを探玢する方法です。
2.4 節では、JSON ファむルをデヌタ・゜ヌスずしお䜿甚した
す 。 あ ら か じ め 、 JSON フ ァ ã‚€ ル を ダ ã‚Š ン ロ ヌ ド (*) し 、
WebContent フォルダヌに保存しお眮いおください。
5.2 節では、RPC アダプタヌ・サヌビスを䜿甚しお、EJB から
デヌタを取埗したす。
* JSON ファむルのダりンロヌド URL
http://publib.boulder.ibm.com/infocenter/radhelp/v8/topic/com.ibm.rad.samptut.doc/tutorials/web/
resources/MovieList.json
2.4.1
JSON ファむルの
ファむルの確認
たず、アクセスする JSON ファむルを確認したす。
1. WebContent フォルダヌに保存した、MovieList.json を右クリックし、「アプリケヌションから開く」 ->
「JSON ゚ディタヌ」をクリックしたす。
JSON ゚ディタヌ
JSON ゚ディタヌは、JSON デヌタのフォヌマット、および、匷
調/色づけ衚瀺によりフォヌマットの構造理解を容易にした
す。たた、実行時のためにデヌタの圧瞮を行えたす。
© 2010 IBM Corporation
- 25 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
2. JSON ゚ディタヌが開きたす。
3. JSON デヌタ構造を理解しやすくするためにフォヌマットをしたす。JSON ゚ディタヌ内で右クリック
し、「Source」 -> 「フォヌマット」をクリックしたす。
4. JSON デヌタがフォヌマットされたす。
5. JSON ゚ディタヌの匷調・色づけ衚瀺を倉曎したす。メニュヌ・バヌより、「りィンドり」 -> 「蚭定」を
クリックしたす。
© 2010 IBM Corporation
- 26 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
6. 「蚭定」ダむアログで、「Web」 -> 「JSON」 -> 「゚ディタヌ」をクリックしたす。「察応する括匧の匷
調衚瀺」にチェックを入れ、匷調衚瀺する「色」の蚭定を自由に倉曎したす。
JSON ゚ディタヌの
゚ディタヌの蚭定
蚭定察応する
察応する括匧
する括匧の
括匧の匷調衚瀺
匷調衚瀺
「蚭定」ダむアログの「Web」 -> 「JSON」 -> 「゚ディタヌ」に
お、察応する括匧を匷調衚瀺する蚭定ができたす。「察応す
る括匧の匷調衚瀺」にチェックを入れるこずによっお、゚ディタ
ヌ䞊で遞択した括匧に察応する括匧が、指定した「色」で匷
調衚瀺されたす。
© 2010 IBM Corporation
- 27 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
7. 「蚭定」ダむアログで、「Web」 -> 「JSON」 -> 「゚ディタヌ」 -> 「構文の色の指定」をクリックした
す。構文の色、フォントを自由に倉曎したす。
JSON ゚ディタヌの
゚ディタヌの蚭定
蚭定構文の
構文の色の指定
指定
「蚭定」ダむアログの「Web」 -> 「JSON」 -> 「゚ディタヌ」
-> 「構文の色の指定」にお、構文の色、および、フォントを指
定できたす。
蚭定可胜な構文の芁玠は以䞋です。
名前倀に察するキヌずなる名前。
䟋{“actor” : ”Vivien Leigh”,

ストリング文字列型の倀。
䟋{“actor” : ”Vivien Leigh”,

© 2010 IBM Corporation
- 28 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
番号数倀型の倀。
䟋{“rating” : 3.0,

定数デヌタサむズを瞮小するために、繰り返される
名前を眮き換えた定数。
䟋”result” : [{“actor” : ”Vivien Leigh”,

を定数眮換するず、{r : [{a : “Vivien Legh”,

オブゞェクト順序付けされない名前ず倀のセット。
䟋{“actor” : ”Vivien Leigh” , ”title” : “Gone
with the Wind”}
配列順序付けされた倀のセット。
䟋{"result":
[{"actor":"Vivien Leigh","title":"Gone with
the Wind”},
{"actor": "Michael J Fox", "title":"Back To
The Future"}]
}
蚭定可胜なフォントは以䞋です。
倪字
むタリック
打ち消し線
äž‹ç·š
8. デヌタサむズを瞮小するために JSON ファむルを圧瞮したす。JSON ゚ディタヌ内で右クリックし、
「Source」 -> 「圧瞮」をクリックしたす。
9. JSON ファむルが圧瞮されたこずを確認し、保存したす。
© 2010 IBM Corporation
- 29 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
2.4.2
デヌタ・
デヌタ・グリッドの
グリッドの䜜成
次に、ムヌビヌ・オブゞェクトを衚瀺するグリッドを䜜成したす。
1. 「パレット」で「Dojo デヌタ・りィゞェット」ドロワヌをクリックしお開きたす。
2. 「DataGrid」を BorderContainer の「center」領域にドラッグ&ドロップしたす。DataGrid りィゞェッ
トにより、スプレッドシヌトのような衚が䜜成されたす。
3. 「Dojo DataGrid」ダむアログが開きたす。「グリッドを取り蟌む JavaScript の生成」チェック・ボック
スをクリアしたす。
4. 「列」セクションで、列の芋出しラベルず JavaScript プロパティヌを列ごずに指定したす。
a. 「芋出しラベル」フィヌルドに「タむトル」ず入力したす。
b. 「JavaScript プロパティヌ」フィヌルドに「title」ず入力したす。
c.
「远加」をクリックし、列芋出しラベル - JavaScript プロパティヌのペアを䞋の衚に远加
したす。
d. 前のステップを繰り返しお、以䞋の列芋出しラベル - JavaScript プロパティヌのペアを
远加したす。
芋出し
芋出しラベル
JavaScript プロパティヌ
タむトル
title
監督
director
圹者
actor
説明
description
© 2010 IBM Corporation
- 30 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
5. 「終了」をクリックしたす。「デザむン」ペむンで、DataGrid が远加されおいるこずを確認できたす。たた、
「゜ヌス」ペむンで、DataGrid の html マヌクアップが远加されおいるこずを確認できたす。field 属
性には JavaScript プロパティヌが取り蟌たれおおり、察応する芋出しラベルが列名ずしお蚭定さ
れおいたす。
© 2010 IBM Corporation
- 31 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
パレットからの
パレットからの Dojo りィゞェットの
りィゞェットのドラッグ&ドロップ
ドラッグ ドロップ
パレットから Dojo りィゞェットをドラッグ&ドロップするこずで、各りィゞェットの衚瀺
に必芁な蚭定が自動で生成されたす。具䜓的には、dojo.require ステヌトメント、
および、CSS リンクの蚭定が生成されたす。
dojo.require ステヌトメント
dojo.require ステヌトメントは、Web ペヌゞ䞊のりィゞェットに必芁なすべおの
Dojo パッケヌゞをロヌドしたす。
パ レ ッ ト か ら DataGrid を ド ラ ッ グ & ド ロ ッ プ す る こ ず で 、 DataGrid お よ び
ItemFileReadStore が dojo.require ステヌトメントずしお自動的に远加されお
いたす。
CSS リンク
CSS リンクは、りィゞェットが参照するスタむルシヌトぞのリンクです。パレットから
DataGrid をドラッグ&ドロップするこずで、CSS リンクも Web ペヌゞの゜ヌス・コ
ヌドに远加されたす。tundra.css ず dijit.css は、りィゞェットのルック・アンド・フ
ィヌルが䞀貫性のあるものずなるよう、Dojo に甚意されおいるデフォルトのテヌマ
の䞀郚です。
Grid.css ず tundraGrid.css は、DataGrid 衚瀺に固有のスタむルシヌトです。
6. これで、デヌタ・グリッドにデヌタを取り蟌めるようになりたした。次にコンテンツ・アシストを䜿甚しお
script タグを远加したす。ここに、DataGrid にデヌタを取り蟌む JavaScript コヌドを入れるこず
になりたす。手動でコンテンツ・アシストを起動するには、Ctrl + スペヌスを抌したす。
© 2010 IBM Corporation
- 32 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
コンテンツ・
コンテンツ・アシスト
コンテンツ・アシストは、タグたたは関数を挿入したり完成させ
たりする䞊で、あるいはコヌド行を完成させる䞊で圹立ちた
す。コンテンツ・アシストは、゜ヌス・ファむル内のカヌ゜ル䜍眮
をコンテキストずしお、完成圢の候補を提瀺したす。HTML、
JavaScript、および Dojo でコンテンツ・アシストを利甚でき
たす。コンテンツ・アシストでは、dojo テンプレヌトが䞀郚の
関数甚に甚意されおいたす。これにより、関数の正しい䜿甚
法を蚘述した䟿利なテンプレヌト・コヌドを゜ヌスに取り蟌めた
す。
7. 「゜ヌス」ペむンで、dojo.require ステヌトメントの入った </script> タグの䞋に、< ず入力したす。コ
ンテンツ・アシストが衚瀺されたす。
8. script を遞択したす。 script を遞択するず、次のコヌドが远加されたす。
<script type="text/javascript"> </script>
9. 空の script タグの内郚で dojo. ず入力し、CTRL + スペヌスを抌しおコンテンツ・アシストを起動
したす。dojo.ad..ず入力するに぀れお、衚瀺されるコンテンツ・アシストのオプションがフィルタヌ凊
理されおいきたす。
10. dojo.addOnLoad 関数を遞択したす。addOnLoad 関数には、デヌタ・グリッドに取り蟌むデヌタ
を取埗するコヌドが入りたす。
© 2010 IBM Corporation
- 33 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
addOnLoad 関数
addOnLoad は、ペヌゞロヌド埌に実行される関数を登録す
る、dojo 関数です。このシナリオではペヌゞロヌド埌にデヌ
タの読み蟌みずグリッドぞの衚瀺を行うような凊理を蚘述した
す。
11. 次に、サヌビス URL たたは JSON ファむルからデヌタを取埗する Ajax 関数を䜜成したす。
dojo xhrGet 関数を䜿甚したす。 xhrg ず入力し、dojo.xhrGet テンプレヌトを遞択したす。
コンテンツ・アシストにより、xhrGet 関数甚の dojo テンプレヌトが提䟛されたす。これを遞択するず、ツ
ヌルチップに瀺されるコヌドが゜ヌスに取り蟌たれたす。挿入されるコヌドは次のようなものです。
dojo.xhrGet({
url : "url",
handleAs : "text",
load : function(response, ioArgs) {
},
error : function(response, ioArgs) {
}
});
12. URL 属性を JSON ファむルぞの盞察パス「MovieList.json」に倉曎したす。
13. handleAs 属性を json に蚭定したす。
© 2010 IBM Corporation
- 34 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
url : "MovieList.json",
handleAs : "json",
14. デヌタが正垞にロヌドされるず、load プロパティヌ内で宣蚀された関数が実行されるこずになりたす。
load プロパティヌに以䞋のコヌドを远加したす。このコヌドは、デヌタ・グリッドにデヌタを取り蟌み
たす。
var newData = {
identifier : "title",
items : response.result
};
MovieList.json に定矩されたデヌタの属性名の
䞭で、ナニヌク ID にする属性を指定したす。
MovieList.json の䞭で本䜓ずなるデヌタ配列の
属性名を item 倉数に代入したす。
var dataStore = new dojo.data.ItemFileReadStore({
data : newData,
id : "dataStoreId"
});
var grid = dijit.byId("gridId");
Step 5 で远加した DataGrid の id 属性ずそろ
える必芁がありたす。
grid.setStore(dataStore);
䞊蚘のコヌドは、response に含たれるロヌドされたデヌタを dojo.data.ItemFileReadStore が必芁ず
する圢匏に倉曎し、圢匏倉曎埌のデヌタが入った ItemFileReadStore デヌタ・ストアを䜜成し、それ
からこれをデヌタ・グリッドに远加したす。倉数名の前に var キヌワヌドを远加するず、倉数の有効範囲
は load 関数に察しおロヌカルになりたす。
15. error 属性で宣蚀される関数には、次のコヌドを远加したす。
alert("An error occurred while invoking the service.");
16. ペヌゞを保存したす。ツヌル・バヌの「保存」アむコンをクリックしたす。
ShowMovies.html の゜ヌス・コヌドは次のようになるはずです。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<link rel="stylesheet" type="text/css"
© 2010 IBM Corporation
- 35 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
href="dojo/dijit/themes/dijit.css">
<link rel="stylesheet" type="text/css"
href="dojo/dijit/themes/tundra/tundra.css">
<title>ShowMovies</title>
<meta http-equiv="Content-Type" content="text/html;
charset=windows-31j">
<script type="text/javascript"
djconfig="isDebug: false, parseOnLoad: true"
src="dojo/dojo/dojo.js"></script>
<script type="text/javascript">
dojo.require("dijit.layout.BorderContainer");
dojo.require("dijit.layout.ContentPane");
dojo.require("dojox.grid.DataGrid");
dojo.require("dojo.data.ItemFileReadStore");
</script>
<script type="text/javascript">
dojo.addOnLoad(function() {
dojo.xhrGet({
url : "MovieList.json",
handleAs : "json",
load : function(response, ioArgs) {
var newData = {
identifier : "title",
items : response.result
};
var dataStore = new dojo.data.ItemFileReadStore({
data : newData,
id : "dataStoreId"
});
var grid = dijit.byId("gridId");
grid.setStore(dataStore);
},
error : function(response, ioArgs) {
alert("An error occurred while invoking the service.");
}
© 2010 IBM Corporation
- 36 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
});
});
</script>
<link rel="stylesheet" type="text/css" title="Style"
href="dojo/dojox/grid/resources/Grid.css">
<link rel="stylesheet" type="text/css" title="Style"
href="dojo/dojox/grid/resources/tundraGrid.css">
</head>
<body class="tundra">
<div dojoType="dijit.layout.BorderContainer" id="BorderContainer"
design="headline" style="height: 100%; width: 100%">
<div dojoType="dijit.layout.ContentPane" region="top" style="text-align:
center">My Movie Web Application!</div>
<div dojoType="dijit.layout.ContentPane" id="" title="" region="center">
<table id="gridId" dojotype="dojox.grid.DataGrid" autowidth="true"
rowselector="20px">
<thead>
<tr>
<th field="title">タむトル</th>
<th field="director">監督</th>
<th field="actor">圹者</th>
<th field="description">説明</th>
</tr>
</thead>
</table>
</div>
<div dojoType="dijit.layout.ContentPane" id="" title=""
region="right"></div>
</div>
</body>
</html>
ここたでで、ShowMovies.html のプレビュヌを確認しおみたす。ShowMovies.html を開き、「プレビュ
ヌ」タブをクリックしおください。グリッド䞊に映画デヌタが衚瀺されるこずを確認できたす
© 2010 IBM Corporation
- 37 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
泚意
泚意
Internet Explore でプレビュヌを確認する堎合、以䞋のようにコヌドを修正する必芁が
ありたす。
・ dojo.xhrGet 内に headers 属性の远加
url : "MovieList.json",
headers : {
"If-Modified-Since" : 0
},
handleAs : "json",

・ DataGrid テヌブルの ”autowidth”プロパティヌの陀去
<table id="gridId" dojotype="dojox.grid.DataGrid"
autowidth="true"
rowselector="20px">
© 2010 IBM Corporation
- 38 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
挔習の
挔習のチェックポむント
Dojo クラむアント甚の Web ペヌゞのコヌドを䜜成したした。
たずめ
この挔習では以䞋のこずを孊習したした。
デヌタ・グリッドを Web ペヌゞに远加する方法。
Dojo コヌドを玠早く䜜成するためにコンテンツ・アシスト
を䜿甚する方法。
© 2010 IBM Corporation
- 39 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
カスタム Dojo レむアりト・
レむアりト・りィゞェットの
りィゞェットの䜜成
2.5
この挔習では、ナヌザヌがムヌビヌの評䟡やコメント远加ができる、カスタム Dojo りィゞェットを䜜成し
たす。
Dojo りィゞェット
Dojo りィゞェットは 3 ぀のファむルで構成されおいたす。
HTML ファむル
JavaScript ファむル
CSS ファむル
「新芏 Dojo りィゞェット」りィザヌドでこれらの 3 ぀のファむ
ル が 䜜 成 さ れ た す 。 そ れ か ら 、 HTML テ ン プ レ ヌ ト ず
JavaScript ファむルを線集したす。
1. 「゚ンタヌプラむズ・゚クスプロヌラヌ」ビュヌで dojo フォルダヌを右クリックし、「新芏」 > 「Dojo
りィゞェット」を遞択したす。 「新芏 Dojo りィゞェット」りィザヌドが衚瀺されたす。
© 2010 IBM Corporation
- 40 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
2. 「りィゞェット名」フィヌルドに RateAndComment ず入力したす。 りィゞェットに関連する HTML
テンプレヌトずスタむルシヌトのパスが自動的に入力されたす。
3. 「終了」をクリックしたす。 りィゞェットの JavaScript ゜ヌス・ファむルが䜜成され、゚ディタヌで開か
れたす。
© 2010 IBM Corporation
- 41 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
泚意
泚意
RateAndComment.js の 2 行目が文字化けしおいる堎合、保管ができたせん。
この行を削陀しおください。
カスタム・
カスタム・りィゞェットに
りィゞェットに関係する
関係するファむル
するファむルの
ファむルの配眮堎所
「新芏 Dojo りィゞェット」りィザヌドで生成されるファむルは、デ
フォルトでは、WebContent/dojo 配䞋のモゞュヌル名フォル
ダヌの䞭に配眮されたす。
この挔習では、WebContent/dojo/myDojo です。
4. 「゚ンタヌプラむズ・゚クスプロヌラヌ」ビュヌで、「MyMovieWEB」 -> 「WebContent」 -> 「dojo」
-> 「myDojo」 -> 「template」 -> 「RateAndComment.html」 ファむルをダブル・クリックしたす。
HTML ファむルが゚ディタヌで開きたす。
5. 「゜ヌス」タブをクリックしお、HTML マヌクアップを衚瀺したす。
6. 「パレット」で「Dojo アプリケヌション・りィゞェット」ドロワヌを展開したす。
© 2010 IBM Corporation
- 42 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
7. 「Dialog」りィゞェットを div タグの䞭にドラッグ・アンド・ドロップしたす。
dijit.Dialog
Dojo dijit.Dialog はモヌダル・ダむアログ・ボックスであり、ダ
むアログの衚瀺䞭は芪画面ぞのアクセスをブロックし、画面を
がかし衚瀺したす。
8. Dojo ダむアログ・りィゞェットの接続ポむントずタむトルを、以䞋のように远加したす。
<div dojoType="dijit.Dialog" id="Dialog" dojoattachpoint="dialogbox"
title="Rate and Comment!"></div>
接続ポむント
接続ポむント(dojoattachpoint)
ポむント
接続ポむントにより、HTML ファむルで定矩された dojo りィゞ
ェットに JavaScript 倉数からアクセスできるようになりたす。
9. ダむアログの div 内でコンテンツ・アシストを䜿甚しお、評䟡ずコメントの機胜を远加したす。
a. Rate: < ず入力し、Ctrl + スペヌスを抌しおコンテンツ・アシストを起動したす。
b. コンテンツ・アシストから div を遞択したす。
c.
挿入された div の埌にカヌ゜ルを眮き、スペヌスを抌したす。
© 2010 IBM Corporation
- 43 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
d. コンテンツ・アシストを起動しお dojotype 属性を探し、これを遞択したす。
e. カヌ゜ルを匕甚笊の間に眮き、コンテンツ・アシストを起動したす。Dojo りィゞェットのリスト
が衚瀺されたす。
f.
dojox.form.Rating りィゞェットを探したす。りィゞェットの名前を入力しおいくに぀れお、コンテ
ンツ・アシストが衚瀺するリストが絞り蟌たれおいきたす。
g. div タグを線集したす。dojoattachpoint=”rating” ず远加したす。
h. numst ず入力し、コンテンツ・アシストを起動したす。「numstar」を遞択したす。
コンテンツ・
コンテンツ・アシスト
numstars は dojox.form.Rating の カ ス タ ム 属 性 で html
暙準ではありたせんが、コンテンツ・アシストから入力できた
す。
i.
numstars=”5”ずしたす。
Rate : <div dojotype="dojox.form.Rating" dojoattachpoint="rating"
numstars="5"></div>
© 2010 IBM Corporation
- 44 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
j.
以䞋のコヌドをコピヌしお、゚ディタヌの Dialog りィゞェット内の Rating りィゞェットの䞋に
貌り付けたす。
<br>
<br>
Comments : <div dojotype="dijit.form.Textarea" dojoattachpoint =
"comments" style="width: 60%;"></div>
<br>
<button dojotype="dijit.form.Button" dojoattachevent="onClick:
saveFeedback">Submit</button>
接続ポむント
接続ポむント(dojoattachevent)
ポむント
dojoattachevent により、むベント・ハンドラヌを登録できたす。
ここでは、ボタンのクリック時に RateAndComment りィゞェ
ットの saveFeedback 関数を呌び出すようにしたす。
TextArea りゞェットず
りゞェットず Button りィゞェット
TextArea りィゞェットは、コメントを入力するのに䜿甚された
す。たた、Button りィゞェットは、ナヌザヌが評䟡ずコメントを
送信するためのものです。
怜蚌
゚ディタヌではリアルタむム怜蚌がサポヌトされおいたす。無効な芁玠を曞く
ず、怜蚌が行われお譊告が出されたす。無効な芁玠の䞊にカヌ゜ルを移動する
ず、譊告の説明が衚瀺されたす。以䞋に、dojox.form.Rating dojo りィゞェット
に未定矩の属性を曞いた堎合の䟋を瀺したす。
10. 「パレット」で「Dojo アプリケヌション・りィゞェット」ドロワヌを展開したす。
© 2010 IBM Corporation
- 45 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
11. 「TitlePane」りィゞェットをダむアログの div の䞋にドラッグ・アンド・ドロップしたす。
TitlePane りィゞェット
TitlePane は、䞊郚にタむトルが瀺された、展開たたは省略衚
瀺可胜なペむンです。
12. TitlePane を次のように線集したす。
<div dojoType="dijit.TitlePane" id="TitlePane" title="History of Ratings
and Comments">
<ol id="feedbacklist"></ol>
</div>
コメントず評䟡の履歎が順序付きリストの䞭に保管されたす。珟圚、HTML テンプレヌトには以䞋の芁玠
があるはずです。
<div class="RateAndComment">
<div dojoType="dijit.Dialog" id="Dialog"
dojoattachpoint="dialogbox" title="Rate and Comment!">
Rate : <div dojotype="dojox.form.Rating"
dojoattachpoint="rating" numstars="5"></div>
<br>
<br>
Comments : <div dojotype="dijit.form.Textarea"
dojoattachpoint=="comments" style="width: 60%;"></div>
<br>
<button dojotype="dijit.form.Button"
dojoattachevent="onClick: saveFeedback">Submit</button>
</div>
© 2010 IBM Corporation
- 46 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
<div dojoType="dijit.TitlePane" id="TitlePane" title="History of
Ratings and Comments">
<ol id="feedbacklist"></ol>
</div>
</div>
13. カ ス タ ム ・ ã‚Š ィ ã‚ž ェ ッ ト の HTML テ ン プ レ ヌ ト が 䜜 成 で き た の で 、 カ ス タ ム ・ ã‚Š ィ ã‚ž ェ ッ ト の
JavaScript を線集したす。「゚ンタヌプラむズ・゚クスプロヌラヌ」ビュヌで、「MyMovieWeb」 ->
「WebContent」 -> 「dojo」 -> 「myDojo」 -> 「RateAndComment.js」ファむルをダブル・クリック
しお開きたす。
14. HTML テンプレヌトで䜿甚されおいる Dojo りィゞェットごずに dojo.require ステヌトメントを远加
したす。以䞋をコピヌしお、dojo.require("dijit._Templated") セクションの䞋に貌り付けたす。
dojo.require("dojox.form.Rating");
dojo.require("dojo.data.ItemFileWriteStore");
dojo.require("dijit.form.Textarea");
dojo.require("dijit.Dialog");
dojo.require("dijit.form.Button");
dojo.require("dijit.TitlePane");
dojo.require ステヌトメント
dojo.require ステヌトメントは、Java の import ステヌトメント
に䌌おいたす。
15. Dojo りィゞェットを HTML テンプレヌトの䞭で䜿甚するので、widgetsInTemplate 倉数を true
に蚭定したす。
// Set this to true if your widget contains other widgets
widgetsInTemplate : true,
16. 以䞋のコヌドをコピヌしお、widgetsInTemplate 倉数の䞋に貌り付けたす。
movieTitle : "",
rcStore : new dojo.data.ItemFileWriteStore({
data : {
items : []
}
}),
© 2010 IBM Corporation
- 47 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
movieTitle には、評䟡されるムヌビヌの名前が入れられたす。 rcStore は、ナヌザヌが評䟡ずコメント
のアクションの実行䞭に入力したデヌタを保管する、Dojo デヌタ・ストアです。この時点では、メモリヌ
䞊にコメントの履歎を保管するため、履歎保管甚の dojo オブゞェクトを䜜成したした。
17. 以䞋の関数をコピヌしお、コンストラクタヌ関数の埌に貌り付けたす。
getComment : function(){
return this.comments.attr('value');
},
getRating : function(){
return this.rating.attr('value');
},
setComment : function(value){
this.comments.attr("value", value);
},
setRating : function(value){
this.rating.attr("value", value);
},
これらの関数は、dojox.form.Rating りィゞェットず dijit.form.Textarea りィゞェットの倀の getter およ
び setter ずしお機胜したす。関数はそれぞれ、HTML テンプレヌトに蚭定されおいる各りィゞェットの
dojoattachpoint 倀を䜿甚しお、value 属性にアクセスしたす。
© 2010 IBM Corporation
- 48 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
18. 以䞋のコヌドをコピヌしお、getter および setter の埌に貌り付けたす。
showFeedbackTools : function(movieTitle){
this.movieTitle = movieTitle;
this.dialogbox.show();
},
showFeedbackTools 関数は、評䟡ずコメント甚のフォヌムを持぀ダむアログを衚瀺したす。movieTitle
は珟圚評䟡䞭のムヌビヌのタむトルです。dijit.Dialog.show()は dijit.Dialog りィゞェットの関数です。
dialogbox 属性は template html 䞊に定矩した dijit.Dialog の dojoattachpoint に指定した名前ず
䞀臎する必芁がありたす。
19. ダむアログの Submit ボタンを抌した時点でコメントず評䟡をりィゞェットのデヌタ・ストアに保管するず
いう機胜を実装した関数を、showFeedbackTools の埌に䜜成したす。これに saveFeedback ず
いう名前を付けたす。りィゞェットの HTML テンプレヌトにおいお、Submit ボタンの onClick むベ
ントの dojoattachevent 属性にこの関数名を蚭定したためです。
saveFeedback : function(){
},
e. 最初に、ナヌザヌがダむアログで蚭定した倀を取埗する必芁がありたす。前に䜜成した
getter 関数を䜿甚したす。関数の䞭で var userRating = this. ず入力したす。
f.
コンテンツ・アシストを䜿甚し、JavaScript ファむルの䞭で必芁なプロパティヌを探したす。
getRating() を遞択したす。
g. 同様に、以䞋のコヌドを䜿甚しお、コメント甚の倉数を蚭定したす。
var userComment = this.getComment();
h. 以䞋のコヌドを䜿甚しお、フィヌドバック・デヌタを保管したす。
this.rcStore.newItem({
title : this.movieTitle,
comment : userComment,
rating : userRating
});
© 2010 IBM Corporation
- 49 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
デヌタは rcStore に新しい項目ずしお保管されたす。これには、ダむアログが開いた時点であらかじめ
蚭定されるムヌビヌのタむトル、およびナヌザヌが蚭定する評䟡ずコメントが入れられたす。
次の i-j ステップでは、コメントの履歎を「衚瀺する」ロゞックを䜜成したす。
i.
投皿されたコメントず評䟡の履歎を保持するリストに、倀を远加したす。倀は、りィゞェット
の HTML テンプレヌトにあるタむトル・ペむンの内郚に蚭定された、ol HTML 芁玠の子
芁玠ずしお远加されたす。
dojo.create("<li>", {innerHTML : "<b>Title:</b> " + this.movieTitle + "
<b>Rating:</b>" + userRating + "<br> <b>Comments:</b> " + userComment},
"feedbacklist");
j.
倀をリセットしお、ダむアログを非衚瀺にしたす。以䞋のコヌドをコピヌしお、前のステップ
のコヌドの䞋に貌り付けたす。
this.dialogbox.hide();
this.setComment("");
this.setRating(0);
倀をリセットするずフィヌルドがクリアされるので、前の「評䟡ずコメント」アクションのフィヌルドの倀は、新
しい「評䟡ずコメント」アクションに匕き継がれたせん。ダむアログを非衚瀺にするこずで、ナヌザヌは匕き
続きデヌタ・グリッドの他のムヌビヌの評䟡を実斜できたす。
20. getCommentsByMovieTitle 関数をコピヌしお、saveFeedback 関数の䞋に貌り付けたす。この
関数は movieTitle をパラメヌタヌずしお受け取り、デヌタ・ストアに保管されおいる、そのムヌビヌ
に関しおなされたすべおのコメントが入った配列を返したす。
getCommentsByMovieTitle : function(movieTitle){
var comments = [];
var store = this.rcStore;
this.rcStore.fetch({
query : {title : movieTitle},
onComplete : function(items, request){
dojo.forEach(items, function(item){
comments.push(store.getValue(item,
"comment"));
});
}
});
return comments;
© 2010 IBM Corporation
- 50 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
},
この時点で、RateAndComment.js は次のようになるはずです。
dojo.provide("myDojo.RateAndComment");
// dojo.require the necessary dijit hierarchy
dojo.require("dijit._Widget");
dojo.require("dijit._Templated");
dojo.require("dojox.form.Rating");
dojo.require("dojo.data.ItemFileWriteStore");
dojo.require("dijit.form.Textarea");
dojo.require("dijit.Dialog");
dojo.require("dijit.form.Button");
dojo.require("dijit.TitlePane");
dojo.declare("myDojo.RateAndComment", [ dijit._Widget,
dijit._Templated ], {
// Path to the template
templateString : dojo.cache("myDojo",
"templates/RateAndComment.html"),
// Set this to true if your widget contains other widgets
widgetsInTemplate : true,
movieTitle : "",
rcStore : new dojo.data.ItemFileWriteStore({
data : {
items : []
}
}),
// Override this method to perform custom behavior during dijit
© 2010 IBM Corporation
- 51 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
// construction.
// Common operations for constructor:
// 1) Initialize non-primitive types (i.e. objects and arrays)
// 2) Add additional properties needed by succeeding lifecycle
methods
constructor : function() {
},
getComment : function() {
return this.comments.attr('value');
},
getRating : function() {
return this.rating.attr('value');
},
setComment : function(value) {
this.comments.attr("value", value);
},
setRating : function(value) {
this.rating.attr("value", value);
},
showFeedbackTools : function(movieTitle) {
this.movieTitle = movieTitle;
this.dialogbox.show();
},
saveFeedback : function() {
var userRating = this.getRating();
var userComment = this.getComment();
this.rcStore.newItem({
title : this.movieTitle,
comment : userComment,
rating : userRating
© 2010 IBM Corporation
- 52 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
});
dojo.create("<li>", {
innerHTML : "<b>Title:</b> " + this.movieTitle + "
<b>Rating:</b>"
+ userRating + "<br> <b>Comments:</b>
" + userComment
}, "feedbacklist");
this.dialogbox.hide();
this.setComment("");
this.setRating(0);
},
getCommentsByMovieTitle : function(movieTitle) {
var comments = [];
var store = this.rcStore;
this.rcStore.fetch({
query : {
title : movieTitle
},
onComplete : function(items, request) {
dojo.forEach(items, function(item) {
comments.push(store.getValue(item,
"comment"));
});
}
});
return comments;
},
// When this method is called, all variables inherited from
superclasses are
// 'mixed in'.
// Common operations for postMixInProperties
// 1) Modify or assign values for widget property variables defined
in the
© 2010 IBM Corporation
- 53 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
// template HTML file
postMixInProperties : function() {
}
});
挔習の
挔習のチェックポむント
これでカスタム Dojo りィゞェットを䜜成できたした。
たずめ
この挔習では以䞋のこずを孊習したした。
カスタム Dojo りィゞェットに合わせお HTML テンプレ
ヌトを倉曎する方法
カスタム Dojo りィゞェットに合わせお JavaScript ファ
むルを倉曎する方法
© 2010 IBM Corporation
- 54 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
カスタム Dojo りィゞェットの
りィゞェットの Web ペヌゞぞの
ペヌゞぞの远加
ぞの远加
2.6
この挔習では䜜成したカスタム Dojo りィゞェットを Web ペヌゞに挿入したす。
カスタム Dojo りィゞェットは䜜成埌、「パレット」の「その他の Dojo りィゞェット」ドロワヌに远加される
ため、りィゞェットを Web ペヌゞに远加しやすくなっおいたす。
1. 「゚ンタヌプラむズ・゚クスプロヌラヌ」ビュヌから、ShowMovies.html ファむルを開き、「デザむン」
タブをクリックしたす。
2. 「パレット」で「その他の Dojo りィゞェット」ドロワヌを展開したす。
3. 「RateAndComment」りィゞェットを「BorderContainer」の右偎領域にドラッグ・アンド・ドロップした
す。
4. 「゜ヌス」タブに切り替えお、ペヌゞ䞊方の他の dojo.require ステヌトメントがある付近に、次に瀺
す dojo.require() ステヌトメントを远加したす。 dojo.require() ステヌトメントは、埌ほど远加する
dijit.Tooltip りィゞェット甚です。
dojo.require("dijit.Tooltip");
© 2010 IBM Corporation
- 55 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
5. 次に瀺す css スタむルのむンポヌトを、dojo.require ステヌトメントの含たれる</script>タブの埌に
远加したす。
<style type="text/css">
@import "dojo/dojox/form/resources/Rating.css";
</style>
6. 次に瀺すコヌドを、addOnLoad 関数の含たれる</script> タグの埌に远加したす。
<script type="text/javascript">
function showComments(e){
var grid = dijit.byId("gridId");
var movieTitle =
grid.store.getValue(grid.getItem(e.rowIndex), "title");
var comments =
dijit.byId("RateAndComment").getCommentsByMovieTitle(movieTitle);
if(comments.length == 0){
dijit.showTooltip("No comments made!", e.cellNode);
}
else{
var list = "<b>Comments:</b><ul>";
for(i in comments){
list +="<li>" + comments[i] + "</li>";
}
list += "</ul>";
dijit.showTooltip( list , e.cellNode);
}
};
function hideComments(e){
dijit.hideTooltip(e.cellNode);
}
function showFeedbackDialog(e){
//IF A Click to rate!! cell was clicked
if(e.cellIndex == 4){
var grid = dijit.byId("gridId");
var movieTitle =
© 2010 IBM Corporation
- 56 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
grid.store.getValue(grid.getItem(e.rowIndex), "title");
var rcwidget = dijit.byId("RateAndComment");
rcwidget.showFeedbackTools(movieTitle);
}
}
function getContent(){
return "Click to rate!";
}
</script>
showComments 関数は、セル行の䞊にマりスを移動するたびに実行されたす。該圓する行のムヌビ
ヌ・タむトル、およびりィゞェットの getCommentsByMovieTitle を䜿甚するこずで、各りィゞェットでサブ
ミットされたコメントを取埗し、コメントを dijit.showTooltip が衚瀺するツヌルチップ内にリスト衚瀺したす。
hideComments 関数は、ナヌザヌがマりスを行の倖に移動した時点でツヌルチップを非衚瀺にしたす。
getContent 関 数 は 、 è¡š の 最 埌 の 列 に デ ヌ タ を 入 れ る た め に 䜿 甹 さ れ る ラ ベ ル を 戻 し た す 。
showFeedbackDialog は「Click to Rate!」ラベルの付いおいるセルをナヌザヌがクリックするたびに実
行されたす。この関数はカスタム・りィゞェットの showFeedbackTools を呌び出したす。これにより、ナ
ヌザヌがムヌビヌを評䟡したりコメントを付加したりするためのダむアログが衚瀺されたす。
7. 䞊蚘の関数をグリッドのむベント・ハンドラヌに远加したす。䞋蚘のように dojox.grid.DataGrid html
コヌドを線集したす。
<table id="gridId" dojotype="dojox.grid.DataGrid" autowidth="true"
onRowMouseOut="hideComments" onRowMouseOver="showComments"
onCellClick="showFeedbackDialog" rowselector="20px">
8. 次に瀺す列をグリッドの最終行<th field="description">説明</th>の次の行に远加したす。
getContent を䜿甚しお、その列に属する各セルにデヌタを取り蟌みたす。
<th get="getContent">Rate and Comment!</th>
9. ペヌゞを保存したす。ツヌル・バヌの「保存」アむコンをクリックしたす。
ShowMovies.html は、䞋蚘のようになっおいるはずです。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
© 2010 IBM Corporation
- 57 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
<link rel="stylesheet" type="text/css"
href="dojo/dijit/themes/dijit.css">
<link rel="stylesheet" type="text/css"
href="dojo/dijit/themes/tundra/tundra.css">
<title>ShowMovies</title>
<meta http-equiv="Content-Type" content="text/html;
charset=Windows-31J">
<script type="text/javascript"
djconfig="isDebug: false, parseOnLoad: true"
src="dojo/dojo/dojo.js"></script>
<script type="text/javascript">
dojo.require("dijit.layout.BorderContainer");
dojo.require("dijit.layout.ContentPane");
dojo.require("dojox.grid.DataGrid");
dojo.require("dojo.data.ItemFileReadStore");
dojo.require("myDojo.RateAndComment");
dojo.require("dijit.Tooltip");
</script>
<style type="text/css">
@import "dojo/dojox/form/resources/Rating.css";
</style>
<script type="text/javascript">
dojo.addOnLoad(function() {
dojo.xhrGet({
url : "MovieList.json",
handleAs : "json",
load : function(response, ioArgs) {
var newData = {
identifier : "title",
items : response.result
};
var dataStore = new
dojo.data.ItemFileReadStore({
data : newData,
id : "dataStoreId"
});
© 2010 IBM Corporation
- 58 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
var grid = dijit.byId("gridId");
grid.setStore(dataStore);
},
error : function(response, ioArgs) {
alert("An error occurred while invoking the
service.");
}
});
});
</script>
<script type="text/javascript">
function showComments(e){
var grid = dijit.byId("gridId");
var movieTitle =
grid.store.getValue(grid.getItem(e.rowIndex), "title");
var comments =
dijit.byId("RateAndComment").getCommentsByMovieTitle(movieTitle);
if(comments.length == 0){
dijit.showTooltip("No comments made!", e.cellNode);
}
else{
var list = "<b>Comments:</b><ul>";
for(i in comments){
list +="<li>" + comments[i] + "</li>";
}
list += "</ul>";
dijit.showTooltip( list , e.cellNode);
}
};
function hideComments(e){
dijit.hideTooltip(e.cellNode);
}
function showFeedbackDialog(e){
© 2010 IBM Corporation
- 59 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
//IF A Click to rate!! cell was clicked
if(e.cellIndex == 4){
var grid = dijit.byId("gridId");
var movieTitle =
grid.store.getValue(grid.getItem(e.rowIndex), "title");
var rcwidget = dijit.byId("RateAndComment");
rcwidget.showFeedbackTools(movieTitle);
}
}
function getContent(){
return "Click to rate!";
}
</script>
<link rel="stylesheet" type="text/css" title="Style"
href="dojo/dojox/grid/resources/Grid.css">
<link rel="stylesheet" type="text/css" title="Style"
href="dojo/dojox/grid/resources/tundraGrid.css">
</head>
<body class="tundra">
<div dojoType="dijit.layout.BorderContainer" id="BorderContainer"
design="headline" style="height: 100%; width: 100%">
<div dojoType="dijit.layout.ContentPane" region="top" style="text-align:
center">My Movie Web Application!</div>
<div dojoType="dijit.layout.ContentPane" id="" title="" region="center">
<table id="gridId" dojotype="dojox.grid.DataGrid" autowidth="true"
onRowMouseOut="hideComments" onRowMouseOver="showComments"
onCellClick="showFeedbackDialog" rowselector="20px">
<thead>
<tr>
<th field="title">タむトル</th>
<th field="director">監督</th>
<th field="actor">圹者</th>
<th field="description">説明</th>
<th get="getContent">Rate and Comment!</th>
© 2010 IBM Corporation
- 60 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
</tr>
</thead>
</table>
</div>
<div dojoType="dijit.layout.ContentPane" id="" title="" region="right">
<div dojoType="myDojo.RateAndComment" id="RateAndComment"></div>
</div>
</div>
</body>
</html>
挔習の
挔習のチェックポむント
これで、カスタム Dojo りィゞェットをペヌゞに远加できたし
た。
たずめ
この挔習では以䞋のこずを孊習したした。
パレットを䜿甚しお Web ペヌゞにカスタム・りィゞェット
を远加する方法
デヌタ・グリッドのむベント・ハンドラヌに関数を远加する
方法
© 2010 IBM Corporation
- 61 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
2.7
Dojo アプリケヌション
アプリケヌションの
ションのテスト
この挔習では、Web UI 局たで䜜成した My Movie Web Application をサヌバヌ䞊で実行し、プレビュ
ヌを確認したす。プレビュヌの確認には、AJAX テスト・サヌバヌずいう軜量サヌバヌを䜿甚したす。
1. ブラりザヌを Firefox に蚭定したす。メニュヌ・バヌから、「りィンドり」 -> 「Web ブラりザヌ」 ->
「Firefox」を蚭定したす。
泚意
泚意
Firefox がむンストヌルされおいない堎合、Firefox が衚瀺されたせん。
この堎合、手動で蚭定を行う必芁がありたす。手順は以䞋です。
1. Firefox をむンストヌルしたす。
2. メニュヌ・バヌより、「りィンドり」 -> 「蚭定」をクリックしたす。
3. 「䞀般」 -> 「Web ブラりザヌ」を遞択したす。
4. 「倖郚ブラりザヌを䜿甚」を遞択し、「新芏」をクリックしたす。
5. 「倖郚 Web ブラりザヌの線集」ダむアログが衚瀺されたす。以䞋を蚭定の
䞊、「OK」をクリックしたす。
蚭定項目
蚭定倀
名前
Firefox
ロケヌション
Firefox のむンストヌル・ディレクトリヌ¥firefox.exe
パラメヌタヌ
© 2010 IBM Corporation
- 62 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
6. 「適甚」をクリックの䞊、「OK」をクリックしたす。
© 2010 IBM Corporation
- 63 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
2. 「゚ンタヌプラむズ・゚クスプロヌラヌ」ビュヌで ShowMovies.html を右クリックし、「実行」 > 「サ
ヌバヌで実行」を遞択したす。「サヌバヌで実行」ダむアログが開きたす。
© 2010 IBM Corporation
- 64 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
3. 「サヌバヌで実行」ダむアログで、以䞋を蚭定し、「次ぞ」をクリックしたす。
蚭定項目
蚭定倀
サヌバヌの
サヌバヌの遞択方法
手動で新芏サヌバヌを定矩
サヌバヌの
サヌバヌのタむプを
タむプを遞択
IBM -> AJAX テスト・サヌバヌ
サヌバヌの
サヌバヌのホスト名
ホスト名
localhost
サヌバヌ名
サヌバヌ名
localhost の AJAX テスト・サヌバヌ
4. 「远加および削陀」ダむアログで、「MyMovieWEB」が远加されおいるこずを確認し、「終了」をクリック
したす。
5. ブラりザヌで ShowMovies.html が衚瀺されたす。
© 2010 IBM Corporation
- 65 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
6. 映画を評䟡したす。DataGrid 内の任意の「Click to rate!」をクリックし、「Rate and Comment!」ダむ
アログを衚瀺させたす。
7. 評䟡、および、コメントを入力し、「Submit」をクリックしたす。
8. 評䟡、および、コメントが履歎に反映されたこずを確認したす。
9. プレビュヌを確認したら、AJAX テスト・サヌバヌを停止したす。「サヌバヌ」ビュヌから「サヌバヌを
停止」アむコンをクリックしたす。
挔習の
挔習のチェックポむント
これで Web2.0 アプリケヌションをサヌバヌでテストするこずが
できたした。
たずめ
この挔習では以䞋のこずを孊習したした。
Ajax テスト・サヌバヌで Dojo アプリケヌションを実行す
る方法。
© 2010 IBM Corporation
- 66 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
3
デヌタ・
デヌタ・アクセス局
アクセス局の䜜成
この挔習では、My Movie Web Application のデヌタ・アクセス局を䜜成したす。挔習にはおおよそ 70
分を芁したす。
デヌタ・アクセス局には、氞続゚ンティティヌずしお、Movie および Feedback、そしお、それぞれを管理
する MovieManager、FeedbackManager が必芁です。これらの Manager を介しお、My Movie Web
Application のビゞネス・ロゞック局は、氞続化操䜜を行いたす。
3.1
JPA1.0, EJB3,0 プロゞェクトの
プロゞェクトの䜜成
たず、JPA プロゞェクトを䜜成したす。この挔習では、䞊述した Manager を EJB ずしお䜜成するこずにし
たす。そのため、EJB プロゞェクトを䜜成の䞊、JPA ファセットを適甚するこずにしたす。
1. パヌスペクティブを「Java EE」に倉曎したす。ワヌクベンチ右䞊にある「パヌスペクティブを開く」か
ら、「Java EE」をクリックしたす。
2. メニュヌ・バヌから、「ファむル」 -> 「新芏」 -> 「EJB プロゞェクト」をクリックしたす。
3. 「新芏 EJB プロゞェクト」ダむアログが開きたす。以䞋の蚭定を行いたす。
蚭定項目
蚭定倀
プロゞェクト名
プロゞェクト名
MyMovieJPA
デフォルト・
デフォルト・ロケヌションの
ロケヌションの䜿甚
チェックを入れる
EJB モゞュヌル・
モゞュヌル・バヌゞョン
3.0
EAR にプロゞェクトを
プロゞェクトを远加
チェックを入れる
EAR プロゞェクト名
プロゞェクト名
MyMovieEAR
4. JPA ファセットを有効にしたす。「構成」セクションの「倉曎」ボタンをクリックしたす。
© 2010 IBM Corporation
- 67 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
5. 「プロゞェクト・ファセット」ダむアログが開きたす。以䞋の蚭定を行い、「OK」をクリックしたす。
蚭定項目
蚭定倀
プロゞェクト・
プロゞェクト・ファセット
JPA
バヌゞョン
1.0
6. 「次ぞ」をクリックしたす。
© 2010 IBM Corporation
- 68 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
7. 「Java」ペヌゞでデフォルトを受け入れ、「次ぞ」をクリックしたす。
8. 「EJB モゞュヌル」ペヌゞで、以䞋の蚭定を行い、「次ぞ」をクリックしたす。
蚭定項目
蚭定倀
クラむアントの
クラむアントのむンタヌフェヌスず
むンタヌフェヌスずクラスを
クラスを保有する
保有する
チェックを倖す
EJB クラむアント JAR モゞュヌルの
モゞュヌルの䜜成
ejb-jar.xml デプロむメント蚘述子
デプロむメント蚘述子の
蚘述子の生成
© 2010 IBM Corporation
チェックを倖す
- 69 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
9. 「JPA ファセット」ペヌゞでは、そのたた「終了」をクリックしたす。
挔習の
挔習のチェックポむント
JPA 1.0 察応の EJB プロゞェクトを䜜成したした。
たずめ
この挔習では以䞋のこずを孊習したした。
JPA1.0 察応の EJB プロゞェクトの䜜成方法。
JPA アプリケヌション開発甚のプロゞェクト・ファセットの
カスタマむズ方法。
© 2010 IBM Corporation
- 70 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
3.2
JPA ゚ンティティヌの
゚ンティティヌの䜜成
この挔習では、氞続゚ンティティヌMovie ず Feedback を䜜成したす。Movie は映画を衚す゚ンティティ
ヌであり、Feedback は映画に察する評䟡およびコメントを衚したす。耇数の Feedback が 1 ぀の Movie
に察しお登録されたす。すなわち、Feedback ず Movie の間には Many-to-One の関係がありたす。クラ
ス図で衚すず以䞋のようになりたす。
© 2010 IBM Corporation
- 71 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
3.2.1
Movie ゚ンティティヌの
゚ンティティヌの䜜成
1. ゚ンタヌプラむズ・゚クスプロヌラヌから、MyMovieJPA を右クリックし、「新芏」 -> 「゚ンティティ
ヌ」をクリックしたす。
2. 「新芏 JPA ゚ンティティヌ」ダむアログが開きたす。「゚ンティティヌ・クラス」ペヌゞで以䞋を入力し、
「次ぞ」をクリックしたす。
蚭定項目
蚭定倀
Java パッケヌゞ
com.ibm.example.websphere.jpa1sample.movie
クラス名
クラス名
Movie
© 2010 IBM Corporation
- 72 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
3. 「゚ンティティヌ・プロパティヌ」ペヌゞが開きたす。゚ンティティヌ・フィヌルドを远加するために、
「远加」をクリックしたす。
4. 以䞋を入力し、「OK」をクリックしたす。
蚭定項目
蚭定倀
型
Integer
名前
id
5. 手順 3.-4.を繰り返し、以䞋のフィヌルドを远加したす。
名前
タむプ
title
java.lang.String
actor
java.lang.String
director
java.lang.String
description
java.lang.String
6. ゚ンティティヌ・フィヌルドの id を䞻キヌにしたす。「゚ンティティヌ・フィヌルド」セクションの id 行の
「鍵」列にチェックを入れたす。
© 2010 IBM Corporation
- 73 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
7. 「可芖化のためクラス図を遞択」ペヌゞでは、そのたた「終了」をクリックしたす。
MyMovieJPA プロゞェクト配䞋に゚ンティティヌや管理 Bean を可芖化するためのクラス図が䜜成さ
れたす。
Movie ゚ンティティヌが䜜成されるず、自動で Movie.java が開きたす。以降では、Movie のフィヌルド
「id」に察しお、䞻キヌを自動生成する蚭定を行いたす。この蚭定により、Movie ゚ンティティヌがデヌタ
ベヌスに create されるたび、id が自動で生成されたす。
8. JPA パヌスペクティブに切り替えたす。
9. Movie.java から、「@Id」アノテヌションを遞択し、「JPA の詳现」ビュヌから、以䞋の蚭定を行いた
す。
蚭定項目
蚭定倀
䞻キヌ生成
キヌ生成
チェックを入れる
戊略
デフォルト自動
© 2010 IBM Corporation
- 74 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
「JPA の詳现」
詳现」ビュヌ
「JPA の詳现」ビュヌでは、JPA ゚ンティティヌのアノテヌショ
ンを線集するこずができたす。このビュヌを衚瀺するには、メニ
ュヌ・バヌから「りィンドり」 -> 「ビュヌの衚瀺」 -> 「その他」
-> 「JPA」 -> 「JPA の詳现」をクリックしたす。
10. 「@GeneratedValue」アノテヌションが远加されたす。䞻キヌ生成戊略である「デフォルト自動」
は、以䞋のように、アノテヌションの匕数ずしお明蚘するこずもできたす。コンテンツ・アシストも有効で
す。
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Integer id;
© 2010 IBM Corporation
- 75 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
11. Movie デヌタをすべお取埗するための照䌚を䜜成したす。@Entity アノテヌションを遞択し、「JPA
の詳现」ビュヌを開きたす。
12. 「照䌚」セクションを展開し、「远加」ボタンをクリックしたす。
13. 「照䌚の远加」ダむアログが衚瀺されたす。以䞋を蚭定し、「OK」をクリックしたす。
蚭定項目
蚭定倀
名前
findAllMovies
タむプ
名前付き照䌚
14. 远加した照䌚に察しお、JPQL を定矩したす。、「JPA の詳现」ビュヌから「照䌚」セクションを展開し、
照䌚欄に「SELECT m FROM Movie m 」ず入力したす。
© 2010 IBM Corporation
- 76 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
JPQL
JPQL (Java Persistence Query Language)は、JPA のク゚リ
ヌ蚀語です。SQL ラむクなク゚リヌ蚀語により、JPA ゚ンティテ
ィヌの曎新や照䌚を行うこずができたす。
15. 以䞋に瀺すコヌドが远加されおいるこずを確認したす。
@NamedQuery(name = "findAllMovies", query = "SELECT m FROM Movie m ")
© 2010 IBM Corporation
- 77 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
3.2.2
Feedback ゚ンティティヌの
゚ンティティヌの䜜成
3.2.1 ず同様の手順で、Feedback ゚ンティティヌを䜜成したす。
1. プロゞェクト・゚クスプロヌラヌから、MyMovieJPA を右クリックし、「新芏」 -> 「゚ンティティヌ」をク
リックしたす。
2. 「新芏 JPA ゚ンティティヌ」ダむアログが開きたす。「゚ンティティヌ・クラス」ペヌゞで以䞋を入力し、
「次ぞ」をクリックしたす。
蚭定項目
蚭定倀
Java パッケヌゞ
com.ibm.example.websphere.jpa1sample.movie
クラス名
クラス名
Feedback
3. 「゚ンティティヌ・プロパティヌ」ペヌゞが開きたす。以䞋の゚ンティティヌ・フィヌルドを远加したす。
名前
タむプ
id
java.lang.Integer
rating
java.lang.Integer
comment
java.lang.String
4. ゚ンティティヌ・フィヌルドの id を䞻キヌにしたす。「゚ンティティヌ・フィヌルド」セクションの id 行の
「鍵」列にチェックを入れたす。
© 2010 IBM Corporation
- 78 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
5. 「可芖化のためクラス図を遞択」ペヌゞでは、そのたた「終了」をクリックしたす。
Feedback ゚ンティティヌが䜜成されるず、自動で Feedback.java が開きたす。以降では、Feedback の
フィヌルド「id」に察しお、䞻キヌを自動生成する蚭定を行いたす。
6. Feecback.java の「@Id」アノテヌションの埌に以䞋のコヌドをコピヌしたす。
@GeneratedValue(strategy=GenerationType.AUTO)
© 2010 IBM Corporation
- 79 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
3.2.3
゚ンティティヌ間
゚ンティティヌ間の関連䜜成
Feedback ず Movie の間に Many-to-One の関係を定矩したす。
1. Movie および Feedback 䜜成時に classdiagram.dnx が開かれおいたす。閉じおしたった堎合、「゚
ン タ ヌ プ ラ ã‚€ ズ ・ ã‚š ク ス プ ロ ヌ ラ ヌ 」 ビ ュ ヌ か ら 、 「 MyMovieJPA 」 -> 「 ダ ã‚€ ア グ ラ ム 」 ->
「classdiagram.dnx」を右クリックし、「アプリケヌションから開く」 -> 「Rational DNX ダむアグラム・
゚ディタヌ」をクリックしたす。
2. Feedback クラスを遞択し、関連線を匕くための矢印マヌクを衚瀺させたす。
© 2010 IBM Corporation
- 80 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
3. Feedback からの矢印をドラッグし、Movie クラスでドロップしたす。
4. ポップアップ・メニュヌが衚瀺されたす。「0..*:0..1 有向関係の䜜成」をクリックしたす。
© 2010 IBM Corporation
- 81 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
5. 倚察䞀の有向関係線が匕かれたこずを確認したす。
6. 関係線を匕いたこずにより、リレヌションシップが定矩されたす。Feedback.java を開き、以䞋のコヌ
ドが远加されおいるこずを確認したす。
@ManyToOne
private Movie movie;
7. カスケヌド・オプションを蚭定したす。「@ManyToOne」アノテヌションを遞択し、「JPA の詳现」ビュ
ヌから、カスケヌド・オプションにお、該圓する操䜜を遞択したす。この挔習では、「すべお」にチェッ
クを入れたす。
© 2010 IBM Corporation
- 82 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
この蚭定により、「@ManyToOne」アノテヌションに以䞋の匕数が远加されたす。
@ManyToOne(cascade = ALL)
カスケヌド
゚ンティティヌ間でリレヌションシップがある堎合、゚ンティテ
ィヌに察しお行われた操䜜を関連する゚ンティティヌに反映
させるかどうかをカスケヌド・オプションにより指定したす。以
䞋にオプションを瀺したす。
すべお(ALL)すべおの操䜜を反映させたす。
保持(PERSIST)氞続化操䜜を反映させたす。
マヌゞ(MERGE)Detached ゚ンティティヌに察する倉
曎を氞続化する操䜜を反映させたす。なお、Detached
゚ンティティヌずは、EntityManager の管理䞋から離れ
た゚ンティティヌを指したす。
削陀(REMOVE)削陀操䜜を反映させたす。
曎新(REFRESH)Attached ゚ンティティヌに察する倉
曎を氞続化する操䜜を反映させたす。なお、Attached ã‚š
ンティティヌずは、EntityManager の管理䞋にある゚ンテ
ィティヌを指したす。
© 2010 IBM Corporation
- 83 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
8. Movie ず Feedback の結合を蚭定したす。「@ManyToOne」アノテヌションを遞択し、「JPA の詳现」
ビュヌから、「デフォルト倀のオヌバヌラむド」にチェックを入れたす。
この蚭定により、「@JoinColumn」アノテヌションが远加されたす。
@JoinColumn(name = "movie_id", referencedColumnName = "id")
private Movie movie;
9. Feedback デヌタを取埗するための照䌚を䜜成したす。「JPA の詳现」ビュヌから、以䞋の 2 ぀の照
䌚を䜜成したす。
findRecentFeedbacks
Feedback デヌタのすべおを新しい順で取埗したす。
蚭定項目
蚭定倀
名前
findRecentFeedbacks
タむプ
名前付き照䌚
照䌚
SELECT f FROM Feedback f ORDER BY f.id DESC
findByMovieId
Movie に察する Feedback デヌタすべおを取埗したす。
蚭定項目
蚭定倀
名前
findByMovieId
タむプ
名前付き照䌚
照䌚
SELECT f FROM Feedback f WHERE f.movie.id = :movieId
© 2010 IBM Corporation
- 84 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
10. classdiagram.dnx および Feedback.java を保存したす。
ここたでで、Movie.java、および、Feedback.java は以䞋のようになっおいるはずです。
Movie.java
package com.ibm.example.websphere.jpa1sample.movie;
import java.io.Serializable;
import java.lang.Integer;
import java.lang.String;
import javax.persistence.*;
/**
* Entity implementation class for Entity: Movie
*
*/
@Entity
@NamedQuery(name = "findAllMovies", query = "SELECT m FROM Movie m ")
public class Movie implements Serializable {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Integer id;
private String title;
private String actor;
private String director;
private String description;
private static final long serialVersionUID = 1L;
public Movie() {
super();
}
© 2010 IBM Corporation
- 85 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
public Integer getId() {
return this.id;
}
public void setId(Integer id) {
this.id = id;
}
public String getTitle() {
return this.title;
}
public void setTitle(String title) {
this.title = title;
}
public String getActor() {
return this.actor;
}
public void setActor(String actor) {
this.actor = actor;
}
public String getDirector() {
return this.director;
}
public void setDirector(String director) {
this.director = director;
}
public String getDescription() {
return this.description;
}
public void setDescription(String description) {
this.description = description;
}
© 2010 IBM Corporation
- 86 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
}
Feedback.java
package com.ibm.example.websphere.jpa1sample.movie;
import java.io.Serializable;
import java.lang.Integer;
import java.lang.String;
import javax.persistence.*;
import javax.persistence.ManyToOne;
import static javax.persistence.CascadeType.ALL;
/**
* Entity implementation class for Entity: Feedback
*
*/
@Entity
@NamedQueries({
@NamedQuery(name = "findRecentFeedbacks", query = "SELECT f FROM
Feedback f ORDER BY f.id DESC"),
@NamedQuery(name = "findByMovieId", query = "SELECT f FROM Feedback
f WHERE f.movie.id = :movieId")
})
public class Feedback implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
private Integer rating;
private String comment;
private static final long serialVersionUID = 1L;
@ManyToOne(cascade = ALL)
@JoinColumn(name = "movie_id", referencedColumnName = "id")
private Movie movie;
© 2010 IBM Corporation
- 87 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
public Feedback() {
super();
}
public Integer getId() {
return this.id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getRating() {
return this.rating;
}
public void setRating(Integer rating) {
this.rating = rating;
}
public String getComment() {
return this.comment;
}
public void setComment(String comment) {
this.comment = comment;
}
/**
* @return movie
*/
public Movie getMovie() {
return movie;
}
/**
* @param movie the movie to set
*/
public void setMovie(Movie movie) {
this.movie = movie;
}
© 2010 IBM Corporation
- 88 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
}
挔習の
挔習のチェックポむント
JPA 1.0 察応の JPA ゚ンティティヌを䜜成したした。
たずめ
この挔習では以䞋のこずを孊習したした。
© 2010 IBM Corporation
JPA ゚ンティティヌの䜜成方法。
JPA ゚ンティティヌの䞻キヌを自動生成する方法。
JPA ゚ンティティヌの照䌚の定矩方法。
JPA ゚ンティティヌ間のリレヌションシップの定矩方法。
JPA ゚ンティティヌ間のカスケヌドの定矩方法。
JPA ゚ンティティヌ間の結合の定矩方法。
- 89 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
JPA ゚ンティティヌから
゚ンティティヌからテヌブル
からテヌブルの
テヌブルの䜜成
3.3
この挔習では、䜜成した JPA ゚ンティティヌからデヌタベヌスのテヌブルを生成する手順を瀺したす。
テヌブルを生成するには、デヌタベヌス、および、デヌタベヌスぞの接続情報が必芁です。
3.3.1.では、デヌタベヌス、および、デヌタベヌス接続を䜜成する手順を瀺したす。
3.3.2.では、䜜成したデヌタベヌス接続を䜿甚しお、デヌタベヌスにテヌブルを生成したす。
たた、䜜成したデヌタベヌス、および、テヌブルに接続情報を、My Movie Web Application のデプロむ
先である WAS 䞊からも䜿甚できるようにするには、プロゞェクトのデプロむメント情報を構成する必芁が
ありたす。3.3.3 では、デプロむメントの構成手順を瀺したす。
3.3.1
デヌタベヌス接続
デヌタベヌス接続の
接続の䜜成
1. 「デヌタ・゜ヌス・゚クスプロヌラヌ」ビュヌから、「デヌタベヌス接続」を右クリックし、「新芏」をクリッ
クしたす。
© 2010 IBM Corporation
- 90 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
2. 「新芏接続」ダむアログが開きたす。以䞋を蚭定し、残りの項目はデフォルト蚭定を受け入れ、「終
了」をクリックしたす。
蚭定項目
蚭定倀
デヌタベヌス・
デヌタベヌス ・ マネヌゞャヌの
マネヌゞャヌ の 遞
Derby
択
JDBC ドラむバヌ
Derby 10.2 – 組み蟌み JDBC ドラむバヌデフォルト
3. 「デヌタ・゜ヌス・゚クスプロヌラヌ」の「デヌタベヌス接続」内に、新芏に定矩した接続が存圚するこ
ずを確認したす。
© 2010 IBM Corporation
- 91 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
3.3.2
テヌブルの
テヌブルの生成
3.3.1.で䜜成したデヌタベヌス、および、デヌタベヌス接続を䜿甚しお、デヌタベヌスにテヌブルを䜜
成したす。
1. MyMovieJPA プロゞェクトを右クリックし、「JPA ツヌル」 -> 「゚ンティティヌからテヌブルを生成」を
クリックしたす。
2. 「DDL の生成」ダむアログが開きたす。以䞋の蚭定を行い、「終了」をクリックしたす。
蚭定項目
蚭定倀
DDL ファむルを
ファむルを生成する
生成するデヌタベヌス
するデヌタベヌス・
デヌタベヌス・ベンダヌを
ベンダヌを遞択
チェックを入れる
ベンダヌ
Derby
© 2010 IBM Corporation
- 92 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
3. Table.ddl が生成され、SQL ファむル・゚ディタヌ䞊に開かれたす。なお、ddl ファむルが生成された
フォルダヌは、「MyMovieJPA」 -> 「ejbModule」 -> 「META-INF」です。
4. Table.ddl の接続プロファむルを倉曎したす。「接続プロファむル」セクションで 3.3.1.で䜜成したデヌ
タベヌス接続を指定したす。以䞋の蚭定を行い、保存したす。
蚭定項目
蚭定倀
タむプ
Derby_10.x
名前
MyDB
デヌタベヌス
MyDB
© 2010 IBM Corporation
- 93 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
5. SQL ファむル・゚ディタヌ内を右クリックし、「すべお実行」をクリックしたす。
6. 「SQL の結果」ビュヌが開きたす。テヌブル生成が成功したこずを確認したす。
7. デヌタベヌス接続を切断したす。「デヌタ・゜ヌス・゚クスプロヌラヌ」ビュヌから、「デヌタベヌス接
続」 -> 「MyDB」を右クリックし、「接続」をクリックしたす。
© 2010 IBM Corporation
- 94 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
3.3.3
JDBC デプロむメントの
デプロむメントのプロゞェクト構成
プロゞェクト構成
この挔習では、RAD 䞊で䜜成した開発時甚のデヌタベヌス接続を、WAS 䞊からも䜿甚できるようにす
るため、アプリケヌションのデプロむメント情報を構成したす。
1. 「プロゞェクト・゚クスプロヌラヌ」から、「MyMovieJPA」を右クリックし、「JPA ツヌル」 -> 「JDBC デ
プロむメントのプロゞェクト構成」をクリックしたす。
© 2010 IBM Corporation
- 95 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
2. 「デプロむメントのための接続のセットアップ」ダむアログが開きたす。デフォルトの蚭定を受け入れ、
「OK」をクリックしたす。
泚意
泚意
通垞であれば、ここたでの手順で 3.3.1.で䜜成したデヌタベヌス接続を䜿甚しお、
WAS ランタむム䞊からデヌタベヌス・アクセスするこずができたす。
しかし、本資料で䜿甚しおいる RAD V8.0 ず WAS V7.0 ずでは、䜿甚しおいる Derby
ランタむムの・ラむブラリのバヌゞョンが異なり、このたたでは動䜜いたしたせん。
以降の手順では、実行環境においおも開発環境で䜿甚しおいる Derby のラむブラリヌ
を参照させる蚭定を行いたす。なお、この蚭定には WebSphere Application Server
の WebSphere 倉数を倉曎したす。
なお、具䜓的なバヌゞョンは以䞋のようになっおいたす。
環境
Derby のバヌゞョン
開発環境

開発環境RAD V8.0
10.5
実行環境

実行環境WAS V7.0
10.2
3. WAS を起動したす。「サヌバヌ」ビュヌから、「localhost の WebSphere Application Server v7.0」
を遞択し、「サヌバヌを始動」アむコンをクリックしたす。
© 2010 IBM Corporation
- 96 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
4. サヌバヌが始動枈みになったら、「localhost の WebSphere Application Server v7.0」を右クリック
し、「管理」 -> 「管理コン゜ヌルの実行」をクリックしたす。
5. 管理コン゜ヌルのようこそ画面が開きたす。巊偎セクションから、「環境」 -> 「WebSphere 倉数」を
クリックしたす。
© 2010 IBM Corporation
- 97 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
6. 「WebSphere 倉数」画面のリ゜ヌス䞀芧から、「DERBY_JDBC_DRIVER_PATH」をクリックした
す。
7. 「䞀般プロパティヌ」の倀欄に RAD V8.0 が䜿甚する derby.jar ぞのパス泚を指定したす。
© 2010 IBM Corporation
- 98 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
泚意
泚意
RAD V8.0 が䜿甚しおいる derby.jar ぞのパスは、Installation Manager をデフォルトのディレ
クトリヌにむンストヌルした堎合のパスになりたす。
デフォルトのむンストヌル・ディレクトリヌにむンストヌルした堎合は以䞋になりたす。
C:¥Program
Files¥IBM¥SDPShared¥plugins¥org.apache.derby.core_10.5.1.1_v20100129¥derby.jar
異なるディレクトリヌにむンストヌルした堎合は、Installation Manager のむンストヌル・ディレク
トリヌの 1 階局䞊に SDPShared ディレクトリヌを芋぀けるこずができたす。
8. ロヌカル構成を保存したす。「保存」リンクをクリックしたす。
9. WAS を停止したす。「サヌバヌ」ビュヌから、「localhost の WebSphere Application Server v7.0」
を遞択し、「サヌバヌを停止」アむコンをクリックしたす。
挔習の
挔習のチェックポむント
新芏に䜜成したデヌタベヌス接続を䜿甚しお、JPA ゚ンティ
ティヌからテヌブルを生成したした。たた、䜜成したデヌタベ
ヌス接続を WAS 䞊から䜿甚できるようにプロゞェクトのデプロ
むメント情報を構成したした。
たずめ
この挔習では以䞋のこずを孊習したした。
© 2010 IBM Corporation
デヌタベヌス接続の䜜成方法。
JPA ゚ンティティヌからテヌブルの生成方法。
- 99 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
JPA マネヌゞャヌBean
の䜜成
マネヌゞャヌ
3.4
この挔習では、3.2 で䜜成した゚ンティティヌを管理するマネヌゞャヌBean を䜜成したす。マネヌゞャ
ヌBean は Movie、および、Feedback ゚ンティティヌそれぞれに察しお䜜成したす。なお、マネヌゞャ
ヌBean の実装ずしおは、セッション Bean を採甚するこずにしたす。
3.4.1
セッション Bean の䜜成
1. たず、Movie ゚ンティティヌを管理する MovieManager を䜜成したす。「プロゞェクト・゚クスプロヌラ
ヌ」から、「MyMovieJPA」を右クリックし、「新芏」 -> 「セッション Bean (EJB 3.x)」をクリックしたす。
2. 「EJB 3.x セッション Bean の䜜成」ダむアログが開きたす。以䞋を蚭定し、残りの蚭定項目はデフォ
ルトのたたで、「次ぞ」をクリックしたす。
蚭定項目
蚭定倀
Java パッケヌゞ
com.ibm.example.websphere.jpa1sample.movie
クラス名
クラス名
MovieManager
© 2010 IBM Corporation
- 100 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
3. 次のセッション Bean の特定情報を入力するペヌゞでは、そのたた、「次ぞ」をクリックしたす。
4. 「可芖化のためクラス図を遞択」ペヌゞでは、デフォルトのたた、「終了」をクリックしたす。
5. 次に、手順 1.-4.を繰り返し、Feedback ゚ンティティヌを管理する FeedbackManager を䜜成した
す。なお、手順 2.での蚭定倀は以䞋ずしたす。
蚭定項目
蚭定倀
Java パッケヌゞ
com.ibm.example.websphere.jpa1sample.movie
クラス名
クラス名
FeedbackManager
ここたでで、classdiagram.dnx には MovieManager および FeedbackManager が含たれおいるはずで
す。
© 2010 IBM Corporation
- 101 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
3.4.2
JPA 管理メ゜ッド
管理メ゜ッドの
メ゜ッドの EJB ぞの远加
ぞの远加
生成された classdiagram.dnx を䜿甚しお、MovieManager および FeedbackManager に JPA 管理メ
゜ッドを远加したす。
1. classdiagram.dnx を開きたす。
2. 「MovieManager」クラスを右クリックし、「EJB3.0 を远加」 -> 「JPA 管理メ゜ッド」をクリックしたす。
3. 「JPA マネヌゞャヌBean りィザヌド」が開きたす。「䜿甚可胜な JPA ゚ンティティヌ」から Movie に
チェックを入れ、「終了」をクリックしたす。
© 2010 IBM Corporation
- 102 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
4. classdiagram.dnx にお、「MovieManager」クラスに JPA 管理メ゜ッドが远加されたこずを確認した
す。
JPA 管理メ゜ッド
管理メ゜ッド
JPA 管理メ゜ッドずしお以䞋が生成されたす。
管 理 察 象 ã‚š ン テ ィ テ ィ ヌ の CRUD メ ã‚œ ッ ド
(Create,Read,Update,Delete)
゚ンティティヌに定矩された NamedQuery を実行
するメ゜ッド
5. findMovieById メ゜ッドによっお取埗した Movie を他の PersistenceContext から䜿甚できるように、
EntityManager の clear メ゜ッドを䜿甚したす。MovieManager.java の findMovieById メ゜ッドを以
䞋に眮き換えおください。
@Action(Action.ACTION_TYPE.FIND)
public Movie findMovieById(Integer id) {
Movie movie = null;
EntityManager em = getEntityManager();
try {
movie = (Movie) em.find(Movie.class, id);
em.clear();
} finally {
em.close();
}
return movie;
}
© 2010 IBM Corporation
- 103 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
EntityManager clear メ゜ッド
PersistenceContext(EntityManager が管理する JPA ゚ンテ
ィティヌの集合)をクリアし、すべおの゚ンティティヌを detach
したす。Detach された゚ンティティヌは、他の EntityManager
の PersistenceContext の管理察象ずなるこずができたす。
今回の䟋で は、 取埗し た Movie ã‚€ ンスタン スを、埌 述の
FeedbackManager が Feedback デヌタを登録する際に䜿
甚するので、Movie むンスタンスを detach したした。
6. 手順 1.-3.ず同様に FeedbackManager の管理メ゜ッドを远加したす。
なお、「JPA マネヌゞャヌBean りィザヌド」での「䜿甚可胜な JPA ゚ンティティヌ」には、Feedback
゚ンティティヌにチェックをしおください。
© 2010 IBM Corporation
- 104 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
7. classdiagram.dnx にお、「FeedbackManager」クラスに JPA 管理メ゜ッドが远加されたこずを確認し
たす。
8. NamedQuery により生成された findRecentFeedbacks メ゜ッドを倉曎し、䞎えられた匕数の数だけ
照䌚結果を返すようにしたす。FeedbackManager.java を開きたす。
9. findRecentFeedbacks メ゜ッドを以䞋のコヌドに眮き換えたす䞋線は倉曎点を瀺したす。
@NamedQueryTarget("findRecentFeedbacks")
public List<Feedback> findRecentFeedbacks(int maxCount) {
EntityManager em = getEntityManager();
List<Feedback> results = null;
try {
Query query = em.createNamedQuery("findRecentFeedbacks");
query.setMaxResults(maxCount);
results = (List<Feedback>) query.getResultList();
} finally {
em.close();
}
return results;
}
10. classdiagram.dnx, MovieManager.java, FeedbackManager.java を保存したす。
© 2010 IBM Corporation
- 105 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
3.4.3
JPA 管理メ゜ッド
管理メ゜ッドの
メ゜ッドのプロモヌト
3.4.2.では、MovieManager および FeedbackManager に JPA 管理メ゜ッドを远加したした。
この挔習では、JPA 管理゜ッドをセッション Bean のビゞネス・むンタヌフェヌス MovieManagerLocal お
よび FeedbackManagerLocal に反映させたす。反映させるには Java EE ツヌルの「メ゜ッドのプロモヌ
ト」を䜿甚したす。
1. 「 プ ロ ã‚ž ェ ク ト ・ ã‚š ク ス プ ロ ヌ ラ ヌ 」 ビ ュ ヌ か ら 、 「 MyMovieJPA 」 -> 「 ejbModule 」 ->
「com.ibm.sample.websphere.jpa1sample.movie」 -> 「MovieManager」を右クリックし、「Java
EE ツヌル」 -> 「メ゜ッドのプロモヌト」をクリックしたす。
© 2010 IBM Corporation
- 106 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
2. 「メ゜ッドのプロモヌト」ダむアログが開きたす。すべおの public メ゜ッドを遞択し、「OK」をクリックした
す。
3. MovieManagerLocal.java を開き、メ゜ッドがプロモヌトされおいるこずを確認したす。
4. 手順 1.-3.ず同様の手順で、FeedbackManager の JPA 管理メ゜ッドを FeedbackManagerLocal
にプロモヌトしたす。
ここたでで、JPA マネヌゞャヌBean はそれぞれ以䞋のようになっおいるはずです。
MovieManagerLocal.java
package com.ibm.example.websphere.jpa1sample.movie;
import java.util.List;
import javax.ejb.Local;
@Local
© 2010 IBM Corporation
- 107 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
public interface MovieManagerLocal {
String createMovie(Movie movie) throws Exception;
String deleteMovie(Movie movie) throws Exception;
String updateMovie(Movie movie) throws Exception;
Movie findMovieById(Integer id);
Movie getNewMovie();
List<Movie> findAllMovies();
}
MovieManager.java
package com.ibm.example.websphere.jpa1sample.movie;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import com.ibm.jpa.web.NamedQueryTarget;
import com.ibm.jpa.web.Action;
import javax.persistence.PersistenceUnit;
import com.ibm.example.websphere.jpa1sample.movie.Movie;
import java.util.List;
import javax.persistence.Query;
/**
* Session Bean implementation class MovieManager
*/
@Stateless
public class MovieManager implements MovieManagerLocal {
@PersistenceUnit
private EntityManagerFactory emf;
© 2010 IBM Corporation
- 108 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
/**
* Default constructor.
*/
public MovieManager() {
// TODO Auto-generated constructor stub
}
private EntityManager getEntityManager() {
return emf.createEntityManager();
}
@Action(Action.ACTION_TYPE.CREATE)
public String createMovie(Movie movie) throws Exception {
EntityManager em = getEntityManager();
try {
em.persist(movie);
} finally {
em.close();
}
return "";
}
@Action(Action.ACTION_TYPE.DELETE)
public String deleteMovie(Movie movie) throws Exception {
EntityManager em = getEntityManager();
try {
movie = em.merge(movie);
em.remove(movie);
} finally {
em.close();
}
return "";
}
@Action(Action.ACTION_TYPE.UPDATE)
© 2010 IBM Corporation
- 109 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
public String updateMovie(Movie movie) throws Exception {
EntityManager em = getEntityManager();
try {
movie = em.merge(movie);
} finally {
em.close();
}
return "";
}
@Action(Action.ACTION_TYPE.FIND)
public Movie findMovieById(Integer id) {
Movie movie = null;
EntityManager em = getEntityManager();
try {
movie = (Movie) em.find(Movie.class, id);
em.clear();
} finally {
em.close();
}
return movie;
}
@Action(Action.ACTION_TYPE.NEW)
public Movie getNewMovie() {
Movie movie = new Movie();
return movie;
}
@NamedQueryTarget("findAllMovies")
public List<Movie> findAllMovies() {
EntityManager em = getEntityManager();
List<Movie> results = null;
try {
© 2010 IBM Corporation
- 110 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
Query query = em.createNamedQuery("findAllMovies");
results = (List<Movie>) query.getResultList();
} finally {
em.close();
}
return results;
}
}
FeedbackManagerLocal.java
package com.ibm.example.websphere.jpa1sample.movie;
import java.util.List;
import javax.ejb.Local;
@Local
public interface FeedbackManagerLocal {
public List<Feedback> findByMovieId(Object movieId);
public List<Feedback> findRecentFeedbacks(int maxCount);
public Feedback getNewFeedback();
public Feedback findFeedbackById(Integer id);
public String updateFeedback(Feedback feedback) throws Exception;
public String deleteFeedback(Feedback feedback) throws Exception;
public String createFeedback(Feedback feedback) throws Exception;
}
FeedbackManager.java
© 2010 IBM Corporation
- 111 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
package com.ibm.example.websphere.jpa1sample.movie;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import com.ibm.jpa.web.NamedQueryTarget;
import com.ibm.jpa.web.Action;
import javax.persistence.PersistenceUnit;
import com.ibm.example.websphere.jpa1sample.movie.Feedback;
import java.util.List;
import javax.persistence.Query;
/**
* Session Bean implementation class FeedbackManager
*/
@Stateless
public class FeedbackManager implements FeedbackManagerLocal {
@PersistenceUnit
private EntityManagerFactory emf;
/**
* Default constructor.
*/
public FeedbackManager() {
// TODO Auto-generated constructor stub
}
private EntityManager getEntityManager() {
return emf.createEntityManager();
}
@Override
@Action(Action.ACTION_TYPE.CREATE)
public String createFeedback(Feedback feedback) throws Exception
{
© 2010 IBM Corporation
- 112 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
EntityManager em = getEntityManager();
try {
em.persist(feedback);
} finally {
em.close();
}
return "";
}
@Override
@Action(Action.ACTION_TYPE.DELETE)
public String deleteFeedback(Feedback feedback) throws Exception
{
EntityManager em = getEntityManager();
try {
feedback = em.merge(feedback);
em.remove(feedback);
} finally {
em.close();
}
return "";
}
@Override
@Action(Action.ACTION_TYPE.UPDATE)
public String updateFeedback(Feedback feedback) throws Exception
{
EntityManager em = getEntityManager();
try {
feedback = em.merge(feedback);
} finally {
em.close();
}
return "";
}
© 2010 IBM Corporation
- 113 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
@Override
@Action(Action.ACTION_TYPE.FIND)
public Feedback findFeedbackById(Integer id) {
Feedback feedback = null;
EntityManager em = getEntityManager();
try {
feedback = (Feedback) em.find(Feedback.class, id);
} finally {
em.close();
}
return feedback;
}
@Override
@Action(Action.ACTION_TYPE.NEW)
public Feedback getNewFeedback() {
Feedback feedback = new Feedback();
return feedback;
}
@Override
@NamedQueryTarget("findRecentFeedbacks")
public List<Feedback> findRecentFeedbacks(int maxCount) {
EntityManager em = getEntityManager();
List<Feedback> results = null;
try {
Query query =
em.createNamedQuery("findRecentFeedbacks");
query.setMaxResults(maxCount);
results = (List<Feedback>) query.getResultList();
} finally {
em.close();
}
return results;
© 2010 IBM Corporation
- 114 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
}
@Override
@NamedQueryTarget("findByMovieId")
public List<Feedback> findByMovieId(Object movieId) {
EntityManager em = getEntityManager();
List<Feedback> results = null;
try {
Query query = em.createNamedQuery("findByMovieId");
query.setParameter("movieId", movieId);
results = (List<Feedback>) query.getResultList();
} finally {
em.close();
}
return results;
}
}
EntityManager
EntityManager は Persistence Entity のむンスタンス、およ
び、ラむフサむクルを管理したす。Persistence Entity ぞの操
䜜 は EntityManager を 介 し お 行 わ れ た す 。 な お 、
EntityManager には以䞋の 2 皮類がありたす。
container-managed Entity Manager
EntityManager のラむフサむクルが J2EE コンテナヌによっお
管理されたす。䞀般的に、Web コンテナヌや EJB コンテナヌ
䞊で利甚されたす。
application-managed Entity Manager
EntityManager のラむフサむクルがアプリケヌションによっお
管理されたす。Java SE 環境や Java EE アプリケヌション・ク
ラむアント環境では、application-managed Entity Manager
しかサポヌトされおいたせん。
© 2010 IBM Corporation
- 115 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
PersistentUnit アノテヌション
EntityManager は、EntityManagerFactory を介しお生成さ
れ た す 。 container-managed Entity Manager の å Ž 合 、
EntityManagerFactory
は 必 芁 あ り た せ ん が 、
application-managed Entity Manager の堎合は、明瀺的に
EntityManagerFactory を 利 甹 し 、 EntityManager や
PersistenceContext のラむフサむクルを管理しなくおはなりた
せん。なお、PersistenceContext ずは Persistence Entity の
集合を指したす。
Java EE 環境の堎合、@PersistentUnit アノテヌションを䜿
甚するこずで、EntityManagerFactory に察しお䟝存性の泚入
が行われたす。
挔習の
挔習のチェックポむント
セッション Bean を䜜成し、JPA 管理メ゜ッドを远加したした。た
た、生成されたメ゜ッドをビゞネス・むンタヌフェヌスにプロモ
ヌトしたした。これでデヌタ・アクセス局が完成したした。
たずめ
この挔習では以䞋のこずを孊習したした。
JPA 管理メ゜ッドの远加方法。
セッション Bean のメ゜ッドをビゞネス・むンタヌフェヌスに
プロモヌトする方法。
© 2010 IBM Corporation
- 116 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
3.5
デヌタ・
デヌタ・アクセス局
クセス局の動䜜確認
この挔習では、MyMovieJPA の簡単な動䜜確認を行いたす。
3.5.1 では Universal Test Client を䜿甚しお、MovieManagerLocal の管理メ゜ッドにアクセスし、JPA
゚ンティティヌである Movie の登録を行いたす。
3.5.2.では、3.5.1 で登録した Movie デヌタが氞続化されおいるこずを、「JPA」パヌスペクティブの「デヌ
タ・゜ヌス・゚クスプロヌラヌ」ビュヌを䜿甚しお確認したす。
なお、My Movie Web Application に関しおは、Universal Test Client ず「デヌタ・゜ヌス・゚クスプロヌラ
ヌ」ビュヌのいずれを䜿甚しおも、デヌタに察する CRUD 操䜜が可胜です。
Universal Test Client
サヌバヌ・ツヌルには、Web をベヌスにした Universal Test
Client が甚意されおおり、これを䜿甚するこずでロヌカルたた
はリモヌトのサヌバヌ䞊で実行䞭の゚ンタヌプラむズ Bean
および、その他の Java オブゞェクトのメ゜ッドをテストするこず
ができたす。
「デヌタ・
デヌタ・゜ヌス・
゜ヌス・゚クスプロヌラヌ
゚クスプロヌラヌ」ビュヌ
デヌタベヌスに接続し、テヌブルやビュヌを介しおデヌタに
アクセスするこずができたす。デヌタベヌス接続埌は、デヌタ
に察する CRUD 操䜜や、デヌタのむンポヌト(ロヌド)、゚クス
ポヌト(抜出)など、デヌタに関するさたざたな操䜜を行うこずが
できたす。
© 2010 IBM Corporation
- 117 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
3.5.1
Universal Test Client を䜿甚した
䜿甚したデヌタ
したデヌタの
デヌタの远加
1. 「Java EE」パヌスペクティブに切り替えたす。
2. 「サヌバヌ」ビュヌから、「localhost の WebSphere Application Server v7.0」を右クリックし、「远加
および削陀」をクリックしたす。
3. 「远加および削陀」ダむアログが衚瀺されたす。「MyMovieEAR」を遞択し、「远加」ボタンをクリックし
たす。
4. 「終了」をクリックしたす。
5. 「localhost の WebSphere Application Server v7.0」を遞択し、「サヌバヌを始動」アむコンをクリッ
クしたす。
© 2010 IBM Corporation
- 118 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
6. サヌバヌが始動したら、「localhost の WebSphere Application Server v7.0」を右クリックし、
「Universal Test Client」 -> 「実行」をクリックしたす。
7. Universal Test Client がブラりザヌ䞊に衚瀺されたす。
© 2010 IBM Corporation
- 119 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
8. 「JNDI ゚クスプロヌラヌ」をクリックしたす。
9. 「 JNDI
ã‚š ク ス プ ロ ヌ ラ ヌ 」 か ら 、 [ ロ ヌ カ ル
EJB
Bean]
->
「com.ibm.example.websphere.jpa1sample.movie.MovieManagerLocal」をクリックしたす。
10. MovieManagerLocal が提䟛するメ゜ッドの内、createMovie を遞択したす。「EJB Beans」 ->
「MovieManagerLocal」 -> 「MovieManagerLocal」 -> 「String createMovie(Movie)」をクリック
したす。
11. 「パラメヌタヌ」セクションに Movie の圹者、説明、監督、タむトルを入力したす。
12. Movie の id は、セレクト・ボックスから「null(Integer)」を遞択したす。
© 2010 IBM Corporation
- 120 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
13. 「起動」をクリックしたす。
14. 結果のセクションで゚ラヌ・メッセヌゞが衚瀺されおいないこずを確認したす。
15. 同様の手順で他の Movie デヌタも登録したす。
16. Movie デヌタの登録が枈んだら、サヌバヌを停止させたす。「サヌバヌ」ビュヌから、「localhost の
WebSphere Application Server v7.0」を遞択し、「サヌバヌを停止」アむコンをクリックしたす。
© 2010 IBM Corporation
- 121 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
3.5.2
デヌタ・
デヌタ・゜ヌス・
゜ヌス・゚クスプロヌラヌ・
゚クスプロヌラヌ・ビュヌを
ビュヌを䜿甚した
䜿甚したデヌタ
したデヌタの
デヌタの確認
1. 「JPA」パヌスペクティブに切り替えたす。
2. 「デヌタ・゜ヌス・゚クスプロヌラヌ」ビュヌから、「デヌタベヌス接続」 -> 「MyDB」を右クリックし、
「接続」をクリックしたす。
3. MyDB が展開され、デヌタベヌス接続に成功したこずを確認したす。
泚意
泚意
WebSphere Application Server V7.0 が停止しおいないずデヌタベヌス接続に成功
したせん。
4. 「MyDB」 -> 「MyDB」 -> 「スキヌマ」 -> 「APP」 -> 「テヌブル」 -> 「Movie」を右クリックし、
「デヌタ」 -> 「すべおの行を戻す」をクリックしたす。
© 2010 IBM Corporation
- 122 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
「デヌタ」
デヌタ」に察するオプション
するオプション
デヌタのに察する操䜜のオプションずしお、以䞋がありたす。
すべおの行を戻す
テヌブルやビュヌ内のすべおの行を確認したす。
線集
行の远加、曎新、削陀を行いたす。
ロヌド
入力ファむルから行情報をむンポヌトしたす。
抜出
出力ファむルぞ行情報を゚クスポヌトしたす。
サンプル・コンテンツ
衚内の行のサンプルを確認したす。サンプルで確認できる結果セットは、「SQL
の結果ビュヌのオプション」蚭定により倉曎できたす。
5. Universal Test Client から登録したデヌタを確認したす。
6. デヌタベヌス接続を切断したす。「デヌタ・゜ヌス・゚クスプロヌラヌ」ビュヌから、「デヌタベヌス接
© 2010 IBM Corporation
- 123 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
続」 -> 「MyDB」を右クリックし、「切断」をクリックしたす。
泚意
泚意
デヌタベヌ ス接続 を切断 し ないず、埌 続のステッ プ で WebSphere Application
Servre V7.0 を始動する際に倱敗したす。
挔習の
挔習のチェックポむント
Universal Test Client を䜿甚し、JPA 管理メ゜ッドおよび JPA
゚ンティティヌBean の動䜜を確認したした。たた、「デヌタ・゜
ヌス・゚クスプロヌラヌ」ビュヌを䜿甚しお、デヌタが氞続化さ
れおいるこずを確認したした。
たずめ
この挔習では以䞋のこずを孊習したした。
Universal Test Client の起動および利甚方法。
「デヌタ・゜ヌス・゚クスプロヌラヌ」ビュヌを䜿甚したデ
ヌタベヌス接続方法およびデヌタ・アクセス方法。
© 2010 IBM Corporation
- 124 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
ビゞネス・
ビゞネス・ロゞック局
ロゞック局の䜜成
4
この挔習では、My Movie Web Application のビゞネス・ロゞック局を䜜成したす。挔習にはおおよそ 20
分を芁したす。
ビゞネス・ロゞック局では以䞋のサヌビスを提䟛したす。
・
映画䞀芧の取埗サヌビス
・
フィヌドバックの投皿サヌビス
・
最近投皿されたフィヌドバック䞀芧の取埗サヌビス
・
映画に察するフィヌドバック・サマリヌフィヌドバック䞀芧ず評䟡の平均点の取埗サヌビス
4.1
EJB3.0 プロゞェクトの
プロゞェクトの䜜成
挔習 3.1 での手順ず同様に、EJB プロゞェクトを䜜成したす。なお、JPA1.0 ファセットの適甚は必芁あり
たせん。
1. パヌスペクティブを「Java EE」に切り替えたす。
2. メニュヌ・バヌから、「ファむル」 -> 「新芏」 -> 「EJB プロゞェクト」をクリックしたす。
3. 「新芏 EJB プロゞェクト」ダむアログが開きたす。以䞋の蚭定を行いたす。
蚭定項目
蚭定倀
プロゞェクト名
プロゞェクト名
MyMovieEJB
デフォルト・
デフォルト・ロケヌションの
ロケヌションの䜿甚
チェックを入れる
EJB モゞュヌル・
モゞュヌル・バヌゞョン
3.0
EAR にプロゞェクトを
プロゞェクトを远加
チェックを入れる
EAR プロゞェクト名
プロゞェクト名
MyMovieEAR
© 2010 IBM Corporation
- 125 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
4. 「次ぞ」をクリックしたす。
5. 「Java」ペヌゞでデフォルトを受け入れ、「次ぞ」をクリックしたす。
6. 「EJB モゞュヌル」ペヌゞで、以䞋の蚭定を行い、「終了」をクリックしたす。
蚭定項目
蚭定倀
クラむアントの
クラむアントのむンタヌフェヌスず
むンタヌフェヌスずクラスを
クラスを保有する
保有する
チェックを倖す
EJB クラむアント JAR モゞュヌルの
モゞュヌルの䜜成
ejb-jar.xml デプロむメント蚘述子
デプロむメント蚘述子の
蚘述子の生成
© 2010 IBM Corporation
チェックを倖す
- 126 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
7. 「゚ンタヌプラむズ・゚クスプロヌラヌ」ビュヌより、MyMovieEJB プロゞェクトが䜜成されおいるこずを
確認したす。
挔習の
挔習のチェックポむント
EJB 3.0 察応の EJB プロゞェクトを䜜成したした。
© 2010 IBM Corporation
- 127 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
ビゞネス・
ビゞネス・モデルの
モデルの䜜成
4.2
ビゞネス・モデル「FeedbackSummary」を䜜成したす。FeedbackSummary は、Movie ず Movie に察す
る Feedback のリストを保持し、たた、評䟡の平均を算出するビゞネス・モデルです。
ビゞネス・モデルの䜜成にあたり、FeedbackSummary から Movie や Feedback を参照する必芁があり
たす。そのために、たず、MyMovieEJB プロゞェクトから、MyMovieJPA プロゞェクトぞの埓属関係を蚭
定したす。
1. MyMovieEJB プロゞェクトから MyMovieJPA プロゞェクトを参照させたす。「゚ンタヌプラむズ・゚ク
スプロヌラヌ」ビュヌから、「MyMovieEJB」を右クリックし、「プロパティヌ」をクリックしたす。
2. 「プロパティヌ」ダむアログが開きたす。「デプロむメント・アセンブリヌ」をクリックしたす。
3. 「マニフェスト項目」タブをクリックしたす。
4. 「远加」ボタンをクリックしたす。
© 2010 IBM Corporation
- 128 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
5. 「マニフェスト項目の远加」ダむアログが衚瀺されたす。「MyMovieJPA.jar」を遞択し、「終了」をクリッ
クしたす。
マニフェスト項目
マニフェスト項目の
項目の远加
マニフェスト項目の远加は、J2EE モゞュヌル (Web モゞュヌ
ル、EJB モゞュヌル、Java ナヌティリティヌ・モゞュヌル) に
おける参照関係を定矩するために䜿甚したす。WebSphere
Application Server などの J2EE 仕様に基づくアプリケヌ
ション・サヌバヌはこの情報を䜿甚しおアプリケヌション・モゞ
ュヌルの動䜜に必芁なラむブラリヌを怜玢したす。
Rational Application Developer では、マニフェスト項目の
远加で定矩されたプロゞェクトの情報を䜿甚しお、Java ビル
ド・パスに含たれる「EAR ラむブラリヌ」、「Web App ラむブラリ
ヌ」の内容を自動的に構成したす。
6. 「プロパティヌ」ダむアログに戻りたす。「適甚」をクリックの䞊、「終了」をクリックしたす。
© 2010 IBM Corporation
- 129 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
7. 「MyMovieEJB」を右クリックし、「新芏」 -> 「クラス」 をクリックしたす。
8. 「新芏 Java クラス」ダむアログが衚瀺されたす。以䞋を蚭定し、残りはデフォルトを受け入れ、「終了」
をクリックしたす。
蚭定項目
蚭定倀
パッケヌゞ
com.ibm.example.websphere.ejb3sample.movie
名前
FeedbackSummary
9. 䜜成された FeedbackSummary.java に、以䞋のコヌドをコピヌしたす。
package com.ibm.example.websphere.ejb3sample.movie;
import java.util.List;
© 2010 IBM Corporation
- 130 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
import com.ibm.example.websphere.jpa1sample.movie.Feedback;
import com.ibm.example.websphere.jpa1sample.movie.Movie;
public class FeedbackSummary {
private Movie movie;
private List<Feedback> feedbacks;
private float average;
/**
* @return movie
*/
public Movie getMovie() {
return movie;
}
/**
* @param movie the movie to set
*/
public void setMovie(Movie movie) {
this.movie = movie;
}
/**
* @return feedbacks
*/
public List<Feedback> getFeedbacks() {
return feedbacks;
}
/**
* @param feedbacks the feedbacks to set
*/
public void setFeedbacks(List<Feedback> feedbacks) {
this.feedbacks = feedbacks;
this.setAverage(feedbacks);
}
/**
* @return average
*/
© 2010 IBM Corporation
- 131 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
public float getAverage() {
return average;
}
/**
* @param average the average to set
*/
private void setAverage(List<Feedback> feedbacks){
if(feedbacks.size() == 0){
this.average = 0.0f;
} else {
float sum = 0.0f;
for (Feedback rating : feedbacks) {
sum += rating.getRating();
}
this.average = sum/feedbacks.size();
}
}
}
FeedbackSummary クラスは、フィヌドバック察象である Movie ずフィヌドバックのリスト、および、評䟡の
平均点を持ちたす。たた、これらの倀にアクセスするためのアクセサ・メ゜ッドを提䟛しおいたす。
挔習の
挔習のチェックポむント
ビゞネス・モデル FeedbackSummary を䜜成したした。
ビゞネス・モデル䜜成にあたり、MyMovieEJB プロゞェクトか
ら MyMovieJPA プロゞェクトを参照させるために埓属関係を
定矩したした。
たずめ
この挔習では以䞋のこずを孊習したした。
マニフェスト・゚ディタヌを䜿甚した埓属関係の蚭定方
法。
© 2010 IBM Corporation
- 132 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
4.3
セッション Bean の䜜成
1. 「プロゞェクト・゚クスプロヌラヌ」から、「MyMovieJPA」を右クリックし、「新芏」 -> 「セッション Bean
(EJB 3.x)」をクリックしたす。
2. 「EJB 3.x セッション Bean の䜜成」ダむアログが開きたす。以䞋を蚭定し、残りの蚭定項目はデフォ
ルトのたたで、「次ぞ」をクリックしたす。
蚭定項目
蚭定倀
Java パッケヌゞ
com.ibm.example.websphere.ejb3sample.movie
クラス名
クラス名
MovieService
© 2010 IBM Corporation
- 133 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
3. 次のセッション Bean の特定情報を入力するペヌゞでは、そのたた、「次ぞ」をクリックしたす。
4. 「可芖化のためクラス図を遞択」ペヌゞでは、デフォルトのたた、「終了」をクリックしたす。
5. 䜜成された MovieService.java に、以䞋のコヌドをコピヌしたす。
package com.ibm.example.websphere.ejb3sample.movie;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import com.ibm.example.websphere.jpa1sample.movie.Feedback;
import com.ibm.example.websphere.jpa1sample.movie.FeedbackManagerLocal;
import com.ibm.example.websphere.jpa1sample.movie.Movie;
import com.ibm.example.websphere.jpa1sample.movie.MovieManagerLocal;
/**
* Session Bean implementation class MovieService
*/
@Stateless
public class MovieService implements MovieServiceLocal {
@EJB
private MovieManagerLocal movieManager;
@EJB
private FeedbackManagerLocal feedbackManager;
/**
* Default constructor.
*/
public MovieService() {
// TODO Auto-generated constructor stub
}
public List<Movie> getMovieList() {
return movieManager.findAllMovies();
}
© 2010 IBM Corporation
- 134 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
public FeedbackSummary getFeedbackSummaryByMovieId(int movieId) {
Movie movie = movieManager.findMovieById(movieId);
List<Feedback> feedbacks =
feedbackManager.findByMovieId(movieId);
FeedbackSummary feedbackSummary = new FeedbackSummary();
feedbackSummary.setMovie(movie);
feedbackSummary.setFeedbacks(feedbacks);
return feedbackSummary;
}
public List<Feedback> getRecentFeedbackList() {
return feedbackManager.findRecentFeedbacks(5);
}
public void addFeedback(int movieId, int rating, String comment)
{
Feedback feedback = new Feedback();
Movie movie = movieManager.findMovieById(movieId);
feedback.setMovie(movie);
feedback.setRating(rating);
feedback.setComment(comment);
try {
feedbackManager.createFeedback(feedback);
} catch (Exception e) {
e.printStackTrace();
}
}
}
MovieService クラスは以䞋のサヌビスを提䟛したす。
Movie の䞀芧を取埗する(getMovieList)
Movie の id に該圓する FeedbackSummary を取埗する(getFeedbackSummaryByMovieId)
Movie に察しお投皿された最新の Feedback の䞀芧を取埗する(getRecentFeedbackList)
フィヌドバックを登録する(addFeedback)
© 2010 IBM Corporation
- 135 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
@Stateless アノテヌション
クラス定矩の前に@Stateless アノテヌションを加えるこずで
このクラスがステヌトレス・セッション Bean の実装であるこずを
宣蚀したす。
@EJB アノテヌション
EJB ビゞネス・むンタヌフェヌス、たたは、ホヌム・むンタヌフ
ェヌスの前に@EJB アノテヌションを加えるこずで、䟝存性を
泚入したす。WebSphere Application Server 等、J2EE 仕
様に基づいたアプリケヌション・サヌバヌ䞊で、アノテヌショ
ンを付けた倉数が、䟝存先の EJB ぞの参照に基づいお自
動的に初期化されたす。
5. 䜜成したメ゜ッドをビゞネス・むンタヌフェヌスにプロモヌトしたす。
「 ã‚š ン タ ヌ プ ラ ã‚€ ズ ・ ã‚š ク ス プ ロ ヌ ラ ヌ 」 ビ ュ ヌ か ら 、 「 MyMovieEJB 」 -> 「 ejbModule 」 ->
「com.ibm.sample.websphere.ejb3sample.movie」 -> 「MovieManager」を右クリックし、「Java
EE ツヌル」 -> 「メ゜ッドのプロモヌト」をクリックしたす。
6. 「メ゜ッドのプロモヌト」ダむアログが開きたす。すべおのメ゜ッドを遞択し、「OK」をクリックしたす。
© 2010 IBM Corporation
- 136 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
7. ビゞネス・むンタヌフェヌス MovieServiceLocal.java を開き、メ゜ッドがプロモヌトされおいるこずを
確認したす。
ここたでで、MovieServiceLocal.java は以䞋のようになっおいるはずです。
package com.ibm.example.websphere.ejb3sample.movie;
import com.ibm.example.websphere.jpa1sample.movie.Feedback;
import com.ibm.example.websphere.jpa1sample.movie.Movie;
import java.util.List;
import javax.ejb.Local;
@Local
public interface MovieServiceLocal {
List<Movie> getMovieList();
FeedbackSummary getFeedbackSummaryByMovieId(int movieId);
© 2010 IBM Corporation
- 137 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
List<Feedback> getRecentFeedbackList();
void addFeedback(int movieId, int rating, String comment);
}
挔習の
挔習のチェックポむント
ビゞネス・サヌビスを提䟛する MovieService を䜜成したした。
たずめ
この挔習では以䞋のこずを孊習したした。
© 2010 IBM Corporation
ステヌトレス・セッション Bean の䜜成方法。
EJB3.0 アノテヌションの䜿甚方法。
- 138 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
5
Web UI 局ずビゞネス・
ビゞネス・ロゞック局
ロゞック局の接続
この挔習では、My Movie Web Application の WebUI 局を 4 章で䜜成したビゞネス・ロゞック局ず接続し
たす。挔習にはおおよそ 30 分を芁したす。
接続するためにビゞネス・ロゞック局の MovieService を RPC アダプタヌ・サヌビスずしお公開したす。こ
れに䌎い、1.3 節で述べた機胜拡匵に察応した Web ペヌゞの倉曎を行いたす。
RPC アダプタヌ・
アダプタヌ・サヌビス
JavaScript たたはクラむアント・サむド・コヌドが、サヌバヌ・
サむドのロゞックを盎接起動するこずをサポヌトするパタヌンを
Web Remote Procedure Calls ずいいたす。
Web 2.0 Feature Pack for WebSphere に含たれる RPC
アダプタヌは、開発者が AJAX アプリケヌションや他の単玔
なクラむアントのプログラミング・スタむルを補完する仕方で、コ
マンド・ベヌスのサヌビスを玠早く簡単に䜜成するのに圹立
぀ようにデザむンされおいたす。RPC アダプタヌは汎甚サヌ
ブレットずしお実装されおおり、登録枈みの JavaBeans に察
しお HTTP むンタヌフェヌスを提䟛したす。
© 2010 IBM Corporation
- 139 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
5.1
RPC アダプタヌ・
アダプタヌ・サヌビスの
サヌビスの䜜成
RPC アダプタヌ・サヌビスを利甚するために、「サヌバヌ・サむド・テクノロゞヌ」ファセットを有効にした
す。
1. 「Web」パヌスペクティブに切り替えたす。
2. 「゚ンタヌプラむズ・゚クスプロヌラヌ」から、「MyMovieWEB」を右クリックし、「プロパティヌ」をクリッ
クしたす。
3. 「プロパティヌ」ダむアログが開きたす。
4. 「プロゞェクト・ファセット」をクリックしたす。
5. 以䞋を蚭定の䞊、「適甚」をクリックしたす。
プロゞェクト・
プロゞェクト・ファセット
バヌゞョン
サヌバヌ・
サヌバヌ・サむド・
サむド・テクノロゞヌ
1.0.0.1
6. 「OK」をクリックしたす。
サヌバヌ・ サむ ド・ テクノロゞヌ・ ファセットを䜿甚可 胜にし たこずにより、RPCAdapter.jar およ び
JSON4J.jar ずいったラむブラリヌが参照可胜になりたす。
次に、RPC アダプタヌ・サヌビスを䜜成したす。
© 2010 IBM Corporation
- 140 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
7. ShowMovies.html を開きたす。「゚ンタヌプラむズ・゚クスプロヌラヌ」ビュヌで、「MyMovieWEB」
> 「WebContent」を展開し、ShowMovies.html をダブル・クリックしたす。するず、「ペヌゞ・デヌ
タ」ビュヌが䜿甚可胜になりたす。
8. 「ペヌゞ・デヌタ」ビュヌから、「RPC アダプタヌ・サヌビス」を右クリックし、「新芏」 -> 「RPC アダプ
タヌ・サヌビス」をクリックしたす。
9. 「RPC アダプタヌ・サヌビスの公開」ダむアログが開きたす。「EJB セッション Bean」にチェックを入
れ、「参照」をクリックしたす。
10. 「公開する EJB の遞択」ダむアログが衚瀺されたす。「参照の远加」をクリックしたす。
11. 「EJB 参照の远加」ダむアログが衚瀺されたす。以䞋を遞択し、「終了」をクリックしたす。
蚭定項目
蚭定倀
ワヌクスペヌス
ワヌクスペヌスにある
スペヌスにある゚ンタヌプラむ
にある゚ンタヌプラむ
チェックを入れる
ズ Bean
゚ンタヌプラむズ Bean
「 MyMovieEAR 」
-> 「 MyMovieEJB 」
->
「MovieService」
© 2010 IBM Corporation
- 141 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
12. 「公開する EJB の遞択」ダむアログに戻りたす。EJB 参照名「ejb/MovieService」を遞択し、「OK」を
クリックしたす。
13. 「RPC アダプタヌ・サヌビスの公開」ダむアログに戻りたす。以䞋を蚭定し、残りはデフォルトを受け
入れ、「次ぞ」をクリックしたす。
蚭定項目
蚭定倀
EJB バヌ
3.0
ゞョン
メ゜ッド
すべおにチェックを入れる
 addFeedback(int, int, String), getFeedbackSummaryByMovieId(int),
getMovieList(), getRecentFeedbackList() 
14. 「メ゜ッドの構成」ペヌゞに移りたす。addFeedback メ゜ッドを遞択し、HTTP メ゜ッドを「POST」に倉
© 2010 IBM Corporation
- 142 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
曎したす。
15. 残りのメ゜ッドは HTTP メ゜ッドが「GET」のたたで、「終了」をクリックしたす。
16. 「ペヌゞ・デヌタ」ビュヌに RPC アダプタヌ・サヌビスが远加されたこずを確認したす。
RPC アダプタヌ・
アダプタヌ・サヌビスのその
サヌビスのその他
のその他の公開方法
公開方法
RPC アダプタヌ・サヌビスは、EJB や POJO の Java ファむルからも公開でき
たす。公開を行うには、「゚ンタヌプラむズ・゚クスプロヌラヌ」ビュヌから、EJB
や Java ファむルを右クリックし、「サヌビス」 -> 「RPC アダプタヌ・サヌビスの
公開」をクリックしたす。
© 2010 IBM Corporation
- 143 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
挔習の
挔習のチェックポむント
ビゞネス・サヌビス「MovieService」を RPC アダプタヌ・サヌ
ビスずしお公開したした。
たずめ
この挔習では以䞋のこずを孊習したした。
「ペヌゞ・デヌタ」ビュヌを䜿甚した RPC アダプタヌ・サ
ヌビスの公開方法。
© 2010 IBM Corporation
RPC アダプタヌ・サヌビスのその他の公開方法。
- 144 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
Web ペヌゞの
ペヌゞの修正
5.2
この挔習では、1.3 節で述べた機胜拡匵に察応した Web ペヌゞの倉曎を行いたす。
以䞋の倉曎を行いたす。
・
ShowMovies.html ロヌド時の振る舞い
・
feedbackDialog の submit 時の振る舞い
・
DataGrid ぞの onMouseOver 時の振る舞い
5.2.1
ShowMovies ロヌド時
ロヌド時の振る舞いの倉曎
いの倉曎
ShowMovies.html ロヌド時の振る舞いずしお、以䞋を倉曎したす。
① DataGrid のデヌタを、MovieList.json から RPC アダプタヌ・サヌビス「getMovieList」呌び出しぞ
切り替える
② 「History of Ratings and Comments」セクションのフィヌドバック・デヌタを、オンメモリヌでの管理
から RPC アダプタヌ・サヌビス「getRecentFeedbackList」ぞ切り替える
たず、①の MovieList.json から RPC アダプタヌ・サヌビス呌び出しぞ切り替えを行いたす。
1. ShowMovies.html を開きたす。
2. dojo.addOnLoad の含たれる<script>タグを特定したす。
3. dojo.addOnLoad 内にある dojo.xhrGet 関数を特定したす。
4. dojo.xhrGet ブロック内にある倉数 url を RPC アダプタヌ・サヌビスの URL ぞ倉曎したす。たず、
url の倀を空にしたす。
<script type="text/javascript">
dojo.addOnLoad(function() {
dojo.xhrGet({
url : "",
5. 「 ペ ヌ ゞ・ デ ヌ タ 」 ビ ュ ヌ から 、 「 RPC ア ダ プ タ ヌ ・ サヌ ビ ス 」 -> 「 MovieServiceLocal 」 ->
「getMovieList()」 を右クリックし、「クリップボヌドぞのサヌビス URL のコピヌ」をクリックしたす。
© 2010 IBM Corporation
- 145 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
6. 倉数 url の倀に、サヌビス URL をペヌストしたす。
url : "/MyMovieWEB/RPCAdapter/httprpc/MovieServiceLocal/getMovieList",
7. load ブロック内にある newData の identifier 属性を、以䞋のように ”title” から ”id” に倉曎したす。
var newData = {
identifier : "id",
items : response.result
};
次に、②の「History of Ratings and Comments」セクションのフィヌドバック・デヌタを RPC アダプタ
ヌ・サヌビスから取埗するように倉曎したす。
8. 以䞋のコヌドを、dojo.xhrGet 関数の load ブロック内の最終行に远加したす。
dijit.byId("RateAndComment").showRecentFeedbacks();
9. RateAndComment りィゞェットに showRecentFeedbacks メ゜ッドを远加したす。以䞋のコヌドを
showFeedbackTools メ゜ッドの埌に远加したす。
showRecentFeedbacks : function() {
var grid = dijit.byId("gridId");
dojo.xhrGet({
url :
"/MyMovieWEB/RPCAdapter/httprpc/MovieServiceLocal/getRecentFeedbackList",
handleAs : "json",
load : function(response, ioArgs) {
© 2010 IBM Corporation
- 146 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
dojo.empty("feedbacklist");
for ( var i = 0; i < response.result.length; i++) {
var rating = response.result[i];
var movieTitle = rating.movie.title;
dojo.create("<li>",
{innerHTML : "<b>Title:</b>" +
movieTitle +
"<b>Rating:</b>" + rating.ratingValue +
"<br>
<b>Comments:</b> " + rating.comment},
"feedbacklist");
}
},
error : function(response, ioArgs) {
alert("An error occurred while invoking the service.");
}
});
},
© 2010 IBM Corporation
- 147 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
5.2.2
feedbackDialog の submit 時の振る舞いの倉曎
いの倉曎
feedbackDialog の評䟡、コメントが submit された時の振る舞いずしお、RateAndComment.js の以䞋を
倉曎したす。
③ feedbackDialog から submit された際に呌び出される saveFeedback メ゜ッド内で、フィヌドバッ
ク・デヌタをオンメモリヌでの管理から RPC アダプタヌ・サヌビス「addFeedback」ぞ切り替える
addFeedback は、パラメヌタヌずしお、Movie の id、評䟡、および、コメントが必芁です。これに䌎い、
ShowMovies.html および RateAndComment.js を以䞋のように倉曎したす。
④ DataGrid から feedbackDialog を衚瀺する際に呌び出される showFeedbackDialog メ゜ッド内で、
Movie の id を RateAndComment りィゞェットの showFeedbackTools メ゜ッドぞ匕き枡す
â‘€ RateAndComment りィゞェットの showFeedbackTools は Movie の id を受け取り、movieId プロ
パティヌに栌玍する
プロパティヌに栌玍するこずによっお、RateAndComment.js の saveFeedback メ゜ッドは movieId プロ
パティヌを参照し、addFeedback メ゜ッドぞパラメヌタヌずしお枡すこずができたす。
では、③の saveFeedback メ゜ッドの内容を倉曎したす。
1. たず、movieId を远加したす。以䞋のコヌドを widgetsInTemplate プロパティヌの埌に远加したす。
movieId : "",
2. saveFeedback メ゜ッドを以䞋のコヌドで眮き換えたす。
saveFeedback : function() {
var userRating = this.getRating();
var userComment = this.getComment();
var deferred = dojo.xhrPost({
url :
"/MyMovieWEB/RPCAdapter/httprpc/MovieServiceLocal/addFeedback",
content : {movieId : this.movieId, rating : userRating,
comment : userComment},
handleAs : "json",
load : function(response, ioArgs) {
© 2010 IBM Corporation
- 148 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
dijit.byId("RateAndComment").showRecentFeedbacks();
},
error : function(response, ioArgs) {
alert("An error occurred while invoking the
service.");
}
});
this.dialogbox.hide();
this.setComment("");
this.setRating(0);
},
dojo.xhrPost
RPC アダプタヌ・サヌビスである addFeedback は Post メ゜
ッドです。Post メ゜ッドの呌び出しには、dojo.xhrPost を䜿甚
したす。
次に、④の倉曎を行いたす。倉曎の察象は、ShowMovies.html の showFeedbackDialog メ゜ッドで
す。
3. showFeedbackDialog メ゜ッドを以䞋の内容で眮き換えたす。
function showFeedbackDialog(e) {
//IF A Click to rate!! cell was clicked
if (e.cellIndex == 4) {
var grid = dijit.byId("gridId");
var movieId =
grid.store.getValue(grid.getItem(e.rowIndex), "id");
var movieTitle =
grid.store.getValue(grid.getItem(e.rowIndex),
"title");
var rcwidget = dijit.byId("RateAndComment");
rcwidget.showFeedbackTools(movieId, movieTitle);
}
}
© 2010 IBM Corporation
- 149 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
次に、⑀の倉曎を行いたす。倉曎の察象は、RateAndComment.js の showFeedbackTools メ゜ッドで
す。
4. showFeedbackTools メ゜ッドを以䞋の内容で眮き換えたす。
showFeedbackTools : function(movieId,movieTitle) {
this.movieId = movieId;
this.movieTitle = movieTitle;
this.dialogbox.show();
},
© 2010 IBM Corporation
- 150 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
5.2.3
DataGrid
DataGrid ぞのオンマりス・
オンマりス・オヌバヌ時
オヌバヌ時の振る舞いの倉曎
いの倉曎
ぞ の オ ン マ ã‚Š ス ・ オ ヌ バ ヌ 時 に 、 RPC
ア ダ プ タ ヌ ・ サ ヌ ビ ス
「getFeedbackSummaryByMovidId」から Feedback デヌタを取埗するように、以䞋の倉曎を行いた
す。
⑥ ShowMovies.html の showComments メ゜ッド内で、show ずいう関数を定矩したす。この関数は、
FeedbackSummary デヌタ評䟡の平均点ず、評䟡およびコメントの䞀芧を衚瀺する html コヌドを
生成したす。䞀方で、FeedbackSummary デヌタを取埗するのは RateAndComments.js に委譲し
た す 。 そ の た め 、 Movie の
id
ず
show
メ ã‚œ ッ ド を
RateAndComments
の
showFeedbackSummaryByMovieId ずいう新芏メ゜ッドに枡したす。
⑩ RateAndComment りィゞェットに showFeedbackSummaryByMovieId メ゜ッドを定矩したす。この
メ゜ッドは、受け取った MovieId をパラメヌタヌずし、FeedbackSummary デヌタを RPC アダプタ
ヌ・サヌビスから取埗し、その結果を show メ゜ッドぞ枡し、衚瀺したす。
たず、⑥の倉曎を行いたす。倉曎の察象は、showMovies.html の showComments です。
1. showMovies.html の showComments メ゜ッドを以䞋のコヌドで眮き換えたす。
function showComments(e) {
var grid = dijit.byId("gridId");
var movieId = grid.store.getValue(grid.getItem(e.rowIndex), "id");
var show = function(feedbackSummary) {
if (feedbackSummary.feedbacks.length == 0) {
dijit.showTooltip("No comments made!", e.cellNode);
} else {
var list = "<b>Average:</b>" +
feedbackSummary.average + "<ul>";
for (var i = 0; i < feedbackSummary.feedbacks.length;
i++) {
var feedback = feedbackSummary.feedbacks[i];
list += "<li> rating : "
+ feedback.rating + "<br/>";
list += " comment : " + feedback.comment
+ "</li>";
}
list += "</ul>";
© 2010 IBM Corporation
- 151 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
dijit.showTooltip(list, e.cellNode);
}
};
dijit.byId("RateAndComment")
.showFeedbackSummaryByMovieId(movieid, show);
};
次に、⑊の远加を行いたす。远加の察象は、RatingAndComments.js です。
2. 以䞋のコヌドを、showRecentFeedback メ゜ッドの埌に远加したす。
showFeedbackSummaryByMovieId : function(movieId,showFunction){
dojo.xhrGet({
url :
"/MyMovieWEB/RPCAdapter/httprpc/MovieServiceLocal/getFeedbackSummaryByMovieId",
handleAs : "json",
content : {movieId : movieId},
load : function(response, ioArgs) {
var feedbackSummary = response.result;
showFunction(feedbackSummary);
},
error : function(response, ioArgs) {
alert("An error occurred while invoking the service.");
}
});
},
3. ShowMovies.html および RateAndComments.js を保存したす。
ここたでで、ShowMovies.html および RateAndCommnet.js は以䞋のようになっおいるはずです。
showMovies.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<link rel="stylesheet" type="text/css"
href="dojo/dijit/themes/dijit.css">
<link rel="stylesheet" type="text/css"
© 2010 IBM Corporation
- 152 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
href="dojo/dijit/themes/tundra/tundra.css">
<title>ShowMovies</title>
<meta http-equiv="Content-Type" content="text/html;
charset=Windows-31J">
<script type="text/javascript"
djconfig="isDebug: false, parseOnLoad: true"
src="dojo/dojo/dojo.js"></script>
<script type="text/javascript">
dojo.require("dijit.layout.BorderContainer");
dojo.require("dijit.layout.ContentPane");
dojo.require("dojox.grid.DataGrid");
dojo.require("dojo.data.ItemFileReadStore");
dojo.require("myDojo.RateAndComment");
dojo.require("dijit.Tooltip");
</script>
<style type="text/css">
@import "dojo/dojox/form/resources/Rating.css";
</style>
<script type="text/javascript">
dojo.addOnLoad(function() {
dojo.xhrGet({
url :
"/MyMovieWEB/RPCAdapter/httprpc/MovieServiceLocal/getMovieList",
handleAs : "json",
load : function(response, ioArgs) {
var newData = {
identifier : "id",
items : response.result
};
var dataStore = new
dojo.data.ItemFileReadStore({
data : newData,
id : "dataStoreId"
});
var grid = dijit.byId("gridId");
grid.setStore(dataStore);
© 2010 IBM Corporation
- 153 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
dijit.byId("RateAndComment").showRecentFeedbacks();
},
error : function(response, ioArgs) {
alert("An error occurred while invoking the
service.");
}
});
});
</script>
<script type="text/javascript">
function showComments(e) {
var grid = dijit.byId("gridId");
var movieId =
grid.store.getValue(grid.getItem(e.rowIndex), "id");
var show = function(feedbackSummary) {
if (feedbackSummary.feedbacks.length == 0) {
dijit.showTooltip("No comments made!",
e.cellNode);
} else {
var list = "<b>Average:</b>" +
feedbackSummary.average + "<ul>";
for (var i = 0; i <
feedbackSummary.feedbacks.length; i++) {
var feedback = feedbackSummary.feedbacks[i];
list += "<li> rating : "
+ feedback.rating + "<br/>";
list += " comment : " + feedback.comment
+ "</li>";
}
list += "</ul>";
dijit.showTooltip(list, e.cellNode);
}
};
dijit.byId("RateAndComment")
© 2010 IBM Corporation
- 154 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
.showFeedbackSummaryByMovieId(movieid,
show);
};
function hideComments(e){
dijit.hideTooltip(e.cellNode);
}
function showFeedbackDialog(e) {
//IF A Click to rate!! cell was clicked
if (e.cellIndex == 4) {
var grid = dijit.byId("gridId");
var movieId =
grid.store.getValue(grid.getItem(e.rowIndex), "id");
var movieTitle =
grid.store.getValue(grid.getItem(e.rowIndex),
"title");
var rcwidget = dijit.byId("RateAndComment");
rcwidget.showFeedbackTools(movieId, movieTitle);
}
}
function getContent(){
return "Click to rate!";
}
</script>
<link rel="stylesheet" type="text/css" title="Style"
href="dojo/dojox/grid/resources/Grid.css">
<link rel="stylesheet" type="text/css" title="Style"
href="dojo/dojox/grid/resources/tundraGrid.css">
</head>
<body class="tundra">
<div dojoType="dijit.layout.BorderContainer" id="BorderContainer"
design="headline" style="height: 100%; width: 100%">
<div dojoType="dijit.layout.ContentPane" region="top" style="text-align:
© 2010 IBM Corporation
- 155 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
center">My Movie Web Application!</div>
<div dojoType="dijit.layout.ContentPane" id="" title="" region="center">
<table id="gridId" dojotype="dojox.grid.DataGrid" autowidth="true"
onRowMouseOut="hideComments" onRowMouseOver="showComments"
onCellClick="showFeedbackDialog" rowselector="20px">
<thead>
<tr>
<th field="title">タむトル</th>
<th field="director">監督</th>
<th field="actor">圹者</th>
<th field="description">説明</th>
<th get="getContent">Rate and Comment!</th>
</tr>
</thead>
</table>
</div>
<div dojoType="dijit.layout.ContentPane" id="" title="" region="right">
<div dojoType="myDojo.RateAndComment" id="RateAndComment"></div>
</div>
</div>
</body>
</html>
RateAndComment.js
// dojo.provide allows pages use all types declared in this resource
dojo.provide("myDojo.RateAndComment");
//dojo.require the necessary dijit hierarchy
dojo.require("dijit._Widget");
dojo.require("dijit._Templated");
dojo.require("dojox.form.Rating");
dojo.require("dojo.data.ItemFileWriteStore");
dojo.require("dijit.form.Textarea");
dojo.require("dijit.Dialog");
dojo.require("dijit.form.Button");
© 2010 IBM Corporation
- 156 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
dojo.require("dijit.TitlePane");
dojo.declare("myDojo.RateAndComment", [ dijit._Widget, dijit._Templated ], {
// Path to the template
templateString : dojo.cache("myDojo", "templates/RateAndComment.html"),
// Set this to true if your widget contains other widgets
widgetsInTemplate : true,
movieId : "",
movieTitle : "",
rcStore : new dojo.data.ItemFileWriteStore({
data : {
items : []
}
}),
// Override this method to perform custom behavior during dijit
// construction.
// Common operations for constructor:
// 1) Initialize non-primitive types (i.e. objects and arrays)
// 2) Add additional properties needed by succeeding lifecycle methods
constructor : function() {
},
getComment : function() {
return this.comments.attr("value");
},
getRating : function() {
return this.rating.attr("value");
},
© 2010 IBM Corporation
- 157 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
setComment : function(value) {
this.comments.attr("value", value);
},
setRating : function(value) {
this.rating.attr("value", value);
},
showFeedbackTools : function(movieId,movieTitle) {
this.movieId = movieId;
this.movieTitle = movieTitle;
this.dialogbox.show();
},
showRecentFeedbacks : function() {
var grid = dijit.byId("gridId");
dojo.xhrGet({
url :
"/MyMovieWEB/RPCAdapter/httprpc/MovieServiceLocal/getRecentFeedbackList",
handleAs : "json",
load : function(response, ioArgs) {
dojo.empty("feedbacklist");
for ( var i = 0; i < response.result.length; i++) {
var feedback = response.result[i];
var movieTitle = feedback.movie.title;
dojo.create("<li>",
{innerHTML : "<b>Title:</b>" +
movieTitle +
"<b>Rating:</b>" + feedback.rating +
"<br>
<b>Comments:</b> " + feedback.comment},
"feedbacklist");
}
},
© 2010 IBM Corporation
- 158 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
error : function(response, ioArgs) {
alert("An error occurred while invoking the
service.");
}
});
},
showFeedbackSummaryByMovieId : function(movieId,showFunction){
dojo.xhrGet({
url :
"/MyMovieWEB/RPCAdapter/httprpc/MovieServiceLocal/getFeedbackSummaryByMovieId",
handleAs : "json",
content : {movieId : movieId},
load : function(response, ioArgs) {
var feedbackSummary = response.result;
showFunction(feedbackSummary);
},
error : function(response, ioArgs) {
alert("An error occurred while invoking the
service.");
}
});
},
saveFeedback : function() {
var userRating = this.getRating();
var userComment = this.getComment();
var deferred = dojo.xhrPost({
url :
"/MyMovieWEB/RPCAdapter/httprpc/MovieServiceLocal/addFeedback",
content : {movieId : this.movieId, rating : userRating,
comment : userComment},
handleAs : "json",
load : function(response, ioArgs) {
© 2010 IBM Corporation
- 159 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
dijit.byId("RateAndComment").showRecentFeedbacks();
},
error : function(response, ioArgs) {
alert("An error occurred while invoking the
service.");
}
});
this.dialogbox.hide();
this.setComment("");
this.setRating(0);
},
getCommentsByMovieTitle : function(movieTitle) {
var comments = [];
var store = this.rcStore;
this.rcStore.fetch({
query : {
title : movieTitle
},
onComplete : function(items, request) {
dojo.forEach(items, function(item) {
comments.push(store.getValue(item,
"comment"));
});
}
});
return comments;
},
// When this method is called, all variables inherited from superclasses are
// 'mixed in'.
// Common operations for postMixInProperties
// 1) Modify or assign values for widget property variables defined in the
// template HTML file
© 2010 IBM Corporation
- 160 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
postMixInProperties : function() {
}
});
挔習の
挔習のチェックポむント
RPC アダプタヌ・サヌビスを䜿甚しお、WebUI 局ずビゞネス・
ロゞック局を接続したした。たた、接続に䌎い、Web ペヌゞを
倉曎したした。
たずめ
この挔習では以䞋のこずを孊習したした。
© 2010 IBM Corporation
RPC アダプタヌ・サヌビスの呌び出し方。
- 161 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
6
アプリケヌションの
アプリケヌションのデバッグ・
デバッグ・テスト
5 章たでで My Movie Web Application が完成したした。
ただし、アプリケヌションにはバグが含たれおいるかもしれたせん。
この挔習では、Firebug を利甚しおアプリケヌションのデバッグを行いたす。その埌、コヌド・カバレッゞ
を利甚しお、あるテスト・シナリオにおける゜ヌス・コヌドの網矅性を調べたす。
挔習にはおおよそ 30 分を芁したす。
6.1
Firebug 統合による
統合によるデバッグ
によるデバッグ
1. Web ブラりザヌを Firebug に蚭定したす。メニュヌ・バヌより、「りィンドり」 -> 「Web ブラりザヌ」
-> 「Firefox with Firebug」を遞択したす。
泚意
泚意
Firefox が存圚しない、あるいは前提のバヌゞョン(3.5 以降)を満たしおいない堎合で
は、Firefox with Firebug が衚瀺されない堎合がありたす。
この堎合、手動で蚭定を行う必芁がありたす。手順は以䞋です。
7. メニュヌ・バヌより、「りィンドり」 -> 「蚭定」をクリックしたす。
8. 「䞀般」 -> 「Web ブラりザヌ」を遞択したす。
9. 「倖郚ブラりザヌを䜿甚」を遞択し、「新芏」をクリックしたす。
10. 「倖郚 Web ブラりザヌの線集」ダむアログが衚瀺されたす。以䞋を蚭定の
© 2010 IBM Corporation
- 162 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
䞊、「OK」をクリックしたす。
蚭定項目
蚭定倀
名前
Firefox with Firebug
ロケヌショ
Firefox のむンストヌル・ディレクトリヌ¥firefox.exe
ン
パラメヌタ
-fireclipse
ヌ
-no-remote
-profile
${webtools.debug.profile}
11. 「適甚」をクリックの䞊、「OK」をクリックしたす。
2. ShowMovies.html を 実 行 し た す 。 「 ã‚š ン タ ヌ プ ラ ã‚€ ズ ・ ã‚š ク ス プ ロ ヌ ラ ヌ 」 ビ ュ ヌ か ら
ShowMovies.html を右クリックし、「実行」 -> 「サヌバヌで実行」をクリックしたす。
© 2010 IBM Corporation
- 163 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
3. 「サヌバヌで実行」ダむアログが開きたす。以䞋を蚭定の䞊、「次ぞ」をクリックしたす。
蚭定項目
蚭定倀
サヌバヌ遞択
サヌバヌ遞択の
遞択の方法
既存のサヌバヌを遞択
䜿甚する
䜿甚するサヌバヌ
するサヌバヌの
サヌバヌの遞択
localhost の WebSphere Application Server v7.0
4. 「远加および削陀」ペヌゞでは、MyMovieEAR を「構成枈み」欄ぞ远加の䞊、「終了」をクリックした
す。
5. Firebug が起動したす。
© 2010 IBM Corporation
- 164 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
6. DataGrid 内にカヌ゜ルを乗せお、FeedbackSummary を衚瀺させようずしたす。
7. ゚ラヌ・ダむアログが衚瀺されたした。「OK」をクリックしたす。
8. Firebug の右䞋を芋るず、「1 件の゚ラヌ」ず衚瀺されおいたす。このリンクをクリックしたす。
9. Firebug のコン゜ヌルが開きたす。最埌の行に「movieid is not defined」ずいうメッセヌゞが衚瀺さ
れおいたす。
© 2010 IBM Corporation
- 165 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
Firebug 䞊での゚ラヌ
での゚ラヌ
Firebug 䞊での゚ラヌは、RAD の「問題」ビュヌず同期が取ら
れたす。
10. RAD に戻りたす。
11. 「問題」ビュヌで、「movieid is not defined」ず瀺されおいるこずが確認できたす。この行をダブル・ク
リックしたす。
© 2010 IBM Corporation
- 166 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
12. 問題が発生しおいる行ぞ、ナビゲヌトされたす。
13. 倉数 movieId を宣蚀しおいるのに、RateAndComment の showFeedbackSummaryByMovieId
ぞのパラメヌタヌが movidid ずなっおいるこずを確認したす。
© 2010 IBM Corporation
- 167 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
14. movieid を movieId に倉曎し、保存したす。するず、「問題」ビュヌ、および、゚ディタヌ䞊の圓該゚
ラヌが無くなりたす。
15. Firebug に戻り、ペヌゞの再読み蟌みをしたす。
© 2010 IBM Corporation
- 168 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
16. 再床 dataGrid にカヌ゜ルを乗せるず FeedbackSummary デヌタが衚瀺されるこずを確認したす。
17. Movie デヌタの登録が枈んだら、サヌバヌを停止させたす。「サヌバヌ」ビュヌから、「localhost の
WebSphere Application Server v7.0」を遞択し、「サヌバヌを停止」アむコンをクリックしたす。
挔習の
挔習のチェックポむント
チェックポむント
My Movie Web Application のデバッグを行いたした。
たずめ
この挔習では以䞋のこずを孊習したした。
© 2010 IBM Corporation
Firefox with Firebug の起動方法
Firebug ず RAD の同期
- 169 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
コヌド・
コヌド・カバレッゞによる
カバレッゞによる網矅性
による網矅性の
網矅性の確認
6.2
この挔習では、My Movie Web Application のコヌドをテストし、カバレッゞ網矅性の芳点からテストが
十分できおいるかを確認したす。察象コヌドはビゞネス・ロゞック局である MyMovieEJB ずしたす。テスト
の合栌基準ずしお、以䞋のテスト・ケヌスをすべお実行し、パッケヌゞ、゜ヌス・ファむル、タむプ、メ゜ッド
すべおにおいお、80%の行がカバヌされおいるこずずしたす。
テスト・ケヌス
・
アプリケヌション起動時に、映画の䞀芧が衚瀺される
・
アプリケヌション起動時に、最近投皿された映画のフィヌドバックが衚瀺される
・
映画にカヌ゜ルを乗せるず、フィヌドバック䞀芧ず評䟡の平均点が衚瀺される
・
映画に察するフィヌドバックを登録する
たた、テストの結果はレポヌトずしお出力し、My Movie Web Application の開発䟝頌者であるお客様に
提䟛したす。
© 2010 IBM Corporation
- 170 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
1. MyMovieEJB に察しお、コヌド・カバレッゞを䜿甚可胜にしたす。「゚ンタヌプラむズ・゚クスプロヌラ
ヌ」から、「MyMovieEJB」を右クリックし、「プロパティヌ」をクリックしたす。
2. 「プロパティヌ」ダむアログが衚瀺されたす。「コヌド・カバレッゞ」をクリックしたす。
3. 「コヌド・カバレッゞを䜿甚可胜にする」にチェックを入れ、「適甚」をクリックしたす。
© 2010 IBM Corporation
- 171 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
蚱容できる
蚱容できるコヌド
できるコヌド・
コヌド・カバレッゞ・
カバレッゞ・レベルの
レベルの蚭定
パッケヌゞや゜ヌス・ファむル、タむプJava クラス、メ゜ッドに
察しお、どの単䜍で、どの皋床のカバレッゞなら蚱容できるか
を蚭定したす。単䜍には、行、ブロック、メ゜ッド、タむプがあり
たす。
たずえば、パッケヌゞ・カバレッゞで、タむプ 100%ずした堎合、
パッケヌゞに含たれる党 Java クラスが䜿甚されないず、結果ず
しお蚱容できないず刀断できたす。
4. 「コヌド・カバレッゞが䜿甚䞍可」ダむアログが衚瀺されたす。コヌド・カバレッゞ統蚈を生成するには、
サヌバヌの再始動が必芁です。「OK」をクリックしたす。
5. 「OK」をクリックしたす。
6. ShowMovies.html を 実 行 し た す 。 「 ã‚š ン タ ヌ プ ラ ã‚€ ズ ・ ã‚š ク ス プ ロ ヌ ラ ヌ 」 ビ ュ ヌ か ら
ShowMovies.html を右クリックし、「実行」 -> 「サヌバヌで実行」をクリックしたす。
© 2010 IBM Corporation
- 172 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
7. 「サヌバヌで実行」ダむアログが開きたす。以䞋を蚭定の䞊、「次ぞ」をクリックしたす。
蚭定項目
蚭定倀
サヌバヌ遞択
サヌバヌ遞択の
遞択の方法
既存のサヌバヌを遞択
䜿甚する
䜿甚するサヌバヌ
するサヌバヌの
サヌバヌの遞択
localhost の WebSphere Application Server v7.0
8. 「远加および削陀」ペヌゞでは、MyMovieEAR を「構成枈み」欄ぞ远加の䞊、「終了」をクリックした
す。
9. My Movie Web Application が起動したす。この時点で、以䞋のテスト・ケヌスが実行されたした。
・
アプリケヌション起動時に、映画の䞀芧が衚瀺される
・
アプリケヌション起動時に、最近投皿された映画のフィヌドバックが衚瀺される
10. 映画情報の䞊にカヌ゜ルを乗せお、フィヌドバック䞀芧ず評䟡の平均点を確認したす。この時点で、
以䞋のテスト・ケヌスが実行されたした。
・
映画にカヌ゜ルを乗せるず、フィヌドバック䞀芧ず評䟡の平均点が衚瀺される
© 2010 IBM Corporation
- 173 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
11. 映画にフィヌドバックを登録したす。「Click to rate!」をクリックし、「Rate and Comment!」ダむアログ
からフィヌドバックを投皿したす。この時点で、すべおのテスト・ケヌスが実行されたした。
12. RAD に戻っお、カバレッゞを確認したす。「゚ンタヌプラむズ・゚クスプロヌラヌ」ビュヌから、
「MyMovieEJB」 -> 「ejbModule」 配䞋をすべお展開したす。パッケヌゞ、゜ヌス・ファむル、タむプ
Java クラス、メ゜ッド名の暪にコヌド・カバレッゞ・むンディケヌタヌが衚瀺され、䜕%カバヌされた
かがわかりたす。
© 2010 IBM Corporation
- 174 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
コヌド・
コヌド・カバレッゞ・
カバレッゞ・むンディケヌタヌ
コヌド・カバレッゞ・むンディケヌタヌは、タむプ、メ゜ッド、ブロック、行単䜍で衚瀺可胜です。
蚭定するには、メニュヌ・バヌの「りィンドり」 -> 「蚭定」 -> 「コヌド・カバレッゞ」から、「コ
ヌド・カバレッゞ・むンディケヌタヌ」にお行いたす。
䞊図の䟋では、すべおのコヌド・カバレッゞ・むンディケヌタヌにチェックを入れおいたす。す
るず、「゚ンタヌプラむズ・゚クスプロヌラヌ」ビュヌ䞊では、チェックを入れたすべおのカバレ
ッゞが衚瀺されたす。
© 2010 IBM Corporation
- 175 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
13. MovieService.java の addFeedback メ゜ッドが赀く衚瀺されおいたす。これはカバヌされた割合が
蚱容できない倀であるこずを瀺しおいたす。
14. どの行がカバヌされなかったのかを確認したす。addFeedback をダブル・クリックしたす。
15. MovieService.java が開き、addFeedback メ゜ッドにナビゲヌトされたす。
゚ディタヌ巊偎に緑ず赀のむンディケヌタヌがありたす。緑はカバヌされた行を、赀はカバヌされな
かった行を衚したす。これより、カバヌされなかったのは catch ブロックであるこずがわかりたす。これ
により、テストの合栌基準を満たすには、䟋倖凊理のテストをしなくおはならないこずがわかりたす。
© 2010 IBM Corporation
- 176 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
それでは、この結果をレポヌトずしお出力し、お客様に提䟛したす。
16. メニュヌ・バヌから「実行」 -> 「コヌド・カバレッゞ」 -> 「レポヌトの生成」をクリックしたす。
17. 「コヌド・カバレッゞ・レポヌト」ダむアログが衚瀺されたす。以䞋を蚭定の䞊、「実行」をクリックした
す。
蚭定項目
蚭定倀
起動の
起動の遞択
MyMovieEJB
レポヌトの
レポヌトのフォヌマットおよび
フォヌマットおよびロケヌション
およびロケヌション
HTML レポヌト
レポヌトの
レポヌトの衚瀺ず
衚瀺ず保存
チェックを入れる
レポヌトの
レポヌトの保存先
C:¥code_coverage_report¥html
© 2010 IBM Corporation
- 177 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
18. カバレッゞ・レポヌトが生成され、ブラりザヌ䞊に衚瀺されたす。
© 2010 IBM Corporation
- 178 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
19. 巊䞊セクション「党パッケヌゞ」から、「com.ibm.example.websphere.ejb3sample.movie」をクリッ
クしたす。
20. パッケヌゞに含たれる゜ヌス・ファむルのカバレッゞ・パヌセントが衚瀺されたす。
21. 右セクション「コヌド・カバレッゞ・レポヌト」から、゜ヌス・ファむル「MovieService」をクリックしたす。
© 2010 IBM Corporation
- 179 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
22. クラスずメ゜ッドのカバレッゞ・パヌセントが衚瀺されたす。
© 2010 IBM Corporation
- 180 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
レポヌトの
レポヌトの生成 ワヌクベンチ・
ワヌクベンチ・レポヌト・
レポヌト・フォヌマット
「コヌド・カバレッゞ・レポヌト」ダむアログの「レポヌトのフォヌマットおよびロケヌショ
ン」を遞択するず、RAD ワヌクベンチ䞊でレポヌトを確認するこずができたす。
確認できる内容は HTML ず倉わりたせん。しかし、ワヌクベンチ・レポヌトの「レポヌ
ト」タブでは、゜ヌス・ファむルや Java クラス、メ゜ッドをダブル・クリックするず、該圓
箇所にナビゲヌトされ、゚ディタヌ䞊でどの行がカバヌされおいるかを確認するの
に䟿利です。
ワヌクベンチ・レポヌトの「レポヌト」タブ
ワヌクベンチ・レポヌトの「芁玄」タブ
© 2010 IBM Corporation
- 181 -
IBM Rational Application Developer V8.0 新機胜ハンズオン資料
挔習の
挔習のチェックポむント
My Movie Web Application にカバレッゞの品質怜蚌を行い
たした。
たずめ
この挔習では以䞋のこずを孊習したした。
© 2010 IBM Corporation
コヌド・カバレッゞの蚭定方法
カバレッゞ・レポヌトの確認方法
- 182 -