How to Use Eclipse Transformer to Convert a 3rd Party Library to the New Jakarta Namespace (Japanese Language)
Published on 07 Jan 2021
by Kenji Hasunumaはじめに
Jakarta EE 9のリリースは、Java Enterpriseの伝統を破るものとなります。OracleからEclipse FoundationへのJava EEコード寄贈の法的な要件は、javax名前空間をjakarta名前空間に変更することです。
しかし、Jakarta EE 9でのパッケージとXMLの名前空間の変更はまだ始まりに過ぎません。名前空間の変更により、新たな開発や機能追加が可能となりましたが、Java Enterprise仕様の一部を使用しているフレームワークやライブラリもすべて新バージョンに合わせて調整する必要があります。
アップデート
アプリケーションが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リソースの名前空間を変換します。また、アプリケーション全体を含む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のような互換ランタイムで実行します。
<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仕様自体に関連しています。
そのため、上で説明したようにMicroProfile Configのために変換されたJARファイルを作成する以外にも、正しい依存関係を持つ新しいPOPMを非常に簡単に作成することができます。
結果のファイルはこちらで見ることができます。これは、Jakarta EE 9の仕様と、classifier要素が追加されたことにより変換済みのJARファイルを使用しています。場合によっては、アプリケーション内でjavax名前空間を持つ依存関係が利用可能なままになってしまうので、それを取り除く必要があります。
異なるMicroProofile仕様をすべて自動で変換することもできます。GitHubのこちらのプロジェクトでは、これら一度に行うことができます。
DeltaSpike
Apache DeltaSpikeは、JPA、JSF、セキュリティ等の様々な面で役に立ついくつかのモジュールで構成されています。これらのモジュールのうちいくつかは、非常にシンプルで変換が簡単です。その他のモジュールは多くの依存関係があり、少し追加の作業が必要となります。
Core APIモジュールは非常にシンプルです。依存関係はないので、JARファイルを変換してclassifier要素を定義するだけで使用できます。
一方、JSF実装のモジュールはかなり複雑です。Core、Security、Proxyモジュールへの参照や、APIや実装の可変部分への参照もあります。
しかし、手順はMicroProfileの場合と同じです。classifier要素を使用して変換されたすべての成果物への参照を作成し、「古い」javax名前空間を使用した依存関係が選択されないように適切な除外をおなこない、必要に応じてJakarta EE 9の新しい仕様を追加します。
DeltaSpikeのJSF実装モジュールの変換結果はこちらで確認できます。
PrimeFaces
既に述べたように、最終的にはライブラリのメンテナが正しいJakarta EE 9の依存関係を使用するバージョンを作成するでしょう。PrimeFacesは最新の変更に対して常に迅速にアップデートを行うライブラリの1つです。Jakarta名前空間を使用したPrimeFaces 9のテスト版が既に存在しています。
これを試すには、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>
Payara Platform上でEclipse Transformerプロジェクトを試す
Jakarta EE 9がリリースされ、これにはEclipse Foundationへのコード寄贈の一部として要求されたjavax名前空間からjakarta名前空間への変更が含まれています。この変更はまた、新しいパッケージ名を使用するために多くのフレームワークやライブラリを更新する必要があることを意味します。
これらのバージョンは今後数ヶ月のうちにリリースされ、開発者はJakarta EE 9以降に対応したアプリケーションを準備できるようになることでしょう。今日からすぐに試してみたい方は、Eclipse Transformerプロジェクトを使用して、JARやWARファイル全体を含むコンパイル済みのJavaコードをjakarta名前空間に変換することができます。変換に加え、すべての依存関係が正しく管理されるように、特定のPOMファイルを作成する必要があります。このブログでは、この方法の概要について説明しました。
アプリケーションの準備が完了したら、既にJakarta EE 9をサポートし、数ヶ月以内に認定されるであろうPayara ServerやPayara Microで試すことができます。