En esta página, se describe cómo migrar tu app de App Engine actual del entorno de ejecución de Java 7 al de Java 8. Ten en cuenta que los entornos de ejecución de Java en App Engine se basan en OpenJDK.
Especifica el entorno de ejecución de Java 8 para tu app
Para ejecutar tu app en el entorno de ejecución de Java 8, sigue estos pasos:
Agrega
<runtime>java8</runtime>
a tu archivoappengine-web.xml
:Vuelve a implementar la app.
Migra 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 app a las alternativas recomendadas y la pruebes en el entorno de ejecución de Java 7 con esos 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 Cloud Trace. El SDK genera un error para las apps 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 web.xml . |
Las clases que se vuelven a empaquetar requerirán rutas de importación nuevas en Java 8. Por ejemplo, si la app 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 $
en el nombre de la clase.
Migra apps gratuitas que usan java.net.HttpURLConnection
Si la app no tiene habilitada la facturación y realiza solicitudes HTTP(S) mediante la clase java.net.HttpURLConnection
o una biblioteca cliente de Google que la use, generará errores de entorno de ejecución.
Para evitar esto, configura <url-stream-handler>
como urlfetch
en el appengine-web.xml
de la 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>
Como alternativa, en lugar de especificar urlfetch
, puedes habilitar la facturación de tu aplicación y usar la configuración predeterminada native
. La aplicación no debe generar un aumento en los costos si se ejecuta en Java 7. Ten en cuenta que si tu app se basa en el encabezado HTTP X-Appengine-Inbound-Appid
(usado para la comunicación de módulo a módulo), se debe usar urlfetch
.
Cambia la codificación de archivos predeterminada
App Engine cambió la codificación de archivos predeterminada 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 la siguiente información al archivo appengine-web.xml
:
<system-properties>
<property name="appengine.file.encoding" value="US-ASCII"/>
</system-properties>
Pueden producirse errores si algunos caracteres no están en el conjunto ASCII y tu aplicación realiza ciertas suposiciones, como someString.getBytes().length == someString.length()
. En la codificación US-ASCII, esto es así porque los caracteres que no son de ASCII se mapean a “?”. Sin embargo, esto no es necesariamente así con la codificación UTF-8.
Por ejemplo, si imprimes los bytes hexadecimales a partir de una llamada a Éamonn.getBytes()
, con UTF-8 será: c3 89 61 6d 6f 6e 6e
(Éamonn
); en cambio, con US-ASCII obtendrás: 3f 61 6d 6f 6e 6e
(?amonn
) debido a los diferentes valores de codificación de É
.
Aprovecha al máximo las funciones 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.
- Ahora están disponibles todas las clases estándar de Java y ninguna clase se incluye en la lista de anunciantes permitidos.
- Se puede escribir en el sistema de archivos
/tmp
. Esto requiere la asignación de RAM de la app. - La E/S de la red ahora se puede ejecutar en cualquier subproceso 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.