Added: commons/proper/jcs/trunk/src/java/org/apache/commons/jcs/jcache/TempStateCacheView.java URL: http://svn.apache.org/viewvc/commons/proper/jcs/trunk/src/java/org/apache/commons/jcs/jcache/TempStateCacheView.java?rev=1590527&view=auto ============================================================================== --- commons/proper/jcs/trunk/src/java/org/apache/commons/jcs/jcache/TempStateCacheView.java (added) +++ commons/proper/jcs/trunk/src/java/org/apache/commons/jcs/jcache/TempStateCacheView.java Sun Apr 27 23:47:39 2014 @@ -0,0 +1,240 @@ +package org.apache.commons.jcs.jcache; + +import javax.cache.Cache; +import javax.cache.CacheManager; +import javax.cache.configuration.CacheEntryListenerConfiguration; +import javax.cache.configuration.Configuration; +import javax.cache.integration.CompletionListener; +import javax.cache.processor.EntryProcessor; +import javax.cache.processor.EntryProcessorException; +import javax.cache.processor.EntryProcessorResult; +import java.util.Collection; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.Map; +import java.util.Set; + +import static org.apache.commons.jcs.jcache.Asserts.assertNotNull; + +public class TempStateCacheView<K, V> implements Cache<K, V> { + private final Cache<K, V> cache; + private final Map<K, V> put = new HashMap<K, V>(); + private final Collection<K> remove = new LinkedList<K>(); + private boolean removeAll = false; + private boolean clear = false; + + public TempStateCacheView(final Cache<K, V> entries) { + this.cache = entries; + } + + public V get(final K key) { + if (ignoreKey(key)) { + return null; + } + + final V v = put.get(key); + if (v != null) { + return v; + } + return cache.get(key); + } + + private boolean ignoreKey(final K key) { + return removeAll || clear || remove.contains(key); + } + + public Map<K, V> getAll(final Set<? extends K> keys) { + final Map<K, V> v = new HashMap<K, V>(keys.size()); + final Set<K> missing = new HashSet<K>(); + for (final K k : keys) { + final V value = put.get(k); + if (value != null) { + v.put(k, value); + } else if (!ignoreKey(k)) { + missing.add(k); + } + } + if (!missing.isEmpty()) { + v.putAll(cache.getAll(missing)); + } + return v; + } + + public boolean containsKey(final K key) { + return !ignoreKey(key) && put.containsKey(key) || cache.containsKey(key); + } + + public void loadAll(final Set<? extends K> keys, final boolean replaceExistingValues, final CompletionListener completionListener) { + cache.loadAll(keys, replaceExistingValues, completionListener); + } + + public void put(final K key, final V value) { + assertNotNull(key, "key"); + assertNotNull(value, "value"); + put.put(key, value); + remove.remove(key); + } + + public V getAndPut(final K key, final V value) { + final V v = get(key); + put(key, value); + return v; + } + + public void putAll(final Map<? extends K, ? extends V> map) { + put.putAll(map); + for (final K k : map.keySet()) { + remove.remove(k); + } + } + + public boolean putIfAbsent(final K key, final V value) { + if (!put.containsKey(key)) { + put.put(key, value); + remove.remove(key); + return true; + } + return false; + } + + public boolean remove(final K key) { + put.remove(key); + if (!ignoreKey(key) && cache.containsKey(key)) { + remove.add(key); + return true; + } + return false; + } + + public boolean remove(final K key, final V oldValue) { + put.remove(key); + if (!ignoreKey(key) && oldValue.equals(cache.get(key))) { + remove.add(key); + return true; + } + return false; + } + + public V getAndRemove(final K key) { + final V v = get(key); + remove.add(key); + put.remove(key); + return v; + } + + public boolean replace(final K key, final V oldValue, final V newValue) { + if (oldValue.equals(get(key))) { + put(key, newValue); + return true; + } + return false; + } + + public boolean replace(final K key, final V value) { + if (containsKey(key)) { + remove(key); + return true; + } + return false; + } + + public V getAndReplace(final K key, final V value) { + if (containsKey(key)) { + final V oldValue = get(key); + put(key, value); + return oldValue; + } + return null; + } + + public void removeAll(final Set<? extends K> keys) { + remove.addAll(keys); + for (final K k : keys) { + put.remove(keys); + } + } + + @Override + public void removeAll() { + removeAll = true; + put.clear(); + remove.clear(); + } + + @Override + public void clear() { + clear = true; + put.clear(); + remove.clear(); + } + + public <C extends Configuration<K, V>> C getConfiguration(final Class<C> clazz) { + return cache.getConfiguration(clazz); + } + + public <T> T invoke(final K key, final EntryProcessor<K, V, T> entryProcessor, final Object... arguments) throws EntryProcessorException { + return cache.invoke(key, entryProcessor, arguments); + } + + public <T> Map<K, EntryProcessorResult<T>> invokeAll(Set<? extends K> keys, final EntryProcessor<K, V, T> entryProcessor, final Object... arguments) { + return cache.invokeAll(keys, entryProcessor, arguments); + } + + @Override + public String getName() { + return cache.getName(); + } + + @Override + public CacheManager getCacheManager() { + return cache.getCacheManager(); + } + + @Override + public void close() { + cache.close(); + } + + @Override + public boolean isClosed() { + return cache.isClosed(); + } + + @Override + public <T> T unwrap(final Class<T> clazz) { + return cache.unwrap(clazz); + } + + public void registerCacheEntryListener(final CacheEntryListenerConfiguration<K, V> cacheEntryListenerConfiguration) { + cache.registerCacheEntryListener(cacheEntryListenerConfiguration); + } + + public void deregisterCacheEntryListener(final CacheEntryListenerConfiguration<K, V> cacheEntryListenerConfiguration) { + cache.deregisterCacheEntryListener(cacheEntryListenerConfiguration); + } + + @Override + public Iterator<Entry<K, V>> iterator() { + return cache.iterator(); + } + + public void merge() { + if (removeAll) { + cache.removeAll(); + } + if (clear) { + cache.clear(); + } + + for (final Map.Entry<K, V> entry : put.entrySet()) { + cache.put(entry.getKey(), entry.getValue()); + } + put.clear(); + for (final K entry : remove) { + cache.remove(entry); + } + remove.clear(); + } +}
Propchange: commons/proper/jcs/trunk/src/java/org/apache/commons/jcs/jcache/TempStateCacheView.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: commons/proper/jcs/trunk/src/java/org/apache/commons/jcs/jcache/TempStateCacheView.java ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision Added: commons/proper/jcs/trunk/src/java/org/apache/commons/jcs/jcache/jmx/ConfigurableMBeanServerIdBuilder.java URL: http://svn.apache.org/viewvc/commons/proper/jcs/trunk/src/java/org/apache/commons/jcs/jcache/jmx/ConfigurableMBeanServerIdBuilder.java?rev=1590527&view=auto ============================================================================== --- commons/proper/jcs/trunk/src/java/org/apache/commons/jcs/jcache/jmx/ConfigurableMBeanServerIdBuilder.java (added) +++ commons/proper/jcs/trunk/src/java/org/apache/commons/jcs/jcache/jmx/ConfigurableMBeanServerIdBuilder.java Sun Apr 27 23:47:39 2014 @@ -0,0 +1,127 @@ +package org.apache.commons.jcs.jcache.jmx; + +import javax.management.ListenerNotFoundException; +import javax.management.MBeanNotificationInfo; +import javax.management.MBeanServer; +import javax.management.MBeanServerBuilder; +import javax.management.MBeanServerDelegate; +import javax.management.Notification; +import javax.management.NotificationFilter; +import javax.management.NotificationListener; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; + +public class ConfigurableMBeanServerIdBuilder extends MBeanServerBuilder { + private static ConcurrentMap<Key, MBeanServer> JVM_SINGLETONS = new ConcurrentHashMap<Key, MBeanServer>(); + + private static class Key { + private final String domain; + private final MBeanServer outer; + + private Key(final String domain, final MBeanServer outer) { + this.domain = domain; + this.outer = outer; + } + + @Override + public boolean equals(final Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + final Key key = Key.class.cast(o); + return !(domain != null ? !domain.equals(key.domain) : key.domain != null) + && !(outer != null ? !outer.equals(key.outer) : key.outer != null); + + } + + @Override + public int hashCode() { + int result = domain != null ? domain.hashCode() : 0; + result = 31 * result + (outer != null ? outer.hashCode() : 0); + return result; + } + } + + @Override + public MBeanServer newMBeanServer(final String defaultDomain, final MBeanServer outer, + final MBeanServerDelegate delegate) { + final Key key = new Key(defaultDomain, outer); + MBeanServer server = JVM_SINGLETONS.get(key); + if (server == null) { + server = super.newMBeanServer(defaultDomain, outer, new ForceIdMBeanServerDelegate(delegate)); + final MBeanServer existing = JVM_SINGLETONS.putIfAbsent(key, server); + if (existing != null) { + server = existing; + } + } + return server; + } + + private class ForceIdMBeanServerDelegate extends MBeanServerDelegate { + private final MBeanServerDelegate delegate; + + public ForceIdMBeanServerDelegate(final MBeanServerDelegate delegate) { + this.delegate = delegate; + } + + @Override + public String getMBeanServerId() { + return System.getProperty("org.jsr107.tck.management.agentId", delegate.getMBeanServerId()); + } + + @Override + public String getSpecificationName() { + return delegate.getSpecificationName(); + } + + @Override + public String getSpecificationVersion() { + return delegate.getSpecificationVersion(); + } + + @Override + public String getSpecificationVendor() { + return delegate.getSpecificationVendor(); + } + + @Override + public String getImplementationName() { + return delegate.getImplementationName(); + } + + @Override + public String getImplementationVersion() { + return delegate.getImplementationVersion(); + } + + @Override + public String getImplementationVendor() { + return delegate.getImplementationVendor(); + } + + @Override + public MBeanNotificationInfo[] getNotificationInfo() { + return delegate.getNotificationInfo(); + } + + @Override + public void addNotificationListener(final NotificationListener listener, final NotificationFilter filter, final Object handback) throws IllegalArgumentException { + delegate.addNotificationListener(listener, filter, handback); + } + + @Override + public void removeNotificationListener(final NotificationListener listener, final NotificationFilter filter, final Object handback) throws ListenerNotFoundException { + delegate.removeNotificationListener(listener, filter, handback); + } + + @Override + public void removeNotificationListener(final NotificationListener listener) throws ListenerNotFoundException { + delegate.removeNotificationListener(listener); + } + + @Override + public void sendNotification(final Notification notification) { + delegate.sendNotification(notification); + } + } +} Propchange: commons/proper/jcs/trunk/src/java/org/apache/commons/jcs/jcache/jmx/ConfigurableMBeanServerIdBuilder.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: commons/proper/jcs/trunk/src/java/org/apache/commons/jcs/jcache/jmx/ConfigurableMBeanServerIdBuilder.java ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision Added: commons/proper/jcs/trunk/src/java/org/apache/commons/jcs/jcache/jmx/JCSCacheMXBean.java URL: http://svn.apache.org/viewvc/commons/proper/jcs/trunk/src/java/org/apache/commons/jcs/jcache/jmx/JCSCacheMXBean.java?rev=1590527&view=auto ============================================================================== --- commons/proper/jcs/trunk/src/java/org/apache/commons/jcs/jcache/jmx/JCSCacheMXBean.java (added) +++ commons/proper/jcs/trunk/src/java/org/apache/commons/jcs/jcache/jmx/JCSCacheMXBean.java Sun Apr 27 23:47:39 2014 @@ -0,0 +1,73 @@ +package org.apache.commons.jcs.jcache.jmx; + +import javax.cache.Cache; +import javax.cache.configuration.CompleteConfiguration; +import javax.cache.configuration.Configuration; +import javax.cache.management.CacheMXBean; + +public class JCSCacheMXBean<K, V > implements CacheMXBean { + private final Cache<K, V> delegate; + + public JCSCacheMXBean(final Cache<K, V> delegate) { + this.delegate = delegate; + } + + private Configuration config() { + return delegate.getConfiguration(Configuration.class); + } + + private CompleteConfiguration completeConfig() { + return delegate.getConfiguration(CompleteConfiguration.class); + } + + @Override + public String getKeyType() { + return config().getKeyType().getName(); + } + + @Override + public String getValueType() { + return config().getValueType().getName(); + } + + @Override + public boolean isReadThrough() { + try { + return completeConfig().isReadThrough(); + } catch (final Exception e) { + return false; + } + } + + @Override + public boolean isWriteThrough() { + try { + return completeConfig().isWriteThrough(); + } catch (final Exception e) { + return false; + } + } + + @Override + public boolean isStoreByValue() { + return config().isStoreByValue(); + } + + @Override + public boolean isStatisticsEnabled() { + try { + return completeConfig().isStatisticsEnabled(); + } catch (final Exception e) { + return false; + } + } + + @Override + public boolean isManagementEnabled() { + try { + return completeConfig().isManagementEnabled(); + } catch (final Exception e) { + return false; + } + } +} Propchange: commons/proper/jcs/trunk/src/java/org/apache/commons/jcs/jcache/jmx/JCSCacheMXBean.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: commons/proper/jcs/trunk/src/java/org/apache/commons/jcs/jcache/jmx/JCSCacheMXBean.java ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision Added: commons/proper/jcs/trunk/src/java/org/apache/commons/jcs/jcache/jmx/JCSCacheStatisticsMXBean.java URL: http://svn.apache.org/viewvc/commons/proper/jcs/trunk/src/java/org/apache/commons/jcs/jcache/jmx/JCSCacheStatisticsMXBean.java?rev=1590527&view=auto ============================================================================== --- commons/proper/jcs/trunk/src/java/org/apache/commons/jcs/jcache/jmx/JCSCacheStatisticsMXBean.java (added) +++ commons/proper/jcs/trunk/src/java/org/apache/commons/jcs/jcache/jmx/JCSCacheStatisticsMXBean.java Sun Apr 27 23:47:39 2014 @@ -0,0 +1,89 @@ +package org.apache.commons.jcs.jcache.jmx; + +import org.apache.commons.jcs.jcache.Statistics; + +import javax.cache.management.CacheStatisticsMXBean; + +public class JCSCacheStatisticsMXBean implements CacheStatisticsMXBean { + private final Statistics statistics; + + public JCSCacheStatisticsMXBean(final Statistics stats) { + this.statistics = stats; + } + + @Override + public void clear() { + statistics.reset(); + } + + @Override + public long getCacheHits() { + return statistics.getHits(); + } + + @Override + public float getCacheHitPercentage() { + final long hits = getCacheHits(); + if (hits == 0) { + return 0; + } + return (float) hits / getCacheGets() * 100.0f; + } + + @Override + public long getCacheMisses() { + return statistics.getMisses(); + } + + @Override + public float getCacheMissPercentage() { + final long misses = getCacheMisses(); + if (misses == 0) { + return 0; + } + return (float) misses / getCacheGets() * 100.0f; + } + + @Override + public long getCacheGets() { + return getCacheHits() + getCacheMisses(); + } + + @Override + public long getCachePuts() { + return statistics.getPuts(); + } + + @Override + public long getCacheRemovals() { + return statistics.getRemovals(); + } + + @Override + public long getCacheEvictions() { + return statistics.getEvictions(); + } + + @Override + public float getAverageGetTime() { + return averageTime(statistics.getTimeTakenForGets()); + } + + @Override + public float getAveragePutTime() { + return averageTime(statistics.getTimeTakenForPuts()); + } + + @Override + public float getAverageRemoveTime() { + return averageTime(statistics.getTimeTakenForRemovals()); + } + + private float averageTime(final long timeTaken) { + final long gets = getCacheGets(); + if (timeTaken == 0 || gets == 0) { + return 0; + } + return timeTaken / gets; + } +} Propchange: commons/proper/jcs/trunk/src/java/org/apache/commons/jcs/jcache/jmx/JCSCacheStatisticsMXBean.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: commons/proper/jcs/trunk/src/java/org/apache/commons/jcs/jcache/jmx/JCSCacheStatisticsMXBean.java ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision Added: commons/proper/jcs/trunk/src/java/org/apache/commons/jcs/jcache/jmx/JMXs.java URL: http://svn.apache.org/viewvc/commons/proper/jcs/trunk/src/java/org/apache/commons/jcs/jcache/jmx/JMXs.java?rev=1590527&view=auto ============================================================================== --- commons/proper/jcs/trunk/src/java/org/apache/commons/jcs/jcache/jmx/JMXs.java (added) +++ commons/proper/jcs/trunk/src/java/org/apache/commons/jcs/jcache/jmx/JMXs.java Sun Apr 27 23:47:39 2014 @@ -0,0 +1,47 @@ +package org.apache.commons.jcs.jcache.jmx; + +import javax.management.MBeanServer; +import javax.management.MBeanServerFactory; +import javax.management.ObjectName; +import java.lang.management.ManagementFactory; + +import static com.sun.jmx.defaults.JmxProperties.JMX_INITIAL_BUILDER; + +public class JMXs { + private static final MBeanServer SERVER = findMBeanServer(); + + public static MBeanServer server() { + return SERVER; + } + + public static void register(final ObjectName on, final Object bean) { + if (!SERVER.isRegistered(on)) { + try { + SERVER.registerMBean(bean, on); + } catch (final Exception e) { + throw new IllegalStateException(e.getMessage(), e); + } + } + } + + public static void unregister(final ObjectName on) { + if (SERVER.isRegistered(on)) { + try { + SERVER.unregisterMBean(on); + } catch (final Exception e) { + // no-op + } + } + } + + private static MBeanServer findMBeanServer() { + if (System.getProperty(JMX_INITIAL_BUILDER) != null) { + return MBeanServerFactory.createMBeanServer(); + } + return ManagementFactory.getPlatformMBeanServer(); + } + + private JMXs() { + // no-op + } +} Propchange: commons/proper/jcs/trunk/src/java/org/apache/commons/jcs/jcache/jmx/JMXs.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: commons/proper/jcs/trunk/src/java/org/apache/commons/jcs/jcache/jmx/JMXs.java ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision Added: commons/proper/jcs/trunk/src/resources/META-INF/services/javax.cache.spi.CachingProvider URL: http://svn.apache.org/viewvc/commons/proper/jcs/trunk/src/resources/META-INF/services/javax.cache.spi.CachingProvider?rev=1590527&view=auto ============================================================================== --- commons/proper/jcs/trunk/src/resources/META-INF/services/javax.cache.spi.CachingProvider (added) +++ commons/proper/jcs/trunk/src/resources/META-INF/services/javax.cache.spi.CachingProvider Sun Apr 27 23:47:39 2014 @@ -0,0 +1 @@ +org.apache.commons.jcs.jcache.JCSCachingProvider Added: commons/proper/jcs/trunk/src/resources/cache.ccf URL: http://svn.apache.org/viewvc/commons/proper/jcs/trunk/src/resources/cache.ccf?rev=1590527&view=auto ============================================================================== --- commons/proper/jcs/trunk/src/resources/cache.ccf (added) +++ commons/proper/jcs/trunk/src/resources/cache.ccf Sun Apr 27 23:47:39 2014 @@ -0,0 +1,69 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# ############################################################# +# ################# DEFAULT CACHE REGION ##################### +# sets the default aux value for any non configured caches +jcs.default=DC +jcs.default.cacheattributes=org.apache.commons.jcs.engine.CompositeCacheAttributes +jcs.default.cacheattributes.MaxObjects=200001 +jcs.default.cacheattributes.MemoryCacheName=org.apache.commons.jcs.engine.memory.lru.LRUMemoryCache +jcs.default.cacheattributes.UseMemoryShrinker=true +jcs.default.cacheattributes.MaxMemoryIdleTimeSeconds=3600 +jcs.default.cacheattributes.ShrinkerIntervalSeconds=60 +jcs.default.elementattributes=org.apache.commons.jcs.engine.ElementAttributes +jcs.default.elementattributes.IsEternal=false +jcs.default.elementattributes.MaxLifeSeconds=700 +jcs.default.elementattributes.IdleTime=1800 +jcs.default.elementattributes.IsSpool=true +jcs.default.elementattributes.IsRemote=true +jcs.default.elementattributes.IsLateral=true + + +# ############################################################# +# ################# OPTIONAL THREAD POOL CONFIGURATION ################### +# Default thread pool config +thread_pool.default.boundarySize=2000 +thread_pool.default.maximumPoolSize=150 +thread_pool.default.minimumPoolSize=4 +thread_pool.default.keepAliveTime=350000 +# RUN ABORT WAIT BLOCK DISCARDOLDEST +thread_pool.default.whenBlockedPolicy=RUN +thread_pool.default.startUpSize=4 + +# Default Cache Event Queue thread pool config, used by auxiliaries +# since it doesn't use a boundary, some of the options are unnecessary +thread_pool.cache_event_queue.useBoundary=false +thread_pool.cache_event_queue.minimumPoolSize=5 +thread_pool.cache_event_queue.keepAliveTime=3500 +thread_pool.cache_event_queue.startUpSize=5 + +# Disk Cache pool +thread_pool.disk_cache_event_queue.useBoundary=false +thread_pool.remote_cache_client.maximumPoolSize=15 +thread_pool.disk_cache_event_queue.minimumPoolSize=1 +thread_pool.disk_cache_event_queue.keepAliveTime=3500 +thread_pool.disk_cache_event_queue.startUpSize=1 + +# Remote cache client thread pool config +thread_pool.remote_cache_client.boundarySize=75 +thread_pool.remote_cache_client.maximumPoolSize=150 +thread_pool.remote_cache_client.minimumPoolSize=4 +thread_pool.remote_cache_client.keepAliveTime=350000 +thread_pool.remote_cache_client.whenBlockedPolicy=RUN +thread_pool.remote_cache_client.startUpSize=4 + + Modified: commons/proper/jcs/trunk/src/test/org/apache/commons/jcs/access/SystemPropertyUnitTest.java URL: http://svn.apache.org/viewvc/commons/proper/jcs/trunk/src/test/org/apache/commons/jcs/access/SystemPropertyUnitTest.java?rev=1590527&r1=1590526&r2=1590527&view=diff ============================================================================== --- commons/proper/jcs/trunk/src/test/org/apache/commons/jcs/access/SystemPropertyUnitTest.java (original) +++ commons/proper/jcs/trunk/src/test/org/apache/commons/jcs/access/SystemPropertyUnitTest.java Sun Apr 27 23:47:39 2014 @@ -23,6 +23,8 @@ import junit.framework.TestCase; import org.apache.commons.jcs.JCS; import org.apache.commons.jcs.engine.control.CompositeCacheManager; +import org.junit.FixMethodOrder; +import org.junit.runners.MethodSorters; /** * This test is for the system property usage in configuration values. @@ -30,6 +32,7 @@ import org.apache.commons.jcs.engine.con * @author Aaron Smuts * */ +@FixMethodOrder(MethodSorters.NAME_ASCENDING) public class SystemPropertyUnitTest extends TestCase { @@ -40,7 +43,7 @@ public class SystemPropertyUnitTest * @throws Exception * */ - public void testSystemPropertyInValueDelimiter() + public void test1SystemPropertyInValueDelimiter() throws Exception { @@ -54,6 +57,8 @@ public class SystemPropertyUnitTest assertEquals( "We should have used the system property for the memory size", maxMemory, cache .getCacheAttributes().getMaxObjects() ); + System.clearProperty("MY_SYSTEM_PROPERTY_DISK_DIR"); + System.clearProperty("MY_SYSTEM_PROPERTY_MAX_SIZE"); } /** @@ -64,7 +69,7 @@ public class SystemPropertyUnitTest * @throws Exception * */ - public void testSystemPropertyMissingInValueDelimeter() + public void test2SystemPropertyMissingInValueDelimeter() throws Exception { System.getProperties().setProperty( "MY_SYSTEM_PROPERTY_DISK_DIR", "system_set" ); @@ -77,6 +82,8 @@ public class SystemPropertyUnitTest assertEquals( "We should have used the default property for the memory size", 100, cache.getCacheAttributes() .getMaxObjects() ); + System.clearProperty("MY_SYSTEM_PROPERTY_DISK_DIR"); + } } Added: commons/proper/jcs/trunk/src/test/org/apache/commons/jcs/jcache/CacheTest.java URL: http://svn.apache.org/viewvc/commons/proper/jcs/trunk/src/test/org/apache/commons/jcs/jcache/CacheTest.java?rev=1590527&view=auto ============================================================================== --- commons/proper/jcs/trunk/src/test/org/apache/commons/jcs/jcache/CacheTest.java (added) +++ commons/proper/jcs/trunk/src/test/org/apache/commons/jcs/jcache/CacheTest.java Sun Apr 27 23:47:39 2014 @@ -0,0 +1,242 @@ +package org.apache.commons.jcs.jcache; + +import org.junit.Test; + +import javax.cache.Cache; +import javax.cache.CacheManager; +import javax.cache.Caching; +import javax.cache.configuration.CacheEntryListenerConfiguration; +import javax.cache.configuration.CompleteConfiguration; +import javax.cache.configuration.Factory; +import javax.cache.event.CacheEntryCreatedListener; +import javax.cache.event.CacheEntryEvent; +import javax.cache.event.CacheEntryEventFilter; +import javax.cache.event.CacheEntryListener; +import javax.cache.event.CacheEntryListenerException; +import javax.cache.event.CacheEntryRemovedListener; +import javax.cache.event.CacheEntryUpdatedListener; +import javax.cache.expiry.ExpiryPolicy; +import javax.cache.integration.CacheLoader; +import javax.cache.integration.CacheLoaderException; +import javax.cache.integration.CacheWriter; +import javax.cache.spi.CachingProvider; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +public class CacheTest { + @Test + public void getPut() { + final CachingProvider cachingProvider = Caching.getCachingProvider(); + final CacheManager cacheManager = cachingProvider.getCacheManager(); + cacheManager.createCache("default", null); + final Cache<String, String> cache = cacheManager.getCache("default"); + assertFalse(cache.containsKey("foo")); + cache.put("foo", "bar"); + assertTrue(cache.containsKey("foo")); + assertEquals("bar", cache.get("foo")); + cache.remove("foo"); + assertFalse(cache.containsKey("foo")); + cachingProvider.close(); + } + + @Test + public void listeners() { + final CachingProvider cachingProvider = Caching.getCachingProvider(); + final CacheManager cacheManager = cachingProvider.getCacheManager(); + cacheManager.createCache("default", null); + final Cache<String, String> cache = cacheManager.getCache("default"); + final Set<String> event = new HashSet<String>(); + cache.registerCacheEntryListener(new CacheEntryListenerConfiguration<String, String>() { + @Override + public Factory<CacheEntryListener<? super String, ? super String>> getCacheEntryListenerFactory() { + return new Factory<CacheEntryListener<? super String, ? super String>>() { + @Override + public CacheEntryListener<? super String, ? super String> create() { + return new CacheEntryCreatedListener<String, String>() { + @Override + public void onCreated(Iterable<CacheEntryEvent<? extends String, ? extends String>> cacheEntryEvents) throws CacheEntryListenerException { + event.add(cacheEntryEvents.iterator().next().getKey()); + } + }; + } + }; + } + + @Override + public boolean isOldValueRequired() { + return false; + } + + @Override + public Factory<CacheEntryEventFilter<? super String, ? super String>> getCacheEntryEventFilterFactory() { + return null; + } + + @Override + public boolean isSynchronous() { + return false; + } + }); + cache.registerCacheEntryListener(new CacheEntryListenerConfiguration<String, String>() { + @Override + public Factory<CacheEntryListener<? super String, ? super String>> getCacheEntryListenerFactory() { + return new Factory<CacheEntryListener<? super String, ? super String>>() { + @Override + public CacheEntryListener<? super String, ? super String> create() { + return new CacheEntryUpdatedListener<String, String>() { + @Override + public void onUpdated(Iterable<CacheEntryEvent<? extends String, ? extends String>> cacheEntryEvents) throws CacheEntryListenerException { + event.add(cacheEntryEvents.iterator().next().getKey()); + } + }; + } + }; + } + + @Override + public boolean isOldValueRequired() { + return false; + } + + @Override + public Factory<CacheEntryEventFilter<? super String, ? super String>> getCacheEntryEventFilterFactory() { + return null; + } + + @Override + public boolean isSynchronous() { + return false; + } + }); + cache.registerCacheEntryListener(new CacheEntryListenerConfiguration<String, String>() { + @Override + public Factory<CacheEntryListener<? super String, ? super String>> getCacheEntryListenerFactory() { + return new Factory<CacheEntryListener<? super String, ? super String>>() { + @Override + public CacheEntryListener<? super String, ? super String> create() { + return new CacheEntryRemovedListener<String, String>() { + @Override + public void onRemoved(Iterable<CacheEntryEvent<? extends String, ? extends String>> cacheEntryEvents) throws CacheEntryListenerException { + event.add(cacheEntryEvents.iterator().next().getKey()); + } + }; + } + }; + } + + @Override + public boolean isOldValueRequired() { + return false; + } + + @Override + public Factory<CacheEntryEventFilter<? super String, ? super String>> getCacheEntryEventFilterFactory() { + return null; + } + + @Override + public boolean isSynchronous() { + return false; + } + }); + + cache.put("foo", "bar"); + assertEquals(1, event.size()); + assertEquals("foo", event.iterator().next()); + event.clear(); + cache.put("foo", "new"); + assertEquals(1, event.size()); + assertEquals("foo", event.iterator().next()); + event.clear(); + cache.remove("foo"); + assertEquals(1, event.size()); + assertEquals("foo", event.iterator().next()); + + cachingProvider.close(); + } + + @Test + public void loader() { + final CachingProvider cachingProvider = Caching.getCachingProvider(); + final CacheManager cacheManager = cachingProvider.getCacheManager(); + cacheManager.createCache("default", new CompleteConfiguration<Object, Object>() { + @Override + public boolean isReadThrough() { + return true; + } + + @Override + public boolean isWriteThrough() { + return false; + } + + @Override + public boolean isStatisticsEnabled() { + return false; + } + + @Override + public boolean isManagementEnabled() { + return false; + } + + @Override + public Iterable<CacheEntryListenerConfiguration<Object, Object>> getCacheEntryListenerConfigurations() { + return null; + } + + @Override + public Factory<CacheLoader<Object, Object>> getCacheLoaderFactory() { + return new Factory<CacheLoader<Object, Object>>() { + @Override + public CacheLoader<Object, Object> create() { + return new CacheLoader<Object, Object>() { + @Override + public Object load(Object key) throws CacheLoaderException { + return "super"; + } + + @Override + public Map<Object, Object> loadAll(Iterable<?> keys) throws CacheLoaderException { + return null; + } + }; + } + }; + } + + @Override + public Factory<CacheWriter<? super Object, ? super Object>> getCacheWriterFactory() { + return null; + } + + @Override + public Factory<ExpiryPolicy> getExpiryPolicyFactory() { + return null; + } + + @Override + public Class<Object> getKeyType() { + return null; + } + + @Override + public Class<Object> getValueType() { + return null; + } + + @Override + public boolean isStoreByValue() { + return false; + } + }); + final Cache<String, String> cache = cacheManager.getCache("default"); + assertEquals("super", cache.get("lazilyLoaded")); + cachingProvider.close(); + } +} Propchange: commons/proper/jcs/trunk/src/test/org/apache/commons/jcs/jcache/CacheTest.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: commons/proper/jcs/trunk/src/test/org/apache/commons/jcs/jcache/CacheTest.java ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision Added: commons/proper/jcs/trunk/src/test/org/apache/commons/jcs/jcache/CachingProviderTest.java URL: http://svn.apache.org/viewvc/commons/proper/jcs/trunk/src/test/org/apache/commons/jcs/jcache/CachingProviderTest.java?rev=1590527&view=auto ============================================================================== --- commons/proper/jcs/trunk/src/test/org/apache/commons/jcs/jcache/CachingProviderTest.java (added) +++ commons/proper/jcs/trunk/src/test/org/apache/commons/jcs/jcache/CachingProviderTest.java Sun Apr 27 23:47:39 2014 @@ -0,0 +1,22 @@ +package org.apache.commons.jcs.jcache; + +import org.junit.Test; + +import javax.cache.Caching; +import javax.cache.spi.CachingProvider; + +import static org.junit.Assert.assertNotNull; + +public class CachingProviderTest { + @Test + public void findProvider() { + assertNotNull(Caching.getCachingProvider()); + } + + @Test + public void createCacheMgr() { + final CachingProvider cachingProvider = Caching.getCachingProvider(); + assertNotNull(cachingProvider.getCacheManager()); + cachingProvider.close(); + } +} Propchange: commons/proper/jcs/trunk/src/test/org/apache/commons/jcs/jcache/CachingProviderTest.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: commons/proper/jcs/trunk/src/test/org/apache/commons/jcs/jcache/CachingProviderTest.java ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision Added: commons/proper/jcs/trunk/tck.sh URL: http://svn.apache.org/viewvc/commons/proper/jcs/trunk/tck.sh?rev=1590527&view=auto ============================================================================== --- commons/proper/jcs/trunk/tck.sh (added) +++ commons/proper/jcs/trunk/tck.sh Sun Apr 27 23:47:39 2014 @@ -0,0 +1,3 @@ +#! /bin/bash +mvn clean -f tck.xml test $@ + Propchange: commons/proper/jcs/trunk/tck.sh ------------------------------------------------------------------------------ svn:eol-style = native Propchange: commons/proper/jcs/trunk/tck.sh ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision Added: commons/proper/jcs/trunk/tck.xml URL: http://svn.apache.org/viewvc/commons/proper/jcs/trunk/tck.xml?rev=1590527&view=auto ============================================================================== --- commons/proper/jcs/trunk/tck.xml (added) +++ commons/proper/jcs/trunk/tck.xml Sun Apr 27 23:47:39 2014 @@ -0,0 +1,214 @@ +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <!-- + TO RUN TCKs CALL: + + $ mvn -f tck.xml test + + or one of the following profiles: + -P test-optional-cache + -P test-basic-cache + + --> + + <groupId>org.apache.commons</groupId> + <artifactId>commons-jcs-jcache-tck</artifactId> + <version>2.0-SNAPSHOT</version> + <name>JCache TCK</name> + + <properties> + <jsr107.api.version>1.0.0</jsr107.api.version> + + <implementation-groupId>${project.groupId}</implementation-groupId> + <implementation-artifactId>commons-jcs</implementation-artifactId> + <implementation-version>${project.version}</implementation-version> + + <CacheManagerImpl>org.apache.commons.jcs.jcache.JCSCachingManager</CacheManagerImpl> + <CacheImpl>org.apache.commons.jcs.jcache.JCSCache</CacheImpl> + <CacheEntryImpl>org.apache.commons.jcs.jcache.JCSEntry</CacheEntryImpl> + + <javax.management.builder.initial>org.apache.commons.jcs.jcache.jmx.ConfigurableMBeanServerIdBuilder</javax.management.builder.initial> + <org.jsr107.tck.management.agentId>MBeanServerJCS</org.jsr107.tck.management.agentId> + + <domain-lib-dir>${project.build.directory}/domainlib</domain-lib-dir> + <domain-jar>domain.jar</domain-jar> + </properties> + + <dependencies> + <dependency> + <groupId>${project.groupId}</groupId> + <artifactId>commons-jcs</artifactId> + <version>${project.version}</version> + </dependency> + + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + <version>4.11</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.hamcrest</groupId> + <artifactId>hamcrest-all</artifactId> + <version>1.3</version> + <scope>test</scope> + </dependency> + + <dependency> + <groupId>javax.cache</groupId> + <artifactId>test-domain</artifactId> + <version>${jsr107.api.version}</version> + </dependency> + + <dependency> + <groupId>javax.cache</groupId> + <artifactId>app-domain</artifactId> + <version>${jsr107.api.version}</version> + </dependency> + <dependency> + <groupId>javax.cache</groupId> + <artifactId>cache-api</artifactId> + <version>${jsr107.api.version}</version> + </dependency> + + <dependency> + <groupId>javax.cache</groupId> + <artifactId>cache-tests</artifactId> + <version>${jsr107.api.version}</version> + </dependency> + + <dependency> + <groupId>javax.cache</groupId> + <artifactId>cache-tests</artifactId> + <classifier>tests</classifier> + <scope>test</scope> + <version>${jsr107.api.version}</version> + </dependency> + + <dependency> + <groupId>javax.transaction</groupId> + <artifactId>jta</artifactId> + <version>1.1</version> + </dependency> + + </dependencies> + + <build> + <testResources> + <testResource> + <directory>src/test/resources</directory> + <filtering>true</filtering> + </testResource> + </testResources> + + <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-dependency-plugin</artifactId> + <executions> + <execution> + <id>copy-cache-tests</id> + <goals> + <goal>unpack-dependencies</goal> + </goals> + <configuration> + <outputDirectory>${project.build.testOutputDirectory} + </outputDirectory> + <includeArtifactIds>cache-tests</includeArtifactIds> + <includeScope>test</includeScope> + <excludes>**/unwrap.properties</excludes> + </configuration> + </execution> + <execution> + <id>copy-domain</id> + <goals> + <goal>copy</goal> + </goals> + <configuration> + <artifactItems> + <artifactItem> + <groupId>javax.cache</groupId> + <artifactId>app-domain</artifactId> + <version>${jsr107.api.version}</version> + <outputDirectory>${domain-lib-dir}</outputDirectory> + <destFileName>${domain-jar}</destFileName> + </artifactItem> + </artifactItems> + </configuration> + </execution> + </executions> + </plugin> + + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-source-plugin</artifactId> + <version>2.0.3</version> + </plugin> + + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-surefire-plugin</artifactId> + <version>2.9</version> + <configuration> + <systemPropertyVariables> + <domainJar>${domain-lib-dir}/${domain-jar}</domainJar> + <javax.management.builder.initial>${javax.management.builder.initial}</javax.management.builder.initial> + <org.jsr107.tck.management.agentId>${org.jsr107.tck.management.agentId}</org.jsr107.tck.management.agentId> + <javax.cache.CacheManager>${CacheManagerImpl}</javax.cache.CacheManager> + <javax.cache.Cache>${CacheImpl}</javax.cache.Cache> + <javax.cache.Cache.Entry>${CacheEntryImpl}</javax.cache.Cache.Entry> + <javax.cache.annotation.CacheInvocationContext>${CacheInvocationContextImpl}</javax.cache.annotation.CacheInvocationContext> + </systemPropertyVariables> + <excludes> + <exclude>**/annotation/*Test.java</exclude> + </excludes> + </configuration> + </plugin> + </plugins> + </build> + + <profiles> + <profile> + <id>test-basic-cache</id> + <build> + <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-surefire-plugin</artifactId> + <configuration> + <skipTests>false</skipTests> + <excludes> + <include>**/interceptor/*Test.java</include> + </excludes> + <systemPropertyVariables> + <domainJar>${domain-lib-dir}/${domain-jar} + </domainJar> + </systemPropertyVariables> + </configuration> + </plugin> + </plugins> + </build> + </profile> + + <profile> + <id>test-optional-cache</id> + <build> + <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-surefire-plugin</artifactId> + <configuration> + <includes> + <include>**/interceptor/*Test.java</include> + </includes> + </configuration> + </plugin> + </plugins> + </build> + </profile> + </profiles> + +</project> + Propchange: commons/proper/jcs/trunk/tck.xml ------------------------------------------------------------------------------ svn:eol-style = native Propchange: commons/proper/jcs/trunk/tck.xml ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision