Я бы сказал, что третий пункт довольно независим от грааля / игры / чего бы то ни было вообще.Если вам нужен общий кеш, для этого есть множество провайдеров, и для большинства из них есть плагины в Grails.
Многопользовательская среда в Grails довольно зрелая и намного менее навязчива, чем решение из блога в ответе Себастьяна.Независимо от того, используете ли вы один клиент (несколько баз данных) или несколько клиентов, он более или менее прозрачен для вашего кода, и большая часть головной боли устраняется.Имейте в виду, что вам нужно выполнить некоторую интеллектуальную индексацию (например, включить идентификатор клиента в многостолбцовый индекс и т. Д.), Чтобы не получить очень печальные скорости, когда ваши данные начинают расти.
Что касается внешних представлений, вы можетеЛибо добавьте их в базу данных, либо вставьте символическую ссылку в свое веб-приложение и просто храните их в отдельных пронумерованных папках.Затем из плагина клиента вы можете использовать TenantUtils.getCurrentTenant()
и просто выполнить рендеринг из соответствующей папки "/" + (tenantID ?: "default") + "/whatever/view/path"
.Таким образом, макеты и т. Д. Могут быть разделены между арендаторами, если вы того пожелаете, и вы просто помещаете специфические вещи арендатора в папки, специфичные для арендатора.
Возможно, вы тоже можете делать это в игре, или, но я не вижувсе, что мешает вам делать это в Grails.
Мои $ 0,02 на этот вопрос.