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();
}