Javaカード | |
---|---|
Java ME (Micro) | |
Java SE (Standard) | |
Jakarta EE | |
JavaFX |
Jakarta EEは、Javaで実装されたアプリケーションサーバの標準規格及びそのAPIを定めたもの。Java Platform, Standard Edition (Java SE) の拡張機能の形で提供される。旧名はJava Platform, Enterprise Edition (Java EE) 。
1999年に初版である1.2が発表された。主に小規模〜大規模サーバーシステムの標準仕様として、動的HTTPサーバ機能、自動トランザクション管理機能、データベース接続機能、メッセージング機能、各種通信プロトコル機能がAPIとして定められている。大規模システムにおける多層システムの構築も想定されており、XAプロトコルを用いた分散トランザクションにも対応している。
過去のリリースに伴い名称が変化しており、2017年現在のバージョンはJava Platform, Enterprise Edition 8 (Java EE 8) と命名されているが、Java EE 5より過去のバージョンはJava 2 Platform, Enterprise Edition (J2EE) と命名されていた。
Java EE自体は仕様であるため、各社・各組織がライセンスを受け実装している。オープンソースのものからプロプライエタリなもの、無償のものや有償のものなど選択肢が多い。
Java EEの権利はサン・マイクロシステムズを買収したオラクルが保有してきたが、同社は2017年にJava EEをEclipse Foundationに寄贈してオープンソース化をすることを発表。Java EEの商標については引き続きオラクルが保有するため、Java EE 9以後はJakarta EEの名で開発が進められる事が発表された[1]。
Jakarta EEは1999年の登場以後、数年おきに新しいバージョンが策定されている。
Jakarta EE APIは Java SE APIを元に機能拡張された様々な技術を包含している。
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 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 8準拠 | Java EE 7準拠 | Java EE 6準拠 (Full Profile) |
Java EE 6準拠 (Web Profile) |
Java EE 5準拠 | J2EE 1.4準拠 | ライセンス |
---|---|---|---|---|---|---|---|
GlassFish server Open Source Edition | Yes v5.x | Yes v4.x [2] | Yes v3.x [3] | Yes v3.x Web Profile | Yes v2.1.x[3] | CDDL, GPL | |
Payara Server | Yes v5.x | Yes 4.x | CDDL, GPL | ||||
Oracle GlassFish Server | Yes v3[4] | Yes Sun Java System Application Server v9.0 | Yes Sun Java System Application Server v8.2 | プロプライエタリ (OSS版を元とする) | |||
Oracle WebLogic Server | Yes v12.2.x | Yes v12.1.x[5] | Yes v10.3.5.0 | Yes v9 | プロプライエタリ | ||
WildFly | Yes v14.x[6] | Yes v12,x, v11.x, v10.x, v9.x, v8.x[7][8][9], v7.1[10] | Yes v6.0 [1], v7.0 [2] | Yes v5.1[11][12] | Yes v4.x | LGPL | |
JBoss Enterprise Application Platform | Yes v7.2 [13] | Yes v7.0 | Yes v6.0 [14] | Yes v5 | LGPL (WildFlyの商用版) | ||
IBM WebSphere Application Server | Yes v8[15] | Yes v7 | Yes | プロプライエタリ | |||
Open Liberty | Yes v18.0.0.2[16] | Yes v18.x, v17.x, IBM WAS Liberty v8.5.5.6 [17][18] | Yes IBM WAS Liberty v8.5.5 [19] | Eclipse Public License | |||
IBM WebSphere Application Server Community Edition | Yes v3.0[20][出典無効] | Yes v2.1 | プロプライエタリ | ||||
Apache Geronimo | Yes v3.0 [3][21] | Yes v2.0 | Yes v1.0 | Apache License 2.0 | |||
TmaxSoft JEUS | Yes v8 [22][23][24] | Yes v7[25][26] | Yes v6 | Yes v5 | プロプライエタリ | ||
富士通 Interstage Application Server[27] | Yes v1[28] | Yes | プロプライエタリ | ||||
NEC WebOTX | Yes v10[29] | Yes v9[30] | Yes v8 | プロプライエタリ | |||
Caucho Resin Server | Yes v4.0.[31] | Yes | プロプライエタリ | ||||
Apache TomEE[32][33] | Yes | Apache License 2.0 | |||||
OW2 JOnAS | Yes v5.3 rc1 [34] | Yes | Yes | LGPL | |||
SAP NetWeaver | Yes v2.x [35] | Yes | Yes | プロプライエタリ | |||
Oracle Containers for Java EE | Yes | プロプライエタリ | |||||
Oracle iPlanet Web Server | Yes Sun Java System Web Server | プロプライエタリ | |||||
Oracle Application Server 10g | Yes | プロプライエタリ | |||||
Sybase Enterprise Application Server [36] | Yes | プロプライエタリ |
以下に、Java EE 7の様々な技術を組み合わせて作成した、ユーザーの登録を行うWeb入力画面のサンプルを示す。
Jakarta EEには、サーブレットにJSP、またJSFとFaceletsといった、Web UIを作ることが可能ないくつかの技術が存在する。以下はJSFとFaceletsを用いた例である。コード上では明示されていないが、入力コンポーネントでは入力値の検証にBean Validationを使用している。
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html" xmlns:f="http://xmlns.jcp.org/jsf/core">
<f:metadata>
<f:viewParam name="user_id" value="#{userEdit.user}" converter="#{userConvertor}" />
</f:metadata>
<h:body>
<h:messages />
<h:form>
<h:panelGrid columns="2">
<h:outputLabel for="firstName" value="First name" />
<h:inputText id="firstName" value="#{userEdit.user.firstName}" label="First name" />
<h:outputLabel for="lastName" value="Last name" />
<h:inputText id="lastName" value="#{userEdit.user.lastName}" label="Last name" />
<h:commandButton action="#{userEdit.saveUser}" value="Save" />
</h:panelGrid>
</h:form>
</h:body>
</html>
JJakarta EEでは、ビューの処理の実装にバッキングBean(画面の背後で処理するBean、管理Beanとも)と呼ばれる仕組みを用いる。以下はCDIとEJBを用いたバッキングBeanの例である。
@Named
@ViewScoped
public class UserEdit {
private User user;
@Inject
private UserDAO userDAO;
public String saveUser() {
userDAO.save(this.user);
addFlashMessage("User " + this.user.getId() + " saved");
return "users.xhtml?faces-redirect=true";
}
public void setUser(User user) {
this.user = user;
}
public User getUser() {
return user;
}
}
Jakarta EEでは、ビジネスロジックの実装のためにEJBが用意されている。データの永続化ではJDBCやJPAが使用できる。以下はEJBとJPAを用いたData Access Object (DAO) の例である。コード上では明示されていないが、EJBではトランザクション管理にJTAが使用される。
@Stateless
public class UserDAO {
@PersistenceContext
private EntityManager entityManager;
public void save(User user) {
entityManager.persist(user);
}
public void update(User user) {
entityManager.merge(user);
}
public List<User> getAll() {
return entityManager.createNamedQuery("User.getAll", User.class)
.getResultList();
}
}
Jakarta EEでは、エンティティ/モデルクラスのためにJPAが用意されており、またバリデーション(値の検証)ではBean Validationが使用できる。以下は両者を用いた例である。
@Entity
public class User {
@Id
@GeneratedValue(strategy = IDENTITY)
private Integer id;
@Size(min = 2, message="First name too short")
private String firstName;
@Size(min = 2, message="Last name too short")
private String lastName;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
}