JBoss EAP 7.x から JBoss EAP 8-Beta への移行方法

Red Hat のソリューションアーキテクトの瀬戸です。

この記事はRed Hat DeveloperHow to migrate apps from JBoss EAP 7.x to JBoss EAP 8-Beta を、許可をうけて翻訳したものです。

この記事で消化しているMTRの廃止が決まっていますので、移行方法についてあらためてまとめました。以下の記事を参照してください。(2024年4月)

rheb.hatenablog.com


この記事では最近リリースされたJBoss EAP 8-Betaについて説明します。JBoss EAP 8 で導入された変更点について解説し、アプリケーションを JBoss EAP 7.4 から移行するために必要な手順を示します。

JBoss EAP 8.0 はJakarta EE 10をサポートします。Jakarta EE 10 は EAP 7 でサポートされている Jakarta EE 8 仕様と比較して Jakarta EE に大きな変更をもたらします。JBoss EAP 8 では以下の機能にも変更が入っています。

  • Picketbox の削除: JBoss EAP 6.4 から非推奨になっていました。レガシーなセキュリティー設定はElytron セキュリティーサブシステムに移行する必要があります。すでに Elytron に移行済みの EAP ユーザーは変更を加える必要はありません。
  • PicketLink の削除: JBoss EAP 6.4 から非推奨になっていました。PicketLink で提供されていたシングルサインオン機能には RH SSO を利用することをお勧めします。
  • OpenID Connect (OIDC) のサポート は、個別の RH-SSO OIDC アダプターのかわりに elytron-oidc-client サブシステムによって提供されるようになります。
  • SAML サポート は RH-SSO SAML アダプターによって提供されるようになります (Picketlink SAML は削除されました)。JBoss EAP 8.0 GA では、SAML のサポートは新しい RH-SSO SAML Galleon Feature Pack によって提供されます。
  • Hibernate 6.x: 5.11.x から 6.0.x への移行に関するガイダンスについては、 Hibernate Search の記事を参照してください。
  • JDK 8 の削除: JDK 11 または JDK 17 が必要になりました。
  • Jolokia と Prometheus の削除: Red Hat はこれらの機能をサポートしなくなります。JBoss EAP サーバーは、サーバーメトリクスエンドポイント (:/metrics) を介してメトリクスを公開します。
  • Apache Log4j 1.x の APIの 削除:アプリケーションが log4j.jar および Log4jの設定をアプリケーションの一部として含んでいない場合は、それらを更新する必要があります。
  • 新しい maven プラグイン: 新しい eap-maven-plugin は Galleon テクノロジを使用して、アプリケーションで必要なレイヤー構成に基づいてサーバーを構築します。これにより実行時サイズとメモリフットプリントが削減され、外部からの攻撃を受ける可能性のある領域が縮小されます。CVE の影響を受ける JAR が存在しない場合にはEAP は CVE に対して脆弱ではありません。JBoss EAP 8 OpenShift イメージには、EAP 6 と EAP 7 で使用されていたような EAP ランタイムバイナリは含まれていません。このプラグインはサーバー設定をカスタマイズするための JBoss EAP CLI スクリプト ファイルの実行もサポートしています。OpenShift Source to Image ビルド (S2I) はこの変更を組み込み、eap-maven-plugin を利用してサーバーを作成するように再設計されました。詳細についてはドキュメントを参照してください。
  • ブリッジのデプロイが失敗する: 以前はブリッジを使用する時まで誤って構成されているかがわかりませんでした。新しいバージョンではブリッジのデプロイに失敗した場合には追加時に失敗するようになりました。

このベータ版リリースで導入された変更点の詳細については、リリースノートを参照してください。

JBoss EAP 7.4 から JBoss EAP 8-Beta への移行

