过去2天我一直在研究这个问题,差不多3天了。我觉得我已经在阳光下搜索了所有关于这个问题的东西(包括这些论坛),而且几乎所有的都是tutorialed-out。在我详细讨论这个问题之前,我只想简要概述一下项目的范围和计划,看看哪种方案最适合:
- 大型申请,非平凡的
-50+ DB表
- 大用户群
- 用户管理/认证/会话
-transactions
- 安全
-MVP(根据GWT建议)
- 专注于性能和可扩展性(自然:),毕竟我使用GWT)
- 更喜欢坚持使用Java服务器端
我还阅读并观看了大型应用程序(Google / GWT)架构的所有最佳实践。在上一次谈话中,我发现涉及GWT的最佳架构实践是由Ray Ryan在2010年发现的,他在声明他们认为JavaBeans和属性更改事件的效果不是很好,所以最好将DTO用于模型。
在我搜索中出现的两个框架是Seam和Spring。
坚持使用MVP,我的域名大部分都是具有胖客户端的数据服务。但是,我仍然希望服务器端具有安全性和会话功能,因为我希望用户能够保持状态,即使他们不使用cookie,例如他们最终会刷新。我还希望有一个像Hibernate这样的ORM来管理很多事务方面。我还想使用RequestFactory,并且一直在考虑使用Spring。
我想我可以将问题缩小到:
考虑到上述情况,推荐的应用程序堆栈对于大型GWT应用程序是什么,特别是服务器端和与GWT的集成?
这是我这个规模的第一个项目,我想做的最后一件事就是在失去大量时间和精力的情况下走错路。非常感谢您的帮助,我真的只是想弄清楚这一点,所以我可以回到编码而不是谷歌搜索地球的两端;)。
-Seth
我已经看过Best architecture for applications in GWT,我发现它可能是最接近这个,但它并没有真正回答我的问题,我觉得我的目标更具针对性更具体的用例< / p>
答案 0 :(得分:3)
我没有使用Seam
的任何经验,但是我正在使用前端的GWT
和后端的Spring
处理一个相对较大的项目,到目前为止它确实有效好(RequestFactory,JPA2 / Hibernate,PostgreSQL)。顺便说一句,你也可以结账JBoss Erai
使用Spring
的好处是,添加新功能非常简单。例如,我添加了对 openid身份验证的支持,我所要做的就是在maven中定义一个额外的依赖项,在配置文件中添加一些额外的行,现在通过google,facebook,twitter帐户进行身份验证。框。
这种分层方法具有很多优点。
但是如果你真的坚持开发GWT应用程序(MVP等)的最佳实践,你最终会得到两个或多或少的独立项目。这有点不同于你开发传统的Spring MVC / Web Flow应用程序,你只有一个或多或少的项目(顺便说一句:查看Thomas Broyer的gwt maven archetypes,它可以帮助你找到一个好的项目结构)。
除此之外,当您在客户端使用MVP时,您的后端实际上仅用作向GWT客户端提供数据的数据服务。所有flow synchronization都将在您的GWT应用中处理
因此,您可能不会使用许多后端功能(即Spring MVC
的MVC部分)
我使用RequestFactory
进行后端和前端之间的数据通信,对于CRUD
应用程序,这非常有用(它也支持Android btw)。
但是,如果您想支持更多客户,则可能更倾向于使用Restless
方法。再次在后端使用Spring
,向您的应用添加Restless
支持相对容易,并且有几个第三方库支持GWT中的休息服务(RestyGWT,{{3 }})。
以下是关于开发过程的一些想法:
maven
。它使团队开发变得非常容易,并将您的项目拆分为可管理的单元/模块(例如,GWT maven应用程序可以分为前端部分(GWT),后端(Spring)部分和共享(comong DTO,等)部分。Spring
。相对较大的Spring
应用可能会有相对较长的启动时间。 JRebel可帮助您在不重新加载/重新启动应用程序的情况下更改后端中的类。它节省了大量时间。 Spring Security
中有 ACL 类,它们适用于简单的用例,但是如果您有复杂的用例(例如根据ACL条目过滤项目列表),这可能非常复杂如果你想有效地做到这一点。另一方面,Spring
使用另一个库(即Apache Shiro)相对容易。此外,您必须确保在前端显示正确的控件(即,如果用户没有编辑权限,则不显示“编辑”按钮等)。使用JSP很简单,因为您在后端创建UI(HTML页面)。在GWT
你必须自己做。