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