JBoss EAP-toepassingen migreren naar JBoss EAP op Azure App Service

In deze handleiding wordt beschreven waar u rekening mee moet houden wanneer u een bestaande JBoss EAP-toepassing wilt migreren om uit te voeren op JBoss EAP in een Azure-app Service-exemplaar.

Premigratie

Voltooi voordat u begint de evaluatie- en inventarisstappen die in de volgende secties worden beschreven om een geslaagde migratie te garanderen.

Servercapaciteit inventariseren

Documenteer de hardware (geheugen, CPU, schijf) van de huidige productieserver(s) en het gemiddelde en piekaantal aanvragen en het resourcegebruik. U hebt deze informatie nodig, welk migratiepad u ook kiest. Het is bijvoorbeeld handig bij het selecteren van de grootte van de VM's in uw knooppuntgroep, de hoeveelheid geheugen die door de container moet worden gebruikt en hoeveel CPU-shares de container nodig heeft.

Het is mogelijk om het formaat van knooppuntgroepen in AKS te wijzigen. Zie Het formaat van knooppuntgroepen wijzigen in Azure Kubernetes Service (AKS) voor meer informatie.

Alle geheimen inventariseren

Controleer alle eigenschaps- en configuratiebestanden op de productieserver(s) op geheimen en wachtwoorden. Controleer in elk geval jboss-web.xml in uw WAR's. Mogelijk bevinden zich ook in uw toepassing configuratiebestanden met wachtwoorden of referenties.

Overweeg deze geheimen op te slaan in Azure KeyVault. Zie Basisconcepten van Azure Key Vault voor meer informatie.

U kunt Key Vault-geheimen in uw App Service-exemplaar gebruiken met Key Vault-verwijzingen. Met Key Vault-verwijzingen kunt u de geheimen in uw toepassing gebruiken terwijl ze in rust worden beveiligd en versleuteld. Zie Key Vault-verwijzingen gebruiken voor App Service en Azure Functions voor meer informatie.

Alle certificaten inventariseren

Documenteer alle certificaten die worden gebruikt voor openbare SSL-eindpunten. U kunt alle certificaten op de productieserver(s) weergeven door de volgende opdracht uit te voeren:

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

Controleren of de ondersteunde Java-versie goed werkt

JBoss EAP op Virtuele Azure-machines vereist een ondersteunde versie van Java. Zie Ondersteunde configuraties in de Red Hat-documentatie voor hulp bij welke versie van de JDK moet worden gebruikt.

Notitie

Deze validatie is vooral belangrijk als uw huidige server wordt uitgevoerd in een niet-ondersteunde JDK (zoals Oracle JDK of IBM OpenJ9).

Meld u aan bij uw productieserver en voer de volgende opdracht uit om uw huidige Java-versie te verkrijgen:

java -version

Externe resources inventariseren

Externe resources, zoals gegevensbronnen, JMS-berichtenbrokers en andere resources, worden ingevoerd via Java Naming and Directory Interface (JNDI). Voor sommige resources kan migratie of herconfiguratie vereist zijn.

Binnen uw toepassing

Inspecteer de WEB-INF-/jboss-web.xml - en/of WEB-INF-/web.xml-bestanden . Zoek naar <Resource>-elementen in het <Context>-element.

Gegevensbronnen

Gegevensbronnen zijn JNDI-resources waarvoor het kenmerk type is ingesteld op javax.sql.DataSource. Documenteer voor elke gegevensbron de volgende informatie:

  • Wat is de naam van de gegevensbron?
  • Wat is de configuratie van de verbindingsgroep?
  • Waar vind ik het JAR-bestand van het JDBC-stuurprogramma?

Raadpleeg Over JBoss EAP-gegevensbronnen in de Jboss EAP-documentatie voor meer informatie.

Alle andere externe resources

Het is niet haalbaar om alle mogelijke externe afhankelijkheden in deze handleiding te documenteren. Het is de verantwoordelijkheid van uw team om alle externe afhankelijkheden van uw toepassing te verifiëren na de migratie.

Bepalen of sessiereplicatie wordt gebruikt

Als uw toepassing afhankelijk is van sessiereplicatie, moet u uw toepassing zo aanpassen dat deze afhankelijkheid niet meer bestaat. App Service staat niet toe dat exemplaren rechtstreeks met elkaar communiceren.

Nagaan of en hoe het bestandssysteem wordt gebruikt

Voor het gebruik van het bestandssysteem op de toepassingsserver is herconfiguratie vereist of zijn in zeldzame gevallen architectuurwijzigingen vereist. Het bestandssysteem kan worden gebruikt door JBoss EAP-modules of door uw toepassingscode. U kunt enkele of alle scenario's die in de volgende secties worden beschreven identificeren.

