Attempt to move from ehcache to JCache+Caffeine
diff --git a/core-api/pom.xml b/core-api/pom.xml
index 8fe0cdd..e926c5a 100644
--- a/core-api/pom.xml
+++ b/core-api/pom.xml
@@ -106,10 +106,18 @@
       <groupId>org.apache.mina</groupId>
       <artifactId>mina-core</artifactId>
     </dependency>
-    
+
     <dependency>
-      <groupId>org.ehcache</groupId>
-      <artifactId>ehcache</artifactId>
+      <groupId>javax.cache</groupId>
+      <artifactId>cache-api</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>com.github.ben-manes.caffeine</groupId>
+      <artifactId>caffeine</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>com.github.ben-manes.caffeine</groupId>
+      <artifactId>jcache</artifactId>
     </dependency>
   </dependencies>
 
@@ -156,12 +164,8 @@
           <instructions>
             <Bundle-SymbolicName>${project.groupId}.core.api</Bundle-SymbolicName>
             <Export-Package>
-                org.ehcache;version=${ehcache.version},
-                org.ehcache.config;version=${ehcache.version},
-                org.ehcache.config.builders;version=${ehcache.version},
-                org.ehcache.xml;version=${ehcache.version},
-                org.ehcache.xml.model;version=${ehcache.version},
-                org.ehcache.xml.exceptions;version=${ehcache.version},
+                javax.cache,
+                com.github.benmanes.caffeine.jcache.spi,
                 org.apache.directory.server.core.api;version=${project.version},
                 org.apache.directory.server.core.api.administrative;version=${project.version},
                 org.apache.directory.server.core.api.authn.ppolicy;version=${project.version},
@@ -181,9 +185,13 @@
                 org.apache.directory.server.core.api.subtree;version=${project.version}
             </Export-Package>
             <Require-Bundle>
-                org.ehcache.ehcache;bundle-version=${ehcache.version}
+                com.github.ben-manes.caffeine;bundle-version=${caffeine.cache.version},
+                com.github.ben-manes.caffeine.jcache;bundle-version=${caffeine.cache.version},
+                javax.cache.api;bundle-version=${javax.cache.version}
             </Require-Bundle>
             <Import-Package>
+                javax.cache,
+                javax.cache.spi,
                 org.apache.commons.lang3;version=${commons.lang.version},
                 org.apache.directory.api.asn1.util;version=${org.apache.directory.api.version},
                 org.apache.directory.api.i18n;version=${org.apache.directory.api.version},
diff --git a/core-api/src/main/java/org/apache/directory/server/core/api/CacheService.java b/core-api/src/main/java/org/apache/directory/server/core/api/CacheService.java
index 46d653e..316b6f6 100644
--- a/core-api/src/main/java/org/apache/directory/server/core/api/CacheService.java
+++ b/core-api/src/main/java/org/apache/directory/server/core/api/CacheService.java
@@ -21,23 +21,23 @@
 package org.apache.directory.server.core.api;
 
 
-import java.io.File;
-import java.net.MalformedURLException;
 import java.util.Iterator;
 
-import org.ehcache.Cache;
-import org.ehcache.Cache.Entry;
-import org.ehcache.CacheManager;
-import org.ehcache.Status;
-import org.ehcache.config.builders.CacheManagerBuilder;
-import org.ehcache.xml.XmlConfiguration;
-import org.ehcache.xml.exceptions.XmlConfigurationException;
+import javax.cache.Cache;
+import javax.cache.Cache.Entry;
+import javax.cache.CacheManager;
+
+import org.apache.directory.api.ldap.model.name.Dn;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.github.benmanes.caffeine.jcache.CacheManagerImpl;
+import com.github.benmanes.caffeine.jcache.spi.CaffeineCachingProvider;
+import com.typesafe.config.ConfigFactory;
+
 
 /**
- * A ehcache based cache service to be used for various caching requirement in the server. 
+ * A cache service to be used for various caching requirement in the server. 
  * 
  * If a cache config file with the name {@link #DIRECTORY_CACHESERVICE_XML} is present in
  * the "workdirectory" of the DirectoryService then that file will be used for configuring 
@@ -49,17 +49,17 @@
 public class CacheService
 {
     /** The cache configuration file */
-    private static final String DIRECTORY_CACHESERVICE_XML = "directory-cacheservice.xml";
+    //private static final String DIRECTORY_CACHESERVICE_XML = "directory-cacheservice.xml";
 
     /** The associated logger */
     private static final Logger LOG = LoggerFactory.getLogger( CacheService.class );
 
-    /** the ehcache cache manager */
+    /** the cache manager */
     private CacheManager cacheManager = null;
 
     /**
      * Utility method to dump the cache contents to a StringBuffer.
-     * This is needed because ehcache 3.x Cache objects only implements Iterable
+     * This is needed because Cache objects only implements Iterable
      * 
      * @return a StringBuffer
      */
