Подтвердить что ты не робот

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

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

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

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

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

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

Ответ 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-базу данных. Но иногда люди хотят иметь что-то более напуганное, как веб-сервисы.