Jakarta EE 10で新しくなった点(What’s new in Jakarta EE 10) の勝手翻訳

この記事は以下のブログの4月22日時点の勝手翻訳です。意訳も含みますし、元のブログは変更があり次第どんどん更新すると言ってるのでご注意ください。

www.mastertheboss.com


Jakarta EE 10 は、"jakarta" 名前空間の更新以来、Jakarta EEの最初のメジャーリリースです。多くのコンポーネント仕様はAPIの実装に反映されるメジャーまたはマイナーバージョンが更新されています。この記事では次の新しいメジャーリリースから何が期待できるかを学びましょう。

プロジェクトの状況

最初に、 Jakarta EE 10の進行状況はGitHub上の進行状況ボードで追跡できます:

https://github.com/orgs/eclipse-ee4j/projects/21

リリースされると、以下のように包括的な依存関係を含めることができるようになります。

<dependency>
    <groupId>jakarta.platform</groupId>
    <artifactId>jakarta.jakartaee-api</artifactId>
    <version>10.0.0</version>
    <scope>provided</scope>
</dependency>

JakartaEE10を実行するための要件

Java SE 11Jakarta EE互換の実装でサポートされる最小のバージョンのランタイムになります。

利用可能なプロファイル:

Jakarta EE 10では次のプロファイルを使用できます。

  • Full Platform Profile:Jakarta EE APIのフルセットを必要とするエンタープライズアプリケーションの開発者向けに設計されたプロファイルです。
  • Web Profile:Jakarta EE APIのすべてを必要としない開発者向けに設計された、Webテクノロジーが含まれているFull Platform Profileの一部で構成されるプロファイルです。
  • Core Profile:この新しいプロファイルには、マイクロサービスと事前コンパイルに適したより小さなランタイムを対象とした一連の Jakarta EE 仕様が含まれています。

削除されたか非推奨になったAPI

次の2つの機能には"削除済み"もしくは"非推奨"のタグが付けられます。(正確な用語やメカニズムは未決定)

EJBエンティティBean(CMPおよびBMP) 埋め込み可能なEJBコンテナ

したがって、EJB 3.0以降のAPI(javax.ejb.Entityなど)で作成されたアプリケーションは、 Jakarta Persistence APIjakarta.persistence)の機能を使用して永続化エンティティをモデル化する必要があります。

最後に仕様のバージョン、プロファイル、必須かどうかを含んだJakarta EE 10 仕様の一覧を示します。

仕様 プロファイル 必須でないかどうか(Yなら必須でない)
Jakarta Activation 2.1 Full Profile N
Jakarta Annotations 2.1 Web Profile N
Jakarta Authentication 3.0 Web Profile N
Jakarta Authorization 2.1 Full Profile N
Jakarta Batch 2.1 Full Profile N
Jakarta Bean Validation 3.0 Web Profile N
Jakarta Concurrency 3.0 Web Profile N
Jakarta Connectors 2.1 Full Profile N
Jakarta Contexts and Dependency Injection 4.0 Full Profile N
Jakarta Debugging Support for Other Languages 2.0 Web Profile N
Jakarta Dependency Injection 2.0 Web Profile N
Jakarta Enterprise Beans 4.0 Full Profile N
Jakarta Enterprise Beans 4.0 Lite Web Profile N
Jakarta Enterprise Web Services 2.0 Full Profile Y
Jakarta Expression Language 5.0 Web Profile N
Jakarta Interceptors 2.1 Web Profile N
Jakarta JSON Binding 3.0 Web Profile N
Jakarta JSON Processing 2.1 Web Profile N
Jakarta Mail 2.1 Full Profile N
Jakarta Managed Beans 2.0 Web Profile N
Jakarta Messaging 3.1 Full Profile N
Jakarta Persistence 3.1 Web Profile N
Jakarta RESTful Web Services 3.1 Web Profile N
Jakarta Security 3.0 Web Profile N
Jakarta Server Faces 4.0 Web Profile N
Jakarta Server Pages 3.1 Web Profile N
Jakarta Servlet 6.0 Web Profile N
Jakarta SOAP with Attachments 3.0 Full Profile Y
Jakarta Standard Tag Library 3.0 Web Profile N
Jakarta Transactions 2.0 Web Profile N
Jakarta WebSocket 2.1 Web Profile N
Jakarta XML Binding 4.0 Full Profile Y
Jakarta XML Web Services 4.0 Full Profile Y

