Pure Java EE or Spring?

                                      @making
     GlassFish Users Group Japan勉強会 June 2012
                                   2012/06/04
Who are you?

• Toshiaki Maki @making
     –http://blog.ik.am
     –某大手SIerでR&D
           • 社内Javaフレームワークの整備
           • Spring + Struts + iBatis…




                   GlassFish Users Group Japan
12/06/04                                         2
金魚本翻訳一部担当




           GlassFish Users Group Japan
12/06/04                                 3
JavaEE、Springに限らず
     Javaテクノロジーが好き!




           GlassFish Users Group Japan
12/06/04                                 4
金魚本をお持ちでない方は
     http://amzn.to/JavaEE6
     こちらから、、、




             GlassFish Users Group Japan
12/06/04                                   5
社内JavaEE6勉強会 #bje_study
• 各要素技術ごとに講師を募り隔週で開催中
     – 講師には金魚本プレゼント
     – 毎回15人前後の参加者
• slideshareで資料公開中
     –     JavaEE6概要 http://slidesha.re/I0cXjt
     –     JPA http://slidesha.re/I7XkHs
     –     EJB http://slidesha.re/JuOA0c
     –     JSF http://slidesha.re/L0MiDt
     –     JMS 6/13予定
     –     JAX-WS 6/27予定
     –     JAX-RS 7/4予定

                       GlassFish Users Group Japan
12/06/04                                             6
ここから本題
• JavaEEとSpringの現在
• JavaEE6とSpring3の違い
• どっちを使う?




            GlassFish Users Group Japan
12/06/04                                  7
本日の発表内容は個人の見解で
     あり、所属企業とは一切関係あ
     りません



           GlassFish Users Group Japan
12/06/04                                 8
JavaEEとSpringの
                      現在



           GlassFish Users Group Japan
12/06/04                                 9
質問:何でWebアプリケーションを開発してい
ますか?
•   Struts1系+αで開発している人
•   Struts2系+αで開発している人
•   Seasarで開発している人
•   Springで開発している人
•   JavaEE5で開発している人
•   JavaEE6で開発している人
•   その他(Playとか、Grailsとか)




             GlassFish Users Group Japan
12/06/04                                   10
Java EE
• 言わずと知れたJavaによるWEBアプリケーション開発標
  準フレームワークスタック
• ベンダ非依存な仕様策定
• 2009年12月にJava EE 6が登場し、2011年ごろから対応
  APサーバー多数登場
     –     GlassFish 3
     –     WebLogic 12c
     –     Web Sphere 8.X
     –     JBoss AS 7
     –     Cosminexus v9
     –     TomEE など
• Web Profileの登場など、かつての重厚感はなくなり、
  開発生産性が高まった
• JSF、EJB、JPA、CDI、Bean Validationが主要テクノロ
  ジー
• J2EE時代に比べて格段に使いやすくなった
                            GlassFish Users Group Japan
12/06/04                                                  11
Spring
• 現在3.1系
     – 2012-02-16に3.1.1リリース
     – 2012-06に3.1.2リリース?
• SpringSource社による開発
• XMLによる設定が多い!という印象がある方は時代遅れ
     – 3.0以降ではほとんどの設定がアノテーションで記述可能
     – XMLベース、アノテーションベース、Javaベースの設定方法を
       自由に選べる(組み合わせ可能)
• サブプロジェクト多数
     –     Spring   Security
     –     Spring   Data
     –     Spring   Batch
     –     Spring   Mobile
     –     Spring   Social
• J2EEのアンチテーゼとして生まれたが重厚になりつつ
  ある

                               GlassFish Users Group Japan
12/06/04                                                     12
Spring -> Java EE6への動き?
• JavaEE6の普及展開に合わせて、Springに対す
  るネガティブキャンペーン?
• migration Spring to JavaEE6
     – http://www.oracle.com/technetwork/articles/jav
       a/springtojavaee-522240.html
     – https://blogs.oracle.com/arungupta/entry/why_j
       ava_ee_6_is
     – http://www.slideshare.net/ertmanb/javaone-
       2011-migrating-spring-applications-to-java-ee-
       6




                    GlassFish Users Group Japan
