Análise de Migração Java

O último recurso que descreveremos é a análise de migração Java, que permite gerar um relatório sobre a prontidão do seu aplicativo para migrar para uma versão mais recente do JDK. Todas as releases do Oracle LTS Java são suportadas juntamente com o Oracle JDK lançado pela última vez. O relatório da análise fornecerá esforço e risco associados à alternância para a versão principal do JDK desejada.

Observação:

A análise do aplicativo é feita na instância gerenciada; recursos adicionais são consumidos durante a análise.

Console do OCI Cloud

  1. Acesse a Console do OCI como administrador.
  2. Abra o menu de navegação, clique em Observabilidade e Gerenciamento e, em seguida, clique em Frota em Java Management.
  3. Selecione sua frota.
  4. Clique em Instâncias gerenciadas e, em seguida, clique na instância gerenciada na qual o aplicativo está em execução.
  5. Clique em Aplicativos e selecione o aplicativo no qual a análise de Migração Java deve ser iniciada.
  6. Clique em Ações e selecione Iniciar análise de migração Java.
  7. Clique em Iniciar.
  8. Quando a solicitação de serviço for concluída, clique na solicitação de serviço e, em detalhes, navegue até os arquivos de análise de migração Java localizados no bucket da sua frota.

CLI do OCI

  1. Crie o modelo de payload de destinos usando o seguinte comando:
    ci jms fleet request-java-migration-analyses --generate-param-json-input
        targets
  2. Encontre detalhes sobre seu aplicativo, por exemplo, com:
    oci jms application-installation-usage-summary summarize-application-installation-usage
          --display-name-contains $APP_NAME --fleet-id $FLEET_OCID
  3. Edite o arquivo json de payload, por exemplo:
    [
      {
        "applicationInstallationKey": "$APP_INSTALL_KEY",
        "managedInstanceId": "$MANAGED_INSTANCE_OCID",
        "sourceJdkVersion": "$CURRENT_MAJOR_JAVA_RUNTIME_VERSION_USED_BY_APP",
        "targetJdkVersion": "$NEXT_JAVA_VERSION"
      }
    ]
  4. Execute o seguinte comando:
    oci jms fleet request-java-migration-analyses --fleet-id $FLEET_OCID --targets
          file://target.json

Exemplo

A finalidade da análise de migração JMS é simples: ajudar a migrar seu aplicativo para uma versão Java mais recente. Neste exemplo, usaremos um aplicativo Java 8 simples e gostaríamos de saber em quais áreas precisamos investir nossos esforços para executar o aplicativo no 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

Quando a solicitação de serviço JMigrate for concluída com sucesso, poderemos encontrar o relatório no JMS e mostrar seu conteúdo com as seguintes instruções:

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

Os dados de análise são armazenados no serviço Object Storage e podem ser acessados obtendo dados do resultado da análise, por exemplo, namespace, bucket-name é fornecido, depois há uma lista de arquivos definidos em object-list e, para cada arquivo, podemos obter o caminho concatenando o object-storage-upload-dir-path e o item no 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
} ]%

Para uma melhor experiência do usuário, recomendamos o uso da console do OCI JMS Cloud, na qual o relatório é bem renderizado para fornecer todos os detalhes necessários sobre a migração.