Jakarta EE Platform
Jakarta EE Platform

※画像は元ブログより

主要なAPIアップグレード:

仕様はまだ策定中です。ただし、Jakarta EE 10で期待できる主なハイライトのいくつかをここに一覧化します。

Jakarta Persistence 3.1

  • java.uti.UUID の追加。単純な主キー、複合主キーの両方でフィールドまたはプロパティとして使用できるようになりました。
  • クエリ言語の新しい数値関数
    • CEILING:引数の上限を返します。
    • EXP:引数の指数を返します。
    • FLOOR:引数のフロアを返します。
    • LN:引数の自然対数を返します。
    • POWER:最初の引数を2番目の引数の累乗で返します。
    • ROUND:2番目の引数で指定された小数点以下の桁数に丸められた最初の引数を返します。
    • SIGN:引数の符号を返します。
  • クエリ言語の新しい日付関数
    • LOCAL DATE:データベースサーバーによって定義された現在のローカル日付を返します。
    • LOCAL DATETIME:データベースサーバーによって定義された現在のローカル日時を返します
    • LOCAL TIME:データベースサーバーによって定義された現在のローカル時間を返します。
  • EXTRACT関数のサポート:EXTRACT関数で特定の日付から数値部分を抽出でき、単一のフィールドのみを取得できます。

Jakarta Servlet 6.0

※訳者注:Servlet単独について知りたい場合は記事としてはこっちの方がよさそう。 Top 5 things to know about the Jakarta Servlet 6.0 API release - Coffee Talk: Java, News, Stories and Opinions

  • 非推奨になっていたメソッドの削除
  • Servlet のイミュータブルなrequest/responseのラッパー: 開発者は、持続性のある不変のリクエストとレスポンスを実装することができるようになりました。他のスレッドによるリクエストメソッドの呼び出しと、 リクエストが Servlet コンテナを伝搬する際に必要となる変更との間に競合が発生するからです。
  • URIのセキュリティ保護機能を搭載:現在ではリクエスURIが複数の制約付きURLパターンにマッチするとき、リクエストに適用される制約は、最もよくマッチするURLパターンに関連付けられたものになります。しかしながら、制約付きURLパターンにマッチしないリクエスURIには、 保護要件は適用されません。
  • Cookieの追加属性 : Cookieに自由に属性を追加できるようになります。

Jakarta RESTful Web Services 3.1

このトピックの詳細については、こちらの記事を確認してください: Getting started with Jakarta RESTful Services

  • Java SE Bootstrap APIJAX-RSは、Java SE単独でも動作します。しかし、純粋なJavaSEでJAX-RSサーバーアプリケーションを起動する方法は仕様化されていません。ベンダーロックインを取り除くために、純粋なJavaSE環境でJAX-RSサーバーアプリケーションを起動する方法をベンダーに依存しないAPIで仕様として定義することを提案したいと思います。
  • マルチパートメディアタイプのサポートJakarta EE 仕様はマルチパート/フォームの特定のサポートを提供していませんでした。MultiPartフォームはベンダー固有のアノテーションで実装され、これらの拡張機能に依存するコードは移植できなくなりました。(jersey では@FormDataParam、CXFでは @Multipart)multipart/form-dataメディアタイプを仕様に追加すると、リクエストが複数のエンティティ(パーツ)を単一のエンティティとして送信できるようになります。各部分には、独自のヘッダー、メディアタイプ、およびコンテンツが含まれています。
  • JSON-Bとのより良い連携:アプリケーション提供のJSON-Bクラスの実装提供のエンティティプロバイダーはアプリケーションが提供するコンテキストリゾルバーによって提供されるJsonbインスタンスを使用する必要があります。 [contextprovider]を参照してください。アプリケーションが特定のタイプのJsonbインスタンスを提供しない場合は実装提供のエンティティプロバイダーはjsonbインスタンスの代わりに独自のデフォルトコンテキストを使用する必要があります。
  • プロバイダー拡張機能の自動ロードJavaのServiceLoader APIでマーカーインターフェイスを宣言するだけで、あらゆる種類のJAX-RSコンポーネントを強制的に自動ロードされるコンポーネントに変換する宣言型の方法が追加されます。実際には、提案されたメカニズムは実際にはコンポーネントインスタンス化せずに宣言されたクラスを検出してJAX-RS構成に登録するだけなので、既存のJAX-RSコンポーネントのライフサイクルとスコープが適用されます。
  • CDIとの整合性を高めるための準備としての@Contextの非推奨

