如何实现“远程”域?

时间:2012-05-16 07:41:44

标签: grails groovy grails-domain-class

想象一下两个共享域类的Grails应用程序。也许是一个Book域类。

一个应用程序被识别为数据的所有者,必须访问域数据。像亚马逊和亚马逊的网络服务。

我想拥有的应用程序将使用普通的域类并通过Web服务公开数据是微不足道的 - 在grails中没有问题。

但是在其他应用程序中实现域的最佳做法是什么?

  • 使用服务访问远程域而根本不实现本地域类?
  • 实现本地域类,覆盖get() - 方法以获取远程数据并使用本地数据库作为缓存?
  • 你想到了什么其他解决方案?

3 个答案:

答案 0 :(得分:7)

Ryan Geyer有一篇非常有趣的文章Modularizing your Grails application domain classes,列出了解决此问题的3个方法:

  1. 作为 RESTful JSON服务 - 很容易在Grails中进行此设置,但您失去了自动GORM功能。
  2. 将域类分离为库JAR文件,并在我的其他两个应用程序中引用该库。这并不像第一次听起来那么容易
  3. 创建Grails插件。将域对象放入插件中。然后,您的每个应用程序都可以导入此插件。然后,您可以根据需要创建具有不同功能的不同控制器有关此示例的示例代码,请访问:

    git clone git://ec2.nslms.com/grails/blog_example_modular

  4. Naleid稍后在post中提出了一个很好的建议,并建议......

      

    “创建一个grails-app / conf / BuildConfig.groovy文件并将插件名称和路径放入其中。如果您这样做,您的应用程序将看到您域名的实时更改/ controller / service / etc类,就好像它们实际上是当前应用程序一样,并且在进行更改时无需重新打包并重新安装插件。“

    Using memcache应该使两个应用程序都能够拥有一致的数据视图,并避免每个应用程序拥有自己的不一致缓存。

答案 1 :(得分:4)

我认为您可以制作域类的JAR文件,并添加对其他grails应用程序的引用。

答案 2 :(得分:2)

找到了另一个有趣的解决方案:

Riak是一个带有第一类REST API的键/值数据库。 riak有一个grails插件,它将大部分GORM功能(关系,动态查找器等)映射到riak的REST API:http://grails.org/plugin/riak

现在我还没有测试过的部分:如果你使用grails 2.0的DataSources功能,那么应该只能将这些“远程”域连接到riak数据库。

因此,将存在一个存储在riak数据库中的域,并且几个应用程序可以通过干净的REST API轻松访问它。

行。这也显示了我的问题是多么愚蠢 - 如果你通过同一个SQL数据库连接多个应用程序也是一样的。但有时人们想要像webservices这样更时髦的东西。