1

我有一个带有 nosql 数据库的 GWT+GAE 应用程序,该应用程序在 Google App Engine 和 eclipse + gwt 插件中运行良好,开发环境中带有嵌入式码头服务器。现在在生产环境中,出于多种原因,我必须将此应用程序部署在外部自我管理的服务器上,如 Tomcat 或 JBoss。我没有运气地遵循许多教程和提示和技巧,例如:

https://developers.google.com/web-toolkit/doc/latest/DevGuideCompilingAndDebugging#How_do_I_use_my_own_server_in_development_mode_instead_of_GWT%27s

https://groups.google.com/forum/?fromgroups=#!topic/google-appengine-java/LYySmvqdbO8

Link1 Link2 Link3 Link4 Link5

当我在外部服务器(即 tomcat 或 jetty)上部署我的应用程序时,它会正确启动,但是当我使用数据库连接进行调用时,会出现以下错误:

Caused by: java.lang.NullPointerException: No API environment is registered for this thread.
    at com.google.appengine.api.datastore.DatastoreApiHelper.getCurrentAppId(DatastoreApiHelper.java:86)
    at com.google.appengine.api.datastore.DatastoreApiHelper.getCurrentAppIdNamespace(DatastoreApiHelper.java:96)
    at com.google.appengine.api.datastore.Query.<init>(Query.java:171)
    at com.google.appengine.api.datastore.Query.<init>(Query.java:102)
    at com.googlecode.objectify.impl.QueryImpl.<init>(QueryImpl.java:69)
    at com.googlecode.objectify.impl.AsyncObjectifyImpl.query(AsyncObjectifyImpl.java:354)
    at com.googlecode.objectify.impl.ObjectifyImpl.query(ObjectifyImpl.java:207)
    at com.beoui.geocell.ObjectifyGeocellQueryEngine.query(ObjectifyGeocellQueryEngine.java:52)
    at com.beoui.geocell.GeocellManager.proximitySearch(GeocellManager.java:381)

如何部署到 Tomcat、JBOSS 或 Jetty 等外部服务器?还是根本不可能

我的看法是:应用程序是否在eclipse嵌入式jetty上正确运行,在某种程度上可以配置一个外部jetty分布来运行应用程序

4

1 回答 1

1

GAE 附带一组服务,这些服务基本上是隐藏在 API 后面的大型外部系统。本地开发服务器只是一个带有嵌入式数据库和模仿生产 GAE 的 API 层的 Jetty。您不能将开发服务器用于生产目的 - 它不是为此而设计的,并且没有生产系统的并发性和可靠性特性。

如果您想在其他地方运行 GAE 代码然后是生产 GAE 服务,请查看AppScaleCapeDwarf

此外,您提供的大多数链接都涉及在 Tomcat/Jetty 上运行 GWT 应用程序,但您在使用 AppEngine 时遇到问题。GWTAppEngine是两种独立的技术(可以一起工作,但不是必需的)。

于 2013-04-10T18:43:44.107 回答