Mettre à niveau une application existante

Vous devez mettre à jour vos applications vers la dernière version d'exécution compatible pour continuer à recevoir les mises à jour de sécurité et bénéficier de l'assistance technique. Vous pouvez également envisager de migrer vers Cloud Run, la dernière évolution de Google Cloud Serverless. Cloud Run est conçu pour améliorer l'expérience App Engine, en intégrant bon nombre des meilleures fonctionnalités de l'environnement standard et flexible. Pour comparer les fonctionnalités et comprendre la migration, consultez le guide de comparaison entre App Engine et Cloud Run.

Le processus de mise à niveau d'une application existante dépend de la version d'exécution actuellement utilisée par votre application :

  • Java 8 : vous devez migrer votre application vers la dernière version compatible de Java. Java 8 n'est plus compatible depuis le 31 janvier 2024. Vos applications Java 8 existantes continueront à fonctionner et à recevoir du trafic. Toutefois, vous ne pourrez pas déployer de nouvelles applications ou mettre à jour celles que vous possédez déjà qui utilisent des environnements d'exécution après leur date de fin de prise en charge.

  • Java 11 ou Java 17 :

    Ces environnements d'exécution sont compatibles avec les versions Java. Pour passer à la dernière version compatible, procédez comme suit :

    • Mettez à jour le fichier app.yaml en spécifiant la version de Java que vous souhaitez que votre application exécute. Exemple :

        runtime: javaVERSION
      

      VERSION est le numéro de version de MAJOR.

      Par exemple, pour Java 21, vous devez en spécifier 21 comme runtime: java21. Pour en savoir plus, consultez la présentation de l'environnement d'exécution Java.

    • Si vous utilisez d'anciens services groupés, vous devez mettre à jour vos applications pour qu'elles s'exécutent sur l'une des versions suivantes :

      • Java Enterprise Edition 10 (EE10 – par défaut, recommandé) : Java EE10 n'est pas compatible avec les API javax.servlet.* et vous oblige à mettre à jour vos applications et vos dépendances tierces pour qu'elles utilisent les artefacts Java les plus récents comme l'espace de noms Jakarta.

      • Java Enterprise Edition 8 (EE8) : Java EE8 vous permet d'utiliser les API javax.servlet.*, mais vous devez apporter des modifications mineures à la configuration de votre fichier appengine-web.xml.

      Consultez la section Passer à Java 21 pour les anciens services groupés pour connaître toutes les options.

Passer à Java 21 pour les anciens services groupés

Compatibilité avec l'environnement d'exécution Java

Reportez-vous au tableau suivant pour savoir quelles versions de Java sont compatibles avec vos versions de Jetty et de servlet :

Enterprise Edition (EE) Version de Jetty Version Java compatible Servlet Compatibilité
EE7 9,4 11 2.5 ou 3.1
EE7 9,4 17 2.5 ou 3.1
EE8 12 21 2.5 et versions ultérieures Java EE8 est rétrocompatible avec Java EE6 et les versions ultérieures. Pour en savoir plus, consultez Passer à Java 21 sur EE8.
EE10 12 21 6.0 (recommandée). Java 21 est configuré pour exécuter EE10 par défaut. Pour utiliser Java EE10, vous devez mettre à jour les servlets et les dépendances de votre application afin d'inclure l'espace de noms Jakarta. Pour en savoir plus, consultez l'article Mettre à niveau Java 21 sur EE10.

Passer à Java 21 sur EE10

Pour utiliser Java 21 sur Enterprise Edition 10 (EE10), vous devez mettre à niveau les servlets et les dépendances de votre application dans vos fichiers Maven et Gradle pour inclure l'espace de noms Jakarta :

  1. Remplacez le numéro de version dans le fichier de configuration web.xml par version=6.0. Exemple :

        <web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_6_0.xsd"
          version="6.0">
          ...
        </web-app>
    
  2. Renommez les servlets et les dépendances de votre application de javax.servlet.* à jakarta.servlet.* :

         import jakarta.servlet.ServletException;
         import jakarta.servlet.annotation.WebServlet;
         import jakarta.servlet.http.Cookie;
         import jakarta.servlet.http.HttpServlet;
         import jakarta.servlet.http.HttpServletRequest;
         import jakarta.servlet.http.HttpServletResponse;
    
         @WebServlet(name = "viewer", urlPatterns = {"/view"})
         public class MyServlet extends HttpServlet {
        ......
    
  3. Mettez à jour les dépendances tierces restantes de votre application vers des artefacts Java plus récents en fonction de l'espace de noms Jakarta.

  4. Facultatif : Java 21 est compatible avec les threads virtuels. Pour activer les threads virtuels, ajoutez la propriété appengine.use.virtualthreads dans la balise system-properties de votre fichier appengine-web.xml.

Mettre à niveau vers Java 21 sur EE8

Vous pouvez continuer à utiliser les API javax.servlet.* sur Java EE8 sans modifier la configuration majeure de l'application, car Jetty 12 offre une rétrocompatibilité pour Java EE6 et versions ultérieures. Pour exécuter vos applications sur Java EE8, vous devez déclarer un nouveau tag system-properties dans votre fichier appengine-web.xml avec la configuration app.engine.use.EE8 non définie par défaut :

   <?xml version="1.0" encoding="utf-8"?>
   <appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
      <runtime>java21</runtime>
      <system-properties>
        <property name="appengine.use.EE8" value="true"/>
      </system-properties>
      <app-engine-apis>true</app-engine-apis>
   </appengine-web-app>

Facultatif : Java 21 est compatible avec les threads virtuels. Pour activer les threads virtuels, vous devez ajouter la propriété appengine.use.virtualthreads dans la balise system-properties. Exemple : <property name="appengine.use.virtualthreads" value="true"/>