@@ -70,7 +70,7 @@
         
         while ( it.hasNext() )
         {
-            Cache.Entry< ?, ? > nextObj = ( Entry<?, ?> ) it.next();
+            Entry<?, ?> nextObj = ( Entry<?, ?> ) it.next();
             sb.append( '\t' )
             .append( nextObj.getKey().toString() )
             .append( " -> " )
@@ -92,7 +92,7 @@
     /**
      * Creates a new instance of CacheService with the given cache manager.
      *
-     * @param cachemanager The provided CaxcheManager instance
+     * @param cachemanager The provided CacheManager instance
      */
     public CacheService( CacheManager cachemanager )
     {
@@ -121,48 +121,26 @@
     {
         LOG.debug( "CacheService initialization, for instance {}", instanceId );
 
-        if ( ( cacheManager != null ) && ( cacheManager.getStatus() == Status.AVAILABLE ) )
+        if ( ( cacheManager != null ) && ( !cacheManager.isClosed() ) )
         {
             LOG.warn( "cache service was already initialized and is available" );
 
             return;
         }
 
-        XmlConfiguration cc = null;
+        CaffeineCachingProvider p = new CaffeineCachingProvider();
+        cacheManager = new CacheManagerImpl( p, p.getDefaultURI(), getClass().getClassLoader(),
+            p.getDefaultProperties(),
+            ConfigFactory.load( getClass().getClassLoader() ) );
+        //CaffeineCachingProvider
+//        CachingProvider cachingProvider = Caching.getCachingProvider(
+//            "com.github.benmanes.caffeine.jcache.spi.CaffeineCachingProvider",
+//            getClass().getClassLoader() );
+//        cacheManager = cachingProvider.getCacheManager();
+        System.out.println( "###### entryDn cache: " + cacheManager.getCache( "entryDn", String.class, Dn.class ) );
 
-        if ( layout != null )
-        {
-            File configFile = new File( layout.getConfDirectory(), DIRECTORY_CACHESERVICE_XML );
-
-            if ( !configFile.exists() )
-            {
-                LOG.info( "no custom cache configuration was set, loading the default cache configuration" );
-                cc = new XmlConfiguration( getClass().getClassLoader().getResource(
-                    DIRECTORY_CACHESERVICE_XML ), getClass().getClassLoader() );
-            }
-            else
-            {
-                LOG.info( "loading cache configuration from the file {}", configFile );
-                
-                try
-                {
-                    cc = new XmlConfiguration( configFile.toURI().toURL(), getClass().getClassLoader() );
-                }
-                catch ( XmlConfigurationException | MalformedURLException e ) 
-                {
-                    LOG.error( "exception loading cache configuration from the file {}: {}", configFile, e.toString() );
-                }
-            }
-        }
-        else
-        {
-            LOG.info( "no custom cache configuration was set, loading the default cache configuration" );
-            cc = new XmlConfiguration( getClass().getClassLoader().getResource(
-                DIRECTORY_CACHESERVICE_XML ), getClass().getClassLoader() );
-        }
-
-        cacheManager = CacheManagerBuilder.newCacheManager( cc );
-        cacheManager.init();
+        // TODO: need to create caches?
+        //cacheManager.createCache( cacheName, configuration )
     }
 
 
@@ -200,7 +178,7 @@
         LOG.info( "fetching the cache named {}", name );
 
         Cache<K, V> cache = cacheManager.getCache( name, keyClazz, valueClazz );
-        
+
         return cache;
     }
 
@@ -214,6 +192,6 @@
     {
         LOG.info( "Removing the cache named {}", name );
         
-        cacheManager.removeCache( name );
+        cacheManager.destroyCache( name );
     }
 }
diff --git a/core-api/src/main/resources/application.conf b/core-api/src/main/resources/application.conf
new file mode 100644
index 0000000..67bfcb8
--- /dev/null
+++ b/core-api/src/main/resources/application.conf
@@ -0,0 +1,111 @@
+caffeine.jcache {
+
+  groupCache {
+    key-type = java.lang.String
+    value-type = java.util.Set
+    policy {
+      lazy-expiration {
+        creation = 1200s
+      }
+      maximum {
+        size = 10000
+      }
+    }
+  }
+  dnCache {
+    key-type = java.lang.String
+    value-type = org.apache.directory.api.ldap.model.name.Dn
+    policy {
+      lazy-expiration {
+        creation = 600s
+      }
+      maximum {
+        size = 10000
+      }
+    }
+  }
+  kdcReplayCache {
+    key-type = java.lang.String
+    value-type = org.apache.directory.server.kerberos.shared.replay.ReplayCacheImpl.ReplayCacheEntry
+    policy {
+      lazy-expiration {
+        creation = 600s
+      }
+      maximum {
+        size = 100
+      }
+    }
+  }
+  changePwdReplayCache {
+    key-type = java.lang.String
+    value-type = org.apache.directory.server.kerberos.shared.replay.ReplayCacheImpl.ReplayCacheEntry
+    policy {
+      lazy-expiration {
+        creation = 600s
+      }
+      maximum {
+        size = 100
+      }
+    }
+  }
+  "ou=system" {
+    key-type = java.lang.String
+    value-type = java.lang.Object
+    policy {
+      lazy-expiration {
+        creation = 600s
+      }
+      maximum {
+        size = 1000
+      }
+    }
+  }
+  "ou=system:apacheRdn" {
+    key-type = java.lang.String
+    value-type = java.lang.Object
+    policy {
+      lazy-expiration {
+        creation = 600s
+      }
+      maximum {
+        size = 10000
+      }
+    }
+  }
+  alias {
+    key-type = java.lang.String
+    value-type = org.apache.directory.api.ldap.model.name.Dn
+    policy {
+      lazy-expiration {
+        creation = 1200s
+      }
+      maximum {
+        size = 1000
+      }
+    }
+  }
+  entryDn {
+    key-type = java.lang.String
+    value-type = org.apache.directory.api.ldap.model.name.Dn
+    policy {
+      lazy-expiration {
+        creation = 1200s
+      }
+      maximum {
+        size = 1000
+      }
+    }
+  }
+  piar {
+    key-type = java.lang.String
+    value-type = org.apache.directory.server.xdbm.ParentIdAndRdn
+    policy {
+      lazy-expiration {
+        creation = 1200s
+      }
+      maximum {
+        size = 1000
+      }
+    }
+  }
+}
diff --git a/core-shared/pom.xml b/core-shared/pom.xml
index 7d1ca28..ce022f0 100644
--- a/core-shared/pom.xml
+++ b/core-shared/pom.xml
@@ -76,10 +76,10 @@
       <groupId>org.apache.directory.api</groupId>
       <artifactId>api-util</artifactId>
     </dependency>
-    
+
     <dependency>
-      <groupId>org.ehcache</groupId>
-      <artifactId>ehcache</artifactId>
+      <groupId>javax.cache</groupId>
+      <artifactId>cache-api</artifactId>
     </dependency>
 
     <dependency>
@@ -143,11 +143,11 @@
             </Export-Package>
             <Import-Package>
                 javax.naming.directory,
+                javax.cache,
                 jdbm,
                 jdbm.btree,
                 jdbm.helper,
                 jdbm.recman,
-                org.ehcache;version=${ehcache.version},
                 org.apache.directory.api.ldap.codec.api;version=${org.apache.directory.api.version},
                 org.apache.directory.api.ldap.extras.controls.syncrepl.syncDone;version=${org.apache.directory.api.version},
                 org.apache.directory.api.ldap.extras.controls.syncrepl.syncState;version=${org.apache.directory.api.version},