Jakarta Server Faces 4.0

このリリースの目標はいくつかの新しい拡張機能MyFacesおよびPrimefacesの実装から着想を得たもの)を含めることです。同時に、非推奨のものを削除し、CDIへの移行を促進します。

  • プログラムでFaceletsを作成するための新しいAPI:現在Faceletsで行われているようなXMLを使用してビューを作成するのではなく、Javaでビューを作成するためのファーストクラスのサポート。
  • 新しい自動拡張なしマッピングorg.apache.myfaces.AUTOMATIC_EXTENSIONLESS_MAPPING が仕様化されました。
  • アノテーション@ClientWindowScoped の追加:PrimefacesのネイティブClientWindow実装と同様の方法でネイティブClientWindow実装が追加されます。
  • カスタムCookie属性のサポート:ExternalContext#addResponseCookie() のSameSiteなど
  • FacesContext#getLifecycleの追加:アプリケーション全体のフェーズリスナーをプログラムで追加および削除する場合に役立ちます。
  • 非推奨だったものの削除JSPサポートやネイティブのマネージドBean(@ManagedBeanおよびその他、CDIとに同様のものがあったもの)の削除など。

Jakarta Security 3.0

  • 追加の認証メカニズム: ベンダーやカスタムの認証スキーマを完全に置き換えることができるようにJakarta Securityの認証メカニズムがに次のメカニズムが追加される予定です。 : Client-cert、 Digest、 OpenID Connect、 OAuth 2
  • CDIとセキュリティ:セキュリティ仕様からビルドインのBeanにインターセプターバインディングアノテーションを適用する機能を追加します。詳細はこちら。
  • FeaturesAuthorization モジュール:。ファクトリー、設定、ポリシーを含むJACCプロバイダー全体をバンドルする必要をなくしてカスタム認可ルールを簡素化。詳細はこちら。
  • 認証機構の拡張:URLごとの認証機構を含むユーザーによる認証機構の選択(プロバイダXでログイン、プロバイダYでログインなど)、複数の認証機構(JWTを試してBASIC認証に戻すなど)。

JSON Processing 2.1

  • 実装とAPIの個別のリポジトリ:仕様を以前よりベンダーに依存しないように分離しています。
  • JsonNumber の改善:一般的な数値型を使用して数値を内部に格納できるようになります。

JSON Binding 3.0

WildFlyJakarta EE 10 サポート

WildFlyニュースで説明されているように、Jakarta EE 10のサポートはWildFly 27で計画されています。WildFly 27は、次の仕様と互換性があります。

Payara のJakart EE 10 サポート

PayaraチームはEclipse Foundationの戦略的メンバーとして、Enterprise APIの革新におけるトッププレーヤーです。Payara Application Serverのリリース6でJakarta EE 10を使用できるようになります。公式のPayara Jakarta ページでニュースを確認してください: https://www.payara.fish/learn/get-started-with-jakarta-ee/