Migrar aplicativos WebSphere para JBoss EAP no Serviço de Aplicativo do Azure

Este guia descreve o que você deve estar ciente quando deseja migrar um aplicativo WebSphere existente para ser executado no Serviço de Aplicativo do Azure usando o JBoss EAP.

Pré-migração

Antes de tudo, para garantir uma migração bem-sucedida, conclua as etapas de avaliação e de inventário descritas nas seções a seguir.

Inventariar a capacidade do servidor

Documente o hardware (memória, CPU, disco) dos servidores de produção atuais, assim como as contagens de solicitações média e de pico e a utilização de recursos. Você precisará dessas informações independentemente do caminho de migração que escolher. É útil, por exemplo, para ajudar a orientar a seleção do Plano do Serviço de Aplicativo.

A lista de camadas disponíveis do Plano do Serviço de Aplicativo mostra a memória, os núcleos de CPU, o armazenamento e as informações de preços. Observe que o JBoss EAP no Serviço de Aplicativo só está disponível nas camadas Premium V3 e Isolated V2 App Service Plan.

Inventariar todos os segredos

Verifique todas as propriedades e arquivos de configuração no servidor de produção ou servidores para obter segredos e senhas. Verifique o ibm-web-bnd.xml em seus WARs. Arquivos de configuração que contenham senhas ou credenciais também podem ser encontrados dentro de seu aplicativo. Esses arquivos podem incluir, para aplicativos Spring Boot, os arquivos application.properties ou application.yml .

Inventariar todos os certificados

Documente todos os certificados usados para pontos de extremidade SSL públicos. Você pode exibir todos os certificados nos servidores de produção executando o seguinte comando:

keytool -list -v -keystore <path to keystore>

Validar se a versão Java com suporte funciona corretamente

O JBoss EAP no Serviço de Aplicativo do Azure oferece suporte a Java 8 e 11. Portanto, você precisará validar se seu aplicativo pode ser executado corretamente usando essa versão com suporte. Essa validação será especialmente importante se o servidor atual estiver usando um JDK compatível (como Oracle JDK ou IBM OpenJ9).

Para determinar a sua versão atual do Java, entre no servidor de produção e execute o seguinte comando:

java -version

Inventariar recursos de JNDI

Faça um inventário de todos os recursos de JNDI. Alguns recursos, como agentes de mensagens JMS, podem exigir migração ou reconfiguração.

Dentro de seu aplicativo

Inspecione o arquivo WEB-INF/ibm-web-bnd.xml e/ou o arquivo WEB-INF/web.xml.

Determinar se os bancos de dados são usados

Se seu aplicativo usar algum banco de dados, você precisará capturar as informações a seguir:

  • O nome da fonte de dados.
  • A configuração do pool de conexões.
  • O local do arquivo JAR do driver JDBC.

Determinar se e como o sistema de arquivos é usado

Qualquer uso do sistema de arquivos no servidor de aplicativos exigirá reconfiguração ou, em casos raros, alterações de arquitetura. O sistema de arquivos pode ser usado pelos módulos compartilhados do WebSphere ou pelo código do aplicativo. Você pode identificar alguns ou todos os cenários a seguir.

Conteúdo estático somente leitura

Se seu aplicativo estiver servindo conteúdo estático no momento, você precisará de um local alternativo para ele. Talvez você queira considerar a movimentação de conteúdo estático para o Armazenamento de Blobs do Azure e a adição da CDN do Azure para downloads extremamente rápidos, globalmente. Para obter mais informações, confira Hospedagem de site estático no Armazenamento do Microsoft Azure e Início rápido: Integrar uma conta de armazenamento do Azure à CDN do Azure. Você também pode implantar diretamente o conteúdo estático em um aplicativo no plano Azure Spring Apps Enterprise. Para obter mais informações, consulte Implantar arquivos estáticos da Web.

Conteúdo estático publicado dinamicamente

