Entorno de ejecución de Java 8 o Jetty 9

El entorno de ejecución de Eclipse Jetty 9 usa OpenJDK 8 y Jetty 9 con compatibilidad para la especificación del Servlet de Java 3.1.

Requisitos previos

  • Descarga la última versión del SDK de Google Cloud o actualiza tu SDK de Cloud a la versión actual:

    gcloud components update
    
  • A fin de realizar implementaciones mediante Maven, tendrás que agregar el complemento de Maven para App Engine a tu pom.xml:

    <plugin>
       <groupId>com.google.cloud.tools</groupId>
       <artifactId>appengine-maven-plugin</artifactId>
       <version>2.0.0</version>
    </plugin>

    Otras opciones de implementación incluyen el comando gcloud app deploy o el complemento de Gradle para App Engine.

Cómo organizar tus archivos

El árbol fuente debería verse así:

MyDir/
  [pom.xml]
  [build.gradle]
  [index.yaml]
  [cron.yaml]
  [dispatch.yaml]
  src/main/
    appengine/
      app.yaml
    docker/
      [Dockerfile]
    java/
      com.example.mycode/
        MyCode.java
    webapp/
      [index.html]
      [jsp.jsp]
      WEB-INF/
        [web.xml]

app.yaml

Es obligatorio usar un archivo app.yaml. Define un archivo que tenga este aspecto:

runtime: java
env: flex

handlers:
- url: /.*
  script: this field is required, but ignored

La imagen del entorno de ejecución gcr.io/google-appengine/jetty se selecciona de manera automática cuando implementas un archivo WAR (archivo *.war).

Si quieres usar esta imagen como la base para un entorno de ejecución personalizado, puedes especificar runtime: custom en tu archivo app.yaml y, luego, escribir el Dockerfile de la siguiente manera:

FROM gcr.io/google-appengine/jetty
ADD your-application.war $APP_DESTINATION

Estas líneas agregan el archivo WAR a la ubicación correcta para el contenedor de Docker.

En la documentación app.yaml se describe otra configuración de app.yaml.

pom.xml se usa para configurar Maven y build.gradle para Gradle.

Archivos opcionales

Estos archivos de configuración son opcionales:

Coloca estos archivos en el nivel superior de MyDir. Si usas alguno de estos archivos, debes implementarlos por separado con el comando gcloud app deploy.

web.xml es opcional y solo se necesita si no usas las anotaciones de Servlet 3.x.

Puedes colocar contenido web estático, así como tus páginas de JavaServer, en el directorio webapp/. Jetty 9, que se usa en el entorno flexible de App Engine como contenedor de Servlet, usa Apache Jasper como la implementación predeterminada de JSP y, además, incluye la biblioteca de etiquetas de JSTL.

El archivo Dockerfile es opcional y se usa para personalizar el entorno de ejecución de Java.

Cómo habilitar la compresión Gzip

El controlador gzip se incluye con Jetty, pero no está activado de forma predeterminada. Para activar este módulo, establece la variable de entorno, JETTY_MODULES_ENABLE=gzip, en el archivo app.yaml:

env_variables:
  JETTY_MODULES_ENABLE: 'gzip'

Cómo usar la guía de inicio rápido

Jetty puede acelerar el tiempo de inicio de tu aplicación con un análisis previo de su contenido y la generación de archivos de configuración. Si utilizas una imagen extendida, puedes activar la guía de inicio rápido con la ejecución de /scripts/jetty/quickstart.sh en tu Dockerfile, luego de que se agregue la aplicación WAR.

FROM launcher.gcr.io/google/jetty
ADD your-application.war $JETTY_BASE/webapps/root.war

# generate quickstart-web.xml
RUN /scripts/jetty/quickstart.sh

Variables del entorno

Puedes establecer las siguientes variables opcionales del entorno que son específicas del entorno de ejecución de Java 8 o Jetty 9. También puedes establecer las variables del entorno de OpenJDK 8.

Para establecer las variables del entorno, usa la clave env_variables en el archivo app.yaml.

