ehcache

ehcache

Provides advanced cache features via Ehcache

exports

  • CacheManager
  • Ehcache

dependency

<dependency>
  <groupId>org.jooby</groupId>
  <artifactId>jooby-ehcache</artifactId>
  <version>1.6.6</version>
</dependency>

usage

{
  use(new Eh());

  get("/", req -> {
    CacheManager cm = require(CacheManager.class);
    // work with cm

    Ehcache ehcache = 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

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 = require(Ehcache.class);
  });
}

multiple caches

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 = require("cache1", Ehcache.class);
    // ..
    Ehcache cache2 = require("cache2", Ehcache.class);
    // ..
  });
}

cache inheritance

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.

ehcache session store

dependency

<dependency>
  <groupId>org.jooby</groupId>
  <artifactId>jooby-ehcache</artifactId>
  <version>1.6.6</version>
</dependency>

usage

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

Configuration is done in one of two ways: 1) via .conf; or 2) programmatically:.

via .conf file

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... }

programmatically

{
  use(new Eh().doWith(conf -> {
    conf.setDefaultTransactionTimeoutInSeconds(120);
    // etc...
  }));
}

ehcache.conf

These are the default properties for ehcache:

ehcache {

  # default cache, caches defined in .conf will inherit these properties 
  cache.default {

  }

  diskStore.path = ${application.tmpdir}${file.separator}ehcache

}