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 seu app esteja executando uma versão compatível do Java. 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 do 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 (prévia), 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, use
um arquivo appengine-web.xml
para configurar o app, em vez de um arquivo app.yaml.
O exemplo a seguir demonstra como adicionar definições de configuração em
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 (prévia, 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 app Java 25 (pré-lançamento), execute o
comando mvn appengine:deploy
ou
gcloud app deploy ~/my_app/WEB-INF/appengine-web.xml
em um aplicativo da Web compilado e preparado.
Ponto de entrada padrão para Java 25 (prévia)
Os aplicativos Java 25 (pré-lançamento) 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 do 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.