diff --git a/core-shared/src/main/java/org/apache/directory/server/core/shared/DefaultDnFactory.java b/core-shared/src/main/java/org/apache/directory/server/core/shared/DefaultDnFactory.java
index af896fd..b066201 100644
--- a/core-shared/src/main/java/org/apache/directory/server/core/shared/DefaultDnFactory.java
+++ b/core-shared/src/main/java/org/apache/directory/server/core/shared/DefaultDnFactory.java
@@ -20,8 +20,7 @@
 
 package org.apache.directory.server.core.shared;
 
-
-import org.ehcache.Cache;
+import javax.cache.Cache;
 
 import org.apache.directory.api.ldap.model.exception.LdapInvalidDnException;
 import org.apache.directory.api.ldap.model.name.Dn;
diff --git a/core/src/main/java/org/apache/directory/server/core/DefaultDirectoryService.java b/core/src/main/java/org/apache/directory/server/core/DefaultDirectoryService.java
index a8a965f..ea930ba 100644
--- a/core/src/main/java/org/apache/directory/server/core/DefaultDirectoryService.java
+++ b/core/src/main/java/org/apache/directory/server/core/DefaultDirectoryService.java
@@ -267,7 +267,7 @@
 
     private static final String LOCK_FILE_NAME = ".dirservice.lock";
 
-    /** the ehcache based cache service */
+    /** the cache service */
     private CacheService cacheService;
 
     /** The AccessControl AdministrativePoint cache */
diff --git a/interceptors/authz/pom.xml b/interceptors/authz/pom.xml
index 48fd893..abcdd4a 100644
--- a/interceptors/authz/pom.xml
+++ b/interceptors/authz/pom.xml
@@ -73,8 +73,8 @@
     </dependency>
     
     <dependency>
-      <groupId>org.ehcache</groupId>
-      <artifactId>ehcache</artifactId>
+      <groupId>javax.cache</groupId>
+      <artifactId>cache-api</artifactId>
     </dependency>
   </dependencies>
 
@@ -130,7 +130,7 @@
             </Export-Package>
             <Import-Package>
                 javax.naming.directory,
-                org.ehcache;version=${ehcache.version},
+                javax.cache,
                 org.apache.directory.api.ldap.aci;version=${org.apache.directory.api.version},
                 org.apache.directory.api.ldap.aci.protectedItem;version=${org.apache.directory.api.version},
                 org.apache.directory.api.ldap.model.constants;version=${org.apache.directory.api.version},
diff --git a/interceptors/authz/src/main/java/org/apache/directory/server/core/authz/GroupCache.java b/interceptors/authz/src/main/java/org/apache/directory/server/core/authz/GroupCache.java
index 5dc6eef..7db86ab 100644
--- a/interceptors/authz/src/main/java/org/apache/directory/server/core/authz/GroupCache.java
+++ b/interceptors/authz/src/main/java/org/apache/directory/server/core/authz/GroupCache.java
@@ -25,10 +25,9 @@
 import java.util.List;
 import java.util.Set;
 
+import javax.cache.Cache;
 import javax.naming.directory.SearchControls;
 
-import org.ehcache.Cache;
-
 import org.apache.directory.api.ldap.model.constants.SchemaConstants;
 import org.apache.directory.api.ldap.model.entry.Attribute;
 import org.apache.directory.api.ldap.model.entry.Entry;
diff --git a/interceptors/subtree/pom.xml b/interceptors/subtree/pom.xml
index e822e71..44349af 100644
--- a/interceptors/subtree/pom.xml
+++ b/interceptors/subtree/pom.xml
@@ -78,8 +78,19 @@
     </dependency>
     
     <dependency>
-      <groupId>org.ehcache</groupId>
-      <artifactId>ehcache</artifactId>
+      <groupId>javax.cache</groupId>
+      <artifactId>cache-api</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>com.github.ben-manes.caffeine</groupId>
+      <artifactId>caffeine</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>com.github.ben-manes.caffeine</groupId>
+      <artifactId>jcache</artifactId>
+      <scope>test</scope>
     </dependency>
   </dependencies>
 
@@ -134,8 +145,7 @@
             </Export-Package>
             <Import-Package>
                 javax.naming.directory,
-                org.ehcache;version=${ehcache.version},
-                org.ehcache.config.builders;version=${ehcache.version},
+                javax.cache,
                 org.apache.directory.api.ldap.codec.controls.search.subentries;version=${org.apache.directory.api.version},
                 org.apache.directory.api.ldap.model.constants;version=${org.apache.directory.api.version},
                 org.apache.directory.api.ldap.model.entry;version=${org.apache.directory.api.version},
diff --git a/interceptors/subtree/src/test/java/org/apache/directory/server/core/subtree/SubtreeEvaluatorTest.java b/interceptors/subtree/src/test/java/org/apache/directory/server/core/subtree/SubtreeEvaluatorTest.java
index ad384f5..ed7a5a6 100644
--- a/interceptors/subtree/src/test/java/org/apache/directory/server/core/subtree/SubtreeEvaluatorTest.java
+++ b/interceptors/subtree/src/test/java/org/apache/directory/server/core/subtree/SubtreeEvaluatorTest.java
@@ -28,6 +28,12 @@
 import java.util.HashSet;
 import java.util.Set;
 
+import javax.cache.Cache;
+import javax.cache.CacheManager;
+import javax.cache.Caching;
+import javax.cache.configuration.MutableConfiguration;
+import javax.cache.spi.CachingProvider;
+
 import org.apache.directory.api.ldap.model.entry.DefaultEntry;
 import org.apache.directory.api.ldap.model.entry.Entry;
 import org.apache.directory.api.ldap.model.filter.ExprNode;
@@ -46,11 +52,6 @@
 import org.apache.directory.server.core.api.normalization.FilterNormalizingVisitor;
 import org.apache.directory.server.core.api.subtree.SubtreeEvaluator;
 import org.apache.directory.server.core.shared.DefaultDnFactory;
-import org.ehcache.Cache;
-import org.ehcache.CacheManager;
-import org.ehcache.config.builders.CacheConfigurationBuilder;
-import org.ehcache.config.builders.CacheManagerBuilder;
-import org.ehcache.config.builders.ResourcePoolsBuilder;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.Test;
@@ -102,9 +103,10 @@
             fail( "Schema load failed : " + Exceptions.printErrors( schemaManager.getErrors() ) );
         }
 
