Migrar aplicações JBoss EAP para o JBoss EAP no Serviço de Aplicações do Azure

Este guia descreve o que você deve saber quando deseja migrar um aplicativo JBoss EAP existente para ser executado no JBoss EAP em uma instância do Serviço de Aplicativo do Azure.

Pré-migração

Para garantir uma migração bem-sucedida, antes de começar, conclua as etapas de avaliação e inventário descritas nas seções a seguir.

Fazer o inventário da capacidade do servidor

Documente o hardware (memória, CPU, disco) do(s) servidor(es) de produção atual e as contagens médias e de pico de solicitações e a utilização de recursos. Independentemente do caminho de migração que escolher, vai precisar destas informações. É útil, por exemplo, para ajudar a orientar a seleção do tamanho das VMs em seu pool de nós, a quantidade de memória a ser usada pelo contêiner e quantas CPUs compartilham as necessidades do contêiner.

É possível redimensionar pools de nós no AKS. Para saber como, consulte Redimensionar pools de nós no Serviço Kubernetes do Azure (AKS).

Inventariar todos os segredos

Procure segredos e palavras-passe nas propriedades e nos ficheiros de configuração do servidor ou servidores de produção. Não se esqueça de verificar jboss-web.xml nos seus WARs. Também poderá encontrar ficheiros de configuração com palavras-passe ou credenciais dentro da aplicação.

Considere armazenar esses segredos no Azure Key Vault. Para obter mais informações, veja Conceitos básicos do Azure Key Vault.

Você pode usar segredos do Cofre da Chave em sua instância do Serviço de Aplicativo com referências do Cofre da Chave. As referências do Key Vault permitem que você use os segredos em seu aplicativo, mantendo-os protegidos e criptografados em repouso. Para obter mais informações, consulte Usar referências do Cofre da Chave para o Serviço de Aplicativo e o Azure Functions.

Inventariar todos os certificados

Documente todos os certificados utilizados para os pontos finais SSL públicos. Pode ver todos os certificados no servidor ou servidores de produção com o comando seguinte:

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

Verificar se a versão de Java suportada funciona corretamente

O JBoss EAP em VMs do Azure requer uma versão suportada do Java. Para obter orientação sobre qual versão do JDK usar, consulte Configurações suportadas na documentação da Red Hat.

Nota

Esta validação é particularmente importante se o seu servidor atual estiver a ser executado num JDK não suportado (como Oracle JDK ou IBM OpenJ9).

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

java -version

Inventariar os recursos externos

Os recursos externos, como origens de dados, mediadores de mensagens JMS, entre outros, são injetados através de Java Naming and Directory Interface (JNDI). Alguns desses recursos podem precisar de migração ou reconfiguração.

Na aplicação

Inspecione os arquivos WEB-INF/jboss-web.xml e/ou WEB-INF/web.xml. Procure elementos <Resource> dentro do elemento <Context>.

Origens de Dados

Origens de dados e recursos JNDI com o atributo type definido como javax.sql.DataSource. Documente a seguinte informação de cada origem de dados:

  • Qual é o nome da origem de dados?
  • Qual é a configuração do conjunto de ligações?
  • Onde posso obter o ficheiro JAR do controlador JDBC?

Para obter mais informações, veja Acerca das Origens de Dados do JBoss EAP na documentação do JBoss EAP.

Todos os outros recursos externos

Não é exequível documentar todas as dependências externas possíveis neste guia. Cabe à sua equipa verificar que pode satisfazer todas as dependências externas da sua aplicação após a migração.

Determinar se é utilizada a replicação de sessões

Se a sua aplicação depender da replicação de sessões, terá de alterar a sua aplicação para remover esta dependência. O Serviço de Aplicativo não permite que as instâncias se comuniquem diretamente entre si.

Determinar se e como é que o sistema de ficheiros é utilizado

Qualquer utilização do sistema de ficheiros no servidor de aplicações irá exigir uma reconfiguração ou, em casos raros, alterações da arquitetura. O sistema de arquivos pode ser usado pelos módulos EAP do JBoss ou pelo código do seu aplicativo. Poderá identificar alguns ou todos os cenários descritos nas secções seguintes.

Conteúdo estático só de leitura

Se a sua aplicação servir conteúdo estático atualmente, precisa de uma localização alternativa para o mesmo. Pode considerar mover o conteúdo estático para o Armazenamento de Blobs do Azure e adicionar a CDN do Azure para obter transferências super-rápidas a nível global. Para obter mais informações, consulte Hospedagem de site estático no Armazenamento do Azure e Guia de início rápido: integrar uma conta de armazenamento do Azure com a CDN do Azure. Você também pode implantar diretamente o conteúdo estático em um aplicativo no plano do Azure Spring Apps Enterprise. Para obter mais informações, consulte Implantar arquivos estáticos da Web.

