Author: cbegin
Date: Sat Sep 6 22:37:09 2008
New Revision: 692775
URL: http://svn.apache.org/viewvc?rev=692775&view=rev
Log:
moved CacheBuilder to mapping package and improved handling for custom cache
implementations.
Added:
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/mapping/CacheBuilder.java
Modified:
ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/main/java/com/ibatis/sqlmap/engine/builder/Ibatis2Configuration.java
ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/main/java/com/ibatis/sqlmap/engine/builder/XmlSqlMapParser.java
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/cache/Cache.java
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/cache/decorators/FifoCache.java
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/cache/decorators/LruCache.java
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/cache/decorators/ScheduledCache.java
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/cache/decorators/SoftCache.java
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/cache/decorators/WeakCache.java
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/cache/impl/PerpetualCache.java
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/executor/BaseExecutor.java
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/cache/BaseCacheTest.java
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/cache/FifoCacheTest.java
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/cache/LruCacheTest.java
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/cache/PerpetualCacheTest.java
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/cache/ScheduledCacheTest.java
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/cache/SoftCacheTest.java
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/cache/SuperCacheTest.java
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/cache/WeakCacheTest.java
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/executor/ExecutorTestHelper.java
Modified:
ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/main/java/com/ibatis/sqlmap/engine/builder/Ibatis2Configuration.java
URL:
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/main/java/com/ibatis/sqlmap/engine/builder/Ibatis2Configuration.java?rev=692775&r1=692774&r2=692775&view=diff
==============================================================================
---
ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/main/java/com/ibatis/sqlmap/engine/builder/Ibatis2Configuration.java
(original)
+++
ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/main/java/com/ibatis/sqlmap/engine/builder/Ibatis2Configuration.java
Sat Sep 6 22:37:09 2008
@@ -43,9 +43,9 @@
this.getTypeAliasRegistry().registerAlias("JNDI",
JndiDataSourceFactory.class.getName());
// CACHE ALIASES
- this.getTypeAliasRegistry().registerAlias("FIFO",
PerpetualCache.class.getName());
- this.getTypeAliasRegistry().registerAlias("LRU",
PerpetualCache.class.getName());
- this.getTypeAliasRegistry().registerAlias("MEMORY",
PerpetualCache.class.getName());
+ this.getTypeAliasRegistry().registerAlias("FIFO",
FifoCache.class.getName());
+ this.getTypeAliasRegistry().registerAlias("LRU", LruCache.class.getName());
+ this.getTypeAliasRegistry().registerAlias("MEMORY",
SoftCache.class.getName());
}
public TransactionManager getTransactionManager() {
Modified:
ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/main/java/com/ibatis/sqlmap/engine/builder/XmlSqlMapParser.java
URL:
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/main/java/com/ibatis/sqlmap/engine/builder/XmlSqlMapParser.java?rev=692775&r1=692774&r2=692775&view=diff
==============================================================================
---
ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/main/java/com/ibatis/sqlmap/engine/builder/XmlSqlMapParser.java
(original)
+++
ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/main/java/com/ibatis/sqlmap/engine/builder/XmlSqlMapParser.java
Sat Sep 6 22:37:09 2008
@@ -19,7 +19,7 @@
private Reader reader;
private NodeletParser parser;
- private Cache.Builder cacheBuilder;
+ private CacheBuilder cacheBuilder;
private List<String> flushCacheStatements;
private ResultMap.Builder resultMapBuilder;
@@ -82,7 +82,8 @@
Boolean serialize = context.getBooleanAttribute("serialize", true);
type = config.getTypeAliasRegistry().resolveAlias(type);
Class clazz = Resources.classForName(type);
- cacheBuilder = new Cache.Builder(id, clazz);
+ cacheBuilder = new CacheBuilder(id);
+ cacheBuilder.addDecorator(clazz);
//LOCAL_READ_WRITE (serializable=false, readOnly=false)
//SHARED_READ_ONLY (serializable=false, readOnly=true)
Modified:
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/cache/Cache.java
URL:
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/cache/Cache.java?rev=692775&r1=692774&r2=692775&view=diff
==============================================================================
---
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/cache/Cache.java
(original)
+++
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/cache/Cache.java
Sat Sep 6 22:37:09 2008
@@ -1,8 +1,5 @@
package org.apache.ibatis.cache;
-import org.apache.ibatis.cache.decorators.*;
-import org.apache.ibatis.reflection.MetaObject;
-
import java.util.concurrent.locks.ReadWriteLock;
public interface Cache {
@@ -23,57 +20,4 @@
ReadWriteLock getReadWriteLock();
- public class Builder {
- private String id;
- private Class implementation;
- private Integer size;
- private Long clearInterval;
- private boolean readWrite;
-
- public Builder(String id, Class implementation) {
- this.id = id;
- this.implementation = implementation;
- }
-
- public Builder size(Integer size) {
- this.size = size;
- return this;
- }
-
- public Builder clearInterval(Long clearInterval) {
- this.clearInterval = clearInterval;
- return this;
- }
-
- public Builder readWrite(boolean readWrite) {
- this.readWrite = readWrite;
- return this;
- }
-
- public Cache build() {
- try {
- // implementation...
- Cache cache = (Cache) implementation.newInstance();
- MetaObject metaCache = MetaObject.forObject(cache);
- metaCache.setValue("id", id);
- if (size != null && metaCache.hasSetter("size")) {
- metaCache.setValue("size", size);
- }
- // decorators...
- if (clearInterval != null) {
- cache = new ScheduledCache(cache);
- ((ScheduledCache) cache).setClearInterval(clearInterval);
- }
- if (readWrite) {
- cache = new SerializedCache(cache);
- }
- cache = new LoggingCache(cache);
- cache = new SynchronizedCache(cache);
- return cache;
- } catch (Exception e) {
- throw new CacheException("Error building Cache class. Cause: " + e,
e);
- }
- }
- }
-
}
\ No newline at end of file
Modified:
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/cache/decorators/FifoCache.java
URL:
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/cache/decorators/FifoCache.java?rev=692775&r1=692774&r2=692775&view=diff
==============================================================================
---
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/cache/decorators/FifoCache.java
(original)
+++
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/cache/decorators/FifoCache.java
Sat Sep 6 22:37:09 2008
@@ -11,16 +11,13 @@
public class FifoCache implements Cache {
private final Cache delegate;
- private final int size;
- private final LinkedList keyList = new LinkedList();
+ private final LinkedList keyList;
+ private int size;
public FifoCache(Cache delegate) {
- this(delegate,1024);
- }
-
- public FifoCache(Cache delegate, int size) {
this.delegate = delegate;
- this.size = size;
+ this.keyList = new LinkedList();
+ this.size = 1024;
}
public String getId() {
@@ -31,6 +28,10 @@
return delegate.getSize();
}
+ public void setSize(int size) {
+ this.size = size;
+ }
+
public void putObject(Object key, Object value) {
cycleKeyList(key);
delegate.putObject(key, value);
Modified:
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/cache/decorators/LruCache.java
URL:
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/cache/decorators/LruCache.java?rev=692775&r1=692774&r2=692775&view=diff
==============================================================================
---
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/cache/decorators/LruCache.java
(original)
+++
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/cache/decorators/LruCache.java
Sat Sep 6 22:37:09 2008
@@ -11,23 +11,12 @@
public class LruCache implements Cache {
private final Cache delegate;
-
- private final Map keyMap;
-
+ private Map keyMap;
private Object eldestKey;
public LruCache(Cache delegate) {
- this(delegate, 1024);
- }
-
- public LruCache(Cache delegate, final int size) {
this.delegate = delegate;
- keyMap = new LinkedHashMap(size, .75F, true) {
- protected boolean removeEldestEntry(Map.Entry eldest) {
- eldestKey = eldest.getKey();
- return size() > size;
- }
- };
+ setSize(1024);
}
public String getId() {
@@ -38,17 +27,27 @@
return delegate.getSize();
}
+ public void setSize(final int size) {
+ keyMap = new LinkedHashMap(size, .75F, true) {
+ protected boolean removeEldestEntry(Map.Entry eldest) {
+ boolean tooBig = size() > size;
+ if (tooBig) {
+ eldestKey = eldest.getKey();
+ }
+ return tooBig;
+ }
+ };
+ }
+
public void putObject(Object key, Object value) {
- cycleKeyList(key);
delegate.putObject(key, value);
+ cycleKeyList(key);
}
public Object getObject(Object key) {
- try {
- return delegate.getObject(key);
- } finally {
- cycleKeyList(key);
- }
+ keyMap.get(key); //touch
+ return delegate.getObject(key);
+
}
public boolean hasKey(Object key) {
Modified:
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/cache/decorators/ScheduledCache.java
URL:
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/cache/decorators/ScheduledCache.java?rev=692775&r1=692774&r2=692775&view=diff
==============================================================================
---
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/cache/decorators/ScheduledCache.java
(original)
+++
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/cache/decorators/ScheduledCache.java
Sat Sep 6 22:37:09 2008
@@ -7,20 +7,13 @@
public class ScheduledCache implements Cache {
private Cache delegate;
- protected long clearInterval = 60 * 60 * 1000; // 1 hour
- protected long lastClear = System.currentTimeMillis();
+ protected long clearInterval;
+ protected long lastClear;
public ScheduledCache(Cache delegate) {
this.delegate = delegate;
- }
-
- public ScheduledCache(Cache delegate, int clearInterval) {
- this.delegate = delegate;
- this.clearInterval = clearInterval;
- }
-
- public long getClearInterval() {
- return clearInterval;
+ this.clearInterval = 60 * 60 * 1000; // 1 hour
+ this.lastClear = System.currentTimeMillis();
}
public void setClearInterval(long clearInterval) {
Modified:
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/cache/decorators/SoftCache.java
URL:
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/cache/decorators/SoftCache.java?rev=692775&r1=692774&r2=692775&view=diff
==============================================================================
---
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/cache/decorators/SoftCache.java
(original)
+++
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/cache/decorators/SoftCache.java
Sat Sep 6 22:37:09 2008
@@ -11,18 +11,16 @@
* Thanks to Dr. Heinz Kabutz for his guidance here.
*/
public class SoftCache implements Cache {
- private final int numberOfHardLinks;
- private final LinkedList hardLinksToAvoidGarbageCollection = new
LinkedList();
- private final ReferenceQueue queueOfGarbageCollectedEntries = new
ReferenceQueue();
+ private final LinkedList hardLinksToAvoidGarbageCollection;
+ private final ReferenceQueue queueOfGarbageCollectedEntries;
private final Cache delegate;
+ private int numberOfHardLinks;
public SoftCache(Cache delegate) {
- this(delegate,256);
- }
-
- public SoftCache(Cache delegate, int numberOfHardLinks) {
this.delegate = delegate;
- this.numberOfHardLinks = numberOfHardLinks;
+ this.numberOfHardLinks = 256;
+ this.hardLinksToAvoidGarbageCollection = new LinkedList();
+ this.queueOfGarbageCollectedEntries = new ReferenceQueue();
}
public String getId() {
@@ -34,6 +32,10 @@
return delegate.getSize();
}
+ public void setSize(int size) {
+ this.numberOfHardLinks = size;
+ }
+
public void putObject(Object key, Object value) {
removeGarbageCollectedItems();
delegate.putObject(key, new SoftEntry(key, value,
queueOfGarbageCollectedEntries));
Modified:
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/cache/decorators/WeakCache.java
URL:
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/cache/decorators/WeakCache.java?rev=692775&r1=692774&r2=692775&view=diff
==============================================================================
---
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/cache/decorators/WeakCache.java
(original)
+++
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/cache/decorators/WeakCache.java
Sat Sep 6 22:37:09 2008
@@ -11,18 +11,16 @@
* Thanks to Dr. Heinz Kabutz for his guidance here.
*/
public class WeakCache implements Cache {
- private final int numberOfHardLinks;
- private final LinkedList hardLinksToAvoidGarbageCollection = new
LinkedList();
- private final ReferenceQueue queueOfGarbageCollectedEntries = new
ReferenceQueue();
+ private final LinkedList hardLinksToAvoidGarbageCollection;
+ private final ReferenceQueue queueOfGarbageCollectedEntries;
private final Cache delegate;
+ private int numberOfHardLinks;
public WeakCache(Cache delegate) {
- this(delegate,256);
- }
-
- public WeakCache(Cache delegate, int numberOfHardLinks) {
this.delegate = delegate;
- this.numberOfHardLinks = numberOfHardLinks;
+ this.numberOfHardLinks = 256;
+ this.hardLinksToAvoidGarbageCollection = new LinkedList();
+ this.queueOfGarbageCollectedEntries = new ReferenceQueue();
}
public String getId() {
@@ -34,6 +32,10 @@
return delegate.getSize();
}
+ public void setSize(int size) {
+ this.numberOfHardLinks = size;
+ }
+
public void putObject(Object key, Object value) {
removeGarbageCollectedItems();
delegate.putObject(key, new WeakEntry(key, value,
queueOfGarbageCollectedEntries));
Modified:
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/cache/impl/PerpetualCache.java
URL:
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/cache/impl/PerpetualCache.java?rev=692775&r1=692774&r2=692775&view=diff
==============================================================================
---
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/cache/impl/PerpetualCache.java
(original)
+++
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/cache/impl/PerpetualCache.java
Sat Sep 6 22:37:09 2008
@@ -14,12 +14,12 @@
private ReadWriteLock readWriteLock = new ReentrantReadWriteLock();
- public String getId() {
- return id;
+ public PerpetualCache(String id) {
+ this.id = id;
}
- public void setId(String id) {
- this.id = id;
+ public String getId() {
+ return id;
}
public int getSize() {
@@ -46,7 +46,6 @@
cache.clear();
}
-
public ReadWriteLock getReadWriteLock() {
return readWriteLock;
}
Modified:
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/executor/BaseExecutor.java
URL:
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/executor/BaseExecutor.java?rev=692775&r1=692774&r2=692775&view=diff
==============================================================================
---
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/executor/BaseExecutor.java
(original)
+++
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/executor/BaseExecutor.java
Sat Sep 6 22:37:09 2008
@@ -33,7 +33,7 @@
this.connection = connection;
}
this.deferredLoads = new ArrayList<DeferredLoad>();
- this.localCache = new PerpetualCache();
+ this.localCache = new PerpetualCache("LocalCache");
}
public Connection getConnection() {
Added:
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/mapping/CacheBuilder.java
URL:
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/mapping/CacheBuilder.java?rev=692775&view=auto
==============================================================================
---
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/mapping/CacheBuilder.java
(added)
+++
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/mapping/CacheBuilder.java
Sat Sep 6 22:37:09 2008
@@ -0,0 +1,170 @@
+package org.apache.ibatis.mapping;
+
+import org.apache.ibatis.cache.*;
+import org.apache.ibatis.cache.decorators.*;
+import org.apache.ibatis.cache.impl.PerpetualCache;
+import org.apache.ibatis.reflection.MetaObject;
+
+import java.lang.reflect.Constructor;
+import java.util.*;
+
+public class CacheBuilder {
+ private String id;
+ private Class<? extends Cache> implementation;
+ private List<Class<? extends Cache>> decorators;
+ private Integer size;
+ private Long clearInterval;
+ private boolean readWrite;
+ private Properties properties;
+
+ public CacheBuilder(String id) {
+ this.id = id;
+ this.decorators = new ArrayList<Class<? extends Cache>>();
+ }
+
+ public CacheBuilder implementation(Class<? extends Cache> implementation) {
+ this.implementation = implementation;
+ return this;
+ }
+
+ public CacheBuilder addDecorator(Class<? extends Cache> decorator) {
+ this.decorators.add(decorator);
+ return this;
+ }
+
+ public CacheBuilder size(Integer size) {
+ this.size = size;
+ return this;
+ }
+
+ public CacheBuilder clearInterval(Long clearInterval) {
+ this.clearInterval = clearInterval;
+ return this;
+ }
+
+ public CacheBuilder readWrite(boolean readWrite) {
+ this.readWrite = readWrite;
+ return this;
+ }
+
+ public CacheBuilder properties(Properties properties) {
+ this.properties = properties;
+ return this;
+ }
+
+ public Cache build() {
+ setDefaultImplementations();
+ Cache cache = newBaseCacheInstance(implementation, id);
+ setCacheProperties(cache);
+ for (Class<? extends Cache> decorator : decorators) {
+ cache = newCacheDecoratorInstance(decorator, cache);
+ setCacheProperties(cache);
+ }
+ cache = setStandardDecorators(cache);
+ return cache;
+ }
+
+ private void setDefaultImplementations() {
+ if (implementation == null) {
+ implementation = PerpetualCache.class;
+ if (decorators.size() == 0) {
+ decorators.add(FifoCache.class);
+ }
+ }
+ }
+
+ private Cache setStandardDecorators(Cache cache) {
+ try {
+ if (cache.getClass().getName().startsWith("org.apache.ibatis")) {
+ MetaObject metaCache = MetaObject.forObject(cache);
+ if (size != null && metaCache.hasSetter("size")) {
+ metaCache.setValue("size", size);
+ }
+ if (clearInterval != null) {
+ cache = new ScheduledCache(cache);
+ ((ScheduledCache) cache).setClearInterval(clearInterval);
+ }
+ if (readWrite) {
+ cache = new SerializedCache(cache);
+ }
+ cache = new LoggingCache(cache);
+ cache = new SynchronizedCache(cache);
+ }
+ return cache;
+ } catch (Exception e) {
+ throw new CacheException("Error building standard cache decorators.
Cause: " + e, e);
+ }
+ }
+
+ private void setCacheProperties(Cache cache) {
+ if (properties != null) {
+ MetaObject metaCache = MetaObject.forObject(cache);
+ for (Map.Entry entry : properties.entrySet()) {
+ String name = (String) entry.getKey();
+ String value = (String) entry.getValue();
+ if (metaCache.hasSetter(name)) {
+ Class type = metaCache.getSetterType(name);
+ if (String.class == type) {
+ metaCache.setValue(name, value);
+ } else if (int.class == type
+ || Integer.class == type) {
+ metaCache.setValue(name, Integer.valueOf(value));
+ } else if (long.class == type
+ || Long.class == type) {
+ metaCache.setValue(name, Long.valueOf(value));
+ } else if (short.class == type
+ || Short.class == type) {
+ metaCache.setValue(name, Short.valueOf(value));
+ } else if (byte.class == type
+ || Byte.class == type) {
+ metaCache.setValue(name, Byte.valueOf(value));
+ } else if (float.class == type
+ || Float.class == type) {
+ metaCache.setValue(name, Float.valueOf(value));
+ } else if (double.class == type
+ || Double.class == type) {
+ metaCache.setValue(name, Double.valueOf(value));
+ } else {
+ throw new CacheException("Unsupported property type for cache: '"
+ name + "' of type " + type);
+ }
+ }
+ }
+ }
+ }
+
+ private Cache newBaseCacheInstance(Class<? extends Cache> cacheClass, String
id) {
+ Constructor<? extends Cache> cacheConstructor =
getBaseCacheConstructor(cacheClass);
+ try {
+ return cacheConstructor.newInstance(id);
+ } catch (Exception e) {
+ throw new CacheException("Could not instantiate cache implementation ("
+ cacheClass + "). Cause: " + e, e);
+ }
+ }
+
+ private Constructor<? extends Cache> getBaseCacheConstructor(Class<? extends
Cache> cacheClass) {
+ try {
+ return cacheClass.getConstructor(String.class);
+ } catch (Exception e) {
+ throw new CacheException("Invalid base cache implementation (" +
cacheClass + "). " +
+ "Base cache implementations must have a constructor that takes a
String id as a parameter. Cause: " + e, e);
+ }
+ }
+
+ private Cache newCacheDecoratorInstance(Class<? extends Cache> cacheClass,
Cache base) {
+ Constructor<? extends Cache> cacheConstructor =
getCacheDecoratorConstructor(cacheClass);
+ try {
+ return cacheConstructor.newInstance(base);
+ } catch (Exception e) {
+ throw new CacheException("Could not instantiate cache decorator (" +
cacheClass + "). Cause: " + e, e);
+ }
+ }
+
+ private Constructor<? extends Cache> getCacheDecoratorConstructor(Class<?
extends Cache> cacheClass) {
+ try {
+ return cacheClass.getConstructor(Cache.class);
+ } catch (Exception e) {
+ throw new CacheException("Invalid cache decorator (" + cacheClass + ").
" +
+ "Cache decorators must have a constructor that takes a Cache
instance as a parameter. Cause: " + e, e);
+ }
+ }
+}
Modified:
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/cache/BaseCacheTest.java
URL:
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/cache/BaseCacheTest.java?rev=692775&r1=692774&r2=692775&view=diff
==============================================================================
---
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/cache/BaseCacheTest.java
(original)
+++
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/cache/BaseCacheTest.java
Sat Sep 6 22:37:09 2008
@@ -10,13 +10,12 @@
@Test
public void shouldDemonstrateEqualsAndHashCodeForVariousCacheTypes() {
- PerpetualCache cache = new PerpetualCache();
- cache.setId("test_cache");
+ PerpetualCache cache = new PerpetualCache("test_cache");
Assert.assertTrue(cache.equals(cache));
Assert.assertTrue(cache.equals(new SynchronizedCache(cache)));
Assert.assertTrue(cache.equals(new SerializedCache(cache)));
Assert.assertTrue(cache.equals(new LoggingCache(cache)));
- Assert.assertTrue(cache.equals(new ScheduledCache(cache, 5000)));
+ Assert.assertTrue(cache.equals(new ScheduledCache(cache)));
Assert.assertEquals(cache.hashCode(), new
SynchronizedCache(cache).hashCode());
Assert.assertEquals(cache.hashCode(), new
SerializedCache(cache).hashCode());
@@ -28,7 +27,7 @@
caches.add(new SynchronizedCache(cache));
caches.add(new SerializedCache(cache));
caches.add(new LoggingCache(cache));
- caches.add(new ScheduledCache(cache, 5000));
+ caches.add(new ScheduledCache(cache));
Assert.assertEquals(1, caches.size());
}
Modified:
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/cache/FifoCacheTest.java
URL:
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/cache/FifoCacheTest.java?rev=692775&r1=692774&r2=692775&view=diff
==============================================================================
---
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/cache/FifoCacheTest.java
(original)
+++
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/cache/FifoCacheTest.java
Sat Sep 6 22:37:09 2008
@@ -8,7 +8,8 @@
@Test
public void shouldRemoveFirstItemInBeyondFiveEntries() {
- FifoCache cache = new FifoCache(new PerpetualCache(),5);
+ FifoCache cache = new FifoCache(new PerpetualCache("default"));
+ cache.setSize(5);
for (int i = 0; i < 5; i++) {
cache.putObject(i, i);
}
@@ -20,7 +21,7 @@
@Test
public void shouldRemoveItemOnDemand() {
- FifoCache cache = new FifoCache(new PerpetualCache());
+ FifoCache cache = new FifoCache(new PerpetualCache("default"));
cache.putObject(0, 0);
Assert.assertNotNull(cache.getObject(0));
cache.removeObject(0);
@@ -29,7 +30,7 @@
@Test
public void shouldFlushAllItemsOnDemand() {
- FifoCache cache = new FifoCache(new PerpetualCache());
+ FifoCache cache = new FifoCache(new PerpetualCache("default"));
for (int i = 0; i < 5; i++) {
cache.putObject(i, i);
}
Modified:
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/cache/LruCacheTest.java
URL:
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/cache/LruCacheTest.java?rev=692775&r1=692774&r2=692775&view=diff
==============================================================================
---
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/cache/LruCacheTest.java
(original)
+++
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/cache/LruCacheTest.java
Sat Sep 6 22:37:09 2008
@@ -8,7 +8,8 @@
@Test
public void shouldRemoveLeastRecentlyUsedItemInBeyondFiveEntries() {
- LruCache cache = new LruCache(new PerpetualCache(),5);
+ LruCache cache = new LruCache(new PerpetualCache("default"));
+ cache.setSize(5);
for (int i = 0; i < 5; i++) {
cache.putObject(i, i);
}
@@ -20,7 +21,7 @@
@Test
public void shouldRemoveItemOnDemand() {
- Cache cache = new LruCache(new PerpetualCache());
+ Cache cache = new LruCache(new PerpetualCache("default"));
cache.putObject(0, 0);
Assert.assertNotNull(cache.getObject(0));
cache.removeObject(0);
@@ -29,7 +30,7 @@
@Test
public void shouldFlushAllItemsOnDemand() {
- Cache cache = new LruCache(new PerpetualCache());
+ Cache cache = new LruCache(new PerpetualCache("default"));
for (int i = 0; i < 5; i++) {
cache.putObject(i, i);
}
Modified:
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/cache/PerpetualCacheTest.java
URL:
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/cache/PerpetualCacheTest.java?rev=692775&r1=692774&r2=692775&view=diff
==============================================================================
---
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/cache/PerpetualCacheTest.java
(original)
+++
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/cache/PerpetualCacheTest.java
Sat Sep 6 22:37:09 2008
@@ -8,7 +8,7 @@
@Test
public void shouldDemonstrateHowAllObjectsAreKept() {
- Cache cache = new PerpetualCache();
+ Cache cache = new PerpetualCache("default");
cache = new SynchronizedCache(cache);
for (int i = 0; i < 100000; i++) {
cache.putObject(i, i);
@@ -19,7 +19,7 @@
@Test
public void shouldDemonstrateCopiesAreEqual() {
- Cache cache = new PerpetualCache();
+ Cache cache = new PerpetualCache("default");
cache = new SerializedCache(cache);
for (int i = 0; i < 1000; i++) {
cache.putObject(i, i);
@@ -29,7 +29,7 @@
@Test
public void shouldRemoveItemOnDemand() {
- Cache cache = new PerpetualCache();
+ Cache cache = new PerpetualCache("default");
cache = new SynchronizedCache(cache);
cache.putObject(0, 0);
Assert.assertNotNull(cache.getObject(0));
@@ -39,7 +39,7 @@
@Test
public void shouldFlushAllItemsOnDemand() {
- Cache cache = new PerpetualCache();
+ Cache cache = new PerpetualCache("default");
cache = new SynchronizedCache(cache);
for (int i = 0; i < 5; i++) {
cache.putObject(i, i);
Modified:
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/cache/ScheduledCacheTest.java
URL:
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/cache/ScheduledCacheTest.java?rev=692775&r1=692774&r2=692775&view=diff
==============================================================================
---
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/cache/ScheduledCacheTest.java
(original)
+++
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/cache/ScheduledCacheTest.java
Sat Sep 6 22:37:09 2008
@@ -8,8 +8,9 @@
@Test
public void shouldDemonstrateHowAllObjectsAreFlushedAfterBasedOnTime()
throws Exception {
- Cache cache = new PerpetualCache();
- cache = new ScheduledCache(cache, 2500);
+ Cache cache = new PerpetualCache("DefaultCache");
+ cache = new ScheduledCache(cache);
+ ((ScheduledCache)cache).setClearInterval(2500);
cache = new LoggingCache(cache);
for (int i = 0; i < 100; i++) {
cache.putObject(i, i);
@@ -21,8 +22,9 @@
@Test
public void shouldRemoveItemOnDemand() {
- Cache cache = new PerpetualCache();
- cache = new ScheduledCache(cache, 60000);
+ Cache cache = new PerpetualCache("DefaultCache");
+ cache = new ScheduledCache(cache);
+ ((ScheduledCache)cache).setClearInterval(60000);
cache = new LoggingCache(cache);
cache.putObject(0, 0);
Assert.assertNotNull(cache.getObject(0));
@@ -32,8 +34,9 @@
@Test
public void shouldFlushAllItemsOnDemand() {
- Cache cache = new PerpetualCache();
- cache = new ScheduledCache(cache, 60000);
+ Cache cache = new PerpetualCache("DefaultCache");
+ cache = new ScheduledCache(cache);
+ ((ScheduledCache)cache).setClearInterval(60000);
cache = new LoggingCache(cache);
for (int i = 0; i < 5; i++) {
cache.putObject(i, i);
Modified:
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/cache/SoftCacheTest.java
URL:
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/cache/SoftCacheTest.java?rev=692775&r1=692774&r2=692775&view=diff
==============================================================================
---
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/cache/SoftCacheTest.java
(original)
+++
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/cache/SoftCacheTest.java
Sat Sep 6 22:37:09 2008
@@ -8,7 +8,7 @@
@Test //@Ignore("Until we can find a reliable way to test it on all
machines.")
public void shouldDemonstrateObjectsBeingCollectedAsNeeded() throws
Exception {
- SoftCache cache = new SoftCache(new PerpetualCache());
+ SoftCache cache = new SoftCache(new PerpetualCache("default"));
int n = 100000;
for (int i = 0; i < n; i++) {
byte[] array = new byte[5001]; //waste a bunch of memory
@@ -22,7 +22,7 @@
@Test
public void shouldDemonstrateCopiesAreEqual() {
- Cache cache = new SoftCache(new PerpetualCache());
+ Cache cache = new SoftCache(new PerpetualCache("default"));
cache = new SerializedCache(cache);
for (int i = 0; i < 1000; i++) {
cache.putObject(i, i);
@@ -33,7 +33,7 @@
@Test
public void shouldRemoveItemOnDemand() {
- Cache cache = new SoftCache(new PerpetualCache());
+ Cache cache = new SoftCache(new PerpetualCache("default"));
cache.putObject(0, 0);
Assert.assertNotNull(cache.getObject(0));
cache.removeObject(0);
@@ -42,7 +42,7 @@
@Test
public void shouldFlushAllItemsOnDemand() {
- Cache cache = new SoftCache(new PerpetualCache());
+ Cache cache = new SoftCache(new PerpetualCache("default"));
for (int i = 0; i < 5; i++) {
cache.putObject(i, i);
}
Modified:
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/cache/SuperCacheTest.java
URL:
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/cache/SuperCacheTest.java?rev=692775&r1=692774&r2=692775&view=diff
==============================================================================
---
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/cache/SuperCacheTest.java
(original)
+++
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/cache/SuperCacheTest.java
Sat Sep 6 22:37:09 2008
@@ -9,7 +9,7 @@
@Test
public void
shouldDemonstrate5LevelSuperCacheHandlesLotsOfEntriesWithoutCrashing() {
final int N = 100000;
- Cache cache = new PerpetualCache();
+ Cache cache = new PerpetualCache("default");
cache = new LruCache(cache);
cache = new FifoCache(cache);
cache = new SoftCache(cache);
Modified:
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/cache/WeakCacheTest.java
URL:
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/cache/WeakCacheTest.java?rev=692775&r1=692774&r2=692775&view=diff
==============================================================================
---
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/cache/WeakCacheTest.java
(original)
+++
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/cache/WeakCacheTest.java
Sat Sep 6 22:37:09 2008
@@ -8,7 +8,7 @@
@Test
public void shouldDemonstrateObjectsBeingCollectedAsNeeded() {
- WeakCache cache = new WeakCache(new PerpetualCache());
+ WeakCache cache = new WeakCache(new PerpetualCache("default"));
for (int i = 0; i < 1000000; i++) {
cache.putObject(i, i);
}
@@ -17,7 +17,7 @@
@Test
public void shouldDemonstrateCopiesAreEqual() {
- Cache cache = new WeakCache(new PerpetualCache());
+ Cache cache = new WeakCache(new PerpetualCache("default"));
cache = new SerializedCache(cache);
for (int i = 0; i < 1000; i++) {
cache.putObject(i, i);
@@ -28,7 +28,7 @@
@Test
public void shouldRemoveItemOnDemand() {
- WeakCache cache = new WeakCache(new PerpetualCache());
+ WeakCache cache = new WeakCache(new PerpetualCache("default"));
cache.putObject(0, 0);
Assert.assertNotNull(cache.getObject(0));
cache.removeObject(0);
@@ -37,7 +37,7 @@
@Test
public void shouldFlushAllItemsOnDemand() {
- WeakCache cache = new WeakCache(new PerpetualCache());
+ WeakCache cache = new WeakCache(new PerpetualCache("default"));
for (int i = 0; i < 5; i++) {
cache.putObject(i, i);
}
Modified:
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/executor/ExecutorTestHelper.java
URL:
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/executor/ExecutorTestHelper.java?rev=692775&r1=692774&r2=692775&view=diff
==============================================================================
---
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/executor/ExecutorTestHelper.java
(original)
+++
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/executor/ExecutorTestHelper.java
Sat Sep 6 22:37:09 2008
@@ -14,14 +14,12 @@
public static final Cache authorCache;
static {
- PerpetualCache cache = new PerpetualCache();
- cache.setId("author_cache");
authorCache =
new SynchronizedCache(
new SerializedCache(
new LoggingCache(
new ScheduledCache(
- cache, 5000))));
+ new PerpetualCache("author_cache")))));
}