2013-05-13 51 views
0

我正在開發一個web應用程序,以便在Google的AppEngine或帶文件存儲的基本服務器上運行(它可能不會保持這種狀態,但這是當前狀態)。檢測AppEngine vs基本服務器

如何檢測AppEngine服務(最重要的是blobstore)在運行時是否可用?

我已經使用如下代碼嘗試:

try{ 
     Class.forName("com.google.appengine.api.blobstore.BlobstoreServiceFactory"); 
     logger.info("Using GAE blobstore backend"); 
     return new GAEBlobService(); 
    }catch(ClassNotFoundException e){ 
     logger.info("Using filesystem-based backend"); 
     return new FileBlobService(); 
    } 

,但它不工作,因爲BlobstoreServiceFactory可在編譯時。如果嘗試使用沒有GAE服務器的GAE blobstore,則失敗如下:

com.google.apphosting.api.ApiProxy$CallNotFoundException: The API package 'blobstore' or call 'CreateUploadURL()' was not found. 

回答

0

有幾件事可以使用。

您可以檢查運行時環境以檢查App Engine的正在運行的版本。檢查運行時文檔中有關「環境」的部分:https://developers.google.com/appengine/docs/java/runtime

您也可以做你正在做的事情,並嘗試使用SDK API函數進行調用(而不是僅檢查是否存在類)並捕捉異常。這可能會對性能產生負面影響,因爲您正在製作額外的RPC。

您也可以檢查GAE特定請求標頭的請求標頭。

+0

謝謝。即使我沒有這樣做,我也會接受你的答案:我使用服務器本地配置文件來指定它。 – dhardy 2013-05-28 18:51:11