Se o aplicativo permitir conteúdo estático que é carregado/produzido pelo aplicativo, mas não puder ser alterado após sua criação, você poderá usar o Armazenamento de Blobs do Azure e a CDN do Azure, conforme descrito acima, com uma Função do Azure para lidar com uploads e atualização de CDN. Fornecemos uma implementação de exemplo para seu uso em Carregar conteúdo estático e fazer o pré-carregamento desse conteúdo pela CDN com o Azure Functions. Você também pode implantar diretamente o conteúdo estático em um aplicativo no plano Azure Spring Apps Enterprise. Para obter mais informações, consulte Implantar arquivos estáticos da Web.

Conteúdo dinâmico ou interno

Para arquivos que são gravados e lidos com frequência pelo seu aplicativo (como arquivos de dados temporários) ou arquivos estáticos visíveis apenas para seu aplicativo, você pode montar o Armazenamento do Azure em seu sistema de arquivos do Serviço de Aplicativo. Para obter mais informações, confira Servir conteúdo do Armazenamento do Microsoft Azure no Serviço de Aplicativo no Linux.

Determinar se o aplicativo depende de trabalhos agendados

Os trabalhos agendados, como tarefas do Agendador do Quartz ou trabalhos cron do UNIX, NÃO devem ser usados com o Serviço de Aplicativo do Azure. O Serviço de Aplicativo do Azure não impedirá que você implante um aplicativo que contenha tarefas agendadas internamente. No entanto, se o aplicativo for escalado horizontalmente, um mesmo trabalho agendado poderá ser executado mais de uma vez por período agendado. Essa situação pode levar a consequências indesejadas.

Para executar trabalhos agendados no Azure, considere a possibilidade de usar o Azure Functions com um gatilho de temporizador. Para mais informações, consulte Gatilho de temporizador para o Azure Functions. Você não precisa migrar o código do trabalho propriamente dito para uma função. A função pode simplesmente invocar uma URL no aplicativo para disparar o trabalho.

Observação

Para evitar o uso mal-intencionado, você provavelmente precisará garantir que o ponto de extremidade de invocação do trabalho exija credenciais. Nesse caso, a função de gatilho precisará fornecer as credenciais.

Determinar se uma conexão com o local é necessária

Se seu aplicativo precisar acessar qualquer um dos seus serviços locais, você precisará provisionar um dos serviços de conectividade do Azure. Para obter mais informações, confira Escolher uma solução para conectar uma rede local ao Azure. Como alternativa, você precisará refatorar seu aplicativo para usar APIs disponíveis publicamente que seus recursos locais expõem.

Determinar se as Filas ou os Tópicos do JMS (Java Message Service) estão em uso

Se seu aplicativo estiver usando Filas ou Tópicos do JMS, você precisará migrá-los para um servidor do JMS hospedado externamente. O Barramento de Serviço do Azure e o AMQP (Advanced Message Queuing Protocol) podem ser uma excelente estratégia de migração para pessoas que usam o JMS. Para obter mais informações, consulte Usar o JMS com o Barramento de Serviço do Azure e o AMQP 1.0.

Se os armazenamentos persistentes JMS tiverem sido configurados, você deverá capturar a configuração deles e aplicá-la após a migração.

Determinar se seu aplicativo usa APIs específicas do WebSphere

Se seu aplicativo usa APIs específicas do WebSphere, você precisará refatorá-lo para NÃO usá-las. O Red Hat Migration Toolkit for Apps pode ajudar a remover e refatorar essas dependências.

Determinar se o aplicativo usa Beans de Entidade ou Beans CMP com estilo EJB 2.x

Se o aplicativo usar Beans de Entidade ou Beans CMP com estilo EJB 2.x, você precisará refatorá-lo para remover essas dependências.

Determine se o recurso JavaEE Application Client é usado

Se você tiver aplicativos cliente que se conectam ao seu aplicativo (servidor) usando o recurso JavaEE Application Client, será necessário refatorar os aplicativos cliente e o aplicativo (servidor) para usar APIs HTTP.

Determinar se o aplicativo contém código específico do sistema operacional

Se seu aplicativo contiver qualquer código com dependências do sistema operacional do host, você precisará refatorá-lo para remover essas dependências. Por exemplo, talvez seja necessário substituir qualquer uso de / ou \ em caminhos do sistema de arquivos com File.Separator ou Paths.get.

