Auf gebündelte Dienste für Java 11+ zugreifen

Auf dieser Seite wird beschrieben, wie Sie die gebündelten Dienste mit der neuesten unterstützten Java-Version für die App Engine-Standardumgebung installieren und verwenden. Ihre Anwendung kann über die App Engine API-JAR auf die gebündelten Dienste zugreifen.

Hinweise

App Engine API-JAR installieren

Wenn Sie in Ihrer neuesten unterstützten Java-Anwendung gebündelte Legacy-Dienste nutzen möchten, müssen Sie zum Konfigurieren der Anwendung anstelle der Datei app.yaml die Datei appengine-web.xml verwenden.

Das folgende Beispiel zeigt, wie Sie Konfigurationseinstellungen in appengine-web.xml für Version 21 und höher auf EE10 (Standard), Version 21 auf EE8 und Version 17 und früher hinzufügen. Um die neueste unterstützte Version für die Standardkonfiguration zu verwenden, müssen Sie die Anwendungs-Servlets und -Abhängigkeiten so aktualisieren, dass sie den Namespace Jakarta enthalten. Weitere Informationen zu den Konfigurationsoptionen finden Sie unter Vorhandene Anwendung aktualisieren.

Fügen Sie der Datei appengine-web.xml je nach Java-Version die folgenden Einstellungen hinzu:

v21 und höher (EE10)

<?xml version="1.0" encoding="utf-8"?>
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
  <runtime>java21</runtime> <!-- or another supported version -->
  <app-engine-apis>true</app-engine-apis>
</appengine-web-app>

v21 (EE8)

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

v17 und älter

<?xml version="1.0" encoding="utf-8"?>
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
  <runtime>java17</runtime> <!-- or another supported version -->
  <app-engine-apis>true</app-engine-apis>
</appengine-web-app>

Wenn Sie die gebündelten Legacy-Dienste als Abhängigkeit angeben möchten, fügen Sie der Datei pom.xml die folgenden Zeilen hinzu:

 <dependency>
    <groupId>com.google.appengine</groupId>
    <artifactId>appengine-api-1.0-sdk</artifactId>
    <version>2.0.4</version> <!-- or later-->
  </dependency>

Wenn Ihre Anwendung eine web.xml-Datei verwendet, müssen Sie darin das Element <app-engine-apis> hinzufügen und dafür true festlegen:

  <app-engine-apis>true</app-engine-apis>

Führen Sie zum Bereitstellen der Java 21-Anwendung den Befehl mvn appengine:deploy oder den Befehl gcloud app deploy ~/my_app/WEB-INF/appengine-web.xml in einer kompilierten und bereitgestellten Webanwendung aus.

Von Java 21 verwendeter Standardeinstiegspunkt

Java 21-Anwendungen können beim Starten der JVM für Webanwendungen von einer zusätzlichen Nutzerkonfiguration profitieren.

Der Standardeinstiegspunkt, der zum Booten der JVM verwendet wird, wird von App Engine-Buildpacks generiert. Im Wesentlichen entspricht dies dem Definieren dieses Einstiegspunkts in der Datei appengine-web.xml. Beispiel:

java --add-opens java.base/java.lang=ALL-UNNAMED  --add-opens java.base/java.nio.charset=ALL-UNNAMED -showversion -Xms32M -Xmx204M -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:+PrintCommandLineFlags -Dclasspath.runtimebase=/base/java_runtime -Djava.class.path=/base/java_runtime/runtime-main.jar -Djava.library.path=/base/java_runtime: com/google/apphosting/runtime/JavaRuntimeMainWithDefaults --fixed_application_path=/workspace /base/java_runtime

Es wird nicht empfohlen, diesen Standardeinstiegspunkt zu ändern, da die Speichereinstellungen basierend auf dem Instanztyp (F1, F2, F4) und dem verfügbaren Speicher berechnet werden.

Standardmäßig verwenden wir --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.nio.charset=ALL-UNNAMED, um einige erforderliche JDK APIs zu öffnen.