12/06/04                                            13
JBossのJavaEE6プロモーション
• http://www.jboss.com/promo/EE6/




           (意訳)SpringやStrutsみたいなレガシー
           なアプリをメンテナンスしてても、JBoss
           にデプロイされていたらRedHatはサポー
                     トするよ!

                 GlassFish Users Group Japan
12/06/04                                       14
Stack Overflowでの質問
• http://stackoverflow.com/questions/2499323
  /java-ee-6-vs-spring-3-stack




               2010年5月オープン
             2011年12月荒れ過ぎで閉
                     鎖
               GlassFish Users Group Japan
12/06/04                                     15
感情論、宗教論にな
       りつつある。。


           GlassFish Users Group Japan
12/06/04                                 16
JavaEE6とSpring3
                      の違い



           GlassFish Users Group Japan
12/06/04                                 17
いくつか違いをみていきます
•   構成テクノロジーの違い
•   出版書籍の違い
•   ドキュメントの違い
•   セキュリティの違い
•   IDEの違い
•   Code Generationの違い




               GlassFish Users Group Japan
12/06/04                                     18
FullJavaEE6のWEBアプリケーションモデル




           Presentation          Service        Persistence
                    Manged
                     Bean
ブラウザ          JSF                  EJB               JPA      RDBMS
              JAX-RS


                             CDI/EJBコンテナ




                       GlassFish Users Group Japan
12/06/04                                                              19
Springを使用した一般的なWEBアプリケーションモデル




           Presentation          Service        Persistence
                                                           JPA
              Spring             Spring              Spring
ブラウザ                                                             RDBMS
               MVC               (POJO)              (POJO)




                               Spring DI




                       GlassFish Users Group Japan
12/06/04                                                                 20
構成テクノロジーの違い
• WEBアプリのモデルはだいたい同じ
• 個別技術で言うと
     – JSF vs Spring MVC
           • コンポーネントベース vs アクションベース
     – CDI vs Spring DI
• だが、、Springは各層の連携が(疎ではあるが)
  強力であり、個別要素で比べるのはナンセンス

• http://orablogs-
  jp.blogspot.jp/2012/05/spring-to-java-ee-
  migration-part-4.html
  を読めば分かるが、Criticalな違いはない
                    GlassFish Users Group Japan
     – 記事中では小さなことでSpringを批判している
12/06/04                                          21
JavaEE6関連書籍




           GlassFish Users Group Japan
12/06/04                                 22
Spring3関連書籍




           GlassFish Users Group Japan
12/06/04                                 23
出版書籍の違い
• JavaEE6に関する書籍
     – 要素技術の解説形式が多い
• Spring3に関する書籍
     – 技術解説の他、クックブック形式やアプリケーショ
       ンを作りながら学ぶ形式も多い



     今後JavaEE6を使ったアプリケーション開発
     に関する書籍が出てくることを期待してま
                 す!


             GlassFish Users Group Japan
12/06/04                                   24
ドキュメントの違い
• JavaEE6
     – http://www.oracle.com/technetwork/java/javaee/
       resources-jsp-139799.html
           • サンプル
           • JavaDoc
           • Spec
           • チュートリアル
• Spring
     – http://static.springsource.org/spring/docs/3.1
       .x/spring-framework-reference/html/
           • リファレンスマニュアル
     – http://static.springsource.org/spring/docs/3.1
       .x/javadoc-api/
           • Javadoc

                       GlassFish Users Group Japan
12/06/04                                             25
セキュリティの違い
• JavaEE6
     – JAAS?
           • ドキュメントが少ないので全貌を理解していない。。。
• Spring
     – Spring Security
           • かなりパワフル




                    GlassFish Users Group Japan
12/06/04                                          26
IDEの違い
• Java EE 6
     –     NetBeans
     –     JBoss Tools
     –     Rational Application Developer
     –     MyEclipse
• Spring
     – SpringSource Tool Suite
     – MyEclipse




                        GlassFish Users Group Japan