Conteúdo estático publicado dinamicamente

Se a sua aplicação permitir conteúdo estático carregado/produzido pela mesma, mas que é imutável após a criação, pode utilizar o Armazenamento de Blobs do Azure e a CDN do Azure conforme descrito acima, com uma função das Funções do Azure que lide com os carregamentos e as atualizações da CDN. Disponibilizamos uma implementação de exemplo que pode utilizar, em Uploading and CDN-preloading static content with Azure Functions (Carregamento e pré-carregamento da CDN de conteúdo estático com as Funções do Azure). Você também pode implantar diretamente o conteúdo estático em um aplicativo no plano do 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 frequentemente gravados e lidos pelo seu aplicativo (como arquivos de dados temporários) ou arquivos estáticos que são visíveis apenas para seu aplicativo, você pode usar o armazenamento de arquivos local associado ao seu plano de serviço de aplicativo. Para obter mais informações, consulte Funcionalidade do sistema operacional no Serviço de Aplicativo do Azure e Noções básicas sobre o sistema de arquivos do Serviço de Aplicativo do Azure.

Determinar se a aplicação depende de trabalhos agendados

Trabalhos agendados, como tarefas do Agendador de Quartzo 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 contendo tarefas agendadas internamente. Contudo, se a sua aplicação estiver ampliada, a mesma tarefa agendada pode ser executada mais de uma vez por período agendado. Esta situação pode provocar consequências não intencionais.

Inventarie todas as tarefas agendadas em execução no(s) servidor(es) de produção, dentro ou fora do código do aplicativo.

Determinar se é necessária uma ligação ao local

Se a sua aplicação precisar de aceder a um dos seus serviços no local, tem de aprovisionar um dos serviços de conectividade do Azure. Para obter mais informações, veja como Escolher uma solução para ligar uma rede no local ao Azure. Em alternativa, tem de refatorizar a aplicação para utilizar as APIs publicamente disponíveis que os seus recursos no local expõem.

Determinar se os Tópicos ou Filas do Java Message Service (JMS) estão a ser utilizados

Se a sua aplicação utilizar Filas ou Tópicos do JMS, tem de os migrar para um servidor JMS alojado externamente. O Azure Service Bus e o Advanced Message Queuing Protocol (AMQP) podem ser uma excelente estratégia de migração para quem utiliza o JMS. Para obter mais informações, veja Utilizar o JMS com o Azure Service Bus e o AMQP 1.0.

Se tiverem sido configurados arquivos persistentes do JMS, tem de capturar a respetiva configuração e aplicá-la após a migração.

Determinar se há conectores JCA em utilização

Se seu aplicativo usa conectores JCA, valide se você pode usar o conector JCA no JBoss EAP. Se você puder usar o conector JCA no JBoss EAP, para que ele esteja disponível, você deve adicionar os JARs ao classpath do servidor e colocar os arquivos de configuração necessários no local correto nos diretórios do servidor JBoss EAP.

Determinar se o JAAS está a ser utilizado

Se a sua aplicação utilizar o JAAS, tem de capturar a forma como este é configurado. Se estiver usando um banco de dados, você poderá convertê-lo em um domínio JAAS no JBoss EAP. Se for uma implementação personalizada, você precisará validar que ela pode ser usada no JBoss EAP.

Determinar se a aplicação utiliza um Adaptador de Recursos

Se seu aplicativo precisa de um adaptador de recursos (RA), ele precisa 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 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 a sua aplicação é composta por vários WARs

Se a sua aplicação for composta por vários WARs, deve tratar cada um desses WARs como aplicações separadas e seguir este guia para cada qual individualmente.

Determinar se a sua aplicação está empacotada como EAR

Se a sua aplicação estiver empacotada como ficheiro EAR, certifique-se de que examina o ficheiro application.xml e captura a configuração.

Nota

Se quiser ser capaz de dimensionar cada um dos seus aplicativos Web de forma independente para melhor usar os recursos do Serviço de Aplicativo, você deve dividir o EAR em aplicativos Web separados.

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

Se tiver processos em execução fora do servidor de aplicações, como daemons de monitorização, terá de eliminar ou migrá-los para outro local.

Fazer testes no local

Antes de criar suas imagens de contêiner, migre seu aplicativo para as versões JDK e JBoss EAP que você pretende usar no Serviço de Aplicativo. Teste a aplicação de forma minuciosa para garantir a compatibilidade e o desempenho.

Notas de recursos do JBoss EAP no Serviço de Aplicativo

