Migrera JBoss EAP-program till JBoss EAP på Azure App Service

Den här guiden beskriver vad du bör känna till när du vill migrera ett befintligt JBoss EAP-program som ska köras på JBoss EAP i en Azure App Service-instans.

Före migrering

För att säkerställa en lyckad migrering slutför du de utvärderings- och inventeringssteg som beskrivs i följande avsnitt innan du börjar.

Lagerserverkapacitet

Dokumentera maskinvaran (minne, CPU, disk) för de aktuella produktionsservrarna och det genomsnittliga och högsta antalet begäranden och resursanvändningen. Du behöver denna information oavsett vilken migrerings väg du väljer. Det är till exempel användbart att hjälpa dig att välja storlek på de virtuella datorerna i nodpoolen, mängden minne som ska användas av containern och hur många CPU-resurser containern behöver.

Det går att ändra storlek på nodpooler i AKS. Mer information finns i Ändra storlek på nodpooler i Azure Kubernetes Service (AKS).

Inventera alla hemligheter

Kontrollera alla egenskaper och konfigurationsfiler på produktionsservrarna efter hemligheter och lösenord. Kontrollera jboss-web.xml bland dina WAR-filer. Konfigurationsfiler som innehåller lösenord eller autentiseringsuppgifter kan också finnas i ditt program.

Överväg att lagra dessa hemligheter i Azure KeyVault. Mer information finns i Grundläggande koncept för Azure Key Vault.

Du kan använda Key Vault-hemligheter i din App Service-instans med Key Vault-referenser. Med Key Vault-referenser kan du använda hemligheterna i ditt program samtidigt som de skyddas och krypteras i vila. Mer information finns i Använda Key Vault-referenser för App Service och Azure Functions.

Inventera alla certifikat

Dokumentera alla certifikat som används för offentliga SSL-slutpunkter. Du kan visa alla certifikat på produktionsservrarna genom att köra följande kommando:

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

Validera att Java-versionen som stöds fungerar som den ska

JBoss EAP på virtuella Azure-datorer kräver en version av Java som stöds. Vägledning om vilken version av JDK som ska användas finns i Konfigurationer som stöds i Red Hat-dokumentationen.

Kommentar

Den här verifieringen är särskilt viktig om den aktuella servern körs på en JDK som inte stöds (till exempel Oracle JDK eller IBM OpenJ9).

Du får den aktuella Java-versionen genom att logga in på din produktionsserver och köra följande kommando:

java -version

Inventera externa resurser

Externa resurser som datakällor, JMS asynkron meddelandekö och andra matas via Java-namngivnings- och kataloggränssnittet (JNDI). Vissa resurser kan kräva migrering eller omkonfiguration.

I ditt program

Granska filerna WEB-INF/jboss-web.xml och/eller WEB-INF/web.xml. Leta efter <Resource>-element i <Context>-elementet.

Datakällor

Datakällor är JNDI-resurser med attributet type inställt på javax.sql.DataSource. För varje datakälla, dokumenterar du följande information:

  • What is the datakällans namn?
  • Vad är konfigurationen för anslutningspoolen?
  • Var hittar jag JAR-filen för JDBC-drivrutinen?

Mer information finns i Om JBoss EAP-datakällor i dokumentationen till JBoss EAP.

Alla andra externa resurser

Det är inte möjligt att dokumentera alla möjliga externa beroenden i den här guiden. Det är ditt teams ansvar att kontrollera att du kan uppfylla varje externt beroende för ditt program efter migreringen.

Fastställ om sessionsreplikering används

Om ditt program använder sig av sessionsreplikering måste du ändra programmet och ta bort det här beroendet. App Service tillåter inte att instanser kommunicerar direkt med varandra.

Kontrollera om och hur filsystemet används

All användning av programserverns filsystem kräver omkonfiguration eller, i sällsynta fall, arkitektoniska ändringar. Filsystemet kan användas av JBoss EAP-moduler eller av programkoden. Du kanske identifierar några eller alla scenarier som beskrivs i följande avsnitt.

