How to Use Eclipse Transformer to Convert a 3rd Party Library to the New Jakarta Namespace

原文はこちら。
The original article was written by Rudy De Busscher (Technical Sales and Developer Advocate at Payara Services Ltd).
https://blog.payara.fish/how-to-use-the-eclipse-transformer-project-to-convert-a-3rd-party-library

Introduction

Jakarta EE 9のリリースにより、Java Enterpriseの伝統が破られました。OracleからEclipse FoundationへのJava EEコード寄贈における法的要件は、javax名前空間をjakartaに変更することです。

しかし、Jakarta EE 9でのパッケージとXML名前空間の変更は、ほんの始まりに過ぎません。名前空間の変更により、新しい開発や機能が可能になりますが、Java Enterprise仕様を使用しているすべてのフレームワークやライブラリも、新バージョンに合わせて調整する必要があります。

Updates

アプリケーションが Jakarta EE上で追加ライブラリを使用しているので、これらのライブラリも新しい名前空間に更新する必要があります。Apache Deltaspike、PrimeFaces、Jackson、MicroProfile、Arquillianなどのライブラリは、すべて何らかのJakarta EE仕様に依存しています。そして、これらのすべてが Jakarta EE 9 のコードをベースにしたバージョンをリリースするため、新しいパッケージ名を使用することになります。

数ヶ月待てば、あなたのアプリケーションをJakarta EE 9の名前空間への変換は容易になるでしょう。なので、Jakarta EE 10で計画されている新機能に備えましょう。一方、パッケージ名の変更はJakarta EE 9における唯一の変更なので、このタイミングでアプリケーションの変換のテストを実施することは、特に大規模アプリケーションの場合には意味があります。これは、Eclipse TransformerといくつかのカスタムPOMファイルの助けを借りて対応できます。

Eclipse Transformer

Eclipse Transformerプロジェクトはコンパイル済みのJavaリソースの名前空間を変換します。

Eclipse Transformer
https://github.com/eclipse/transformer

また、アプリケーション全体を含むWARやEARファイルとしてのJARアーティファクトもサポートしています。このプロジェクトは、あらゆる種類の変換を扱うことができ、Jakarta EE 9の変更に関連したものだけではないという意味で汎用的です。

この変換プロジェクトを使用すると、アプリケーションで依存関係として使用するJARファイルの更新版を作成できます。また、MavenのClassifier機能を活用する場合、ローカルのmavenリポジトリにあるJARファイルを変換でき、Jakarta名前空間に変換したバージョンを簡単に取り出すことができます。

JakartaTransformer <path_to_local_mvn_repo>/⁨org⁩/eclipse⁩/microprofile/config⁩/microprofile-config-api⁩/1.1⁩/microprofile-config-api-1.1.jar <path_to_local_mvn_repo>/⁨org⁩/eclipse⁩/microprofile/config⁩/microprofile-config-api⁩/1.1⁩/microprofile-config-api-1.1-jakarta.jar

上記のコマンドを使うと、依存関係にclassifier要素を追加するだけで、非常に簡単にMavenが取り上げるように変換されたJARファイルを作成します。

<dependency>
    <groupId>org.eclipse.microprofile.config</groupId>
    <artifactId>microprofile-config-api</artifactId>
    <version>1.4</version>
    <scope>provided</scope>
    <classifier>jakarta</classifier>
</dependency>

しかしほとんどの場合、ちょっと追加の作業が必要です。そのため、次章ではフレームワークやライブラリで必要な作業の詳細を説明します。

MicroProfile

アプリケーションでMicroProfileの機能を必要としている場合、通常は以下の依存関係をプロジェクトに追加し、Payara ServerやPayara Microといった互換ランタイム上で実行します。

Payara® Server Enterprise
https://www.payara.fish/products/payara-server/
Payara® Micro Enterprise
https://www.payara.fish/products/payara-micro/

<dependency>
    <groupId>org.eclipse.microprofile</groupId>
    <artifactId>microprofile</artifactId>
    <version>3.3</version>
    <type>pom</type>
    <scope>provided</scope>
</dependency>

