App Engine Java 8 ランタイムのよくある質問

App Engine Java 8 スタンダード ランタイムについてよく寄せられる質問を以下に示します。

Java 8 ランタイムで Kotlin を使用できますか?

はい。GitHub レポジトリにある Kotlin サンプルを確認してください。

App Engine で IntelliJ IDEA Community Edition を使用できますか?

はい。組み込みの Maven 統合を使用します。

また、IntelliJ Ultimate Edition も使用できます。Ultimate Edition には、より多くのウェブ アプリケーション開発機能が用意されており、App Engine 開発プロセスとの緊密な統合を実現します。

App Engine Cloud Endpoints v1.0 は Java 8 ランタイムで動作しますか?

いいえ。Cloud Endpoints Frameworks バージョン 2.0 に移行する必要があります。

再パッケージ化されたクラスで java.lang.NoClassDefFoundError が表示されるのはなぜですか?

com/google/appengine/repackaged/com/google/common/collect/ImmutableList などの再パッケージ化された内部クラスは、以前のバージョンの App Engine API JAR で定義されていたとしても、Java 8 ランタイムではもう使用できません。

Java 8 アプリで再パッケージ化されたクラスを使用する必要がある場合は、appengine-web.xmlappengine.api.legacy.repackaging を true に設定します。例:

<system-properties>
  <property name="appengine.api.legacy.repackaging" value="true">
</system-properties>

これらのクラスは、再パッケージ化されていないパブリック クラスに置き換えることをおすすめします。

Java 8 と Java 11 の間でトラフィック分割を実行できますか?

はい。サービス バージョンまたはモジュール バージョンのそれぞれで、異なるランタイム バージョンを使用でき、トラフィック分割がサポートされます。

インスタンスがリクエストを受け取っていないとき、Java 8 スレッドはどのように処理されますか?

App Engine API で作成されたスレッドは、引き続き以前と同様に動作します。

自動スケーリング 手動スケーリング 基本スケーリング
インスタンスはリクエストがないために終了します。 インスタンスは最後のリクエストの後(デフォルト: 5 分)に終了します。 動作し続けます。

App Engine Java 8 ランタイムでは、どのようなメタデータ サーバー機能がサポートされますか?

App Engine Java 8 ランタイムでは、次のメタデータ サーバー URL がサポートされます。

/computeMetadata/v1/project/numeric-project-id (pending)
/computeMetadata/v1/project/project-id
/computeMetadata/v1/instance/zone
/computeMetadata/v1/instance/service-accounts/default/aliases
/computeMetadata/v1/instance/service-accounts/default/email
/computeMetadata/v1/instance/service-accounts/default/scopes
/computeMetadata/v1/instance/service-accounts/default/token
/computeMetadata/v1/instance/service-accounts/{account}/aliases
/computeMetadata/v1/instance/service-accounts/{account}/email
/computeMetadata/v1/instance/service-accounts/{account}/scopes
/computeMetadata/v1/instance/service-accounts/{account}/token

メタデータ サーバー v1beta1

v1beta1 メタデータ サーバーはサポート終了となり、停止が予定されています。v1 以降を使用するようにすべてのリクエストを更新してください。詳細については、v1 メタデータ サーバー エンドポイントへの移行をご覧ください。

/computeMetadata/v1beta1/project/numeric-project-id  (pending)
/computeMetadata/v1beta1/project/project-id
/computeMetadata/v1beta1/instance/zone
/computeMetadata/v1beta1/instance/service-accounts/default/aliases
/computeMetadata/v1beta1/instance/service-accounts/default/email
/computeMetadata/v1beta1/instance/service-accounts/default/scopes
/computeMetadata/v1beta1/instance/service-accounts/default/token
/computeMetadata/v1beta1/instance/service-accounts/{account}/aliases
/computeMetadata/v1beta1/instance/service-accounts/{account}/email
/computeMetadata/v1beta1/instance/service-accounts/{account}/scopes
/computeMetadata/v1beta1/instance/service-accounts/{account}/token

リクエストに応答がないのはなぜですか?

リクエストでスレッドプールを作成する場合は、現在のリクエストが終了する前に、そのスレッドを明示的にシャットダウンする必要があります。