jsf アプリ作ったった

25
JSF アアアアアアアア EE アアアアアアアアアア2014/08/23 西 WildFly 8( ア JBoss AS) アアア @shinsukeoda

Upload: oda-shinsuke

Post on 28-May-2015

992 views

Category:

Technology


4 download

DESCRIPTION

2014/08/23 関西WildFly 8(旧JBoss AS)勉強会 http://connpass.com/event/7529/

TRANSCRIPT

Page 1: Jsf アプリ作ったった

JSF アプリ作ったった ~ EE サーバー載せかえ祭り

~2014/08/23 関西 WildFly 8( 旧 JBoss AS) 勉強会

@shinsukeoda

Page 2: Jsf アプリ作ったった

自己紹介

• 織田 信亮 @shinsukeoda

• 大阪で開発者やってます• http://odashinsuke.hatenablog.com

• SQLWorld http://sqlworld.org/

Micorsoft MVP for SQL Server

2012/10 ~ 2014/09

Page 3: Jsf アプリ作ったった

アジェンダ

• なぜ JSF なのか• GlassFish 4.0 に載せる• WildFly 8.0.0 に載せ替え• WildFly 8.1.0 に載せ替え• おまけ (JDBC Driver for SQL Server)

Shinsuke Oda
Page 4: Jsf アプリ作ったった

なぜ JSF なのか

Page 5: Jsf アプリ作ったった

RDB を使う シンプルな Web アプリ

• Struts や Seasar からの脱却• 今後 Java8 対応の新機能とか入らなさそうだし…

• Spring/Grails/Play/Java EE どれにしようか• でかい ORM はあんまり好きくない• JPA/.NET Entity Framework 等々

• 諸々の事情で言語は Java (Xtend) が都合よさげ• どうせなら 標準のが良くね?

Shinsuke Oda
Page 6: Jsf アプリ作ったった

選ばれたのは Java EE でした

Shinsuke Oda
Page 7: Jsf アプリ作ったった

JavaEE 使うとして何で作る?

• 一般的なギョームアプリを作るときに…• Pure Servlet + JSP

• JavaEE 感が無い• JAX-RS + テンプレートエンジン• 標準っぽくない ( 偏見? )

• JSF

• そのままで使えそう

Shinsuke Oda
Page 8: Jsf アプリ作ったった

使ったやつら

• JSF + PrimeFaces4.0 => PrimeFaces5.0

• CDI

• Bean Validation (JSF の Validation では使わない )

• JTA (JPA は無し )

• Doma1 => Doma2

• Java7 + Xtend => Java8

Shinsuke Oda
Page 9: Jsf アプリ作ったった

使ったやつら

• トランザクションは、リクエスト 単位では無く メソッド 単位• @Transactional 使いたかった => JTA

• FlowScoped(Faces Flows) は微妙• 要件に合わなかった

• JSF の Validation に Bean Validation はまだ早い感• Default Group しか対応してない (OmniFaces つかったらいける? )

• JSF の Validation は使わずに CDI の interceptor で UI にエラー通知

Page 10: Jsf アプリ作ったった

GlassFish 4.0 に載せる

Page 11: Jsf アプリ作ったった

当時 EE7 サーバーが GlassFish 4.0 しか無かった

• JTA の @Transactional が上手く動かない• JPA 使った場合は、上手く動いたので 何か設定ファイル等の問題?

• XADataSource が上手く取れてなかった?• CDI の interceptor を使った Doma の Local Transaction で対応

• Local Transaction を使いたい箇所と使いたくない箇所が混在

• xmlns:f=“http://xmlns.jcp.org/jsf/core” が動かない• http://java.sun.com/jsf/core に変えるか、 javax.faces.jar を差し

替え

Page 12: Jsf アプリ作ったった

GlassFish 4.0 に陰りが…

• Oracle の (4.1 からの ) 商用サポート予定が打ち切り• 他に選択肢無いし別に良いけど…• 悪い話しが目につくように…

• そんな時 WildFly8.0.0 Final が登場!• ついでに Java8 も同時期に登場!• さらに Doma2 も!

