JavaEE(Java Enterprise Edition)とはJavaの規格のことを指します。
規格って言われてもピンときませんよね?こういったところがJavaを難しくさせる要因でもあるのですが、今回はこの辺を詳しく説明します。
まずJavaEEという技術は存在しません。では何が存在するかというとServletやJSPといった各要素技術が存在します。そしてそれらの要素技術はバージョンを持っています。これら要素技術のバージョンを規定したものがJavaEEといえます。
例えば「JavaEE7」といえば「Servlet3.1、JSP2.3、etc」を扱いますということになります。
JavaEEのバージョンと主要な要素技術の対応
Servlet | JSP | JSF | MVC | CDI | JPA | JAX-RS | |
JavaEE6 | 3.0 | 2.2 | 2.0 | – | 1.0 | 2.0 | 1.1 |
JavaEE7 | 3.1 | 2.3 | 2.2 | – | 1.1 | 2.1 | 2.0 |
JavaEE8 | 4.0 | 2.4 | 2.3 | 1.0 | 2.0 | ? | 2.1 |
より詳細な情報はJava EE version history参照
JavaEEのバージョンとサーバーの対応
次にJavaEEはサーバーのバージョンごとに異なります。
Tomcat | GlassFish | JBoss | WebLogic | Websphere | |
JavaEE6 | 7.x | 3.x | 6.x | 12c | 8.x |
JavaEE7 | 8.x | 4.x | 7.x | 12.2.1 | 8.5.5.6(Liberty Profile) |
JavaEE8 | 9.x | – | – | – | – |
より詳細な情報はここを参照。
xは任意のバージョン番号を示します。例)7.Xとしたら7.1や7.2.1などを含みます。
※TomcatはServlet、JSPのみサポート。
上記では5つのサーバーしか記述してませんが、有償・無償さまざまですがもっとたくさんのサーバー製品が存在します。
JavaEEで要素技術のバージョンは規定されているんだからどのサーバーを選んでも一緒でしょ!?とお思いの方は半分正解・半分不正解です。
実はServletやJSPなどの要素技術は仕様しか規定されておらず、その仕様を実現するのは各サーバーベンダーに委ねられています。
極端な話、特定のベンダーの実装にバグがあったとしたらJavaEEのバージョンが同じであってもサーバー間の互換性はなく動かない!!という事になります。
さらに要素技術以外のところ、例えば運用の機能などは各社で独自の便利機能を作りこみ差別化を図ることができます。
新しい要素技術ではバグが有る可能性が高いため結構泣かされることもあるのですが、長期的に見れば競争の原理によりその恩恵を享受することが出来るということになります。