-        CacheManager cm = CacheManagerBuilder.newCacheManagerBuilder().withCache( "dnCache", CacheConfigurationBuilder.newCacheConfigurationBuilder( String.class, Dn.class, ResourcePoolsBuilder.heap(1000)).build()).build();
-        cm.init();
-        dnCache = cm.getCache( "dnCache", String.class, Dn.class );        dnFactory = new DefaultDnFactory( schemaManager, dnCache );
+        CachingProvider cachingProvider = Caching.getCachingProvider();
+        CacheManager cm = cachingProvider.getCacheManager();
+        dnCache = cm.getCache( "dnCache");
+        dnFactory = new DefaultDnFactory( schemaManager, dnCache );
 
         ncn = new ConcreteNameComponentNormalizer( schemaManager );
 
diff --git a/jdbm-partition/pom.xml b/jdbm-partition/pom.xml
index 21c35ce..ae03963 100644
--- a/jdbm-partition/pom.xml
+++ b/jdbm-partition/pom.xml
@@ -150,7 +150,7 @@
                 jdbm.btree,
                 jdbm.helper,
                 jdbm.recman,
-                org.ehcache;version=${ehcache.version},
+                javax.cache,
                 org.apache.directory.api.ldap.model.constants;version=${org.apache.directory.api.version},
                 org.apache.directory.api.ldap.model.csn;version=${org.apache.directory.api.version},
                 org.apache.directory.api.ldap.model.cursor;version=${org.apache.directory.api.version},
diff --git a/jdbm-partition/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmPartition.java b/jdbm-partition/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmPartition.java
index 263ec91..89c0921 100644
--- a/jdbm-partition/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmPartition.java
+++ b/jdbm-partition/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmPartition.java
@@ -29,6 +29,8 @@
 import java.util.List;
 import java.util.UUID;
 
+import javax.cache.Cache;
+
 import org.apache.directory.api.ldap.model.constants.SchemaConstants;
 import org.apache.directory.api.ldap.model.csn.CsnFactory;
 import org.apache.directory.api.ldap.model.cursor.Cursor;
@@ -70,7 +72,6 @@
 import org.apache.directory.server.xdbm.search.impl.DefaultSearchEngine;
 import org.apache.directory.server.xdbm.search.impl.EvaluatorBuilder;
 import org.apache.directory.server.xdbm.search.impl.NoOpOptimizer;
-import org.ehcache.Cache;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/kerberos-codec/pom.xml b/kerberos-codec/pom.xml
index 918e1aa..901325f 100644
--- a/kerberos-codec/pom.xml
+++ b/kerberos-codec/pom.xml
@@ -69,8 +69,18 @@
     </dependency>
     
     <dependency>
-      <groupId>org.ehcache</groupId>
-      <artifactId>ehcache</artifactId>
+      <groupId>javax.cache</groupId>
+      <artifactId>cache-api</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>com.github.ben-manes.caffeine</groupId>
+      <artifactId>caffeine</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>com.github.ben-manes.caffeine</groupId>
+      <artifactId>jcache</artifactId>
+      <scope>test</scope>
     </dependency>
   </dependencies>
 
@@ -134,7 +144,7 @@
                 javax.crypto,
                 javax.crypto.spec,
                 javax.security.auth.kerberos,
-                org.ehcache;version=${ehcache.version},
+                javax.cache,
                 org.apache.directory.api.asn1;version=${org.apache.directory.api.version},
                 org.apache.directory.api.asn1.actions;version=${org.apache.directory.api.version},
                 org.apache.directory.api.asn1.ber;version=${org.apache.directory.api.version},
diff --git a/kerberos-codec/src/main/java/org/apache/directory/server/kerberos/shared/replay/ReplayCacheImpl.java b/kerberos-codec/src/main/java/org/apache/directory/server/kerberos/shared/replay/ReplayCacheImpl.java
index 58aa5a0..c4e4026 100644
--- a/kerberos-codec/src/main/java/org/apache/directory/server/kerberos/shared/replay/ReplayCacheImpl.java
+++ b/kerberos-codec/src/main/java/org/apache/directory/server/kerberos/shared/replay/ReplayCacheImpl.java
@@ -22,10 +22,10 @@
 
 import java.io.Serializable;
 
+import javax.cache.Cache;
 import javax.security.auth.kerberos.KerberosPrincipal;
 
 import org.apache.directory.shared.kerberos.KerberosTime;
-import org.ehcache.Cache;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -44,8 +44,8 @@
 
     private static final Logger LOG = LoggerFactory.getLogger( ReplayCacheImpl.class );
 
-    /** ehcache based storage to store the entries */
-    private Cache< String, Object > cache;
+    /** cache to store the entries */
+    private Cache<String, ReplayCacheEntry> cache;
 
     /** default clock skew */
     private static final long DEFAULT_CLOCK_SKEW = 5L * KerberosTime.MINUTE;
@@ -141,7 +141,7 @@
      * Creates a new instance of InMemoryReplayCache. Sets the
      * delay between each cleaning run to 5 seconds.
      */
-    public ReplayCacheImpl( Cache < String, Object > cache )
+    public ReplayCacheImpl( Cache<String, ReplayCacheEntry> cache )
     {
         this.cache = cache;
     }
@@ -154,7 +154,7 @@
      * 
      * @param clockSkew the allowed skew (milliseconds)
      */