Statische alleen-lezeninhoud

Als uw toepassing momenteel met statische inhoud werkt, hebt u hiervoor een alternatieve locatie nodig. U kunt statische inhoud verplaatsen naar Azure Blob Storage en Azure CDN toevoegen voor razendsnelle downloads wereldwijd. Zie statische websitehosting in Azure Storage en quickstart: Een Azure-opslagaccount integreren met Azure CDN voor meer informatie. U kunt de statische inhoud ook rechtstreeks implementeren in een app in het Azure Spring Apps Enterprise-abonnement. Zie Statische webbestanden implementeren voor meer informatie.

Dynamisch gepubliceerde statische inhoud

Als uw toepassing statische inhoud toestaat die wordt geüpload/geproduceerd door uw toepassing, maar onveranderbaar is nadat deze is gemaakt, kunt u Azure Blob Storage en Azure CDN gebruiken zoals hierboven beschreven, met een Azure-functie om uploads en CDN-vernieuwing te verwerken. U vindt een voorbeeldimplementatie voor gebruik in Statische inhoud uploaden en via CDN vooraf laden met Azure Functions. U kunt de statische inhoud ook rechtstreeks implementeren in een app in het Azure Spring Apps Enterprise-abonnement. Zie Statische webbestanden implementeren voor meer informatie.

Dynamische of interne inhoud

Voor bestanden die vaak worden geschreven en gelezen door uw toepassing (zoals tijdelijke gegevensbestanden) of statische bestanden die alleen zichtbaar zijn voor uw toepassing, kunt u lokale bestandsopslag gebruiken die is gekoppeld aan uw App Service-plan. Zie De functionaliteit van het besturingssysteem voor Azure-app Service en inzicht in het bestandssysteem van de Azure-app Service voor meer informatie.

Bepalen of uw toepassing gebruikmaakt van geplande taken

Geplande taken, zoals Quartz Scheduler-taken of Unix Cron-taken, mogen niet worden gebruikt met Azure-app Service. Azure-app Service voorkomt niet dat u een toepassing met geplande taken intern implementeert. Als uw toepassing echter wordt uitgeschaald, kan dezelfde geplande taak meer dan één keer per geplande periode worden uitgevoerd. Deze situatie kan tot onbedoelde gevolgen leiden.

Inventariseer geplande taken die worden uitgevoerd op de productieserver(s), binnen of buiten de toepassingscode.

Bepalen of er een verbinding met on-premises services is vereist

Als voor uw toepassing toegang nodig is tot een van uw on-premises services, moet u een van de connectiviteitsservices van Azure inrichten. Zie Een oplossing kiezen voor het verbinden van een on-premises netwerk met Azure voor meer informatie. U moet uw toepassing ook herstructureren voor het gebruik van openbaar beschikbare API's in uw on-premises resources.

Bepalen of Java Message Service-wachtrijen (JMS) of -onderwerpen in gebruik zijn

Als uw toepassing JMS-wachtrijen of -onderwerpen gebruikt, moet u deze migreren naar een extern gehoste JMS-server. Azure Service Bus en het Advanced Message Queueing Protocol (AMQP) kunnen een uitstekende migratiestrategie zijn wanneer er gebruik wordt gemaakt van JMS. Raadpleeg JMS gebruiken met Azure Service Bus en AMQP 1.0 voor meer informatie.

Als er met JMS permanente archieven zijn geconfigureerd, moet u de configuratie hiervan vastleggen en na de migratie toepassen.

Nagaan of andere JCA-connectors worden gebruikt

Als uw toepassing gebruikmaakt van JCA-connectors, controleert u of u de JCA-connector op JBoss EAP kunt gebruiken. Als u de JCA-connector op JBoss EAP kunt gebruiken, moet u de JAR's toevoegen aan het serverklassepad en de benodigde configuratiebestanden op de juiste locatie in de JBoss EAP-servermappen plaatsen.

Bepalen of JAAS wordt gebruikt

Als uw toepassing gebruikmaakt van JAAS, moet u vastleggen hoe JAAS is geconfigureerd. Als deze een database gebruikt, kunt u deze converteren naar een JAAS-domein op JBoss EAP. Als het een aangepaste implementatie is, moet u controleren of deze kan worden gebruikt in JBoss EAP.

Bepalen of uw toepassing gebruikmaakt van een resourceadapter

