将jetty8网络应用迁移到谷歌应用引擎

时间:2012-02-08 14:12:07

标签: google-app-engine jsf-2 jetty jersey

我目前在jetty8中部署了一个Web应用程序,该应用程序基于jsf2,jersey和atmosphere。我想迁移到GAE,但以下问题出现在我面前:

GAE是否支持jetty8?

每天都有一个servlet定期执行数据库清理任务。为了做到这一点,任务在开始时生成并在循环中延迟,以便每24小时运行一次。 我读过GAE不允许生成任务。还有另一种方法可以做到并得到GAE的支持吗?

2 个答案:

答案 0 :(得分:4)

我不知道GAE是否特别支持Jetty的版本8,但它在Jetty实例上运行。

您必须将GAE视为PAAS(平台即服务),而不是IAAS(基础架构即服务)提供商。您必须查看他们提供的服务并检查它们是否符合您的要求。有关一般概述,请参阅What Is Google App Engine?;有关特定框架兼容性,请参阅Java Enterprise Edition (Java EE) Technologies。 GAE不是常见的JRE,它有一组有限的支持类:The JRE Class White List。这可能进一步限制兼容性。我不知道Atmosphere是否会运行。我不知道你需要什么Jetty 8细节。 WebSockets的?不可以。您可以改用渠道:The Channel API (Java)

不允许长时间运行任务(24小时延迟)。但您可以开始计划任务,请参阅此处:Scheduled Tasks With Cron for Java

请求的执行时间(60秒)有限,因此您无法以这种方式运行长时间运行的任务。但是你可以产生更长时间运行(10分钟)的后台任务,请参见此处:The Task Queue Java API

重要提示:请查看quotas。当他们惩罚某些应用程序行为时,您需要调整您的应用程序。这可以完全改变您的应用程序设计!

根据我的经验,迁移到GAE是一种激烈的参与。 GAE不适合替代其他托管解决方案。如果您想要这样的IAAS提供商(如Amazon EC2)更适合。

答案 1 :(得分:2)

所有好的信息,只需一次更正 - 用户请求现在限制为60秒而不是30秒。

还应注意,存在以下限制:

  • 根据Java EE规范,HTTP会话生命周期并未得到真正的尊重。例如,如果更改会话中对象的值,则必须重新设置它以使数据在所有实例中传播。
  • 您不能生成自己的线程 - 这可能会导致某些JSF实现出现问题,因此可能需要与您的JSF提供程序一起检查它们是否支持GAE。我知道最新版本的JBoss RichFaces支持GAE。
  • GAE频道的氛围原生支持原定于v0.8,但似乎已从该版本中删除。

您打算如何将数据模型迁移到GAE数据存储区? GAE数据存储确实不适合基于JPA / JDO的模型,因为它与普通关系数据库有很大不同。