Analyse de migration Java

La dernière fonctionnalité que nous allons décrire est l'analyse de migration Java, qui vous permet de générer un rapport sur la préparation de votre application à la migration vers une version plus récente de JDK. Toutes les versions Java d'Oracle LTS sont prises en charge avec la dernière version d'Oracle JDK. Le rapport de l'analyse vous fournira les efforts et les risques associés au passage à la version majeure de JDK souhaitée.

Note :

L'analyse d'application est effectuée sur une instance gérée, des ressources supplémentaires sont consommées lors de l'analyse.

Console en nuage OCI

  1. Connectez-vous à la console OCI en tant qu'administrateur.
  2. Ouvrez le menu de navigation, cliquez sur Observabilité et gestion, puis cliquez sur Fleets sous Gestion Java.
  3. Sélectionnez votre parc.
  4. Cliquez sur Instances gérées, puis cliquez sur l'instance gérée où l'application est exécutée.
  5. Cliquez sur Applications et sélectionnez l'application sur laquelle l'analyse de migration Java doit être démarrée.
  6. Cliquez sur Actions et sélectionnez Démarrer l'analyse de migration Java.
  7. Cliquez sur Démarrer.
  8. Une fois la demande de travail terminée, cliquez sur la demande de travail et, dans les détails, naviguez jusqu'aux fichiers d'analyse de migration Java situés dans le seau de votre parc.

Interface de ligne de commande OCI

  1. Créez le modèle de données utiles cible à l'aide de la commande suivante :
    ci jms fleet request-java-migration-analyses --generate-param-json-input
        targets
  2. Trouvez des détails sur votre application, par exemple :
    oci jms application-installation-usage-summary summarize-application-installation-usage
          --display-name-contains $APP_NAME --fleet-id $FLEET_OCID
  3. Modifiez le fichier json de données utiles, par exemple :
    [
      {
        "applicationInstallationKey": "$APP_INSTALL_KEY",
        "managedInstanceId": "$MANAGED_INSTANCE_OCID",
        "sourceJdkVersion": "$CURRENT_MAJOR_JAVA_RUNTIME_VERSION_USED_BY_APP",
        "targetJdkVersion": "$NEXT_JAVA_VERSION"
      }
    ]
  4. Exécutez la commande suivante :
    oci jms fleet request-java-migration-analyses --fleet-id $FLEET_OCID --targets
          file://target.json

Exemple

L'objectif de l'analyse de migration JMS est simple : faciliter la migration de votre application vers une version Java plus récente. Dans cet exemple, nous allons utiliser une application Java 8 simple et nous aimerions savoir dans quels domaines nous devons investir nos efforts pour que l'application soit exécutée sur 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

Une fois la demande de travail JMigrate terminée, nous pouvons trouver le rapport dans JMS et afficher son contenu avec les énoncés suivants :

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

Les données d'analyse sont stockées dans le service de stockage d'objets et peuvent être atteintes en prenant des données du résultat de l'analyse, par exemple un espace de noms, bucket-name est fourni, puis une liste de fichiers est définie dans object-list et pour chaque fichier, nous pouvons obtenir le chemin en concaténant object-storage-upload-dir-path et l'élément 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
} ]%

Pour une meilleure expérience utilisateur, nous vous recommandons d'utiliser la console JMS Cloud d'OCI, dans laquelle le rapport est bien rendu pour fournir tous les détails nécessaires sur la migration.