Java 遷移分析
我們將描述的最後一個功能是 Java 移轉分析,可讓您產生有關應用程式整備度移轉至新版 JDK 的報表。所有 Oracle LTS Java 版本以及最新發行的 Oracle JDK 都受到支援。分析報告將提供您切換至所需 JDK 主要版本的投入力和風險。
附註:
應用程式分析是在受管理執行處理上進行,分析期間會使用其他資源。OCI 雲端主控台
- 以管理員身分登入 OCI 主控台。
- 開啟導覽功能表,按一下可觀測性與管理,然後按一下 Java 管理下的機組。
- 選取您的機組。
- 按一下受管理執行處理,然後按一下執行應用程式的受管理執行處理。
- 按一下應用程式,然後選取應該啟動「Java 移轉」分析的應用程式。
- 按一下動作,然後選取開始 Java 移轉分析。
- 按一下開始。
- 工作要求完成後,請按一下工作要求並詳細瀏覽至機組儲存桶中的 Java 移轉分析檔案。
OCI CLI
- 使用下列命令建立目標有效負載樣板:
ci jms fleet request-java-migration-analyses --generate-param-json-input targets
- 尋找有關您應用程式的詳細資訊,例如:
oci jms application-installation-usage-summary summarize-application-installation-usage --display-name-contains $APP_NAME --fleet-id $FLEET_OCID
- 編輯有效負載 json 檔案,例如:
[ { "applicationInstallationKey": "$APP_INSTALL_KEY", "managedInstanceId": "$MANAGED_INSTANCE_OCID", "sourceJdkVersion": "$CURRENT_MAJOR_JAVA_RUNTIME_VERSION_USED_BY_APP", "targetJdkVersion": "$NEXT_JAVA_VERSION" } ]
- 執行下列命令:
oci jms fleet request-java-migration-analyses --fleet-id $FLEET_OCID --targets file://target.json
範例
JMS 移轉分析的目的相當簡單:協助將您的應用程式移轉至較新的 Java 版本。在此範例中,我們將採用簡單的 Java 8 應用程式,而我們想知道我們在 Java 21 上執行應用程式需要投入哪些方面:
#!/usr/bin/env bash
# configuration variables
APP_NAME=JMigrateExampleApp
FLEET_OCID=ocid1.jmsfleet.oc1.eu-frankfurt-1.amaaaaaaptiaquqa2qxxkco6hrguz7nyug2hcpgikhe5gz4d7uy6j6ilbtta
MANAGED_INSTANCE_OCID=ocid1.instance.oc1.eu-frankfurt-1.antheljtptiaquqcrjmnu7mxbjthm2jm5qzryu7xy4w27rfo56nxf4uwv6pq
CURRENT_MAJOR_JAVA_RUNTIME_VERSION_USED_BY_APP=1.8
NEXT_JAVA_VERSION=21
# get application installation key
APP_INSTALL_KEY=$(oci jms application-installation-usage-summary summarize-application-installation-usage --display-name-contains $APP_NAME --fleet-id $FLEET_OCID | jq -r '.data.items[]."application-installation-key"')
# JMigrate payload
cat > jmigrate-payload.json << EOF
[
{
"applicationInstallationKey": "$APP_INSTALL_KEY",
"managedInstanceId": "$MANAGED_INSTANCE_OCID",
"sourceJdkVersion": "$CURRENT_MAJOR_JAVA_RUNTIME_VERSION_USED_BY_APP",
"targetJdkVersion": "$NEXT_JAVA_VERSION"
}
]
EOF
# start java migration analysis on specified managed instance
WORK_REQUEST_OCID=$(oci jms fleet request-java-migration-analyses \
--fleet-id "$FLEET_OCID" \
--targets file://jmigrate-payload.json | jq -r '."opc-work-request-id"')
echo $WORK_REQUEST_OCID
rm jmigrate-payload.json
# additionally, you can add your own logic to check if work request is finished
# sleep 600
# oci jms work-request get --work-request-id "$WORK_REQUEST_OCID" | jq .data.status
JMigrate 工作要求順利完成之後,我們就可以在 JMS 中找到報表,並使用下列敘述句顯示其內容:
#!/usr/bin/env bash
# configuration variables
FLEET_OCID=ocid1.jmsfleet.oc1.eu-frankfurt-1.amaaaaaaptiaquqa2qxxkco6hrguz7nyug2hcpgikhe5gz4d7uy6j6ilbtta
WORK_REQUEST_OCID=ocid1.jmsworkrequest.oc1.eu-frankfurt-1.aaaaaaaapqrtnlvfyltloscefazwuuoyd6pdqpsmaxfnirregqirx3b7jbva
# get the analysis id, there can be multiple ids but, in our example, we expect just one
ANALYSIS_OCID=$(oci jms java-migration-analysis-result list --fleet-id $FLEET_OCID --sort-by timeCreated --sort-order DESC | jq -r ".data.items[] | select(.\"work-request-id\"==\"$WORK_REQUEST_OCID\") | .id")
# See the result
oci jms java-migration-analysis-result get --fleet-id $FLEET_OCID --java-migration-analysis-result-id $ANALYSIS_OCID
{
"data": {
"application-execution-type": "INSTALLED",
"application-key": "38d3d5b89e9e42da00c5be9bdbee216a0e297c2ea942330e5af4051c4951b50a",
"application-name": "JmigrateExample.jar",
"application-path": "/home/opc/JmigrateExample.jar",
"bucket-name": "jms_ocid1.jmsfleet.oc1.eu-frankfurt-1.amaaaaaaptiaquqa2qxxkco6hrguz7nyug2hcpgikhe5gz4d7uy6j6ilbtta",
"fleet-id": "ocid1.jmsfleet.oc1.eu-frankfurt-1.amaaaaaaptiaquqa2qxxkco6hrguz7nyug2hcpgikhe5gz4d7uy6j6ilbtta",
"host-name": "jms-demo",
"id": "ocid1.jmsreport.oc1.eu-frankfurt-1.amaaaaaalzyjypyaa4puer7qtjn2s3zih55ir5jzma4lyiulxpy7qn3xtbhq",
"managed-instance-id": "ocid1.instance.oc1.eu-frankfurt-1.antheljtptiaquqcrjmnu7mxbjthm2jm5qzryu7xy4w27rfo56nxf4uwv6pq",
"metadata": null,
"namespace": "frmss8xk2qta",
"object-list": [
"diagsbyapi-summary-counts.json",
"diagsbyclass-p3.json",
"diagsbyapi-p1.json",
"diagsbyclass-p4.json",
"JmigrateExample.jar.zip",
"diagsbyclass-p1.json",
"diagsbyapi-p4.json",
"diagsbyapi-p4-summary.json",
"execsummary.json",
"diagsbyapi-p3-summary.json",
"diagsbyapi-p1-summary.json",
"diagsbyapi-p2-summary.json",
"diagsbyapi-p2.json",
"jarsummaries-without-classsummaries.json",
"diagsbyapi-p3.json",
"diagsbyclass-summary-counts.json",
"diagsbyclass-p2.json"
],
"object-storage-upload-dir-path": "JMS/JAVA_MIGRATION/ocid1.jmsfleet.oc1.eu-frankfurt-1.amaaaaaaptiaquqa2qxxkco6hrguz7nyug2hcpgikhe5gz4d7uy6j6ilbtta/ocid1.instance.oc1.eu-frankfurt-1.antheljtptiaquqcrjmnu7mxbjthm2jm5qzryu7xy4w27rfo56nxf4uwv6pq/2025-07-09T14:33:49.750Z_ocid1.jmsworkrequest.oc1.eu-frankfurt-1.aaaaaaaapqrtnlvfyltloscefazwuuoyd6pdqpsmaxfnirregqirx3b7jbva_JmigrateExample.jar/7adcab9b-1556-443d-9a86-a41f3e5bbb45/",
"source-jdk-version": "1.8",
"target-jdk-version": "21",
"time-created": "2025-07-09T14:41:16.353000+00:00",
"work-request-id": "ocid1.jmsworkrequest.oc1.eu-frankfurt-1.aaaaaaaapqrtnlvfyltloscefazwuuoyd6pdqpsmaxfnirregqirx3b7jbva"
}
}
分析資料儲存在物件儲存體服務中,您可以從分析結果取得資料 (例如提供命名空間 bucket-name
),然後在 object-list
中定義檔案清單,而每個檔案都可以透過串連 object-storage-upload-dir-path
和 object-list
中的項目來取得路徑。
oci os object get --bucket-name jms_ocid1.jmsfleet.oc1.eu-frankfurt-1.amaaaaaaptiaquqa2qxxkco6hrguz7nyug2hcpgikhe5gz4d7uy6j6ilbtta --name JMS/JAVA_MIGRATION/ocid1.jmsfleet.oc1.eu-frankfurt-1.amaaaaaaptiaquqa2qxxkco6hrguz7nyug2hcpgikhe5gz4d7uy6j6ilbtta/ocid1.instance.oc1.eu-frankfurt-1.antheljtptiaquqcrjmnu7mxbjthm2jm5qzryu7xy4w27rfo56nxf4uwv6pq/2025-07-09T14:33:49.750Z_ocid1.jmsworkrequest.oc1.eu-frankfurt-1.aaaaaaaapqrtnlvfyltloscefazwuuoyd6pdqpsmaxfnirregqirx3b7jbva_JmigrateExample.jar/7adcab9b-1556-443d-9a86-a41f3e5bbb45/jarsummaries-without-classsummaries.json --file -
[ {
"url" : "jar:file:/home/opc/JmigrateExample.jar",
"archiveType" : "JAR",
"classCount" : 3,
"classesWithDiagnosticsCount" : 3,
"p1Count" : 31,
"totalDiagnosticsCount" : 31
} ]%
為了獲得更好的使用者體驗,建議您使用 OCI JMS Cloud 主控台來呈現報表,以提供移轉的所有必要詳細資訊。