Как настроить распределенное кэширование в Grails (без Terracota) - PullRequest
4 голосов
/ 12 декабря 2011

Я хочу развернуть свое приложение (Grails 1.3.5) в двух или более котах (7.0).Мне удалось сделать это без проблем, но теперь я хочу настроить свой кэш (ehcache) с помощью RMI.

То, что я делал до сих пор, - это создание двух файлов ehcache.xml и сохранение их в папке lib каждого из tomcat.Внутри файлов ehcache я объявил 3 кеша:

  1. defaultCache

  2. org.hibernate.cache.StandardQueryCache

  3. org.hibernate.cache.UpdateTimestampsCache

Каждый кэш имеет репликатор RMI внутри.Это хорошо работает, но мой вопрос заключается в том, должен ли я также объявить каждый из моих классов домена Grails в файле ehcache.xml.Если я сделаю это, у меня будет одно и то же объявление дважды: одно в ehcache.xml и второе в самом классе (я уже установил cache=true в классе);

class Book {
    static mapping = {
        ...
        cache true
    }
}

1 Ответ

1 голос
/ 13 декабря 2011

Да, вам нужны настройки в обоих местах. Значения ehcache.xml настраивают параметры кэша, но они будут игнорироваться, если вы не включите кэширование для каждого класса домена (и, при необходимости, сопоставленных коллекций).

Обычно вы не будете использовать одни и те же настройки в блоке defaultCache, поскольку для каждого класса домена обычно требуются разные настройки, например,

<cache name='com.yourapp.SomeDomainClass'
       maxElementsInMemory='1000'
       eternal='true'
       maxElementsOnDisk='0'>

       <cacheEventListenerFactory
           class='net.sf.ehcache.distribution.RMICacheReplicatorFactory'
           properties='replicateAsynchronously=false
                       replicatePutsViaCopy=false,
                       replicateUpdatesViaCopy=false,
                       replicatePuts=true,
                       replicateUpdates=true,
                       replicateRemovals=true'
       />
</cache>
...