App Engine UserService调用servlet抛出线程异常 - Eclipse java

时间:2017-07-06 16:04:28

标签: java eclipse google-app-engine gwt

我在Eclipse中有一个使用GWT的基本Google App Engine java项目。我按照说明在Eclipse中设置了应用程序引擎SDK和最新的GWT,并在Windows中设置环境变量路径以指向SDK根文件夹。

当通过单击起始页面上的登录链接(如web.xml文件中的定义)调用登录servlet时,调用将按预期路由到我的HttpServlet处理程序类。所以这很好。在代码中,我通过工厂方法创建UserService,但是任何调用(如isUserLoggedIn()或createLoginURL())都会导致异常。我希望这个问题很明显,但是我花了好几个小时试图找出造成这个问题的原因而没有运气:(

protected void doGet(HttpServletRequest req, HttpServletResponse resp)
      throws IOException, ServletException {

    UserService userService = UserServiceFactory.getUserService();
    if (userService.isUserLoggedIn()) {

以下是调用isUserLoggedIn()时控制台输出:

java.lang.IllegalStateException: Operation not allowed in a thread that is neither the original request thread nor a thread created by ThreadManager
at com.google.appengine.api.users.UserServiceImpl.getCurrentEnvironmentOrThrow(UserServiceImpl.java:152)
at com.google.appengine.api.users.UserServiceImpl.isUserLoggedIn(UserServiceImpl.java:96)

对于使用此类开发环境的人来说,这看起来是否熟悉?我希望它是项目中的简单设置或xml配置文件或我遗漏的东西。我几年前成功运行了类似的代码,但只是回到GAE工作,所以也许重要的事情随着servlet或项目设置而改变。非常感谢任何帮助和提示。

1 个答案:

答案 0 :(得分:1)

要使用App Engine API,您必须使用开发应用服务器在本地运行/调试您的应用。在Eclipse中,右键单击项目并选择 Run As> App Engine Debug As> App Engine 。有关详细信息,请参阅the docs

要启用GWT,您需要通过右键单击项目并选择 Configure>来配置GWT SDM Builder。启用GWT SDM构建器