Domanda

Come si può identificare se un certo codice (un serv-let o di una semplice classe) è in esecuzione su Google App Engine runtime (Java) in modo che si può decidere se utilizzare librerie specifiche del motore di app o no? C'è qualche affidabile ID runtime ambiente per questo?

Nessuna soluzione corretta

Altri suggerimenti

È possibile controllare la proprietà com.google.appengine.runtime.version:

String appEngineVersion = System.getProperty("com.google.appengine.runtime.version");

Se è impostato, di App Engine.

Ma vorrei considerare l'utilizzo di obiettivi di generazione separata, invece, al fine di evitare il sovraccarico di esecuzione.

simile a quello che ha scritto @Reza, ma un po 'più pulito:

uso SystemProperty.environment.value() per ottenere " Produzione " durante l'esecuzione su App Engine, e " sviluppo " durante l'esecuzione in server di sviluppo.

Come ha detto @ Matteo Flaschen, ci sono le proprietà di sistema che è possibile controllare per determinare se GAE è presente o non. Questo link fornisce i dettagli.

Se si va su questa strada, le esigenze applicative essere costruita in modo che il codice principale non ha dipendenze statiche sulle classi GAE; vale a dire nessuna importazione o altri riferimenti ai pacchetti GAE e le classi nel codice (a parte i nomi delle classi GAE, ecc in stringhe letterali). Tutte le dipendenze devono essere isolati in codice che viene caricato utilizzando Class.forName(String) DOPO aver determinato se o non GAE è presente.

Questo rappresenta un overhead non banale:

  • È probabilmente finire con un'interfaccia adattatore supplementare e (almeno) due implementazioni per i casi GAE e non GAE.
  • Hai il (minore) le spese generali di runtime di caricare dinamicamente relativa classe in fase di avvio, e chiamando attraverso l'interfaccia dell'adattatore.
  • Il file JAR è che molto più grande di conseguenza.
  • A questo punto è necessario testare su due piattaforme.

D'altra parte, si ha il potenziale vantaggio di avere un JAR che le opere in contesti GAE e non GAE.

Come spiegato qui è possibile controllare la seguente proprietà:

String environment = System.getProperty(
    "com.google.appengine.runtime.environment")

environment è "Production" durante l'esecuzione su App Engine, e "sviluppo" durante l'esecuzione in server di sviluppo.

ho visto nessuna soluzione type-safe qui ecco che è:

if (SystemProperty.environment.value() == SystemProperty.Environment.Value.Production) {
    // The app is running on App Engine...
}

C'è un altro modo per fare questo. Questo è spiegato bene nella documentazione del gaevfs su come scrivere codice portabile: http://code.google .com / p / gaevfs / wiki / ApplicationPortability

Di interesse per voi è la seguente riga:

boolean isGoogleAppEngine = getServletContext().getServerInfo().contains( "Google" );
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top