We have configured Ehcache as second level hibernate cache for our project. This post is for Grails 1.1.1 projects. In the later version of grails, the configuration can be little different. Here are the steps. (It is quite some time when I did the actual configuration. Let me know if I missed something)
i)
First of all we have put ehcache.xml in grails-app/conf directory. Our config file looks like this. You may modify the config based on your preferences. To learn more about this settings go to
http://ehcache.org/documentation/configuration.html
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="ehcache.xsd">
<defaultCache
maxElementsInMemory="1000"
eternal="false"
timeToIdleSeconds="3600"
timeToLiveSeconds="3600"
overflowToDisk="false"
diskPersistent="false"
diskExpiryThreadIntervalSeconds="120"
memoryStoreEvictionPolicy="LRU"
/>
<cache name="org.hibernate.cache.UpdateTimestampsCache"
maxElementsInMemory="10000"
timeToIdleSeconds="300"
/>
<cache name="org.hibernate.cache.StandardQueryCache"
maxElementsInMemory="10000"
timeToIdleSeconds="300"
/>
</ehcache>
ii) Modify the cache provider class in your DataSource.groovy to org.hibernate.cache.EhCacheProvider like this
hibernate {
cache.use_second_level_cache=true
cache.use_query_cache=true
cache.provider_class='org.hibernate.cache.EhCacheProvider'
}
iii) Now to fine-tune your cache setting, go to individual domain classes for which you want to enable ehcache and add the following mapping closure with cache true
class Employee {
String name
........
........
static constraints = {
....
}
static mapping = {
cache true
}
}
iv) If you want your query to be cached, you can configure it similarly with cache true clause
def employeeList = Employee.createCriteria().list() {
or {
......
}
order(".....", "...")
cache true
}
For further reading to to
http://ehcache.org/documentation/grails.html

Recent Comments