コマンドラインの呼び出し:
$ java -jar mule-migration-assistant-runner-0.5.1.jar \
-projectBasePath /Users/me/AnypointStudio/workspace-studio/my-mule3-policy/src/main/policy \
-muleVersion 4.1.5 \
-destinationProjectBasePath /Users/me/my-dir/my-migrated-policy
MMA では、-destinationProjectBasePath オプションを使用して移行したプロジェクトのディレクトリが作成されます。my-migrated-policy は、コマンドを呼び出す前には存在しない必要があります。すでに存在するフォルダーを指定すると、移行は次のようなエラーで失敗します。
Exception: Destination folder already exists. (例外: 宛先フォルダーがすでに存在しています。)
移行が正常に実行されると、次のようなメッセージが表示されます。
成功した移行
Executing migration...
...
========================================================
MIGRATION SUCCESS
========================================================
Total time: 11.335 s
Migration report:
/Users/me/my-dir/my-migrated-policy/report/summary.html
移行が正常に完了すると、宛先フォルダーには次の内容が含まれます。
-
ポリシー POM ファイル。
-
ポリシー YAML ファイル。POM ファイル内にある artifactId 値に名前が変更されます。
-
Mule 移行レポート (GitHub) (summary.html) を含む report ディレクトリ。
このレポートで提供されるものと同じ情報は、ポリシー XML ファイルにコメントとして含まれています。
-
MMA コマンドで設定された -muleVersion 値と一致する minMuleVersion 値が設定された mule-artifact.json ファイル。
-
src ディレクトリ。移行したコンテンツが含まれます。
src ディレクトリには、main および test ディレクトリが含まれます。main 内では、mule ディレクトリにポリシー XML ファイルが含まれ、template.xml に名前が変更されます。mule ディレクトリと同じレベルで、移行したポリシーに必要な DataWeave ファイルまたはその他のファイルを含む resources ディレクトリが作成される場合があります。
test ディレクトリには、テスト設定ファイルが含まれます。
移行に成功したら、POM の移行で説明されているように、POM ファイルを変更する必要があります。POM ファイルに適切な組織 ID が設定されたら、mvn clean install を使用してコンパイルできます。コンパイルに成功した場合、maven clean deploy を使用して移行したポリシーを Exchange にアップロードできます。カスタムポリシーのアップロードについての詳細は、「Exchange へのカスタムポリシーのアップロード」を参照してください。
POM の移行
POM ファイルの移行により、カスタムポリシーを Exchange にアップロードするために必要な要素が含まれるようにファイルが変更されます。
<groupId/> および <exchange.url/> 要素の {orgId} 値は、Anypoint Platform にある組織 ID に置き換えられます。
デフォルトでは、Exchange URL は本番環境に設定されます。
<groupId>{orgId}</groupId>
<properties>
<exchange.url>https://maven.anypoint.mulesoft.com/api/v1/organizations/{orgId}/maven</exchange.url>
</properties>
EU バージョンの URL の場合、移行後に URL を手動で設定する必要があります。
MMA がポリシーの POM ファイルを見つけられない場合、新しい POM ファイルが作成されます。このファイルでは、ポリシーの artifactId はポリシー XML ファイルの親ディレクトリの名前になります。たとえば、src/main/mytestpolicy/policy.xml 内のポリシーの場合、artifactId は mytestpolicy です。
連動関係およびプラグインバージョン
連動関係およびプラグインバージョンは MMA によってデフォルトで設定されており、必要に応じて手動で変更できます。
未移行の要素
いくつかの要素は、Mule 3 から Mule 4 に移行されません。
| 要素 |
理由 |
policy:before-exception
|
Mule 4 では動作を再現できません。 |
policy:pointcut
|
リソースと API のポイントカットは、Mule Runtime Engine によって自動的に解決されます。Mule 4 では、アプリケーションとエンドポイントのポイントカットに同等のものはありません。 |
policy:data
|
この動作は、Mule Runtime Engine によって自動的に解決されます。 |
他の構造に移行される要素
delay-response 要素の子要素として複数の rate-limit 要素が見つかった場合、調整要素 fixed-time-frame-algorithm はレート制限形式に移行されます。
さらに、調整 SLA ポリシーはサポートされなくなったため、delay-response 要素が sla-based-algorithm 要素の子として見つかった場合、ポリシーはレート制限 SLA 形式に移行されます。
一般的な移行の問題
移行中にポリシーファイルが見つからない場合、MMA は次のようなメッセージを出力します。
失敗した移行
Executing migration...
...
===============================================================================
MIGRATION FAILED
===============================================================================
Total time: 3.008 s
Exception: Cannot read mule project. Is it a Mule Studio project?
com.mulesoft.tools.migration.engine.exception.MigrationJobException: Cannot read mule project. Is it a Mule Studio project?
at com.mulesoft.tools.migration.engine.project.MuleProjectFactory.getMuleProject(MuleProjectFactory.java:50)
at com.mulesoft.tools.migration.engine.MigrationJob.generateSourceApplicationModel(MigrationJob.java:116)
at com.mulesoft.tools.migration.engine.MigrationJob.execute(MigrationJob.java:80)
at com.mulesoft.tools.migration.MigrationRunner.main(MigrationRunner.java:83)
===============================================================================
POM の移行の問題
MMA がポリシーの POM モデルを見つけられない場合、Mule 3 の既存の POM からモデルが生成されるか、Mule 3 POM がない場合はモデルが作成されます。MMA が既存の POM を使用している場合、不正な POM 定義が検出されると POM モデルの作成プロセスが失敗します。POM モデル障害に関する情報については、POM モデルの変更時の MMA ステップに関する前のエラーメッセージを確認する必要があります。
YAML の移行の問題
| 事例 |
理由 |
YAML の編集エラー |
詳細は、MMA のスタック追跡を使用してください。 |
複数の YAML が見つかった |
MMA では、プロジェクトのベースパスに 1 つの YAML ファイルのみが必要です。これは、ポリシー YAML として解釈されます。
プロジェクトに複数の YAML が必要な場合は、追加の YAML ファイルを別のディレクトリに保存する必要があります。 |
YAML が見つからない |
MMA では、移行の開始時にプロジェクトのベースパスに YAML ファイルが必要です。何も見つからない場合、移行プロセスの早い段階で別のエラーが発生していた可能性があります。 |
脅威保護の移行の問題
| 事例 |
理由 |
ポリシーが XML 脅威保護種別か JSON 脅威保護種別かを判断できなかった |
脅威保護ポリシーでは、移行する脅威保護の種別は要素 xml-policy と json-policy によって決まります。いずれか 1 つのみが存在する必要があります。いずれも存在しない場合、移行レポートにエラーメッセージが表示されます。 |
要素 structure が見つからなかった |
脅威保護ポリシーでは、xml-policy 要素に子要素の structure が必要です。 |
要素 values が見つからなかった |
脅威保護ポリシーでは、xml-policy 要素に子要素の valuesが必要です。 |
クライアント ID 適用の移行の問題
| 事例 |
理由 |
クライアント ID 適用の移行要素が無効 |
validate-client 要素の basicAuthEnabled 属性が存在しないか false の場合、MMA では validate-client 要素に clientSecret または clientId 属性が存在する必要があります。
|
Spring の制限
MMA によって Mule 3 ポリシーの spring:bean 要素が resources ディレクトリの template-beans.xml ファイルに移行される場合でも、template-beans.xml を参照する spring-module:config 要素がカスタムポリシーに追加される場合でも、Spring Bean の手動移行を実行する必要があります。Mule 4 ではポリシーでの Bean の宣言はサポートされておらず、ポリシーのデプロイに失敗します。
既知の問題
-
拡張子が .yml のポリシー YAML ファイルを使用するポリシーは検出されない。
-
ポリシー YAML ファイルの必須項目が自動入力されない。
-
mule:processor 要素が移行されない。
-
byte-array-to-string-transformer 要素が移行されない。
-
expression-component 要素が移行されない。
-
mulexml:object-to-xml-transformer 要素が移行されない。
-
移行した要素 ee:transform にスキーマの場所の URI が追加されない。
-
アンダースコアで始まる DataWeave 式は引用符が付けられないため、ポリシーが失敗する。