Мультиарендность Grails с несколькими базами данных

Кажется, я не могу найти обновленных ресурсов / руководств, плагинов или примеров о многопользовательской среде Grails с несколькими базами данных (по одной на каждого арендатора). В настоящее время я застрял с https://grails.org/plugin/multi-tenant-single-db и устаревший https://grails.org/plugin/multi-tenant-core.

Как выполнить переключение базы данных в зависимости от вошедшего в систему пользователя?


person renz    schedule 03.09.2015    source источник
comment
Многопользовательские плагины устарели и используют Hibernate 3. У меня есть приложение, основанное на grails 2.3 и основанное на одном плагине db. Плагин DB per tenant еще более устарел. Однако Hibernate 4 имеет встроенную поддержку БД для каждого арендатора и схемы на основе многопользовательской аренды. Вы можете перехватывать вызовы gorm и использовать для этого преобразования AST. Но это трудоемкая работа. Вам нужно будет просмотреть документы Hibernate.   -  person Ejaz Ahmed    schedule 03.09.2015
comment
@EjazAhmed Спасибо! Вероятно, попробовал бы подход Hibernate 4.   -  person renz    schedule 03.09.2015
comment
@renz, вы нашли для этого рабочее решение?   -  person lifeisfoo    schedule 10.10.2015
comment
@lifeisfoo Вместо этого я использовал подход с единой базой данных, намного проще. grails.org/plugin/multi-tenant-single-db с пониженной версией до Но спящий режим 3.   -  person renz    schedule 11.10.2015
comment
@renz Я немного изучил Hibernate4 и портировал свое приложение grails 2.3 на grails 3. На основе своей работы я создал многопользовательский плагин для grails3.   -  person Ejaz Ahmed    schedule 17.03.2016
comment
@EjazAhmed Приятно. Вам следует опубликовать это на grails.org :) Я бы не смог это использовать, поскольку перенос моих приложений на grails 3 в ближайшее время не состоится.   -  person renz    schedule 18.03.2016
comment
@EjazAhmed, я также изучал hibernate4, и кажется простым реализовать БД для каждого клиента в обычном Java-приложении. Есть ли в Grails подводные камни, которые доставят мне неприятности? Действительно ли необходимо переходить на grails 3? Можно ли посмотреть в вашем плагине?   -  person Cléssio Mendes    schedule 04.04.2016
comment
@ CléssioMendes, ответ не поместился в области комментариев, поэтому я разместил его в разделе ответов.   -  person Ejaz Ahmed    schedule 04.04.2016


Ответы (1)


Grails абстрагирует много вещей Hibernate, поэтому существует несоответствие импеданса между Gorm и Hibernate. Одна из таких проблем - загрузка нескольких источников данных в зависимости от клиента. Если вы выберете стратегию клиента для каждой БД, будьте готовы к тяжелой битве . Помимо сложности, предстоит еще долгий путь вперед, поскольку обслуживание БД в этой стратегии обходится довольно дорого. Большинство современных приложений используют подход Single DB Single Schema, и я также использовал этот подход в моем плагине . В настоящее время этот плагин разрешает арендатора с помощью Spring Security. Причиной такого подхода было приложение, над которым я работал, которое было приложением SaaS, обслуживаемым из одного домена. Если вам нужно обслуживать из нескольких доменов, в этот плагин необходимо внести незначительные изменения.

Что касается перехода на grails3, он был выпущен в марте 2015 года и в течение одного года претерпел различные улучшения и исправления ошибок. Он достаточно стабилен, чтобы на него можно было положиться, и, кроме того, в него уже перенесены почти все необходимые плагины. Если вы создаете новое приложение, вы должны пойти по пути grails3. Если у вас уже есть приложение, вы можете рассмотреть возможность перехода на grails3.

person Ejaz Ahmed    schedule 04.04.2016