Esta página descreve como migrar a sua app do App Engine existente do runtime Java 7 para o runtime Java 8. Tenha em atenção que os tempos de execução Java do App Engine são baseados no OpenJDK.
Especificar o tempo de execução do Java 8 para a sua app
Para executar a sua app no tempo de execução do Java 8:
Adicione
<runtime>java8</runtime>
ao seu ficheiroappengine-web.xml
:Volte a implementar a sua app.
Migrar de serviços não suportados
Alguns serviços descontinuados disponíveis para o tempo de execução do Java 7 não são suportados pelo tempo de execução do Java 8. A Google recomenda que migre a sua aplicação para as alternativas recomendadas e teste a app no tempo de execução do Java 7 com essas alterações antes de migrar para o Java 8.
Os seguintes serviços descontinuados não estão disponíveis no tempo de execução do Java 8:
Serviço descontinuado | Alternativa recomendada |
---|---|
Cloud Endpoints v1 | Migre para a v2. O produto foi mudado para Cloud Endpoints Frameworks. Tenha em atenção que isto pode exigir que altere as suas aplicações Web, Android ou iOS. |
AppStats (appengine-api-labs jar) | Migre para o Cloud Trace. O SDK gera um erro para apps que usam a classe com.google.appengine.tools.AppstatsFilter no tempo de execução do Java 8. Certifique-se de que elimina todas as referências a AppstatsFilter do seu web.xml . |
As classes reembaladas vão exigir novos caminhos de importação no Java 8. Por exemplo, se a sua app usou com.google.appengine.repackaged.com.google.common.base.Optional
, tem de importar com.google.appengine.repackaged.com.google.common.base.$Optional
com $
como prefixo do nome da classe.
Migração de apps gratuitas que usam java.net.HttpURLConnection
Se a sua app não tiver a faturação ativada e fizer pedidos HTTP(S) através da classe java.net.HttpURLConnection
ou de uma biblioteca de cliente Google que use essa classe, vai causar erros de tempo de execução.
Para evitar esta situação, defina o <url-stream-handler>
como urlfetch
nas
appengine-web.xml
da app:
<?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>
Em alternativa, em vez de especificar urlfetch
, pode ativar a faturação para a sua aplicação e usar a definição native
predefinida. A sua app não deve incorrer em
aumentos de custos devido à execução no Java 7. Tenha em atenção que, se a sua app depender do cabeçalho HTTP X-Appengine-Inbound-Appid
(usado para comunicação de módulo para módulo), tem de usar urlfetch
.
Alterar a codificação de ficheiros predefinida
O App Engine alterou a codificação de ficheiros predefinida de US-ASCII
no Java 7 para UTF-8
no Java 8. Para alterar a codificação predefinida novamente para
US-ASCII
no Java 8, adicione o seguinte ao seu appengine-web.xml
:
<system-properties>
<property name="appengine.file.encoding" value="US-ASCII"/>
</system-properties>
Podem ocorrer erros se alguns carateres não estiverem no conjunto ASCII e a sua aplicação fizer determinadas suposições, como someString.getBytes().length == someString.length()
. Na codificação US-ASCII, isto é verdade porque os carateres que não são ASCII são mapeados para "?", mas isto não é necessariamente verdade com a codificação UTF-8.
Por exemplo, se imprimir os bytes hexadecimais da chamada Éamonn.getBytes()
, com UTF-8, vai obter:
c3 89 61 6d 6f 6e 6e
(Éamonn
). No entanto, com US-ASCII, vai obter:
3f 61 6d 6f 6e 6e
(?amonn
) devido ao valor de codificação diferente de É
.
Tirar total partido das funcionalidades de tempo de execução do Java 8
Segue-se uma lista parcial das vantagens da migração para o motor de execução Java 8:
- O Jetty 9 suporta aplicações Web Servlet 2.5 e 3.1, incluindo anotações de servlet.
- Todas as classes Java padrão estão agora disponíveis e não existe uma lista de autorização de classes.
- O sistema de ficheiros
/tmp
é gravável, o que ocupa a atribuição de RAM da app. - Agora, a E/S de rede pode ser realizada em qualquer thread Java. As chamadas da API App Engine continuam a ter de estar num pedido de thread ou numa thread criada pela API Thread Manager.
- O idioma Java 8 completo é agora suportado, incluindo a API Stream, as expressões lambda e a API Date / Time.