jsf アプリ作ったった
DESCRIPTION
2014/08/23 関西WildFly 8(旧JBoss AS)勉強会 http://connpass.com/event/7529/TRANSCRIPT
JSF アプリ作ったった ~ EE サーバー載せかえ祭り
~2014/08/23 関西 WildFly 8( 旧 JBoss AS) 勉強会
@shinsukeoda
自己紹介
• 織田 信亮 @shinsukeoda
• 大阪で開発者やってます• http://odashinsuke.hatenablog.com
• SQLWorld http://sqlworld.org/
Micorsoft MVP for SQL Server
2012/10 ~ 2014/09
アジェンダ
• なぜ JSF なのか• GlassFish 4.0 に載せる• WildFly 8.0.0 に載せ替え• WildFly 8.1.0 に載せ替え• おまけ (JDBC Driver for SQL Server)
なぜ JSF なのか
RDB を使う シンプルな Web アプリ
• Struts や Seasar からの脱却• 今後 Java8 対応の新機能とか入らなさそうだし…
• Spring/Grails/Play/Java EE どれにしようか• でかい ORM はあんまり好きくない• JPA/.NET Entity Framework 等々
• 諸々の事情で言語は Java (Xtend) が都合よさげ• どうせなら 標準のが良くね?
選ばれたのは Java EE でした
JavaEE 使うとして何で作る?
• 一般的なギョームアプリを作るときに…• Pure Servlet + JSP
• JavaEE 感が無い• JAX-RS + テンプレートエンジン• 標準っぽくない ( 偏見? )
• JSF
• そのままで使えそう
使ったやつら
• JSF + PrimeFaces4.0 => PrimeFaces5.0
• CDI
• Bean Validation (JSF の Validation では使わない )
• JTA (JPA は無し )
• Doma1 => Doma2
• Java7 + Xtend => Java8
使ったやつら
• トランザクションは、リクエスト 単位では無く メソッド 単位• @Transactional 使いたかった => JTA
• FlowScoped(Faces Flows) は微妙• 要件に合わなかった
• JSF の Validation に Bean Validation はまだ早い感• Default Group しか対応してない (OmniFaces つかったらいける? )
• JSF の Validation は使わずに CDI の interceptor で UI にエラー通知
GlassFish 4.0 に載せる
当時 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 を差し
替え
GlassFish 4.0 に陰りが…
• Oracle の (4.1 からの ) 商用サポート予定が打ち切り• 他に選択肢無いし別に良いけど…• 悪い話しが目につくように…
• そんな時 WildFly8.0.0 Final が登場!• ついでに Java8 も同時期に登場!• さらに Doma2 も!
WildFly 8.0.0 に載せ替え
WildFly 8.0.0 Final に載せ替え
• glassfish-web.xml => jboss-web.xml• 設定してる内容は違うけど…
• JTA の @Transactional がちゃんと動いた!• interceptor 使った 似非 Transactional から移行
• javax.facex.jar を差し替えなくても OK
• Java8 もほぼ問題無し!
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 のデプロイエラー• 仕様?不具合?
ついでにやった事
• Java7 + Xtend => Java8 + Lombok
• 若干不満もあるが、まあそれなりに• Java8 + Xtend ってのもありかも
• Xtend のラムダが Java8 ラムダに置き換わってくれたら迷わずGO
• Gradle + Doma + Lombok は apt の順番等でハマる
• Doma1 => Doma2• Optional/Date and Time API 対応は良いね!
Java8 にして困ったこと
• UI(JSF) 側が Date and Time API に対応していない• 自前で Converter 用意• Doma の Domain クラスも Converter 書かないとダメなの
でしゃーない
• Optional が Serializable じゃないので使いどころに注意• そのくらいであまり困らなかった
WildFly 8.1.0 に載せ替え
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
WildFly 8.1.0 Final に載せ替え ( 困った所 )
今の所無し!
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"}}
おまけ(JDBC Driver for SQL
Server)
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 までが対象 )
JDBC Driver for SQL Server
• SQL Server 2014 サポート明記http://www.microsoft.com/en-US/download/details.aspx?id=11774
• JRE7 サポート明記http://
blogs.msdn.com/b/jpsql/archive/2013/09/30/jdbc-jdbc-java-7.aspx
Java8 + JavaEE7WildFly( + SQL Server)
どんどん試してみましょう!