やる気がストロングZERO

やる気のストロングスタイル

JavaSE、JavaEE、JakartaEEあたりが何を意味しているのかわからんかったが少しわかった気がするのでメモ

JavaSE、JavaEE、JakartaEEあたりが何を意味しているのか長いことわからんかったが、以下の書籍を読んでやっと少しわかったのでメモする。 ※間違った部分あったらすいません。

参考書籍:

最初に:JavaEEとJakartaEE

権利を保持する団体が変わった際に、Javaの標章が使えなくなったため名称がかわった。
JavaEEとJakartaEEは、指しているものは同じと言って良いと思う。
あるバージョン以降はJacartaEEとして提供されることになる。

以降、JavaEEと書いている部分はJakartaEEと読み替えてもOK

JavaSE

Java言語の標準的な機能を定義している仕様。 いつも書いてるような以下コードとかは「このように書ける」っていうのがJavaSEに定義されている。

var str = new Object();

JDKは色々種類があるけど(OracleOpenJDKとかAmazon Correttoとか)、これらはJavaSEの仕様に沿って実装されている。

JavaEE

JavaSEに追加する拡張仕様。 アプリケーションサーバーで稼働するアプリケーションでよく使われる機能(DIとかWebアクセスのルーティングとか)のIFが定義されている。 JavaEEが実装されているアプリケーションサーバーを利用すると、これらの機能を自分で実装する必要がなくなる。(JavaEEコンテナにはGlassFishとかApache TomEEとかがある)

JavaEEの構成内容として以下のようなものがある。(書籍から引用。バージョンによって異なるかもしれない)

Java Servlet
JavaServer Pages(JSP
Standard Tag Library for JavaServer Pages(JSTL
Expression Language(EL)
Java API for RESTful Web Services(JAX-RS
JavaServer FacesJSF
Java API for WebSocket
Contexts and Dependency Injection for JavaCDI
Dependency Injection for Java
Common Annotations for the Java Platform
Java Persistence(JPA
Java Transaction APIJTA
Enterprise JavaBeansEJB Lite)
Bean Validation
Java API for JSON Processing

これら全てを実装しているアプリケーションサーバーはJavaEEコンテナを名乗ることができる。(JavaEEコンテナについては下記します)

ちなみにDependency InjectionとかはSpringFrameworkが先行実装していたものを仕様としてJavaEEが取り込んだ形らしい。(全く同様の仕様なのかどうかは知らない)
だから、SpringFrameworkを使う場合はアプリケーションサーバーがDependency Injection for Javaを実装していなくても同様の機能を使うことができる。(通常の外部ライブラリを利用する感じ)

JavaEEコンテナ

Javaのサーバーアプリケーションを実行する実行環境。アプリケーションサーバーみたいなやつ。(RubyとかRailsでいうとPumaとかUnicornとかにあたる)
JavaEEコンテナをサーバーで起動して、それが僕らが書いたJavaコードを呼び出す感じ。

Servletコンテナ

JavaEEすべてではなく、JavaEEの一部であるサーブレットJSPあたりだけが実装されたものもある。
これはサーブレットコンテナ呼ばれる。
Tomcatとか、Jettyとかがこれにあたる。
SpringBootを使う場合、使われるアプリケーションサーバーはTomcatやJettyなのでServletコンテナである。
なのでDependency Injection for JavaJPAの機能は使えないが、SpringFramework自体がそれぞれ機能を提供(Spring Data JPAなど)しているため使える。

おわりに

Java周辺のもろもろってネーミングも独特でわかりやすい情報も得づらい気がしていて、概念の理解難しいんだがみんなどうやって理解しているんだろうか?
ある程度理解してから調べると確かに書いてあるんだけど、最初は全然理解できなかったんだよな。。