ID da região
O REGION_ID
é um código abreviado que a Google atribui com base na região que seleciona quando cria a sua app. O código não corresponde a um país ou uma província, embora alguns IDs de regiões possam parecer semelhantes aos códigos de países e províncias usados frequentemente. Para apps criadas após
fevereiro de 2020, REGION_ID.r
está incluído nos
URLs do App Engine. Para apps existentes criadas antes desta data, o
ID da região é opcional no URL.
Saiba mais acerca dos IDs de regiões.
Além do web.xml
descritor de implementação, as aplicações Java do App Engine usam um ficheiro de configuração denominado appengine-web.xml
para especificar informações sobre a sua app e identificar que ficheiros no ficheiro WAR
da app são ficheiros estáticos (como imagens) e quais são ficheiros de recursos usados pela aplicação.
Exemplo
O exemplo seguinte é um ficheiro mínimo que especifica o tempo de execução do Java 8 sem ficheiros estáticos nem ficheiros de recursos:
<?xml version="1.0" encoding="utf-8"?>
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
<threadsafe>true</threadsafe>
<runtime>java8</runtime>
</appengine-web-app>
Sintaxe
Uma app Java do App Engine tem de ter um ficheiro denominado appengine-web.xml
no respetivo WAR, no diretório WEB-INF/
. Este é um ficheiro XML cujo elemento raíz é
<appengine-web-app>
.
Pode encontrar a definição do tipo de documento e as especificações do esquema para o
appengine-web.xml
no diretório docs/
do SDK.
Elemento | Descrição |
---|---|
<async-session-persistence> |
Opcional. É possível reduzir a latência dos pedidos configurando a sua aplicação para escrever dados de sessão HTTP de forma assíncrona no arquivo de dados: <?xml version="1.0" encoding="utf-8"?> <appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> <!-- ... --> <async-session-persistence enabled="true" /> <!-- ... --> </appengine-web-app> Com a persistência de sessão assíncrona ativada, o App Engine envia uma tarefa da fila de tarefas para escrever dados de sessão no armazenamento de dados antes de escrever os dados na cache de memória. Por predefinição, a tarefa é enviada para a fila "default". Se quiser usar uma fila diferente, adicione o atributo `queue-name`: <?xml version="1.0" encoding="utf-8"?> <appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> <!-- ... --> <async-session-persistence enabled="true" queue-name="myqueue"/> <!-- ... --> </appengine-web-app> Os dados de sessão são sempre escritos de forma síncrona na memcache. Se um pedido tentar ler os dados da sessão quando o memcache não estiver disponível (ou os dados da sessão tiverem sido esvaziados), vai falhar para o Datastore, que pode ainda não ter os dados da sessão mais recentes. Isto significa que a persistência de sessões assíncrona pode fazer com que a sua aplicação veja dados de sessões desatualizados. No entanto, para a maioria das aplicações, a vantagem da latência supera largamente o risco. |
<auto-id-policy> |
Opcional. Se estiver a
definir identificadores de entidades automaticamente, pode alterar o método
usado definindo a política de ID automático. Seguem-se as opções válidas:
|
<automatic-scaling> |
Opcional. Para uma explicação completa, consulte a secção Dimensionamento automático. |
<basic-scaling> |
Opcional. Para uma explicação completa, consulte a secção Dimensionamento básico. |
<env-variables> |
Opcional.
O ficheiro <env-variables> <env-var name="DEFAULT_ENCODING" value="UTF-8" /> </env-variables> Para evitar conflitos com o seu ambiente local, o servidor de desenvolvimento não define variáveis de ambiente com base neste ficheiro e requer que o ambiente local já tenha estas variáveis definidas com valores correspondentes. export DEFAULT_ENCODING="UTF-8" dev_appserver war Quando implementado no App Engine, o ambiente é criado com estas variáveis já definidas. |
<inbound-services> |
Opcional.
Antes de uma aplicação poder receber emails, tem de ser configurada para ativar o serviço.
Ativa o serviço para uma app Java 8 incluindo uma secção O seguinte serviço de entrada está disponível:
|
<instance-class> |
Opcional. O tamanho da classe de instância para este módulo. As seguintes classes de instâncias estão disponíveis quando especifica diferentes opções de escalabilidade:
|
<manual-scaling> |
Opcional. Para uma explicação completa, consulte a secção Dimensionamento manual. |
<precompilation-enabled> |
Opcional. O App Engine usa um processo de "pré-compilação" com o bytecode Java de uma app para melhorar o desempenho da app no ambiente de tempo de execução Java. O código pré-compilado funciona de forma idêntica ao bytecode original.
Se, por algum motivo, preferir que a sua app não use a pré-compilação,
pode desativá-la adicionando o seguinte ao ficheiro
<?xml version="1.0" encoding="utf-8"?> <appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> <!-- ... --> <precompilation-enabled>false</precompilation-enabled> <!-- ... --> </appengine-web-app> |
module |
Nota: os módulos são agora denominados
serviços
e os serviços continuam a ser declarados em ficheiros Obrigatório se estiver a criar um serviço. Opcional para o serviço predefinido. Cada serviço e cada versão têm de ter um nome. Um nome pode conter números, letras e hífenes. Não pode ter mais de 63 carateres, começar nem terminar com um hífen e conter a string `-dot`. Escolha um nome exclusivo para cada serviço e cada versão. Não reutilize nomes entre serviços e versões. Veja também serviço. |
<public-root> |
Opcional.
O
O valor predefinido de
Por exemplo, o seguinte mapearia o caminho do URL
<?xml version="1.0" encoding="utf-8"?> <appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> <!-- ... --> <public-root>/static</public-root> <!-- ... --> </appengine-web-app> |
<resource-files> |
Opcional. Os ficheiros listados no elemento
O elemento
Os ficheiros de recursos do App Engine são lidos através de |
runtime |
Para usar o tempo de execução do Java 8, tem de especificar esta entrada com o valor
Exemplo: <?xml version="1.0" encoding="utf-8"?> <appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> <!-- ... --> <runtime>java8</runtime> <!-- ... --> </appengine-web-app> |
service |
Os serviços eram anteriormente conhecidos como módulos. Atualmente, a definição de um serviço como:
|
service-account |
Opcional. O elemento <?xml version="1.0" encoding="utf-8"?> <appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> <!-- ... --> <service-account>[SERVICE_ACCOUNT_NAME]@[PROJECT_ID].iam.gserviceaccount.com</service-account> <!-- ... --> </appengine-web-app> |
<sessions-enabled> |
Opcional. O App Engine inclui uma implementação de sessões, através da interface de sessão de servlet. A implementação armazena dados de sessão no Datastore para persistência e também usa a cache de memória para velocidade. Tal como acontece com a maioria dos outros contentores de servlets, os atributos de sessão definidos com `session.setAttribute()` durante o pedido são mantidos no final do pedido.
Esta funcionalidade está desativada por predefinição. Para a ativar, adicione o seguinte a
<?xml version="1.0" encoding="utf-8"?> <appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> <!-- ... --> <sessions-enabled>true</sessions-enabled> <!-- ... --> </appengine-web-app>
A implementação cria entidades do Datastore do tipo
Nota: uma vez que o App Engine armazena dados de sessões no
armazenamento de dados e na cache de memória, todos os valores armazenados na sessão têm de
implementar a interface
Consulte o elemento
|
<ssl-enabled> |
Opcional. Por predefinição, qualquer utilizador pode aceder a qualquer URL através de HTTP ou HTTPS. Pode configurar uma app para exigir HTTPS para determinados URLs no descritor de implementação. Consulte o descritor de implementação: URLs seguros.
Se quiser proibir a utilização de HTTPS para a aplicação, coloque o seguinte no ficheiro <?xml version="1.0" encoding="utf-8"?> <appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> <!-- ... --> <ssl-enabled>false</ssl-enabled> <!-- ... --> </appengine-web-app> Não existe forma de não permitir HTTPS para alguns caminhos de URL e permitir para outros no ambiente de tempo de execução do Java. |
<static-error-handlers> |
Opcional.
Quando ocorrem determinados erros, o App Engine apresenta uma página de erro genérica. Pode configurar a sua app para publicar um ficheiro estático personalizado em vez
destas páginas de erro genéricas, desde que os dados de erro personalizados tenham menos
de 10 kilobytes. Pode configurar diferentes ficheiros estáticos para publicação
para cada código de erro suportado, especificando os ficheiros no ficheiro
<static-error-handlers> <handler file="default_error.html" /> <handler file="over_quota.html" error-code="over_quota" /> </static-error-handlers> Aviso: certifique-se de que o caminho para o ficheiro de resposta de erro não se sobrepõe aos caminhos do controlador de ficheiros estáticos.
Cada entrada
O elemento
Opcionalmente, pode especificar um |
<static-files> |
Opcional.
O elemento
O elemento
<static-files> <include path="/my_static-files" > <http-header name="Access-Control-Allow-Origin" value="http://example.org" /> </include> </static-files> |
<system-properties> |
Opcional. O ficheiro <system-properties> <property name="myapp.maximum-message-length" value="140" /> <property name="myapp.notify-every-n-signups" value="1000" /> <property name="myapp.notify-url" value="http://www.example.com/signupnotify" /> </system-properties> <env-variables> <env-var name="DEFAULT_ENCODING" value="UTF-8" /> </env-variables> |
<threadsafe> |
Obrigatório.
Quando o elemento <?xml version="1.0" encoding="utf-8"?> <appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> <!-- ... --> <threadsafe>true</threadsafe> <!-- ... --> </appengine-web-app>
Se quiser usar pedidos simultâneos, o código da sua aplicação tem de
usar a sincronização adequada de threads antes de ativar
Este elemento não é suportado nos tempos de execução do Java 11 ou superior. |
<url-stream-handler> |
Opcional. Valores possíveis: O valor predefinido é Se definir <?xml version="1.0" encoding="utf-8"?> <appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> <!-- ... --> <url-stream-handler>urlfetch</url-stream-handler> <!-- ... --> </appengine-web-app> |
<version> |
O elemento
Os nomes das versões devem começar com uma letra para os distinguir das
instâncias numéricas, que são sempre especificadas por um número. Isto evita a ambiguidade com URLs como
O App Engine usa este identificador de versão para determinar se deve criar uma nova versão da app com o identificador fornecido (ou substituir a versão da app com o identificador fornecido, se já existir). Pode testar novas versões da sua app com um URL
usando "-dot-" como um separador de subdomínio no URL, como,
|
<warmup-requests-enabled> |
Opcional. Predefinição: true. Os pedidos de preparação estão ativados por predefinição para aplicações Java 8.
Com os pedidos de preparação ativados, a infraestrutura do App Engine envia pedidos `GET` para
Para desativar os pedidos de preparação, especifique <?xml version="1.0" encoding="utf-8"?> <appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> <!-- ... --> <warmup-requests-enabled>false</warmup-requests-enabled> <!-- ... --> </appengine-web-app> |
<vpc-access-connector> |
Opcional. Configura a sua aplicação para usar um conetor do Acesso a VPC sem servidor, o que permite à aplicação enviar pedidos a recursos internos na sua rede VPC. Para mais informações, consulte o artigo Estabelecer ligação a uma rede VPC.
<vpc-access-connector> <name>projects/PROJECT_ID/locations/REGION/connectors/CONNECTOR_NAME</name> <egress-setting>all-traffic</egress-setting> </vpc-access-connector> |
Dimensionar elementos
A tabela seguinte lista as opções para definir como pode especificar que a sua aplicação deve ser dimensionada.
Para uma comparação das funcionalidades de desempenho dos tipos de escalabilidade, consulte o artigo Escalar instâncias dinâmicas.
Elemento | Descrição |
---|---|
<automatic-scaling> |
Opcional. Por predefinição, a escalabilidade automática é assumida com uma classe de instância predefinida de
O elemento Este elemento pode conter os seguintes elementos:
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> <application>simple-app</application> <module>default</module> <version>uno</version> <threadsafe>true</threadsafe> <instance-class>F2</instance-class> <automatic-scaling> <target-cpu-utilization>0.65</target-cpu-utilization> <min-instances>5</min-instances> <max-instances>100</max-instances> <max-concurrent-requests>50</max-concurrent-requests> </automatic-scaling> </appengine-web-app> |
<basic-scaling> |
Opcional.
O elemento Este elemento pode conter os seguintes elementos:
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> <application>simple-app</application> <module>default</module> <version>uno</version> <threadsafe>true</threadsafe> <instance-class>B8</instance-class> <basic-scaling> <max-instances>11</max-instances> <idle-timeout>10m</idle-timeout> </basic-scaling> </appengine-web-app> |
<manual-scaling> |
Opcional.
O elemento Este elemento pode conter os seguintes elementos:
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> <application>simple-app</application> <module>default</module> <version>uno</version> <threadsafe>true</threadsafe> <instance-class>B8</instance-class> <manual-scaling> <instances>5</instances> </manual-scaling> </appengine-web-app> |
Elementos de preparação
Grande parte do trabalho realizado durante uma implementação ocorre localmente num passo de preparação denominado preparação, onde os ficheiros JAR são montados, os JSPs são compilados, etc. Opcionalmente, pode configurar determinadas partes do comportamento de preparação usando elementos de preparação no ficheiro de configuração da aplicação. A maioria das aplicações é implementada com êxito sem configurar manualmente o comportamento de preparação. Se a sua app não for implementada, pode ter de configurar a preparação através das opções apresentadas abaixo.
Elemento | Descrição |
---|---|
<staging> |
Opcional. A maioria das aplicações não precisa de alterar o comportamento predefinido. O elemento de preparação permite-lhe especificar uma configuração de preparação específica, se necessário para a implementação. Este elemento pode conter os seguintes elementos:
Por exemplo: <staging> <delete-jsps>false</delete-jsps> </staging> |
Predefinições da opção de preparação
As predefinições das opções de preparação são as seguintes:
Elemento de preparação | Valor predefinido |
---|---|
enable-jar-splitting |
true |
jar-splitting-excludes |
NA |
disable-jar-jsps |
false |
enable-jar-classes |
true . Isto pode afetar a ordem de carregamento das classes. Por isso, se a sua app depender de uma determinada ordem, defina esta opção como false . |
delete-jsps |
true |
compile-encoding |
utf-8 |
Sintaxe de inclusão e exclusão
Os padrões de caminho são especificados com zero ou mais elementos <include>
e <exclude>
. Num padrão, '*'
representa zero ou mais
de qualquer caráter num nome de ficheiro ou diretório, e **
representa zero ou mais
diretórios num caminho. Os ficheiros e os diretórios que correspondem aos padrões <exclude>
não são carregados quando implementa a sua app no App Engine. No entanto, estes ficheiros e diretórios continuam acessíveis à sua aplicação quando esta é executada no servidor de desenvolvimento local.
Um elemento <include>
substitui o comportamento predefinido de incluir todos os ficheiros. Um elemento <exclude>
aplica-se após todos os padrões <include>
(bem como o padrão se não for fornecido nenhum <include>
explícito).
O exemplo seguinte demonstra como designar todos os ficheiros .png
como ficheiros estáticos (exceto os que se encontram no diretório data/
e em todos os respetivos subdiretórios):
<static-files>
<include path="/**.png" />
<exclude path="/data/**.png" />
</static-files>
Também pode definir cabeçalhos HTTP para usar quando responde a pedidos a estes recursos estáticos.
<static-files>
<include path="/my_static-files" >
<http-header name="Access-Control-Allow-Origin"
value="http://example.org" />
</include>
</static-files>
Tipos MIME para ficheiros estáticos
Por predefinição, os ficheiros estáticos são publicados com um tipo MIME selecionado com base na extensão do nome de ficheiro. Pode associar tipos MIME personalizados a extensões de nomes de ficheiros para ficheiros estáticos através de elementos <mime-mapping>
em web.xml
.
Tempo limite do URLFetch
Pode definir um prazo para cada pedido de URLFetch. Por predefinição, o prazo para uma obtenção é de 5 segundos.
Pode alterar esta predefinição incluindo a seguinte definição no ficheiro de configuração appengine-web.xml
. Especifique o limite de tempo em segundos:
<system-properties>
<property name="appengine.api.urlfetch.defaultDeadline" value="10"/>
</system-properties>