Frage

Wie kann man erkennen, ob ein Code (ein serv-lassen oder eine einfache Klasse) läuft auf Google App Engine Laufzeit (Java), so dass man sich entscheiden, ob App-Engine spezifische Bibliotheken zu verwenden, oder nicht? Gibt es eine zuverlässige Laufzeitumgebung ID für das?

Keine korrekte Lösung

Andere Tipps

Sie können die com.google.appengine.runtime.version Eigenschaft überprüfen:

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

Wenn es gesetzt, es App Engine.

Aber ich hielt separate Build-Ziele verwendet stattdessen den Runtime-Overhead zu vermeiden.

ähnlich dem, was @Reza schrieb, aber etwas sauberer:

Verwendung SystemProperty.environment.value() zu bekommen " Produktion ", wenn auf App Engine ausgeführt wird, und " Entwicklung ", wenn in dem Entwicklungsserver ausgeführt wird.

Wie @Matthew Flaschen sagte, gibt es Systemeigenschaften, dass Sie überprüfen können, um zu bestimmen, ob GAE vorhanden ist oder nicht. Dieser Link die Details gibt.

Wenn Sie unten auf dieser Route gehen, Ihre Anwendungsanforderungen so gebaut werden, dass der Hauptcode keine statischen Abhängigkeiten von den GAE Klassen hat; d.h. keine Ein- oder andere Hinweise auf GAE Pakete und Klassen in dem Code (außer GAE Klassennamen, usw. in Stringliterale). Alle Abhängigkeiten sind isoliert, um Code werden, die Class.forName(String) mit geladen wird, nachdem Sie festgestellt haben, ob oder ob nicht GAE vorhanden ist.

Dies ist ein nicht-trivialen Kopf:

  • Sie werden wahrscheinlich mit einer zusätzlichen Adapter-Schnittstelle und (mindestens) zwei Implementierungen für die GAE und nicht-GAE Fälle enden.
  • Sie haben die (kleinere) Laufzeit Gemeinkosten bekommen dynamisch die entsprechende Klasse beim Start geladen wird, und mit der Aufforderung durch die Adapter-Schnittstelle.
  • Ihre JAR-Datei ist, dass viel größer als Folge.
  • Sie jetzt auf zwei Plattformen zu testen.

Auf der anderen Seite, haben Sie den möglichen Vorteil haben eine JAR zu haben, dass die Arbeiten in beiden GAE und nicht-GAE Kontexten.

Wie bereits erläutert hier Sie die folgende Eigenschaft überprüfen:

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

environment ist "Produktion", wenn sie auf App Engine ausgeführt wird, und "Entwicklung", wenn in dem Entwicklungsserver ausgeführt wird.

Ich sah keine typsichere Lösung, die hier so ist es hier:

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

Es gibt einen anderen Weg, dies auch zu tun. Dies erklärt sich auch in gaevfs in der Dokumentation, wie portablen Code schreiben: http://code.google .com / p / gaevfs / wiki / ApplicationPortability

Von Interesse für Sie ist die folgende Zeile:

boolean isGoogleAppEngine = getServletContext().getServerInfo().contains( "Google" );
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top