Als uw toepassing een resourceadapter (RA) nodig heeft, moet deze compatibel zijn met JBoss EAP. Bepaal of de RA prima werkt op een zelfstandig exemplaar van JBoss EAP door deze te implementeren op de server en deze correct te configureren. Als de RA goed werkt, moet u de JAR's toevoegen aan het serverklassepad van de App Service en de benodigde configuratiebestanden op de juiste locatie in de JBoss EAP-servermappen plaatsen zodat deze beschikbaar zijn.

Bepalen of uw toepassing bestaat uit meerdere WAR's

Als uw toepassing bestaat uit meerdere WAR's, moet u deze allemaal behandelen als afzonderlijke toepassingen en deze handleiding voor al deze WAR's doorlopen.

Bepalen of uw toepassing is verpakt als een EAR

Als uw toepassing is verpakt als een EAR-bestand, moet u het bestand application.xml controleren en de configuratie vastleggen.

Notitie

Als u elk van uw webtoepassingen onafhankelijk wilt kunnen schalen voor een beter gebruik van uw App Service-resources, moet u de EAR opsplitsen in afzonderlijke webtoepassingen.

Alle externe processen en daemons identificeren die worden uitgevoerd op de productieservers

U moet alle processen die buiten de toepassingsserver worden uitgevoerd, zoals controledaemons, verwijderen of naar een andere locatie migreren.

In-place tests uitvoeren

Voordat u uw containerinstallatiekopieën maakt, migreert u uw toepassing naar de JDK- en JBoss EAP-versies die u in App Service wilt gebruiken. Test de toepassing grondig op compatibiliteit en prestaties.

JBoss EAP in App Service-functienotities

Wanneer u JBoss EAP in App Service gebruikt, moet u rekening houden met de volgende notities.

  • JBoss EAP-beheerconsole: de JBoss-webconsole wordt niet weergegeven in App Service. In plaats daarvan biedt Azure Portal de beheer-API's voor uw toepassing en moet u implementeren met behulp van de Azure CLI, de Azure Maven-invoegtoepassing of andere Hulpprogramma's voor Azure-ontwikkelaars.

  • Transacties: De toepassingsexemplaren worden op een staatloze manier uitgevoerd, dus de Transacties-API wordt momenteel niet ondersteund. Zie Transacties beheren op JBoss EAP in de Red Hat-documentatie voor meer informatie.

  • Beheerde domeinmodus: In een productieomgeving met meerdere servers biedt de modus Beheerd domein in JBoss EAP gecentraliseerde beheerde mogelijkheden. Met JBoss EAP in App Service neemt het App Service-platform echter de verantwoordelijkheid voor de configuratie en het beheer van uw serverexemplaren. App Service elimineert de noodzaak voor de beheerde domeinmodus van JBoss EAP. Domeinmodus is een goede keuze voor implementaties met meerdere servers op basis van virtuele machines. Zie Over beheerde domeinen in de Red Hat-documentatie voor meer informatie.

  • Server-naar-server-clustering: Vanaf 15 maart 2022 wordt geclusterde implementatie van JBoss EAP ondersteund in openbare preview. Deze ondersteuning betekent dat u de volgende functies niet meer uit uw toepassingen hoeft te verwijderen voordat u ze in App Service kunt implementeren:

    • Stateful sessiebonen.
    • Gedistribueerde transacties.
    • Vergelijkbare functies waarvoor communicatie tussen instanties of hoge beschikbaarheid is vereist.

    Zie de releaseaankondiging en de sectie Clustering in JBoss EAP van Een Java-app configureren voor Azure-app Service voor meer informatie.

Migratie

Red Hat Migration Toolkit for Apps

De Red Hat Migration Toolkit for Applications is een gratis extensie voor Visual Studio Code. Deze extensie analyseert uw toepassingscode en configuratie om aanbevelingen te bieden voor migratie naar de cloud vanaf on-premises. Zie het overzicht van Migration Toolkit for Applications voor meer informatie.

De inhoud van deze handleiding helpt u bij het oplossen van de andere onderdelen van het migratietraject, zoals het kiezen van het juiste type App Service-plan, het externaliseren van uw sessiestatus en het gebruik van Azure om uw EAP-exemplaren te beheren in plaats van de JBoss Management-interface.

Azure-app Service inrichten voor JBoss EAP-runtime

Gebruik de volgende opdrachten om een resourcegroep en een Azure-app serviceplan te maken. Nadat het App Service-plan is gemaakt, wordt er een Linux-web-app-plan gemaakt met behulp van de JBoss EAP-runtime. U kunt JBoss EAP-sites alleen maken op PremiumV3- en IsolatedV2 App Service Plan-lagen.