Skrivskyddat statiskt innehåll

Om ditt program för tillfället hanterar statiskt innehåll behöver du en alternativ plats för det. Du kanske kan tänka dig att flytta det statiska innehållet till Azure Blob Storage och lägga till Azure CDN för blixtsnabba nedladdningar globalt. Mer information finns i Värd för statiska webbplatser i Azure Storage och snabbstart: Integrera ett Azure Storage-konto med Azure CDN. Du kan också distribuera det statiska innehållet direkt till en app i Azure Spring Apps Enterprise-planen. Mer information finns i Distribuera webbstatiska filer.

Dynamiskt publicerat statiskt innehåll

Om ditt program tillåter att statiskt innehåll laddas upp/skapas av ditt program, men inte kan ändras efter att det har skapats, så kan du använda Azure Blob Storage och Azure CDN enligt beskrivningen ovan, med en Azure-funktion för hantering av överföringar och CDN-uppdateringar. Vi har tillhandahållit en exempelimplementering som du kan använda i Överföra och CDN-för inläsa statiskt innehåll med Azure Functions. Du kan också distribuera det statiska innehållet direkt till en app i Azure Spring Apps Enterprise-planen. Mer information finns i Distribuera webbstatiska filer.

Dynamiskt eller internt innehåll

För filer som ofta skrivs och läses av ditt program (till exempel temporära datafiler) eller statiska filer som endast är synliga för ditt program kan du använda lokal fillagring som är associerad med apptjänstplanen. Mer information finns i Operativsystemfunktioner i Azure App Service och Förstå Azure App Service-filsystemet.

Ta reda på om programmet är beroende av schemalagda jobb

Schemalagda jobb, till exempel Quartz Scheduler-uppgifter eller Unix cron-jobb, ska INTE användas med Azure App Service. Azure App Service hindrar dig inte från att distribuera ett program som innehåller schemalagda uppgifter internt. Om ditt program skalas ut kan dock samma schemalagda jobb köras mer än en gång per schemalagd period. Den här situationen kan leda till oönskade konsekvenser.

Inventera schemalagda aktiviteter som körs på produktionsservrarna, i eller utanför programkoden.

Avgör om en anslutning till lokalt behövs

Om ditt program behöver har åtkomst till någon av dina lokala tjänster måste du etablera en av Azures anslutningstjänster. Mer information finns i Välj en lösning för att ansluta ett lokalt nätverk till Azure. Alternativt måste du omstrukturera programmet för att använda allmänt tillgängliga API:er som dina lokala resurser exponerar.

Ta reda på om JMS-köer eller -ämnen (Java Message Service) används

Om ditt program använder JMS-köer eller -ämnen måste du migrera dem till en extern JMS-server. Azure Service Bus och AMQP (Advanced Message Queueing Protocol) kan vara en bra migreringsstrategi för de som använder JMS. Mer information finns i Använda JMS med Azure Service Bus och AMQP 1.0.

Om JMS beständiga arkiv har konfigurerats måste du avbilda konfigurationen och tillämpa den efter migreringen.

Kontrollera om JCA-anslutningsprogram används

Om ditt program använder JCA-anslutningsappar kontrollerar du att du kan använda JCA-anslutningsappen på JBoss EAP. Om du kan använda JCA-anslutningsappen på JBoss EAP måste du lägga till JAR:erna i serverklasssökvägen och placera de nödvändiga konfigurationsfilerna på rätt plats i JBoss EAP-serverkatalogerna.

Ta reda på om JAAS används

Om ditt program använder JAAS måste du avbilda hur JAAS har konfigurerats. Om den använder en databas kan du konvertera den till en JAAS-domän på JBoss EAP. Om det är en anpassad implementering måste du verifiera att den kan användas på JBoss EAP.

Ta redan på om programmet använder en resursadapter