12/06/04                                              27
Code Generationの違い
• Java EE 6
     – JBoss Forge
     – Glassfish
• Spring
     – Spring Roo
     – Spring Fuse
     – MyEclipse




                     GlassFish Users Group Japan
12/06/04                                           28
甲乙つけがたい。。




           GlassFish Users Group Japan
12/06/04                                 29
最も大きな違いは、、jarの配置場所
• JavaEEはフレームワークがAPサーバー側にある
     –     フレームワークはベンダが提供
     –     ベンダサポートあり
     –     warのサイズが小さい
     –     バージョンは自由に選べない
     –     変更のサイクルが長い
     –     APサーバーのマイグレーションは大丈夫なんでしょうか
• Springはフレームワークがアプリケーション側に
  ある
     –     好きなバージョンを選べる
     –     変更のサイクルを選べる
     –     自己責任(bugfixできる)
     –     warのサイズが大きい
                   GlassFish Users Group Japan
12/06/04                                         30
どっちを使う?



           GlassFish Users Group Japan
12/06/04                                 31
Springはプロプライエタリで危険?
• 状況
     – 開発プロセスがオープンでなく、SpringSource社の
       みで進んでいるのは確か。
           • A社のF技術のようになる可能性あり
• 実際
     – Springは1系から一貫したプログラミングモデルを
       提供
     – バージョンがあがるごとに機能追加、生産性向上を
       行ってきた
     – 3.1系はとても開発しやすい
     – 多くの拡張ポイントが用意されている


                   GlassFish Users Group Japan
12/06/04                                         32
それぞれの今後
• Spring3.2
     –     Java7対応
     –     Servlet3.0/3.1 非同期リクエストサポート
     –     JCache(JSR-107)サポート
     –     WebSocket対応?
     –     JavaEE7対応?
     –     2012-05-28に3.2 M1リリース
• JavaEE7
     – PaaS対応
     – マルチテナンシー
     – JPA2.1、EJB3.2、JAX-RS2.0、JMS2.0、
       Servlet3.1、JSF2.2、CDI1.1・・・
     – 2013年?
                    GlassFish Users Group Japan
12/06/04                                          33
宗教論争はやめよう




           GlassFish Users Group Japan
12/06/04                                 34
“標準技術を使う”の
       が目的じゃない


           GlassFish Users Group Japan
12/06/04                                 35
“保守性・拡張性の高い
       アプリケーションを効率
       良く開発する”のが目
       的!


           GlassFish Users Group Japan
12/06/04                                 36
disり合いはやめよ
       う


           GlassFish Users Group Japan
12/06/04                                 37
少数精鋭な方々は、、
• どっちでもいい(生産者高い)んじゃね?
• 慣れている方を選べば良い
• もちろんPlayやGrails等他のフレームワークを
  選んでも良い




           GlassFish Users Group Japan
12/06/04                                 38
様々なのエンジニア向け
• MVC、業務ロジック、データアクセスはどちらも
  Good
     – MVCのコンポーネントベースorアクションベースで好き嫌
       いは分かれる?
• フレームワークを提供する立場としては、個人的に
  はXMLでもアノテーションでもDIできる方が好き
     – フレームワーク用の包括的な設定は小さくXMLで定義
     – アプリケーション用の多くの設定はアノテーションで定義
     – CDIもっとがんばれ、、(ConversationScopedはGood)
• バッチ処理やJavaEE以外のサーバーサイド(Netty
  ベースなアプリ等)もカバーしたい場合、Springで
  統一的なプログラミングモデルを提供すると良さそ
  う
                GlassFish Users Group Japan
12/06/04                                      39
JavaEE6 + Spring
• 一貫性がとれていれば組み合わせても問題ない
     – 成熟したJavaEE API+Spring
     – Spring MVC + EJB + JPA
     – JSF(Spring WebFlow) + Spring + JPA
• 一貫性がとれていない組み合わせは複雑さを増
  し、保守性を低下させる恐れあり
     – Spring MVC + JSF
     – Spring + CDI




                    GlassFish Users Group Japan
12/06/04                                          40
正直、慣れている技術を使
えば良いと思う。。



           GlassFish Users Group Japan
