Esegui l'upgrade di un'applicazione esistente

Per continuare a ricevere aggiornamenti della sicurezza e avere diritto all'assistenza tecnica, devi eseguire l'upgrade delle tue applicazioni all'ultima versione supportata del runtime . Ti consigliamo anche di eseguire la migrazione a Cloud Run, l'ultima evoluzione di Google Cloud Serverless. Cloud Run è progettato per migliorare l'esperienza di App Engine, incorporando molte delle migliori funzionalità sia dell'ambiente standard sia dell'ambiente flessibile. Per confrontare le funzionalità e capire come eseguire la migrazione, consulta la guida al confronto tra App Engine e Cloud Run

Il processo di upgrade di un'app esistente dipende dalla versione di runtime che l'app utilizza attualmente:

  • Java 8: devi eseguire la migrazione della tua app all'ultima versione di Java supportata. Java 8 ha raggiunto la fine del supporto il 31 gennaio 2024. Le applicazioni Java 8 esistenti continueranno a essere eseguite e a ricevere traffico. Tuttavia, non puoi eseguire il deployment di applicazioni nuove o aggiornare applicazioni esistenti che utilizzano runtime dopo la data di fine del supporto.

  • Java 11 o Java 17:

    Questi runtime sono versioni Java supportate. Per continuare a eseguire l'upgrade alla versione di supporto più recente:

    • Puoi aggiornare il file app.yaml specificando la versione di Java che vuoi che venga eseguita nell'app. Ad esempio:

        runtime: javaVERSION
      

      Dove VERSION è il numero di versione MAJOR.

      Esempio: per Java 21, specifichi 21 come runtime: java21. Per ulteriori informazioni, consulta la panoramica del runtime Java.

    • Se utilizzi servizi in bundle legacy, devi eseguire l'upgrade delle app in modo che vengano eseguite su:

      • Java Enterprise Edition 10 (EE10 - predefinito, consigliato): Java EE10 non supporta le API javax.servlet.* e richiede l'aggiornamento delle app e delle dipendenze di terze parti per utilizzare artefatti Java più recenti come lo spazio dei nomi Jakarta.

      • Java Enterprise Edition 8 (EE8): Java EE8 consente di utilizzare le API di javax.servlet.*, ma devi apportare modifiche di piccola entità alla configurazione al file appengine-web.xml.

      Consulta l'articolo Eseguire l'upgrade a Java 21 per i servizi in bundle legacy per tutte le opzioni.

Esegui l'upgrade a Java 21 per i servizi in bundle legacy

Compatibilità del runtime Java

Consulta la seguente tabella per capire quali versioni Java sono compatibili con le tue versioni di Jetty e di servlet:

Versione Enterprise (EE) Versione Jetty Versione Java Servlet Compatibilità
EE7 9,4 11 2,5 o 3,1
EE7 9,4 17 2,5 o 3,1
EE8 12 21 2,5 e versioni successive Java EE8 è compatibile con le versioni precedenti di Java EE6 e versioni successive. Per ulteriori informazioni, consulta la pagina relativa all'upgrade a Java 21 su EE8.
EE10 12 21 6.0 (consigliata). Java 21 è configurato per eseguire EE10 per impostazione predefinita. Per utilizzare Java EE10, devi aggiornare i servlet e le dipendenze dell'applicazione in modo da includere lo spazio dei nomi Jakarta. Per ulteriori informazioni, consulta la pagina relativa all'upgrade di Java 21 su EE10.

Esegui l'upgrade a Java 21 su EE10

Per utilizzare Java 21 su Enterprise Edition 10 (EE10), devi eseguire l'upgrade dei servlet e delle dipendenze dell'applicazione nei file Maven e Gradle in modo da includere lo spazio dei nomi Jakarta:

  1. Cambia il numero di versione nel file di configurazione web.xml in version=6.0. Ad esempio:

        <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. Rinomina i servlet e le dipendenze dell'applicazione da javax.servlet.* a 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. Aggiorna le dipendenze di terze parti dell'applicazione rimanenti agli artefatti Java più recenti, a seconda dello spazio dei nomi Jakarta.

  4. Facoltativo: Java 21 include il supporto per i thread virtuali. Per abilitare i thread virtuali, aggiungi la proprietà appengine.use.virtualthreads all'interno del tag system-properties nel file appengine-web.xml.

Esegui l'upgrade a Java 21 su EE8

Puoi continuare a utilizzare le API javax.servlet.* su Java EE8 senza importanti modifiche alla configurazione delle applicazioni, poiché Jetty 12 offre compatibilità con le versioni precedenti di Java EE6 e versioni successive. Per eseguire le tue applicazioni su Java EE8, devi dichiarare un nuovo tag system-properties nel tuo file appengine-web.xml con la configurazione app.engine.use.EE8 non predefinita:

   <?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>

Facoltativo: Java 21 include il supporto per i thread virtuali. Per abilitare i thread virtuali, aggiungi la proprietà appengine.use.virtualthreads all'interno del tag system-properties. Esempio: <property name="appengine.use.virtualthreads" value="true"/>