Om ditt program behöver ett resurskort (RA) måste det vara kompatibelt med JBoss EAP. Kontrollera om RA fungerar bra på en fristående instans av JBoss EAP genom att distribuera den till servern och konfigurera den korrekt. Om RA fungerar korrekt måste du lägga till JAR:erna i apptjänstens serverklasssökväg och placera de nödvändiga konfigurationsfilerna på rätt plats i JBoss EAP-serverkatalogerna för att den ska vara tillgänglig.

Ta reda på om ditt program består av flera WAR

Om ditt program består av flera WAS så ska du behandla vart och ett av dem som separarata program och gå igenom den här guiden för varje.

Ta reda på om ditt program är paketerat som EAR

Om ditt program är paketerat som en EAR-fil kontrollerar du filen application.xml och avbildar konfigurationen.

Kommentar

Om du vill kunna skala var och en av dina webbprogram oberoende av varandra för bättre användning av dina App Service-resurser bör du dela upp EAR i separata webbprogram.

Identifiera alla externa processer och daemons som körs på produktionsservrarna

Om du har processer som körs utanför programservern, som övervaknings-daemons så behöver du eliminera dem eller migrera dem någon annanstans.

Utför testning på plats

Innan du skapar dina containeravbildningar migrerar du programmet till de JDK- och JBoss EAP-versioner som du tänker använda i App Service. Testa programmet noggrant för att säkerställa kompatibilitet och prestanda.

JBoss EAP på App Service-funktionsanteckningar

När du använder JBoss EAP i App Service bör du tänka på följande.

  • JBoss EAP-hanteringskonsol: JBoss-webbkonsolen exponeras inte i App Service. I stället tillhandahåller Azure-portalen hanterings-API:er för ditt program och du bör distribuera med hjälp av Azure CLI, Azure Maven-plugin-programmet eller andra Azure-utvecklarverktyg.

  • Transaktioner: Programinstanserna körs på ett tillståndslöst sätt, så transaktions-API:et stöds inte för närvarande. Mer information finns i Hantera transaktioner på JBoss EAP i Red Hat-dokumentationen.

  • Hanterat domänläge: I en produktionsmiljö med flera servrar erbjuder läget Hanterad domän i JBoss EAP centraliserade hanterade funktioner. Men med JBoss EAP på App Service tar App Service-plattformen på sig ansvaret för konfiguration och hantering av dina serverinstanser. App Service eliminerar behovet av JBoss EAP:s hanterade domänläge. Domänläge är ett bra val för virtuella datorbaserade distributioner med flera servrar. Mer information finns i Om hanterade domäner i Red Hat-dokumentationen.

  • Server-till-server-kluster: Från och med den 15 mars 2022 stöds klustrad distribution av JBoss EAP i offentlig förhandsversion. Det här stödet innebär att du inte längre behöver ta bort följande funktioner från dina program innan du kan distribuera dem till App Service:

    • Tillståndskänsliga sessionsbönor.
    • Distribuerade transaktioner.
    • Liknande funktioner som kräver instans-till-instans-kommunikation eller hög tillgänglighet.

    Mer information finns i versionsmeddelandet och avsnittet Klustring i JBoss EAP i Konfigurera en Java-app för Azure App Service.

Migrering

Red Hat Migration Toolkit för appar

Red Hat Migration Toolkit for Applications är ett kostnadsfritt tillägg för Visual Studio Code. Det här tillägget analyserar programkoden och konfigurationen för att ge rekommendationer för migrering till molnet från en lokal plats. Mer information finns i Översikt över Migreringsverktyg för program.

Innehållet i den här guiden hjälper dig att hantera de andra komponenterna i migreringsresan, till exempel att välja rätt App Service-plantyp, externalisera sessionstillståndet och använda Azure för att hantera dina EAP-instanser i stället för JBoss-hanteringsgränssnittet.

Etablera Azure App Service för JBoss EAP-körning

Använd följande kommandon för att skapa en resursgrupp och en Azure App Service-plan. När App Service-planen har skapats skapas en Linux-webbappplan med JBoss EAP-körningen. Du kan bara skapa JBoss EAP-webbplatser på PremiumV3- och IsolatedV2 App Service-plannivåer.

