This is an automated email from the ASF dual-hosted git repository. tv pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/commons-jcs.git
commit f77df1a1fdf9d61dd2947f9e825631fd0deddf2d Author: Thomas Vandahl <[email protected]> AuthorDate: Mon Feb 16 21:29:42 2026 +0100 Rework cache event logging --- .../jcs4/auxiliary/AbstractAuxiliaryCache.java | 122 +--------------- .../AbstractAuxiliaryCacheEventLogging.java | 31 ++-- .../auxiliary/AbstractCacheEventLogSupport.java | 162 +++++++++++++++++++++ .../jcs4/auxiliary/disk/AbstractDiskCache.java | 143 +++--------------- .../jcs4/auxiliary/disk/indexed/IndexedDisk.java | 1 - .../auxiliary/disk/indexed/IndexedDiskCache.java | 8 +- .../jcs4/auxiliary/disk/jdbc/JDBCDiskCache.java | 12 +- .../lateral/socket/tcp/LateralTCPCacheFactory.java | 3 +- .../lateral/socket/tcp/LateralTCPCacheNoWait.java | 14 +- .../socket/tcp/LateralTCPCacheNoWaitFacade.java | 17 +-- .../remote/AbstractRemoteAuxiliaryCache.java | 22 +-- .../remote/AbstractRemoteCacheNoWaitFacade.java | 11 -- .../commons/jcs4/auxiliary/remote/RemoteCache.java | 7 +- .../jcs4/auxiliary/remote/RemoteCacheManager.java | 3 +- .../jcs4/auxiliary/remote/RemoteCacheNoWait.java | 11 -- .../auxiliary/remote/RemoteCacheNoWaitFacade.java | 16 +- .../remote/http/client/RemoteHttpCache.java | 7 +- .../http/server/AbstractRemoteCacheService.java | 95 ++++-------- .../remote/http/server/RemoteHttpCacheService.java | 9 ++ .../auxiliary/remote/server/RemoteCacheServer.java | 91 ++++++------ .../remote/server/RemoteCacheServerFactory.java | 19 ++- .../commons/jcs4/engine/logging/CacheEvent.java | 142 +++++------------- .../logging/CacheEventLoggerDebugLogger.java | 34 +---- .../jcs4/engine/logging/behavior/ICacheEvent.java | 37 +---- .../engine/logging/behavior/ICacheEventLogger.java | 108 +++++++++----- .../jcs4/io/ObjectInputStreamClassLoaderAware.java | 1 + .../AuxiliaryCacheConfiguratorUnitTest.java | 1 - .../commons/jcs4/auxiliary/MockAuxiliaryCache.java | 7 - .../jcs4/auxiliary/MockCacheEventLogger.java | 33 ++++- .../tcp/LateralTCPDiscoveryListenerUnitTest.java | 2 +- .../auxiliary/remote/MockRemoteCacheClient.java | 11 -- .../CompositeCacheConfiguratorUnitTest.java | 6 +- .../control/CompositeCacheDiskUsageUnitTest.java | 7 - .../CacheEventLoggerDebugLoggerUnitTest.java | 21 +-- .../jcs4/engine/logging/MockCacheEventLogger.java | 95 ------------ 35 files changed, 503 insertions(+), 806 deletions(-) diff --git a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/AbstractAuxiliaryCache.java b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/AbstractAuxiliaryCache.java index 6332f170..71234d4e 100644 --- a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/AbstractAuxiliaryCache.java +++ b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/AbstractAuxiliaryCache.java @@ -28,71 +28,21 @@ import java.util.stream.Collectors; import org.apache.commons.jcs4.engine.behavior.ICacheElement; import org.apache.commons.jcs4.engine.behavior.IElementSerializer; -import org.apache.commons.jcs4.engine.logging.CacheEvent; -import org.apache.commons.jcs4.engine.logging.behavior.ICacheEvent; -import org.apache.commons.jcs4.engine.logging.behavior.ICacheEventLogger; import org.apache.commons.jcs4.engine.match.KeyMatcherPatternImpl; import org.apache.commons.jcs4.engine.match.behavior.IKeyMatcher; import org.apache.commons.jcs4.utils.serialization.StandardSerializer; /** This holds convenience methods used by most auxiliary caches. */ public abstract class AbstractAuxiliaryCache<K, V> + extends AbstractCacheEventLogSupport<K, V> implements AuxiliaryCache<K, V> { - /** An optional event logger */ - private ICacheEventLogger cacheEventLogger; - /** The serializer. Uses a standard serializer by default. */ private IElementSerializer elementSerializer = new StandardSerializer(); /** Key matcher used by the getMatching API */ private IKeyMatcher<K> keyMatcher = new KeyMatcherPatternImpl<>(); - /** - * Logs an event if an event logger is configured. - * - * @param item - * @param eventName - * @return ICacheEvent - */ - protected ICacheEvent<K> createICacheEvent( final ICacheElement<K, V> item, final String eventName ) - { - if ( cacheEventLogger == null ) - { - return new CacheEvent<>(); - } - final String diskLocation = getEventLoggingExtraInfo(); - String regionName = null; - K key = null; - if ( item != null ) - { - regionName = item.cacheName(); - key = item.key(); - } - return cacheEventLogger.createICacheEvent( getAuxiliaryCacheAttributes().getName(), regionName, eventName, - diskLocation, key ); - } - - /** - * Logs an event if an event logger is configured. - * - * @param regionName - * @param key - * @param eventName - * @return ICacheEvent - */ - protected <T> ICacheEvent<T> createICacheEvent( final String regionName, final T key, final String eventName ) - { - if ( cacheEventLogger == null ) - { - return new CacheEvent<>(); - } - final String diskLocation = getEventLoggingExtraInfo(); - return cacheEventLogger.createICacheEvent( getAuxiliaryCacheAttributes().getName(), regionName, eventName, - diskLocation, key ); - - } - /** * Gets the item from the cache. * @@ -103,16 +53,6 @@ public abstract class AbstractAuxiliaryCache<K, V> @Override public abstract ICacheElement<K, V> get( K key ) throws IOException; - /** - * Allows it to be injected. - * - * @return cacheEventLogger - */ - public ICacheEventLogger getCacheEventLogger() - { - return this.cacheEventLogger; - } - /** * Allows it to be injected. * @@ -123,13 +63,6 @@ public abstract class AbstractAuxiliaryCache<K, V> return this.elementSerializer; } - /** - * Gets the extra info for the event log. - * - * @return IP, or disk location, etc. - */ - public abstract String getEventLoggingExtraInfo(); - /** * Returns the key matcher used by get matching. * @@ -140,49 +73,6 @@ public abstract class AbstractAuxiliaryCache<K, V> return this.keyMatcher; } - /** - * Logs an event if an event logger is configured. - * - * @param source - * @param eventName - * @param optionalDetails - */ - protected void logApplicationEvent( final String source, final String eventName, final String optionalDetails ) - { - if ( cacheEventLogger != null ) - { - cacheEventLogger.logApplicationEvent( source, eventName, optionalDetails ); - } - } - - /** - * Logs an event if an event logger is configured. - * - * @param source - * @param eventName - * @param errorMessage - */ - protected void logError( final String source, final String eventName, final String errorMessage ) - { - if ( cacheEventLogger != null ) - { - cacheEventLogger.logError( source, eventName, errorMessage ); - } - } - - /** - * Logs an event if an event logger is configured. - * - * @param cacheEvent - */ - protected <T> void logICacheEvent( final ICacheEvent<T> cacheEvent ) - { - if ( cacheEventLogger != null ) - { - cacheEventLogger.logICacheEvent( cacheEvent ); - } - } - /** * Gets multiple items from the cache based on the given set of keys. * @@ -214,16 +104,6 @@ public abstract class AbstractAuxiliaryCache<K, V> return new HashMap<>(); } - /** - * Allows it to be injected. - * - * @param cacheEventLogger - */ - public void setCacheEventLogger( final ICacheEventLogger cacheEventLogger ) - { - this.cacheEventLogger = cacheEventLogger; - } - /** * Allows you to inject a custom serializer. A good example would be a compressing standard * serializer. diff --git a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/AbstractAuxiliaryCacheEventLogging.java b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/AbstractAuxiliaryCacheEventLogging.java index 06f50e5c..a0c2203e 100644 --- a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/AbstractAuxiliaryCacheEventLogging.java +++ b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/AbstractAuxiliaryCacheEventLogging.java @@ -26,7 +26,7 @@ import java.util.Set; import org.apache.commons.jcs4.engine.behavior.ICacheElement; import org.apache.commons.jcs4.engine.logging.behavior.ICacheEvent; -import org.apache.commons.jcs4.engine.logging.behavior.ICacheEventLogger; +import org.apache.commons.jcs4.engine.logging.behavior.ICacheEventLogger.CacheEventType; /** * All ICacheEvents are defined as final. Children must implement process events. These are wrapped @@ -58,7 +58,8 @@ public abstract class AbstractAuxiliaryCacheEventLogging<K, V> protected final void disposeWithEventLogging() throws IOException { - final ICacheEvent<String> cacheEvent = createICacheEvent( getCacheName(), "none", ICacheEventLogger.DISPOSE_EVENT ); + final ICacheEvent<String> cacheEvent = createICacheEvent( getCacheName(), "none", + CacheEventType.DISPOSE_EVENT, this::getEventLoggingExtraInfo); try { processDispose(); @@ -115,7 +116,8 @@ public abstract class AbstractAuxiliaryCacheEventLogging<K, V> protected final Map<K, ICacheElement<K, V>> getMatchingWithEventLogging( final String pattern ) throws IOException { - final ICacheEvent<String> cacheEvent = createICacheEvent( getCacheName(), pattern, ICacheEventLogger.GETMATCHING_EVENT ); + final ICacheEvent<String> cacheEvent = createICacheEvent( getCacheName(), pattern, + CacheEventType.GETMATCHING_EVENT, this::getEventLoggingExtraInfo); try { return processGetMatching( pattern ); @@ -152,8 +154,8 @@ public abstract class AbstractAuxiliaryCacheEventLogging<K, V> protected final Map<K, ICacheElement<K, V>> getMultipleWithEventLogging(final Set<K> keys ) throws IOException { - final ICacheEvent<Serializable> cacheEvent = createICacheEvent( getCacheName(), (Serializable) keys, - ICacheEventLogger.GETMULTIPLE_EVENT ); + final ICacheEvent<Serializable> cacheEvent = createICacheEvent( getCacheName(), + (Serializable) keys, CacheEventType.GETMULTIPLE_EVENT, this::getEventLoggingExtraInfo); try { return processGetMultiple( keys ); @@ -174,7 +176,8 @@ public abstract class AbstractAuxiliaryCacheEventLogging<K, V> protected final ICacheElement<K, V> getWithEventLogging( final K key ) throws IOException { - final ICacheEvent<K> cacheEvent = createICacheEvent( getCacheName(), key, ICacheEventLogger.GET_EVENT ); + final ICacheEvent<K> cacheEvent = createICacheEvent( getCacheName(), key, + CacheEventType.GET_EVENT, this::getEventLoggingExtraInfo); try { return processGet( key ); @@ -275,7 +278,8 @@ public abstract class AbstractAuxiliaryCacheEventLogging<K, V> protected final void removeAllWithEventLogging() throws IOException { - final ICacheEvent<String> cacheEvent = createICacheEvent( getCacheName(), "all", ICacheEventLogger.REMOVEALL_EVENT ); + final ICacheEvent<String> cacheEvent = createICacheEvent( getCacheName(), "all", + CacheEventType.REMOVEALL_EVENT, this::getEventLoggingExtraInfo); try { processRemoveAll(); @@ -296,7 +300,8 @@ public abstract class AbstractAuxiliaryCacheEventLogging<K, V> protected final boolean removeWithEventLogging( final K key ) throws IOException { - final ICacheEvent<K> cacheEvent = createICacheEvent( getCacheName(), key, ICacheEventLogger.REMOVE_EVENT ); + final ICacheEvent<K> cacheEvent = createICacheEvent( getCacheName(), key, + CacheEventType.REMOVE_EVENT, this::getEventLoggingExtraInfo); try { return processRemove( key ); @@ -329,7 +334,8 @@ public abstract class AbstractAuxiliaryCacheEventLogging<K, V> protected final void updateWithEventLogging( final ICacheElement<K, V> cacheElement ) throws IOException { - final ICacheEvent<K> cacheEvent = createICacheEvent( cacheElement, ICacheEventLogger.UPDATE_EVENT ); + final ICacheEvent<K> cacheEvent = createICacheEvent( cacheElement, + CacheEventType.UPDATE_EVENT, this::getEventLoggingExtraInfo); try { processUpdate( cacheElement ); @@ -339,4 +345,11 @@ public abstract class AbstractAuxiliaryCacheEventLogging<K, V> logICacheEvent( cacheEvent ); } } + + /** + * Gets the extra info for the event log. + * + * @return disk location + */ + public abstract String getEventLoggingExtraInfo(); } diff --git a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/AbstractCacheEventLogSupport.java b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/AbstractCacheEventLogSupport.java new file mode 100644 index 00000000..c803c973 --- /dev/null +++ b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/AbstractCacheEventLogSupport.java @@ -0,0 +1,162 @@ +package org.apache.commons.jcs4.auxiliary; + +/* + * 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 + * + * https://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. + */ + +import java.util.Optional; +import java.util.function.Supplier; + +import org.apache.commons.jcs4.engine.behavior.ICacheElement; +import org.apache.commons.jcs4.engine.logging.CacheEvent; +import org.apache.commons.jcs4.engine.logging.behavior.ICacheEvent; +import org.apache.commons.jcs4.engine.logging.behavior.ICacheEventLogger; +import org.apache.commons.jcs4.engine.logging.behavior.ICacheEventLogger.CacheEventType; + +public abstract class AbstractCacheEventLogSupport<K, V> +{ + /** An optional event logger */ + private Optional<ICacheEventLogger> cacheEventLogger = Optional.empty(); + + /** + * Creates an event. + * + * @param source e.g. RemoteCacheServer + * @param region the name of the region + * @param eventType e.g. update, get, put, remove + * @param optionalDetails any extra message + * @param key the cache key + * @return ICacheEvent + */ + protected <T> ICacheEvent<T> createICacheEvent(final String source, final String region, + final CacheEventType eventType, final String optionalDetails, final T key) + { + if (getCacheEventLogger().isEmpty()) + { + return new CacheEvent<>(); + } + + return getCacheEventLogger().get().createICacheEvent( + source, region, eventType, optionalDetails, key); + } + + /** + * Logs an event if an event logger is configured. + * + * @param item + * @param eventType + * @param eventLoggingExtraInfo + * @return ICacheEvent + */ + protected ICacheEvent<K> createICacheEvent(final ICacheElement<K, V> item, + final CacheEventType eventType, Supplier<String> eventLoggingExtraInfo) + { + if (getCacheEventLogger().isEmpty()) + { + return new CacheEvent<>(); + } + String regionName = item == null ? null : item.cacheName(); + K key = item == null ? null : item.key(); + + return createICacheEvent(getAuxiliaryCacheAttributes().getName(), regionName, + eventType, eventLoggingExtraInfo.get(), key); + } + + /** + * Logs an event if an event logger is configured. + * + * @param regionName + * @param key + * @param eventType + * @param eventLoggingExtraInfo + * @return ICacheEvent + */ + protected <T> ICacheEvent<T> createICacheEvent(final String regionName, final T key, + final CacheEventType eventType, Supplier<String> eventLoggingExtraInfo) + { + if (getCacheEventLogger().isEmpty()) + { + return new CacheEvent<>(); + } + + return createICacheEvent(getAuxiliaryCacheAttributes().getName(), regionName, + eventType, eventLoggingExtraInfo.get(), key); + } + + /** + * Allows it to be injected. + * + * @return cacheEventLogger + */ + public Optional<ICacheEventLogger> getCacheEventLogger() + { + return cacheEventLogger; + } + + /** + * Gets the extra info for the event log. + * + * @return IP, or disk location, etc. + */ + public abstract AuxiliaryCacheAttributes getAuxiliaryCacheAttributes(); + + /** + * Logs an event if an event logger is configured. + * + * @param source + * @param eventType + * @param optionalDetails + */ + protected void logApplicationEvent(final String source, final CacheEventType eventType, final String optionalDetails) + { + getCacheEventLogger().ifPresent(logger -> logger.logApplicationEvent( source, eventType, optionalDetails)); + } + + /** + * Logs an event if an event logger is configured. + * + * @param source + * @param eventType + * @param errorMessage + */ + protected void logError(final String source, final CacheEventType eventType, final String errorMessage) + { + getCacheEventLogger().ifPresent(logger -> logger.logError( source, eventType, errorMessage)); + } + + /** + * Logs an event if an event logger is configured. + * + * @param cacheEvent + */ + protected <T> void logICacheEvent(final ICacheEvent<T> cacheEvent) + { + getCacheEventLogger().ifPresent(logger -> logger.logICacheEvent( cacheEvent )); + } + + /** + * Allows it to be injected. + * + * @param cacheEventLogger + */ + public void setCacheEventLogger(final ICacheEventLogger cacheEventLogger) + { + this.cacheEventLogger = Optional.ofNullable(cacheEventLogger); + } + +} diff --git a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/disk/AbstractDiskCache.java b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/disk/AbstractDiskCache.java index 3273782b..3a88e335 100644 --- a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/disk/AbstractDiskCache.java +++ b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/disk/AbstractDiskCache.java @@ -26,6 +26,7 @@ import java.util.Map; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.locks.ReentrantReadWriteLock; import org.apache.commons.jcs4.auxiliary.AbstractAuxiliaryCacheEventLogging; @@ -91,7 +92,7 @@ public abstract class AbstractDiskCache<K, V> { if (alive.get()) { - doDispose(); + disposeWithEventLogging(); } } @@ -135,7 +136,7 @@ public abstract class AbstractDiskCache<K, V> // If the element is still eligible, spool it. if ( pe.isSpoolable() ) { - doUpdate( element ); + updateWithEventLogging( element ); } } finally @@ -151,7 +152,7 @@ public abstract class AbstractDiskCache<K, V> else { // call the child's implementation - doUpdate( element ); + updateWithEventLogging( element ); } } else @@ -176,7 +177,7 @@ public abstract class AbstractDiskCache<K, V> public void handleRemove( final String cacheName, final K key ) throws IOException { - if (alive.get() && doRemove( key ) ) + if (alive.get() && removeWithEventLogging(key)) { log.debug( "Element removed, key: " + key ); } @@ -193,7 +194,7 @@ public abstract class AbstractDiskCache<K, V> { if (alive.get()) { - doRemoveAll(); + removeAllWithEventLogging(); } } @@ -242,7 +243,7 @@ public abstract class AbstractDiskCache<K, V> private final String cacheName; /** DEBUG: Keeps a count of the number of purgatory hits for debug messages */ - private int purgHits; + private final AtomicInteger purgHits = new AtomicInteger(); /** * We lock here, so that we cannot get an update after a remove all. an individual removal locks @@ -296,109 +297,11 @@ public abstract class AbstractDiskCache<K, V> // Invoke any implementation specific disposal code // need to handle the disposal first. - doDispose(); + disposeWithEventLogging(); alive.set(false); } - /** - * Dispose of the persistent store. Note that disposal of purgatory and setting alive to false - * does NOT need to be done by this method. - * - * Before the event logging layer, the subclasses implemented the do* methods. Now the do* - * methods call the *EventLogging method on the super. The *WithEventLogging methods call the - * abstract process* methods. The children implement the process methods. - * - * @throws IOException - */ - protected final void doDispose() - throws IOException - { - super.disposeWithEventLogging(); - } - - /** - * Gets a value from the persistent store. - * - * Before the event logging layer, the subclasses implemented the do* methods. Now the do* - * methods call the *EventLogging method on the super. The *WithEventLogging methods call the - * abstract process* methods. The children implement the process methods. - * - * @param key Key to locate value for. - * @return An object matching key, or null. - * @throws IOException - */ - protected final ICacheElement<K, V> doGet( final K key ) - throws IOException - { - return super.getWithEventLogging( key ); - } - - /** - * Gets a value from the persistent store. - * - * Before the event logging layer, the subclasses implemented the do* methods. Now the do* - * methods call the *EventLogging method on the super. The *WithEventLogging methods call the - * abstract process* methods. The children implement the process methods. - * - * @param pattern Used to match keys. - * @return A map of matches. - * @throws IOException - */ - protected final Map<K, ICacheElement<K, V>> doGetMatching( final String pattern ) - throws IOException - { - return super.getMatchingWithEventLogging( pattern ); - } - - /** - * Remove an object from the persistent store if found. - * - * Before the event logging layer, the subclasses implemented the do* methods. Now the do* - * methods call the *EventLogging method on the super. The *WithEventLogging methods call the - * abstract process* methods. The children implement the process methods. - * - * @param key Key of object to remove. - * @return whether or no the item was present when removed - * @throws IOException - */ - protected final boolean doRemove( final K key ) - throws IOException - { - return super.removeWithEventLogging( key ); - } - - /** - * Remove all objects from the persistent store. - * - * Before the event logging layer, the subclasses implemented the do* methods. Now the do* - * methods call the *EventLogging method on the super. The *WithEventLogging methods call the - * abstract process* methods. The children implement the process methods. - * - * @throws IOException - */ - protected final void doRemoveAll() - throws IOException - { - super.removeAllWithEventLogging(); - } - - /** - * Add a cache element to the persistent store. - * - * Before the event logging layer, the subclasses implemented the do* methods. Now the do* - * methods call the *EventLogging method on the super. The *WithEventLogging methods call the - * abstract process* methods. The children implement the process methods. - * - * @param cacheElement - * @throws IOException - */ - protected final void doUpdate( final ICacheElement<K, V> cacheElement ) - throws IOException - { - super.updateWithEventLogging( cacheElement ); - } - /** * Check to see if the item is in purgatory. If so, return it. If not, check to see if we have * it on disk. @@ -422,11 +325,11 @@ public abstract class AbstractDiskCache<K, V> // If the element was found in purgatory if ( pe != null ) { - purgHits++; + int p = purgHits.incrementAndGet(); - if ( purgHits % 100 == 0 ) + if ( p % 100 == 0 ) { - log.debug( "Purgatory hits = {0}", purgHits ); + log.debug( "Purgatory hits = {0}", p ); } // Since the element will go back to the memory cache, we could set @@ -452,7 +355,7 @@ public abstract class AbstractDiskCache<K, V> // it from the cache. try { - return doGet( key ); + return getWithEventLogging( key ); } catch (final IOException e) { @@ -536,23 +439,13 @@ public abstract class AbstractDiskCache<K, V> final Map<K, ICacheElement<K, V>> result = processGetMultiple( matchingKeys ); // Get the keys from disk - final Map<K, ICacheElement<K, V>> diskMatches = doGetMatching( pattern ); + final Map<K, ICacheElement<K, V>> diskMatches = getMatchingWithEventLogging( pattern ); result.putAll( diskMatches ); return result; } - /** - * Size cannot be determined without knowledge of the cache implementation, so subclasses will - * need to implement this method. - * - * @return the number of items. - * @see ICache#getSize - */ - @Override - public abstract int getSize(); - /** * Returns semi-structured data. * @@ -563,7 +456,7 @@ public abstract class AbstractDiskCache<K, V> { final IStats stats = new Stats("Abstract Disk Cache"); - stats.addStatElement("Purgatory Hits", Integer.valueOf(purgHits)); + stats.addStatElement("Purgatory Hits", purgHits); stats.addStatElement("Purgatory Size", Integer.valueOf(purgatory.size())); // get the stats from the event queue too @@ -660,19 +553,21 @@ public abstract class AbstractDiskCache<K, V> pe.setSpoolable( false ); // Remove from persistent store immediately - present = doRemove( key ); + present = removeWithEventLogging( key ); } } else { // Remove from persistent store immediately - present = doRemove( key ); + present = removeWithEventLogging( key ); } return present; } /** + * Remove all objects from the persistent store. + * * @throws IOException * @see org.apache.commons.jcs4.engine.behavior.ICache#removeAll */ @@ -686,7 +581,7 @@ public abstract class AbstractDiskCache<K, V> initPurgatory(); // Remove all from persistent store immediately - doRemoveAll(); + removeAllWithEventLogging(); } else { diff --git a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/disk/indexed/IndexedDisk.java b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/disk/indexed/IndexedDisk.java index 955d5bc5..4540cf9a 100644 --- a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/disk/indexed/IndexedDisk.java +++ b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/disk/indexed/IndexedDisk.java @@ -274,7 +274,6 @@ public class IndexedDisk implements AutoCloseable /** * Serializes the object and write it out to the given position. * <p> - * TODO: make this take a ded as well. * @param obj * @param pos * @throws IOException diff --git a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/disk/indexed/IndexedDiskCache.java b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/disk/indexed/IndexedDiskCache.java index 936f47a0..1336e83d 100644 --- a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/disk/indexed/IndexedDiskCache.java +++ b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/disk/indexed/IndexedDiskCache.java @@ -44,7 +44,7 @@ import org.apache.commons.jcs4.engine.behavior.IElementSerializer; import org.apache.commons.jcs4.engine.control.group.GroupAttrName; import org.apache.commons.jcs4.engine.control.group.GroupId; import org.apache.commons.jcs4.engine.logging.behavior.ICacheEvent; -import org.apache.commons.jcs4.engine.logging.behavior.ICacheEventLogger; +import org.apache.commons.jcs4.engine.logging.behavior.ICacheEventLogger.CacheEventType; import org.apache.commons.jcs4.engine.stats.Stats; import org.apache.commons.jcs4.engine.stats.behavior.IStats; import org.apache.commons.jcs4.log.Log; @@ -1221,7 +1221,8 @@ public class IndexedDiskCache<K, V> extends AbstractDiskCache<K, V> @Override public void processDispose() { - final ICacheEvent<String> cacheEvent = createICacheEvent(getCacheName(), "none", ICacheEventLogger.DISPOSE_EVENT); + final ICacheEvent<String> cacheEvent = createICacheEvent(getCacheName(), "none", + CacheEventType.DISPOSE_EVENT, this::getDiskLocation); try { final Thread t = new Thread(this::disposeInternal, "IndexedDiskCache-DisposalThread"); @@ -1387,7 +1388,8 @@ public class IndexedDiskCache<K, V> extends AbstractDiskCache<K, V> public void processRemoveAll() { final ICacheEvent<String> cacheEvent = - createICacheEvent(getCacheName(), "all", ICacheEventLogger.REMOVEALL_EVENT); + createICacheEvent(getCacheName(), "all", CacheEventType.REMOVEALL_EVENT, + this::getDiskLocation); try { reset(); diff --git a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/disk/jdbc/JDBCDiskCache.java b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/disk/jdbc/JDBCDiskCache.java index b4eee0c4..7f1cb6e6 100644 --- a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/disk/jdbc/JDBCDiskCache.java +++ b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/disk/jdbc/JDBCDiskCache.java @@ -39,7 +39,7 @@ import org.apache.commons.jcs4.auxiliary.disk.jdbc.dsfactory.DataSourceFactory; import org.apache.commons.jcs4.engine.behavior.ICache; import org.apache.commons.jcs4.engine.behavior.ICacheElement; import org.apache.commons.jcs4.engine.logging.behavior.ICacheEvent; -import org.apache.commons.jcs4.engine.logging.behavior.ICacheEventLogger; +import org.apache.commons.jcs4.engine.logging.behavior.ICacheEventLogger.CacheEventType; import org.apache.commons.jcs4.engine.stats.behavior.IStats; import org.apache.commons.jcs4.log.Log; @@ -206,8 +206,9 @@ public class JDBCDiskCache<K, V> setAlive(false); } - logApplicationEvent( getAuxiliaryCacheAttributes().getName(), "deleteExpired", - "Deleted expired elements. URL: " + getDiskLocation() ); + logApplicationEvent( getAuxiliaryCacheAttributes().getName(), + CacheEventType.DELETEEXPIRED_EVENT, + "Deleted expired elements. URL: " + getDiskLocation() ); } else { @@ -216,7 +217,7 @@ public class JDBCDiskCache<K, V> } catch ( final SQLException e ) { - logError( getAuxiliaryCacheAttributes().getName(), "deleteExpired", + logError( getAuxiliaryCacheAttributes().getName(), CacheEventType.DELETEEXPIRED_EVENT, e.getMessage() + " URL: " + getDiskLocation() ); log.error( "Problem removing expired elements from the table.", e ); reset(); @@ -511,7 +512,8 @@ public class JDBCDiskCache<K, V> @Override public void processDispose() { - final ICacheEvent<K> cacheEvent = createICacheEvent( getCacheName(), null, ICacheEventLogger.DISPOSE_EVENT ); + final ICacheEvent<K> cacheEvent = createICacheEvent( getCacheName(), null, + CacheEventType.DISPOSE_EVENT, this::getDiskLocation); try { diff --git a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/lateral/socket/tcp/LateralTCPCacheFactory.java b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/lateral/socket/tcp/LateralTCPCacheFactory.java index c83ad167..fd3ff536 100644 --- a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/lateral/socket/tcp/LateralTCPCacheFactory.java +++ b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/lateral/socket/tcp/LateralTCPCacheFactory.java @@ -257,7 +257,8 @@ public class LateralTCPCacheFactory { // One can be used for all regions final LateralTCPDiscoveryListener discoveryListener = - getDiscoveryListener(lac, cacheMgr, lcnwf.getCacheEventLogger(), + getDiscoveryListener(lac, cacheMgr, + lcnwf.getCacheEventLogger().orElse(null), lcnwf.getElementSerializer(), lcnwf.getKeyMatcher()); discoveryListener.addNoWaitFacade( lac.getCacheName(), lcnwf ); diff --git a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/lateral/socket/tcp/LateralTCPCacheNoWait.java b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/lateral/socket/tcp/LateralTCPCacheNoWait.java index e8f58788..d86e4b24 100644 --- a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/lateral/socket/tcp/LateralTCPCacheNoWait.java +++ b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/lateral/socket/tcp/LateralTCPCacheNoWait.java @@ -79,8 +79,9 @@ public class LateralTCPCacheNoWait<K, V> { this.cache = cache; this.identityKey = cache.getCacheName(); - setCacheEventLogger(cache.getCacheEventLogger()); + setCacheEventLogger(cache.getCacheEventLogger().orElse(null)); setElementSerializer(cache.getElementSerializer()); + setKeyMatcher(cache.getKeyMatcher()); log.debug( "Constructing LateralTCPCacheNoWait, LateralTCPCache = [{0}]", cache ); @@ -197,17 +198,6 @@ public class LateralTCPCacheNoWait<K, V> return cache.getCacheType(); } - /** - * this won't be called since we don't do ICache logging here. - * - * @return String - */ - @Override - public String getEventLoggingExtraInfo() - { - return "Lateral Cache No Wait"; - } - /** * The identifying key to this no wait * diff --git a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/lateral/socket/tcp/LateralTCPCacheNoWaitFacade.java b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/lateral/socket/tcp/LateralTCPCacheNoWaitFacade.java index 4de74cbe..7f00eac8 100644 --- a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/lateral/socket/tcp/LateralTCPCacheNoWaitFacade.java +++ b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/lateral/socket/tcp/LateralTCPCacheNoWaitFacade.java @@ -94,7 +94,7 @@ public class LateralTCPCacheNoWaitFacade<K, V> * @param noWait * @return true if it wasn't already contained */ - public synchronized boolean addNoWait( final LateralTCPCacheNoWait<K, V> noWait ) + public boolean addNoWait( final LateralTCPCacheNoWait<K, V> noWait ) { if ( noWait == null ) { @@ -201,17 +201,6 @@ public class LateralTCPCacheNoWaitFacade<K, V> return CacheType.LATERAL_CACHE; } - /** - * this won't be called since we don't do ICache logging here. - * - * @return String - */ - @Override - public String getEventLoggingExtraInfo() - { - return "Lateral Cache No Wait"; - } - /** * Return the keys in this cache. * @@ -381,7 +370,7 @@ public class LateralTCPCacheNoWaitFacade<K, V> * @param noWait * @return true if it was already in the array */ - public synchronized boolean removeNoWait( final LateralTCPCacheNoWait<K, V> noWait ) + public boolean removeNoWait( final LateralTCPCacheNoWait<K, V> noWait ) { if (noWait == null) { @@ -399,7 +388,7 @@ public class LateralTCPCacheNoWaitFacade<K, V> * @return true if it was already in the array * @since 3.1 */ - public synchronized boolean removeNoWait(final String tcpServer) + public boolean removeNoWait(final String tcpServer) { if (tcpServer == null) { diff --git a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/AbstractRemoteAuxiliaryCache.java b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/AbstractRemoteAuxiliaryCache.java index be8fb1a3..df3a6c72 100644 --- a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/AbstractRemoteAuxiliaryCache.java +++ b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/AbstractRemoteAuxiliaryCache.java @@ -42,7 +42,7 @@ import org.apache.commons.jcs4.engine.behavior.ICacheElement; import org.apache.commons.jcs4.engine.behavior.ICacheElementSerialized; import org.apache.commons.jcs4.engine.behavior.ICacheServiceNonLocal; import org.apache.commons.jcs4.engine.behavior.IZombie; -import org.apache.commons.jcs4.engine.logging.behavior.ICacheEventLogger; +import org.apache.commons.jcs4.engine.logging.behavior.ICacheEventLogger.CacheEventType; import org.apache.commons.jcs4.engine.stats.Stats; import org.apache.commons.jcs4.engine.stats.behavior.IStats; import org.apache.commons.jcs4.log.Log; @@ -137,8 +137,8 @@ public abstract class AbstractRemoteAuxiliaryCache<K, V> { try { - handleException( e, "Problem propagating events from Zombie Queue to new Remote Service.", - "fixCache" ); + handleException(e, "Problem propagating events from Zombie Queue to new Remote Service.", + CacheEventType.FIXCACHE_EVENT ); } catch ( final IOException e1 ) { @@ -359,10 +359,10 @@ public abstract class AbstractRemoteAuxiliaryCache<K, V> * * @param ex * @param msg - * @param eventName + * @param eventType * @throws IOException */ - protected abstract void handleException( Exception ex, String msg, String eventName ) + protected abstract void handleException( Exception ex, String msg, CacheEventType eventType ) throws IOException; /** @@ -385,7 +385,7 @@ public abstract class AbstractRemoteAuxiliaryCache<K, V> catch ( final IOException ex ) { log.error( "Couldn't dispose", ex ); - handleException( ex, "Failed to dispose [" + cacheName + "]", ICacheEventLogger.DISPOSE_EVENT ); + handleException( ex, "Failed to dispose [" + cacheName + "]", CacheEventType.DISPOSE_EVENT ); } } @@ -431,7 +431,7 @@ public abstract class AbstractRemoteAuxiliaryCache<K, V> } catch ( final IOException | ClassNotFoundException ex ) { - handleException( ex, "Failed to get [" + key + "] from [" + cacheName + "]", ICacheEventLogger.GET_EVENT ); + handleException( ex, "Failed to get [" + key + "] from [" + cacheName + "]", CacheEventType.GET_EVENT ); } return retVal; } @@ -481,7 +481,7 @@ public abstract class AbstractRemoteAuxiliaryCache<K, V> catch ( final IOException | ClassNotFoundException ex ) { handleException( ex, "Failed to getMatching [" + pattern + "] from [" + cacheName + "]", - ICacheEventLogger.GET_EVENT ); + CacheEventType.GET_EVENT ); } return results; } @@ -507,7 +507,7 @@ public abstract class AbstractRemoteAuxiliaryCache<K, V> } catch ( final IOException ex ) { - handleException( ex, "Failed to remove " + key + " from " + cacheName, ICacheEventLogger.REMOVE_EVENT ); + handleException( ex, "Failed to remove " + key + " from " + cacheName, CacheEventType.REMOVE_EVENT ); } return true; } @@ -532,7 +532,7 @@ public abstract class AbstractRemoteAuxiliaryCache<K, V> } catch ( final IOException ex ) { - handleException( ex, "Failed to remove all from " + cacheName, ICacheEventLogger.REMOVEALL_EVENT ); + handleException( ex, "Failed to remove all from " + cacheName, CacheEventType.REMOVEALL_EVENT ); } } } @@ -565,7 +565,7 @@ public abstract class AbstractRemoteAuxiliaryCache<K, V> { // event queue will wait and retry handleException( ex, "Failed to put [" + ce.key() + "] to " + ce.cacheName(), - ICacheEventLogger.UPDATE_EVENT ); + CacheEventType.UPDATE_EVENT ); } } else diff --git a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/AbstractRemoteCacheNoWaitFacade.java b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/AbstractRemoteCacheNoWaitFacade.java index 4ece672a..6691e101 100644 --- a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/AbstractRemoteCacheNoWaitFacade.java +++ b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/AbstractRemoteCacheNoWaitFacade.java @@ -136,17 +136,6 @@ public abstract class AbstractRemoteCacheNoWaitFacade<K, V> return CacheType.REMOTE_CACHE; } - /** - * This typically returns end point info. - * - * @return the name - */ - @Override - public String getEventLoggingExtraInfo() - { - return "Remote Cache No Wait Facade"; - } - /** * Return the keys in this cache. * diff --git a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/RemoteCache.java b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/RemoteCache.java index 344d9599..8a2b8406 100644 --- a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/RemoteCache.java +++ b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/RemoteCache.java @@ -26,6 +26,7 @@ import org.apache.commons.jcs4.auxiliary.remote.behavior.IRemoteCacheListener; import org.apache.commons.jcs4.auxiliary.remote.server.behavior.RemoteType; import org.apache.commons.jcs4.engine.ZombieCacheServiceNonLocal; import org.apache.commons.jcs4.engine.behavior.ICacheServiceNonLocal; +import org.apache.commons.jcs4.engine.logging.behavior.ICacheEventLogger.CacheEventType; import org.apache.commons.jcs4.engine.stats.Stats; import org.apache.commons.jcs4.engine.stats.behavior.IStats; import org.apache.commons.jcs4.log.Log; @@ -137,16 +138,16 @@ public class RemoteCache<K, V> * * @param ex * @param msg - * @param eventName + * @param eventType * @throws IOException */ @Override - protected void handleException( final Exception ex, final String msg, final String eventName ) + protected void handleException( final Exception ex, final String msg, final CacheEventType eventType ) throws IOException { final String message = "Disabling remote cache due to error: " + msg; - logError( cacheName, "", message ); + logError( cacheName, eventType, message ); log.error( message, ex ); // we should not switch if the existing is a zombie. diff --git a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/RemoteCacheManager.java b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/RemoteCacheManager.java index f76169e9..c82b48f1 100644 --- a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/RemoteCacheManager.java +++ b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/RemoteCacheManager.java @@ -36,6 +36,7 @@ import org.apache.commons.jcs4.engine.behavior.ICacheServiceNonLocal; import org.apache.commons.jcs4.engine.behavior.ICompositeCacheManager; import org.apache.commons.jcs4.engine.behavior.IElementSerializer; import org.apache.commons.jcs4.engine.logging.behavior.ICacheEventLogger; +import org.apache.commons.jcs4.engine.logging.behavior.ICacheEventLogger.CacheEventType; import org.apache.commons.jcs4.engine.match.behavior.IKeyMatcher; import org.apache.commons.jcs4.log.Log; @@ -194,7 +195,7 @@ public class RemoteCacheManager final String msg = "Remote connection to " + registry + " resumed."; if ( cacheEventLogger != null ) { - cacheEventLogger.logApplicationEvent( "RemoteCacheManager", "fix", msg ); + cacheEventLogger.logApplicationEvent( "RemoteCacheManager", CacheEventType.FIXCACHE_EVENT, msg ); } log.info( msg ); } diff --git a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/RemoteCacheNoWait.java b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/RemoteCacheNoWait.java index fee9b067..839b69a4 100644 --- a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/RemoteCacheNoWait.java +++ b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/RemoteCacheNoWait.java @@ -226,17 +226,6 @@ public class RemoteCacheNoWait<K, V> return CacheType.REMOTE_CACHE; } - /** - * this won't be called since we don't do ICache logging here. - * - * @return String - */ - @Override - public String getEventLoggingExtraInfo() - { - return "Remote Cache No Wait"; - } - /** * Return the keys in this cache. * diff --git a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/RemoteCacheNoWaitFacade.java b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/RemoteCacheNoWaitFacade.java index b6d737c0..2a567a26 100644 --- a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/RemoteCacheNoWaitFacade.java +++ b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/RemoteCacheNoWaitFacade.java @@ -31,6 +31,7 @@ import org.apache.commons.jcs4.engine.CacheStatus; import org.apache.commons.jcs4.engine.behavior.ICache; import org.apache.commons.jcs4.engine.behavior.IElementSerializer; import org.apache.commons.jcs4.engine.logging.behavior.ICacheEventLogger; +import org.apache.commons.jcs4.engine.logging.behavior.ICacheEventLogger.CacheEventType; import org.apache.commons.jcs4.log.Log; /** @@ -261,11 +262,8 @@ public class RemoteCacheNoWaitFacade<K, V> runner.setDaemon( true ); runner.start(); - if ( getCacheEventLogger() != null ) - { - getCacheEventLogger().logApplicationEvent( "RemoteCacheNoWaitFacade", "InitiatedFailover", - rcnw + " was in error." ); - } + logApplicationEvent("RemoteCacheNoWaitFacade", CacheEventType.INITIATEDFAILOVER_EVENT, + rcnw + " was in error." ); } else { @@ -383,12 +381,8 @@ public class RemoteCacheNoWaitFacade<K, V> + "failoverNoWait [" + failoverNoWait + "]"; log.info( message ); - if (getCacheEventLogger() != null) - { - getCacheEventLogger().logApplicationEvent( - "RemoteCacheFailoverRunner", "RestoredPrimary", - message ); - } + logApplicationEvent("RemoteCacheFailoverRunner", CacheEventType.RESTOREDPRIMARY_EVENT, + message); return true; } } diff --git a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/http/client/RemoteHttpCache.java b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/http/client/RemoteHttpCache.java index b0874be8..4180bef2 100644 --- a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/http/client/RemoteHttpCache.java +++ b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/http/client/RemoteHttpCache.java @@ -25,6 +25,7 @@ import org.apache.commons.jcs4.auxiliary.remote.AbstractRemoteAuxiliaryCache; import org.apache.commons.jcs4.auxiliary.remote.behavior.IRemoteCacheListener; import org.apache.commons.jcs4.engine.ZombieCacheServiceNonLocal; import org.apache.commons.jcs4.engine.behavior.ICacheServiceNonLocal; +import org.apache.commons.jcs4.engine.logging.behavior.ICacheEventLogger.CacheEventType; import org.apache.commons.jcs4.log.Log; /** @@ -84,18 +85,18 @@ public class RemoteHttpCache<K, V> * * @param ex * @param msg - * @param eventName + * @param eventType * @throws IOException */ @Override - protected void handleException( final Exception ex, final String msg, final String eventName ) + protected void handleException( final Exception ex, final String msg, final CacheEventType eventType ) throws IOException { // we should not switch if the existing is a zombie. if ( !( getRemoteCacheService() instanceof ZombieCacheServiceNonLocal)) { final String message = "Disabling remote cache due to error: " + msg; - logError( cacheName, "", message ); + logError( cacheName, eventType, message ); log.error( message, ex ); setRemoteCacheService( new ZombieCacheServiceNonLocal<>( getRemoteCacheAttributes().getZombieQueueMaxSize() ) ); diff --git a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/http/server/AbstractRemoteCacheService.java b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/http/server/AbstractRemoteCacheService.java index 5b1e3886..c68598d0 100644 --- a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/http/server/AbstractRemoteCacheService.java +++ b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/http/server/AbstractRemoteCacheService.java @@ -23,14 +23,16 @@ import java.io.IOException; import java.io.Serializable; import java.util.Map; import java.util.Set; +import java.util.concurrent.atomic.AtomicInteger; +import org.apache.commons.jcs4.auxiliary.AbstractCacheEventLogSupport; import org.apache.commons.jcs4.engine.behavior.ICacheElement; import org.apache.commons.jcs4.engine.behavior.ICacheServiceNonLocal; import org.apache.commons.jcs4.engine.behavior.ICompositeCacheManager; import org.apache.commons.jcs4.engine.control.CompositeCache; -import org.apache.commons.jcs4.engine.logging.CacheEvent; import org.apache.commons.jcs4.engine.logging.behavior.ICacheEvent; import org.apache.commons.jcs4.engine.logging.behavior.ICacheEventLogger; +import org.apache.commons.jcs4.engine.logging.behavior.ICacheEventLogger.CacheEventType; import org.apache.commons.jcs4.log.Log; /** @@ -38,6 +40,7 @@ import org.apache.commons.jcs4.log.Log; * much of the RMI server to use this as well. I'm starting with the HTTP service. */ public abstract class AbstractRemoteCacheService<K, V> + extends AbstractCacheEventLogSupport<K, V> implements ICacheServiceNonLocal<K, V> { /** The interval at which we will log updates. */ @@ -46,9 +49,6 @@ public abstract class AbstractRemoteCacheService<K, V> /** Log instance */ private static final Log log = Log.getLog( AbstractRemoteCacheService.class ); - /** An optional event logger */ - private transient ICacheEventLogger cacheEventLogger; - /** The central hub */ private ICompositeCacheManager cacheManager; @@ -56,7 +56,7 @@ public abstract class AbstractRemoteCacheService<K, V> private String eventLogSourceName = "AbstractRemoteCacheService"; /** Number of puts into the cache. */ - private int puts; + private AtomicInteger puts = new AtomicInteger(); /** * Creates the super with the needed items. @@ -67,7 +67,7 @@ public abstract class AbstractRemoteCacheService<K, V> public AbstractRemoteCacheService( final ICompositeCacheManager cacheManager, final ICacheEventLogger cacheEventLogger ) { this.cacheManager = cacheManager; - this.cacheEventLogger = cacheEventLogger; + setCacheEventLogger(cacheEventLogger); } /** @@ -75,18 +75,14 @@ public abstract class AbstractRemoteCacheService<K, V> * * @param item * @param requesterId - * @param eventName + * @param eventType * @return ICacheEvent */ - protected ICacheEvent<ICacheElement<K, V>> createICacheEvent( final ICacheElement<K, V> item, final long requesterId, final String eventName ) + protected ICacheEvent<ICacheElement<K, V>> createICacheEvent( final ICacheElement<K, V> item, final long requesterId, final CacheEventType eventType ) { - if ( cacheEventLogger == null ) - { - return new CacheEvent<>(); - } final String ipAddress = getExtraInfoForRequesterId( requesterId ); - return cacheEventLogger.createICacheEvent( getEventLogSourceName(), item.cacheName(), eventName, ipAddress, - item ); + return createICacheEvent( getEventLogSourceName(), item.cacheName(), + eventType, ipAddress, item ); } /** @@ -95,17 +91,14 @@ public abstract class AbstractRemoteCacheService<K, V> * @param cacheName * @param key * @param requesterId - * @param eventName + * @param eventType * @return ICacheEvent */ - protected <T> ICacheEvent<T> createICacheEvent( final String cacheName, final T key, final long requesterId, final String eventName ) + protected <T> ICacheEvent<T> createICacheEvent( final String cacheName, final T key, final long requesterId, final CacheEventType eventType ) { - if ( cacheEventLogger == null ) - { - return new CacheEvent<>(); - } final String ipAddress = getExtraInfoForRequesterId( requesterId ); - return cacheEventLogger.createICacheEvent( getEventLogSourceName(), cacheName, eventName, ipAddress, key ); + return createICacheEvent( getEventLogSourceName(), cacheName, + eventType, ipAddress, key ); } /** @@ -131,7 +124,8 @@ public abstract class AbstractRemoteCacheService<K, V> public void dispose( final String cacheName, final long requesterId ) throws IOException { - final ICacheEvent<String> cacheEvent = createICacheEvent( cacheName, "none", requesterId, ICacheEventLogger.DISPOSE_EVENT ); + final ICacheEvent<String> cacheEvent = createICacheEvent( cacheName, "none", requesterId, + CacheEventType.DISPOSE_EVENT ); try { processDispose( cacheName, requesterId ); @@ -176,7 +170,7 @@ public abstract class AbstractRemoteCacheService<K, V> throws IOException { ICacheElement<K, V> element = null; - final ICacheEvent<K> cacheEvent = createICacheEvent( cacheName, key, requesterId, ICacheEventLogger.GET_EVENT ); + final ICacheEvent<K> cacheEvent = createICacheEvent( cacheName, key, requesterId, CacheEventType.GET_EVENT ); try { element = processGet( cacheName, key, requesterId ); @@ -254,7 +248,7 @@ public abstract class AbstractRemoteCacheService<K, V> throws IOException { final ICacheEvent<String> cacheEvent = createICacheEvent( cacheName, pattern, requesterId, - ICacheEventLogger.GETMATCHING_EVENT ); + CacheEventType.GETMATCHING_EVENT ); try { return processGetMatching( cacheName, pattern, requesterId ); @@ -298,7 +292,7 @@ public abstract class AbstractRemoteCacheService<K, V> throws IOException { final ICacheEvent<Serializable> cacheEvent = createICacheEvent( cacheName, (Serializable) keys, requesterId, - ICacheEventLogger.GETMULTIPLE_EVENT ); + CacheEventType.GETMULTIPLE_EVENT ); try { return processGetMultiple( cacheName, keys, requesterId ); @@ -309,34 +303,6 @@ public abstract class AbstractRemoteCacheService<K, V> } } - /** - * Logs an event if an event logger is configured. - * - * @param source - * @param eventName - * @param optionalDetails - */ - protected void logApplicationEvent( final String source, final String eventName, final String optionalDetails ) - { - if ( cacheEventLogger != null ) - { - cacheEventLogger.logApplicationEvent( source, eventName, optionalDetails ); - } - } - - /** - * Logs an event if an event logger is configured. - * - * @param cacheEvent - */ - protected <T> void logICacheEvent( final ICacheEvent<T> cacheEvent ) - { - if ( cacheEventLogger != null ) - { - cacheEventLogger.logICacheEvent( cacheEvent ); - } - } - /** * Log some details. * @@ -346,11 +312,10 @@ public abstract class AbstractRemoteCacheService<K, V> { if ( log.isInfoEnabled() ) { - // not thread safe, but it doesn't have to be accurate - puts++; - if ( puts % logInterval == 0 ) + int p = puts.incrementAndGet(); + if ( p % logInterval == 0 ) { - log.info( "puts = {0}", puts ); + log.info( "puts = {0}", p ); } } @@ -477,7 +442,7 @@ public abstract class AbstractRemoteCacheService<K, V> public void remove( final String cacheName, final K key, final long requesterId ) throws IOException { - final ICacheEvent<K> cacheEvent = createICacheEvent( cacheName, key, requesterId, ICacheEventLogger.REMOVE_EVENT ); + final ICacheEvent<K> cacheEvent = createICacheEvent( cacheName, key, requesterId, CacheEventType.REMOVE_EVENT ); try { processRemove( cacheName, key, requesterId ); @@ -514,7 +479,7 @@ public abstract class AbstractRemoteCacheService<K, V> public void removeAll( final String cacheName, final long requesterId ) throws IOException { - final ICacheEvent<String> cacheEvent = createICacheEvent( cacheName, "all", requesterId, ICacheEventLogger.REMOVEALL_EVENT ); + final ICacheEvent<String> cacheEvent = createICacheEvent( cacheName, "all", requesterId, CacheEventType.REMOVEALL_EVENT ); try { processRemoveAll( cacheName, requesterId ); @@ -525,16 +490,6 @@ public abstract class AbstractRemoteCacheService<K, V> } } - /** - * Allows it to be injected. - * - * @param cacheEventLogger - */ - public void setCacheEventLogger( final ICacheEventLogger cacheEventLogger ) - { - this.cacheEventLogger = cacheEventLogger; - } - /** * @param cacheManager the cacheManager to set */ @@ -573,7 +528,7 @@ public abstract class AbstractRemoteCacheService<K, V> public void update( final ICacheElement<K, V> item, final long requesterId ) throws IOException { - final ICacheEvent<ICacheElement<K, V>> cacheEvent = createICacheEvent( item, requesterId, ICacheEventLogger.UPDATE_EVENT ); + final ICacheEvent<ICacheElement<K, V>> cacheEvent = createICacheEvent( item, requesterId, CacheEventType.UPDATE_EVENT ); try { logUpdateInfo( item ); diff --git a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/http/server/RemoteHttpCacheService.java b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/http/server/RemoteHttpCacheService.java index 639c62fb..ebb6fb2f 100644 --- a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/http/server/RemoteHttpCacheService.java +++ b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/http/server/RemoteHttpCacheService.java @@ -257,4 +257,13 @@ public class RemoteHttpCacheService<K, V> { //nothing. } + + /** + * @return the RemoteHttpCacheServerAttributes + */ + @Override + public RemoteHttpCacheServerAttributes getAuxiliaryCacheAttributes() + { + return remoteHttpCacheServerAttributes; + } } diff --git a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/server/RemoteCacheServer.java b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/server/RemoteCacheServer.java index 317aec9c..0266afa7 100644 --- a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/server/RemoteCacheServer.java +++ b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/server/RemoteCacheServer.java @@ -34,6 +34,7 @@ import java.util.Properties; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; +import java.util.concurrent.atomic.AtomicLongArray; import org.apache.commons.jcs4.access.exception.CacheException; import org.apache.commons.jcs4.auxiliary.remote.behavior.IRemoteCacheListener; @@ -50,6 +51,7 @@ import org.apache.commons.jcs4.engine.control.CompositeCacheManager; import org.apache.commons.jcs4.engine.logging.CacheEvent; import org.apache.commons.jcs4.engine.logging.behavior.ICacheEvent; import org.apache.commons.jcs4.engine.logging.behavior.ICacheEventLogger; +import org.apache.commons.jcs4.engine.logging.behavior.ICacheEventLogger.CacheEventType; import org.apache.commons.jcs4.engine.stats.behavior.ICacheStats; import org.apache.commons.jcs4.log.Log; import org.apache.commons.jcs4.utils.timing.ElapsedTimer; @@ -133,7 +135,7 @@ public class RemoteCacheServer<K, V> private final ConcurrentMap<Long, String> idIPMap = new ConcurrentHashMap<>(); /** Used to get the next listener id. */ - private final int[] listenerId = new int[1]; + private final AtomicLongArray listenerId = new AtomicLongArray(1); /** Configuration settings. */ // package protected for access by unit test code @@ -253,14 +255,16 @@ public class RemoteCacheServer<K, V> // in case it needs synchronization final String message = "Adding vm listener under new id = [" + listenerIdB + "], listenerAddress [" + listenerAddress + "]"; - logApplicationEvent( "RemoteCacheServer", "addCacheListener", message ); + logApplicationEvent( "RemoteCacheServer", + CacheEventType.ADDCACHELISTENER_EVENT, message ); log.info( message ); } else { final String message = "Adding listener under existing id = [" + id + "], listenerAddress [" + listenerAddress + "]"; - logApplicationEvent( "RemoteCacheServer", "addCacheListener", message ); + logApplicationEvent( "RemoteCacheServer", + CacheEventType.ADDCACHELISTENER_EVENT, message ); log.info( message ); // should confirm the host is the same as we have on // record, just in case a client has made a mistake. @@ -280,8 +284,8 @@ public class RemoteCacheServer<K, V> if ( cacheEventLogger != null ) { - cacheEventLogger.logError( "RemoteCacheServer", "addCacheListener", message + " - " - + ioe.getMessage() ); + cacheEventLogger.logError( "RemoteCacheServer", + CacheEventType.ADDCACHELISTENER_EVENT, message + " - " + ioe.getMessage() ); } } @@ -300,18 +304,18 @@ public class RemoteCacheServer<K, V> * * @param item * @param requesterId - * @param eventName + * @param eventType * @return ICacheEvent */ - private ICacheEvent<ICacheElement<K, V>> createICacheEvent( final ICacheElement<K, V> item, final long requesterId, final String eventName ) + private ICacheEvent<ICacheElement<K, V>> createICacheEvent( final ICacheElement<K, V> item, final long requesterId, final CacheEventType eventType) { if ( cacheEventLogger == null ) { return new CacheEvent<>(); } final String ipAddress = getExtraInfoForRequesterId( requesterId ); - return cacheEventLogger - .createICacheEvent( "RemoteCacheServer", item.cacheName(), eventName, ipAddress, item ); + return cacheEventLogger.createICacheEvent( "RemoteCacheServer", item.cacheName(), + eventType, ipAddress, item ); } /** @@ -320,17 +324,18 @@ public class RemoteCacheServer<K, V> * @param cacheName * @param key * @param requesterId - * @param eventName + * @param eventType * @return ICacheEvent */ - private <T> ICacheEvent<T> createICacheEvent( final String cacheName, final T key, final long requesterId, final String eventName ) + private <T> ICacheEvent<T> createICacheEvent( final String cacheName, final T key, final long requesterId, final CacheEventType eventType ) { if ( cacheEventLogger == null ) { return new CacheEvent<>(); } final String ipAddress = getExtraInfoForRequesterId( requesterId ); - return cacheEventLogger.createICacheEvent( "RemoteCacheServer", cacheName, eventName, ipAddress, key ); + return cacheEventLogger.createICacheEvent( "RemoteCacheServer", cacheName, eventType, + ipAddress, key ); } /** @@ -356,7 +361,8 @@ public class RemoteCacheServer<K, V> public void dispose( final String cacheName, final long requesterId ) throws IOException { - final ICacheEvent<String> cacheEvent = createICacheEvent( cacheName, "none", requesterId, ICacheEventLogger.DISPOSE_EVENT ); + final ICacheEvent<String> cacheEvent = createICacheEvent( cacheName, "none", + requesterId, CacheEventType.DISPOSE_EVENT ); try { processDispose( cacheName, requesterId ); @@ -401,7 +407,8 @@ public class RemoteCacheServer<K, V> throws IOException { ICacheElement<K, V> element = null; - final ICacheEvent<K> cacheEvent = createICacheEvent( cacheName, key, requesterId, ICacheEventLogger.GET_EVENT ); + final ICacheEvent<K> cacheEvent = createICacheEvent( cacheName, key, requesterId, + CacheEventType.GET_EVENT ); try { element = processGet( cacheName, key, requesterId ); @@ -570,8 +577,8 @@ public class RemoteCacheServer<K, V> public Map<K, ICacheElement<K, V>> getMatching( final String cacheName, final String pattern, final long requesterId ) throws IOException { - final ICacheEvent<String> cacheEvent = createICacheEvent( cacheName, pattern, requesterId, - ICacheEventLogger.GETMATCHING_EVENT ); + final ICacheEvent<String> cacheEvent = createICacheEvent( cacheName, pattern, + requesterId, CacheEventType.GETMATCHING_EVENT ); try { return processGetMatching( cacheName, pattern, requesterId ); @@ -653,8 +660,8 @@ public class RemoteCacheServer<K, V> public Map<K, ICacheElement<K, V>> getMultiple( final String cacheName, final Set<K> keys, final long requesterId ) throws IOException { - final ICacheEvent<Serializable> cacheEvent = createICacheEvent( cacheName, (Serializable) keys, requesterId, - ICacheEventLogger.GETMULTIPLE_EVENT ); + final ICacheEvent<Serializable> cacheEvent = createICacheEvent( cacheName, + (Serializable) keys, requesterId, CacheEventType.GETMULTIPLE_EVENT ); try { return processGetMultiple( cacheName, keys, requesterId ); @@ -786,14 +793,14 @@ public class RemoteCacheServer<K, V> * Logs an event if an event logger is configured. * * @param source - * @param eventName + * @param eventType * @param optionalDetails */ - protected void logApplicationEvent( final String source, final String eventName, final String optionalDetails ) + protected void logApplicationEvent( final String source, final CacheEventType eventType, final String optionalDetails ) { if ( cacheEventLogger != null ) { - cacheEventLogger.logApplicationEvent( source, eventName, optionalDetails ); + cacheEventLogger.logApplicationEvent( source, eventType, optionalDetails ); } } @@ -836,28 +843,14 @@ public class RemoteCacheServer<K, V> */ private long nextListenerId() { - long id = 0; - if ( listenerId[0] == Integer.MAX_VALUE ) + if (listenerId.compareAndSet(0, Long.MAX_VALUE, 0)) { - synchronized ( listenerId ) - { - id = listenerId[0]; - listenerId[0] = 0; - // TODO: record & check if the generated id is currently being - // used by a valid listener. Currently if the id wraps after - // Long.MAX_VALUE, - // we just assume it won't collide with an existing listener who - // is live. - } + return listenerId.get(0); } else { - synchronized ( listenerId ) - { - id = ++listenerId[0]; - } + return listenerId.incrementAndGet(0); } - return id; } /** @@ -956,8 +949,8 @@ public class RemoteCacheServer<K, V> if ( cacheEventLogger != null ) { - cacheEventLogger.logError( "RemoteCacheServer", ICacheEventLogger.GETMATCHING_EVENT, e.getMessage() - + cacheName + " pattern: " + pattern ); + cacheEventLogger.logError( "RemoteCacheServer", CacheEventType.GETMATCHING_EVENT, + e.getMessage() + cacheName + " pattern: " + pattern ); } } @@ -1182,8 +1175,8 @@ public class RemoteCacheServer<K, V> { if ( cacheEventLogger != null ) { - cacheEventLogger.logError( "RemoteCacheServer", ICacheEventLogger.UPDATE_EVENT, e.getMessage() - + " REGION: " + item.cacheName() + " ITEM: " + item ); + cacheEventLogger.logError( "RemoteCacheServer", CacheEventType.UPDATE_EVENT, + e.getMessage() + " REGION: " + item.cacheName() + " ITEM: " + item ); } log.error( "Trouble in Update. requesterId [{0}]", requesterId, e ); @@ -1258,7 +1251,8 @@ public class RemoteCacheServer<K, V> public void remove( final String cacheName, final K key, final long requesterId ) throws IOException { - final ICacheEvent<K> cacheEvent = createICacheEvent( cacheName, key, requesterId, ICacheEventLogger.REMOVE_EVENT ); + final ICacheEvent<K> cacheEvent = createICacheEvent( cacheName, key, requesterId, + CacheEventType.REMOVE_EVENT ); try { processRemove( cacheName, key, requesterId ); @@ -1295,7 +1289,8 @@ public class RemoteCacheServer<K, V> public void removeAll( final String cacheName, final long requesterId ) throws IOException { - final ICacheEvent<String> cacheEvent = createICacheEvent( cacheName, "all", requesterId, ICacheEventLogger.REMOVEALL_EVENT ); + final ICacheEvent<String> cacheEvent = createICacheEvent( cacheName, "all", requesterId, + CacheEventType.REMOVEALL_EVENT ); try { processRemoveAll( cacheName, requesterId ); @@ -1349,7 +1344,8 @@ public class RemoteCacheServer<K, V> public void removeCacheListener( final String cacheName, final long listenerId ) { final String message = "Removing listener for cache region = [" + cacheName + "] and listenerId [" + listenerId + "]"; - logApplicationEvent( "RemoteCacheServer", "removeCacheListener", message ); + logApplicationEvent( "RemoteCacheServer", CacheEventType.REMOVECACHELISTENER_EVENT, + message ); log.info( message ); final boolean isClusterListener = isRequestFromCluster( listenerId ); @@ -1429,7 +1425,7 @@ public class RemoteCacheServer<K, V> { for (final String cacheName : cacheListenersMap.keySet()) { - for (int i = 0; i <= listenerId[0]; i++) + for (long i = 0; i <= listenerId.get(0); i++) { removeCacheListener( cacheName, i ); } @@ -1477,7 +1473,8 @@ public class RemoteCacheServer<K, V> public void update( final ICacheElement<K, V> item, final long requesterId ) throws IOException { - final ICacheEvent<ICacheElement<K, V>> cacheEvent = createICacheEvent( item, requesterId, ICacheEventLogger.UPDATE_EVENT ); + final ICacheEvent<ICacheElement<K, V>> cacheEvent = createICacheEvent( item, + requesterId, CacheEventType.UPDATE_EVENT ); try { processUpdate( item, requesterId ); diff --git a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/server/RemoteCacheServerFactory.java b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/server/RemoteCacheServerFactory.java index 65dd896d..e68b1269 100644 --- a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/server/RemoteCacheServerFactory.java +++ b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/server/RemoteCacheServerFactory.java @@ -40,6 +40,7 @@ import org.apache.commons.jcs4.auxiliary.remote.RemoteUtils; import org.apache.commons.jcs4.auxiliary.remote.behavior.IRemoteCacheConstants; import org.apache.commons.jcs4.engine.behavior.ICacheServiceAdmin; import org.apache.commons.jcs4.engine.logging.behavior.ICacheEventLogger; +import org.apache.commons.jcs4.engine.logging.behavior.ICacheEventLogger.CacheEventType; import org.apache.commons.jcs4.log.Log; import org.apache.commons.jcs4.utils.config.OptionConverter; import org.apache.commons.jcs4.utils.config.PropertySetter; @@ -167,7 +168,8 @@ public class RemoteCacheServerFactory final String message = "RMI registry looks fine. Found [" + obj + "] in registry [" + namingURL + "]"; if ( cacheEventLogger != null ) { - cacheEventLogger.logApplicationEvent( "RegistryKeepAliveRunner", "Naming.lookup", message ); + cacheEventLogger.logApplicationEvent( "RegistryKeepAliveRunner", + CacheEventType.NAMINGLOOKUP_EVENT, message ); } log.debug( message ); } @@ -179,7 +181,8 @@ public class RemoteCacheServerFactory log.error( message, ex ); if ( cacheEventLogger != null ) { - cacheEventLogger.logError( "RegistryKeepAliveRunner", "Naming.lookup", message + ":" + ex.getMessage() ); + cacheEventLogger.logError( "RegistryKeepAliveRunner", + CacheEventType.NAMINGLOOKUP_EVENT, message + ":" + ex.getMessage() ); } registry = RemoteUtils.createRegistry(registryPort); @@ -188,12 +191,14 @@ public class RemoteCacheServerFactory { if (registry != null) { - cacheEventLogger.logApplicationEvent( "RegistryKeepAliveRunner", "createRegistry", + cacheEventLogger.logApplicationEvent( "RegistryKeepAliveRunner", + CacheEventType.CREATEREGISTRY_EVENT, "Successfully created registry [" + serviceName + "]." ); } else { - cacheEventLogger.logError( "RegistryKeepAliveRunner", "createRegistry", + cacheEventLogger.logError( "RegistryKeepAliveRunner", + CacheEventType.CREATEREGISTRY_EVENT, "Could not start registry [" + serviceName + "]." ); } } @@ -206,7 +211,8 @@ public class RemoteCacheServerFactory final String message = "Successfully rebound server to registry [" + serviceName + "]."; if ( cacheEventLogger != null ) { - cacheEventLogger.logApplicationEvent( "RegistryKeepAliveRunner", "registerServer", message ); + cacheEventLogger.logApplicationEvent( "RegistryKeepAliveRunner", + CacheEventType.REGISTERSERVER_EVENT, message ); } log.info( message ); } @@ -216,7 +222,8 @@ public class RemoteCacheServerFactory log.error( message, e ); if ( cacheEventLogger != null ) { - cacheEventLogger.logError( "RegistryKeepAliveRunner", "registerServer", message + ":" + cacheEventLogger.logError( "RegistryKeepAliveRunner", + CacheEventType.REGISTERSERVER_EVENT, message + ":" + e.getMessage() ); } } diff --git a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/logging/CacheEvent.java b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/logging/CacheEvent.java index ae66ca12..63156df4 100644 --- a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/logging/CacheEvent.java +++ b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/logging/CacheEvent.java @@ -22,130 +22,53 @@ package org.apache.commons.jcs4.engine.logging; import java.util.Date; import org.apache.commons.jcs4.engine.logging.behavior.ICacheEvent; +import org.apache.commons.jcs4.engine.logging.behavior.ICacheEventLogger.CacheEventType; /** It's returned from create and passed into log. */ -public class CacheEvent<K> - implements ICacheEvent<K> -{ - /** Don't change. */ - private static final long serialVersionUID = -5913139566421714330L; - - /** The time at which this object was created. */ - private final long createTime = System.currentTimeMillis(); - - /** The auxiliary or other source of the event. */ - private String source; - - /** The cache region */ - private String region; - - /** The event name: update, get, remove, etc. */ - private String eventName; - - /** Disk location, ip, etc. */ - private String optionalDetails; - - /** The key that was put or retrieved. */ - private K key; - - /** - * The time at which this object was created. - * - * @return the createTime - */ - public long getCreateTime() - { - return createTime; - } - - /** - * @return the eventName - */ - @Override - public String getEventName() - { - return eventName; - } - - /** - * @return the key - */ - @Override - public K getKey() - { - return key; - } - - /** - * @return the optionalDetails - */ - @Override - public String getOptionalDetails() - { - return optionalDetails; - } +public record CacheEvent<K>( + /** The time at which this object was created. */ + long createTime, - /** - * @return the region - */ - @Override - public String getRegion() - { - return region; - } + /** The auxiliary or other source of the event. */ + String source, - /** - * @return the source - */ - @Override - public String getSource() - { - return source; - } + /** The cache region */ + String region, - /** - * @param eventName the eventName to set - */ - @Override - public void setEventName( final String eventName ) - { - this.eventName = eventName; - } + /** The event type: update, get, remove, etc. */ + CacheEventType eventType, - /** - * @param key the key to set - */ - @Override - public void setKey( final K key ) - { - this.key = key; - } + /** Disk location, ip, etc. */ + String optionalDetails, - /** - * @param optionalDetails the optionalDetails to set - */ - @Override - public void setOptionalDetails( final String optionalDetails ) - { - this.optionalDetails = optionalDetails; - } + /** The key that was put or retrieved. */ + K key +) implements ICacheEvent<K> +{ + /** Don't change. */ + private static final long serialVersionUID = -5913139566421714330L; /** - * @param region the region to set + * Default Constructor */ - @Override - public void setRegion( final String region ) + public CacheEvent() { - this.region = region; + this(System.currentTimeMillis(), null, null, null, null, null); } /** - * @param source the source to set + * Constructor + * + * @param source + * @param region + * @param eventType + * @param optionalDetails + * @param key */ - @Override - public void setSource( final String source ) + public CacheEvent(final String source, final String region, CacheEventType eventType, + String optionalDetails, K key) { - this.source = source; + this(System.currentTimeMillis(), source, region, eventType, optionalDetails, key); } /** @@ -155,7 +78,8 @@ public class CacheEvent<K> public String toString() { final StringBuilder sb = new StringBuilder(); - sb.append("CacheEvent: ").append(eventName).append(" Created: ").append(new Date(createTime)); + sb.append("CacheEvent: ").append(eventType) + .append(" Created: ").append(new Date(createTime)); if (source != null) { sb.append(" Source: ").append(source); diff --git a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/logging/CacheEventLoggerDebugLogger.java b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/logging/CacheEventLoggerDebugLogger.java index 2dde83f4..2140a1d3 100644 --- a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/logging/CacheEventLoggerDebugLogger.java +++ b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/logging/CacheEventLoggerDebugLogger.java @@ -38,46 +38,24 @@ public class CacheEventLoggerDebugLogger /** * @param source - * @param region - * @param eventName + * @param eventType * @param optionalDetails - * @param key - * @return ICacheEvent */ @Override - public <T> ICacheEvent<T> createICacheEvent( final String source, final String region, final String eventName, - final String optionalDetails, final T key ) + public void logApplicationEvent( final String source, final CacheEventType eventType, final String optionalDetails ) { - final ICacheEvent<T> event = new CacheEvent<>(); - event.setSource( source ); - event.setRegion( region ); - event.setEventName( eventName ); - event.setOptionalDetails( optionalDetails ); - event.setKey( key ); - - return event; - } - - /** - * @param source - * @param eventName - * @param optionalDetails - */ - @Override - public void logApplicationEvent( final String source, final String eventName, final String optionalDetails ) - { - log.debug( "{0} | {1} | {2}", source, eventName, optionalDetails ); + log.debug( "{0} | {1} | {2}", source, eventType, optionalDetails ); } /** * @param source - * @param eventName + * @param eventType * @param errorMessage */ @Override - public void logError( final String source, final String eventName, final String errorMessage ) + public void logError( final String source, final CacheEventType eventType, final String errorMessage ) { - log.debug( "{0} | {1} | {2}", source, eventName, errorMessage ); + log.debug( "{0} | {1} | {2}", source, eventType, errorMessage ); } /** diff --git a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/logging/behavior/ICacheEvent.java b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/logging/behavior/ICacheEvent.java index 2148f6b4..b958f6e4 100644 --- a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/logging/behavior/ICacheEvent.java +++ b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/logging/behavior/ICacheEvent.java @@ -21,6 +21,8 @@ package org.apache.commons.jcs4.engine.logging.behavior; import java.io.Serializable; +import org.apache.commons.jcs4.engine.logging.behavior.ICacheEventLogger.CacheEventType; + /** Defines the common fields required by a cache event. */ public interface ICacheEvent<K> extends Serializable @@ -28,50 +30,25 @@ public interface ICacheEvent<K> /** * @return the eventName */ - String getEventName(); + CacheEventType eventType(); /** * @return the key */ - K getKey(); + K key(); /** * @return the optionalDetails */ - String getOptionalDetails(); + String optionalDetails(); /** * @return the region */ - String getRegion(); + String region(); /** * @return the source */ - String getSource(); - - /** - * @param eventName the eventName to set - */ - void setEventName( String eventName ); - - /** - * @param key the key to set - */ - void setKey( K key ); - - /** - * @param optionalDetails the optionalDetails to set - */ - void setOptionalDetails( String optionalDetails ); - - /** - * @param region the region to set - */ - void setRegion( String region ); - - /** - * @param source the source to set - */ - void setSource( String source ); + String source(); } diff --git a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/logging/behavior/ICacheEventLogger.java b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/logging/behavior/ICacheEventLogger.java index 303fe711..09731240 100644 --- a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/logging/behavior/ICacheEventLogger.java +++ b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/logging/behavior/ICacheEventLogger.java @@ -1,5 +1,7 @@ package org.apache.commons.jcs4.engine.logging.behavior; +import org.apache.commons.jcs4.engine.logging.CacheEvent; + /* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file @@ -28,65 +30,105 @@ package org.apache.commons.jcs4.engine.logging.behavior; */ public interface ICacheEventLogger { - // TODO: Use enum - /** ICache update */ - String UPDATE_EVENT = "update"; + public enum CacheEventType + { + /** ICache update */ + UPDATE_EVENT("update"), + + /** ICache get */ + GET_EVENT("get"), + + /** ICache getMultiple */ + GETMULTIPLE_EVENT("getMultiple"), + + /** ICache getMatching */ + GETMATCHING_EVENT("getMatching"), + + /** ICache remove */ + REMOVE_EVENT("remove"), + + /** ICache removeAll */ + REMOVEALL_EVENT("removeAll"), + + /** ICache dispose */ + DISPOSE_EVENT("dispose"), + + /** RemoteAuxiliaryCache fixCache */ + FIXCACHE_EVENT("fixCache"), + + /** JDBCDiskCache deleteExpired */ + DELETEEXPIRED_EVENT("deleteExpired"), + + /** RemoteCacheServer addCacheListener */ + ADDCACHELISTENER_EVENT("addCacheListener"), + + /** RemoteCacheServer removeCacheListener */ + REMOVECACHELISTENER_EVENT("removeCacheListener"), + + /** RemoteCacheNoWait InitiatedFailover */ + INITIATEDFAILOVER_EVENT("InitiatedFailover"), + + /** RemoteCacheNoWait RestoredPrimary */ + RESTOREDPRIMARY_EVENT("RestoredPrimary"), - /** ICache get */ - String GET_EVENT = "get"; + /** RemoteCacheServerFactory Naming.lookup */ + NAMINGLOOKUP_EVENT("Naming.lookup"), - /** ICache getMultiple */ - String GETMULTIPLE_EVENT = "getMultiple"; + /** RemoteCacheServerFactory createRegistry */ + CREATEREGISTRY_EVENT("createRegistry"), - /** ICache getMatching */ - String GETMATCHING_EVENT = "getMatching"; + /** RemoteCacheServerFactory registerServer */ + REGISTERSERVER_EVENT("registerServer"), - /** ICache remove */ - String REMOVE_EVENT = "remove"; + /** ICache enqueue. The time in the queue. */ + ENQUEUE_EVENT("enqueue"); - /** ICache removeAll */ - String REMOVEALL_EVENT = "removeAll"; + public final String label; - /** ICache dispose */ - String DISPOSE_EVENT = "dispose"; + private CacheEventType(String label) + { + this.label = label; + } + } - /** ICache enqueue. The time in the queue. */ - //String ENQUEUE_EVENT = "enqueue"; /** * Creates an event. * - * @param source e.g. RemoteCacheServer - * @param region the name of the region - * @param eventName e.g. update, get, put, remove - * @param optionalDetails any extra message - * @param key the cache key + * @param source e.g. RemoteCacheServer + * @param region the name of the region + * @param eventType e.g. update, get, put, remove + * @param optionalDetails any extra message + * @param key the cache key * @return ICacheEvent */ - <T> ICacheEvent<T> createICacheEvent( String source, String region, - String eventName, String optionalDetails, T key ); + default <T> ICacheEvent<T> createICacheEvent( String source, String region, + CacheEventType eventType, String optionalDetails, T key ) + { + return new CacheEvent<>(source, region, eventType, optionalDetails, key); + } /** * Logs an event. These are internal application events that do not correspond to ICache calls. * - * @param source e.g. RemoteCacheServer - * @param eventName e.g. update, get, put, remove - * @param optionalDetails any extra message + * @param source e.g. RemoteCacheServer + * @param eventType e.g. update, get, put, remove + * @param optionalDetails any extra message */ - void logApplicationEvent( String source, String eventName, String optionalDetails ); + default void logApplicationEvent( String source, CacheEventType eventType, String optionalDetails ) {} /** * Logs an error. * - * @param source e.g. RemoteCacheServer - * @param eventName e.g. update, get, put, remove - * @param errorMessage any error message + * @param source e.g. RemoteCacheServer + * @param eventType e.g. update, get, put, remove + * @param errorMessage any error message */ - void logError( String source, String eventName, String errorMessage ); + default void logError( String source, CacheEventType eventType, String errorMessage ) {} /** * Logs an event. * * @param event the event created in createICacheEvent */ - <T> void logICacheEvent( ICacheEvent<T> event ); + default <T> void logICacheEvent( ICacheEvent<T> event ) {} } diff --git a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/io/ObjectInputStreamClassLoaderAware.java b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/io/ObjectInputStreamClassLoaderAware.java index 00bef68d..6a9f37f3 100644 --- a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/io/ObjectInputStreamClassLoaderAware.java +++ b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/io/ObjectInputStreamClassLoaderAware.java @@ -57,6 +57,7 @@ public class ObjectInputStreamClassLoaderAware extends ObjectInputStream return Class.forName(desc.getName(), false, classLoader); } + @SuppressWarnings("deprecation") @Override protected Class<?> resolveProxyClass(final String[] interfaces) throws IOException, ClassNotFoundException { diff --git a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/AuxiliaryCacheConfiguratorUnitTest.java b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/AuxiliaryCacheConfiguratorUnitTest.java index d9f90c24..5914476f 100644 --- a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/AuxiliaryCacheConfiguratorUnitTest.java +++ b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/AuxiliaryCacheConfiguratorUnitTest.java @@ -28,7 +28,6 @@ import java.util.Properties; import org.apache.commons.jcs4.engine.behavior.IElementSerializer; import org.apache.commons.jcs4.engine.control.MockElementSerializer; -import org.apache.commons.jcs4.engine.logging.MockCacheEventLogger; import org.apache.commons.jcs4.utils.serialization.StandardSerializer; import org.junit.jupiter.api.Test; diff --git a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/MockAuxiliaryCache.java b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/MockAuxiliaryCache.java index aaf9602d..42f188c9 100644 --- a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/MockAuxiliaryCache.java +++ b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/MockAuxiliaryCache.java @@ -94,13 +94,6 @@ public class MockAuxiliaryCache<K, V> return cacheType; } - /** @return null */ - @Override - public String getEventLoggingExtraInfo() - { - return null; - } - /** * Return the keys in this cache. * diff --git a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/MockCacheEventLogger.java b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/MockCacheEventLogger.java index ce56c3a8..75709f37 100644 --- a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/MockCacheEventLogger.java +++ b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/MockCacheEventLogger.java @@ -48,40 +48,43 @@ public class MockCacheEventLogger /** List of messages */ public List<String> errorMessages = new ArrayList<>(); + /** for configurator test */ + private String testProperty; + /** * @param source * @param region - * @param eventName + * @param eventType * @param optionalDetails * @param key * @return ICacheEvent */ @Override public <T> ICacheEvent<T> createICacheEvent( final String source, final String region, - final String eventName, final String optionalDetails, final T key ) + final CacheEventType eventType, final String optionalDetails, final T key ) { startICacheEventCalls++; - return new CacheEvent<>(); + return new CacheEvent<>(source, region, eventType, optionalDetails, key); } /** * @param source - * @param eventName + * @param eventType * @param optionalDetails */ @Override - public void logApplicationEvent( final String source, final String eventName, final String optionalDetails ) + public void logApplicationEvent( final String source, final CacheEventType eventType, final String optionalDetails ) { applicationEventCalls++; } /** * @param source - * @param eventName + * @param eventType * @param errorMessage */ @Override - public void logError( final String source, final String eventName, final String errorMessage ) + public void logError( final String source, final CacheEventType eventType, final String errorMessage ) { errorEventCalls++; errorMessages.add( errorMessage ); @@ -95,4 +98,20 @@ public class MockCacheEventLogger { endICacheEventCalls++; } + + /** + * @return the testProperty + */ + public String getTestProperty() + { + return testProperty; + } + + /** + * @param testProperty the testProperty to set + */ + public void setTestProperty(String testProperty) + { + this.testProperty = testProperty; + } } diff --git a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/lateral/socket/tcp/LateralTCPDiscoveryListenerUnitTest.java b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/lateral/socket/tcp/LateralTCPDiscoveryListenerUnitTest.java index 7f779916..da1cb77a 100644 --- a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/lateral/socket/tcp/LateralTCPDiscoveryListenerUnitTest.java +++ b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/lateral/socket/tcp/LateralTCPDiscoveryListenerUnitTest.java @@ -25,11 +25,11 @@ import static org.junit.jupiter.api.Assertions.assertTrue; import java.util.ArrayList; import java.util.List; +import org.apache.commons.jcs4.auxiliary.MockCacheEventLogger; import org.apache.commons.jcs4.engine.ZombieCacheServiceNonLocal; import org.apache.commons.jcs4.engine.behavior.IElementSerializer; import org.apache.commons.jcs4.engine.control.CompositeCacheManager; import org.apache.commons.jcs4.engine.control.MockKeyMatcher; -import org.apache.commons.jcs4.engine.logging.MockCacheEventLogger; import org.apache.commons.jcs4.engine.match.behavior.IKeyMatcher; import org.apache.commons.jcs4.utils.discovery.DiscoveredService; import org.apache.commons.jcs4.utils.serialization.StandardSerializer; diff --git a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/remote/MockRemoteCacheClient.java b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/remote/MockRemoteCacheClient.java index 5d2d7925..0f93e219 100644 --- a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/remote/MockRemoteCacheClient.java +++ b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/remote/MockRemoteCacheClient.java @@ -125,17 +125,6 @@ public class MockRemoteCacheClient<K, V> return CacheType.REMOTE_CACHE; } - /** - * Nothing important - * - * @return null - */ - @Override - public String getEventLoggingExtraInfo() - { - return null; - } - /** * @return null */ diff --git a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/engine/control/CompositeCacheConfiguratorUnitTest.java b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/engine/control/CompositeCacheConfiguratorUnitTest.java index 07db90d3..0a2e71a9 100644 --- a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/engine/control/CompositeCacheConfiguratorUnitTest.java +++ b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/engine/control/CompositeCacheConfiguratorUnitTest.java @@ -29,7 +29,7 @@ import org.apache.commons.jcs4.auxiliary.AuxiliaryCacheConfigurator; import org.apache.commons.jcs4.auxiliary.MockAuxiliaryCache; import org.apache.commons.jcs4.auxiliary.MockAuxiliaryCacheAttributes; import org.apache.commons.jcs4.auxiliary.MockAuxiliaryCacheFactory; -import org.apache.commons.jcs4.engine.logging.MockCacheEventLogger; +import org.apache.commons.jcs4.auxiliary.MockCacheEventLogger; import org.junit.jupiter.api.Test; /** Tests for the configurator. */ @@ -71,8 +71,8 @@ class CompositeCacheConfiguratorUnitTest assertEquals(MockAuxiliaryCache.class, result.getClass(), "Should have MockAuxiliaryCache."); assertNotNull( manager.getRegisteredAuxiliaryFactory(auxName), "Should have a factory." ); assertEquals(MockAuxiliaryCacheFactory.class, manager.getRegisteredAuxiliaryFactory(auxName).getClass(), "Should have MockAuxiliaryCacheFactory."); - assertNotNull( result.getCacheEventLogger(), "Should have an event logger." ); - assertEquals(MockCacheEventLogger.class, result.getCacheEventLogger().getClass(), "Should have a MockCacheEventLogger."); + assertNotNull( result.getCacheEventLogger().get(), "Should have an event logger." ); + assertEquals(MockCacheEventLogger.class, result.getCacheEventLogger().get().getClass(), "Should have a MockCacheEventLogger."); assertNotNull( result.getKeyMatcher(), "Should have a key matcher." ); assertEquals(MockKeyMatcher.class, result.getKeyMatcher().getClass(), "Should have a MockKeyMatcher."); } diff --git a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/engine/control/CompositeCacheDiskUsageUnitTest.java b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/engine/control/CompositeCacheDiskUsageUnitTest.java index 37f6eb6e..e0e1d285 100644 --- a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/engine/control/CompositeCacheDiskUsageUnitTest.java +++ b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/engine/control/CompositeCacheDiskUsageUnitTest.java @@ -116,13 +116,6 @@ class CompositeCacheDiskUsageUnitTest return cacheType; } - /** @return null */ - @Override - public String getEventLoggingExtraInfo() - { - return null; - } - /** * @return null * @throws IOException diff --git a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/engine/logging/CacheEventLoggerDebugLoggerUnitTest.java b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/engine/logging/CacheEventLoggerDebugLoggerUnitTest.java index 9d832ce9..aa68f956 100644 --- a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/engine/logging/CacheEventLoggerDebugLoggerUnitTest.java +++ b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/engine/logging/CacheEventLoggerDebugLoggerUnitTest.java @@ -25,6 +25,7 @@ import java.io.StringWriter; import org.apache.commons.jcs4.TestLogConfigurationUtil; import org.apache.commons.jcs4.engine.logging.behavior.ICacheEvent; +import org.apache.commons.jcs4.engine.logging.behavior.ICacheEventLogger.CacheEventType; import org.junit.jupiter.api.Test; /** Tests for the debug implementation */ @@ -39,7 +40,7 @@ class CacheEventLoggerDebugLoggerUnitTest final String logCategoryName = "testLogApplicationEvent_normal"; final String source = "mySource"; - final String eventName = "MyEventName"; + final CacheEventType eventType = CacheEventType.ENQUEUE_EVENT; final String optionalDetails = "SomeExtraData"; final StringWriter stringWriter = new StringWriter(); @@ -49,12 +50,12 @@ class CacheEventLoggerDebugLoggerUnitTest logger.setLogCategoryName( logCategoryName ); // DO WORK - logger.logApplicationEvent( source, eventName, optionalDetails ); + logger.logApplicationEvent( source, eventType, optionalDetails ); // VERIFY final String result = stringWriter.toString(); assertTrue( result.indexOf( source ) != -1, "An event with the source should have been logged:" + result ); - assertTrue( result.indexOf( eventName ) != -1, + assertTrue( result.indexOf( eventType.toString() ) != -1, "An event with the event name should have been logged:" + result ); assertTrue( result.indexOf( optionalDetails ) != -1, "An event with the optionalDetails should have been logged:" + result ); @@ -68,7 +69,7 @@ class CacheEventLoggerDebugLoggerUnitTest final String logCategoryName = "testLogApplicationEvent_normal"; final String source = "mySource"; - final String eventName = "MyEventName"; + final CacheEventType eventType = CacheEventType.ENQUEUE_EVENT; final String errorMessage = "SomeExtraData"; final StringWriter stringWriter = new StringWriter(); @@ -78,12 +79,12 @@ class CacheEventLoggerDebugLoggerUnitTest logger.setLogCategoryName( logCategoryName ); // DO WORK - logger.logError( source, eventName, errorMessage ); + logger.logError( source, eventType, errorMessage ); // VERIFY final String result = stringWriter.toString(); assertTrue( result.indexOf( source ) != -1, "An event with the source should have been logged:" + result ); - assertTrue( result.indexOf( eventName ) != -1, + assertTrue( result.indexOf( eventType.toString() ) != -1, "An event with the event name should have been logged:" + result ); assertTrue( result.indexOf( errorMessage ) != -1, "An event with the errorMessage should have been logged:" + result ); @@ -98,7 +99,7 @@ class CacheEventLoggerDebugLoggerUnitTest final String source = "mySource"; final String region = "my region"; - final String eventName = "MyEventName"; + final CacheEventType eventType = CacheEventType.ENQUEUE_EVENT; final String optionalDetails = "SomeExtraData"; final String key = "my key"; @@ -108,7 +109,7 @@ class CacheEventLoggerDebugLoggerUnitTest final CacheEventLoggerDebugLogger logger = new CacheEventLoggerDebugLogger(); logger.setLogCategoryName( logCategoryName ); - final ICacheEvent<String> event = logger.createICacheEvent( source, region, eventName, optionalDetails, key ); + final ICacheEvent<String> event = logger.createICacheEvent( source, region, eventType, optionalDetails, key ); // DO WORK logger.logICacheEvent( event ); @@ -117,8 +118,8 @@ class CacheEventLoggerDebugLoggerUnitTest final String result = stringWriter.toString(); assertTrue( result.indexOf( source ) != -1, "An event with the source should have been logged:" + result ); assertTrue( result.indexOf( region ) != -1, "An event with the region should have been logged:" + result ); - assertTrue( result.indexOf( eventName ) != -1, - "An event with the event name should have been logged:" + result ); + assertTrue( result.indexOf( eventType.toString() ) != -1, + "An event with the event type should have been logged:" + result ); assertTrue( result.indexOf( optionalDetails ) != -1, "An event with the optionalDetails should have been logged:" + result ); assertTrue( result.indexOf( key ) != -1, "An event with the key should have been logged:" + result ); diff --git a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/engine/logging/MockCacheEventLogger.java b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/engine/logging/MockCacheEventLogger.java deleted file mode 100644 index 33840a24..00000000 --- a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/engine/logging/MockCacheEventLogger.java +++ /dev/null @@ -1,95 +0,0 @@ -package org.apache.commons.jcs4.engine.logging; - -/* - * 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 - * - * https://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. - */ - -import org.apache.commons.jcs4.engine.logging.behavior.ICacheEvent; -import org.apache.commons.jcs4.engine.logging.behavior.ICacheEventLogger; - -/** - * For testing the configurator. - */ -public class MockCacheEventLogger - implements ICacheEventLogger -{ - /** Test property */ - private String testProperty; - - /** - * @param source - * @param region - * @param eventName - * @param optionalDetails - * @param key - * @return ICacheEvent - */ - @Override - public <T> ICacheEvent<T> createICacheEvent( final String source, final String region, final String eventName, final String optionalDetails, - final T key ) - { - return new CacheEvent<>(); - } - - /** - * @return testProperty - */ - public String getTestProperty() - { - return testProperty; - } - - /** - * @param source - * @param eventName - * @param optionalDetails - */ - @Override - public void logApplicationEvent( final String source, final String eventName, final String optionalDetails ) - { - // TODO Auto-generated method stub - } - - /** - * @param source - * @param eventName - * @param errorMessage - */ - @Override - public void logError( final String source, final String eventName, final String errorMessage ) - { - // TODO Auto-generated method stub - } - - /** - * @param event - */ - @Override - public <T> void logICacheEvent( final ICacheEvent<T> event ) - { - // TODO Auto-generated method stub - } - - /** - * @param testProperty - */ - public void setTestProperty( final String testProperty ) - { - this.testProperty = testProperty; - } -}
