2010-06-15 116 views
13

我目前使用Java & Spring(MVC)创建一个webapp,我正在考虑转向Grails。我会很感激以下意见/见解:考虑从Java/Spring MVC迁移到Grails

  1. 我在当前的Java /春天的webapp,我通过web.xml的ContextLoaderListener加载多个应用程序上下文; Grails中可能有多个应用程序上下文吗?如果,是的,如何?

  2. 该web应用程序广泛使用CXF restful web服务,而当前的Java/Spring webapp使用捆绑的CXF HTTP客户端。我可以继续在Grails中使用(Java)CXF HTTP客户端吗?

  3. 我使用UserDetails和UserDetailsS​​ervice的自定义实现实现了Spring Security,我可以在Grails中“按原样”重新使用这些实现,还是必须重新实现它们?

  4. 有一个我依赖Spring的jdbc模板(而不是可用的ORM)以及我在应用上下文中定义的额外数据源的实例,我可以在Grails中重新使用它吗?

  5. 我打算使用Maven作为项目管理工具;有什么问题在使用Groovy和Java的组合时使用Maven?

编辑: 我考虑转移到Grails的,使Web应用程序的Web组件的发展 “快”,一拉的Ruby-on-Rails的。另外,我正在考虑Grails,而不是说Ruby-on-Rails,因为我想继续使用JVM,并且我在过去使用过Grails,并且它的拾取和使用相当简单。

回答

6
  1. 也许吧。 Grails使用它在web.xml文件中配置的Spring的ContextLoaderListener类的子类。如果你让我知道你是如何用Spring MVC做的话,我可以更精确地回答。

  2. 是的。你甚至可能会喜欢CXF插件,虽然我不能为它担保:

    http://grails.org/plugin/cxf

  3. 您应该能够使用它们原样。但是,您可能想要检查这是否可以通过Spring Security插件轻松完成。我相信是这样,但是你可以从插件的作者Burt Beckwith那里得到明确的答案。

  4. 是的。您还可以获得Hibernate会话工厂来执行原始Hibernate的东西。 GORM还可以使用多个数据源的工作:

    http://grails.org/plugin/datasources

    另一个伯特·贝克威思一个:)

  5. 这取决于你所说的“Groovy和Java的结合”是什么。您可以使用Maven构建Grails项目,但整合并不完全平滑。如果您的Grails项目中包含Java和Groovy,则会自动处理。

为了回应Bozho,我使用了标准的Grails服务+ GORM,并且不会以任何其他方式进行。请注意,如果您将Java用于服务和域模型,则不会自动重新加载服务。您也失去了Groovy带来的表现力和简洁性的好处。

如果您愿意,您可以在Grails服务中使用静态类型,以便您的IDE更易于提供代码完成。它还可以提供有关它无法识别的属性和方法的提示(这将对应于Java编译错误)。也就是说,即使使用静态类型,Groovy也不能在编译时进行类型检查。你只会在运行时发现它们。

+0

Spring Security核心插件是非常可定制的,请参阅http://burtbeckwith.github.com/grails-spring-security-core/docs/manual/上的第7章 - 您可以直接使用Spring Security而无需插件在普通的Spring应用程序中。 除了Datasources插件(将一些域类重新指向另一个数据库)之外,您还可以在resources.groovy中创建第二个数据源,然后使用groovy.sql.Sql或JdbcTemplate访问它。 – 2010-06-16 16:52:31

+0

感谢您的详细回复,它是非常有用的.Btw,我通过在contextConfigLocation参数中指定它们来加载多个上下文,即“classpath:applicationContext.xml” @Burt:感谢您对安全性的指导选择;我不知道这个插件是可定制的,或者我可以直接使用Spring Security。 – MDS 2010-06-18 00:22:43

0

你可以在grails中完成所有这些事情。它支持所有现有的Java类和弹簧配置(grails是在spring mvc上构建的)

但是,我真的不建议将整个应用程序移到grails中。如果您拥有不是Java专家的Web开发人员,则可以只移动Web层。

服务层,数据访问等更好地保持纯Java。也就是说,只有你的web控制器 - 收集用户输入的组件处理http请求和会话,应该使用grails。剩下的 - 无状态的服务类和你的域模型最好是Java。这是我的看法,但我已经有一些Grails的经验,静态键入服务层将为您节省很多麻烦。

+0

您能否进一步解释您的意思:“服务层,数据访问等等,更好地保持纯Java。”你是否建议我直接使用Spring/JPA/Hibernate而不是GORM? – MDS 2010-06-16 14:17:05

+0

是的。看到更新。 – Bozho 2010-06-16 14:39:49

+0

我不同意。 GORM(与插件架构一起)是Grails中最强大的部分,所以如果你没有充分利用它,那么你可能只是做纯Java。 – 2010-06-16 16:45:34

0

2)是的,您可以按原样使用CXF。 CXF顶部有一个很好的图层,叫做GroovyWS。我只用它来消费SOAP服务,但也许它对REST也有帮助。它非常易于使用。 对于消费REST服务,我使用了HTTP Builder

4)是的。您可以继续使用例如用于配置数据源的弹簧配置,或者您今天执行的任何其他方式。多个数据源不成问题。

5)我最近尝试过使用Grails(1.2.1)和Maven。它可行,但Maven和Grails都试图进行依赖管理时遇到了一些问题。文档可能是最糟糕的部分。我还没有试过升级到1.3版本,因为一些主要的Maven相关的JIRA,但是1.3.2版本已经到了,现在这些问题已经得到解决了:)还会有1.3.2 maven原型。期待这一点。 “Maven仓库插件的部署和解决”是Grails 1.3的新功能之一,因此事情可能会更好。 1.3.2的发展蓝图今天发布,但在发言时还剩下8个问题,所以我的猜测是明天,Grails的发布通常是按时发布的。如果你可以等待,你可能会为自己节省一些麻烦。

+0

感谢您告诉我有关GroovyWS和HTTP Builder的信息;这两个看起来都非常有用,我必须进一步研究。 – MDS 2010-06-18 00:22:06

0

如果您正在寻找快速的应用程序开发,但对groovy没有特别的兴趣,您应该考虑一下spring-roo。它提供了相同类型的RAD功能,但是构建了一个完全标准的java + ORM + spring-mvc应用程序(它在roo上没有实际的依赖关系(运行时或编译))。它绝对不像grails那么成熟,但是你可能会发现它更适合你现有的静态类型的java代码和现有的ORM等经验。我只在roo中完成了一些小型的宠物项目,但我一直很印象深刻,尤其是如何自定义生成的代码并在写入和生成的代码之间来回移动。最初的教程非常迅速,颇有启发。