JAVAEE 6             FIRST APPLICATION                #GLASSFISHJP12年6月4日月曜日
JavaEE6作りやすくなったよと  いう話はたくさん聞くけど12年6月4日月曜日
実は作ったことがない12年6月4日月曜日
そんな人向け     軽い気持ちで見て下さい。12年6月4日月曜日
自己紹介  • 名前:久保智(@megascus)  • Javaが好きらしい  • JavaEE6は趣味でやってます!  • JavaEE6でSIの現場が楽になればいいなとか12年6月4日月曜日
アジェンダ  • サンプルアプリを作成  • サンプルアプリにそって説明12年6月4日月曜日
今回作るアプリの説明  • 基本のCreate,Read,Update,Delete   ネタバレ禁止。12年6月4日月曜日
早速作ってみる      https://github.com/megascus/      JavaEE6FisrtApplication12年6月4日月曜日
出来上がったファイル一覧  web.xml                UI   beans.xml           DB  faces-config.xml             persistence.xml  template.xh...
UI(VIEW)から順番に  web.xml                  beans.xml  faces-config.xml          persistence.xml  template.xhtml           Mess...
UI (JSF)  • JavaEE6の標準UI技術はJSF2.0  • JavaScript書けなくてもリッチなUIが作成できる  • いろいろな所で感じるStruts臭()   Struts知ってれば使えるよ。12年6月4日月曜日
UI系の設定ファイル   必要になるまでいじらない。12年6月4日月曜日
web.xml  • 言わずと知れたJavaで作ったWebアプリのコアファイル  • セッションのタイムアウト時間とか設定できるよ!  • 今回はデフォルトで設定     困ったときに修正してね。12年6月4日月曜日
faces-config.xml  • JSFの設定ファイル。struts-configみたいなもの  • JSF1.Xでは超重要だったけど今は空気(にしたい)  • 国際化対応時は使用する   画面数が増えてきても使う。12年6月4日月曜日
XHTMLファイル   Viewをデザインします。12年6月4日月曜日
XHTML  • JSFのViewはXHTMLで記載  • XHTMLなので色々と面倒くさい    <BR> → <BR /> とか   HTMLが雑すぎるとも言う。12年6月4日月曜日
XHTML(こんなのがあった)  template.xhtml  Create.xhtml  Edit.xhtml  List.xhtml  View.xhtml   中身を実際に見てみる。12年6月4日月曜日
その前に基礎知識  今のUI作成は全体のデザインと画面ごとに変更できる場  所を分けて定義するのが当たり前。  • template.xhtmlにデザインを記載  • それ以外に個々の機能を記載   昔はFrameを使ってました。12年6月4日...
その前に基礎知識 複数の画面を作る場合メニューは同じ 場合が多いので使いまわしたい。12年6月4日月曜日
template.xhtml   デザイン定義してます。12年6月4日月曜日
template.xhtml     使用するタグを定義。     使用したいタグがあれば追加。12年6月4日月曜日
template.xhtml    h:XX、ui:XXみたいなのがJSFで記載さ   れたところ。   実行時にはHTMLに変換される。12年6月4日月曜日
template.xhtml   ctrl+spaceで補完と説明が出てくる。   必要なら見てね。12年6月4日月曜日
template.xhtml  ui:insertの中身だけ各画面で書く。  name属性は説明必要?12年6月4日月曜日
Create.xhtml   長いのでこの後は抜粋で。12年6月4日月曜日
Create.xhtml   ui:composition でテンプレート   を指定。   ui:defineでui:insertの置換。12年6月4日月曜日
#{bundle.XXXX}の説明                     Create.xhtml                     faces-config.xml Bundle.properties   いわゆる国際化対応。12年6...
#{bundle.XXXX}以外の説明  • value    binding  • method     binding  #から始まるやつです。12年6月4日月曜日
value binding  • 画面の値をJavaにマッピングする   bundle.XXXもこれと一緒。   managed-bean(JavaBeans)やmapな   どをマッピングできます。12年6月4日月曜日
method binding  • 画面の操作をJavaにマッピングする   h:commandLinkは<a href=~>に変換され   るので、リンクが押されるとセッショ   ンに入っているMessageControllerクラス   の...
commandLinkのaction  • 拡張子を除いてURLを書いておけば他のページに遷移  immediate=”true”はサーバーサイドで値  を使わないという意味。12年6月4日月曜日
Create.xhtml以外  • 省略  Create.xhtmlの説明で十分でした。12年6月4日月曜日
jsfcrud.css  • cssを知らない人が居れば説明するので挙手して下さい  手を上げたやつ土下座な。12年6月4日月曜日
UI系のJavaファイル  web.xml                  beans.xml  faces-config.xml          persistence.xml  template.xhtml           Messa...
MessageController.java  • 画面から呼ばれるJavaのクラス  いわゆるmanaged-bean。12年6月4日月曜日
MessageController.java  アノテーションがついてます。12年6月4日月曜日
MessageController.java@ManagedBeanで画面から扱うクラスとして定義。nameでXHTMLから使用する場合の名前をつける@SessionScopedでセッションに保存すると定義  method bindingの時に...
MessageController.java メソッドが呼ばれた時に nullだと同じ画面、それ以 外の場合はURLとして画面 移動する faces-config.xmlで指定されてる場合は そちらの設定が優先されます。12年6月4日月曜日
PaginationHelper.java  • List.xhtmlで実装されているページャー用 ページャーを作りたかったら見て下 さい。ちなみにクラス名は間違えてな いです。12年6月4日月曜日
JsfUtils.java  • JSFでやり方のわかりにくいアレやらコレやら  • これ自体よりも内部で呼ばれているクラスが重要 JSFで困ったらここから呼ばれている クラスで出来ないかを調べる。12年6月4日月曜日
JsfUtils.java  • FacesContext  • ExternalContext  • Converter エトセトラエトセトラ。全部説明した いがスライドの余白が足りない。12年6月4日月曜日
エラーメッセージの表示だけ                      JsfUtils.java                      Create.xhtml   strutsで見たことがあるような・・・12年6月4日月曜日
次はDB系  web.xml                  beans.xml  faces-config.xml          persistence.xml  template.xhtml           Message.java...
beans.xml  • CDI(今回未使用)のための設定ファイル  • CDIが有効化される条件はこのファイルがあること  • CDIの有効化方法が判りにくいので紹介だけ DB系として紹介しているけどDBとは 関係ないです。12年6月4日月曜日
DB系の設定ファイル   persistence.xml だけ。12年6月4日月曜日
persistence.xml  • DB接続用定義ファイル  • NetBeansからGUIで設定できる GUIからの設定がオススメ。12年6月4日月曜日
persistence.xml 接続性ユニット名は適当に変えてね。12年6月4日月曜日
データソースについて   • GlassFishの管理コンソールで設定したものを使用する   • 今回は最初から定義されているjdbc/__defaultを使用 詳細は優しい人がtweetしてくれます。12年6月4日月曜日
Message.java  • いわゆるエンティティと呼ばれるもの  • RDBのテーブルと対応する  • コレを元にテーブルが自動生成される エンティティにDBの値が保持されて います。12年6月4日月曜日
Message.java フィールドの値は何もつけなくてもDBに 保存されます。messageとか。12年6月4日月曜日
Message.java エンティティにするためには@Entityアノ テーションを付けてSerializableを implementsするだけです。 エディタを使って新規作成すれば勝手に ついてくるよ。12年6月4日月曜日
Message.java DBにおける主キーの設定です。JPA(O/R マッパー)を使う場合は通常は人工キー をつかいます。 思想的な話はHibernate in Actionを参照し て下さい。12年6月4日月曜日
Message.java GeneratedValueは自動採番の設定です が、採番の仕方によって保守時の難易度 が段違いなので使う時はよく考えて。12年6月4日月曜日
その他詳しい話は 今までの話、全部これ読めで済みます。12年6月4日月曜日
MessageFacade.java  • EJB EJBという言葉を聞くと動悸や息切れ、 めまい等の諸症状が現れる方はお気を つけ下さい。12年6月4日月曜日
MessageFacade.java  • EJB内ではデータベースのトランザクション管理をス    レッドに紐付ける形で勝手にやってくれる  • commitとかrollbackは不要 EJBというかJTAですけどね。12年6月4日月曜日
MessageFacade.java  • この中でデータベースへエンティティの値が同期され    る  • トランザクション管理が必要な処理はこの中で EJBの外でも同じ事は出来ますが、EJB の中でやったほうが便利です。12年6月4日月曜日
MessageFacade.java  • この中でデータベースへエンティティの値が同期され    る  • トランザクション管理が必要な処理はこの中で EJBの外でも同じ事は出来ますが、EJB の中でやったほうが便利です。12年6月4日月曜日
MessageFacade.java @StatelessアノテーションがEJBの印。 @Statefulアノテーションもあります が、差は割愛。12年6月4日月曜日
MessageFacade.java @PersistenceContextのunitNameには persistence.xml で指定した持続性Unit名 を入れます。12年6月4日月曜日
MessageFacade.java そうするとEntityManagerのインスタン スがGlassFishから渡されて、DBにアク セスすることが出来るようになりま す。 DBのアクセスにはEntityManagerを使用 します。12年6...
MessageFacade.java 本体はAbstractFacadeなのでそちらをみ ます。12年6月4日月曜日
AbstractFacade.java まずはCRUDから。12年6月4日月曜日
AbstractFacade.java(CRUD)  Create getEntityManager().merge(entity)を呼び出 しても同じ結果になります。12年6月4日月曜日
AbstractFacade.java(CRUD)  Read(一件) id(Primary Key)を指定して1件取得して います。 複数件の場合は後ほど。12年6月4日月曜日
AbstractFacade.java(CRUD)  Update getEntityManager().persist(entity)を呼び出 すと失敗します。12年6月4日月曜日
AbstractFacade.java(CRUD)  Delete ちょっと変な感じがしますがお約束。 どうしてこうなるかはBeginning Java EE 6を読んで下さい!12年6月4日月曜日
AbstractFacade.java(CRUD)  Read(複数件) 複数件取得する場合はCriteriaかJPQLを 使います。上の例はCriteria。12年6月4日月曜日
AbstractFacade.java(CRUD)  Criteria Criteriaはコンパイラによって静的 チェックが出来ますが複雑になると面 倒くさい・・・・・12年6月4日月曜日
AbstractFacade.java(CRUD)  JPQL(今回アプリでは未使用) JPQLはSQLライクなクエリ言語で、コ ンパイラにによるチェックは出来ない けれども、簡単です。12年6月4日月曜日
AbstractFacade.java(CRUD)  Criteria×JPQL 書き比べてみました。12年6月4日月曜日
MessageFacade.java  最後にEJBの呼び出し方について  MessageControllerクラスから呼び出される やっと最後。12年6月4日月曜日
MessageController.java @EJBアノテーションを付けてインスタ ンスを生成します。new でインスタン スを生成しても正しく動作しません。 GlassFishがよろしくやってくれてます。12年6月4日月曜日
今回のアプリの処理の流れ               XHTML(画面)       MessageController(managed-bean)                                         Message...
その他詳しい話は ご清聴ありがとうございました。12年6月4日月曜日
Upcoming SlideShare
Loading in...5
×