POMファイル自体を見ると、CDI、JAX-RS、JSONなどのJava EE仕様を参照していることがわかります。他の依存関係はMicroProfile仕様自体に関連しています。

それゆえ、変換されたJARファイルの作成のほかに、MicroProfile Config向けに上記の通り、正しい依存関係を持つ新しいPOMを簡単に作成できます。

生成したファイルの例は以下のURLで確認できます。

ee9-lib-transform/microprofile-pom/pom.xml
https://github.com/rdebusscher/ee9-lib-transform/blob/main/microprofile-pom/pom.xml

このファイルでは、Jakarta EE 9仕様と、classifier要素が追加されたために変換されたJARファイルが使われています。あるケースでは、javax名前空間を持つ依存関係がアプリケーション内でまだ利用可能である場合を除き、除外する必要があります。

全ての様々なMicroProfile仕様の変換を自動化することも可能です。以下のプロジェクトを使って一度の作業で実現できます。

microprofile-transformer
https://github.com/rdebusscher/ee9-lib-transform/tree/main/microprofile-transformer

DeltaSpike

Apache DeltaSpikeは、JPA、JSF、セキュリティなどの様々な側面で支援するモジュールで構成されています。これらのモジュールの中には、非常にシンプルで変換が簡単なものもあります。他のモジュールは多くの依存関係があり、少々作業が必要です。

Core APIモジュールは非常にシンプルです。依存関係がないので、jarファイルを変換してclassifier要素を定義して使うだけです。

一方、JSF実装モジュールはかなり複雑です。Core、Security、Proxyモジュールへの参照や、APIや実装バリアントへの参照があるためです。

しかし、変換プロセスはMicroProfileのときと同じです。classifier要素を使って全ての変換されたアーティファクトを参照し、古いjavax名前空間を使う依存関係が選択されないように適切に除外し、必要に応じてJakarta EE 9の新しい仕様を追加します。

DeltaSpikeのJSF実装モジュールの変換結果の例は以下のURLでご覧いただけます。

ee9-lib-transform/deltaspike-pom/1.8.1/jsf-impl/pom.xml
https://github.com/rdebusscher/ee9-lib-transform/blob/main/deltaspike-pom/1.8.1/jsf-impl/pom.xml

PrimeFaces

すでに述べたように、最終的には、ライブラリのメンテナーが正しいJakarta EE 9の依存関係を用いたライブラリを作成します。PrimeFacesは常に最新の変更に迅速にアップデートするライブラリの一つです。jakarta名前空間を使用したPrimeFaces 9 testバージョンがすでに存在します。

試してみたい場合は、Mavenで以下の依存関係ブロックを使用し、利用可能なリポジトリを参照してください。

<dependency>
     <groupId>com.github.primefaces</groupId>
     <artifactId>primefaces</artifactId>
     <version>master-SNAPSHOT</version>
     <classifier>jakarta</classifier>
 </dependency>

  <repositories>
     <repository>
       	    <id>jitpack.io</id>
         <url>https://jitpack.io</url>
       	</repository>
  </repositories>

Start Experimenting with the Eclipse Transformer Project on the Payara Platform

Jakarta EE 9 がリリースされました。これにはEclipse Foundationへのコード寄付の一部として要求されたjavax名前空間からjakarta名前空間への変更が入っています。この変更はまた、多くのフレームワークやライブラリを更新し、新しいパッケージ名を使用できるようにする必要があることを意味します。

これらのバージョンは今後数ヶ月のうちにリリースされ、開発者はJakarta EE 9以降に対応したアプリケーションを準備することができるようになります。今日から実験を始めたいのであれば、Eclipse Transformerプロジェクトを使って、JARやWARファイル全体を含むコンパイル済みのJavaコードをjakarta名前空間に変換できます。変換に加えて、すべての依存関係が正しく管理されるように、特定の POM ファイルを作成する必要があります。このブログでは、その方法の概要を説明しました。

アプリケーションの準備ができたら、すでにJakarta EE 9をサポートしており、今後数ヶ月のうちに動作保証する予定のPayara ServerとPayara Microで試すことができます。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中