Determinar se temporizadores EJB estão sendo usados

Se seu aplicativo usa temporizadores EJB, você precisará validar se o código de timer EJB pode ser acionado por cada instância do JBoss EAP independentemente. Essa validação é necessária porque, quando o Serviço de Aplicativo for dimensionado horizontalmente, cada temporizador EJB será acionado em sua própria instância do JBoss EAP.

Determinar se conectores JCA estão em uso

Se seu aplicativo usa conectores JCA, você precisará validar se o conector JCA pode ser usado no JBoss EAP. Se a implementação do JCA estiver vinculada ao WebSphere, você precisará refatorar seu aplicativo removendo a dependência do conector JCA. Se o conector JCA puder ser usado, você precisará adicionar os JARs ao classpath do servidor. Você também precisará colocar os arquivos de configuração necessários no local correto nos diretórios do servidor JBoss EAP para que ele esteja disponível.

Determinar se o JAAS está sendo usado

Se seu aplicativo usa JAAS, você precisará capturar como o JAAS está configurado. Se estiver usando um banco de dados, você poderá convertê-lo em um domínio JAAS no JBoss EAP. Caso se trate de uma implementação personalizada, será necessário validar que ela pode ser usada no JBoss EAP.

Determinar se seu aplicativo usa um Adaptador de Recurso

Se o aplicativo precisar de um RA (Adaptador de Recurso), ele precisará ser compatível com o JBoss EAP. Determine se o RA funciona bem em uma instância autônoma do JBoss EAP implantando-o no servidor e configurando-o corretamente. Se o RA funcionar corretamente, você precisará adicionar os JARs ao classpath do servidor da instância do Serviço de Aplicativo e colocar os arquivos de configuração necessários no local correto nos diretórios do servidor JBoss EAP para que ele esteja disponível.

Determinar se seu aplicativo é composto por vários WARs

Se seu aplicativo for composto por vários WARs, você deverá tratar cada um desses WARs como aplicativos separados e consultar este guia para cada um deles.

Determinar se seu aplicativo está empacotado como um EAR

Se seu aplicativo for empacotado como um arquivo EAR, certifique-se de examinar os arquivos application.xml e ibm-application-bnd.xml e capturar suas configurações.

Identificar todos os processos e daemons externos em execução nos servidores de produção

Se você tiver processos em execução fora do servidor de aplicativos, como daemons de monitoramento, precisará eliminá-los ou migrá-los para outro lugar.

Migração

Kit de ferramentas de migração Red Hat para aplicativos

O Red Hat Migration Toolkit for Applications é uma extensão gratuita do Visual Studio Code. Essa extensão analisa o código e a configuração do aplicativo para fornecer recomendações para migrar seus aplicativos do Jakarta EE para o JBoss EAP de outros servidores de aplicativos, como remover dependências de APIs proprietárias. A extensão também fornecerá recomendações se você estiver migrando para a nuvem do local. Para obter mais informações, consulte Visão geral do Migration Toolkit for Applications.

O conteúdo deste guia ajudará você a abordar os outros componentes da jornada de migração, como escolher o tipo de Plano do Serviço de Aplicativo correto, externalizar o estado da sessão e usar o Azure para gerenciar suas instâncias EAP em vez da interface de Gerenciamento JBoss.

Provisionar um plano do Serviço de Aplicativo

Na lista de planos de serviço disponíveis, selecione o plano cujas especificações atendem ou excedem as especificações do hardware de produção atual.

Observação

Se você planeja executar implantações de preparo/canário ou usar slots de implantação, o plano do Serviço de Aplicativo precisará incluir essa capacidade adicional. É recomendável usar planos Premium ou superiores para aplicativos Java.

Crie esse plano de serviço de aplicativo.

Criar e implantar aplicativo(s) Web(s)

Você precisará criar um Aplicativo Web em seu Plano de Serviço de Aplicativo para cada arquivo WAR implantado no servidor JBoss EAP.

Observação

