Jakarta EE

Jakarta EEとは



Jakarta EEは、Javaで実装されたアプリケーションサーバーの標準規格と、そのAPIを定めたものです。Java SE(Java Platform, Standard Edition)の拡張機能として提供され、旧名はJava EE(Java Platform, Enterprise Edition)でした。

概要



1999年に初版である1.2が発表されて以来、主に小規模から大規模サーバーシステム向けの標準仕様として利用されています。動的なHTTPサーバー機能、自動トランザクション管理、データベース接続、メッセージング、各種通信プロトコルなどのAPIが定義されており、大規模システムにおける多層構造の構築や、XAプロトコルを用いた分散トランザクションにも対応しています。

過去のリリースに伴い名称が変化しており、2017年時点ではJava EE 8でしたが、Java EE 5以前のバージョンはJ2EE(Java 2 Platform, Enterprise Edition)と呼ばれていました。

Java EE自体は仕様であるため、各企業や組織がライセンスを受けて実装しています。オープンソース、プロプライエタリ、無償、有償など様々な実装が存在し、選択肢が豊富です。

長らくJava EEの権利を保有していたオラクルは、2017年Java EEをEclipse Foundationに寄贈し、オープンソース化を発表しました。商標についてはオラクルが引き続き保有するため、Java EE 9以降はJakarta EEという名称で開発が進められています。

歴史



Jakarta EEは1999年の登場以来、数年ごとに新しいバージョンが策定されてきました。

Java 2 Platform, Enterprise Edition 1.2


最初のJ2EE仕様として、サン・マイクロシステムズによって1999年12月12日にリリースされました。このバージョンでは、以下の技術が中心でした。

JDBC 2.0
JNDI 1.2
RMI-IIOP 1.0
Servlet 2.2
JSP 1.1
EJB 1.1
JMS 1.0
JTA 1.0
JavaMail 1.1
JAF 1.0

Java 2 Platform, Enterprise Edition 1.3


JSR 58として2001年9月24日にリリースされました。Java Community Processの下で仕様検討が行われ、ベータ版2001年4月にサンによってリリースされました。このバージョンでは、JSPの標準カスタムタグライブラリであるJSTL、JAXP、J2CA、JAASなどの技術が追加されました。また、EJBが2.0に更新され、JNDIはJ2SEに移行しました。

Java 2 Platform, Enterprise Edition 1.4


JSR 151として2003年11月24日にリリースされました。ベータ版2002年12月にサンによってリリースされました。SOAPによるWebサービスを実現するJAXP、JAXR、JAX-RPCが導入されましたが、全体的には小規模な改良にとどまりました。

Java Platform, Enterprise Edition 5


JSR 244として2006年5月11日にリリースされました。このバージョンから名称とバージョン体系が変更され、J2SE 5.0で導入されたアノテーションを使った仕組みが導入されました。EJBはDIやPOJOの概念を取り入れた3.0に更新され、EJBから派生する形で永続化フレームワークであるJPAも追加されました。また、新たにWebアプリケーションフレームワークであるJSFが採用されました。

Java Platform, Enterprise Edition 6


JSR 316として2009年12月10日にリリースされました。このバージョンでは、DIを実現するCDIや、バリデーションを提供するBean Validationなどの技術が追加されました。また、JSFが2.0となり大幅に仕様が変更されました。

Java Platform, Enterprise Edition 7


JSR 342として2013年5月28日にリリースされました。このバージョンでは、JSFが2.2となりCDIに準拠し、HTML5にも対応しました。WebSocketやバッチ処理に関する仕様も追加されました。Java EE 7は以下の技術から構成されています。

WebSocket
Processing
Servlet 3.1
JSF 2.2
EL 3.0
JSP 2.3
JSTL 1.2
Batch Applications
Concurrency Utilities
CDI 1.1
DI 1.0
Bean Validation 1.1
EJB 3.2
Interceptors 1.2
JCA 1.7
JPA 2.1
Common Annotations 1.2
JMS 2.0
JTA 1.2
JavaMail 1.5
JAX-RS 2.0
Enterprise Web Services 1.3
JAX-WS 2.2
Web Services Metadata
JAX-RPC 1.1
JAXM 1.3
JAXR 1.0
JASPIC 1.1
Java ACC 1.5
Java EE Application Deployment 1.2
J2EE Management 1.1
Debugging Support for Other Languages 1.0
JAXB 2.2
JAXP 1.3
JDBC 4.0
JMX 2.0
JAF 1.1
StAX

Java Platform, Enterprise Edition 8


JSR 366として2017年9月21日にリリースされました。このバージョンでは、ServletがHTTP/2|HTTP_2をサポートした4.0に更新されました。全体としては7の小改良に留まりましたが、JSF 2.3によるHTML処理が大きく改良されました。

主なAPI



Jakarta EE APIは、Java SE APIを元に機能拡張された様々な技術を包含しています。

Java EE 8 Specification APIs
Java EE 7 Specification APIs
Java EE 6 API Specification

javax.servlet.


Servletパッケージでは、主にHTTPリクエストのためのAPIが定義されています。また、JavaServer Pages (JSP) に関するAPIも含まれています。

javax.websocket.


WebSocketパッケージでは、WebSocketの通信に関するAPIが定義されています。

javax.faces.


Facesパッケージでは、Java Server Faces (JSF) に関するAPIが定義されています。JSFはコンポーネントによるUI構築技術です。

javax.el.


ELパッケージでは、Java EEのEL式に関するクラスとインターフェースが定義されています。EL式はJSPやJSFを作成するWebアプリケーション開発者のための簡単な構文で、主にJSFにおいてコンポーネントに管理beanを結びつけるために用いられます。仕様自体は独立しており、他の場所でも使用可能です。

