Runtime di Java 8 / Jetty 9

Il runtime Java 8 / Jetty 9 fornisce OpenJDK 8 ed Eclipse Jetty 9 con supporto per la specifica Java Servlet 3.1. Per informazioni sulla versione Jetty specifica in questo runtime, visualizza le proprietà Jetty nel progetto GitHub per l'immagine del runtime.

Prerequisiti

  • Scarica l'ultima versione di Google Cloud CLI o aggiorna gcloud CLI alla versione attuale:

    gcloud components update
    
  • Per eseguire il deployment utilizzando Maven, dovrai aggiungere il plug-in Maven per App Engine a pom.xml:

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

    Altre opzioni per il deployment includono il comando gcloud app deploy o il plug-in Gradle di App Engine.

Organizzazione dei file

La struttura di origine dovrebbe avere il seguente aspetto:

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

È richiesto un file app.yaml. Definisci un file simile al seguente:

runtime: java
env: flex

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

L'immagine di runtime gcr.io/google-appengine/jetty viene selezionata automaticamente quando esegui il deployment di un WAR (file *.war).

Se vuoi utilizzare questa immagine come base per un runtime personalizzato, puoi specificare runtime: custom nel file app.yaml, quindi scrivere il Dockerfile nel seguente modo:

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

Queste righe aggiungono WAR nella posizione corretta per il container Docker.

Le altre impostazioni app.yaml sono descritte nella sezione Utilizzo di app.yaml.

pom.xml è per la configurazione di Maven e build.gradle per la configurazione di Gradle.

File facoltativi

Questi file di configurazione sono facoltativi:

Inserisci questi file al livello più alto di MyDir. Se utilizzi questi file, devi eseguirne il deployment separatamente con il comando gcloud app deploy.

Il file web.xml è facoltativo ed è necessario solo se non utilizzi le annotazioni Servlet 3.x.

Puoi inserire contenuti web statici e le pagine JavaServer nella directory webapp/. Jetty 9, che viene utilizzato dall'ambiente flessibile di App Engine come container Servlet, e che utilizza Apache Jasper come implementazione JSP predefinita e include i tag JSTL.

Il file Dockerfile è facoltativo e viene utilizzato per personalizzare il tempo di esecuzione di Java.

Attivazione della compressione gzip

Il gestore gzip è associato a Jetty, ma non è attivato per impostazione predefinita. Per attivare questo modulo, imposta la variabile di ambiente JETTY_MODULES_ENABLE=gzip nel file app.yaml:

env_variables:
  JETTY_MODULES_ENABLE: 'gzip'

Utilizzare la Guida rapida

Jetty può velocizzare l'ora di inizio dell'applicazione eseguendo una prescansione dei suoi contenuti e generando file di configurazione. Se utilizzi un'immagine estesa, puoi attivare la guida rapida eseguendo /scripts/jetty/quickstart.sh nel Dockerfile dopo aver aggiunto l'applicazione 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

Variabili di ambiente

Puoi impostare le seguenti variabili di ambiente facoltative specifiche per il runtime Java 8/Jetty 9. Puoi impostare anche le variabili di ambiente OpenJDK 8.

Per impostare le variabili di ambiente, utilizza la chiave env_variables nel file app.yaml.

Env varia Fornitore Maven Valore/commento
JETTY_PROPERTIES Elenco separato da virgole di name=value coppie aggiunte a $JETTY_ARGS
JETTY_MODULES_ENABLE Elenco separato da virgole di moduli da abilitare aggiungendo $JETTY_ARGS
JETTY_MODULES_DISABLE Elenco separato da virgole di moduli da disattivare rimuovendo da $JETTY_BASE/start.d
JETTY_ARGS Argomenti passati al start.jar del molo. Tutti gli argomenti utilizzati per la configurazione del molo personalizzato devono essere passati qui.
JAVA_OPTS Argomenti di runtime JVM

Cloud Logging avanzato (beta)

Durante l'esecuzione nell'ambiente flessibile di App Engine, puoi configurare Java Util Logging per inviare log a Cloud Logging impostando la variabile di ambiente JETTY_ARGS. Ad esempio:

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

Devi fornire un file logging.properties che configuri un LoggingHandler come segue:

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

Test locale

Quando esegui i test nel tuo ambiente locale, puoi utilizzare i servizi Google Cloud emulati, anziché i servizi Google Cloud remoti. Puoi usare i seguenti emulatori:

Usa il comando gcloud per avviarli prima di eseguire l'app:

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

Maven

Aggiungi queste righe al file pom.xml nav per aggiungere il plug-in Jetty 9 Maven:

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

Per eseguire la tua app localmente, utilizza il comando Maven:

mvn jetty:run-exploded

Gradle

Segui le istruzioni sulla creazione di un nuovo progetto Gradle per aggiungere il plug-in Gretty Gradle a build.gradle e utilizza il comando:

gradle jettyRun

Deployment dell'app

Per inizializzare Google Cloud CLI, esegui:

gcloud init

Dopo aver completato le configurazioni, puoi utilizzare Google Cloud CLI per eseguire il deployment di questa directory contenente i file app.yaml e WAR utilizzando:

gcloud app deploy app.yaml

Se utilizzi uno dei file di configurazione facoltativi (index.yaml, cron.yaml e dispatch.yaml), eseguine il deployment separatamente con il comando gcloud. Ad esempio:

gcloud app deploy cron.yaml

Maven

Utilizza Maven per eseguire il deployment della tua app:

mvn package appengine:deploy -Dapp.deploy.projectId=PROJECT_ID

Sostituisci PROJECT_ID con l'ID del tuo progetto Cloud. Se il file pom.xml specifica già specifica il tuo ID progetto, non è necessario includere la proprietà -Dapp.deploy.projectId nel comando che esegui.

Gradle

Utilizza Gradle per eseguire il deployment della tua app:

gradle appengineDeploy

Personalizzazione del runtime Java 8 / Jetty 9

Non è necessario un Dockerfile per eseguire il deployment della tua app nel runtime Java 8/Jetty 9. Se la tua app richiede una configurazione aggiuntiva, puoi fornire esplicitamente un Dockerfile per personalizzare il runtime di Java. Il Dockerfile deve includere l'immagine di base gcr.io/google-appengine/jetty. Puoi aggiungere ulteriori istruzioni al Docker per personalizzare il runtime di Java. Consulta la pagina relativa alla creazione di runtime personalizzati.

Il tuo Dockerfile dovrebbe iniziare in questo modo:

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

In questo caso, your-application.war è il nome del file WAR creato nella directory target/ (maven) o build/staged-app/ (gradle).