Embora seja possível implantar vários arquivos WAR em um único aplicativo Web, isso é altamente indesejável. Implantar vários arquivos WAR em um único aplicativo Web impede que cada aplicativo seja dimensionado de acordo com suas próprias demandas de uso. Ele também adiciona complexidade a pipelines de implantação subsequentes. Se vários aplicativos precisarem estar disponíveis em uma única URL, considere a possibilidade de usar uma solução de roteamento, como o Gateway de Aplicativo do Azure.

Aplicativos Maven

Se o seu aplicativo for criado com base em um arquivo POM do Maven, use o plug-in do Aplicativo Web para Maven para criar o aplicativo Web e implantar seu aplicativo. Para obter mais informações, consulte a seção Configurar o plug-in Maven de Guia de início rápido: criar um aplicativo Java no Serviço de Aplicativo do Azure.

Aplicativos não Maven

Se não for possível usar o plug-in do Maven, você precisará provisionar o aplicativo Web por meio de outros mecanismos, como:

Depois de criar o aplicativo Web, use um dos mecanismos de implantação disponíveis para implantar seu aplicativo. Para obter mais informações, consulteImplantar arquivos no Serviço de Aplicativo.

Migrar opções de runtime da JVM

Se o aplicativo exigir opções específicas de runtime, use o mecanismo mais apropriado para especificá-las. Para obter mais informações, consulte a seção Definir opções de tempo de execução Java de Configurar um aplicativo Java para o Serviço de Aplicativo do Azure.

Popular segredos

Use as Configurações do Aplicativo para armazenar os segredos específicos no aplicativo. Se você pretende usar o mesmo segredo ou segredos entre vários aplicativos ou precisa de políticas de acesso refinadas e recursos de auditoria, use as referências do Cofre de Chaves do Azure. Para obter mais informações, consulte a seção Usar referências do KeyVault de Configurar um aplicativo Java para o Serviço de Aplicativo do Azure.

Configurar domínio personalizado e SSL

Se o aplicativo ficar visível em um domínio personalizado, você precisará mapear seu aplicativo Web para ele. Para obter mais informações, confira Tutorial: Mapear um nome DNS personalizado existente para o Serviço de Aplicativo do Azure.

Em seguida, você precisará vincular o certificado TLS/SSL desse domínio ao seu Aplicativo Web do Serviço de Aplicativo. Para obter mais informações, confira Proteger um nome DNS personalizado com uma associação TLS/SSL no Serviço de Aplicativo do Azure.

Migrar fontes de dados, bibliotecas e recursos de JNDI

Para migrar fontes de dados, siga as etapas na seção Configurar fontes de dados de Configurar um aplicativo Java para o Serviço de Aplicativo do Azure.

Migre quaisquer dependências de classpath no nível de servidor adicionais seguindo as instruções na seção JBoss EAP de Configurar um aplicativo Java para o Serviço de Aplicativo do Azure.

Migre quaisquer recursos JDNI compartilhados adicionais no nível do servidor. Para obter mais informações, consulte a seção JBoss EAP de Configurar um aplicativo Java para o Serviço de Aplicativo do Azure.

Observação

Se você estiver seguindo a arquitetura recomendada de um WAR por aplicativo, considere migrar bibliotecas de classpath no nível do servidor e recursos JNDI para seu aplicativo. Isso simplificará significativamente a governança de componentes e o gerenciamento de mudanças. Se você quiser implantar mais de um WAR por aplicativo, você deve revisar um dos nossos guias complementares mencionados no início deste guia.

Migrar os trabalhos agendados

No mínimo, você deve mover seus trabalhos agendados para uma VM do Azure para que eles não façam mais parte do seu aplicativo. Como alternativa, você pode optar por modernizá-los em Java controlado por eventos usando serviços do Azure, como o Azure Functions, o Banco de Dados SQL e os Hubs de Eventos.

Reinicialização e smoke test

Por fim, você precisará reiniciar seu aplicativo Web para aplicar todas as alterações de configuração. Após a conclusão da reinicialização, verifique se o aplicativo está sendo executado corretamente.

Após a migração

Agora que você migrou seu aplicativo para o Serviço de Aplicativo do Azure, verifique se ele funciona conforme o esperado. Depois de fazer isso, temos algumas recomendações para você que podem tornar seu aplicativo mais nativo da nuvem.

Recomendações