summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Stepper2007-09-17 15:43:47 (EDT)
committerEike Stepper2007-09-17 15:43:47 (EDT)
commitd1820adc3aee9aaba5a44796b0837bf9a77d1826 (patch)
tree8edddab0a3fff3c54ea294292facef5feea7076e
parentf599c65676a4dbdca1ad29f1d51d413a2a575451 (diff)
downloadcdo-d1820adc3aee9aaba5a44796b0837bf9a77d1826.zip
cdo-d1820adc3aee9aaba5a44796b0837bf9a77d1826.tar.gz
cdo-d1820adc3aee9aaba5a44796b0837bf9a77d1826.tar.bz2
[203538] Limit memory consumption in CDORevisionResolverImpl
https://bugs.eclipse.org/bugs/show_bug.cgi?id=203538
-rw-r--r--plugins/org.eclipse.net4j.util/META-INF/MANIFEST.MF4
-rw-r--r--plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/internal/util/cache/AbsoluteConditionPolicy.java65
-rw-r--r--plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/internal/util/cache/CacheMonitor.java198
-rw-r--r--plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/internal/util/cache/CacheRegistration.java47
-rw-r--r--plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/internal/util/cache/HysteresisConditionPolicy.java105
-rw-r--r--plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/cache/ICache.java46
-rw-r--r--plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/cache/ICacheMonitor.java60
-rw-r--r--plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/cache/ICacheMonitorEvent.java25
-rw-r--r--plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/cache/ICacheProbe.java21
-rw-r--r--plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/cache/ICacheRegistration.java19
10 files changed, 589 insertions, 1 deletions
diff --git a/plugins/org.eclipse.net4j.util/META-INF/MANIFEST.MF b/plugins/org.eclipse.net4j.util/META-INF/MANIFEST.MF
index 05b424d..8c7fa8f 100644
--- a/plugins/org.eclipse.net4j.util/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.net4j.util/META-INF/MANIFEST.MF
@@ -11,7 +11,8 @@ Import-Package: org.eclipse.osgi.service.debug;version="1.0.0";resolution:=optio
org.osgi.framework;version="1.3.0";resolution:=optional,
org.osgi.service.log;version="1.3.0";resolution:=optional,
org.osgi.util.tracker;version="1.3.0";resolution:=optional
-Export-Package: org.eclipse.net4j.internal.util.collection;version="0.8.0",
+Export-Package: org.eclipse.net4j.internal.util.cache;version="0.8.0",
+ org.eclipse.net4j.internal.util.collection;version="0.8.0",
org.eclipse.net4j.internal.util.concurrent;version="0.8.0",
org.eclipse.net4j.internal.util.container;version="0.8.0",
org.eclipse.net4j.internal.util.container.delegate;version="0.8.0",
@@ -26,6 +27,7 @@ Export-Package: org.eclipse.net4j.internal.util.collection;version="0.8.0",
org.eclipse.net4j.internal.util.registry;version="0.8.0",
org.eclipse.net4j.internal.util.transaction;version="0.8.0",
org.eclipse.net4j.util;version="0.8.0",
+ org.eclipse.net4j.util.cache;version="0.8.0",
org.eclipse.net4j.util.collection;version="0.8.0",
org.eclipse.net4j.util.concurrent;version="0.8.0",
org.eclipse.net4j.util.container;version="0.8.0",
diff --git a/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/internal/util/cache/AbsoluteConditionPolicy.java b/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/internal/util/cache/AbsoluteConditionPolicy.java
new file mode 100644
index 0000000..39e1eae
--- /dev/null
+++ b/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/internal/util/cache/AbsoluteConditionPolicy.java
@@ -0,0 +1,65 @@
+/***************************************************************************
+ * Copyright (c) 2004 - 2007 Eike Stepper, Germany.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ **************************************************************************/
+package org.eclipse.net4j.internal.util.cache;
+
+import org.eclipse.net4j.util.cache.ICacheMonitor;
+import org.eclipse.net4j.util.cache.ICacheMonitor.Condition;
+
+/**
+ * @author Eike Stepper
+ */
+public class AbsoluteConditionPolicy implements ICacheMonitor.ConditionPolicy
+{
+ private long thresholdRedYellow;
+
+ private long thresholdYellowGreen;
+
+ public AbsoluteConditionPolicy(long thresholdRedYellow, long thresholdYellowGreen)
+ {
+ if (thresholdRedYellow > thresholdYellowGreen)
+ {
+ throw new IllegalArgumentException("thresholdRedYellow > thresholdYellowGreen");
+ }
+
+ this.thresholdRedYellow = thresholdRedYellow;
+ this.thresholdYellowGreen = thresholdYellowGreen;
+ }
+
+ public long getThresholdRedYellow()
+ {
+ return thresholdRedYellow;
+ }
+
+ public long getThresholdYellowGreen()
+ {
+ return thresholdYellowGreen;
+ }
+
+ public Condition getNewCondition(Condition oldCondition)
+ {
+ return getNewCondition(oldCondition, Runtime.getRuntime().freeMemory());
+ }
+
+ protected Condition getNewCondition(Condition oldCondition, long freeMemory)
+ {
+ if (freeMemory > thresholdYellowGreen)
+ {
+ return Condition.GREEN;
+ }
+
+ if (freeMemory > thresholdRedYellow)
+ {
+ return Condition.YELLOW;
+ }
+
+ return Condition.RED;
+ }
+}
diff --git a/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/internal/util/cache/CacheMonitor.java b/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/internal/util/cache/CacheMonitor.java
new file mode 100644
index 0000000..4a9bc72
--- /dev/null
+++ b/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/internal/util/cache/CacheMonitor.java
@@ -0,0 +1,198 @@
+/***************************************************************************
+ * Copyright (c) 2004 - 2007 Eike Stepper, Germany.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ **************************************************************************/
+package org.eclipse.net4j.internal.util.cache;
+
+import org.eclipse.net4j.internal.util.event.Event;
+import org.eclipse.net4j.internal.util.lifecycle.Worker;
+import org.eclipse.net4j.util.ImplementationError;
+import org.eclipse.net4j.util.cache.ICache;
+import org.eclipse.net4j.util.cache.ICacheMonitor;
+import org.eclipse.net4j.util.cache.ICacheMonitorEvent;
+import org.eclipse.net4j.util.cache.ICacheRegistration;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @author Eike Stepper
+ */
+public class CacheMonitor extends Worker implements ICacheMonitor
+{
+ private static final long DEFAULT_PAUSE_GREEN = 60L * 1000L; // 1 minute
+
+ private static final long DEFAULT_PAUSE_YELLOW = 5L * 1000L; // 5 seconds
+
+ private static final long DEFAULT_PAUSE_RED = 100L; // 100 milliseconds
+
+ private long pauseGREEN = DEFAULT_PAUSE_GREEN;
+
+ private long pauseYELLOW = DEFAULT_PAUSE_YELLOW;
+
+ private long pauseRED = DEFAULT_PAUSE_RED;
+
+ private ConditionPolicy conditionPolicy;
+
+ private Condition condition;
+
+ private Map<ICache, ICacheRegistration> caches = new HashMap<ICache, ICacheRegistration>();
+
+ public CacheMonitor()
+ {
+ }
+
+ public long getPauseGREEN()
+ {
+ return pauseGREEN;
+ }
+
+ public void setPauseGREEN(long pauseGREEN)
+ {
+ this.pauseGREEN = pauseGREEN;
+ }
+
+ public long getPauseYELLOW()
+ {
+ return pauseYELLOW;
+ }
+
+ public void setPauseYELLOW(long pauseYELLOW)
+ {
+ this.pauseYELLOW = pauseYELLOW;
+ }
+
+ public long getPauseRED()
+ {
+ return pauseRED;
+ }
+
+ public void setPauseRED(long pauseRED)
+ {
+ this.pauseRED = pauseRED;
+ }
+
+ public ConditionPolicy getConditionPolicy()
+ {
+ return conditionPolicy;
+ }
+
+ public void setConditionPolicy(ConditionPolicy conditionPolicy)
+ {
+ this.conditionPolicy = conditionPolicy;
+ }
+
+ public Condition getCondition()
+ {
+ return condition;
+ }
+
+ public void setCondition(Condition newCondition)
+ {
+ if (newCondition == null)
+ {
+ throw new ImplementationError("newCondition == null");
+ }
+
+ Condition oldCondition = condition;
+ if (newCondition != oldCondition)
+ {
+ condition = newCondition;
+ fireEvent(new CacheMonitorEvent(oldCondition, newCondition));
+ }
+ }
+
+ public ICacheRegistration registerCache(ICache cache)
+ {
+ ICacheRegistration registration = new CacheRegistration(this, cache);
+ caches.put(cache, registration);
+ return registration;
+ }
+
+ public void deregisterCache(ICache cache)
+ {
+ ICacheRegistration registration = caches.remove(cache);
+ if (registration != null)
+ {
+ registration.dispose();
+ }
+ }
+
+ @Override
+ protected void doBeforeActivate() throws Exception
+ {
+ super.doBeforeActivate();
+ if (conditionPolicy == null)
+ {
+ throw new IllegalStateException("conditionPolicy == null");
+ }
+ }
+
+ @Override
+ protected void work(WorkContext context) throws Exception
+ {
+ Condition newCondition = conditionPolicy.getNewCondition(condition);
+ setCondition(newCondition);
+
+ switch (newCondition)
+ {
+ case GREEN:
+ context.nextWork(pauseGREEN);
+ break;
+
+ case YELLOW:
+ context.nextWork(pauseYELLOW);
+ break;
+
+ case RED:
+ handleRedCondition();
+ context.nextWork(pauseRED);
+ break;
+ }
+ }
+
+ protected void handleRedCondition()
+ {
+ }
+
+ /**
+ * @author Eike Stepper
+ */
+ private final class CacheMonitorEvent extends Event implements ICacheMonitorEvent
+ {
+ private static final long serialVersionUID = 1L;
+
+ private Condition oldCondition;
+
+ private Condition newCondition;
+
+ public CacheMonitorEvent(Condition oldCondition, Condition newCondition)
+ {
+ super(CacheMonitor.this);
+ this.oldCondition = oldCondition;
+ this.newCondition = newCondition;
+ }
+
+ public ICacheMonitor getCacheMonitor()
+ {
+ return CacheMonitor.this;
+ }
+
+ public Condition getOldCondition()
+ {
+ return oldCondition;
+ }
+
+ public Condition getNewCondition()
+ {
+ return newCondition;
+ }
+
+ }
+}
diff --git a/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/internal/util/cache/CacheRegistration.java b/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/internal/util/cache/CacheRegistration.java
new file mode 100644
index 0000000..50b160b
--- /dev/null
+++ b/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/internal/util/cache/CacheRegistration.java
@@ -0,0 +1,47 @@
+/***************************************************************************
+ * Copyright (c) 2004 - 2007 Eike Stepper, Germany.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ **************************************************************************/
+package org.eclipse.net4j.internal.util.cache;
+
+import org.eclipse.net4j.util.cache.ICache;
+import org.eclipse.net4j.util.cache.ICacheMonitor;
+import org.eclipse.net4j.util.cache.ICacheRegistration;
+
+/**
+ * @author Eike Stepper
+ */
+public class CacheRegistration implements ICacheRegistration
+{
+ private ICacheMonitor cacheMonitor;
+
+ private ICache cache;
+
+ public CacheRegistration(ICacheMonitor cacheMonitor, ICache cache)
+ {
+ this.cacheMonitor = cacheMonitor;
+ this.cache = cache;
+ }
+
+ public void dispose()
+ {
+ cacheMonitor = null;
+ cache = null;
+ }
+
+ public ICacheMonitor getCacheMonitor()
+ {
+ return cacheMonitor;
+ }
+
+ public ICache getCache()
+ {
+ return cache;
+ }
+}
diff --git a/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/internal/util/cache/HysteresisConditionPolicy.java b/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/internal/util/cache/HysteresisConditionPolicy.java
new file mode 100644
index 0000000..f5a4066
--- /dev/null
+++ b/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/internal/util/cache/HysteresisConditionPolicy.java
@@ -0,0 +1,105 @@
+/***************************************************************************
+ * Copyright (c) 2004 - 2007 Eike Stepper, Germany.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ **************************************************************************/
+package org.eclipse.net4j.internal.util.cache;
+
+import org.eclipse.net4j.util.cache.ICacheMonitor.Condition;
+
+/**
+ * @author Eike Stepper
+ */
+public class HysteresisConditionPolicy extends AbsoluteConditionPolicy
+{
+ private long thresholdYellowRed;
+
+ private long thresholdGreenYellow;
+
+ public HysteresisConditionPolicy(long thresholdYellowRed, long thresholdRedYellow, long thresholdGreenYellow,
+ long thresholdYellowGreen)
+ {
+ super(thresholdRedYellow, thresholdYellowGreen);
+ if (thresholdYellowRed > thresholdRedYellow)
+ {
+ throw new IllegalArgumentException("thresholdYellowRed > thresholdRedYellow");
+ }
+
+ if (thresholdRedYellow > thresholdGreenYellow)
+ {
+ throw new IllegalArgumentException("thresholdRedYellow > thresholdGreenYellow");
+ }
+
+ if (thresholdGreenYellow > thresholdYellowGreen)
+ {
+ throw new IllegalArgumentException("thresholdGreenYellow > thresholdYellowGreen");
+ }
+
+ this.thresholdGreenYellow = thresholdGreenYellow;
+ this.thresholdYellowRed = thresholdYellowRed;
+ }
+
+ public long getThresholdYellowRed()
+ {
+ return thresholdYellowRed;
+ }
+
+ public long getThresholdGreenYellow()
+ {
+ return thresholdGreenYellow;
+ }
+
+ @Override
+ protected Condition getNewCondition(Condition oldCondition, long freeMemory)
+ {
+ switch (oldCondition)
+ {
+ case GREEN:
+ if (freeMemory < thresholdYellowRed)
+ {
+ return Condition.RED;
+ }
+
+ if (freeMemory < thresholdGreenYellow)
+ {
+ return Condition.YELLOW;
+ }
+
+ return Condition.GREEN;
+
+ case YELLOW:
+ if (freeMemory < thresholdYellowRed)
+ {
+ return Condition.RED;
+ }
+
+ if (freeMemory > getThresholdYellowGreen())
+ {
+ return Condition.GREEN;
+ }
+
+ return Condition.YELLOW;
+
+ case RED:
+ if (freeMemory > getThresholdYellowGreen())
+ {
+ return Condition.GREEN;
+ }
+
+ if (freeMemory > getThresholdRedYellow())
+ {
+ return Condition.YELLOW;
+ }
+
+ return Condition.RED;
+
+ default:
+ throw new IllegalArgumentException("oldCondition == " + oldCondition);
+ }
+ }
+}
diff --git a/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/cache/ICache.java b/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/cache/ICache.java
new file mode 100644
index 0000000..b3593ab
--- /dev/null
+++ b/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/cache/ICache.java
@@ -0,0 +1,46 @@
+/***************************************************************************
+ * Copyright (c) 2004 - 2007 Eike Stepper, Germany.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ **************************************************************************/
+package org.eclipse.net4j.util.cache;
+
+/**
+ * @author Eike Stepper
+ */
+public interface ICache
+{
+ public static final int UNKNOWN_ELEMENT_SIZE = -1;
+
+ public static final long UNKNOWN_RECONSTRUCTION_TIME = -1L;
+
+ public ICacheMonitor getCacheMonitor();
+
+ /**
+ * Returns the number of elements in the cache that would currently be subject to eviction.
+ */
+ public int getEvictableElementCount();
+
+ /**
+ * Returns the average size of an element currently in the cache or <code>UNKNOWN_ELEMENT_SIZE</code> if the
+ * implementor of this method is not able or willing to calculate the average element size.
+ */
+ public int getAverageElementSize();
+
+ /**
+ * Returns the average time in milliseconds needed to reconstruct an element during a cache miss or
+ * <code>UNKNOWN_RECONSTRUCTION_TIME</code> if the implementor of this method is not able or willing to calculate
+ * the average reconstruction time.
+ */
+ public long getAverageReconstructionTime();
+
+ /**
+ * Instructs this cache to evict <b>elementCount</b> elements and return the number of actually evicted elements.
+ */
+ public int evictElements(int elementCount);
+}
diff --git a/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/cache/ICacheMonitor.java b/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/cache/ICacheMonitor.java
new file mode 100644
index 0000000..72d212a
--- /dev/null
+++ b/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/cache/ICacheMonitor.java
@@ -0,0 +1,60 @@
+/***************************************************************************
+ * Copyright (c) 2004 - 2007 Eike Stepper, Germany.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ **************************************************************************/
+package org.eclipse.net4j.util.cache;
+
+import org.eclipse.net4j.util.event.INotifier;
+
+/**
+ * @author Eike Stepper
+ */
+public interface ICacheMonitor extends INotifier
+{
+ public ConditionPolicy getConditionPolicy();
+
+ public Condition getCondition();
+
+ public ICacheProbe registerCache(ICache cache);
+
+ public void deregisterCache(ICache cache);
+
+ /**
+ * @author Eike Stepper
+ */
+ public enum Condition
+ {
+ /**
+ * Condition <b>GREEN</b> indicates that the system is operating normally and enough free memory is available so
+ * that caches are free to cache additional elements.
+ */
+ GREEN,
+
+ /**
+ * Condition <b>YELLOW</b> indicates that the system is operating normally but free memory is about to go low so
+ * that caches should stop to cache additional elements.
+ */
+ YELLOW,
+
+ /**
+ * Condition <b>RED</b> indicates that the system state is critical and free memory is almost exhausted so that
+ * caches must immediately stop to cache additional elements. Depending of the eviction strategy element eviction is
+ * ordered.
+ */
+ RED;
+ }
+
+ /**
+ * @author Eike Stepper
+ */
+ public interface ConditionPolicy
+ {
+ public Condition getNewCondition(Condition oldCondition);
+ }
+}
diff --git a/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/cache/ICacheMonitorEvent.java b/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/cache/ICacheMonitorEvent.java
new file mode 100644
index 0000000..2fce6c5
--- /dev/null
+++ b/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/cache/ICacheMonitorEvent.java
@@ -0,0 +1,25 @@
+/***************************************************************************
+ * Copyright (c) 2004 - 2007 Eike Stepper, Germany.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ **************************************************************************/
+package org.eclipse.net4j.util.cache;
+
+import org.eclipse.net4j.util.event.IEvent;
+
+/**
+ * @author Eike Stepper
+ */
+public interface ICacheMonitorEvent extends IEvent
+{
+ public ICacheMonitor getCacheMonitor();
+
+ public ICacheMonitor.Condition getOldCondition();
+
+ public ICacheMonitor.Condition getNewCondition();
+}
diff --git a/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/cache/ICacheProbe.java b/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/cache/ICacheProbe.java
new file mode 100644
index 0000000..835c6ce
--- /dev/null
+++ b/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/cache/ICacheProbe.java
@@ -0,0 +1,21 @@
+/***************************************************************************
+ * Copyright (c) 2004 - 2007 Eike Stepper, Germany.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ **************************************************************************/
+package org.eclipse.net4j.util.cache;
+
+/**
+ * @author Eike Stepper
+ */
+public interface ICacheProbe
+{
+ public ICacheMonitor getCacheMonitor();
+
+ public ICache getCache();
+}
diff --git a/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/cache/ICacheRegistration.java b/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/cache/ICacheRegistration.java
new file mode 100644
index 0000000..2629c29
--- /dev/null
+++ b/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/cache/ICacheRegistration.java
@@ -0,0 +1,19 @@
+/***************************************************************************
+ * Copyright (c) 2004 - 2007 Eike Stepper, Germany.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ **************************************************************************/
+package org.eclipse.net4j.util.cache;
+
+/**
+ * @author Eike Stepper
+ */
+public interface ICacheRegistration extends ICacheProbe
+{
+ public void dispose();
+}