Cómo migrar del entorno de ejecución de Java 7 a Java 8

En esta página se describe cómo migrar tu aplicación de App Engine existente del entorno de ejecución de Java 7 a Java 8. Ten en cuenta que los entornos de ejecución de Java en App Engine se basan en OpenJDK.

Cómo especificar el entorno de ejecución de Java 8 para tu aplicación

Para ejecutar la aplicación en el entorno de ejecución de Java 8:

  1. Agrega <runtime>java8</runtime> a tu archivo appengine-web.xml:

    <appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
      <runtime>java8</runtime>
      <threadsafe>true</threadsafe>
    </appengine-web-app>
  2. Vuelve a implementar la aplicación.

Cómo migrar desde servicios no compatibles

El entorno de ejecución de Java 8 no admite algunos servicios obsoletos disponibles en el entorno de ejecución de Java 7. Google recomienda que migres tu aplicación a las alternativas recomendadas y pruebes la aplicación en el entorno de ejecución de Java 7 con estos cambios antes de migrar a Java 8.

Los siguientes servicios obsoletos no están disponibles en el entorno de ejecución de Java 8:

Servicio obsoleto Alternativa recomendada
Cloud Endpoints v1 Migra a v2, se cambió el nombre del producto Cloud Endpoints Frameworks Ten en cuenta que esto podría requerir que cambies tus aplicaciones web, de Android o de iOS.
Estadísticas de la aplicación (appengine-api-labs jar) Migra a Stackdriver Trace. El SDK genera un error para las aplicaciones que usan la clase com.google.appengine.tools.AppstatsFilter en el entorno de ejecución de Java 8. Asegúrate de borrar todas las referencias a AppstatsFilter desde tu web.xml.

Las clases que se vuelven a empaquetar requerirán rutas de importación nuevas en Java 8. Por ejemplo, si la aplicación usó com.google.appengine.repackaged.com.google.common.base.Optional, deberás importar com.google.appengine.repackaged.com.google.common.base.$Optional, con el prefijo $ para el nombre de la clase.

Cómo migrar aplicaciones gratuitas que usan java.net.HttpURLConnection

Si la aplicación no tiene la facturación habilitada y realiza solicitudes HTTP(S) con la clase java.net.HttpURLConnection o una biblioteca cliente de Google que usa esa clase, generará errores de entorno de ejecución. Para evitar esto, configura <url-stream-handler> como urlfetch en appengine-web.xml de la aplicación:

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

De forma alternativa, en lugar de especificar urlfetch, puedes habilitar la facturación para la aplicación y usar la configuración native predeterminada. La aplicación no debe generar un aumento en los costos si se ejecuta en Java 7. Ten en cuenta que, si la aplicación se basa en el encabezado HTTP X-Appengine-Inbound-Appid (se usa para la comunicación entre módulos), se debe usar urlfetch.

Cómo cambiar la codificación predeterminada del archivo

App Engine cambió la codificación predeterminada del archivo de US-ASCII en Java 7 a UTF-8 en Java 8. Para volver a cambiar la codificación predeterminada a US-ASCII en Java 8, agrega lo siguiente a appengine-web.xml:

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

Se pueden producir errores si algunos caracteres no están disponibles en el conjunto de ASCII y tu aplicación hace algunas suposiciones, como someString.getBytes().length == someString.length(). En la codificación de US-ASCII, esto se debe a que los caracteres que no son de ASCII se asignan a "?", aunque no es necesariamente así con la codificación de UTF-8.

Por ejemplo, si imprimes los bytes hexadecimales de la llamada Éamonn.getBytes(), con UTF-8 será c3 89 61 6d 6f 6e 6e (Éamonn), mientras que con US-ASCII será: 3f 61 6d 6f 6e 6e (?amonn) debido al valor de codificación diferente de É.

Cómo aprovechar plenamente las características del entorno de ejecución de Java 8

A continuación, se muestra una lista parcial de las ventajas de migración al entorno de ejecución de Java 8:

  • Jetty 9 admite aplicaciones web de Servlet 2.5 y 3.1, incluidas las anotaciones del servlet.
  • Todas las clases estándar de Java ahora están disponibles y ninguna clase se incluye en la lista blanca.
  • El sistema de archivos /tmp admite operaciones de escritura, esto requiere la asignación de RAM de la aplicación.
  • La E/S de la red ahora se puede ejecutar en cualquier conversación de Java. Las llamadas a la API de App Engine aún requieren estar en una conversación de la solicitud o una conversación creada por la API de administrador de conversaciones.
  • Ahora se admite el lenguaje completo de Java 8, incluidas la API de transmisión, las funciones Lambda y la API de fecha y hora.
¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...

Entorno estándar de App Engine para Java