【问题标题】:Considering moving from Java/Spring MVC to Grails考虑从 Java/Spring MVC 迁移到 Grails
【发布时间】:2011-03-04 03:47:22
【问题描述】:

我目前正在使用 Java 和 Spring (MVC) 创建 web 应用程序,并且正在考虑迁移到 Grails。感谢您对以下内容的反馈/见解:

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

  2. 此 Web 应用广泛使用 CXF RESTful Web 服务,当前的 Java/Spring Web 应用使用捆绑的 CXF HTTP 客户端。我可以继续在 Grails 中使用 (Java) CXF HTTP 客户端吗?

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

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

  5. 我打算使用 Maven 作为项目管理工具;结合 groovy 和 java 使用 Maven 和 Grails 有什么问题吗?

编辑: 我正在考虑迁移到 Grails 以使 webapp 的 web 组件的开发“更快”,就像 Ruby-on-Rails。另外,我正在考虑 Grails 而不是说 Ruby-on-Rails,因为我想继续使用 JVM,而且我过去曾涉足过 Grails,而且它很容易上手和使用。

【问题讨论】:

    标签: java spring grails groovy


    【解决方案1】:
    1. 可能。 Grails 使用 Spring 的 ContextLoaderListener 类的子类,它在 web.xml 文件中配置。如果你让我知道你是如何使用 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 也无法在编译时进行类型检查。您只会在运行时发现它们。

    【讨论】:

    • Spring Security 核心插件是非常可定制的,请参阅第 7 章burtbeckwith.github.com/grails-spring-security-core/docs/manual - 您可以像在常规 Spring 应用程序中一样直接使用 Spring Security 而无需插件。除了 Datasources 插件(它将您的一些域类重新指向另一个数据库)之外,您还可以在 resources.groovy 中创建第二个 DataSource 并使用 groovy.sql.Sql 或 JdbcTemplate 访问它。
    • 感谢您的详细回复,这非常有帮助。顺便说一句,我通过在 contextConfigLocation 参数中指定它们来加载多个上下文,即“classpath:applicationContext.xml”@Burt:感谢提示安全选项;我不知道该插件是可定制的,或者我可以直接使用 Spring Security。
    【解决方案2】:

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

    但是,我真的不建议将整个应用程序移至 grails。如果您的 Web 开发人员不是 Java 专家,您也许只能移动 Web 层。

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

    【讨论】:

    • 您能否进一步解释您的意思:“服务层、数据访问等,最好保持纯 Java。”您是否建议我直接使用 Spring/JPA/Hibernate 而不是 GORM?
    • 我不同意。 GORM(连同插件架构)是 Grails 中最强大的部分,所以如果你不利用它,你还不如只做纯 Java。
    • @Jean Barmash 这是个人喜好。如果我不必(例如项目强制),我自己永远不会用动态语言写作,但这取决于。
    【解决方案3】:

    2) 是的,您可以按原样使用 CXF。在 CXF 之上有一个很好的层,叫做GroovyWS。我只用它来消费 SOAP 服务,但也许它也有一些用于 REST 的东西。它真的很容易使用。 为了使用 REST 服务,我使用了 HTTP Builder

    4) 是的。您可以继续使用例如spring config 用于配置数据源,或您今天执行的任何其他方式。多数据源没问题。

    5) 我最近尝试将 Grails (1.2.1) 与 Maven 一起使用。它可以工作,但是 Maven 和 Grails 在尝试进行依赖管理时都存在一些问题。文档可能是最糟糕的部分。由于一些主要的与 Maven 相关的 JIRA,我还没有尝试升级到 1.3,但是 1.3.2 指日可待,这些问题现在已经解决 :) 还会有 1.3.2 的 maven 原型。期待着。 “部署和解析来自 Maven 存储库的插件”是 Grails 1.3 的新特性之一,因此情况可能会更好。 1.3.2 的路线图说今天发布,但当时还有 8 个问题,所以我猜是明天,Grails 发布通常是准时的。如果你能等到,你可能会省去一些麻烦。

    【讨论】:

    • 感谢您让我了解 GroovyWS 和 HTTP Builder;两者似乎都非常有用,我将不得不进一步研究。
    【解决方案4】:

    如果您正在寻找快速的应用程序开发,但又不是特别热衷于 groovy,那么您应该研究一下 spring-roo。它提供了相同类型的 RAD 功能,但构建了一个完全标准的 java + ORM + spring-mvc 应用程序(在 roo 上没有实际的依赖项(运行时或编译))。它绝对没有grails那么成熟,但是你可能会发现它更适合你现有的静态类型java代码和现有ORM等经验。我在roo中只做过几个小宠物项目,但我一直很到目前为止印象深刻,特别是自定义生成的代码以及在编写和生成的代码之间来回移动是多么容易。最初的教程非常快速且很有启发性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-20
      • 2014-07-15
      • 2019-05-24
      • 2017-08-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多