【问题标题】:detect AppEngine vs basic server检测 AppEngine 与基本服务器
【发布时间】:2013-05-13 13:57:46
【问题描述】:

我正在开发一个网络应用程序,以在 Google 的 AppEngine 或具有文件存储的基本服务器上运行(它可能不会保持这种状态,但这是当前状态)。

如何检测 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.

【问题讨论】:

    标签: google-app-engine classloader blobstore


    【解决方案1】:

    您可以使用一些东西。

    您可以检查运行时环境以检查 App Engine 的运行版本。查看运行时文档中有关“环境”的部分:https://developers.google.com/appengine/docs/java/runtime

    您也可以做您正在做的事情,并尝试使用 SDK API 函数进行调用(而不仅仅是检查类的存在)并捕获异常。这可能会对性能产生负面影响,因为您要进行额外的 RPC。

    您也可以检查 GAE 特定请求标头的请求标头。

    【讨论】:

    • 谢谢。即使我最终没有这样做,我也会接受你的回答:我使用服务器本地配置文件来指定它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-22
    • 1970-01-01
    • 1970-01-01
    • 2011-03-06
    • 2017-08-09
    • 2019-01-11
    • 2012-11-10
    相关资源
    最近更新 更多