You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by jp...@apache.org on 2014/06/15 03:02:48 UTC
git commit: PMUD-5802 added ability to use a global ehcache manager
Repository: cxf
Updated Branches:
refs/heads/cxf5802 [created] 8e55e8a75
PMUD-5802 added ability to use a global ehcache manager
Project: http://git-wip-us.apache.org/repos/asf/cxf/repo
Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/8e55e8a7
Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/8e55e8a7
Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/8e55e8a7
Branch: refs/heads/cxf5802
Commit: 8e55e8a75dd853f45a0246d98732b6821adf6a85
Parents: beaa13d
Author: Jason Pell <ja...@pellcorp.com>
Authored: Sun Jun 15 10:58:22 2014 +1000
Committer: Jason Pell <ja...@pellcorp.com>
Committed: Sun Jun 15 10:58:22 2014 +1000
----------------------------------------------------------------------
.../ws/security/cache/EHCacheManagerHolder.java | 59 ++++++++++++++------
.../ws/security/cache/EHCacheReplayCache.java | 6 ++
.../security/tokenstore/EHCacheTokenStore.java | 5 ++
.../cache/EHCacheManagerHolderTest.java | 46 +++++++++++++--
.../cxf/sts/cache/EHCacheIdentityCache.java | 5 ++
5 files changed, 98 insertions(+), 23 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cxf/blob/8e55e8a7/rt/ws/security/src/main/java/org/apache/cxf/ws/security/cache/EHCacheManagerHolder.java
----------------------------------------------------------------------
diff --git a/rt/ws/security/src/main/java/org/apache/cxf/ws/security/cache/EHCacheManagerHolder.java b/rt/ws/security/src/main/java/org/apache/cxf/ws/security/cache/EHCacheManagerHolder.java
index 3b343b8..df40b2c 100644
--- a/rt/ws/security/src/main/java/org/apache/cxf/ws/security/cache/EHCacheManagerHolder.java
+++ b/rt/ws/security/src/main/java/org/apache/cxf/ws/security/cache/EHCacheManagerHolder.java
@@ -40,9 +40,12 @@ import org.apache.cxf.resource.ResourceManager;
* We need to reference count the EHCacheManager things
*/
public final class EHCacheManagerHolder {
+ public static final String GLOBAL_EHCACHE_MANAGER_NAME =
+ "ws-security.global.ehcachemanager";
+
private static final ConcurrentHashMap<String, AtomicInteger> COUNTS
= new ConcurrentHashMap<String, AtomicInteger>(8, 0.75f, 2);
-
+
private static Method cacheManagerCreateMethodNoArg;
private static Method createMethodURLArg;
private static Method cacheManagerCreateMethodConfigurationArg;
@@ -91,30 +94,50 @@ public final class EHCacheManagerHolder {
public static CacheManager getCacheManager(Bus bus, URL configFileURL) {
CacheManager cacheManager = null;
- if (configFileURL == null) {
- //using the default
- cacheManager = findDefaultCacheManager(bus);
- }
+
+ String globalCacheManagerName = getGlobalCacheManagerName(bus);
+ if (globalCacheManagerName != null) {
+ cacheManager = CacheManager.getCacheManager(globalCacheManagerName);
+ }
+
+ // notice for a global cache manager, we skip the count stuff which
+ // means the release cache manager method below is a no op, as the
+ // COUNT will not have been initialised.
if (cacheManager == null) {
if (configFileURL == null) {
- cacheManager = createCacheManager();
- } else {
- cacheManager = createCacheManager(configFileURL);
+ //using the default
+ cacheManager = findDefaultCacheManager(bus);
+ }
+
+ if (cacheManager == null) {
+ if (configFileURL == null) {
+ cacheManager = createCacheManager();
+ } else {
+ cacheManager = createCacheManager(configFileURL);
+ }
+ }
+
+ AtomicInteger a = COUNTS.get(cacheManager.getName());
+ if (a == null) {
+ COUNTS.putIfAbsent(cacheManager.getName(), new AtomicInteger());
+ a = COUNTS.get(cacheManager.getName());
+ }
+ if (a.incrementAndGet() == 1) {
+ //System.out.println("Create!! " + cacheManager.getName());
}
- }
- AtomicInteger a = COUNTS.get(cacheManager.getName());
- if (a == null) {
- COUNTS.putIfAbsent(cacheManager.getName(), new AtomicInteger());
- a = COUNTS.get(cacheManager.getName());
- }
- if (a.incrementAndGet() == 1) {
- //System.out.println("Create!! " + cacheManager.getName());
}
return cacheManager;
}
-
- private static CacheManager findDefaultCacheManager(Bus bus) {
+ private static String getGlobalCacheManagerName(Bus bus) {
+ if (bus != null) {
+ return (String) bus.getProperty(GLOBAL_EHCACHE_MANAGER_NAME);
+ } else {
+ return null;
+ }
+ }
+
+ private static CacheManager findDefaultCacheManager(Bus bus) {
String defaultConfigFile = "cxf-ehcache.xml";
URL configFileURL = null;
String busId = "";
http://git-wip-us.apache.org/repos/asf/cxf/blob/8e55e8a7/rt/ws/security/src/main/java/org/apache/cxf/ws/security/cache/EHCacheReplayCache.java
----------------------------------------------------------------------
diff --git a/rt/ws/security/src/main/java/org/apache/cxf/ws/security/cache/EHCacheReplayCache.java b/rt/ws/security/src/main/java/org/apache/cxf/ws/security/cache/EHCacheReplayCache.java
index 2fef240..eef974d 100644
--- a/rt/ws/security/src/main/java/org/apache/cxf/ws/security/cache/EHCacheReplayCache.java
+++ b/rt/ws/security/src/main/java/org/apache/cxf/ws/security/cache/EHCacheReplayCache.java
@@ -129,9 +129,15 @@ public class EHCacheReplayCache implements ReplayCache, Closeable, BusLifeCycleL
public synchronized void close() {
if (cacheManager != null) {
+ // this step is especially important for global shared cache manager
+ if (cache != null) {
+ cacheManager.removeCache(cache.getName());
+ }
+
EHCacheManagerHolder.releaseCacheManger(cacheManager);
cacheManager = null;
cache = null;
+
if (bus != null) {
bus.getExtension(BusLifeCycleManager.class).unregisterLifeCycleListener(this);
}
http://git-wip-us.apache.org/repos/asf/cxf/blob/8e55e8a7/rt/ws/security/src/main/java/org/apache/cxf/ws/security/tokenstore/EHCacheTokenStore.java
----------------------------------------------------------------------
diff --git a/rt/ws/security/src/main/java/org/apache/cxf/ws/security/tokenstore/EHCacheTokenStore.java b/rt/ws/security/src/main/java/org/apache/cxf/ws/security/tokenstore/EHCacheTokenStore.java
index cc894f7..3ee6c84 100644
--- a/rt/ws/security/src/main/java/org/apache/cxf/ws/security/tokenstore/EHCacheTokenStore.java
+++ b/rt/ws/security/src/main/java/org/apache/cxf/ws/security/tokenstore/EHCacheTokenStore.java
@@ -177,6 +177,11 @@ public class EHCacheTokenStore implements TokenStore, Closeable, BusLifeCycleLis
public void close() {
if (cacheManager != null) {
+ // this step is especially important for global shared cache manager
+ if (cache != null) {
+ cacheManager.removeCache(cache.getName());
+ }
+
EHCacheManagerHolder.releaseCacheManger(cacheManager);
cacheManager = null;
cache = null;
http://git-wip-us.apache.org/repos/asf/cxf/blob/8e55e8a7/rt/ws/security/src/test/java/org/apache/cxf/ws/security/cache/EHCacheManagerHolderTest.java
----------------------------------------------------------------------
diff --git a/rt/ws/security/src/test/java/org/apache/cxf/ws/security/cache/EHCacheManagerHolderTest.java b/rt/ws/security/src/test/java/org/apache/cxf/ws/security/cache/EHCacheManagerHolderTest.java
index b062230..e1a8558 100644
--- a/rt/ws/security/src/test/java/org/apache/cxf/ws/security/cache/EHCacheManagerHolderTest.java
+++ b/rt/ws/security/src/test/java/org/apache/cxf/ws/security/cache/EHCacheManagerHolderTest.java
@@ -21,18 +21,15 @@ package org.apache.cxf.ws.security.cache;
import net.sf.ehcache.CacheManager;
import net.sf.ehcache.Status;
-
import net.sf.ehcache.config.Configuration;
import net.sf.ehcache.config.ConfigurationFactory;
+import org.apache.cxf.Bus;
+import org.apache.cxf.BusFactory;
import org.junit.Assert;
import org.junit.Test;
-/**
- *
- */
public class EHCacheManagerHolderTest extends Assert {
-
@Test
public void testCreateCacheManager() {
Configuration conf =
@@ -53,6 +50,45 @@ public class EHCacheManagerHolderTest extends Assert {
manager2.shutdown();
assertEquals(Status.STATUS_SHUTDOWN, manager2.getStatus());
+ }
+
+ @Test
+ public void testUseGlobalManager() {
+ Bus bus = BusFactory.getThreadDefaultBus();
+
+ Configuration conf =
+ ConfigurationFactory.parseConfiguration(
+ EHCacheManagerHolder.class.getResource("/cxf-test-ehcache.xml"));
+ conf.setName("myGlobalConfig");
+
+ EHCacheManagerHolder.createCacheManager(conf);
+
+ CacheManager manager = EHCacheManagerHolder.getCacheManager(bus,
+ EHCacheManagerHolder.class.getResource("/cxf-test-ehcache.xml"));
+
+ assertFalse(manager.getName().equals("myGlobalConfig"));
+ EHCacheManagerHolder.releaseCacheManger(manager);
+ assertEquals(Status.STATUS_SHUTDOWN, manager.getStatus());
+
+ bus.setProperty(EHCacheManagerHolder.GLOBAL_EHCACHE_MANAGER_NAME, "myGlobalConfig");
+
+ manager = EHCacheManagerHolder.getCacheManager(bus,
+ EHCacheManagerHolder.class.getResource("/cxf-test-ehcache.xml"));
+
+ assertEquals("myGlobalConfig", manager.getName());
+ EHCacheManagerHolder.releaseCacheManger(manager);
+ assertEquals(Status.STATUS_ALIVE, manager.getStatus());
+
+ manager.shutdown();
+ assertEquals(Status.STATUS_SHUTDOWN, manager.getStatus());
+
+ bus.setProperty(EHCacheManagerHolder.GLOBAL_EHCACHE_MANAGER_NAME, "myGlobalConfigXXX");
+
+ manager = EHCacheManagerHolder.getCacheManager(bus,
+ EHCacheManagerHolder.class.getResource("/cxf-test-ehcache.xml"));
+ assertFalse(manager.getName().equals("myGlobalConfig"));
+ EHCacheManagerHolder.releaseCacheManger(manager);
+ assertEquals(Status.STATUS_SHUTDOWN, manager.getStatus());
}
}
http://git-wip-us.apache.org/repos/asf/cxf/blob/8e55e8a7/services/sts/sts-core/src/main/java/org/apache/cxf/sts/cache/EHCacheIdentityCache.java
----------------------------------------------------------------------
diff --git a/services/sts/sts-core/src/main/java/org/apache/cxf/sts/cache/EHCacheIdentityCache.java b/services/sts/sts-core/src/main/java/org/apache/cxf/sts/cache/EHCacheIdentityCache.java
index b9257c0..64a825f 100644
--- a/services/sts/sts-core/src/main/java/org/apache/cxf/sts/cache/EHCacheIdentityCache.java
+++ b/services/sts/sts-core/src/main/java/org/apache/cxf/sts/cache/EHCacheIdentityCache.java
@@ -231,6 +231,11 @@ public class EHCacheIdentityCache
public void close() {
if (cacheManager != null) {
+ // this step is especially important for global shared cache manager
+ if (cache != null) {
+ cacheManager.removeCache(cache.getName());
+ }
+
EHCacheManagerHolder.releaseCacheManger(cacheManager);
cacheManager = null;
cache = null;