Ao usar o JBoss EAP no Serviço de Aplicativo, leve em consideração as seguintes notas.

  • Console de gerenciamento do JBoss EAP: o console da Web JBoss não está exposto no Serviço de Aplicativo. Em vez disso, o portal do Azure fornece as APIs de gerenciamento para seu aplicativo e você deve implantar usando a CLI do Azure, o Plug-in do Azure Maven ou outras ferramentas de desenvolvedor do Azure.

  • Transações: as instâncias do aplicativo são executadas sem monitoração de estado, portanto, a API de transações não é suportada no momento. Para obter mais informações, consulte Gerenciando transações no JBoss EAP na documentação da Red Hat.

  • Modo de domínio gerenciado: em um ambiente de produção multisservidor, o modo de domínio gerenciado no JBoss EAP oferece recursos gerenciados centralizados. No entanto, com o JBoss EAP no Serviço de Aplicativo, a plataforma do Serviço de Aplicativo assume a responsabilidade pela configuração e gerenciamento das instâncias do servidor. O Serviço de Aplicativo elimina a necessidade do modo de domínio gerenciado do JBoss EAP. O modo de domínio é uma boa opção para implantações multisservidor baseadas em máquina virtual. Para obter mais informações, consulte Sobre domínios gerenciados na documentação da Red Hat.

  • Clustering de servidor para servidor: a partir de 15 de março de 2022, a implantação em cluster do JBoss EAP é suportada na Visualização Pública. Esse suporte significa que você não precisa mais remover os seguintes recursos de seus aplicativos antes de implantá-los no Serviço de Aplicativo:

    • Beans de sessão com monitoração de estado.
    • Transações distribuídas.
    • Recursos semelhantes que exigem comunicação instância a instância ou alta disponibilidade.

    Para obter mais informações, consulte o anúncio de lançamento e a seção Clustering no JBoss EAP de Configurar um aplicativo Java para o Serviço de Aplicativo do Azure.

Migração

Red Hat Migration Toolkit for Apps

O Red Hat Migration Toolkit for Applications é uma extensão gratuita para o Visual Studio Code. Esta extensão analisa o código e a configuração do aplicativo para fornecer recomendações de migração local para a nuvem. 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 correto de Plano do Serviço de Aplicativo, externalizar o estado da sessão e usar o Azure para gerenciar suas instâncias EAP em vez da interface de Gerenciamento JBoss.

Provisionar o Serviço de Aplicativo do Azure para o tempo de execução do JBoss EAP

Use os comandos a seguir para criar um grupo de recursos e um Plano do Serviço de Aplicativo do Azure. Depois que o Plano do Serviço de Aplicativo é criado, um plano de aplicativo Web Linux é criado usando o tempo de execução do JBoss EAP. Você pode criar sites JBoss EAP somente nas camadas PremiumV3 e IsolatedV2 App Service Plan.

Certifique-se de que as variáveis de ambiente especificadas tenham valores apropriados.

Nota

O PremiumV3 e o IsolatedV2 são elegíveis para preços de Instância Reservada, o que pode reduzir seus custos. Para obter mais informações sobre as camadas do Plano do Serviço de Aplicativo e os preços da Instância Reservada, consulte Preços do Serviço de Aplicativo.

az group create --resource-group $resourceGroup --location eastus
az acr create --resource-group $resourceGroup --name $acrName --sku Standard
az appservice plan create \
    --resource-group $resourceGroup \
    --name $jbossAppService \
    --is-linux \
    --sku P1V2
az webapp create \
    --resource-group $resourceGroup \
    --name $jbossWebApp \
    --plan $jbossAppServicePlan \
    --runtime "JBOSSEAP|7-java8"
    #  Or use "JBOSSEAP|7-java11" if you're using Java 11

Criar a aplicação

Crie o aplicativo usando o seguinte comando Maven.

mvn clean install -DskipTests

Implementar a aplicação

Se a sua aplicação tiver sido criada a partir de um ficheiro POM do Maven, utilize o plug-in de aplicações Web para o Maven para criar a aplicação Web e implementar a sua aplicação. Para obter mais informações, consulte Guia de início rápido: criar um aplicativo Java no Serviço de Aplicativo do Azure.

Para automatizar a implantação de aplicativos EAP JBoss, você pode usar a tarefa Azure Pipelines for Web App ou GitHub Action para implantar no Azure WebApp.

Configurar origens de dados

Há três etapas principais ao registrar uma fonte de dados com o JBoss EAP: carregar o driver JDBC, adicionar o driver JDBC como um módulo e registrar o módulo. Para obter mais informações, consulte Gerenciamento de fonte de dados na documentação do JBoss EAP. O Serviço de Aplicativo é um serviço de hospedagem sem monitoração de estado, portanto, os comandos de configuração para adicionar e registrar o módulo de fonte de dados devem ser roteirizados e aplicados à medida que o contêiner é iniciado.