アプリケーションを JBoss EAP 7.4 から JBoss EAP 8.0 Beta に移行するためにはコードの変更が必要になります (Jakarta EE 8 から Jakarta EE 10 への移行 ("javax"名前空間から"jakarta"名前空間への変換等) のため)。どういう変更が必要なのかについてはこちらの記事を参照してください。 この移行作業でお客様を支援するためにRed Hat のエンジニアはツール、Migration Toolkit for ApplicationsMigration Toolkit for Runtimes (MTR、OpenShiftを使用していないプロジェクト用) および JBoss EAP Server Migration toolの更新に励んでいます。この記事では、これらのツールを使用してアプリケーションを JBoss EAP 7.4 から JBoss EAP 8-Beta に移行します。

この記事では2 つの領域に焦点を当てます。最新バージョンのMTR ツールで特定される必要なコード変更と、standalone.xml ファイルの構成の変更です。

、JBoss EAP 7.4 クイックスタートに、MySQL データベースに接続するためのいくつかの変更を加えたアプリケーションを使用します。これによりモジュールとドライバーの変換を検証できます。このアプリケーションのソース コードを確認できます。

前提条件

実際の移行作業を開始する前に、実行中のアプリケーションで JBoss EAP 7.4 のインスタンスをセットアップします。これはサーバー構成ファイルの移行プロセスのデモに使います。

JBoss EAP 7.4 クイックスタートのkitchensinkアプリケーションを次のように変更して使用します。

アプリケーションをMySQL データベースに接続するように更新しました。これにより、J2EE モジュールとドライバーの移行をテストできます。 KCS の記事で説明されているように、Java Server Faces をバージョン 2.2 から 2.3 に更新しました。

次のコマンドを使用して、Podman や Docker を使用して、正しい構成で MySQL のインスタンスを実行できます。

podman run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=eap mysql

JBoss EAP 7.4 zip ディストリビューションをダウンロードします。ディストリビューションをローカルフォルダー(例: ~/jboss-eap-74) に解凍します。Red Hat アカウントを持っていない場合はアカウントを作成してください。

EAP_HOME 環境変数を設定します。

export EAP_HOME=~/jboss-eap-74

こうすると次のコマンドで JBoss EAP 7.4 を起動できます。

$EAP_HOME/bin/standalone.sh

こちらのサンプル アプリケーションをgitを使用してチェックアウトしてください。

ディレクトリを eap-quickstarts/kitchensink フォルダーに変更します。

modules フォルダーの内容を ~/jboss-eap-74/modules フォルダーにコピーします。

