Java EE (Java Platform, Enterprise Edition) とは　【別名：Jakarta EE】

※Javaを開発したSun Microsystemsという会社が、その後Orackleに買収されたことから、2018年2月に「Jakarta EE」に名称変更された。

# 【Java EEとは】
Java EEとは、「企業向けのWebアプリケーション開発ができる機能がセットになったプラットフォーム」。ざっくり言うと「APIの集まり」。

・中身は、Java SEにWebアプリケーションの開発に必要なサーバー関係の機能などを追加したもの。
・Java EEの中にJava SEも含まれるため、Java EEでWebアプリケーションの開発をするときにはJava SEのライブラリを使うことができる。
・Java EEで開発された有名なサービスは、Twitter/楽天ECサイト/Evernoteがある。

「JavaSE（Java Platform, Standard Edition）」は、Javaの標準的なアプリケーション開発に必要な機能だけをセットにしたもの。

::: note
つまり…
・Java EEは、「JavaSE+拡張機能」をまとめたもの。
・Java SEは、「Javaの基本機能」。
:::

（補足）
Java自体の特徴：比較的実行速度が早く、安全性も高い。ECサイト/旅行予約サイト/SNSなど、多くのWebアプリケーションで採用されている。



# 【Java EE及びJavaを動かすために必要なもの】
・ソースコード
ソースコードとは、プログラムを作る際に、そのプログラムが動作する処理内容が記述されたテキストファイル。
Java言語で書かれたソースコードが必要になる。

・API(Application Programming Interface)
※Javaの世界では「jarファイル」とも呼ばれることもある。
Javaでアプリケーションを作成するために必要となる標準機能を提供するインターフェースのこと。開発者は一から実装することなく標準で用意されているAPIを使用すると、効率よく開発ができる。
Java EEはここに含まれる。

・コンパイラ（コンパイル）
コンパイラとは、人間がわかる言葉で書いたプログラムコードを、コンピュータが実行できるファイル形式に変換する処理をしてくれるツールのこと。また、この変換工程のことをコンパイルという。

・Java VM（Java Virtual Machine)
Java VMは、実行環境のこと。つまり、プログラムを動かすために必要なソフトウェア、実行ツールのこと。
WindowsやLinuxなどプラットフォーム別にJava VMが用意されているので、プラットフォームに依存せずにプログラムを動かせる。
Java VMがソースコードを解釈し、対象のOSで実行可能形式のファイルに変換する。

・IDE（統合開発環境）
Java EEだけがあればJavaの開発ができるわけではなく、大抵の場合、統合開発環境（IDE）を使用する。簡単に言うと開発環境のこと。
統合開発環境とは、コードエディタ、デバッグ機能、コンパイラなどがセットになったツール。
IDEには、「Eclipse」「NetBeans」「IntelliJ IDEA」といったものがある。



# 【Java EEはAPI】
「javaEE」を始めとする、Java SE、Java MEらをAPIと呼ぶ。
APIとは、いわゆる関数群（ツール）のこと。
関数を持つのは何もJavaだけではなく、他の言語にも関数はある。大抵の言語は、その言語をインストールして実行環境をつくると、一緒に丸ごと関数がついてくる。
ただ、Javaには関数が数えきれないほどあるため、標準的なJavaの実行環境を作っても、全部の関数が揃っているわけではない。必要に応じてインストールしなければならない。

Java EE、Java SE、Java MEはそのようなAPI（関数群）の代表例である。

- Java SE：Javaを使うための最も基本的なAPI
　　　　　　JDKに含まれる。
　　　　　　これが無いと始まらない。

- Java EE：ちょっと高級なAPIとのこと（高級API群に含まれる）
　　　　　 必要であればインストールする必要あり。
　　　　　 サーブレットなど、Web上で動く関数。

- Java ME：これも高級なAPI（高級API群に含まれる）
　　　　　　家電や携帯端末開発時に組み込まれるもの。



# 【Java EEのSDK】
Java EEのSDKには、「フルプラットフォームプロファイル(通常版)」と「Web Profile」の2種類がある。
「SDK」とは、Software Development Kitの略でソフトウェア開発キットのこと。要するに、Java EEにに含まれている開発環境、サンプルコード、資料、などなど開発に必要なものをひっくるめてSDKと呼んでいる。

- Web Profile
Java EEのSDKのうちの一つがWeb Profile。
通常版に対して簡単になっているのがWeb Profile。通常版から特定のAPIのみ抜き出して軽量化しているので、簡易的な開発ならWeb Profileの方が通常版よりも向いている。すべての機能を使うにはフルプラットフォームプロファイルを選択する必要がある。

- Glassfish
GlassfishはJava EEのSDKに含まれているアプリケーションサーバー。実際にコードを書いて作ったアプリを動かす土台ということ。
動かすだけでなく、開発やテストにも使えるのが特徴。


# 【JavaEEの代表的な機能（JPA/JCA/JMS/Java Mail/Batch）】
- JPA（Java Persistence API）
JPAは、データベースへのアクセスを行うためのフレームワーク。
Javaのオブジェクトとテーブルのマッピング情報を、アノテーションで実装する。これにより複雑な定義ファイルを作成する必要がなくなるので、簡素なプログラムコードでデータベース処理を実現できる。

- JCA（Java EE Connector Architecture）
JCAは、Java EEプラットフォームとERPやメインフレームシステムなどの外部システムとの相互接続を実現するAPI。

- JMS（Java Message Service）
JMSは、メッセージング指向ミドルウェア（MOM）のサービスを利用するための標準API。
MOMを利用し、統一された手順で同期または非同期にメッセージをやり取りできる。

- Java Mail
Java Mailは、メールアプリケーションを作成するためのAPI。メールサーバーを実装するのではなく、Java Mail APIを使用してメール・サーバーへアクセスできるようになる。

- Batch（バッチ）
JSR-352 Batch Application for the Java Platformに準拠したバッチ処理用APIを使用すると、バッチ処理を実装できる。
バッチ処理は、ユーザー対話なしで実行できる処理で、データを一括処理できる。

（補足）
・オブジェクト：概念や物体をふんわりと表現したもの
・マッピング：何かと何かを対応させて関連づけること。例）CのライブラリをJavaにマッピングした → CのライブラリをJavaのプログラムと関連づけたという意味。
・テーブル：データを入れる箱。表形式である。
・アノテーション：注意書きを追加する機能になり余白に文字を追加すること。
・ERP（Enterprise Resource Planning）：企業の資源を統合的に管理するお手伝いをするシステムやソフトウェアのこと。
・メインフレーム：基幹システムなどに用いられる大型コンピュータシステム。
・メッセージング指向ミドルウェア（MOM）：異なるプラットフォーム間でアプリケーション同士が双方向に情報をやり取りするためのソフトウェアのこと。
・同期/非同期とは、
　同期：やり取りする相手からの反応を待って次の処理を始める。相手に要求を投げたら、応答が返ってくるまで待つ。
　非同期：やり取りする相手からの反応を待たないで次の処理を始める。相手に要求を投げたら、応答が返ってくるまで待たない。さっさと次の処理を進める。