Para configurar fontes de dados, use as etapas a seguir.

  1. Obtenha o driver JDBC do seu banco de dados.

  2. Crie um arquivo de definição de módulo XML para o driver JDBC. O exemplo mostrado abaixo é uma definição de módulo para PostgreSQL. Certifique-se de substituir o valor pelo caminho para o resource-root path driver JDBC que você usa.

    <?xml version="1.0" ?>
    <module xmlns="urn:jboss:module:1.1" name="org.postgres">
        <resources>
        <!-- ***** IMPORTANT: REPLACE THIS PLACEHOLDER *******-->
        <resource-root path="/home/site/deployments/tools/postgresql-42.2.12.jar" />
        </resources>
        <dependencies>
            <module name="javax.api"/>
            <module name="javax.transaction.api"/>
        </dependencies>
    </module>
    
  3. Coloque os comandos da CLI do JBoss em um arquivo chamado jboss-cli-commands.cli. Os comandos do JBoss devem adicionar o módulo e registrá-lo como fonte de dados. O exemplo abaixo mostra os comandos JBoss CLI para PostgreSQL.

    module add --name=org.postgres --resources=/home/site/deployments/tools/postgresql-42.2.12.jar --module-xml=/home/site/deployments/tools/postgres-module.xml
    
    /subsystem=datasources/jdbc-driver=postgres:add(driver-name="postgres",driver-module-name="org.postgres",driver-class-name=org.postgresql.Driver,driver-xa-datasource-class-name=org.postgresql.xa.PGXADataSource)
    
    data-source add --name=postgresDS --driver-name=postgres --jndi-name=java:jboss/datasources/postgresDS --connection-url=${POSTGRES_CONNECTION_URL,env.POSTGRES_CONNECTION_URL:jdbc:postgresql://db:5432/postgres} --user-name=${POSTGRES_SERVER_ADMIN_FULL_NAME,env.POSTGRES_SERVER_ADMIN_FULL_NAME:postgres} --password=${POSTGRES_SERVER_ADMIN_PASSWORD,env.POSTGRES_SERVER_ADMIN_PASSWORD:example} --use-ccm=true --max-pool-size=5 --blocking-timeout-wait-millis=5000 --enabled=true --driver-class=org.postgresql.Driver --exception-sorter-class-name=org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLExceptionSorter --jta=true --use-java-context=true --valid-connection-checker-class-name=org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLValidConnectionChecker
    
  4. Crie um script de inicialização chamado startup_script.sh que chame os comandos da CLI do JBoss. O exemplo abaixo mostra como chamar seu arquivo jboss-cli-commands.cli . Mais tarde, você configurará o Serviço de Aplicativo para executar esse script quando a instância for iniciada.

    $JBOSS_HOME/bin/jboss-cli.sh --connect --file=/home/site/deployments/tools/jboss-cli-commands.cli
    
  5. Usando um cliente FTP de sua escolha, carregue seu driver JDBC, jboss-cli-commands.cli, startup_script.sh e a definição do módulo para /site/deployments/tools/.

  6. Configure seu site para executá startup_script.sh quando o contêiner for iniciado. No portal do Azure, navegue até Comando de Inicialização de Configurações > Gerais de Configuração>. Defina o campo de comando de inicialização como /home/site/deployments/tools/startup_script.sh e selecione Salvar.

  7. Reinicie o aplicativo Web, o que fará com que ele execute o script de configuração.

  8. Atualize a configuração da fonte de dados JTA para seu aplicativo. Abra o arquivo src/main/resources/META-INF/persistence.xml do seu aplicativo e localize o <jta-data-source> elemento . Substitua os respetivos conteúdos, conforme mostrado aqui:

    <jta-data-source>java:jboss/datasources/postgresDS</jta-data-source>
    

Criar a aplicação

Crie o aplicativo usando o seguinte comando Maven.

mvn clean install -DskipTests

Implementar a aplicação

Se a sua aplicação tiver sido criada a partir de um ficheiro POM do Maven, utilize o plug-in de aplicações Web para o Maven para criar a aplicação Web e implementar a sua aplicação. Para obter mais informações, consulte Guia de início rápido: criar um aplicativo Java no Serviço de Aplicativo do Azure.

Para automatizar a implantação de aplicativos EAP JBoss, você pode usar a tarefa Azure Pipelines for Web App ou GitHub Action para implantar no Azure WebApp.

Pós-migração

Agora que você migrou seu aplicativo para o Serviço de Aplicativo do Azure, verifique se ele funciona como esperado. Depois disso, temos algumas recomendações que podem tornar a sua aplicação mais nativa da cloud.

Recomendações