Kontrollera att de angivna miljövariablerna har lämpliga värden.

Kommentar

Både PremiumV3 och IsolatedV2 är berättigade till priser för reserverad instans, vilket kan minska dina kostnader. Mer information om apptjänstplannivåer och priser för reserverade instanser finns i Priser för App Service.

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

Skapa programmet

Skapa programmet med hjälp av följande Maven-kommando.

mvn clean install -DskipTests

Distribuera programmet

Om programmet har skapats från en Maven POM-fil, så skapa webbappen och distribuera ditt program genom att använda webbapps-plugin-programmet för Maven. Mer information finns i Snabbstart: Skapa en Java-app i Azure App Service.

Om du vill automatisera distributionen av JBoss EAP-program kan du använda Azure Pipelines-uppgiften för Web App eller GitHub Action för att distribuera till Azure WebApp.

Konfigurera datakällor

Det finns tre grundläggande steg när du registrerar en datakälla med JBoss EAP: ladda upp JDBC-drivrutinen, lägga till JDBC-drivrutinen som en modul och registrera modulen. Mer information finns i Datasource Management i JBoss EAP-dokumentationen. App Service är en tillståndslös värdtjänst, så konfigurationskommandona för att lägga till och registrera datakällmodulen måste skriptas och tillämpas när containern startar.

Använd följande steg för att konfigurera datakällor.

  1. Hämta databasens JDBC-drivrutin.

  2. Skapa en XML-moduldefinitionsfil för JDBC-drivrutinen. Exemplet nedan är en moduldefinition för PostgreSQL. Ersätt resource-root path värdet med sökvägen till den JDBC-drivrutin som du använder.

    <?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. Placera dina JBoss CLI-kommandon i en fil med namnet jboss-cli-commands.cli. JBoss-kommandona måste lägga till modulen och registrera den som en datakälla. Exemplet nedan visar JBoss CLI-kommandona för 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. Skapa ett startskript med namnet startup_script.sh som anropar JBoss CLI-kommandona. Exemplet nedan visar hur du anropar filen jboss-cli-commands.cli . Senare konfigurerar du App Service för att köra det här skriptet när instansen startar.

    $JBOSS_HOME/bin/jboss-cli.sh --connect --file=/home/site/deployments/tools/jboss-cli-commands.cli
    
  5. Med valfri FTP-klient laddar du upp JDBC-drivrutinen, jboss-cli-commands.cli, startup_script.sh och moduldefinitionen till /site/deployments/tools/.

  6. Konfigurera webbplatsen så att den körs startup_script.sh när containern startar. I Azure-portalen går du till Konfigurationskommando > för allmänt Inställningar start.> Ange startkommandofältet till /home/site/deployments/tools/startup_script.sh och välj sedan Spara.

  7. Starta om webbappen, vilket gör att den kör konfigurationsskriptet.

  8. Uppdatera JTA-datakällans konfiguration för ditt program. Öppna filen src/main/resources/META-INF/persistence.xml för din app och leta reda på elementet<jta-data-source>. Ersätt innehållet enligt följande:

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

Skapa programmet

Skapa programmet med hjälp av följande Maven-kommando.

mvn clean install -DskipTests

Distribuera programmet

Om programmet har skapats från en Maven POM-fil, så skapa webbappen och distribuera ditt program genom att använda webbapps-plugin-programmet för Maven. Mer information finns i Snabbstart: Skapa en Java-app i Azure App Service.

Om du vill automatisera distributionen av JBoss EAP-program kan du använda Azure Pipelines-uppgiften för Web App eller GitHub Action för att distribuera till Azure WebApp.

Efter migreringen

Nu när du har migrerat ditt program till Azure App Service bör du kontrollera att det fungerar som förväntat. När du har gjort det har vi några rekommendationer som hjälper dig att göra programmet mer molnanpassat.

Rekommendationer