Как реализовать домен "remote"?

Представьте себе два приложения Grails, которые разделяют класс домена. Возможно, класс домена Book.

Одно приложение идентифицируется как владелец данных, ему нужно будет получить доступ к данным домена. Что-то вроде amazon и веб-сервисов Amazon.

Я думаю, тривиально, что владеющее приложение будет использовать обычный класс домена и будет предоставлять данные через веб-службы - не проблема в grails.

Но что было бы лучше всего реализовать домен в другом приложении?

  • использовать службу для доступа к удаленному домену и вообще не реализовывать локальный класс домена?
  • реализовать локальный класс домена, перезаписать метод get() для извлечения удаленных данных и использовать локальную базу данных в качестве кеша?
  • какое другое решение приходит вам на ум?

Ответы

Ответ 1

Ryan Geyer содержит очень интересную статью Модулирование классов домена приложения Grails, в котором перечислены 3 решения этой проблемы:

  • Как служба RESTful JSON - легко получить эту настройку в Grails, но затем вы потеряете автоматическую функциональность GORM.
  • Отделить классы домена в библиотечном файле JAR и ссылаться на эту библиотеку в обоих моих других приложениях. Это не так просто, как сначала звучит
  • Создайте плагин Grails. Поместите объект домена в плагин. Затем каждое из ваших приложений может импортировать этот плагин. Затем вы можете создавать различные контроллеры с различными функциональными возможностями. Пример кода для этого можно найти по адресу:

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

Тед Налейд дает отличный совет позже в post и рекомендует...

"создайте файл grails-app/conf/BuildConfig.groovy и поместите в него источник и путь к исходному коду... Если вы это сделаете, ваши приложения будут видеть живые изменения в вашем домене /controller/service/etc, как если бы они были на самом деле в текущем приложении, и нет необходимости переупаковывать и переустанавливать плагин при внесении изменений."

Использование memcache должно позволить обоим приложениям иметь последовательное представление данных и избегать того, чтобы каждое отдельное приложение имело собственный непоследовательный кеш.

Ответ 2

Я думаю, вы можете сделать JAR файл своих классов домена и добавить ссылку на другое приложение grails.

Ответ 3

Нашел еще одно интересное решение:

Riak - это база данных ключ/значение с API REST первого класса. Существует плагин grails для riak, который сопоставляет большую часть функциональности GORM (отношения, динамические искатели и т.д.) С REST API riak: http://grails.org/plugin/riak

Теперь идет часть, которую я еще не тестировал: если вы используете функцию DataSources от grails 2.0, должно быть возможно подключить только те "remote" домены в базу данных riak.

В результате будет существовать домен, хранящийся в базе данных riak, и несколько приложений смогут без проблем получить к нему доступ через чистый REST API.

OK. Это также показывает, насколько глупый мой вопрос - было бы одинаково, если бы вы подключили несколько приложений через одну и ту же SQL-базу данных. Но иногда люди хотят иметь что-то более напуганное, как веб-сервисы.