-    public ReplayCacheImpl( Cache< String, Object > cache, long clockSkew )
+    public ReplayCacheImpl( Cache<String, ReplayCacheEntry> cache, long clockSkew )
     {
         this.cache = cache;
         this.clockSkew = clockSkew;
@@ -180,7 +180,7 @@
     {
         ReplayCacheEntry entry = new ReplayCacheEntry( serverPrincipal, 
             clientPrincipal, clientTime, clientMicroSeconds );
-        ReplayCacheEntry found = ( ReplayCacheEntry ) cache.get( entry.createKey() );
+        ReplayCacheEntry found = cache.get( entry.createKey() );
 
         if ( found == null )
         {
diff --git a/kerberos-codec/src/test/java/org/apache/directory/server/kerberos/shared/replay/ReplayCacheImplTest.java b/kerberos-codec/src/test/java/org/apache/directory/server/kerberos/shared/replay/ReplayCacheImplTest.java
index 1de75b1..00c4145 100644
--- a/kerberos-codec/src/test/java/org/apache/directory/server/kerberos/shared/replay/ReplayCacheImplTest.java
+++ b/kerberos-codec/src/test/java/org/apache/directory/server/kerberos/shared/replay/ReplayCacheImplTest.java
@@ -20,6 +20,7 @@
 package org.apache.directory.server.kerberos.shared.replay;

 

 

+import static org.junit.Assert.assertEquals;

 import static org.junit.Assert.assertFalse;

 import static org.junit.Assert.assertNull;

 import static org.junit.Assert.assertTrue;

@@ -28,25 +29,26 @@
 import java.util.ArrayList;

 import java.util.Iterator;

 import java.util.List;

+import java.util.OptionalLong;

 

+import javax.cache.Cache;

+import javax.cache.CacheManager;

+import javax.cache.Caching;

+import javax.cache.configuration.MutableConfiguration;

+import javax.cache.spi.CachingProvider;

 import javax.security.auth.kerberos.KerberosPrincipal;

 

+import org.apache.directory.api.ldap.model.name.Dn;

 import org.apache.directory.junit.tools.MultiThreadedMultiInvoker;

+import org.apache.directory.server.kerberos.shared.replay.ReplayCacheImpl.ReplayCacheEntry;

 import org.apache.directory.shared.kerberos.KerberosTime;

 import org.apache.directory.shared.kerberos.codec.types.PrincipalNameType;

-import org.ehcache.Cache;

-import org.ehcache.Cache.Entry;

-import org.ehcache.CacheManager;

-import org.ehcache.Status;

-import org.ehcache.config.builders.CacheConfigurationBuilder;

-import org.ehcache.config.builders.CacheManagerBuilder;

-import org.ehcache.config.builders.ExpiryPolicyBuilder;

-import org.ehcache.config.builders.ResourcePoolsBuilder;

 

 import org.junit.Rule;

 import org.junit.Test;

 import org.junit.runner.RunWith;

 

+import com.github.benmanes.caffeine.jcache.configuration.CaffeineConfiguration;

 import com.mycila.junit.concurrent.Concurrency;

 import com.mycila.junit.concurrent.ConcurrentJunitRunner;

 

@@ -79,25 +81,14 @@
         {

             long clockSkew = 1000; // 1 sec

 

-            cacheManager = CacheManagerBuilder.newCacheManagerBuilder().build();

-            

-            cacheManager.init();

+            CachingProvider cachingProvider = Caching.getCachingProvider();

+            CacheManager cm = cachingProvider.getCacheManager();

+            CaffeineConfiguration<String, ReplayCacheEntry> config = new CaffeineConfiguration<>();

+            config.setMaximumSize( OptionalLong.of( 4L ) );

+            config.setExpireAfterAccess( OptionalLong.of( 1000L * 1000L * 1000L) );

+            Cache<String, ReplayCacheEntry> kdcReplayCache = cm.createCache( "kdcReplayCache", config );

 

-            Cache< String, Object > ehCache = cacheManager.createCache( 

-                    "kdcReplayCache", 

-                    CacheConfigurationBuilder.newCacheConfigurationBuilder(

-                            String.class, 

-                            Object.class, 

-                            ResourcePoolsBuilder.heap(4)

-                    )

-                        .withExpiry(

-                            ExpiryPolicyBuilder

-                                .timeToIdleExpiration( Duration.ofMillis( 1000 ) )

-                                )

-                        .withExpiry(ExpiryPolicyBuilder.timeToLiveExpiration( Duration.ofMillis( 1000 )))

-            );

-            

-            ReplayCacheImpl cache = new ReplayCacheImpl( ehCache, clockSkew );

+            ReplayCacheImpl cache = new ReplayCacheImpl( kdcReplayCache, clockSkew );

 

             int i = 0;

 

@@ -115,7 +106,7 @@
             }

 

             List<String> keys = new ArrayList<>();

-            Iterator<Entry<String, Object>> it = ehCache.iterator();

+            Iterator<Cache.Entry<String, ReplayCacheEntry>> it = kdcReplayCache.iterator();

             

             while (it.hasNext())

             {

@@ -123,6 +114,7 @@
             }

 

             // We should have 4 entries

+            assertEquals( 4, keys.size() );

             assertTrue( keys.size() != 0 );

 

             // Wait till the timetolive time exceeds

@@ -131,14 +123,14 @@
             // then access the cache so that the objects present in the cache will be expired

             for ( String k : keys )

             {

-                assertNull( ehCache.get( k ) );

+                assertNull( kdcReplayCache.get( k ) );

             }

 

-            assertFalse( ehCache.iterator().hasNext() );

+            assertFalse( kdcReplayCache.iterator().hasNext() );

         }

         finally

         {

-            if ( cacheManager != null && cacheManager.getStatus() != Status.UNINITIALIZED)

+            if ( cacheManager != null && !cacheManager.isClosed() )

             {

                 cacheManager.close();

             }

diff --git a/mavibot-partition/pom.xml b/mavibot-partition/pom.xml
index ea03943..6d7ae6a 100644
--- a/mavibot-partition/pom.xml
+++ b/mavibot-partition/pom.xml
@@ -133,7 +133,7 @@
                 org.apache.directory.server.core.partition.impl.btree.mavibot;version=${project.version}
             </Export-Package>
             <Import-Package>
-                org.ehcache;version=${ehcache.version},
+                javax.cache,
                 org.apache.directory.api.ldap.model.constants;version=${org.apache.directory.api.version},
                 org.apache.directory.api.ldap.model.cursor;version=${org.apache.directory.api.version},
                 org.apache.directory.api.ldap.model.entry;version=${org.apache.directory.api.version},
diff --git a/mavibot-partition/src/main/java/org/apache/directory/server/core/partition/impl/btree/mavibot/MavibotPartition.java b/mavibot-partition/src/main/java/org/apache/directory/server/core/partition/impl/btree/mavibot/MavibotPartition.java
index 42ea6a9..f8b6569 100644
--- a/mavibot-partition/src/main/java/org/apache/directory/server/core/partition/impl/btree/mavibot/MavibotPartition.java
+++ b/mavibot-partition/src/main/java/org/apache/directory/server/core/partition/impl/btree/mavibot/MavibotPartition.java
@@ -30,7 +30,8 @@
 import java.util.List;
 import java.util.Set;
 
-import org.ehcache.Cache;
+import javax.cache.Cache;
+
 import org.apache.directory.api.ldap.model.constants.SchemaConstants;
 import org.apache.directory.api.ldap.model.cursor.Cursor;
 import org.apache.directory.api.ldap.model.cursor.Tuple;
diff --git a/osgi-integ/src/test/java/org/apache/directory/server/osgi/integ/ServerCoreAnnotationsOsgiTest.java b/osgi-integ/src/test/java/org/apache/directory/server/osgi/integ/ServerCoreAnnotationsOsgiTest.java
index 818aad8..2268296 100644
--- a/osgi-integ/src/test/java/org/apache/directory/server/osgi/integ/ServerCoreAnnotationsOsgiTest.java
+++ b/osgi-integ/src/test/java/org/apache/directory/server/osgi/integ/ServerCoreAnnotationsOsgiTest.java
@@ -22,8 +22,22 @@
 
 import static org.junit.Assert.assertNotNull;
 
+import java.util.Set;
+
+import javax.cache.Cache;
+import javax.cache.CacheManager;
+import javax.cache.Caching;
+import javax.cache.spi.CachingProvider;
+
+import org.apache.directory.api.ldap.model.name.Dn;
+import org.apache.directory.server.core.api.CacheService;
 import org.apache.directory.server.core.api.DirectoryService;
 import org.apache.directory.server.core.factory.DefaultDirectoryServiceFactory;
+import org.junit.Test;
+
+import com.github.benmanes.caffeine.jcache.CacheManagerImpl;
+import com.github.benmanes.caffeine.jcache.spi.CaffeineCachingProvider;
+import com.typesafe.config.ConfigFactory;
 
 
 public class ServerCoreAnnotationsOsgiTest extends ServerOsgiTestBase
@@ -44,5 +58,28 @@
         DirectoryService ds = factory.getDirectoryService();
         assertNotNull( ds );
     }
+    
+    @Test
+    public void test123() {
+        CachingProvider cachingProvider = Caching.getCachingProvider(
+            "com.github.benmanes.caffeine.jcache.spi.CaffeineCachingProvider",
+            CacheService.class.getClassLoader());
+        Cache<String, Set> cache = cachingProvider.getCacheManager()
+            .getCache("groupCache", String.class, Set.class);
+        System.out.println( cache );
+    }
+    
+    @Test
+    public void test234() {
+        CaffeineCachingProvider p = new CaffeineCachingProvider();
+        CacheManager cacheManager = new CacheManagerImpl( p, p.getDefaultURI(), getClass().getClassLoader(),
+            p.getDefaultProperties(),
+            ConfigFactory.load( getClass().getClassLoader() ) );
+
+        
+        Cache<String, Set> cache = cacheManager
+            .getCache("groupCache", String.class, Set.class);
+        System.out.println( cache );
+    }
 
 }
diff --git a/osgi-integ/src/test/java/org/apache/directory/server/osgi/integ/ServerOsgiTestBase.java b/osgi-integ/src/test/java/org/apache/directory/server/osgi/integ/ServerOsgiTestBase.java
index a5a6f20..e0de1a0 100644
--- a/osgi-integ/src/test/java/org/apache/directory/server/osgi/integ/ServerOsgiTestBase.java
+++ b/osgi-integ/src/test/java/org/apache/directory/server/osgi/integ/ServerOsgiTestBase.java
@@ -122,7 +122,7 @@
         
         for ( Bundle bundle : bundles )
         {
-            //System.out.println( "### bundle=" + bundle + " " + bundle.getState() );
+            System.out.println( "### bundle=" + bundle + " " + bundle.getState() );
             if ( bundle != null && bundle.getSymbolicName() != null && bundle.getSymbolicName().equals( bundleName ) )
             {
                 bundleFound = true;
diff --git a/osgi-integ/src/test/resources/application.conf b/osgi-integ/src/test/resources/application.conf
new file mode 100644
index 0000000..67bfcb8
--- /dev/null
+++ b/osgi-integ/src/test/resources/application.conf
@@ -0,0 +1,111 @@
+caffeine.jcache {
+
+  groupCache {
+    key-type = java.lang.String
+    value-type = java.util.Set
+    policy {
+      lazy-expiration {
+        creation = 1200s
+      }
+      maximum {
+        size = 10000
+      }
+    }
+  }
+  dnCache {
+    key-type = java.lang.String
+    value-type = org.apache.directory.api.ldap.model.name.Dn
+    policy {
+      lazy-expiration {
+        creation = 600s
+      }
+      maximum {
+        size = 10000
+      }
+    }
+  }
+  kdcReplayCache {
+    key-type = java.lang.String
+    value-type = org.apache.directory.server.kerberos.shared.replay.ReplayCacheImpl.ReplayCacheEntry
+    policy {
+      lazy-expiration {
+        creation = 600s
+      }
+      maximum {
+        size = 100
+      }
+    }
+  }
+  changePwdReplayCache {
+    key-type = java.lang.String
+    value-type = org.apache.directory.server.kerberos.shared.replay.ReplayCacheImpl.ReplayCacheEntry
+    policy {
+      lazy-expiration {
+        creation = 600s
+      }
+      maximum {
+        size = 100
+      }
+    }
+  }
+  "ou=system" {
+    key-type = java.lang.String
+    value-type = java.lang.Object
+    policy {
+      lazy-expiration {
+        creation = 600s
+      }
+      maximum {
+        size = 1000
+      }
+    }
+  }
+  "ou=system:apacheRdn" {
+    key-type = java.lang.String
+    value-type = java.lang.Object
+    policy {
+      lazy-expiration {
+        creation = 600s
+      }
+      maximum {
+        size = 10000
+      }
+    }
+  }
+  alias {
+    key-type = java.lang.String
+    value-type = org.apache.directory.api.ldap.model.name.Dn
+    policy {
+      lazy-expiration {
+        creation = 1200s
+      }
+      maximum {
+        size = 1000
+      }
+    }
+  }
+  entryDn {
+    key-type = java.lang.String
+    value-type = org.apache.directory.api.ldap.model.name.Dn
+    policy {
+      lazy-expiration {
+        creation = 1200s
+      }
+      maximum {
+        size = 1000
+      }
+    }
+  }
+  piar {
+    key-type = java.lang.String
+    value-type = org.apache.directory.server.xdbm.ParentIdAndRdn
+    policy {
+      lazy-expiration {
+        creation = 1200s
+      }
+      maximum {
+        size = 1000
+      }
+    }
+  }
+}
diff --git a/pom.xml b/pom.xml
index ca4ac5b..09778cc 100644
--- a/pom.xml
+++ b/pom.xml
@@ -57,15 +57,15 @@
     <ant.version>1.10.1</ant.version>
     <bcprov.version>1.60</bcprov.version>
     <commons.cli.version>1.4</commons.cli.version>
-    <commons.codec.version>1.11</commons.codec.version>
-    <commons.collections.version>4.2</commons.collections.version>
+    <commons.codec.version>1.12</commons.codec.version>
+    <commons.collections.version>4.3</commons.collections.version>
     <commons.daemon.version>1.0.15</commons.daemon.version>
     <commons.lang.version>3.8.1</commons.lang.version>
     <commons.net.version>3.6</commons.net.version>
-    <commons.pool.version>2.6.0</commons.pool.version>
+    <commons.pool.version>2.6.1</commons.pool.version>
     <dnsjava.version>2.1.8</dnsjava.version>
-    <!-- OSGi related issue in ehcache 3.6.x: https://github.com/ehcache/ehcache3/issues/2554 -->
-    <ehcache.version>3.5.3</ehcache.version>
+    <javax.cache.version>1.1.0</javax.cache.version>
+    <caffeine.cache.version>2.7.0</caffeine.cache.version>
     <findbugs.annotations.version>1.0.0</findbugs.annotations.version>
     <jetty.version>9.4.14.v20181114</jetty.version>
     <!-- The Jetty bundle exports are using version 9.4.5, not 9.4.5.v20170502... -->
@@ -78,7 +78,7 @@
     <maven.artifact.version>3.3.9</maven.artifact.version>
     <maven.plugin.api.version>3.3.9</maven.plugin.api.version>
     <maven.project.version>3.0-alpha-2</maven.project.version>
-    <mina.core.version>2.0.18</mina.core.version>
+    <mina.core.version>2.1.0</mina.core.version>
     <org.apache.felix.version>6.0.0</org.apache.felix.version>
     <pax-exam.version>4.11.0</pax-exam.version>
     <pax-url.version>2.5.4</pax-url.version>
@@ -1238,11 +1238,37 @@
         <artifactId>annotations</artifactId>
         <version>${findbugs.annotations.version}</version>
       </dependency>
-      
+
       <dependency>
-        <groupId>org.ehcache</groupId>
-        <artifactId>ehcache</artifactId>
-        <version>${ehcache.version}</version>
+        <groupId>javax.cache</groupId>
+        <artifactId>cache-api</artifactId>
+        <version>${javax.cache.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>com.github.ben-manes.caffeine</groupId>
+        <artifactId>caffeine</artifactId>
+        <version>${caffeine.cache.version}</version>
+        <exclusions>
+          <exclusion>
+            <groupId>com.google.errorprone</groupId>
+            <artifactId>error_prone_annotations</artifactId>
+          </exclusion>
+          <exclusion>
+            <groupId>org.checkerframework</groupId>
+            <artifactId>checker-qual</artifactId>
+           </exclusion>
+         </exclusions>
+      </dependency>
+      <dependency>
+        <groupId>com.github.ben-manes.caffeine</groupId>
+        <artifactId>jcache</artifactId>
+        <version>${caffeine.cache.version}</version>
+        <exclusions>
+          <exclusion>
+            <groupId>javax.inject</groupId>
+            <artifactId>javax.inject</artifactId>
+          </exclusion>
+         </exclusions>
       </dependency>
     </dependencies>
   </dependencyManagement>
diff --git a/protocol-kerberos/pom.xml b/protocol-kerberos/pom.xml
index aed97c0..897f1e1 100644
--- a/protocol-kerberos/pom.xml
+++ b/protocol-kerberos/pom.xml
@@ -73,8 +73,8 @@
     </dependency>
 
     <dependency>
-      <groupId>org.ehcache</groupId>
-      <artifactId>ehcache</artifactId>
+      <groupId>javax.cache</groupId>
+      <artifactId>cache-api</artifactId>
     </dependency>
   </dependencies>
 
@@ -139,7 +139,7 @@
                 javax.naming,
                 javax.naming.directory,
                 javax.security.auth.kerberos,
-                org.ehcache;version=${ehcache.version},
+                javax.cache,
                 org.apache.directory.api.asn1;version=${org.apache.directory.api.version},
                 org.apache.directory.api.asn1.ber;version=${org.apache.directory.api.version},
                 org.apache.directory.api.asn1.ber.tlv;version=${org.apache.directory.api.version},
diff --git a/protocol-kerberos/src/main/java/org/apache/directory/server/kerberos/changepwd/ChangePasswordServer.java b/protocol-kerberos/src/main/java/org/apache/directory/server/kerberos/changepwd/ChangePasswordServer.java
index b9b9b90..4a80c48 100644
--- a/protocol-kerberos/src/main/java/org/apache/directory/server/kerberos/changepwd/ChangePasswordServer.java
+++ b/protocol-kerberos/src/main/java/org/apache/directory/server/kerberos/changepwd/ChangePasswordServer.java
@@ -22,6 +22,8 @@
 
 import java.io.IOException;
 
+import javax.cache.Cache;
+
 import org.apache.directory.api.ldap.model.exception.LdapInvalidDnException;
 import org.apache.directory.api.ldap.model.name.Dn;
 import org.apache.directory.server.kerberos.ChangePasswordConfig;
@@ -29,6 +31,7 @@
 import org.apache.directory.server.kerberos.kdc.DirectoryPrincipalStore;
 import org.apache.directory.server.kerberos.shared.replay.ReplayCache;
 import org.apache.directory.server.kerberos.shared.replay.ReplayCacheImpl;
+import org.apache.directory.server.kerberos.shared.replay.ReplayCacheImpl.ReplayCacheEntry;
 import org.apache.directory.server.kerberos.shared.store.PrincipalStore;
 import org.apache.directory.server.protocol.shared.DirectoryBackedService;
 import org.apache.directory.server.protocol.shared.transport.TcpTransport;
@@ -37,7 +40,6 @@
 import org.apache.mina.core.service.IoAcceptor;
 import org.apache.mina.transport.socket.DatagramSessionConfig;
 import org.apache.mina.transport.socket.SocketAcceptor;
-import org.ehcache.Cache;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -94,8 +96,8 @@
 
         LOG.debug( "initializing the changepassword replay cache" );
 
-        Cache< String, Object > cache = getDirectoryService().getCacheService().
-            getCache( "changePwdReplayCache", String.class, Object.class );
+        Cache<String, ReplayCacheEntry> cache = getDirectoryService().getCacheService().getCache( "changePwdReplayCache",
+            String.class, ReplayCacheEntry.class );
         replayCache = new ReplayCacheImpl( cache );
 
         for ( Transport transport : transports )
diff --git a/protocol-kerberos/src/main/java/org/apache/directory/server/kerberos/kdc/KdcServer.java b/protocol-kerberos/src/main/java/org/apache/directory/server/kerberos/kdc/KdcServer.java
index e23488f..4232c53 100644
--- a/protocol-kerberos/src/main/java/org/apache/directory/server/kerberos/kdc/KdcServer.java
+++ b/protocol-kerberos/src/main/java/org/apache/directory/server/kerberos/kdc/KdcServer.java
@@ -22,6 +22,8 @@
 
 import java.io.IOException;
 
+import javax.cache.Cache;
+
 import org.apache.directory.api.ldap.model.exception.LdapInvalidDnException;
 import org.apache.directory.api.ldap.model.name.Dn;
 import org.apache.directory.server.kerberos.KerberosConfig;
@@ -30,6 +32,7 @@
 import org.apache.directory.server.kerberos.protocol.codec.KerberosProtocolCodecFactory;
 import org.apache.directory.server.kerberos.shared.replay.ReplayCache;
 import org.apache.directory.server.kerberos.shared.replay.ReplayCacheImpl;
+import org.apache.directory.server.kerberos.shared.replay.ReplayCacheImpl.ReplayCacheEntry;
 import org.apache.directory.server.kerberos.shared.store.PrincipalStore;
 import org.apache.directory.server.protocol.shared.DirectoryBackedService;
 import org.apache.directory.server.protocol.shared.transport.TcpTransport;
@@ -39,7 +42,6 @@
 import org.apache.mina.core.service.IoAcceptor;
 import org.apache.mina.filter.codec.ProtocolCodecFilter;
 import org.apache.mina.transport.socket.nio.NioSocketAcceptor;
-import org.ehcache.Cache;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -110,8 +112,8 @@
 
         LOG.debug( "initializing the kerberos replay cache" );
 
-        Cache< String, Object > cache = getDirectoryService().getCacheService().
-            getCache( "kdcReplayCache", String.class, Object.class );
+        Cache<String, ReplayCacheEntry> cache = getDirectoryService().getCacheService().getCache( "kdcReplayCache",
+            String.class, ReplayCacheEntry.class );
         replayCache = new ReplayCacheImpl( cache, config.getAllowableClockSkew() );
 
         // Kerberos can use UDP or TCP
diff --git a/xdbm-partition/pom.xml b/xdbm-partition/pom.xml
index 84c156a..11ebbfc 100644
--- a/xdbm-partition/pom.xml
+++ b/xdbm-partition/pom.xml
@@ -121,8 +121,7 @@
             </Export-Package>
             <Import-Package>
                 javax.naming,
-                org.ehcache;version=${ehcache.version},
-                org.ehcache.config;version=${ehcache.version},
+                javax.cache,
                 org.apache.directory.api.i18n;version=${org.apache.directory.api.version},
                 org.apache.directory.api.ldap.model.constants;version=${org.apache.directory.api.version},
                 org.apache.directory.api.ldap.model.cursor;version=${org.apache.directory.api.version},
diff --git a/xdbm-partition/src/main/java/org/apache/directory/server/core/partition/impl/btree/AbstractBTreePartition.java b/xdbm-partition/src/main/java/org/apache/directory/server/core/partition/impl/btree/AbstractBTreePartition.java
index 51fd374..a0c4dcd 100644
--- a/xdbm-partition/src/main/java/org/apache/directory/server/core/partition/impl/btree/AbstractBTreePartition.java
+++ b/xdbm-partition/src/main/java/org/apache/directory/server/core/partition/impl/btree/AbstractBTreePartition.java
@@ -35,8 +35,7 @@
 import java.util.concurrent.locks.ReadWriteLock;
 import java.util.concurrent.locks.ReentrantReadWriteLock;
 
-import org.ehcache.Cache;
-import org.ehcache.config.CacheConfiguration;
+import javax.cache.Cache;
 
 import org.apache.directory.api.ldap.model.constants.SchemaConstants;
 import org.apache.directory.api.ldap.model.cursor.Cursor;
@@ -627,7 +626,7 @@
         {
             aliasCache = cacheService.getCache( "alias", String.class, Dn.class );
     
-            CacheConfiguration< String, Dn > aliasCacheConfig = aliasCache.getRuntimeConfiguration();
+            //CacheConfiguration< String, Dn > aliasCacheConfig = aliasCache.getRuntimeConfiguration();
             
             piarCache = cacheService.getCache( "piar", String.class, ParentIdAndRdn.class );
             
diff --git a/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/Store.java b/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/Store.java
index 595f4ab..4978d61 100644
--- a/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/Store.java
+++ b/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/Store.java
@@ -30,7 +30,7 @@
 import java.util.Set;
 import java.util.concurrent.locks.ReadWriteLock;
 
-import org.ehcache.Cache;
+import javax.cache.Cache;
 
 import org.apache.directory.api.ldap.model.constants.SchemaConstants;
 import org.apache.directory.api.ldap.model.entry.Entry;
@@ -485,5 +485,5 @@
      * @return the Alias cache
      * @return The cache
      */
-    Cache< String, Dn > getAliasCache();
+    Cache<String, Dn> getAliasCache();
 }