cp -r modules/* $EAP_HOME/modules

JBoss EAP CLI を実行します。

$EAP_HOME/bin/jboss-cli.sh –-connect

JBoss CLI に次のコマンドを入力して MySQL ドライバーとデータソースを設定します。

/subsystem=datasources/jdbc-driver=mysql:add(driver-name=mysql,driver-module-name=com.mysql)

data-source add --name=mysql --jndi-name=java:/jdbc/mysql --driver-name=mysql --connection-url=jdbc:mysql://127.0.0.1:3306/eap --user-name=root --password=root

アプリケーションをビルドし、maven を使用して JBoss EAP 7.4 にデプロイします。

mvn clean install wildfly:deploy

このアプリケーションが正常にデプロイされると、 http://127.0.0.1:8080/kitchensink からアクセスできるようになります。

これでアプリケーションを実行している JBoss EAP 7.4 のインスタンスが作成され、JBoss EAP 8.0 Beta に移行する準備が整いました。移行を開始する前にJBoss EAP 7.4 サーバーをシャットダウンし、JBoss EAP 7.4 デプロイメント先を指す環境変数を作成します。

export EAP_PREVIOUS_HOME=~/jboss-eap-74

JBoss EAP 8-Beta ディストリビューションをこちらからダウンロードしてください。

ディストリビューションをローカルフォルダー (例: ~/jboss-eap-8) に解凍します。

EAP_HOME 環境変数を次のように設定します。

export EAP_HOME=~/jboss-eap-8

これでJBoss EAP 7.4 から JBoss EAP 8.0 Beta への移行に進むことができます。

サーバー構成の変更

アプリケーションを JBoss EAP 7.4 にデプロイしたときにサーバー設定に変更を加えて MySQL に接続するモジュールとドライバーを追加しました。これらのモジュールとドライバーがJBoss EAP 8-Beta サーバーに正しく配置され動作することを確認する必要があります。JBoss EAP サーバー移行ツールを使用して、この移行を実行できます。

こちらからサーバー移行ツールをダウンロードします。

アーカイブをローカルフォルダーに解凍し、新しいディレクトリに変更します。次のコマンドを実行します。

./jboss-server-migration.sh -s $EAP_PREVIOUS_HOME -t $EAP_HOME

サーバー移行ツールは、移行プロセス中に一通りの質問をします。

----------------------------------------------------------

----  JBoss Server Migration Tool  -----------------------

----------------------------------------------------------


Retrieving servers...

 INFO  SOURCE server name: JBoss EAP, version: 7.4.0.GA.

 INFO  TARGET server name: JBoss EAP, version: 8.0.0.Beta.


----------------------------------------------------------

----------------------------------------------------------


Server migration starting...


 INFO  --- Migrating modules requested by environment...


 INFO  No modules to migrate.


Migrate the source's standalone server?

yes/no?

スタンドアロン構成を移行するには、[yes]を選択します。

 INFO  --- Migrating standalone server...


 INFO  Source's standalone content migrated.


 INFO  Source's standalone configurations found: [standalone-full-ha.xml, standalone-full.xml, standalone-ha.xml, standalone-load-balancer.xml, standalone.xml]


Migrate all configurations?

yes/no? 

[no]を選択します。移行する構成を選択します。

Migrate configuration standalone-full-ha.xml ?

yes/no? 

[no]を選択します。standalone-full-ha.xml を移行したくありません。

Migrate configuration standalone-full.xml ?

yes/no? 

[no]を選択します。standalone-full.xml を移行したくありません。

Migrate configuration standalone-ha.xml ?

yes/no? 

[no]を選択します。 standalone-ha.xml を移行したくありません。

Migrate configuration standalone-load-balancer.xml ?

yes/no? 

[no]を選択します。standalone-load-balancer.xml を移行したくありません。

Migrate configuration standalone.xml ?

yes/no? 

[yes]を選択します。standalone.xml を移行したいと考えています。

 INFO  Migrating standalone configuration standalone.xml...

 WARN  Migration of legacy security domain jboss-web-policy's authorization is not supported and will be ignored.

 WARN  Migration of legacy security domain jaspitest's authentication-jaspi is not supported and will be ignored.

 WARN  Migration of legacy security domain jboss-ejb-policy's authorization is not supported and will be ignored.

 INFO  Legacy security XML configuration retrieved.

 INFO  Unsupported extensions removed: [org.jboss.as.security]

 INFO  Unsupported subsystems removed: [urn:jboss:domain:security:2.0]

 INFO  Referenced paths migrated.

 INFO  Legacy security realms removed from XML configuration.

WARNING: An illegal reflective access operation has occurred

WARNING: Illegal reflective access by org.wildfly.extension.elytron.SSLDefinitions (jar:file:/home/philip/Downloads/wildfly-ee-dist-8.0.0.Beta-redhat-00002/jboss-eap-8.0/modules/system/layers/base/org/wildfly/extension/elytron/main/wildfly-elytron-integration-jakarta-19.0.0.Beta16-redhat-00004.jar!/) to method com.sun.net.ssl.internal.ssl.Provider.isFIPS()

WARNING: Please consider reporting this to the maintainers of org.wildfly.extension.elytron.SSLDefinitions

WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations

WARNING: All illegal access operations will be denied in a future release

 INFO  Legacy security realm ManagementRealm migrated to Elytron.

 INFO  Legacy security realm ApplicationRealm migrated to Elytron.

 INFO  Legacy security domain other migrated to Elytron.


Migrate the source's managed domain?

yes/no?

[no]を選択します。マネージドドメインは使用していません。

Server migration done.


 INFO  

----------------------------------------------------------------------------------------------------------

 Task Summary

----------------------------------------------------------------------------------------------------------


 server .......................................................................................... SUCCESS

  standalone ..................................................................................... SUCCESS

   contents.standalone.migrate-content-dir ....................................................... SUCCESS

    contents.standalone.migrate-content(path=7d/975dfd92d3b7a35f48054ad2190bdf7ebbeb3b/content) .. SUCCESS

    contents.standalone.migrate-content(path=b5/fe70630a477a851f755cc04eb5cc3030bb02db/content) .. SUCCESS

    contents.standalone.migrate-content(path=92/2cdbb0d087989ad5e6ecbd3c0123a34def19b7/content) .. SUCCESS

    contents.standalone.migrate-content(path=14/99d19995fc5835cb1c07eed113447b4fb46c4e/content) .. SUCCESS

    contents.standalone.migrate-content(path=3d/25c8107fcc4cf82f234dcf6ad5b8e926e7ec18/content) .. SUCCESS

    contents.standalone.migrate-content(path=45/9834b7318bd81b320829432fdef5a77bf93a19/content) .. SUCCESS

    contents.standalone.migrate-content(path=38/c53e35a6ab9d8a40016a5429f7115ff94e3ce7/content) .. SUCCESS

   standalone-configurations ..................................................................... SUCCESS

    standalone-configuration(source=standalone.xml) .............................................. SUCCESS


----------------------------------------------------------------------------------------------------------

 Migration Result: SUCCESS

----------------------------------------------------------------------------------------------------------

この操作が完了したら、JBoss EAPをインストールしたフォルダーから以下のコマンドを使用して JBoss EAP 8.0 サーバーを起動できます。

./bin/standalone.sh 

サーバーが正常に起動したら、次のコマンドで構成をテストできます。

./jboss-cli.sh --connect

 

/subsystem=datasources:installed-drivers-list

出力にMySQLドライバーの情報が次のように表示されます。

{

    "outcome" => "success",

    "result" => [

               {

            "driver-name" => "mysql",

            "deployment-name" => undefined,

            "driver-module-name" => "com.mysql",

            "module-slot" => "main",

            "driver-datasource-class-name" => "",

            "driver-xa-datasource-class-name" => "",

            "datasource-class-info" => undefined,

            "driver-class-name" => "com.mysql.cj.jdbc.Driver",

            "driver-major-version" => 8,

            "driver-minor-version" => 0,

            "jdbc-compliant" => false

        }

次の JBoss CLI コマンドを使用してデータソース接続をテストすることもできます。

/subsystem=datasources/data-source=mysql:test-connection-in-pool

接続が成功すると次のようなレスポンスが返されます。

{

    "outcome" => "success",

    "result" => [true]

}

アプリケーションに必要なドライバーとデータソースが存在することを確信できるようになったので、コード分析セクションに進むことができます。

コード分​​析

JBoss EAP 7.4 で動くアプリケーションのコード分析を実行するには、Migration Toolkit for Runtimes(MTR) の最新バージョンを使用します。このツールはこちらからダウンロードできます。*1

コマンド ./run_windup.sh を実行してMTR ツールを起動し、http://127.0.0.1:8080/windup-ui に移動します。 *2

MTRの初期ページ (図1) で、[ Create Project ] をクリックします。

図1: Migration Toolkit for applications の開始ページ

プロジェクト名 (eap7-eap8 など) を入力し、[Next] をクリックします。

次に、分析するアーティファクト(アプリケーション)をアップロードする必要があります (図2)。

図2: Migration Toolkit for Applications にアーティファクトを追加

アプリケーションをビルドして作成したWARファイルをWeb コンソールからアップロードします。WAR ファイルは eap-quickstarts/kitchensink/target フォルダーにあります。

[次へ] をクリックし て進みます。

次に変換ターゲットを選択します (図3): [Application server migration to EAP 7] ボックスから [eap8] を選択します。

図3: Migration Toolkit for Applications でターゲットを選択するページ

[Next]をクリックして続行します。

次の画面で、選択したパッケージのリストにorgを追加し、[Next] をクリックします。

後続のページをクリックして進み、[Save and Run]を選択して分析を開始します。分析が終了したら、分析リスト行の右側にあるグラフの記号をクリックして、レポートを読み込みます。

レポートから、ツールがこのアプリケーションを移行するために 87 のストーリー ポイントを見積もっていることがわかります。ストーリー ポイントの見積もりは、時間 (時間や日など) とは関係ありません。これは、他の分析からのレポートに対して測定するための指標です。kitchensink.warをクリックして、対処すべき問題の詳細を表示します (図4)。

図4: Migration Toolkit for Applications ダッシュボード ビュー

ダッシュボード ビューで [Issues] タブをクリックして、 解決するインシデントのリストを表示します。

この記事では、[Migration Mandatory](移行に必須な項目)に焦点を当てます (図 5)。

図5: Migration Toolkit for Applications のissuesの一覧

この分析の結果は、私たちの予想と一致しています (つまり、"javax"への参照を"jakarta"に変更)。他のいくつかの変更点も強調表示されています (たとえば、アプリケーションは Java Server Faces を使用しています)。そのため、JBoss EAP 8-Beta バージョンと一致するようにバージョンを更新する必要があります。

これらの項目を個別に調べてコードを手動で変更するか、Openrewrite などのツールを使用してこれらの変更を自動化するかを選択できます。Openrewriteを使用して Java EE 8 から Jakarta EE 9 に移行する方法については、こちらの記事を参照してください。

レポートに記載されている変更の 1 つは、図 6 に示されている pom.xml ファイルの依存関係を更新することです。

図6: Migration Toolkit for Applications コードの変更例

この例では、groupId と artifactId の変更に加えて、version.server.bom プロパティを変更する必要があります。pom.xml で、以下を置き換えます。

<version.server.bom>7.4.0.GA</version.server.bom>

<version.server.bom> 8.0.0.Beta-redhat-00004 </version.server.bom>

注意: このガイドは JBoss EAP のベータ版リリースを扱っているため、早期アクセス Maven リポジトリーをプロジェクトに追加する必要があります。これは GA リリースでは必要ないため、移行ツールキットの規則の対象外です。これらのリポジトリを追加するには、pom.xml ファイルの repositories ブロックに以下を追加します。

<repository>
   <id>redhat-ea-maven-repository</id>
   <name>Red Hat Early Access Maven Repository</name>
   <url>https://maven.repository.redhat.com/earlyaccess/all/</url>
   <releases>
       <enabled>true</enabled>
       <updatePolicy>never</updatePolicy>
   </releases>
   <snapshots>
       <enabled>true</enabled>
       <updatePolicy>never</updatePolicy>
   </snapshots>
   <layout>default</layout>
</repository>

これらの変更がすべて完了するとアプリケーションをビルドして JBoss EAP 8-Beta にデプロイできるようになります。デプロイするためにはJBoss EAP 8-Beta サーバーが実行されている状態で次のコマンドを実行します。

mvn clean install wildfly:deploy

maven プロセスが完了すると、アプリケーションが http://127.0.0.1:8080/kitchensink で利用できるようになります。

成功です!JBoss EAP 7.4 アプリケーションとサーバー設定はJBoss EAP 8-Beta に完全に移行されました。

JBoss EAP 8 ベータ版リリース

この記事ではJBoss EAP 8.0 のベータ版リリースで導入された主な変更点について説明しました。サーバー移行ツールを使用して設定を JBoss EAP 7.4.0 から JBoss EAP 8.0 に移行するために必要な変更を行いました。Migration Toolkit for Applications を使用してJakarta EE 8 から Jakarta EE 10 への移行に必要なコード変更に関するガイダンスを提供しました。

JBoss EAP Beta リリースに関連する便利なリンクを以下に示します。

*1:訳注:Migration Toolkit for RuntimesはMigration Toolkit for Applicationsがリブランドされたものです。OpenShift上で動かさない場合はこちらを使用することになりました。機能は一緒です。

*2:訳注:アクセスできない場合はEAPをシャットダウンしていることを確認してください。

*3:訳注:OpenShift上で動かさない場合はMTRを使用してください。 https://developers.redhat.com/products/mtr/overview

* 各記事は著者の見解によるものでありその所属組織を代表する公式なものではありません。その内容については非公式見解を含みます。