Определите, работает ли код в Runtime App Engine (Java)

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

  •  30-09-2019
  •  | 
  •  

Вопрос

Как можно определить, работает ли какой-нибудь код (Serv-Let или простой класс) в режиме работы Google App Engine (Java), так что можно решить, использовать ли конкретные библиотеки App Engine или нет? Есть ли для этого какой-то надежный идентификатор среда выполнения?

Нет правильного решения

Другие советы

Вы можете проверить com.google.appengine.runtime.version имущество:

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

Если он настроен, это приложение.

Но вместо этого я бы рассмотрел использование отдельных целей сборки, чтобы избежать накладных расходов времени выполнения.

Подобно тому, что @reza написал, но немного уборщик:

использовать SystemProperty.environment.value() получить "Производство«При запуске на приложении двигателя и»Разработка«При запуске на сервере разработки.

Как сказано, что @mathew Флэшчен сказал, есть системные свойства, которые вы можете проверить, чтобы определить, присутствует ли GAE или нет. Эта ссылка дает детали.

Если вы пойдете по этому маршруту, ваше приложение должно быть построено так, чтобы основной код не имеет статических зависимостей на классах GAE; Т.е. нет импорта или других ссылок на пакеты и классы GAE в коде (разнесение названий классов GAE и т. Д. В строковых литералах). Все зависимости должны быть изолированы к коду, который загружается с использованием Class.forName(String) После того, как вы определили, присутствует ли GAE.

Это представляет собой нетривиальный накладной расход:

  • Вы, вероятно, в конечном итоге с дополнительным интерфейсом адаптера и (по крайней мере,) двумя реализациями для дел GAE и без GAE.
  • У вас есть (несовершеннолетние) накладные расходы в режиме работы динамически загрузки соответствующего класса при запуске и вызова через интерфейс адаптера.
  • Ваш файл JAR - это гораздо больше, в результате.
  • Теперь вы должны проверить на двух платформах.

С другой стороны, у вас есть потенциальное преимущество, имеющее одну банку, которая работает как в контекстах GAE, так и в немади.

Как объяснено здесь Вы можете проверить следующее свойство:

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

environment Это «производство» при запуске на приложении двигателя и «разработка» при запуске на сервере разработки.

Я не видел никакого типа безопасного решения здесь, так вот оно:

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

Есть еще один способ сделать это тоже. Это хорошо объясняется документацией Gaevfs о том, как написать портативный код: http://code.google.com/p/gaeevfs/wiki/applationStable

Интерес к вам - следующая строка:

boolean isGoogleAppEngine = getServletContext().getServerInfo().contains( "Google" );
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top