Variables del entorno Propiedades de Maven Valor o comentario
JETTY_PROPERTIES Lista de pares de name=value separados por comas anexos a $JETTY_ARGS.
JETTY_MODULES_ENABLE Lista de módulos separados por comas para habilitar con el anexo a $JETTY_ARGS.
JETTY_MODULES_DISABLE Lista de módulos separados por comas para inhabilitar mediante la eliminación desde $JETTY_BASE/start.d.
JETTY_ARGS Argumentos que se transfieren al start.jar de jetty. Cualquier argumento que se usa para la configuración personalizada de Jetty se debe transferir aquí.
JAVA_OPTS Argumentos del entorno de ejecución de JVM.

Stackdriver Logging mejorado (Beta)

Puedes configurar Java Util Logging para enviar registros a Google Stackdriver Logging si estableces la variable de entorno JETTY_ARGS cuando ejecutas en el entorno flexible de App Engine. Por ejemplo:

 env_variables:
   JETTY_ARGS: -Djava.util.logging.config.file=WEB-INF/logging.properties

Debes proporcionar un archivo logging.properties que configure un LoggingHandler de la siguiente manera:

handlers=com.google.cloud.logging.LoggingHandler

# Optional configuration
.level=INFO
com.google.cloud.logging.LoggingHandler.level=FINE
com.google.cloud.logging.LoggingHandler.log=gae_app.log
com.google.cloud.logging.LoggingHandler.formatter=java.util.logging.SimpleFormatter
java.util.logging.SimpleFormatter.format=%3$s: %5$s%6$s

Pruebas locales

Cuando realices pruebas en tu entorno local, puedes usar los servicios emulados de Google Cloud en lugar de los servicios remotos de Google Cloud. Puedes usar los siguientes emuladores:

Usa el comando de gcloud para iniciar estos emuladores antes de ejecutar la aplicación:

gcloud beta emulators datastore start
gcloud beta emulators pubsub start
gcloud beta emulators bigtable start

Maven

Agrega las siguientes líneas al archivo pom.xml de Maven para agregar el complemento de Jetty 9 Maven:

<plugin>
  <groupId>org.eclipse.jetty</groupId>
  <artifactId>jetty-maven-plugin</artifactId>
  <version>9.4.2.v20170220</version>
</plugin>

Para ejecutar tu aplicación de forma local, usa el siguiente comando de Maven:

mvn jetty:run-exploded

Gradle

Sigue las instrucciones en la página sobre cómo crear un nuevo proyecto de Gradle para agregar el complemento de Gretty Gradle a tu build.gradle y usa este comando:

gradle jettyRun

Cómo implementar tu aplicación

Para inicializar el SDK de Google Cloud, debes ejecutar lo siguiente:

gcloud init

Después de completar la configuración, puedes usar el SDK de Google Cloud para implementar este directorio que contiene los archivos app.yaml y WAR mediante este comando:

gcloud app deploy app.yaml

Si usas uno de los archivos de configuración opcionales (index.yaml, cron.yaml y dispatch.yaml), impleméntalos por separado con el comando de gcloud. Por ejemplo:

gcloud app deploy cron.yaml

Maven

Usa Maven para implementar tu aplicación:

mvn appengine:deploy

Gradle

Usa Gradle para implementar tu aplicación:

gradle appengineDeploy

Cómo personalizar el entorno de ejecución de Java 8 o Jetty 9

No necesitas un Dockerfile para implementar tu aplicación en el entorno de ejecución de Java 8 o Jetty 9. Si tu aplicación exige una configuración adicional, puedes proporcionar, de manera explícita, un Dockerfile para personalizar el entorno de ejecución de Java. El Dockerfile debe incluir la imagen base gcr.io/google-appengine/jetty. Puedes agregar directivas adicionales al Dockerfile para personalizar el entorno de ejecución de Java. Consulta Cómo compilar entornos de ejecución personalizados.

Tu Dockerfile debe comenzar de la siguiente manera:

FROM gcr.io/google-appengine/jetty
ADD your-application.war $APP_DESTINATION
# YOUR DOCKER COMMANDS

En este caso, your-application.war es el nombre del archivo compilado WAR en tu directorio target/ (Maven) o build/staged-app/ (Gradle).

¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...

Entorno flexible de App Engine para documentos de Java