Analisi migrazione Java

L'ultima funzione che descriveremo è l'analisi della migrazione Java, che consente di generare un report sulla disponibilità dell'applicazione per la migrazione alla versione più recente di JDK. Tutte le release Java LTS Oracle sono supportate insieme all'ultimo rilascio di Oracle JDK. Il report dell'analisi ti fornirà gli sforzi e i rischi associati al passaggio alla versione principale JDK desiderata.

Nota

L'analisi delle applicazioni viene eseguita sull'istanza gestita, le risorse aggiuntive vengono utilizzate durante l'analisi.

Console cloud OCI

  1. Connettersi a OCI Console come amministratore.
  2. Aprire il menu di navigazione, fare clic su Osservabilità e gestione, quindi su Fleets in Java Management.
  3. Selezionare la flotta.
  4. Fare clic su Istanze gestite, quindi sull'istanza gestita in cui è in esecuzione l'applicazione.
  5. Fare clic su Applicazioni e selezionare l'applicazione su cui avviare l'analisi della migrazione Java.
  6. Fare clic su Azioni e selezionare Avvia analisi migrazione Java.
  7. Fare clic su Avvia.
  8. Al termine della richiesta di lavoro, fare clic sulla richiesta di lavoro e, nei dettagli, andare ai file di analisi della migrazione Java che si trovano nel bucket della flotta.

OCI CLI

  1. Creare il modello di payload delle destinazioni utilizzando il comando seguente:
    ci jms fleet request-java-migration-analyses --generate-param-json-input
        targets
  2. Scopri i dettagli della tua applicazione, ad esempio con:
    oci jms application-installation-usage-summary summarize-application-installation-usage
          --display-name-contains $APP_NAME --fleet-id $FLEET_OCID
  3. Modificare il file json del payload, ad esempio:
    [
      {
        "applicationInstallationKey": "$APP_INSTALL_KEY",
        "managedInstanceId": "$MANAGED_INSTANCE_OCID",
        "sourceJdkVersion": "$CURRENT_MAJOR_JAVA_RUNTIME_VERSION_USED_BY_APP",
        "targetJdkVersion": "$NEXT_JAVA_VERSION"
      }
    ]
  4. Eseguire il seguente comando:
    oci jms fleet request-java-migration-analyses --fleet-id $FLEET_OCID --targets
          file://target.json

Esempio

Lo scopo dell'analisi della migrazione JMS è semplice: facilitare la migrazione dell'applicazione a una versione Java più recente. In questo esempio, adotteremo una semplice applicazione Java 8 e vorremmo sapere in quali aree dobbiamo investire il nostro sforzo per rendere l'applicazione eseguita su 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

Una volta completata la richiesta di lavoro JMigrate, è possibile trovare il report in JMS e visualizzarne il contenuto con le istruzioni seguenti:

#!/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"
  }
}

I dati di analisi vengono memorizzati nel servizio di storage degli oggetti e possono essere raggiunti prendendo dati dal risultato dell'analisi, ad esempio spazio di nomi, viene fornito bucket-name, quindi esiste una lista di file definiti all'interno di object-list e per ogni file possiamo ottenere il percorso concatenando il object-storage-upload-dir-path e l'elemento dal 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
} ]%

Per una migliore esperienza utente, si consiglia di utilizzare la console cloud OCI JMS, in cui il report viene visualizzato correttamente per fornire tutti i dettagli necessari sulla migrazione.