Page 13: Jsf アプリ作ったった

WildFly 8.0.0 に載せ替え

Page 14: Jsf アプリ作ったった

WildFly 8.0.0 Final に載せ替え

• glassfish-web.xml => jboss-web.xml• 設定してる内容は違うけど…

• JTA の @Transactional がちゃんと動いた!• interceptor 使った 似非 Transactional から移行

• javax.facex.jar を差し替えなくても OK

• Java8 もほぼ問題無し!

Page 15: Jsf アプリ作ったった

WildFly 8.0.0 Final に載せ替え ( ダメな所 )

• Java8 の interface に static method 実装すると CDI でエラー• Weld の問題 (https://issues.jboss.org/browse/WELD-1664)

• @nekop さんが直してくれました!• Weld 2.2.1 で直ってるけど、諸々の事情で WildFly には載ってない…

• StereoType で CDI の Scoped を指定しても効かない• CDI のデプロイエラー• 仕様?不具合?

Page 16: Jsf アプリ作ったった

ついでにやった事

• Java7 + Xtend => Java8 + Lombok

• 若干不満もあるが、まあそれなりに• Java8 + Xtend ってのもありかも

• Xtend のラムダが Java8 ラムダに置き換わってくれたら迷わずGO

• Gradle + Doma + Lombok は apt の順番等でハマる

• Doma1 => Doma2• Optional/Date and Time API 対応は良いね!

Page 17: Jsf アプリ作ったった

Java8 にして困ったこと

• UI(JSF) 側が Date and Time API に対応していない• 自前で Converter 用意• Doma の Domain クラスも Converter 書かないとダメなの

でしゃーない

• Optional が Serializable じゃないので使いどころに注意• そのくらいであまり困らなかった

Page 18: Jsf アプリ作ったった

WildFly 8.1.0 に載せ替え

Page 19: Jsf アプリ作ったった

WildFly 8.1.0 Final に載せ替え

• CDI の ViewScoped が Serializable じゃないとダメになった!• 仕様?今まで動いてた方が問題?

• StereoType で CDI の Scoped を指定しても効かない• 8.0.0 から引き続き

• Java8 interface static method 問題はそのまま• 8.2 or 9.0.0 Final で Weld のバージョンを上げる

https://issues.jboss.org/browse/WFLY-3601

• GlassFish が 4.0.1 で Weld のバージョンを上げるhttps://java.net/jira/browse/GLASSFISH-20922

Page 20: Jsf アプリ作ったった

WildFly 8.1.0 Final に載せ替え ( 困った所 )

今の所無し!

Page 21: Jsf アプリ作ったった

WildFly 8.1.0 Final で起きた問題 ( 他サーバー未検証 )

• src/main/resources に 日本語のファイルがあると デプロイエラーERROR [org.jboss.as.controller.management-operation] (DeploymentScanner-threads - 2) JBAS014613: Operation ("full-replace-deployment") failed - address: ([]) - failure description: {"JBAS014671: Failed services" => {"jboss.deployment.unit.\"stereotypetest.war\".STRUCTURE" => "org.jboss.msc.service.StartException in service jboss.deployment.unit.\"stereotypetest.war\".STRUCTURE: JBAS018733: Failed to process phase STRUCTURE of deployment \"stereotypetest.war\" Caused by: java.lang.IllegalArgumentException: MALFORMED"}}

Page 22: Jsf アプリ作ったった

おまけ(JDBC Driver for SQL

Server)

Page 23: Jsf アプリ作ったった

SQL Server との組み合わせ

• SQL Server 2014 が 4 月に出たけど、 JDBC Driver 繋がるの?• 最新 (4.0) はサポートしています

• Microsoft Azure の SQL Database はどうなん?• 最新 (4.0) はサポートしています

• SQL Server JDBC Driver は、 Java8 な EE サーバーで使えるの?• とりあえず動くけどサポート外です• EE サーバーっていうより、 Java8 がサポート外 (JRE 7 までが対象 )

Page 25: Jsf アプリ作ったった

Java8 + JavaEE7WildFly( + SQL Server)

どんどん試してみましょう!