déterminer si le code est en cours d'exécution sur l'exécution du moteur d'application (Java)

StackOverflow https://stackoverflow.com/questions/4140747

  •  30-09-2019
  •  | 
  •  

Question

Comment peut-on déterminer si un code (SERV-let ou une classe simple) est en cours d'exécution sur l'exécution Google App Engine (Java) de sorte que l'on peut décider d'utiliser les bibliothèques spécifiques de moteur d'application ou non? Est-il un ID d'exécution fiable enviroment pour cela?

Pas de solution correcte

Autres conseils

Vous pouvez vérifier la propriété com.google.appengine.runtime.version:

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

Si elle est définie, il est App Engine.

Mais j'envisager d'utiliser des objectifs de construction séparés au lieu, afin d'éviter les frais généraux d'exécution.

similaire à ce qui a écrit @Reza, mais un peu plus propre:

Utilisation SystemProperty.environment.value() pour obtenir " Production " lors de l'exécution sur App Engine, et " Développement " lors de l'exécution sur le serveur de développement.

Comme dit @Matthew Flaschen, il y a des propriétés du système que vous pouvez vérifier pour déterminer si GAE est présent ou non. Ce lien donne les détails.

Si vous allez dans cette voie, vos besoins d'application à construire de telle sorte que le code principal n'a pas de dépendances de statiques sur les classes GAE; à-dire pas d'importations ou d'autres références à des paquets et des classes GAE dans le code (à l'exception des noms de classe GAE, etc dans littéraux cordes). Toutes les dépendances doivent être isolées au code qui est chargé à l'aide Class.forName(String) après que vous avez déterminé si oui ou non GAE est présent.

Cela représente un surcoût non négligeable:

  • Vous allez probablement finir avec une interface adaptateur supplémentaire et (au moins) deux implémentations pour les cas GAE et non GAE.
  • Vous avez des frais généraux d'exécution de chargement dynamique de la classe concernée au démarrage (mineur), et d'appeler via l'interface adaptateur.
  • Votre fichier JAR est beaucoup plus en conséquence.
  • Vous avez maintenant à tester sur deux plates-formes.

Par contre, vous avez l'avantage potentiel d'avoir un JAR qui fonctionne dans les deux contextes GAE et non GAE.

Comme expliqué vous pouvez vérifier la propriété suivante:

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

environment est "Production" lors de l'exécution sur App Engine, et "développement" lors de l'exécution sur le serveur de développement.

Je l'ai vu ici est donc ici pas de solution de type-safe:

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

Il y a une autre façon de le faire aussi bien. Ceci est bien expliqué dans la documentation gaevfs sur la façon d'écrire du code Portable: http://code.google .com / p / gaevfs / wiki / ApplicationPortability

vous intéresser est la ligne suivante:

boolean isGoogleAppEngine = getServletContext().getServerInfo().contains( "Google" );
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top