既存のアプリケーションをアップグレードする

セキュリティ アップデートを引き続き受け取り、テクニカル サポートの利用資格を得るには、アプリケーションをサポートされている最新のランタイム バージョンにアップグレードする必要があります。また、Google Cloud サーバーレスの最新版である Cloud Run への移行も検討する必要があります。Cloud Run は、App Engine のエクスペリエンスを改善するために設計されており、スタンダード環境とフレキシブル環境の両方の多くの最良の機能が組み込まれています。機能の違いと移行方法の詳細については、App Engine と Cloud Run の比較ガイドをご覧ください。

既存のアプリをアップグレードするプロセスは、アプリが現在使用しているランタイム バージョンによって異なります。

  • Java 8: サポートされている最新の Java バージョンにアプリを移行する必要があります。Java 8 は、2024 年 1 月 31 日にサポートを終了しました。既存の Java 8 アプリケーションは引き続き実行され、トラフィックを受信します。ただし、サポート終了日の後は、ランタイムを使用する新しいアプリケーションのデプロイや既存のアプリケーションの更新を行うことはできません。

  • Java 11 または Java 17:

    これらのランタイムは、サポートされている Java バージョンです。引き続き最新のサポート バージョンにアップグレードするには、次の操作を行います。

    • app.yaml ファイルを更新するには、アプリで実行する Java のバージョンを指定します。例:

        runtime: javaVERSION
      

      ここで、VERSIONMAJOR のバージョン番号です。

      例: Java 21 の場合は、runtime: java21 のように 21 を指定します。詳細については、Java ランタイムの概要をご覧ください。

    • 以前のバンドル サービスを使用する場合は、次のいずれかで実行するようにアプリをアップグレードする必要があります。

      • Java Enterprise Edition 10(EE10 - デフォルト、推奨): Java EE10 は javax.servlet.* API をサポートしていないため、Jakarta 名前空間のような新しい Java アーティファクトを使用するようにアプリとサードパーティの依存関係を更新する必要があります。

      • Java Enterprise Edition 8(EE8): Java EE8 では javax.servlet.* API を使用できますが、appengine-web.xml ファイルに若干の構成変更を行う必要があります。

      すべてのオプションについては、以前のバンドル サービス用に Java 21 にアップグレードするをご覧ください。

以前のバンドル サービス用に Java 21 にアップグレードする

Java ランタイムの互換性

Jetty とサーブレットのバージョンと互換性のある Java のバージョンについては、次の表をご覧ください。

Enterprise Edition(EE) Jetty のバージョン Java のバージョン サーブレット 互換性
EE7 9.4 11 2.5 または 3.1
EE7 9.4 17 2.5 または 3.1
EE8 12 21 2.5 以降 Java EE8 は、Java EE6 以降と下位互換性があります。詳細については、EE8 で Java 21 にアップグレードするをご覧ください。
EE10 12 21 6.0(推奨)。Java 21 は、デフォルトで EE10 を実行するように構成されています。 Java EE10 を使用するには、アプリケーション サーブレットと依存関係を更新して、Jakarta 名前空間を含める必要があります。詳細については、EE10 で Java 21 にアップグレードするをご覧ください。

EE10 で Java 21 にアップグレードする

Enterprise Edition 10(EE10)で Java 21 を使用するには、Maven ファイルと Gradle ファイルでアプリケーション サーブレットと依存関係をアップグレードして、Jakarta 名前空間を含める必要があります。

  1. web.xml 構成ファイルのバージョン番号を version=6.0 に変更します。例:

        <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. アプリケーションのサーブレットと依存関係の名前を 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. Jakarta 名前空間に応じて、残りのアプリケーションのサードパーティ依存関係を新しい Java アーティファクトに更新します。

  4. 省略可: Java 21 には仮想スレッドのサポートが含まれています。仮想スレッドを有効にするには、appengine-web.xml ファイルの system-properties タグ内に appengine.use.virtualthreads プロパティを追加します。

EE8 で Java 21 にアップグレードする

Jetty 12 には Java EE6 以降との下位互換性があるため、アプリケーション構成に大きな変更を加えることなく、Java EE8 で javax.servlet.* API を引き続き使用できます。Java EE8 でアプリケーションを実行するには、appengine-web.xml ファイルで新しい system-properties タグを、デフォルト以外の app.engine.use.EE8 構成で宣言する必要があります。

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

省略可: Java 21 には仮想スレッドのサポートが含まれています。仮想スレッドを有効にするには、system-properties タグ内に appengine.use.virtualthreads プロパティを追加します。例: <property name="appengine.use.virtualthreads" value="true"/>