Your SlideShare is downloading. ×
JavaEE6 First Application #glassfishjp
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Saving this for later?

Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime - even offline.

Text the download link to your phone

Standard text messaging rates apply

JavaEE6 First Application #glassfishjp

2,060
views

Published on

2012/6/4 …

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,060
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
18
Comments
0
Likes
3
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

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