Zorg ervoor dat de opgegeven omgevingsvariabelen de juiste waarden hebben.

Notitie

PremiumV3 en IsolatedV2 komen beide in aanmerking voor prijzen voor gereserveerde instanties, waardoor uw kosten kunnen worden verlaagd. Zie App Service-prijzen voor meer informatie over app Service-planlagen en prijzen voor gereserveerde instanties.

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

De toepassing bouwen

Bouw de toepassing met behulp van de volgende Maven-opdracht.

mvn clean install -DskipTests

De toepassing implementeren

Als uw toepassing is ontwikkeld op basis van een Maven POM-bestand, gebruikt u de web-app-invoegtoepassing voor Maven om de web-app te maken en uw toepassing te implementeren. Zie quickstart: Een Java-app maken in Azure-app Service voor meer informatie.

Als u de implementatie van JBoss EAP-toepassingen wilt automatiseren, kunt u de Azure Pipelines-taak voor web-app of GitHub Action gebruiken voor implementatie in Azure WebApp.

Gegevensbronnen instellen

Er zijn drie belangrijke stappen bij het registreren van een gegevensbron bij JBoss EAP: het JDBC-stuurprogramma uploaden, het JDBC-stuurprogramma toevoegen als een module en de module registreren. Zie Datasource Management in de JBoss EAP-documentatie voor meer informatie. App Service is een staatloze hostingservice, dus de configuratieopdrachten voor het toevoegen en registreren van de gegevensbronmodule moeten worden gescript en toegepast wanneer de container wordt gestart.

Gebruik de volgende stappen om gegevensbronnen in te stellen.

  1. Haal het JDBC-stuurprogramma van uw database op.

  2. Maak een XML-moduledefinitiebestand voor het JDBC-stuurprogramma. Het onderstaande voorbeeld is een moduledefinitie voor PostgreSQL. Vervang de resource-root path waarde door het pad naar het JDBC-stuurprogramma dat u gebruikt.

    <?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. Plaats uw JBoss CLI-opdrachten in een bestand met de naam jboss-cli-commands.cli. De JBoss-opdrachten moeten de module toevoegen en registreren als gegevensbron. In het onderstaande voorbeeld ziet u de JBoss CLI-opdrachten voor 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. Maak een opstartscript met de naam startup_script.sh waarmee de JBoss CLI-opdrachten worden aangeroepen. In het onderstaande voorbeeld ziet u hoe u het bestand jboss-cli-commands.cli aanroept. Later configureert u App Service om dit script uit te voeren wanneer het exemplaar wordt gestart.

    $JBOSS_HOME/bin/jboss-cli.sh --connect --file=/home/site/deployments/tools/jboss-cli-commands.cli
    
  5. Upload met behulp van een FTP-client naar keuze uw JDBC-stuurprogramma, jboss-cli-commands.cli, startup_script.sh en de moduledefinitie naar /site/deployments/tools/.

  6. Configureer uw site om startup_script.sh uit te voeren wanneer de container wordt gestart. Navigeer in De Azure-portal naar configuratie-algemeen > Instellingen > opstartopdracht. Stel het opstartopdrachtveld in op /home/site/deployments/tools/startup_script.sh en selecteer Opslaan.

  7. Start de web-app opnieuw op, waardoor het configuratiescript wordt uitgevoerd.

  8. Werk de JTA-gegevensbronconfiguratie voor uw toepassing bij. Open het bestand src/main/resources/META-INF/persistence.xml voor uw app en zoek het <jta-data-source> element. Vervang de inhoud zoals hier wordt weergegeven:

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

De toepassing bouwen

Bouw de toepassing met behulp van de volgende Maven-opdracht.

mvn clean install -DskipTests

De toepassing implementeren

Als uw toepassing is ontwikkeld op basis van een Maven POM-bestand, gebruikt u de web-app-invoegtoepassing voor Maven om de web-app te maken en uw toepassing te implementeren. Zie quickstart: Een Java-app maken in Azure-app Service voor meer informatie.

Als u de implementatie van JBoss EAP-toepassingen wilt automatiseren, kunt u de Azure Pipelines-taak voor web-app of GitHub Action gebruiken voor implementatie in Azure WebApp.

Postmigratie

Nu u uw toepassing hebt gemigreerd naar Azure-app Service, moet u controleren of deze werkt zoals verwacht. Wanneer u dat gedaan hebt, hebben we enkele aanbevelingen voor u aan de hand waarvan u de toepassing geschikter kunt maken voor de cloud.

Aanbevelingen