identificar si es el código que se ejecuta en tiempo de ejecución de App Engine (Java)

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

  •  30-09-2019
  •  | 
  •  

Pregunta

¿Cómo se puede identificar si algún código (un serv-dejó o una clase simple) se ejecuta en Google App Engine tiempo de ejecución (Java) para que uno pueda decidir si utilizar bibliotecas específicas de aplicación del motor o no? ¿Hay alguna identificación en tiempo de ejecución entorno fiable para eso?

No hay solución correcta

Otros consejos

Puede comprobar la propiedad com.google.appengine.runtime.version:

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

Si se ha establecido, es de App Engine.

Pero sería considerar el uso de tipos de generación separadas en vez, para evitar la sobrecarga de tiempo de ejecución.

similar a lo que escribió @Reza, pero un poco más limpia:

El uso SystemProperty.environment.value() llegar " Producción " cuando se ejecuta en App Engine, y " Desarrollo " cuando se ejecuta en el servidor de desarrollo.

Como dijo @Matthew Flaschen, hay propiedades del sistema que se puede comprobar para determinar si GAE está presente o no. Este enlace da los detalles.

Si vas por esta ruta, sus necesidades de aplicación que se construirá de manera que el código principal no tiene dependencias estáticas en las clases GAE; es decir, no hay importaciones o referencias a otros paquetes GAE y clases en el código (aparte los nombres de clase GAE, etc en literales de cadena). Todas las dependencias tienen que ser aislado de código que se carga utilizando Class.forName(String) vez que haya determinado si o no GAE está presente.

Esto representa una sobrecarga no trivial:

  • Usted probablemente va a terminar con una interfaz de adaptador adicional y (al menos) dos implementaciones para los casos GAE y no GAE.
  • Tienes el (menor) los gastos generales de ejecución de cargar dinámicamente la clase correspondiente en el arranque, y llamando a través de la interfaz de adaptador.
  • El archivo JAR es mucho más grande que como consecuencia de ello.
  • Ahora tiene a prueba en dos plataformas.

Por otra parte, usted tiene la ventaja potencial de tener un JAR que funciona en ambos contextos GAE y no GAE.

Como se explicó aquí se puede comprobar la siguiente propiedad:

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

environment es "Producción" cuando se ejecuta en App Engine, y "Desarrollo" cuando se ejecuta en el servidor de desarrollo.

vi ninguna solución de tipo seguro aquí, así que aquí está:

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

Hay otra manera de hacerlo así. Esto se explica bien en la documentación de gaevfs sobre cómo escribir código portable: http://code.google .com / p / gaevfs / wiki / ApplicationPortability

Por su interés es la siguiente línea:

boolean isGoogleAppEngine = getServletContext().getServerInfo().contains( "Google" );
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top