Provides advanced cache features via Ehcache
CacheManagerEhcache
<dependency>
<groupId>org.jooby</groupId>
<artifactId>jooby-ehcache</artifactId>
<version>1.0.0.CR8</version>
</dependency>{
use(new Eh());
get("/", req -> {
CacheManager cm = req.require(CacheManager.class);
// work with cm
Ehcache ehcache = req.require(Ehcache.class);
// work with ehcache
});
}Ehcache can be fully configured from your .conf file and/or programmatically, but for the
time being there is no support for xml.
Caches are configured via .conf like almost everything in Jooby.
ehcache.cache.mycache {
eternal = true
}Later, we can access to mycache with:
{
get("/", req -> {
Ehcache mycache = req.require(Ehcache.class);
});
}Multiple caches are also possible:
ehcache.cache.cache1 {
maxEntriesLocalHeap = 100
eternal = true
}
ehcache.cache.cache2 {
maxEntriesLocalHeap = 100
eternal = true
}Later, we can access to our caches with:
{
get("/", req -> {
Ehcache cache1 = req.require("cache1", Ehcache.class);
// ..
Ehcache cache2 = req.require("cache2", Ehcache.class);
// ..
});
}Previous examples, show how to configure two or more caches, but it is also possible to inherit
cache configuration using the default cache:
ehcache.cache.default {
maxEntriesLocalHeap = 100
eternal = true
}
ehcache.cache.cache1 {
eternal = false
}
ehcache.cache.cache2 {
maxEntriesLocalHeap = 1000
}Here cache1 and cache2 will inherited their properties from the default cache.
Please note the default cache works as a template and isn't a real/usable cache.
This module provides an EhSessionStore. In order to use the EhSessionStore all
you have to do is define a session cache:
ehcache.cache.session {
# cache will expire after 30 minutes of inactivity
timeToIdle = 30m
}And then register the EhSessionStore:
{
session(EhSessionStore.class);
}Configuration is done in one of two ways: 1) via .conf; or 2) programmatically:.
ehcache {
defaultTransactionTimeout = 1m
dynamicConfig = true
maxBytesLocalDisk = 1k
maxBytesLocalHeap = 1k
maxBytesLocalOffHeap = 1m
monitor = off
# just one event listener
cacheManagerEventListenerFactory {
class = MyCacheEventListenerFactory
p1 = "v1"
p2 = true
}
# or multiple event listeners
cacheManagerEventListenerFactory {
listener1 {
class = MyCacheEventListenerFactory1
p1 = "v1"
p2 = true
}
listener2 {
class = MyCacheEventListenerFactory2
}
}
diskStore.path = ${application.tmpdir}${file.separator}ehcache
# etc...
}{
use(new Eh().doWith(conf -> {
conf.setDefaultTransactionTimeoutInSeconds(120);
// etc...
}));
}ehcache {
# default cache, caches defined in .conf will inherit these properties
cache.default {
}
diskStore.path = ${application.tmpdir}${file.separator}ehcache
}