Actualiza una aplicación existente

Debes actualizar las aplicaciones a la versión del entorno de ejecución compatible más reciente para seguir recibiendo actualizaciones de seguridad y ser apto para la asistencia técnica.

El proceso de actualización de una app existente depende de la versión del entorno de ejecución que use la app en este momento:

  • Java 8: debes migrar tu app a la versión de Java compatible más reciente. Java 8 llegó al fin de la asistencia el 31 de enero de 2024. Las aplicaciones existentes de Java 8 continuarán ejecutándose y recibiendo tráfico. Sin embargo, no puedes implementar aplicaciones nuevas o actualizar las existentes que usen entornos de ejecución después de la fecha de finalización de la asistencia.

  • Entornos de ejecución de Java de segunda generación (después del fin de la asistencia): Para actualizar a una versión compatible de Java, haz lo siguiente:

    • Para actualizar el archivo app.yaml, especifica una versión de Java que deseas que ejecute tu app. Por ejemplo:

        runtime: javaVERSION
      

      En el ejemplo anterior, VERSION es el número de versión MAJOR. Por ejemplo, para usar la versión más reciente de Java, Java 21, especifica 21. Para obtener más información, consulta la descripción general del entorno de ejecución de Java.

    • Si usas servicios agrupados en paquetes heredados, debes actualizar tus aplicaciones para que se ejecuten en:

      • Java Enterprise Edition 10 (EE10: predeterminado, recomendado): Java EE10 no es compatible con las APIs de javax.servlet.* y requiere la actualización de tus apps y dependencias de terceros para usar artefactos de Java más recientes, como el espacio de nombres Jakarta.

      • Java Enterprise Edition 8 (EE8): Java EE8 te permite usar las APIs de javax.servlet.*, pero debes realizar pequeños cambios de configuración en tu archivo appengine-web.xml.

        Consulta Actualiza a Java 21 para servicios agrupados en paquetes heredados para ver todas las opciones.

  • Java 17:

    App Engine admite esta versión. Para seguir actualizando a la versión de asistencia más reciente, haz lo siguiente:

    • Para actualizar el archivo app.yaml, especifica una versión de Java que deseas que ejecute tu app. Por ejemplo:

        runtime: javaVERSION
      

      En el ejemplo anterior, VERSION es el número de versión MAJOR. Por ejemplo, para usar la versión más reciente de Java, Java 21, especifica 21. Para obtener más información, consulta la descripción general del entorno de ejecución de Java.

    • Si usas servicios agrupados en paquetes heredados, debes actualizar tus aplicaciones para que se ejecuten en:

      • Java Enterprise Edition 10 (EE10: predeterminado, recomendado): Java EE10 no es compatible con las APIs de javax.servlet.* y requiere la actualización de tus apps y dependencias de terceros para usar artefactos de Java más recientes, como el espacio de nombres Jakarta.

      • Java Enterprise Edition 8 (EE8): Java EE8 te permite usar las APIs de javax.servlet.*, pero debes realizar pequeños cambios de configuración en tu archivo appengine-web.xml.

      Consulta Actualiza a Java 21 para servicios agrupados en paquetes heredados para ver todas las opciones.

Actualiza a Java 21 para servicios agrupados en paquetes heredados

Compatibilidad con el entorno de ejecución de Java

Consulta la siguiente tabla para comprender qué versiones de Java son compatibles con tus versiones de Jetty y el servlet:

Enterprise Edition (EE) Versión de Jetty Versión de Java Servlet Compatibilidad
EE7 9.4 11 2.5 o 3.1
EE7 9.4 17 2.5 o 3.1
EE8 12 21 2.5 y posteriores Java EE8 es retrocompatible con Java EE6 y versiones posteriores. Para obtener más información, consulta Actualiza a Java 21 en EE8.
EE10 12 21 6.0 (opción recomendada). Java 21 está configurado para ejecutar EE10 de forma predeterminada. Para usar Java EE10, debes actualizar los servlets y las dependencias de la aplicación para incluir el espacio de nombres Jakarta. Para obtener más información, consulta Actualiza Java 21 en EE10.

Actualiza a Java 21 en EE10

Para usar Java 21 en Enterprise Edition 10 (EE10), debes actualizar los servlets y las dependencias de tu aplicación en tus archivos de Maven y Gradle para incluir el espacio de nombres Jakarta:

  1. Cambia el número de versión del archivo de configuración web.xml a version=6.0. Por ejemplo:

        <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. Cambia el nombre de los servlets y las dependencias de tu aplicación de 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. Actualiza las dependencias de terceros restantes de tu aplicación a artefactos de Java más recientes según el espacio de nombres Jakarta.

  4. Opcional: Java 21 incluye compatibilidad con subprocesos virtuales. Para habilitar los subprocesos virtuales, agrega la propiedad appengine.use.virtualthreads dentro de la etiqueta system-properties en el archivo appengine-web.xml.

Actualiza a Java 21 en EE8

Puedes seguir usando las APIs de javax.servlet.* en Java EE8 sin cambios importantes en la configuración de la aplicación, ya que Jetty 12 ofrece retrocompatibilidad con Java EE6 y versiones posteriores. Para ejecutar tus aplicaciones en Java EE8, debes declarar una etiqueta system-properties nueva en tu archivo appengine-web.xml con la configuración app.engine.use.EE8 no predeterminada:

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

Opcional: Java 21 incluye compatibilidad con subprocesos virtuales. Para habilitar los subprocesos virtuales, agrega la propiedad appengine.use.virtualthreads dentro de la etiqueta system-properties. Ejemplo: <property name="appengine.use.virtualthreads" value="true"/>