我有一个Java\Spring\Hibernate应用程序 - 完整的域类,基本上是Hibernate POJO
我认为可以在Grails中编写一些功能.
我希望重用我在主Java应用程序中创建的域类
这样做的最佳方法是什么?
我应该编写扩展Java类的新域类吗?这听起来很俗气或者我可以在Java域类中生成'控制器吗?
什么是周围的Grails\Groovy中重用的Java域对象的最佳实践,我相信一定有其他Grails中写一些作品\常规
如果你知道一个关于这种集成的教程,那就太棒了!
PS:我是grails-groovy的新手,所以可能会错过明显的.谢谢 !!!
Joh*_*ahl 19
了解Groovy和Grails在与现有Java代码集成方面表现出色的表现,我想我可能比迈克尔对你的选择更加乐观.
首先,您已经在使用Spring和Hibernate,并且由于您的域类已经是POJO,因此它们应该易于集成.您可能拥有的任何Spring bean都可以像往常一样在XML文件中指定,grails-app/conf/spring/resources.xml或者更简单地使用Grails 的Spring bean构建器功能.然后可以在任何控制器,视图,服务等中按名称访问它们,并照常使用.
以下是我看到的用于集成域类和数据库模式的选项:
绕过GORM并加载/保存域对象,就像您现在一样.
Grails不会强迫您使用GORM,因此这应该非常简单:创建一个.jarJava代码(如果您还没有)并将其放入Grails应用程序的lib目录中.如果您的Java项目是Mavenized,那就更容易了:Grails 1.1可以与Maven一起使用,因此您可以pom.xml为Grails应用程序创建一个并将Java项目添加为依赖项,就像在任何其他(Java)项目中一样.
无论哪种方式,您都可以使用import您的课程(以及任何支持课程)并照常进行.由于Groovy与Java紧密集成,您将能够创建对象,从数据库加载它们,修改它们,保存它们,验证它们等,就像在Java项目中一样.你不会以这种方式获得GORM的所有便利,但是你可以以对你有意义的方式使用你的对象(除了Groovy可能会少一点代码).您可以随时尝试此选项以使某些工作正常工作,如果当时看起来有意义则可以考虑其他选项之一.
如果您尝试此选项,请提示一下:将实际的持久性代码抽象为Grails服务(StorageService可能),让控制器调用方法,而不是直接处理持久性.这样,如果需要,您可以使用其他方式替换该服务,只要您维护相同的接口,您的控制器就不会受到影响.
创建新的Grails域类作为现有Java类的子类.
如果您的类已经被编写为正确的bean,即使用所有属性的getter/setter方法,这可能非常简单.Grails会看到这些继承的属性,如果它们是用简单的Groovy风格编写的那样.您将能够使用简单的验证检查(非空,非空白等)或使用执行更复杂操作的闭包来指定如何验证每个属性,也许可以在其POJO超类中调用现有方法.
您几乎肯定需要通过GORM映射DSL调整映射以适应现有数据库模式的实际情况.关系可能会变得棘手.例如,您可能有一些其他解决方案,其中GORM需要一个连接表,尽管甚至可能有办法解决这些差异.我建议尽可能多地学习GORM及其映射DSL,然后尝试一些类,看看这是否可行.
让Grails直接使用您现有的POJO和Hibernate映射.
我自己没有尝试过,但根据Grails的Hibernate Integration页面,这应该是可能的:"Grails还允许您用Java编写域模型或重新使用已使用Hibernate映射的现有域模型.您需要做的是将必要的'hibernate.cfg.xml'文件和相应的映射文件放在'%PROJECT_HOME%/ grails-app/conf/hibernate'目录中.您仍然可以调用所有动态持久性和GORM中允许的查询方法!"
谷歌搜索"gorm遗产"出现了许多有用的讨论和例子,例如Glen Smith的博客文章(即将发布的Grails in Action的共同作者),他展示了一个用于集成的Hibernate映射文件与"来自地狱的遗留数据库".Grails in Action有一个名为"Advanced GORM Kungfu"的章节,承诺对该主题进行详细讨论.我有这本书的预发布PDF,虽然我还没有完成那一章,但到目前为止我所读到的内容非常好,这本书涵盖了许多其他Grails书中未充分讨论的主题. .
对不起,我不能提供关于这最后一个选项的任何个人经验,但它确实听起来可行(并且很有希望).无论您选择哪种方式,请告诉我们结果如何!
您真的想要/需要使用 Grails 而不仅仅是 Groovy 吗?
Grails 确实不是可以用来向现有 Web 应用程序添加部件的东西。整个“约定优于配置”方法意味着您几乎必须遵守 Grails 的规则,否则使用它就没有意义。这些规则之一是域对象是由 Grails 运行时大力“增强”的 Groovy 类。
也许可以让它们扩展现有的 Java 类,但我不会打赌 - 并且现有应用程序的所有 Spring 和 Hibernate 部分都必须被丢弃,或者至少你必须花费大量的时间努力让它们在 Grails 中工作。您将与框架作斗争,而不是从中获利。
IMO你有两个选择:
后者可能更适合您的情况。Grails 旨在快速创建新的 Web 应用程序,这就是它的亮点。向现有应用程序添加内容并不是它的初衷。
编辑: 关于评论中的澄清:如果您计划基本上为另一个应用程序使用的数据编写一个数据输入/维护前端,并将数据库作为它们之间的唯一通信渠道,那么这实际上可能与 Grails 配合得很好;当然可以将其配置为使用现有的数据库模式,而不是从域类创建自己的模式(尽管后者工作量较少)。
| 归档时间: |
|
| 查看次数: |
15359 次 |
| 最近记录: |