You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by tv...@apache.org on 2021/12/23 14:10:02 UTC

[commons-jcs] branch master updated: Handle PMD and Spotbugs findings

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


The following commit(s) were added to refs/heads/master by this push:
     new e95cb2b  Handle PMD and Spotbugs findings
e95cb2b is described below

commit e95cb2baafdde62c5eca6d407d877a247de6ff19
Author: Thomas Vandahl <tv...@apache.org>
AuthorDate: Thu Dec 23 15:09:58 2021 +0100

    Handle PMD and Spotbugs findings
---
 .../jcs3/auxiliary/disk/PurgatoryElement.java      |   7 +-
 .../auxiliary/disk/block/BlockDiskKeyStore.java    |   4 +-
 .../auxiliary/disk/jdbc/mysql/MySQLDiskCache.java  |  12 ++-
 .../disk/jdbc/mysql/util/ScheduleParser.java       |  11 +-
 .../auxiliary/lateral/LateralCacheMonitor.java     |   5 +-
 .../lateral/socket/tcp/LateralTCPListener.java     |   6 +-
 .../remote/http/server/RemoteHttpCacheServlet.java |   8 +-
 .../auxiliary/remote/server/RemoteCacheServer.java |   2 -
 .../apache/commons/jcs3/engine/CacheElement.java   |   4 +-
 .../jcs3/engine/control/CompositeCache.java        |   3 +-
 .../engine/control/CompositeCacheConfigurator.java |  20 +---
 .../jcs3/engine/control/CompositeCacheManager.java | 119 ++++++++++-----------
 .../util/SoftReferenceElementDescriptor.java       |   2 +-
 .../block/BlockDiskCacheConcurrentUnitTest.java    |  24 ++---
 .../commons/jcs3/jcache/JCSCachingManager.java     |  15 +--
 .../commons/jcs3/jcache/cdi/CDIJCacheHelper.java   |   4 +-
 16 files changed, 118 insertions(+), 128 deletions(-)

diff --git a/commons-jcs-core/src/main/java/org/apache/commons/jcs3/auxiliary/disk/PurgatoryElement.java b/commons-jcs-core/src/main/java/org/apache/commons/jcs3/auxiliary/disk/PurgatoryElement.java
index 3f14c13..593356e 100644
--- a/commons-jcs-core/src/main/java/org/apache/commons/jcs3/auxiliary/disk/PurgatoryElement.java
+++ b/commons-jcs-core/src/main/java/org/apache/commons/jcs3/auxiliary/disk/PurgatoryElement.java
@@ -30,7 +30,8 @@ import org.apache.commons.jcs3.engine.behavior.IElementAttributes;
  * been written to disk.
  */
 public class PurgatoryElement<K, V>
