Como migrar do ambiente de execução do Java 7 para o Java 8

Nesta página, descrevemos como migrar o aplicativo existente do App Engine do ambiente de execução do Java 7 para o Java 8. Os ambientes de execução Java do App Engine são baseados em OpenJDK.

Como especificar o ambiente de execução do Java 8 para o aplicativo

Para executar o aplicativo no ambiente de execução do Java 8:

  1. Adicione <runtime>java8</runtime> ao arquivo appengine-web.xml:

    <appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
      <runtime>java8</runtime>
      <threadsafe>true</threadsafe>
    </appengine-web-app>
  2. Implante o aplicativo novamente.

Como migrar de serviços não compatíveis

Alguns serviços obsoletos disponíveis para o ambiente de execução do Java 7 não são compatíveis com o ambiente de execução do Java 8. O Google recomenda migrar o aplicativo para as alternativas recomendadas e testá-lo no ambiente de execução do Java 7 com essas alterações antes de migrar para o Java 8.

Os seguintes serviços obsoletos não estão disponíveis no ambiente de execução do Java 8:

Serviço obsoleto Alternativa recomendada
Cloud Endpoints v1 Migrar para v2. O produto foi renomeado para Cloud Endpoints Frameworks. Isso pode exigir que você altere os aplicativos para Web, Android ou iOS.
AppStats (appengine-api-labs jar) Migrar para Stackdriver Trace. Um erro é gerado pelo SDK nos aplicativos que usam a classe com.google.appengine.tools.AppstatsFilter no ambiente de execução do Java 8. Certifique-se de excluir todas as referências a AppstatsFilter do web.xml.

Classes reempacotadas exigirão novos caminhos de importação no Java 8. Por exemplo, quando o aplicativo usa com.google.appengine.repackaged.com.google.common.base.Optional, é preciso importar com.google.appengine.repackaged.com.google.common.base.$Optional, com $ à frente do nome da classe.

Como migrar apps gratuitos que usam java.net.HttpURLConnection

Se o aplicativo não estiver com o faturamento ativado e fizer solicitações HTTP(S) usando a classe java.net.HttpURLConnection ou uma biblioteca de cliente do Google (em inglês) com essa classe, ocorrerão erros no ambiente de execução. Para evitar isso, defina o <url-stream-handler> como urlfetch no appengine-web.xml do aplicativo:

<?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>

Como alternativa, em vez de especificar urlfetch, você pode ativar o faturamento para seu aplicativo e usar a configuração native padrão. O aplicativo não terá nenhum aumento nos custos da execução no Java 7. Observe que, se o aplicativo depender do cabeçalho HTTP X-Appengine-Inbound-Appid (usado para a comunicação módulo-para-módulo), você precisará usar urlfetch.

Como alterar a codificação de arquivo padrão

O App Engine alterou a codificação de arquivo padrão de US-ASCII no Java 7 para UTF-8 no Java 8. Para alterar a codificação padrão de volta para US-ASCII no Java 8, adicione o comando a seguir ao seu appengine-web.xml:

 <system-properties>
   <property name="appengine.file.encoding" value="US-ASCII"/>
 </system-properties>

Poderão surgir problemas se alguns caracteres não estiverem no conjunto ASCII e o aplicativo fizer certas suposições, como someString.getBytes().length == someString.length(). Na codificação US-ASCII, isso é verdadeiro porque caracteres não ASCII são mapeados para "?", mas isso não é necessariamente verdadeiro com a codificação UTF-8.

Por exemplo, se você imprimir os bytes hexadecimais ao chamar Éamonn.getBytes(), com UTF-8, será c3 89 61 6d 6f 6e 6e (Éamonn). Já com o US-ASCII, você terá 3f 61 6d 6f 6e 6e (?amonn) devido ao valor de codificação diferente de É.

Como aproveitar ao máximo os recursos do ambiente de execução do Java 8

Veja a seguir uma lista parcial das vantagens de migrar para o ambiente de execução do Java 8:

  • O Jetty 9 é compatível com os aplicativos da Web Servlet 2.5 e 3.1, incluindo notas de servlet.
  • Todas as classes Java padrão estão disponíveis e não há lista de permissões de classe.
  • O sistema de arquivos /tmp é gravável - isso ocupa a alocação de RAM do aplicativo.
  • As operações de E/S de rede agora podem ser executadas em qualquer thread Java. As chamadas da API do App Engine ainda precisam estar em um thread de solicitação ou em um thread criado pela API Thread Manager.
  • A linguagem Java 8 completa agora é compatível, incluindo a API Stream, Lambdas e a API Date/Time.
Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Ambiente padrão do App Engine para Java