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 Anwendung mit der neuesten unterstützten Java-Version 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 Ihrer appengine-web.xml für verschiedene Java-Versionen hinzufügen. Wenn Sie die neueste unterstützte Version in der Standardkonfiguration verwenden möchten, müssen Sie die Servlets und Abhängigkeiten Ihrer Anwendung aktualisieren, damit der Namespace Jakarta enthalten ist. Weitere Informationen zu den Konfigurationsoptionen finden Sie unter Vorhandene Anwendung upgraden.

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

Java 25 (Vorschau, EE 11)

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

Java 21 (EE10)

  <?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.EE10" value="true"/>
      </system-properties>
      <app-engine-apis>true</app-engine-apis>
  </appengine-web-app>

Java 17 (EE 8)

  <?xml version="1.0" encoding="utf-8"?>
  <appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
      <runtime>java17</runtime>
      <system-properties>
        <property name="appengine.use.EE8" value="true"/>
      </system-properties>
      <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.31</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 25-Anwendung (Vorschau) den Befehl mvn appengine:deploy oder gcloud app deploy ~/my_app/WEB-INF/appengine-web.xml einer kompilierten und bereitgestellten Webanwendung aus aus.

Standardeinstiegspunkt für Java 25 (Vorschau)

Java 25-Anwendungen (Vorschau) 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 von Java 8 zur neuesten Java-Laufzeit migrieren.

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.