Jakarta EEを知る! オープンソース化されたエンタープライズJavaの現状と今後、バージョン9公開

Jakarta EE 9が2020年7月から9月にかけて段階的にリリースされます。エンタープライズJavaプラットフォームであるJava EEをオープンソース化する経緯と現状、そして最新バージョンから今後について、『Javaアルゴリズム+データ構造完全制覇』の杉山貴章さんによる解説です。

Jakarta EEを知る! オープンソース化されたエンタープライズJavaの現状と今後、バージョン9公開

Jakarta EEは、エンタープライズ分野向けのJavaプラットフォームの標準仕様です。もともと「Java EE」として開発されていたものが、2017年にオープンソース化されてEclipse Foundationに開発が移管し、その際に名称も変更されました。

本稿ではこのJakarta EEについて、オープンソース化された経緯やこれまでのJava EEとの違いなどについてお伝えします。

Jakarta EEとは

Jakarta EEは、エンタープライズ分野向けのJavaの開発および実行環境の標準仕様です。Javaプラットフォームの標準仕様には、大きく分けると次の3種類があります。

Java SE
Javaの最も基本となる言語機能とAPI、Java VMなどを含んだプラットフォーム。Java Platform Standard Editionの略称
Jakarta EE(Java EE)
Java SEに対して、大規模なサーバサイド・アプリケーションを開発する機能を付け加えたエンタープライズ分野向けのプラットフォーム。EEはEnterprise Editionの略
Java ME
情報家電やモバイル端末などを対象とした、組み込み機器向けのプラットフォーム。最小限のハードウェアリソースでも動作するようにコンパクトな仕様になっている。MEはMicro Editionの略

Java SEは全てのJavaプラットフォームの基本となるもので、プログラミング言語としてのJavaの基本的な仕様や、各種標準ライブラリ、Java VMを含む実行環境などが提供されます。Jakarta EEを使う場合にも、基本機能としてJava SEが必要です。

Javaの標準仕様とJava SE

Java SEの標準仕様は、コミュニティが主導するJava Community Process(以下、JCP)という仕組みに基づいて策定されます。例えば、2020年5月時点のJava SEの最新バージョンはJava SE 14ですが、この仕様はJCPによって「JSR 389」として決められています。

Java SEのアプリケーションを開発するための開発ツールは一般的にJDK(Java Development Kit)と呼ばれており、現在はOpenJDKプロジェクトによってオープンソースで開発されたものが広く使われています。

つまり、Javaの基本的な仕様はJCPによって決められ、実際の開発はOpenJDKプロジェクトによって行われているというわけです。もっとも、OpenJDKプロジェクトは成果物としてソースコードしか提供しないため、実際には各ベンダ(OracleやIBMなど)がOpenJDKの成果物をもとに独自のJDKを作成して提供する形になっています。

Java EEからJakarta EEへ

Java SEには、サーバサイドで動作する大規模な業務アプリケーションを開発する機能は含まれていません。

例えば銀行のネットバンキングシステムや、コンビニエンスストアのPOSシステム、多数のユーザが利用するインターネットの通販サイトなどといった大規模なシステムを開発するためには、Java SEで提供される機能だけでは力不足なわけです。

そのようなエンタープライズ分野でのニーズに対応したJavaプラットフォームの標準仕様として位置付けられているのが、Jakarta EEです。

Jakarta EEはもともとは「Java EE」という名称で、Java SEと同様にJCPによって仕様が策定されていました。次のセクションで説明する経緯により、開発・保守がオープンソース団体のEclipse Foundationに移管され、名称も「Jakarta EE」に変更されました。

Java EEからJakarta EEに至る経緯

1

Java EE/Jakarta EEの歴史

エンタープライズ版Javaプラットフォームの最初のバージョンはJ2EE 1.2(Java 2 Platform, Enterprise Edition 1.2)で、1999年にリリースされました。これにはServletやJSP(Java Serer Pages)、JDBCなどといった基本的なサーバサイド技術に加えて、EJB(Enterprise JavaBeans)やJMS(Java Message Service)、JNDI(Java Naming and Directory Interface)など、本格的なエンタープライズアプリケーション開発のための機能が含まれました。

その後、2017年8月にリリースされたJava EE 8までで6度にわたる改定が行われました。J2EE 1.4まではエンタープライズの要件を満たすためにさまざまな機能を取り入れ、その結果として仕様が肥大化して、アプリケーション開発の設定が煩雑になる問題が発生していました。

そこで、Java EE 5ではアノテーションの全面的な導入によって、各種設定を簡略化することに成功しました。続くJava EE 6ではプロファイルの概念が導入され、用途に応じたAPIのサブセットを定義できるようになりました。CDI(Contexts and Dependency Inject)が導入さたのもこのときで、次のJava EE 7ではそれまでのEJB中心のアーキテクチャからCDIへの本格的な移行がスタートしました。

Java EE GuardiansとJava EE 8のリリース

Java EE 7がリリースされて3年後の2016年、Javaコミュニティでは「Java EE Guardians」というプロジェクトが立ち上がります。当時はJava EE 8の仕様策定と開発が行われていましたが、その作業がスケジュールから大幅に遅れていたことから、OracleのJava EE 8開発に対する投資が少なくなっているのではないかという懸念が持ち上がっていました。

