前提とかきっかけ
Java EE7とSpring。
今のプロジェクトでどちらを採用するか決めないといけないので比較してみた。
一応、SIやる前提です。
ツッコミは歓迎。
比較対象
Java EEアプリケーション・サーバーはWebLogicあたりを買うと思ってください。
- Java EEアプリケーション・サーバー(Java EE)
- Payaraマイクロ(Payara)
- Springboot(Spring)
比較観点
インターフェース
使いそうなものだけピックアップ。
素のサーブレットやJSPは・・・今更ないよね?
Springも多分JSFは使えるとは思うけど、今のプロジェクト一覧になかったので×。
項目 | Java EE | Payara | Spring |
---|---|---|---|
REST | ○(JAX-RS) | ○(JAX-RS) | ○(Spring MVC) |
JMS | ○(JMS) | ○(JMS) | ○(Spring) |
AMQP | × | × | ○(Spring AMQP) |
Action-Base-MVC | × | × | ○(Spring MVC) |
Component-Base-MVC | ○(JSF) | ○(JSF) | ×? |
永続化
RDBはJPA(Hybanate)をともにサポート。
Java EEはKVSをサポートしてない。
項目 | Java EE | Payara | Spring |
---|---|---|---|
RDB | ○(JPA) | ○(JPA) | ○(JPA) |
Cassandra等のKVS | × | × | ○(Spring Data) |
キャッシュ
PayaraはHazelcastをサポート。
Springもキャッシュをサポートしてる。
項目 | Java EE | Payara | Spring |
---|---|---|---|
キャッシュAPI | × | △(JCache) | ○(Sring Integration)? |
アーキテクチャ
Java EEの場合、マイクロサービスアーキテクチャはサービスディスカバリーとかを自分で用意する必要があるのでちょっとつらいか。
Springの場合もNetflixOSS使う前提でもあるのでフェアじゃない?
モノリシックだったらJava EEが安定すると思う。
(でも、JSFは・・・うん、まぁ)
項目 | Java EE | Payara | Spring |
---|---|---|---|
モノリシック | ○ | ○ | ○ |
マイクロサービス | × | △ | ○ |
SNS連携
Java EEの場合はTwitter4Jとかを使おう。
項目 | Java EE | Payara | Spring |
---|---|---|---|
× | × | ○(Spring Social) | |
× | × | ○(Spring Social) |
クラウド対応
IaaSは割愛。
Java EEのPaaSはOracleCloudのようにアプリケーション・サーバーの提供元=サービス提供元だといい感じ。
コンテナはGlassfishがDocker対応したらしいけど、サポートがない時点でちょっとなーという感じ。
項目 | Java EE | Payara | Spring |
---|---|---|---|
オンプレミス | ○ | ○ | ○ |
IaaS | ○ | ○ | ○ |
PaaS | ○ | ○ | ○ |
コンテナ | △ | △ | ○ |
ユニットテスト(Integration)
Java EEの場合はarquillianを使う必要がある。
アプリケーション・サーバーによっては対応してなかったり煩雑だったりする。
項目 | Java EE | Payara | Spring |
---|---|---|---|
モノリシック | △ | △ | ○(SpringJUnit4ClassRunner) |
サポート
どのアーキテクチャもどこかでサポートは受けられる。
項目 | Java EE | Payara | Spring |
---|---|---|---|
サポート | ○ | ○ | ○ |
後方互換性
Java EEはRemoteEJBやJSP辺りを使ってるとそのうち標準機能から外れるかも。
Springはよくわからない・・・。
項目 | Java EE | Payara | Spring |
---|---|---|---|
サポート | △ | △ | ○? |
まとめ
まとめというほどではないですけど。
オンプレミス
- サポートを受ける前提なら、プロジェクトメンバーの好みや特性で選べばいい
- サポートを受ける予算がない場合、Glassfish4.Xを使うのは危険。Payaraを使ったほうがいいかも。
- Java EEの場合、癖が強いJSFがネックになるかも
- StrutsやSeasar経験者的には中々なじめないかもしれない
- RDBMS以外を使うならSpringの方がいい
- オンプレミスじゃああまりないと思うけど・・・
クラウド
- Springにアドバンテージ
- PaaS親和性
- RDBMS以外との接続
- 設計・実装していく過程でマイクロサービス化していく可能性があるならSpring一択