Eseguire l'upgrade di un'applicazione esistente

Per continuare a ricevere aggiornamenti della sicurezza e poter usufruire dell'assistenza tecnica, devi eseguire l'upgrade delle tue applicazioni alla versione di runtime supportata più recente.

La procedura di upgrade di un'app esistente dipende dalla versione di runtime attualmente utilizzata dall'app:

  • Java 8: devi eseguire la migrazione dell'app alla versione Java supportata più recente. Il 31 gennaio 2024 è terminato il supporto di Java 8. Le tue applicazioni Java 8 esistenti continueranno a essere eseguite e a ricevere traffico. Tuttavia, non puoi eseguire il deployment di nuove applicazioni o aggiornare quelle esistenti che utilizzano i runtime dopo la data di fine del supporto.

  • Runtime Java di seconda generazione (dopo il termine dell'assistenza): per eseguire l'upgrade a una versione di Java supportata, segui questi passaggi:

    • Aggiorna il file app.yaml specificando la versione di Java in cui vuoi eseguire la tua app. Ad esempio:

        runtime: javaVERSION
      

      Dove VERSION è il numero di versione MAJOR. Ad esempio, per utilizzare la versione Java più recente, Java 21, specifica 21. Per ulteriori informazioni, consulta la panoramica del runtime Java.

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

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

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

        Per tutte le opzioni, consulta Eseguire l'upgrade a Java 21 per i servizi in bundle legacy.

  • Java 17:

    App Engine supporta questa versione. Per continuare a eseguire l'upgrade alla versione supportata più recente:

    • Aggiorna il file app.yaml specificando la versione di Java in cui vuoi eseguire la tua app. Ad esempio:

        runtime: javaVERSION
      

      Dove VERSION è il numero di versione MAJOR. Ad esempio, per utilizzare la versione Java più recente, Java 21, specifica 21. Per ulteriori informazioni, consulta la panoramica del runtime Java.

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

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

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

      Per tutte le opzioni, consulta Eseguire l'upgrade a Java 21 per i servizi in bundle legacy.

Upgrade a Java 21 per i servizi legacy in bundle

Compatibilità con il runtime Java

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

Enterprise Edition (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. Per ulteriori informazioni, consulta Eseguire l'upgrade a Java 21 su EE8.
EE10 12 21 6.0 (opzione 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, vedi Eseguire l'upgrade di Java 21 su EE10.

Eseguire 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 per includere lo spazio dei nomi Jakarta:

  1. Modifica 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 rimanenti dipendenze di terze parti dell'applicazione agli elementi Java più recenti, a seconda dello spazio dei nomi Jakarta.

  4. (Facoltativo) Java 21 include il supporto per i thread virtuali. Per attivare i thread virtuali, aggiungi la proprietà appengine.use.virtualthreads al tag system-properties nel file appengine-web.xml.

Eseguire l'upgrade a Java 21 su EE8

Puoi continuare a utilizzare le API javax.servlet.* su Java EE8 senza apportare modifiche sostanziali alla configurazione dell'applicazione, perché Jetty 12 offre compatibilità con le versioni precedenti per Java EE6 e versioni successive. Per eseguire le applicazioni su Java EE8, devi dichiarare un nuovo system-properties tag nel appengine-web.xml file 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 attivare i thread virtuali, aggiungi la proprietà appengine.use.virtualthreads all'interno del tag system-properties. Esempio: <property name="appengine.use.virtualthreads" value="true"/>