-    extends CacheElement<K, V>
+    extends CacheElement<K, V> // Remove this superclass in next major release
+//    implements ICacheElement<K, V>
 {
     /** Don't change */
     private static final long serialVersionUID = -8152034342684135628L;
@@ -48,9 +49,7 @@ public class PurgatoryElement<K, V>
      */
     public PurgatoryElement( final ICacheElement<K, V> cacheElement )
     {
-        super(cacheElement.getCacheName(),
-                cacheElement.getKey(), cacheElement.getVal(),
-                cacheElement.getElementAttributes());
+        super(cacheElement.getCacheName(), cacheElement.getKey(), cacheElement.getVal());
         this.cacheElement = cacheElement;
     }
 
diff --git a/commons-jcs-core/src/main/java/org/apache/commons/jcs3/auxiliary/disk/block/BlockDiskKeyStore.java b/commons-jcs-core/src/main/java/org/apache/commons/jcs3/auxiliary/disk/block/BlockDiskKeyStore.java
index 5379835..75f33ac 100644
--- a/commons-jcs-core/src/main/java/org/apache/commons/jcs3/auxiliary/disk/block/BlockDiskKeyStore.java
+++ b/commons-jcs-core/src/main/java/org/apache/commons/jcs3/auxiliary/disk/block/BlockDiskKeyStore.java
@@ -436,8 +436,8 @@ public class BlockDiskKeyStore<K>
 
             if (fileSignature != KEY_FILE_SIGNATURE)
             {
-                try (final InputStream fis = Files.newInputStream(keyFile.toPath());
-                     final ObjectInputStream ois = new ObjectInputStreamClassLoaderAware(fis, null))
+                try (InputStream fis = Files.newInputStream(keyFile.toPath());
+                     ObjectInputStream ois = new ObjectInputStreamClassLoaderAware(fis, null))
                 {
                     while (true)
                     {
diff --git a/commons-jcs-core/src/main/java/org/apache/commons/jcs3/auxiliary/disk/jdbc/mysql/MySQLDiskCache.java b/commons-jcs-core/src/main/java/org/apache/commons/jcs3/auxiliary/disk/jdbc/mysql/MySQLDiskCache.java
index 8934f05..d1ad058 100644
--- a/commons-jcs-core/src/main/java/org/apache/commons/jcs3/auxiliary/disk/jdbc/mysql/MySQLDiskCache.java
+++ b/commons-jcs-core/src/main/java/org/apache/commons/jcs3/auxiliary/disk/jdbc/mysql/MySQLDiskCache.java
@@ -75,7 +75,8 @@ public class MySQLDiskCache<K, V>
     @Override
     protected ICacheElement<K, V> processGet( final K key )
     {
-        if ( (this.getTableState().getState() == TableState.OPTIMIZATION_RUNNING) && this.mySQLDiskCacheAttributes.isBalkDuringOptimization() )
+        if (this.getTableState().getState() == TableState.OPTIMIZATION_RUNNING &&
+            this.mySQLDiskCacheAttributes.isBalkDuringOptimization())
         {
             return null;
         }
@@ -92,7 +93,8 @@ public class MySQLDiskCache<K, V>
     @Override
     protected Map<K, ICacheElement<K, V>> processGetMatching( final String pattern )
     {
-        if ( (this.getTableState().getState() == TableState.OPTIMIZATION_RUNNING) && this.mySQLDiskCacheAttributes.isBalkDuringOptimization() )
+        if (this.getTableState().getState() == TableState.OPTIMIZATION_RUNNING &&
+            this.mySQLDiskCacheAttributes.isBalkDuringOptimization())
         {
             return null;
         }
@@ -123,7 +125,8 @@ public class MySQLDiskCache<K, V>
     @Override
     protected void processUpdate( final ICacheElement<K, V> element )
     {
-        if ( (this.getTableState().getState() == TableState.OPTIMIZATION_RUNNING) && this.mySQLDiskCacheAttributes.isBalkDuringOptimization() )
+        if (this.getTableState().getState() == TableState.OPTIMIZATION_RUNNING &&
+            this.mySQLDiskCacheAttributes.isBalkDuringOptimization())
         {
             return;
         }
@@ -142,7 +145,8 @@ public class MySQLDiskCache<K, V>
     @Override
     protected int deleteExpired()
     {
-        if ( (this.getTableState().getState() == TableState.OPTIMIZATION_RUNNING) && this.mySQLDiskCacheAttributes.isBalkDuringOptimization() )
+        if (this.getTableState().getState() == TableState.OPTIMIZATION_RUNNING &&
+            this.mySQLDiskCacheAttributes.isBalkDuringOptimization())
         {
             return -1;
         }
diff --git a/commons-jcs-core/src/main/java/org/apache/commons/jcs3/auxiliary/disk/jdbc/mysql/util/ScheduleParser.java b/commons-jcs-core/src/main/java/org/apache/commons/jcs3/auxiliary/disk/jdbc/mysql/util/ScheduleParser.java
index e2a489e..2819cf1 100644
--- a/commons-jcs-core/src/main/java/org/apache/commons/jcs3/auxiliary/disk/jdbc/mysql/util/ScheduleParser.java
+++ b/commons-jcs-core/src/main/java/org/apache/commons/jcs3/auxiliary/disk/jdbc/mysql/util/ScheduleParser.java
@@ -23,7 +23,6 @@ import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.Calendar;
 import java.util.Date;
-import java.util.StringTokenizer;
 
 /**
  * Parses the very simple schedule format.
@@ -48,14 +47,12 @@ public class ScheduleParser
             throw new ParseException( "Cannot create schedules for a null String.", 0 );
         }
 
-        final StringTokenizer toker = new StringTokenizer( schedule, "," );
-        final Date[] dates = new Date[toker.countTokens()];
+        final String timeStrings[] = schedule.split("\\s*,\\s*");
+        final Date[] dates = new Date[timeStrings.length];
         int cnt = 0;
-        while ( toker.hasMoreTokens() )
+        for (String time : timeStrings)
         {
-            final String time = toker.nextToken();
-            dates[cnt] = getDateForSchedule( time );
-            cnt++;
+            dates[cnt++] = getDateForSchedule(time);
         }
         return dates;
     }
diff --git a/commons-jcs-core/src/main/java/org/apache/commons/jcs3/auxiliary/lateral/LateralCacheMonitor.java b/commons-jcs-core/src/main/java/org/apache/commons/jcs3/auxiliary/lateral/LateralCacheMonitor.java
index a0f9c7c..6f7274a 100644
--- a/commons-jcs-core/src/main/java/org/apache/commons/jcs3/auxiliary/lateral/LateralCacheMonitor.java
+++ b/commons-jcs-core/src/main/java/org/apache/commons/jcs3/auxiliary/lateral/LateralCacheMonitor.java
@@ -51,10 +51,13 @@ public class LateralCacheMonitor extends AbstractAuxiliaryCacheMonitor
      * Allows close classes, ie testers to set the idle period to something testable.
      * <p>
      * @param idlePeriod
+     * 
+     * @deprecated Use setIdlePeriod()
      */
+    @Deprecated
     protected static void forceShortIdlePeriod( final long idlePeriod )
     {
-        LateralCacheMonitor.idlePeriod = idlePeriod;
+        LateralCacheMonitor.setIdlePeriod(idlePeriod);
     }
 
     /**
diff --git a/commons-jcs-core/src/main/java/org/apache/commons/jcs3/auxiliary/lateral/socket/tcp/LateralTCPListener.java b/commons-jcs-core/src/main/java/org/apache/commons/jcs3/auxiliary/lateral/socket/tcp/LateralTCPListener.java
index fc92109..daefb18 100644
--- a/commons-jcs-core/src/main/java/org/apache/commons/jcs3/auxiliary/lateral/socket/tcp/LateralTCPListener.java
+++ b/commons-jcs-core/src/main/java/org/apache/commons/jcs3/auxiliary/lateral/socket/tcp/LateralTCPListener.java
@@ -475,7 +475,7 @@ public class LateralTCPListener<K, V>
      */
     private void runListener(final ServerSocketChannel serverSocket)
     {
-        try (final Selector selector = Selector.open())
+        try (Selector selector = Selector.open())
         {
             serverSocket.register(selector, SelectionKey.OP_ACCEPT);
             log.debug("Waiting for clients to connect");
@@ -703,8 +703,8 @@ public class LateralTCPListener<K, V>
                 // if a hashcode was given and filtering is on
                 // check to see if they are the same
                 // if so, then don't remove, otherwise issue a remove
-                if ( (led.getValHashCode() != -1) &&
-                        getTcpLateralCacheAttributes().isFilterRemoveByHashCode() )
+                if (led.getValHashCode() != -1 &&
+                    getTcpLateralCacheAttributes().isFilterRemoveByHashCode())
                 {
                     final ICacheElement<K, V> test = getCache( cacheName ).localGet( key );
                     if ( test != null )
diff --git a/commons-jcs-core/src/main/java/org/apache/commons/jcs3/auxiliary/remote/http/server/RemoteHttpCacheServlet.java b/commons-jcs-core/src/main/java/org/apache/commons/jcs3/auxiliary/remote/http/server/RemoteHttpCacheServlet.java
index 0125cf1..f80083e 100644
--- a/commons-jcs-core/src/main/java/org/apache/commons/jcs3/auxiliary/remote/http/server/RemoteHttpCacheServlet.java
+++ b/commons-jcs-core/src/main/java/org/apache/commons/jcs3/auxiliary/remote/http/server/RemoteHttpCacheServlet.java
@@ -69,13 +69,13 @@ public class RemoteHttpCacheServlet
     private static ICacheServiceNonLocal<Serializable, Serializable> remoteCacheService;
 
     /** This needs to be standard, since the other side is standard */
-    private final StandardSerializer serializer = new StandardSerializer();
+    private static final StandardSerializer serializer = new StandardSerializer();
 
     /** Number of service calls. */
     private int serviceCalls;
 
     /** The interval at which we will log the count. */
-    private final int logInterval = 100;
+    private static final int logInterval = 100;
 
     /**
      * Initializes the cache.
@@ -134,7 +134,7 @@ public class RemoteHttpCacheServlet
     {
         RemoteCacheRequest<Serializable, Serializable> remoteRequest = null;
 
-        try (final InputStream inputStream = request.getInputStream())
+        try (InputStream inputStream = request.getInputStream())
         {
             log.debug( "After getting input stream and before reading it" );
             remoteRequest = readRequestFromStream( inputStream );
@@ -169,7 +169,7 @@ public class RemoteHttpCacheServlet
      */
     protected void writeResponse( final HttpServletResponse response, final RemoteCacheResponse<Object> cacheResponse )
     {
-        try (final OutputStream outputStream = response.getOutputStream())
+        try (OutputStream outputStream = response.getOutputStream())
         {
             response.setContentType( "application/octet-stream" );
             serializer.serializeTo(cacheResponse, outputStream);
diff --git a/commons-jcs-core/src/main/java/org/apache/commons/jcs3/auxiliary/remote/server/RemoteCacheServer.java b/commons-jcs-core/src/main/java/org/apache/commons/jcs3/auxiliary/remote/server/RemoteCacheServer.java
index 4081a8a..c5caa67 100644
--- a/commons-jcs-core/src/main/java/org/apache/commons/jcs3/auxiliary/remote/server/RemoteCacheServer.java
+++ b/commons-jcs-core/src/main/java/org/apache/commons/jcs3/auxiliary/remote/server/RemoteCacheServer.java
@@ -265,8 +265,6 @@ public class RemoteCacheServer<K, V>
         try
         {
             final CacheListeners<K, V> cacheDesc = getCacheListeners( item.getCacheName() );
-            /* Object val = */item.getVal();
-
             final boolean fromCluster = isRequestFromCluster( requesterId );
 
             log.debug( "In update, requesterId = [{0}] fromCluster = {1}", requesterId, fromCluster );
diff --git a/commons-jcs-core/src/main/java/org/apache/commons/jcs3/engine/CacheElement.java b/commons-jcs-core/src/main/java/org/apache/commons/jcs3/engine/CacheElement.java
index 519026c..ea2399e 100644
--- a/commons-jcs-core/src/main/java/org/apache/commons/jcs3/engine/CacheElement.java
+++ b/commons-jcs-core/src/main/java/org/apache/commons/jcs3/engine/CacheElement.java
@@ -1,7 +1,5 @@
 package org.apache.commons.jcs3.engine;
 
-import java.util.Objects;
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -21,6 +19,8 @@ import java.util.Objects;
  * under the License.
  */
 
+import java.util.Objects;
+
 import org.apache.commons.jcs3.engine.behavior.ICacheElement;
 import org.apache.commons.jcs3.engine.behavior.IElementAttributes;
 
diff --git a/commons-jcs-core/src/main/java/org/apache/commons/jcs3/engine/control/CompositeCache.java b/commons-jcs-core/src/main/java/org/apache/commons/jcs3/engine/control/CompositeCache.java
index 7696323..f6ae9cd 100644
--- a/commons-jcs-core/src/main/java/org/apache/commons/jcs3/engine/control/CompositeCache.java
+++ b/commons-jcs-core/src/main/java/org/apache/commons/jcs3/engine/control/CompositeCache.java
@@ -1231,7 +1231,8 @@ public class CompositeCache<K, V>
                     || fromRemote && aux.getCacheType() == CacheType.REMOTE_CACHE)
                 {
                     log.info("In DISPOSE, [{0}] SKIPPING auxiliary [{1}] fromRemote [{2}]",
-                            this.cacheAttr::getCacheName, aux::getCacheName,
+                            this.cacheAttr::getCacheName, 
+                            () -> aux == null ? "null" : aux.getCacheName(),
                             () -> fromRemote);
                     continue;
                 }
diff --git a/commons-jcs-core/src/main/java/org/apache/commons/jcs3/engine/control/CompositeCacheConfigurator.java b/commons-jcs-core/src/main/java/org/apache/commons/jcs3/engine/control/CompositeCacheConfigurator.java
index 99b6d8e..def0f1c 100644
--- a/commons-jcs-core/src/main/java/org/apache/commons/jcs3/engine/control/CompositeCacheConfigurator.java
+++ b/commons-jcs-core/src/main/java/org/apache/commons/jcs3/engine/control/CompositeCacheConfigurator.java
@@ -22,7 +22,6 @@ package org.apache.commons.jcs3.engine.control;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Properties;
-import java.util.StringTokenizer;
 
 import org.apache.commons.jcs3.auxiliary.AuxiliaryCache;
 import org.apache.commons.jcs3.auxiliary.AuxiliaryCacheAttributes;
@@ -220,30 +219,19 @@ public class CompositeCacheConfigurator
 
             log.debug( "Parsing region name \"{0}\", value \"{1}\"", regName, auxiliaries );
 
-            // We must skip over ',' but not white space
-            final StringTokenizer st = new StringTokenizer( auxiliaries, "," );
-
-            // If value is not in the form ", appender.." or "", then we should set
-            // the priority of the category.
+            String auxNames[] = auxiliaries.split("\\s*,\\s*");
 
             // just to be on the safe side...
-            if ( !( auxiliaries.startsWith( "," ) || auxiliaries.equals( "" ) ) && !st.hasMoreTokens() )
+            if (auxNames.length == 0)
             {
                 return null;
             }
 
-            AuxiliaryCache<K, V> auxCache;
-            String auxName;
-            while ( st.hasMoreTokens() )
+            for (String auxName : auxNames)
             {
-                auxName = st.nextToken().trim();
-                if (auxName.equals( "," ))
-                {
-                    continue;
-                }
                 log.debug( "Parsing auxiliary named \"{0}\".", auxName );
 
-                auxCache = parseAuxiliary( props, ccm, auxName, regName );
+                AuxiliaryCache<K, V> auxCache = parseAuxiliary( props, ccm, auxName, regName );
 
                 if ( auxCache != null )
                 {
diff --git a/commons-jcs-core/src/main/java/org/apache/commons/jcs3/engine/control/CompositeCacheManager.java b/commons-jcs-core/src/main/java/org/apache/commons/jcs3/engine/control/CompositeCacheManager.java
index b491404..63d1177 100644
--- a/commons-jcs-core/src/main/java/org/apache/commons/jcs3/engine/control/CompositeCacheManager.java
+++ b/commons-jcs-core/src/main/java/org/apache/commons/jcs3/engine/control/CompositeCacheManager.java
@@ -237,7 +237,7 @@ public class CompositeCacheManager
     }
 
     /** Creates a shutdown hook and starts the scheduler service */
-    protected void initialize()
+    protected synchronized void initialize()
     {
         if (!isInitialized)
         {
@@ -411,7 +411,7 @@ public class CompositeCacheManager
      * <p>
      * @param properties assumed not null
      */
-    private void doConfigure( final Properties properties )
+    private synchronized void doConfigure( final Properties properties )
     {
         // We will expose this for managers that need raw properties.
         this.configurationProperties = properties;
@@ -584,85 +584,82 @@ public class CompositeCacheManager
     /**
      * Calls freeCache on all regions
      */
-    public void shutDown()
+    public synchronized void shutDown()
     {
-        synchronized (CompositeCacheManager.class)
+        // shutdown element event queue
+        if (this.elementEventQueue != null)
         {
-            // shutdown element event queue
-            if (this.elementEventQueue != null)
-            {
-                this.elementEventQueue.dispose();
-            }
+            this.elementEventQueue.dispose();
+        }
+
+        // notify any observers
+        IShutdownObserver observer = null;
+        while ((observer = shutdownObservers.poll()) != null)
+        {
+            observer.shutdown();
+        }
 
-            // notify any observers
-            IShutdownObserver observer = null;
-            while ((observer = shutdownObservers.poll()) != null)
+        // Unregister JMX bean
+        if (isJMXRegistered)
+        {
+            final MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
+            try
             {
-                observer.shutdown();
+                final ObjectName jmxObjectName = new ObjectName(jmxName);
+                mbs.unregisterMBean(jmxObjectName);
             }
-
-            // Unregister JMX bean
-            if (isJMXRegistered)
+            catch (final Exception e)
             {
-                final MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
-                try
-                {
-                    final ObjectName jmxObjectName = new ObjectName(jmxName);
-                    mbs.unregisterMBean(jmxObjectName);
-                }
-                catch (final Exception e)
-                {
-                    log.warn( "Could not unregister JMX bean.", e );
-                }
-
-                isJMXRegistered = false;
+                log.warn( "Could not unregister JMX bean.", e );
             }
 
-            // do the traditional shutdown of the regions.
-            getCacheNames().forEach(this::freeCache);
+            isJMXRegistered = false;
+        }
+
+        // do the traditional shutdown of the regions.
+        getCacheNames().forEach(this::freeCache);
 
-            // shut down auxiliaries
-            for (final String key : auxiliaryCaches.keySet())
+        // shut down auxiliaries
+        for (final String key : auxiliaryCaches.keySet())
+        {
+            try
             {
-                try
-                {
-                    freeAuxiliaryCache(key);
-                }
-                catch (final IOException e)
-                {
-                    log.warn("Auxiliary cache {0} failed to shut down", key, e);
-                }
+                freeAuxiliaryCache(key);
+            }
+            catch (final IOException e)
+            {
+                log.warn("Auxiliary cache {0} failed to shut down", key, e);
             }
+        }
 
-            // shut down factories
-            auxiliaryFactoryRegistry.values().forEach(AuxiliaryCacheFactory::dispose);
+        // shut down factories
+        auxiliaryFactoryRegistry.values().forEach(AuxiliaryCacheFactory::dispose);
 
-            auxiliaryAttributeRegistry.clear();
-            auxiliaryFactoryRegistry.clear();
+        auxiliaryAttributeRegistry.clear();
+        auxiliaryFactoryRegistry.clear();
 
-            // shutdown all scheduled jobs
-            this.scheduledExecutor.shutdownNow();
+        // shutdown all scheduled jobs
+        this.scheduledExecutor.shutdownNow();
 
-            // shutdown all thread pools
-            ThreadPoolManager.dispose();
+        // shutdown all thread pools
+        ThreadPoolManager.dispose();
 
-            if (shutdownHook != null)
+        if (shutdownHook != null)
+        {
+            try
             {
-                try
-                {
-                    Runtime.getRuntime().removeShutdownHook(shutdownHook);
-                }
-                catch (final IllegalStateException e)
-                {
-                    // May fail if the JVM is already shutting down
-                }
-
-                this.shutdownHook = null;
+                Runtime.getRuntime().removeShutdownHook(shutdownHook);
+            }
+            catch (final IllegalStateException e)
+            {
+                // May fail if the JVM is already shutting down
             }
 
-            isConfigured = false;
-            isInitialized = false;
+            this.shutdownHook = null;
         }
+
+        isConfigured = false;
+        isInitialized = false;
     }
 
     /** */
diff --git a/commons-jcs-core/src/main/java/org/apache/commons/jcs3/engine/memory/util/SoftReferenceElementDescriptor.java b/commons-jcs-core/src/main/java/org/apache/commons/jcs3/engine/memory/util/SoftReferenceElementDescriptor.java
index 7a4ca6e..5e797a5 100644
--- a/commons-jcs-core/src/main/java/org/apache/commons/jcs3/engine/memory/util/SoftReferenceElementDescriptor.java
+++ b/commons-jcs-core/src/main/java/org/apache/commons/jcs3/engine/memory/util/SoftReferenceElementDescriptor.java
@@ -33,7 +33,7 @@ public class SoftReferenceElementDescriptor<K, V>
     private static final long serialVersionUID = -1905161209035522460L;
 
     /** The CacheElement wrapped by this descriptor */
-    private final SoftReference<ICacheElement<K, V>> srce;
+    private transient final SoftReference<ICacheElement<K, V>> srce;
 
     /**
      * Constructs a usable MemoryElementDescriptor.
diff --git a/commons-jcs-core/src/test/java/org/apache/commons/jcs3/auxiliary/disk/block/BlockDiskCacheConcurrentUnitTest.java b/commons-jcs-core/src/test/java/org/apache/commons/jcs3/auxiliary/disk/block/BlockDiskCacheConcurrentUnitTest.java
index 9acfd4b..cc8116a 100644
--- a/commons-jcs-core/src/test/java/org/apache/commons/jcs3/auxiliary/disk/block/BlockDiskCacheConcurrentUnitTest.java
+++ b/commons-jcs-core/src/test/java/org/apache/commons/jcs3/auxiliary/disk/block/BlockDiskCacheConcurrentUnitTest.java
@@ -140,13 +140,13 @@ public class BlockDiskCacheConcurrentUnitTest
         final CacheAccess<String, String> jcs = JCS.getInstance( region );
 
         // Add items to cache
-        for ( int i = 0; i <= items; i++ )
+        for ( int i = 0; i < items; i++ )
         {
             jcs.put( i + ":key", region + " data " + i );
         }
 
         // Test that all items are in cache
-        for ( int i = 0; i <= items; i++ )
+        for ( int i = 0; i < items; i++ )
         {
             final String value = jcs.get( i + ":key" );
 
@@ -155,13 +155,13 @@ public class BlockDiskCacheConcurrentUnitTest
 
         // Test that getElements returns all the expected values
         final Set<String> keys = new HashSet<>();
-        for ( int i = 0; i <= items; i++ )
+        for ( int i = 0; i < items; i++ )
         {
             keys.add( i + ":key" );
         }
 
         final Map<String, ICacheElement<String, String>> elements = jcs.getCacheElements( keys );
-        for ( int i = 0; i <= items; i++ )
+        for ( int i = 0; i < items; i++ )
         {
             final ICacheElement<String, String> element = elements.get( i + ":key" );
             assertNotNull( "element " + i + ":key is missing", element );
@@ -169,14 +169,14 @@ public class BlockDiskCacheConcurrentUnitTest
         }
 
         // Remove all the items
-        for ( int i = 0; i <= items; i++ )
+        for ( int i = 0; i < items; i++ )
         {
             jcs.remove( i + ":key" );
         }
 
         // Verify removal
         // another thread may have inserted since
-        for ( int i = 0; i <= items; i++ )
+        for ( int i = 0; i < items; i++ )
         {
             assertNull( "Removed key should be null: " + i + ":key" + "\n stats " + jcs.getStats(), jcs
                 .get( i + ":key" ) );
@@ -201,13 +201,13 @@ public class BlockDiskCacheConcurrentUnitTest
         final CacheAccess<String, String> jcs = JCS.getInstance( region );
 
         // Add items to cache
-        for ( int i = start; i <= end; i++ )
+        for ( int i = start; i < end; i++ )
         {
             jcs.put( i + ":key", region + " data " + i );
         }
 
         // Test that all items are in cache
-        for ( int i = start; i <= end; i++ )
+        for ( int i = start; i < end; i++ )
         {
             final String value = jcs.get( i + ":key" );
 
@@ -216,13 +216,13 @@ public class BlockDiskCacheConcurrentUnitTest
 
         // Test that getElements returns all the expected values
         final Set<String> keys = new HashSet<>();
-        for ( int i = start; i <= end; i++ )
+        for ( int i = start; i < end; i++ )
         {
             keys.add( i + ":key" );
         }
 
         final Map<String, ICacheElement<String, String>> elements = jcs.getCacheElements( keys );
-        for ( int i = start; i <= end; i++ )
+        for ( int i = start; i < end; i++ )
         {
             final ICacheElement<String, String> element = elements.get( i + ":key" );
             assertNotNull( "element " + i + ":key is missing", element );
@@ -230,7 +230,7 @@ public class BlockDiskCacheConcurrentUnitTest
         }
 
         // Remove all the items
-        for ( int i = start; i <= end; i++ )
+        for ( int i = start; i < end; i++ )
         {
             jcs.remove( i + ":key" );
         }
@@ -239,7 +239,7 @@ public class BlockDiskCacheConcurrentUnitTest
 
         // Verify removal
         // another thread may have inserted since
-        for ( int i = start; i <= end; i++ )
+        for ( int i = start; i < end; i++ )
         {
             assertNull( "Removed key should be null: " + i + ":key " + "\n stats " + jcs.getStats(), jcs.get( i
                 + ":key" ) );
diff --git a/commons-jcs-jcache/src/main/java/org/apache/commons/jcs3/jcache/JCSCachingManager.java b/commons-jcs-jcache/src/main/java/org/apache/commons/jcs3/jcache/JCSCachingManager.java
index 886d3c0..629276f 100644
--- a/commons-jcs-jcache/src/main/java/org/apache/commons/jcs3/jcache/JCSCachingManager.java
+++ b/commons-jcs-jcache/src/main/java/org/apache/commons/jcs3/jcache/JCSCachingManager.java
@@ -189,19 +189,20 @@ public class JCSCachingManager implements CacheManager
         assertNotClosed();
         assertNotNull(cacheName, "cacheName");
         assertNotNull(configuration, "configuration");
-        final Class<?> keyType = configuration.getKeyType();
-        final Class<?> valueType = configuration.getValueType();
+        final Class<K> keyType = configuration.getKeyType();
+        final Class<V> valueType = configuration.getValueType();
         if (caches.containsKey(cacheName)) {
             throw new javax.cache.CacheException("cache " + cacheName + " already exists");
         }
+        @SuppressWarnings("unchecked")
         final Cache<K, V> cache = ClassLoaderAwareCache.wrap(loader,
-                new JCSCache/*<K, V>*/(
+                new JCSCache<>(
                         loader, this, cacheName,
-                        new JCSConfiguration/*<K, V>*/(configuration, keyType, valueType),
+                        new JCSConfiguration<K, V>(configuration, keyType, valueType),
                         properties,
                         ExpiryAwareCache.class.cast(delegate.getCache(cacheName))));
         caches.putIfAbsent(cacheName, cache);
-        return (Cache<K, V>) getCache(cacheName, keyType, valueType);
+        return getCache(cacheName, keyType, valueType);
     }
 
     @Override
@@ -341,8 +342,8 @@ public class JCSCachingManager implements CacheManager
 
         @SuppressWarnings("unchecked") // don't know how to solve this
         final Configuration<K, V> config = cache.getConfiguration(Configuration.class);
-        if ((keyType != null && !config.getKeyType().isAssignableFrom(keyType))
-                || (valueType != null && !config.getValueType().isAssignableFrom(valueType)))
+        if (keyType != null && !config.getKeyType().isAssignableFrom(keyType) ||
+            valueType != null && !config.getValueType().isAssignableFrom(valueType))
         {
             throw new IllegalArgumentException("this cache is <" + config.getKeyType().getName() + ", " + config.getValueType().getName()
                     + "> " + " and not <" + keyType.getName() + ", " + valueType.getName() + ">");
diff --git a/commons-jcs-jcache/src/main/java/org/apache/commons/jcs3/jcache/cdi/CDIJCacheHelper.java b/commons-jcs-jcache/src/main/java/org/apache/commons/jcs3/jcache/cdi/CDIJCacheHelper.java
index d01d0d5..d7b1e81 100644
--- a/commons-jcs-jcache/src/main/java/org/apache/commons/jcs3/jcache/cdi/CDIJCacheHelper.java
+++ b/commons-jcs-jcache/src/main/java/org/apache/commons/jcs3/jcache/cdi/CDIJCacheHelper.java
@@ -347,6 +347,7 @@ public class CDIJCacheHelper
         return defaultCacheResolverFactory();
     }
 
+    @SuppressWarnings("unchecked")
     private <T> T instance(final Class<T> type)
     {
         final Set<Bean<?>> beans = beanManager.getBeans(type);
@@ -463,7 +464,8 @@ public class CDIJCacheHelper
                 return false;
             }
             final MethodKey classKey = MethodKey.class.cast(o);
-            return delegate.equals(classKey.delegate) && ((base == null && classKey.base == null) || (base != null && base.equals(classKey.base)));
+            return delegate.equals(classKey.delegate) &&
+                (base == null && classKey.base == null || base != null && base.equals(classKey.base));
         }
 
         @Override