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 + JavaEE7 
WildFly 
( + SQL Server) 
どんどん試してみましょう!

Jsf アプリ作ったった

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

Editor's Notes

  • #6 ちょっと前に Xtend 無理やり突っ込んだのに、また別の言語使うと大変そう
  • #8 Servlet は web.xml 書かずに アノテーションでOKだったりと進歩してるけど… JAX-RS + テンプレートエンジン は、可能だけどオレオレ感がある。Form ベースなアプリでどこまでメンドクサクなく使えるのか懸念 JSF まさにこれじゃねーの?!楽々
  • #10 トップやサイドにメニューがあるような形だと FacesFlows は合わない。 (急に別 Flow に飛ぶような場合) また、一覧 -> 登録/編集へ遷移するけど、登録/編集 画面は、メニューからも遷移する様な場合も NG(ようは、Flow の起点が複数になるような場合)
  • #17 Gradle + Doma + Lombok はメンドいから Doma の Entity だけは IDE のソース生成を利用。
  • #20 9.0.0 Final は 14/11/11 予定らしい
  • #21 8.0.0 から patch 当てたらさくっと 8.1.0 になります。 とりあえず 8.1.0 にしといていいんじゃないでしょうか?
  • #24 サポートは、JRE5,6,7だけ。JDK 6 ではテスト済。
  • #25 JDBC Team Blog は 2年前から更新無し。。 Java 8 で動く JDBC Driver は出るのか!!