我即将开始一个需要在Tomcat服务器上运行的Web应用项目。在选择编程语言方面,由于需要类型安全性,我选择了Scala,而我工作的地方提供的另一种选择是Groovy。现在我面临的任务是选择适合这个项目的正确工具。
我将需要开发的项目只能通过JSON API访问。它将与自己的数据库以及两个外部服务进行交互,这些外部服务分别公开JSON和XML API。我还需要能够安排定期作业,我的应用程序将执行与这些外部服务的各种同步任务。
对于数据库,我希望能够在Scala中定义我的模型并自动生成架构。如果需要更改我的模型,则需要有迁移来处理。
对于这个应用程序,我正在尝试评估Lift、Play! 2和Scalatra。
Lift 是我的首选。它是这三个项目中最成熟的,似乎被认为是高度安全的(我不想在安全性上妥协)。此外,它似乎是Scala中最好的JSON处理库。尽管如此,在浅尝辄止后,我不确定这是否是正确的选择。文档并不是我见过的最好的文档。此外,Record + Squeryl 对我来说是比Mapper更好的抽象,但是这种用法的文档却更加缺乏。最后,尽管Lift肯定可用于创建Web服务,但它似乎其真正的优势在于状态处理,因此我并不确定对于我的项目是否需要额外的复杂性。
Play! 2的文档更好,而且对我来说更熟悉(我有Django背景)。再者,它默认的数据库抽象并不能令我满意:ANORM依赖于SQL,这不利于类型检查。我必须使用Squeryl,但不确定这种用例的文档是否一样好。此外,部署Play! 2应用程序比我想象的要复杂。我们必须在生产服务器上安装Play!,但我不确定这在我工作的地方是否可行。否则,有一个插件可以使其与Servlet容器配合使用,但它非常新,我不确定它有多稳定/可靠。
最后还有使用Scalatra的选项。Scalatra设置非常容易,并且专门设计用于创建Web服务。让步的是,Scalatra没有提供太多功能。它不与现有ORM集成或建议如何组织应用程序的模型部分,也不帮助设计cron或命令行任务。我也不确定该项目的长期未来。
你认为哪个选项对我的任务最好?