アプリエンジンランタイム(Java)で実行されているコードかどうかを特定します
-
30-09-2019 - |
質問
Google App Engine Run-Time(Java)で実行されているコード(Serv-LetまたはSimple Class)が実行されているかどうかをどのように識別できますか?そのために信頼できるランタイム環境IDはありますか?
正しい解決策はありません
他のヒント
確認できます com.google.appengine.runtime.version
財産:
String appEngineVersion = System.getProperty("com.google.appengine.runtime.version");
設定されている場合、アプリエンジンです。
ただし、ランタイムオーバーヘッドを避けるために、代わりに個別のビルドターゲットを使用することを検討します。
@Rezaが書いたものと同様ですが、少しきれいです:
使用する SystemProperty.environment.value()
取得するため "製造「アプリエンジンで実行するとき、そして」発達「開発サーバーで実行するとき。
@Matthew Flaschenが言ったように、GAEが存在するかどうかを判断するために確認できるシステムプロパティがあります。 このリンク 詳細を示します。
このルートを下る場合、メインコードにGAEクラスに静的な依存関係がないように、アプリケーションを構築する必要があります。 IEコード内のGAEパッケージやクラスへのインポートやその他の参照はありません(文字列リテラルのGAEクラス名など)。すべての依存関係は、使用してロードされるコードに分離する必要があります Class.forName(String)
GAEが存在するかどうかを判断した後。
これは、自明でないオーバーヘッドを表します。
- おそらく、追加のアダプターインターフェイスと、(少なくとも)GAEおよび非GAEケースの2つの実装になることになるでしょう。
- スタートアップで関連するクラスを動的にロードし、アダプターインターフェイスを通過する(マイナーな)ランタイムオーバーヘッドがあります。
- その結果、JARファイルははるかに大きくなります。
- これで、2つのプラットフォームでテストする必要があります。
一方、GAEと非GAEの両方のコンテキストで動作する1つの瓶を持つという潜在的な利点があります。
説明されているように ここ 次のプロパティを確認できます。
String environment = System.getProperty(
"com.google.appengine.runtime.environment")
environment
App Engineで実行するときは「生産」、開発サーバーで実行するときは「開発」です。
ここでタイプセーフソリューションは見られなかったので、ここにあります:
if (SystemProperty.environment.value() == SystemProperty.Environment.Value.Production) {
// The app is running on App Engine...
}
これを行う別の方法もあります。これは、ポータブルコードの書き方に関するGaevfsのドキュメントでよく説明されています。 http://code.google.com/p/gaevfs/wiki/applicationportability
あなたにとって興味深いのは、次の行です。
boolean isGoogleAppEngine = getServletContext().getServerInfo().contains( "Google" );