javax.enterprise.inject.


Injectパッケージでは、Contexts and Dependency Injection (CDI) APIのためのインジェクションアノテーションが定義されています。CDIは依存性の注入 (DI) に関する仕様です。

javax.enterprise.context.


Contextパッケージでは、Contexts and Dependency Injection (CDI) APIのためのコンテキストアノテーションとインターフェースが定義されています。

javax.ejb.


Enterprise JavaBeans (EJB) パッケージでは、EJBコンテナがサポートするトランザクション処理 (JTA)、RPC(RMIまたはRMI-IIOP)、並行性制御、依存性の注入 (DI)、ビジネスオブジェクトのためのアクセス制御などの軽量APIが定義されています。また、このパッケージは、エンタープライズBeanとそのクライアント間、エンタープライズBeanとEJBコンテナ間の取り決めを定義したクラスとインタフェースも含まれています。

javax.validation.


Validationパッケージでは、Bean Validation APIのためのアノテーションとインターフェースが定義されています。Bean Validationは、bean(例えばJPAのモデルクラス)に対する統一されたバリデーション(値の検証)手法を提供します。Java EEの各要素では、JPAが永続化層におけるバリデーションに、JSFがビュー層におけるバリデーションに関与します。

javax.persistence.


Persistenceパッケージには、永続化プロバイダと管理クラス、それにJava Persistence API (JPA) クライアントの間の取り決めを定義したクラスとインターフェースが含まれています。

javax.transaction.


Transactionパッケージでは、Java EEのトランザクション処理を担うJava Transaction API (JTA) のインターフェースとアノテーションを含むAPIが定義されています。これらのAPIは低レベルAPIが抽象化されたものであり、通常のアプリケーション開発者がJava EEを用いて開発する場合は、EJBのより高レベルのトランザクション管理を用いるか、このAPIのアノテーションとCDIの管理Beanとを組み合わせて使用することが想定されています。

javax.security.auth.message.


Messageパッケージでは、Java Authentication SPI (JASPIC) のインターフェースやクラスを含むAPIが定義されています。JASPICはセキュアなJava EEアプリケーションを構築するための仕様です。

javax.enterprise.concurrent.


Concurrentパッケージでは、Java EEプラットフォーム標準の管理されたスレッドプールと連携する、並行処理に関するインターフェースが定義されています。

javax.jms.


JMSパッケージでは、Java Message Service (JMS) APIが定義されています。JMSは、Javaプログラムにエンタープライズメッセージの生成、送信、受信、読み込みのための手法を提供します。

javax.batch.api.


BatchのAPIパッケージでは、Java EEのバッチ処理のためのAPIが定義されています。バッチ処理APIは、大容量のデータを扱う長時間に亘るバックグラウンドタスクや、定期的に実行されるタスクのための手法を提供します。

javax.resource.


Resourceパッケージでは、Java EE Connector Architecture (JCA) APIが定義されています。JCAは、Enterprise application integration (EAI) の一部であるアプリケーションサーバーや企業情報システム (EIS) の相互接続を実現するための技術です。このAPIはベンダーのための低レベルAPIであり、通常のアプリケーション開発者をターゲットとはしていません。

Jakarta EEの実装



Jakarta EEの機能を用いたアプリケーションを動作させるには、Jakarta EEの仕様を実装した実行環境やライブラリが必要です。Jakarta EE SDKには、Jakarta EEに準拠したオープンソースのアプリケーションサーバーであるGlassFish Open Source Editionが同梱されています。GlassFish 5.0はJava EE 8の参照実装です。NetBeansやEclipseといったJava開発ツールの多くもJakarta EEに対応しています。

以下に、Jakarta EE (Java EE) に準拠した主なアプリケーションサーバーを示します。表のバージョン番号は、該当するJakarta EE (Java EE) 仕様に対応したバージョンを表しています。



以下に、Java EE 7の様々な技術を組み合わせて作成した、ユーザーの登録を行うWeb入力画面のサンプルを示します。

Jakarta EEには、サーブレットにJSP、またJSFとFaceletsといった、Web UIを作成できるいくつかの技術が存在します。以下はJSFとFaceletsを用いた例です。コード上では明示されていませんが、入力コンポーネントでは入力値の検証にBean Validationを使用しています。

バッキングBeanの例


Jakarta EEでは、ビューの処理の実装にバッキングBean(画面の背後で処理するBean、管理Beanとも)と呼ばれる仕組みを用います。以下はCDIとEJBを用いたバッキングBeanの例です。

DAOの例


Jakarta EEでは、ビジネスロジックの実装のためにEJBが用意されています。データの永続化ではJDBCやJPAが使用できます。以下はEJBとJPAを用いたData Access Object (DAO) の例です。コード上では明示されていませんが、EJBではトランザクション管理にJTAが使用されます。

エンティティの例


Jakarta EEでは、エンティティ/モデルクラスのためにJPAが用意されており、またバリデーション(値の検証)ではBean Validationが使用できます。以下は両者を用いた例です。

脚注



関連項目



JavaJava#エディション(Java SE、Java EE、Java MEなど)、Java#バージョン履歴(JDK 1.0からJ2SE 1.2、Java SE 8、Java SE 9など)
Java Platform, Standard Edition (Java SE) - Java の汎用的なエディション
Java Platform, Micro Edition (Java ME) - Java組み込みシステム向けエディション
EAR - Jakarta EEアプリーケーションのパッケージ形式

外部リンク



Jakarta EE
Oracle - Java EE

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。