この状況に対する危機感を表明し、Oracleに改善を促そうという目的で結成されたのがJava EE Guardiansです。この活動には多くの企業や団体、Java開発者が賛同し、結果としてJava EE 8の開発は再び活性化され、翌年のJava EE 8リリースへとつながりました。

当初Java EE 8はクラウドを中心とした新しい時代に適応できるJava EE仕様を目指していましたが、上記のような経緯もあり、Java EE 7の小規模な改訂版という位置付けでリリースされることになりました。

† Java EE Guardiansは、その後もJakarta EEの活動を推進する独立団体「Jakarta EE Ambassadors」として活動が続いています。

Java EE 9の開発中止とEE4Jプロジェクト

Java EE 8のリリースからまもない2017年9月、OracleはJava EE 9以降の開発を中止し、Java EEに関する成果物をオープンソースとして非営利団体に寄贈することを発表しました。その寄贈先としてEclipse Foundationが選ばれ、Java EE資産を移管するプロジェクトとしてEclipse Enterprise for Java(EE4J)が立ち上げられました。

Oracleから寄贈された対象物には、Java EE関連のAPIや参照実装であるGlassFishだけでなく、Technology Compatibility Kit(TCK: 互換性試験キット)などが含まれています。TCKは、Java EEの実装が正しく仕様を満たしていることをテストするツールです。

サードパーティが開発したJavaアプリケーションサーバなどのソフトウェアが「Java EE互換である」と名乗るためには、このTCKによるテストを通過する必要があります。TCKがオープンソースになったということは、互換性の管理も含めてコミュニティに移管されたことを意味しています。

ただし、「Java」の商標は引き続きOracleが所有するため、オープンソース化後には「Java EE」の名称を使い続けることができなくなりました。そこでEclipse Foundationによって投票が行われた結果、「Jakarta EE」という名称になることが決定しました。

この名称の変更に伴い、Java EEに含まれる各種コンポーネントについても、(その多くがJavaの文字列を含むため)Jakarta EE用の名称に変更されています。

EE4JプロジェクトによるJava EE資産の引き継ぎは2019年1月に完了し、2019年9月にJakarta EEの最初のバージョンであるJakarta EE 8がリリースされました。互換実装であるEclipse GlassFish 5.1や、関連するTCKなども同時にリリースされています。

Jakarta EEの基本方針

Eclipse Foundationでは、Jakarta EEプロジェクトを始めるにあたって、その方向性を決めるアンケート調査を行いました。その結果、エンタープライズ市場ではコンテナ、マイクロサービス、そしてマルチクラウドに対応した移植性のサポートが、Jakarta EEに特に求められた要件だということが明らかになりました。

そこでプロジェクトチームは、Jakarta EEが当面のあいだ注力する対象を「動的でスケーラブルな、クラウドネイティブ・アプリケーションの開発」とすることに決定しました。

Java EE 8互換でオープンソースライセンス化

その上で、最初のリリースであるJakarta EE 8は、次のような基本方針に従って開発が行われました。

  • Java EE 8仕様と完全な互換性を保つ
  • Jakarta EEの仕様策定プロセスに従った透明性のある仕様策定を保証する
  • Java EE 8と同じAPIおよびjavadocを含む
  • Java EE 8のTCKと完全に互換性があるJakarta EE 8のTCKを、オープンソースライセンスのもとで提供する
  • Java EE 8プラットフォーム仕様のインテグレーション要件と同じ内容のJakarta EE 8プラットフォーム仕様を含む
  • (サードパーティによる)実装が、Jakarta EE 8仕様との互換性を明確にできるプロセスを提供する

このように、Jakarta EEプロジェクトの最初の目標は、Java EE 8と同一の機能を持ち、ライセンスのみオープンソースライセンスに変更されたエンタープライズJavaプラットフォームをリリースすることでした。

クラウドネイティブ・アプリケーション開発のサポートに向けた機能拡張やAPIの変更については、その後のリリースで段階を踏んで実現していく予定になっています。

クラウドネイティブなJava

クラウドネイティブなJavaとは何か? なぜ多くの企業にとってクラウドネイティブが重要なのか? そして、それらの要件に対してJakarta EEテクノロジーがどのように応えるのか? といった話は「Fulfilling the Vision for Open Source, Cloud Native Java」という文書にまとめられ、無料で公開されています。

クラウドネイティブに向けた直近の活動としては、まずクラウドに必要のないJava EEの既存機能や、逆にクラウドに必要だがまだJava EEに提供されていない機能を洗い出すことが挙げられています。そしてコミュニティベースのオープンなプロセスに従って、これらの機能の短期的・長期的な優先順位を決定し、実装を進めるとのことです。

そして将来的には、Jakarta EEはJava EEから分岐し、クラウド中心のプラットフォームへと進化していくことになります。

Jakarta EE 8の主な新機能

エンジニアHubに会員登録すると
続きをお読みいただけます(無料)。
登録のメリット
  • すべての過去記事を読める
  • 過去のウェビナー動画を
    視聴できる
  • 企業やエージェントから
    スカウトが届く