12/06/04                                 41
まとめ?
• JavaEEとSpringの現在
• JavaEE6とSpring3の違い
• どっちを使う?


                どっちもGood!
           喧嘩せずに、合った技術を選びましょ
                  う!




                GlassFish Users Group Japan
12/06/04                                      42
って全然まとまっていない
ので、続きは懇親会で!



           GlassFish Users Group Japan
12/06/04                                 43

Pure JavaEE or Spring #glassfishjp

  • 1.
    Pure Java EEor Spring? @making GlassFish Users Group Japan勉強会 June 2012 2012/06/04
  • 2.
    Who are you? •Toshiaki Maki @making –http://blog.ik.am –某大手SIerでR&D • 社内Javaフレームワークの整備 • Spring + Struts + iBatis… GlassFish Users Group Japan 12/06/04 2
  • 3.
    金魚本翻訳一部担当 GlassFish Users Group Japan 12/06/04 3
  • 4.
    JavaEE、Springに限らず Javaテクノロジーが好き! GlassFish Users Group Japan 12/06/04 4
  • 5.
    金魚本をお持ちでない方は http://amzn.to/JavaEE6 こちらから、、、 GlassFish Users Group Japan 12/06/04 5
  • 6.
    社内JavaEE6勉強会 #bje_study • 各要素技術ごとに講師を募り隔週で開催中 – 講師には金魚本プレゼント – 毎回15人前後の参加者 • slideshareで資料公開中 – JavaEE6概要 http://slidesha.re/I0cXjt – JPA http://slidesha.re/I7XkHs – EJB http://slidesha.re/JuOA0c – JSF http://slidesha.re/L0MiDt – JMS 6/13予定 – JAX-WS 6/27予定 – JAX-RS 7/4予定 GlassFish Users Group Japan 12/06/04 6
  • 7.
    ここから本題 • JavaEEとSpringの現在 • JavaEE6とSpring3の違い •どっちを使う? GlassFish Users Group Japan 12/06/04 7
  • 8.
    本日の発表内容は個人の見解で あり、所属企業とは一切関係あ りません GlassFish Users Group Japan 12/06/04 8
  • 9.
    JavaEEとSpringの 現在 GlassFish Users Group Japan 12/06/04 9
  • 10.
    質問:何でWebアプリケーションを開発してい ますか? • Struts1系+αで開発している人 • Struts2系+αで開発している人 • Seasarで開発している人 • Springで開発している人 • JavaEE5で開発している人 • JavaEE6で開発している人 • その他(Playとか、Grailsとか) GlassFish Users Group Japan 12/06/04 10
  • 11.
    Java EE • 言わずと知れたJavaによるWEBアプリケーション開発標 準フレームワークスタック • ベンダ非依存な仕様策定 • 2009年12月にJava EE 6が登場し、2011年ごろから対応 APサーバー多数登場 – GlassFish 3 – WebLogic 12c – Web Sphere 8.X – JBoss AS 7 – Cosminexus v9 – TomEE など • Web Profileの登場など、かつての重厚感はなくなり、 開発生産性が高まった • JSF、EJB、JPA、CDI、Bean Validationが主要テクノロ ジー • J2EE時代に比べて格段に使いやすくなった GlassFish Users Group Japan 12/06/04 11
  • 12.
    Spring • 現在3.1系 – 2012-02-16に3.1.1リリース – 2012-06に3.1.2リリース? • SpringSource社による開発 • XMLによる設定が多い!という印象がある方は時代遅れ – 3.0以降ではほとんどの設定がアノテーションで記述可能 – XMLベース、アノテーションベース、Javaベースの設定方法を 自由に選べる(組み合わせ可能) • サブプロジェクト多数 – Spring Security – Spring Data – Spring Batch – Spring Mobile – Spring Social • J2EEのアンチテーゼとして生まれたが重厚になりつつ ある GlassFish Users Group Japan 12/06/04 12
  • 13.
    Spring -> JavaEE6への動き? • JavaEE6の普及展開に合わせて、Springに対す るネガティブキャンペーン? • migration Spring to JavaEE6 – http://www.oracle.com/technetwork/articles/jav a/springtojavaee-522240.html – https://blogs.oracle.com/arungupta/entry/why_j ava_ee_6_is – http://www.slideshare.net/ertmanb/javaone- 2011-migrating-spring-applications-to-java-ee- 6 GlassFish Users Group Japan 12/06/04 13
  • 14.
    JBossのJavaEE6プロモーション • http://www.jboss.com/promo/EE6/ (意訳)SpringやStrutsみたいなレガシー なアプリをメンテナンスしてても、JBoss にデプロイされていたらRedHatはサポー トするよ! GlassFish Users Group Japan 12/06/04 14
  • 15.
    Stack Overflowでの質問 • http://stackoverflow.com/questions/2499323 /java-ee-6-vs-spring-3-stack 2010年5月オープン 2011年12月荒れ過ぎで閉 鎖 GlassFish Users Group Japan 12/06/04 15
  • 16.
    感情論、宗教論にな りつつある。。 GlassFish Users Group Japan 12/06/04 16
  • 17.
    JavaEE6とSpring3 の違い GlassFish Users Group Japan 12/06/04 17
  • 18.
    いくつか違いをみていきます • 構成テクノロジーの違い • 出版書籍の違い • ドキュメントの違い • セキュリティの違い • IDEの違い • Code Generationの違い GlassFish Users Group Japan 12/06/04 18
  • 19.
    FullJavaEE6のWEBアプリケーションモデル Presentation Service Persistence Manged Bean ブラウザ JSF EJB JPA RDBMS JAX-RS CDI/EJBコンテナ GlassFish Users Group Japan 12/06/04 19
  • 20.
    Springを使用した一般的なWEBアプリケーションモデル Presentation Service Persistence JPA Spring Spring Spring ブラウザ RDBMS MVC (POJO) (POJO) Spring DI GlassFish Users Group Japan 12/06/04 20
  • 21.
    構成テクノロジーの違い • WEBアプリのモデルはだいたい同じ • 個別技術で言うと – JSF vs Spring MVC • コンポーネントベース vs アクションベース – CDI vs Spring DI • だが、、Springは各層の連携が(疎ではあるが) 強力であり、個別要素で比べるのはナンセンス • http://orablogs- jp.blogspot.jp/2012/05/spring-to-java-ee- migration-part-4.html を読めば分かるが、Criticalな違いはない GlassFish Users Group Japan – 記事中では小さなことでSpringを批判している 12/06/04 21
  • 22.
    JavaEE6関連書籍 GlassFish Users Group Japan 12/06/04 22
  • 23.
    Spring3関連書籍 GlassFish Users Group Japan 12/06/04 23
  • 24.
    出版書籍の違い • JavaEE6に関する書籍 – 要素技術の解説形式が多い • Spring3に関する書籍 – 技術解説の他、クックブック形式やアプリケーショ ンを作りながら学ぶ形式も多い 今後JavaEE6を使ったアプリケーション開発 に関する書籍が出てくることを期待してま す! GlassFish Users Group Japan 12/06/04 24
  • 25.
    ドキュメントの違い • JavaEE6 – http://www.oracle.com/technetwork/java/javaee/ resources-jsp-139799.html • サンプル • JavaDoc • Spec • チュートリアル • Spring – http://static.springsource.org/spring/docs/3.1 .x/spring-framework-reference/html/ • リファレンスマニュアル – http://static.springsource.org/spring/docs/3.1 .x/javadoc-api/ • Javadoc GlassFish Users Group Japan 12/06/04 25
  • 26.
    セキュリティの違い • JavaEE6 – JAAS? • ドキュメントが少ないので全貌を理解していない。。。 • Spring – Spring Security • かなりパワフル GlassFish Users Group Japan 12/06/04 26
  • 27.
    IDEの違い • Java EE6 – NetBeans – JBoss Tools – Rational Application Developer – MyEclipse • Spring – SpringSource Tool Suite – MyEclipse GlassFish Users Group Japan 12/06/04 27
  • 28.
    Code Generationの違い • JavaEE 6 – JBoss Forge – Glassfish • Spring – Spring Roo – Spring Fuse – MyEclipse GlassFish Users Group Japan 12/06/04 28
  • 29.
    甲乙つけがたい。。 GlassFish Users Group Japan 12/06/04 29
  • 30.
    最も大きな違いは、、jarの配置場所 • JavaEEはフレームワークがAPサーバー側にある – フレームワークはベンダが提供 – ベンダサポートあり – warのサイズが小さい – バージョンは自由に選べない – 変更のサイクルが長い – APサーバーのマイグレーションは大丈夫なんでしょうか • Springはフレームワークがアプリケーション側に ある – 好きなバージョンを選べる – 変更のサイクルを選べる – 自己責任(bugfixできる) – warのサイズが大きい GlassFish Users Group Japan 12/06/04 30
  • 31.
    どっちを使う? GlassFish Users Group Japan 12/06/04 31
  • 32.
    Springはプロプライエタリで危険? • 状況 – 開発プロセスがオープンでなく、SpringSource社の みで進んでいるのは確か。 • A社のF技術のようになる可能性あり • 実際 – Springは1系から一貫したプログラミングモデルを 提供 – バージョンがあがるごとに機能追加、生産性向上を 行ってきた – 3.1系はとても開発しやすい – 多くの拡張ポイントが用意されている GlassFish Users Group Japan 12/06/04 32
  • 33.
    それぞれの今後 • Spring3.2 – Java7対応 – Servlet3.0/3.1 非同期リクエストサポート – JCache(JSR-107)サポート – WebSocket対応? – JavaEE7対応? – 2012-05-28に3.2 M1リリース • JavaEE7 – PaaS対応 – マルチテナンシー – JPA2.1、EJB3.2、JAX-RS2.0、JMS2.0、 Servlet3.1、JSF2.2、CDI1.1・・・ – 2013年? GlassFish Users Group Japan 12/06/04 33
  • 34.
    宗教論争はやめよう GlassFish Users Group Japan 12/06/04 34
  • 35.
    “標準技術を使う”の が目的じゃない GlassFish Users Group Japan 12/06/04 35
  • 36.
    “保守性・拡張性の高い アプリケーションを効率 良く開発する”のが目 的! GlassFish Users Group Japan 12/06/04 36
  • 37.
    disり合いはやめよ う GlassFish Users Group Japan 12/06/04 37
  • 38.
    少数精鋭な方々は、、 • どっちでもいい(生産者高い)んじゃね? • 慣れている方を選べば良い •もちろんPlayやGrails等他のフレームワークを 選んでも良い GlassFish Users Group Japan 12/06/04 38
  • 39.
    様々なのエンジニア向け • MVC、業務ロジック、データアクセスはどちらも Good – MVCのコンポーネントベースorアクションベースで好き嫌 いは分かれる? • フレームワークを提供する立場としては、個人的に はXMLでもアノテーションでもDIできる方が好き – フレームワーク用の包括的な設定は小さくXMLで定義 – アプリケーション用の多くの設定はアノテーションで定義 – CDIもっとがんばれ、、(ConversationScopedはGood) • バッチ処理やJavaEE以外のサーバーサイド(Netty ベースなアプリ等)もカバーしたい場合、Springで 統一的なプログラミングモデルを提供すると良さそ う GlassFish Users Group Japan 12/06/04 39
  • 40.
    JavaEE6 + Spring •一貫性がとれていれば組み合わせても問題ない – 成熟したJavaEE API+Spring – Spring MVC + EJB + JPA – JSF(Spring WebFlow) + Spring + JPA • 一貫性がとれていない組み合わせは複雑さを増 し、保守性を低下させる恐れあり – Spring MVC + JSF – Spring + CDI GlassFish Users Group Japan 12/06/04 40
  • 41.
  • 42.
    まとめ? • JavaEEとSpringの現在 • JavaEE6とSpring3の違い •どっちを使う? どっちもGood! 喧嘩せずに、合った技術を選びましょ う! GlassFish Users Group Japan 12/06/04 42
  • 43.