javaee6 first application #glassfishjp

Post on 17-Jun-2015

2.126 Views

Category:

Technology

3 Downloads

Preview:

Click to see full reader

DESCRIPTION

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

TRANSCRIPT

JAVAEE 6FIRST APPLICATION#GLASSFISHJP

12年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日月曜日

出来上がったファイル一覧web.xmlfaces-config.xmltemplate.xhtmlCreate.xhtmlEdit.xhtmlList.xhtmlView.xhtmljsfcrud.cssBundle.propertiesMessageController.javaPaginationHelper.javaJsfUtil.java

beans.xmlpersistence.xmlMessage.javaMessageFacade.javaAbstractFacade.java

※他は省略

UI DB

12年6月4日月曜日

UI(VIEW)から順番にweb.xmlfaces-config.xmltemplate.xhtmlCreate.xhtmlEdit.xhtmlList.xhtmlView.xhtmljsfcrud.cssBundle.propertiesMessageController.javaPaginationHelper.javaJsfUtil.java

beans.xmlpersistence.xmlMessage.javaMessageFacade.javaAbstractFacade.java

※他は省略

12年6月4日月曜日

• JavaEE6の標準UI技術はJSF2.0

• JavaScript書けなくてもリッチなUIが作成できる

•いろいろな所で感じるStruts臭()

UI (JSF)

Struts知ってれば使えるよ。

12年6月4日月曜日

UI系の設定ファイル

必要になるまでいじらない。

12年6月4日月曜日

•言わずと知れたJavaで作ったWebアプリのコアファイル

•セッションのタイムアウト時間とか設定できるよ!

•今回はデフォルトで設定

web.xml

困ったときに修正してね。

12年6月4日月曜日

faces-config.xml

• JSFの設定ファイル。struts-configみたいなもの

• JSF1.Xでは超重要だったけど今は空気(にしたい)

•国際化対応時は使用する

画面数が増えてきても使う。

12年6月4日月曜日

XHTMLファイル

Viewをデザインします。

12年6月4日月曜日

• JSFのViewはXHTMLで記載

• XHTMLなので色々と面倒くさい <BR> → <BR /> とか

XHTML

HTMLが雑すぎるとも言う。

12年6月4日月曜日

XHTML(こんなのがあった)

中身を実際に見てみる。

template.xhtmlCreate.xhtmlEdit.xhtmlList.xhtmlView.xhtml

12年6月4日月曜日

その前に基礎知識

• template.xhtmlにデザインを記載

•それ以外に個々の機能を記載

今のUI作成は全体のデザインと画面ごとに変更できる場所を分けて定義するのが当たり前。

昔は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}の説明

いわゆる国際化対応。

Bundle.propertiesfaces-config.xml

Create.xhtml

12年6月4日月曜日

#{bundle.XXXX}以外の説明

#から始まるやつです。

• value binding

• method binding

12年6月4日月曜日

value binding

bundle.XXXもこれと一緒。

managed-bean(JavaBeans)やmapなどをマッピングできます。

•画面の値をJavaにマッピングする

12年6月4日月曜日

method binding

h:commandLinkは<a href=~>に変換されるので、リンクが押されるとセッションに入っているMessageControllerクラスのcreateメソッドが呼ばれます。

•画面の操作をJavaにマッピングする

12年6月4日月曜日

commandLinkのaction

immediate=”true”はサーバーサイドで値を使わないという意味。

•拡張子を除いてURLを書いておけば他のページに遷移

12年6月4日月曜日

Create.xhtml以外

Create.xhtmlの説明で十分でした。

•省略

12年6月4日月曜日

jsfcrud.css

手を上げたやつ土下座な。

• cssを知らない人が居れば説明するので挙手して下さい

12年6月4日月曜日

UI系のJavaファイルweb.xmlfaces-config.xmltemplate.xhtmlCreate.xhtmlEdit.xhtmlList.xhtmlView.xhtmljsfcrud.cssBundle.propertiesMessageController.javaPaginationHelper.javaJsfUtil.java

beans.xmlpersistence.xmlMessage.javaMessageFacade.javaAbstractFacade.java