JavaEE6 First Application #glassfishjp

2,190

Published on

2012/6/4
GlassFish Users Group Japan 勉強会 June 2012

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,190
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
19
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

JavaEE6 First Application #glassfishjp

  1. 1. JAVAEE 6 FIRST APPLICATION #GLASSFISHJP12年6月4日月曜日
  2. 2. JavaEE6作りやすくなったよと いう話はたくさん聞くけど12年6月4日月曜日
  3. 3. 実は作ったことがない12年6月4日月曜日
  4. 4. そんな人向け 軽い気持ちで見て下さい。12年6月4日月曜日
  5. 5. 自己紹介 • 名前:久保智(@megascus) • Javaが好きらしい • JavaEE6は趣味でやってます! • JavaEE6でSIの現場が楽になればいいなとか12年6月4日月曜日
  6. 6. アジェンダ • サンプルアプリを作成 • サンプルアプリにそって説明12年6月4日月曜日
  7. 7. 今回作るアプリの説明 • 基本のCreate,Read,Update,Delete ネタバレ禁止。12年6月4日月曜日
  8. 8. 早速作ってみる https://github.com/megascus/ JavaEE6FisrtApplication12年6月4日月曜日
  9. 9. 出来上がったファイル一覧 web.xml UI beans.xml DB faces-config.xml persistence.xml template.xhtml Message.java Create.xhtml MessageFacade.java Edit.xhtml AbstractFacade.java List.xhtml View.xhtml ※他は省略 jsfcrud.css Bundle.properties MessageController.java PaginationHelper.java JsfUtil.java12年6月4日月曜日
  10. 10. UI(VIEW)から順番に web.xml beans.xml faces-config.xml persistence.xml template.xhtml Message.java Create.xhtml MessageFacade.java Edit.xhtml AbstractFacade.java List.xhtml View.xhtml ※他は省略 jsfcrud.css Bundle.properties MessageController.java PaginationHelper.java JsfUtil.java12年6月4日月曜日
  11. 11. UI (JSF) • JavaEE6の標準UI技術はJSF2.0 • JavaScript書けなくてもリッチなUIが作成できる • いろいろな所で感じるStruts臭() Struts知ってれば使えるよ。12年6月4日月曜日
  12. 12. UI系の設定ファイル 必要になるまでいじらない。12年6月4日月曜日
  13. 13. web.xml • 言わずと知れたJavaで作ったWebアプリのコアファイル • セッションのタイムアウト時間とか設定できるよ! • 今回はデフォルトで設定 困ったときに修正してね。12年6月4日月曜日
  14. 14. faces-config.xml • JSFの設定ファイル。struts-configみたいなもの • JSF1.Xでは超重要だったけど今は空気(にしたい) • 国際化対応時は使用する 画面数が増えてきても使う。12年6月4日月曜日
  15. 15. XHTMLファイル Viewをデザインします。12年6月4日月曜日
  16. 16. XHTML • JSFのViewはXHTMLで記載 • XHTMLなので色々と面倒くさい <BR> → <BR /> とか HTMLが雑すぎるとも言う。12年6月4日月曜日
  17. 17. XHTML(こんなのがあった) template.xhtml Create.xhtml Edit.xhtml List.xhtml View.xhtml 中身を実際に見てみる。12年6月4日月曜日
  18. 18. その前に基礎知識 今のUI作成は全体のデザインと画面ごとに変更できる場 所を分けて定義するのが当たり前。 • template.xhtmlにデザインを記載 • それ以外に個々の機能を記載 昔はFrameを使ってました。12年6月4日月曜日
  19. 19. その前に基礎知識 複数の画面を作る場合メニューは同じ 場合が多いので使いまわしたい。12年6月4日月曜日
  20. 20. template.xhtml デザイン定義してます。12年6月4日月曜日
  21. 21. template.xhtml 使用するタグを定義。 使用したいタグがあれば追加。12年6月4日月曜日
  22. 22. template.xhtml h:XX、ui:XXみたいなのがJSFで記載さ れたところ。 実行時にはHTMLに変換される。12年6月4日月曜日
  23. 23. template.xhtml ctrl+spaceで補完と説明が出てくる。 必要なら見てね。12年6月4日月曜日
  24. 24. template.xhtml ui:insertの中身だけ各画面で書く。 name属性は説明必要?12年6月4日月曜日
  25. 25. Create.xhtml 長いのでこの後は抜粋で。12年6月4日月曜日
  26. 26. Create.xhtml ui:composition でテンプレート を指定。 ui:defineでui:insertの置換。12年6月4日月曜日
  27. 27. #{bundle.XXXX}の説明 Create.xhtml faces-config.xml Bundle.properties いわゆる国際化対応。12年6月4日月曜日
  28. 28. #{bundle.XXXX}以外の説明 • value binding • method binding #から始まるやつです。12年6月4日月曜日
  29. 29. value binding • 画面の値をJavaにマッピングする bundle.XXXもこれと一緒。 managed-bean(JavaBeans)やmapな どをマッピングできます。12年6月4日月曜日
  30. 30. method binding • 画面の操作をJavaにマッピングする h:commandLinkは<a href=~>に変換され るので、リンクが押されるとセッショ ンに入っているMessageControllerクラス のcreateメソッドが呼ばれます。12年6月4日月曜日
  31. 31. commandLinkのaction • 拡張子を除いてURLを書いておけば他のページに遷移 immediate=”true”はサーバーサイドで値 を使わないという意味。12年6月4日月曜日
  32. 32. Create.xhtml以外 • 省略 Create.xhtmlの説明で十分でした。12年6月4日月曜日
  33. 33. jsfcrud.css • cssを知らない人が居れば説明するので挙手して下さい 手を上げたやつ土下座な。12年6月4日月曜日
  34. 34. UI系のJavaファイル web.xml beans.xml faces-config.xml persistence.xml template.xhtml Message.java Create.xhtml MessageFacade.java Edit.xhtml AbstractFacade.java List.xhtml View.xhtml ※他は省略 jsfcrud.css Bundle.properties MessageController.java PaginationHelper.java JsfUtil.java12年6月4日月曜日
  35. 35. MessageController.java • 画面から呼ばれるJavaのクラス いわゆるmanaged-bean。12年6月4日月曜日
  36. 36. MessageController.java アノテーションがついてます。12年6月4日月曜日
  37. 37. MessageController.java@ManagedBeanで画面から扱うクラスとして定義。nameでXHTMLから使用する場合の名前をつける@SessionScopedでセッションに保存すると定義 method bindingの時に間違った説明が あったので誰かがtweetで突っ込んで くれているはず。12年6月4日月曜日
  38. 38. MessageController.java メソッドが呼ばれた時に nullだと同じ画面、それ以 外の場合はURLとして画面 移動する faces-config.xmlで指定されてる場合は そちらの設定が優先されます。12年6月4日月曜日
  39. 39. PaginationHelper.java • List.xhtmlで実装されているページャー用 ページャーを作りたかったら見て下 さい。ちなみにクラス名は間違えてな いです。12年6月4日月曜日
  40. 40. JsfUtils.java • JSFでやり方のわかりにくいアレやらコレやら • これ自体よりも内部で呼ばれているクラスが重要 JSFで困ったらここから呼ばれている クラスで出来ないかを調べる。12年6月4日月曜日
  41. 41. JsfUtils.java • FacesContext • ExternalContext • Converter エトセトラエトセトラ。全部説明した いがスライドの余白が足りない。12年6月4日月曜日
  42. 42. エラーメッセージの表示だけ JsfUtils.java Create.xhtml strutsで見たことがあるような・・・12年6月4日月曜日
  43. 43. 次はDB系 web.xml beans.xml faces-config.xml persistence.xml template.xhtml Message.java Create.xhtml MessageFacade.java Edit.xhtml AbstractFacade.java List.xhtml View.xhtml ※他は省略 jsfcrud.css Bundle.properties MessageController.java PaginationHelper.java JsfUtil.java12年6月4日月曜日
  44. 44. beans.xml • CDI(今回未使用)のための設定ファイル • CDIが有効化される条件はこのファイルがあること • CDIの有効化方法が判りにくいので紹介だけ DB系として紹介しているけどDBとは 関係ないです。12年6月4日月曜日
  45. 45. DB系の設定ファイル persistence.xml だけ。12年6月4日月曜日
  46. 46. persistence.xml • DB接続用定義ファイル • NetBeansからGUIで設定できる GUIからの設定がオススメ。12年6月4日月曜日
  47. 47. persistence.xml 接続性ユニット名は適当に変えてね。12年6月4日月曜日
  48. 48. データソースについて • GlassFishの管理コンソールで設定したものを使用する • 今回は最初から定義されているjdbc/__defaultを使用 詳細は優しい人がtweetしてくれます。12年6月4日月曜日
  49. 49. Message.java • いわゆるエンティティと呼ばれるもの • RDBのテーブルと対応する • コレを元にテーブルが自動生成される エンティティにDBの値が保持されて います。12年6月4日月曜日
  50. 50. Message.java フィールドの値は何もつけなくてもDBに 保存されます。messageとか。12年6月4日月曜日
  51. 51. Message.java エンティティにするためには@Entityアノ テーションを付けてSerializableを implementsするだけです。 エディタを使って新規作成すれば勝手に ついてくるよ。12年6月4日月曜日
  52. 52. Message.java DBにおける主キーの設定です。JPA(O/R マッパー)を使う場合は通常は人工キー をつかいます。 思想的な話はHibernate in Actionを参照し て下さい。12年6月4日月曜日
  53. 53. Message.java GeneratedValueは自動採番の設定です が、採番の仕方によって保守時の難易度 が段違いなので使う時はよく考えて。12年6月4日月曜日
  54. 54. その他詳しい話は 今までの話、全部これ読めで済みます。12年6月4日月曜日
  55. 55. MessageFacade.java • EJB EJBという言葉を聞くと動悸や息切れ、 めまい等の諸症状が現れる方はお気を つけ下さい。12年6月4日月曜日
  56. 56. MessageFacade.java • EJB内ではデータベースのトランザクション管理をス レッドに紐付ける形で勝手にやってくれる • commitとかrollbackは不要 EJBというかJTAですけどね。12年6月4日月曜日
  57. 57. MessageFacade.java • この中でデータベースへエンティティの値が同期され る • トランザクション管理が必要な処理はこの中で EJBの外でも同じ事は出来ますが、EJB の中でやったほうが便利です。12年6月4日月曜日
  58. 58. MessageFacade.java • この中でデータベースへエンティティの値が同期され る • トランザクション管理が必要な処理はこの中で EJBの外でも同じ事は出来ますが、EJB の中でやったほうが便利です。12年6月4日月曜日
  59. 59. MessageFacade.java @StatelessアノテーションがEJBの印。 @Statefulアノテーションもあります が、差は割愛。12年6月4日月曜日
  60. 60. MessageFacade.java @PersistenceContextのunitNameには persistence.xml で指定した持続性Unit名 を入れます。12年6月4日月曜日
  61. 61. MessageFacade.java そうするとEntityManagerのインスタン スがGlassFishから渡されて、DBにアク セスすることが出来るようになりま す。 DBのアクセスにはEntityManagerを使用 します。12年6月4日月曜日
  62. 62. MessageFacade.java 本体はAbstractFacadeなのでそちらをみ ます。12年6月4日月曜日
  63. 63. AbstractFacade.java まずはCRUDから。12年6月4日月曜日
  64. 64. AbstractFacade.java(CRUD) Create getEntityManager().merge(entity)を呼び出 しても同じ結果になります。12年6月4日月曜日
  65. 65. AbstractFacade.java(CRUD) Read(一件) id(Primary Key)を指定して1件取得して います。 複数件の場合は後ほど。12年6月4日月曜日
  66. 66. AbstractFacade.java(CRUD) Update getEntityManager().persist(entity)を呼び出 すと失敗します。12年6月4日月曜日
  67. 67. AbstractFacade.java(CRUD) Delete ちょっと変な感じがしますがお約束。 どうしてこうなるかはBeginning Java EE 6を読んで下さい!12年6月4日月曜日
  68. 68. AbstractFacade.java(CRUD) Read(複数件) 複数件取得する場合はCriteriaかJPQLを 使います。上の例はCriteria。12年6月4日月曜日
  69. 69. AbstractFacade.java(CRUD) Criteria Criteriaはコンパイラによって静的 チェックが出来ますが複雑になると面 倒くさい・・・・・12年6月4日月曜日
  70. 70. AbstractFacade.java(CRUD) JPQL(今回アプリでは未使用) JPQLはSQLライクなクエリ言語で、コ ンパイラにによるチェックは出来ない けれども、簡単です。12年6月4日月曜日
  71. 71. AbstractFacade.java(CRUD) Criteria×JPQL 書き比べてみました。12年6月4日月曜日
  72. 72. MessageFacade.java 最後にEJBの呼び出し方について MessageControllerクラスから呼び出される やっと最後。12年6月4日月曜日
  73. 73. MessageController.java @EJBアノテーションを付けてインスタ ンスを生成します。new でインスタン スを生成しても正しく動作しません。 GlassFishがよろしくやってくれてます。12年6月4日月曜日
  74. 74. 今回のアプリの処理の流れ XHTML(画面) MessageController(managed-bean) Message(Entity)で値をやり取り MessageFacade(EJB) EntityManager(DB) おおざっぱにこんな順に呼ばれてま した。12年6月4日月曜日
  75. 75. その他詳しい話は ご清聴ありがとうございました。12年6月4日月曜日
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×