Atualize uma aplicação existente

Tem de atualizar as suas aplicações para a versão de tempo de execução suportada mais recente para continuar a receber atualizações de segurança e ser elegível para apoio técnico.

O processo de atualização de uma app existente depende da versão de tempo de execução que a sua app usa atualmente:

  • Java 8: tem de migrar a sua app para a versão Java suportada mais recente. O Java 8 atingiu o fim do suporte a 31 de janeiro de 2024. As suas aplicações Java 8 existentes vão continuar a ser executadas e a receber tráfego. No entanto, não pode implementar novas aplicações nem atualizar as existentes que usem runtimes após a respetiva data de fim do apoio técnico.

  • Tempos de execução Java de segunda geração (após o fim do apoio técnico): para atualizar para uma versão suportada do Java, faça o seguinte:

    • Atualize o ficheiro app.yaml especificando uma versão do Java na qual quer que a sua app seja executada. Por exemplo:

        runtime: javaVERSION
      

      Onde VERSION é o número da versão MAJOR. Por exemplo, para usar a versão mais recente do Java, o Java 21, especifique 21. Para mais informações, consulte a vista geral do tempo de execução Java.

    • Se usar serviços agrupados antigos, tem de atualizar as suas apps para serem executadas num dos seguintes sistemas:

      • Java Enterprise Edition 10 (EE10 – predefinição, recomendado): o Java EE10 não suporta APIs javax.servlet.* e requer que atualize as suas apps e dependências de terceiros para usar artefactos Java mais recentes, como o espaço de nomes Jakarta.

      • Java Enterprise Edition 8 (EE8): o Java EE8 permite-lhe usar javax.servlet.* APIs, mas tem de fazer pequenas alterações de configuração ao seu ficheiro appengine-web.xml.

        Consulte o artigo Atualize para o Java 21 para serviços agrupados antigos para ver todas as opções.

  • Java 17:

    O App Engine suporta esta versão. Para continuar a atualizar para a versão compatível mais recente, faça o seguinte:

    • Atualize o ficheiro app.yaml especificando uma versão do Java na qual quer que a sua app seja executada. Por exemplo:

        runtime: javaVERSION
      

      Onde VERSION é o número da versão MAJOR. Por exemplo, para usar a versão mais recente do Java, o Java 21, especifique 21. Para mais informações, consulte a vista geral do tempo de execução Java.

    • Se usar serviços agrupados antigos, tem de atualizar as suas apps para serem executadas num dos seguintes sistemas:

      • Java Enterprise Edition 10 (EE10 – predefinição, recomendado): o Java EE10 não suporta APIs javax.servlet.* e requer que atualize as suas apps e dependências de terceiros para usar artefactos Java mais recentes, como o espaço de nomes Jakarta.

      • Java Enterprise Edition 8 (EE8): o Java EE8 permite-lhe usar APIs javax.servlet.*, mas tem de fazer pequenas alterações de configuração ao seu ficheiro appengine-web.xml.

      Consulte o artigo Atualize para o Java 21 para serviços agrupados antigos para ver todas as opções.

Atualize para o Java 21 para serviços incluídos antigos

Compatibilidade de tempo de execução do Java

Consulte a tabela seguinte para saber que versões do Java são compatíveis com as suas versões de servlet:

Enterprise Edition (EE) Versão do Java Servlet Compatibilidade
EE7 11 2.5 ou 3.1 Não existe apoio técnico da comunidade para o EE7. O Java 11 atingiu o fim do apoio técnico. Recomendamos que atualize a sua app para usar a versão mais recente do Java.
EE7 17 2.5 ou posterior Não existe apoio técnico da comunidade para o EE7. Recomendamos que atualize a sua app para usar o EE8.
EE8 17/21 2.5 e posterior O Java EE8 é retrocompatível com o Java EE6 e posterior. Para mais informações, consulte o artigo Atualize para o Java 21 no EE8.
EE10 17/21 6.0 (recomendado). O Java 21 está configurado para executar o EE10 por predefinição. Para usar o Java EE10, tem de atualizar os servlets e as dependências da sua aplicação para incluir o espaço de nomes Jakarta. Para mais informações, consulte o artigo Atualize o Java 21 no EE10.

Atualize para o Java 21 no EE10

Para usar o Java 21 no Enterprise Edition 10 (EE10), tem de atualizar os servlets e as dependências da sua aplicação nos ficheiros Maven e Gradle para incluir o espaço de nomes Jakarta:

  1. Altere o número da versão no ficheiro de configuração web.xml para version=6.0. Por exemplo:

        <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. Mude o nome dos servlets e das dependências da sua aplicação de javax.servlet.* para 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. Atualize as dependências de terceiros restantes da aplicação para artefactos Java mais recentes consoante o espaço de nomes Jakarta.

  4. Adicione a seguinte propriedade do sistema no ficheiro appengine-web.xml:

     <?xml version="1.0" encoding="utf-8"?>
     <appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
        <runtime>java21</runtime> <!-- or java17 -->
        <system-properties>
          <property name="appengine.use.EE10" value="true"/>
        </system-properties>
        <app-engine-apis>true</app-engine-apis>
     </appengine-web-app>
    
  5. Opcional: o Java 21 inclui suporte para threads virtuais. Para ativar os threads virtuais, adicione a propriedade appengine.use.virtualthreads na etiqueta system-properties no ficheiro appengine-web.xml.

Atualize para o Java 17 ou 21 no EE8

Pode continuar a usar as APIs javax.servlet.* no Java EE8 sem alterações importantes à configuração da aplicação, porque o EE8 oferece retrocompatibilidade para o Java EE6 e posterior. Para executar as suas aplicações no Java EE8, tem de declarar uma nova etiqueta system-properties no ficheiro appengine-web.xml com a configuração app.engine.use.EE8 não predefinida:

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

Opcional: o Java 21 inclui suporte para threads virtuais. Para ativar as threads virtuais, adicione a propriedade appengine.use.virtualthreads na etiqueta system-properties. Exemplo: <property name="appengine.use.virtualthreads" value="true"/>