Einstiegspunkt-Features

Der Einstiegspunkt für die Java-Versionen der zweiten Generation kann mit benutzerdefinierten Umgebungsvariablen angepasst werden, die der Konfigurationsdatei appengine-web.xml hinzugefügt wurden.

In der folgenden Tabelle werden die Umgebungsvariablen, die zum Aktivieren/Deaktivieren/Konfigurieren von Features verwendet werden können, sowie die Standardwerte angegeben, sofern sie nicht festgelegt sind:

Umgebungsvariable Beschreibung Typ Standard
CPROF_ENABLE Stackdriver Profiler boolean false
GAE_MEMORY_MB Verfügbarer Speicher Größe Von App Engine oder /proc/meminfo-400M festgelegt
HEAP_SIZE_RATIO Speicher für den Heap Prozent 80
HEAP_SIZE_MB Verfügbarer Heap Größe ${HEAP_SIZE_RATIO} % von ${GAE_MEMORY_MB}
JAVA_HEAP_OPTS JVM-Heap-Arg. JVM-Arg. -Xms${HEAP_SIZE_MB}M -Xmx${HEAP_SIZE_MB}M
JAVA_GC_OPTS JVM-GC-Argumente JVM-Arg. -XX:+UseG1GC plus Konfiguration
JAVA_USER_OPTS Sonstige JVM-Arg. JVM-Arg.
JAVA_OPTS JVM-Arg. JVM-Arg. Siehe unten

Wenn nicht explizit festgelegt, wird für JAVA_OPTS automatisch die Standardeinstellung verwendet:

   JAVA_OPTS:=-showversion \
              $JAVA_HEAP_OPTS \
              $JAVA_GC_OPTS \
              $JAVA_USER_OPTS

Wenn CPROF_ENABLE "true" ist, fügt der Standardeinstiegspunkt den PROFILER_AGENT so hinzu:

-agentpath:/opt/cprof/profiler_java_agent.so=--logtostderr

Wenn Ihr Anwendungscode beispielsweise mehrere -add-opens-Flags benötigt, können Sie die in der Datei appengine-web.xml definierte Umgebungsvariable JAVA_USER_OPTS verwenden:

    <env-variables>
       <env-var name="JAVA_USER_OPTS" value="--add-opens java.base/java.util=ALL-UNNAMED" />
     </env-variables>

Hinweise zur Migration

Beachten Sie die folgenden Überlegungen, wenn Sie zu einer Java-Laufzeit der zweiten Generation migrieren und Ihre Anwendung gebündelte Legacy-Dienste verwendet:

  • Wenn Sie die Funktionen der gebündelten Legacy-Dienste in Ihrer Java-Anwendung der zweiten Generation testen möchten, können Sie den lokalen Entwicklungsserver verwenden.
  • Im Gegensatz zur Java 8-Laufzeit enthalten die Java-Laufzeiten der zweiten Generation JVM als Teil des Instanzspeichers. Wenn in den Logs speicherbezogene Fehler auftreten, können Sie die Größe der Instanzklasse in der Datei appengine-web.xml erhöhen.
  • Wenn Ihre Anwendung versucht, eine API aufzurufen, die für die Java-Laufzeiten der zweiten Generation nicht aktiviert ist, erhalten Sie die Fehlermeldung com.google.apphosting.api.ApiProxy$FeatureNotEnabledException.
  • Es wird davon ausgegangen, dass alle Anwendungen in den Java-Laufzeiten der zweiten Generation threadsicher sind. Sie müssen das Element threadsafe in der Datei app.yaml oder appengine-web.xml entfernen, wenn Sie ein Upgrade auf Java 11+-Laufzeiten ausführen.

Beispiel (Datastore)

Ein Beispiel für die Verwendung von Firestore im Datastore-Modus (Datastore) finden Sie in den gebündelten Legacy-Diensten für das Java 11-Codebeispiel in GitHub.