【发布时间】:2018-03-27 19:57:04
【问题描述】:
我想知道 AppEngine 柔性环境是否支持来自 com.google.api-client 的 AbstractAppEngineAuthorizationCodeCallbackServlet。
我正在从已弃用的环境 (vm:true) 迁移到最新版本的灵活环境 (env:flex)。
当访问从 AbstractAppEngineAuthorizationCodeServlet 扩展的我的一个 servlet 时,流程可以完美运行,并且重定向到从 AbstractAppEngineAuthorizationCodeCallbackServlet 扩展的其他 servlet。现在,当它尝试运行时:
TokenResponse response = flow.newTokenRequest(code).setRedirectUri(redirectUri).execute();
(来自 AbstractAuthorizationCodeCallbackServlet 类的 doGet 内的行)
它返回一个:
com.google.apphosting.api.ApiProxy$CallNotFoundException: Can't make API call urlfetch.Fetch in a thread that is neither the original request thread nor a thread created by ThreadManager
更新
我可以在 Cloud Console 上检查我的实例确实在 Flexible 上运行。
【问题讨论】:
-
Per cloud.google.com/appengine/docs/standard/java/javadoc/com/…,它似乎是一个 App Engin estandard env API。这可能就是您收到错误的原因。其实错误信息我很熟悉,是标准env的限制:cloud.google.com/appengine/docs/standard/java/…。我认为您的代码仍在以某种方式使用 App Engine 标准 API。
-
@ChanseokOh 根据上述文件,我同意你的看法。但是有一些方法可以检查服务的当前环境是什么?因为根据迁移文档,除了新环境所需的其他更改之外,定义我使用的环境是 app.yaml 上的 env:flex 。
-
一种方法是转到 console.cloud.google.com,选择您的项目 > App Engine > 版本。 “环境”列将为“env: flex”显示“flexible”。根据你所说,我敢打赌你是在灵活的环境中。
-
是的。但我在检查之前的版本,所有版本都显示“灵活”。似乎参数“VM:true”实际上已经在设置柔性环境。我现在看到我只是从旧版本的灵活版本迁移到最后一个版本,而不是从标准版本迁移到灵活版本......但仍然不知道 lib 发生了什么。
-
"vm: true" 和 "env: flexible" 肯定是不同的运行时环境。 “vm: true”设计的环境在历史上被称为“托管虚拟机”,它作为有效的运行时和品牌都已失效:cloud.google.com/appengine/docs/flexible/java/upgrading托管虚拟机有点类似于灵活的环境,但它们不是一样。
标签: jsp google-app-engine authentication app-engine-flexible