Pure Java EE or Spring?
@makingGlassFish 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…
12/06/04GlassFish Users Group Japan
勉強会 June 2012
3
金魚本翻訳一部担当
12/06/04GlassFish Users Group Japan
勉強会 June 2012
412/06/04GlassFish Users Group Japan
勉強会 June 2012
JavaEE 、 Spring に限らずJava テクノロジーが好き!
512/06/04GlassFish Users Group Japan
勉強会 June 2012
金魚本をお持ちでない方はhttp://amzn.to/JavaEE6こちらから、、、
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 予定
12/06/04GlassFish Users Group Japan
勉強会 June 2012
7
ここから本題
• JavaEE と Spring の現在• JavaEE6 と Spring3 の違い• どっちを使う?
12/06/04GlassFish Users Group Japan
勉強会 June 2012
812/06/04GlassFish Users Group Japan
勉強会 June 2012
本日の発表内容は個人の見解であり、所属企業とは一切関係ありません
9
JavaEE とSpring の現在
12/06/04GlassFish Users Group Japan
勉強会 June 2012
10
質問:何で Web アプリケーションを開発していますか?
• Struts1 系 +α で開発している人• Struts2 系 +α で開発している人• Seasar で開発している人• Spring で開発している人• JavaEE5 で開発している人• JavaEE6 で開発している人• その他 (Play とか、 Grails とか )
12/06/04GlassFish Users Group Japan
勉強会 June 2012
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 時代に比べて格段に使いやすくなった12/06/04
GlassFish Users Group Japan勉強会 June 2012
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 のアンチテーゼとして生まれたが重厚になりつつある
12/06/04GlassFish Users Group Japan
勉強会 June 2012
13
Spring -> Java EE6 への動き?
• JavaEE6 の普及展開に合わせて、 Spring に対するネガティブキャンペーン?
• migration Spring to JavaEE6 – http://www.oracle.com/technetwork/articles/ja
va/springtojavaee-522240.html
– https://blogs.oracle.com/arungupta/entry/why_java_ee_6_is
– http://www.slideshare.net/ertmanb/javaone-2011-migrating-spring-applications-to-java-ee-6
12/06/04GlassFish Users Group Japan
勉強会 June 2012
14
JBoss の JavaEE6 プロモーション
• http://www.jboss.com/promo/EE6/
12/06/04GlassFish Users Group Japan
勉強会 June 2012
(意訳) Spring や Struts みたいなレガシーなアプリをメンテナンスしてても、JBoss にデプロイされていたら RedHat は
サポートするよ!
15
Stack Overflow での質問
• http://stackoverflow.com/questions/2499323/java-ee-6-vs-spring-3-stack
12/06/04GlassFish Users Group Japan
勉強会 June 2012
2010 年 5 月オープン2011 年 12 月荒れ過ぎで閉
鎖
1612/06/04GlassFish Users Group Japan
勉強会 June 2012
感情論、宗教論になりつつある。。
17
JavaEE6 とSpring3 の違い
12/06/04GlassFish Users Group Japan
勉強会 June 2012
18
いくつか違いをみていきます
• 構成テクノロジーの違い• 出版書籍の違い• ドキュメントの違い• セキュリティの違い• IDE の違い• Code Generation の違い
12/06/04GlassFish Users Group Japan
勉強会 June 2012
19
FullJavaEE6 の WEB アプリケーションモデル
12/06/04GlassFish Users Group Japan
勉強会 June 2012
ブラウザ JSF EJB RDBMSJPA
Presentation Service Persistence
JAX-RS
CDI/EJB コンテナ
MangedBean
20
Spring を使用した一般的な WEB アプリケーションモデル
12/06/04GlassFish Users Group Japan
勉強会 June 2012
ブラウザ Spring MVC
Spring(POJO) RDBMS
Spring(POJO)
JPA
Presentation Service Persistence
Spring DI
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 な違いはない– 記事中では小さなことで Spring を批判している
12/06/04GlassFish Users Group Japan
勉強会 June 2012
22
JavaEE6 関連書籍
12/06/04GlassFish Users Group Japan
勉強会 June 2012
23
Spring3 関連書籍
12/06/04GlassFish Users Group Japan
勉強会 June 2012
24
出版書籍の違い
• JavaEE6 に関する書籍– 要素技術の解説形式が多い
• Spring3 に関する書籍– 技術解説の他、クックブック形式やアプリケーショ
ンを作りながら学ぶ形式も多い
12/06/04GlassFish Users Group Japan
勉強会 June 2012
今後 JavaEE6 を使ったアプリケーション開発
に関する書籍が出てくることを期待してます!
25
ドキュメントの違い
• JavaEE6– http://www.oracle.com/technetwork/java/javae
e/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
12/06/04GlassFish Users Group Japan
勉強会 June 2012
26
セキュリティの違い
• JavaEE6– JAAS ?
• ドキュメントが少ないので全貌を理解していない。。。
• Spring– Spring Security
• かなりパワフル
12/06/04GlassFish Users Group Japan
勉強会 June 2012
27
IDE の違い
• Java EE 6– NetBeans– JBoss Tools– Rational Application Developer– MyEclipse
• Spring– SpringSource Tool Suite– MyEclipse
12/06/04GlassFish Users Group Japan
勉強会 June 2012
28
Code Generation の違い
• Java EE 6– JBoss Forge– Glassfish
• Spring– Spring Roo– Spring Fuse– MyEclipse
12/06/04GlassFish Users Group Japan
勉強会 June 2012
2912/06/04GlassFish Users Group Japan
勉強会 June 2012
甲乙つけがたい。。
30
最も大きな違いは、、 jar の配置場所• JavaEE はフレームワークが AP サーバー側にある
– フレームワークはベンダが提供– ベンダサポートあり– war のサイズが小さい– バージョンは自由に選べない– 変更のサイクルが長い– AP サーバーのマイグレーションは大丈夫なんでしょう
か• Spring はフレームワークがアプリケーション側に
ある– 好きなバージョンを選べる– 変更のサイクルを選べる– 自己責任 (bugfix できる )– war のサイズが大きい
12/06/04GlassFish Users Group Japan
勉強会 June 2012
31
どっちを使う?
12/06/04GlassFish Users Group Japan
勉強会 June 2012
32
Spring はプロプライエタリで危険?
• 状況– 開発プロセスがオープンでなく、 SpringSource 社
のみで進んでいるのは確か。• A 社の F 技術のようになる可能性あり
• 実際– Spring は 1 系から一貫したプログラミングモデル
を提供– バージョンがあがるごとに機能追加、生産性向上を行ってきた
– 3.1 系はとても開発しやすい– 多くの拡張ポイントが用意されている
12/06/04GlassFish Users Group Japan
勉強会 June 2012
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 年 ?12/06/04
GlassFish Users Group Japan勉強会 June 2012
3412/06/04GlassFish Users Group Japan
勉強会 June 2012
宗教論争はやめよう
3512/06/04GlassFish Users Group Japan
勉強会 June 2012
“ 標準技術を使う”のが目的じゃない
3612/06/04GlassFish Users Group Japan
勉強会 June 2012
“ 保守性・拡張性の高いアプリケーションを効率良く開発する”のが目的!
3712/06/04GlassFish Users Group Japan
勉強会 June 2012
dis り合いはやめよう
38
少数精鋭な方々は、、
• どっちでもいい ( 生産者高い ) んじゃね?• 慣れている方を選べば良い• もちろん Play や Grails等他のフレームワーク
を選んでも良い
12/06/04GlassFish Users Group Japan
勉強会 June 2012
39
様々なのエンジニア向け• MVC 、業務ロジック、データアクセスはどちらも
Good– MVC のコンポーネントベース or アクションベースで好き嫌
いは分かれる?• フレームワークを提供する立場としては、個人的には
XML でもアノテーションでもDI できる方が好き– フレームワーク用の包括的な設定は小さく XML で定義– アプリケーション用の多くの設定はアノテーションで定義– CDIもっとがんばれ、、 (ConversationScoped は Good)
• バッチ処理や JavaEE 以外のサーバーサイド (Nettyベースなアプリ等 )もカバーしたい場合、 Spring で統一的なプログラミングモデルを提供すると良さそう
12/06/04GlassFish Users Group Japan
勉強会 June 2012
40
JavaEE6 + Spring
• 一貫性がとれていれば組み合わせても問題ない– 成熟した JavaEE API+Spring– Spring MVC + EJB + JPA– JSF(Spring WebFlow) + Spring + JPA
• 一貫性がとれていない組み合わせは複雑さを増し、保守性を低下させる恐れあり– Spring MVC + JSF– Spring + CDI
12/06/04GlassFish Users Group Japan
勉強会 June 2012
4112/06/04GlassFish Users Group Japan
勉強会 June 2012
正直、慣れている技術を使えば良いと思う。。
42
まとめ?
• JavaEE と Spring の現在• JavaEE6 と Spring3 の違い• どっちを使う?
12/06/04GlassFish Users Group Japan
勉強会 June 2012
どっちも Good!喧嘩せずに、合った技術を選びましょ
う!
4312/06/04GlassFish Users Group Japan
勉強会 June 2012
って全然まとまっていないので、続きは懇親会で!
Recommended