Nesta página, descrevemos como instalar e usar os serviços incluídos com a versão Java mais recente compatível com o ambiente padrão do App Engine. O aplicativo pode acessar os serviços incluídos usando o JAR da API do App Engine.
Antes de começar
Consulte a lista de APIs de serviços incluídos legados que podem ser chamadas na versão Java compatível mais recente.
Esta página exige que o app esteja executando uma versão Java compatível. Para migrar seu app da primeira geração para o ambiente de execução da segunda, consulte Migrar do Java 8 para o ambiente de execução Java mais recente e a seção Considerações sobre a migração.
Se você usa serviços agrupados legados e quer fazer upgrade para o Java 25, consulte Fazer upgrade de um aplicativo atual para saber mais sobre suas opções de configuração.
Instalar o JAR da API do App Engine
Para usar serviços agrupados legados no app Java com suporte mais recente, você deve
usar um appengine-web.xml
arquivo para configurar o app (em vez de um app.yaml arquivo).
O exemplo a seguir demonstra como adicionar configurações ao arquivo appengine-web.xml para diferentes versões do Java. Para usar a versão com suporte mais recente na configuração padrão, é preciso atualizar os servlets e as dependências do aplicativo para incluir o namespace Jakarta. Para saber mais sobre as opções de configuração,
consulte Fazer upgrade de um aplicativo atual.
Adicione as seguintes configurações ao arquivo appengine-web.xml, de acordo com a versão do Java:
Java 25 (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 (EE 10)
<?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>
Para especificar os serviços agrupados legados como dependência, adicione as seguintes linhas ao arquivo pom.xml:
<dependency>
<groupId>com.google.appengine</groupId>
<artifactId>appengine-api-1.0-sdk</artifactId>
<version>2.0.31</version> <!-- or later-->
</dependency>
Se o app usa um arquivo web.xml, é necessário adicionar o elemento <app-engine-apis>
e defini-lo como true:
<app-engine-apis>true</app-engine-apis>
Para implantar o aplicativo Java 25, execute o
mvn appengine:deploy
comando ou o
gcloud app deploy ~/my_app/WEB-INF/appengine-web.xml
comando em um aplicativo da Web compilado e preparado.
Ponto de entrada padrão para Java 25
Os aplicativos Java 25 se beneficiam da configuração extra do usuário ao iniciar a JVM para aplicativos da Web.
O ponto de entrada padrão usado para inicializar a JVM é gerado pelos pacotes de criação do App Engine.
Basicamente, é equivalente definir esse ponto de entrada no arquivo appengine-web.xml. Por exemplo:
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
Não recomendamos mudar esse ponto de entrada padrão, porque as configurações de memória são calculadas com base no tipo de instância (F1, F2, F4) e na memória disponível.
Por padrão, usamos --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.nio.charset=ALL-UNNAMED para abrir algumas APIs JDK necessárias.
Recursos do ponto de entrada
O ponto de entrada das versões Java de segunda geração pode ser personalizado com variáveis de ambiente definidas pelo usuário adicionadas ao arquivo de configuração appengine-web.xml.
A tabela a seguir indica as variáveis de ambiente que podem ser usadas para ativar/desativar/configurar recursos e os valores padrão, se não estiverem definidos:
| Variável de ambiente | Descrição | Tipo | Padrão |
|---|---|---|---|
CPROF_ENABLE |
Stackdriver Profiler | boolean | false |
GAE_MEMORY_MB |
Memória disponível | tamanho | Definido pelo App Engine ou /proc/meminfo - 400 milhões |
HEAP_SIZE_RATIO |
Memória da pilha | porcentagem | 80 |
HEAP_SIZE_MB |
Pilha disponível | tamanho | ${HEAP_SIZE_RATIO}% de ${GAE_MEMORY_MB} |
JAVA_HEAP_OPTS |
Argumentos de pilha do JVM | Argumentos do JVM | -Xms${HEAP_SIZE_MB}M -Xmx${HEAP_SIZE_MB}M |
JAVA_GC_OPTS |
Argumentos GC do JVM | Argumentos do JVM | -XX:+UseG1GC mais a configuração |
JAVA_USER_OPTS |
Outros argumentos do JVM | Argumentos do JVM | |
JAVA_OPTS |
Argumentos do JVM | Argumentos do JVM | Consulte abaixo |
Se não estiver definido explicitamente, JAVA_OPTS assumirá como padrão:
JAVA_OPTS:=-showversion \
$JAVA_HEAP_OPTS \
$JAVA_GC_OPTS \
$JAVA_USER_OPTS
Quando CPROF_ENABLE for verdadeiro, o ponto de entrada padrão adicionará o PROFILER_AGENT como:
-agentpath:/opt/cprof/profiler_java_agent.so=--logtostderr
Por exemplo, se o código do aplicativo precisar de mais sinalizações -add-opens, use a variável de ambiente JAVA_USER_OPTS definida no arquivo appengine-web.xml:
<env-variables>
<env-var name="JAVA_USER_OPTS" value="--add-opens java.base/java.util=ALL-UNNAMED" />
</env-variables>
Considerações sobre a migração
Esteja ciente das seguintes considerações se você estiver migrando para um ambiente de execução Java de segunda geração e seu aplicativo usar serviços incluídos legados:
- Para testar os recursos de serviços incluídos legados no seu aplicativo Java de segunda geração, use o servidor de desenvolvimento local.
- Ao contrário do ambiente de execução do Java 8, os ambientes de execução Java de segunda geração
incluem JVM como parte da memória da instância. Se você vir erros relacionados à memória nos registros, considere
aumentar o tamanho da classe da instância no
arquivo
appengine-web.xml. - Se o aplicativo estiver tentando chamar uma API que não está ativada para os ambientes de execução Java de segunda geração, ele receberá um erro
com.google.apphosting.api.ApiProxy$FeatureNotEnabledException. - Todos os aplicativos são considerados de concorrência segura nos ambientes de execução Java de segunda geração. É necessário remover o elemento
threadsafeno arquivoapp.yamlouappengine-web.xmlao migrar do Java 8 para o ambiente de execução Java mais recente.
Exemplo (Datastore)
Para ver um exemplo de como usar o Firestore no modo Datastore, consulte os pacotes de serviços legados para o Java 11 no GitHub.