Questions fréquentes sur l'environnement d'exécution Java 8 d'App Engine

Les questions suivantes concernent l'environnement d'exécution Java 8 standard d'App Engine.

Puis-je utiliser Kotlin dans l'environnement d'exécution Java 8 ?

Oui, consultez nos exemples Kotlin dans le dépôt GitHub.

Puis-je utiliser IntelliJ IDEA Community Edition avec App Engine ?

Oui, à l'aide de l'intégration de Maven.

Vous pouvez également utiliser IntelliJ Ultimate Edition, qui offre davantage de fonctionnalités de développement d'applications Web ainsi qu'une intégration plus étroite avec le processus de déploiement d'App Engine.

App Engine Cloud Endpoints v1.0 fonctionne-t-il dans l'environnement d'exécution Java 8 ?

Non. Vous devez migrer vers Cloud Endpoints Frameworks version 2.0.

Pourquoi l'erreur java.lang.NoClassDefFoundError se produit-elle pour les classes réempaquetées ?

Les classes internes réempaquetées, telles que com/google/appengine/repackaged/com/google/common/collect/ImmutableList, ne sont plus disponibles dans l'environnement d'exécution Java 8, même si elles sont définies dans les versions précédentes du fichier JAR de l'API App Engine.

Si vous devez utiliser les classes réempaquetées dans votre application Java 8, définissez appengine.api.legacy.repackaging sur "true" dans le fichier appengine-web.xml. Exemple :

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

Nous vous recommandons de remplacer ces classes par les classes publiques non réempaquetées.

Puis-je répartir le trafic entre Java 8 et Java 11 ?

Oui, chaque version de service ou de module peut utiliser une version d'exécution différente, et la répartition du trafic est prise en charge.

Comment les threads Java 8 sont-ils traités lorsqu'une instance ne reçoit pas de requêtes ?

Les threads créés avec les API d'App Engine continuent à fonctionner comme auparavant.

Scaling automatique Scaling manuel Scaling de base
L'instance s'arrête en raison d'un manque de requêtes. L'instance s'arrête après la dernière requête (par défaut : 5 minutes). L'instance s'exécute sans fin.

Quelles fonctionnalités du serveur de métadonnées sont compatibles avec l'environnement d'exécution Java 8 d'App Engine ?

L'environnement d'exécution Java 8 d'App Engine accepte les URL du serveur de métadonnées suivantes :

/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

Serveur de métadonnées v1beta1

Le serveur de métadonnées v1beta1 est obsolète et son abandon est planifié. Veillez à mettre à jour toutes les requêtes de sorte qu'elles utilisent la version 1 ou une version ultérieure. Pour en savoir plus, consultez la section Passer au point de terminaison du serveur de métadonnées 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

Pourquoi mes requêtes n'obtiennent-elles pas de réponse ?

Si vous créez un pool de threads sur une requête, vous devez vous assurer de le fermer explicitement avant la fin de la requête en cours.