※他は省略

12年6月4日月曜日

MessageController.java

いわゆるmanaged-bean。

•画面から呼ばれるJavaのクラス

12年6月4日月曜日

MessageController.java

アノテーションがついてます。

12年6月4日月曜日

MessageController.java

@ManagedBeanで画面から扱うクラスとして定義。name

でXHTMLから使用する場合の名前をつける

@SessionScopedでセッションに保存すると定義

method bindingの時に間違った説明があったので誰かがtweetで突っ込んでくれているはず。

12年6月4日月曜日

MessageController.java

faces-config.xmlで指定されてる場合はそちらの設定が優先されます。

メソッドが呼ばれた時にnullだと同じ画面、それ以外の場合はURLとして画面移動する

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日月曜日

エラーメッセージの表示だけ

strutsで見たことがあるような・・・

JsfUtils.java

Create.xhtml

12年6月4日月曜日

次はDB系web.xmlfaces-config.xmltemplate.xhtmlCreate.xhtmlEdit.xhtmlList.xhtmlView.xhtmljsfcrud.cssBundle.propertiesMessageController.javaPaginationHelper.javaJsfUtil.java

beans.xmlpersistence.xmlMessage.javaMessageFacade.javaAbstractFacade.java

※他は省略

12年6月4日月曜日

beans.xml

DB系として紹介しているけどDBとは関係ないです。

• CDI(今回未使用)のための設定ファイル

• CDIが有効化される条件はこのファイルがあること

• CDIの有効化方法が判りにくいので紹介だけ

12年6月4日月曜日

DB系の設定ファイル

persistence.xml だけ。

12年6月4日月曜日

persistence.xml

GUIからの設定がオススメ。

• DB接続用定義ファイル

• NetBeansからGUIで設定できる

12年6月4日月曜日

persistence.xml

接続性ユニット名は適当に変えてね。

12年6月4日月曜日

データソースについて

詳細は優しい人がtweetしてくれます。

• GlassFishの管理コンソールで設定したものを使用する

•今回は最初から定義されているjdbc/__defaultを使用

12年6月4日月曜日

Message.java

エンティティにDBの値が保持されています。

•いわゆるエンティティと呼ばれるもの

• RDBのテーブルと対応する

•コレを元にテーブルが自動生成される

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というかJTAですけどね。

• EJB内ではデータベースのトランザクション管理をスレッドに紐付ける形で勝手にやってくれる

• commitとかrollbackは不要

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月4日月曜日

MessageFacade.java

本体はAbstractFacadeなのでそちらをみます。

12年6月4日月曜日

AbstractFacade.java

まずはCRUDから。

12年6月4日月曜日

AbstractFacade.java(CRUD)

getEntityManager().merge(entity)を呼び出しても同じ結果になります。

Create

12年6月4日月曜日

AbstractFacade.java(CRUD)

id(Primary Key)を指定して1件取得しています。

複数件の場合は後ほど。

Read(一件)

12年6月4日月曜日

AbstractFacade.java(CRUD)

getEntityManager().persist(entity)を呼び出すと失敗します。

Update

12年6月4日月曜日

AbstractFacade.java(CRUD)

ちょっと変な感じがしますがお約束。どうしてこうなるかはBeginning Java EE

6を読んで下さい!

Delete

12年6月4日月曜日

AbstractFacade.java(CRUD)

複数件取得する場合はCriteriaかJPQLを使います。上の例はCriteria。

Read(複数件)

12年6月4日月曜日

AbstractFacade.java(CRUD)

Criteriaはコンパイラによって静的チェックが出来ますが複雑になると面倒くさい・・・・・

Criteria

12年6月4日月曜日

AbstractFacade.java(CRUD)

JPQLはSQLライクなクエリ言語で、コンパイラにによるチェックは出来ないけれども、簡単です。

JPQL(今回アプリでは未使用)

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)

MessageFacade(EJB)

EntityManager(DB)

Message(Entity)で値をやり取り

12年6月4日月曜日

その他詳しい話は

ご清聴ありがとうございました。

12年6月4日月曜日

top related