diff --git a/commons-jcs-core/src/main/java/org/apache/commons/jcs3/JCS.java b/commons-jcs-core/src/main/java/org/apache/commons/jcs3/JCS.java
index 9b65da1..4dc25b5 100644
--- a/commons-jcs-core/src/main/java/org/apache/commons/jcs3/JCS.java
+++ b/commons-jcs-core/src/main/java/org/apache/commons/jcs3/JCS.java
@@ -73,8 +73,8 @@
 
     /**
      * Set the log system. Must be called before getInstance is called
-     * Predefined Log systems are {@link LogManager.LOGSYSTEM_JAVA_UTIL_LOGGING}
-     * and {@link LogManager.LOGSYSTEM_LOG4J2}
+     * Predefined Log systems are {@link LogManager#LOGSYSTEM_JAVA_UTIL_LOGGING}
+     * and {@link LogManager#LOGSYSTEM_LOG4J2}
      *
      * @param logSystem the logSystem to set
      */
diff --git a/commons-jcs-core/src/main/java/org/apache/commons/jcs3/access/CacheAccess.java b/commons-jcs-core/src/main/java/org/apache/commons/jcs3/access/CacheAccess.java
index 4d3efe8..68a0652 100644
--- a/commons-jcs-core/src/main/java/org/apache/commons/jcs3/access/CacheAccess.java
+++ b/commons-jcs-core/src/main/java/org/apache/commons/jcs3/access/CacheAccess.java
@@ -108,7 +108,7 @@
     @Override
     public Map<K, V> getMatching( final String pattern )
     {
-        Map<K, V> unwrappedResults;
+        final Map<K, V> unwrappedResults;
 
         final Map<K, ICacheElement<K, V>> wrappedResults = this.getCacheControl().getMatching( pattern );
 
diff --git a/commons-jcs-core/src/main/java/org/apache/commons/jcs3/admin/JCSAdminBean.java b/commons-jcs-core/src/main/java/org/apache/commons/jcs3/admin/JCSAdminBean.java
index 4b52893..4535925 100644
--- a/commons-jcs-core/src/main/java/org/apache/commons/jcs3/admin/JCSAdminBean.java
+++ b/commons-jcs-core/src/main/java/org/apache/commons/jcs3/admin/JCSAdminBean.java
@@ -214,7 +214,7 @@
 
                 //CountingOnlyOutputStream: Keeps track of the number of bytes written to it, but doesn't write them anywhere.
                 final CountingOnlyOutputStream counter = new CountingOnlyOutputStream();
-                try (ObjectOutputStream out = new ObjectOutputStream(counter);)
+                try (ObjectOutputStream out = new ObjectOutputStream(counter))
                 {
                     out.writeObject(element);
                 }
diff --git a/commons-jcs-core/src/main/java/org/apache/commons/jcs3/auxiliary/disk/block/BlockDiskCache.java b/commons-jcs-core/src/main/java/org/apache/commons/jcs3/auxiliary/disk/block/BlockDiskCache.java
index 9f3ab59..35a8c59 100644
--- a/commons-jcs-core/src/main/java/org/apache/commons/jcs3/auxiliary/disk/block/BlockDiskCache.java
+++ b/commons-jcs-core/src/main/java/org/apache/commons/jcs3/auxiliary/disk/block/BlockDiskCache.java
@@ -196,7 +196,7 @@
                             throw new IOException("Data is null");
                         }
                     }
-                    catch (IOException | ClassNotFoundException e)
+                    catch (final IOException | ClassNotFoundException e)
                     {
                         throw new RuntimeException(logCacheName
                                 + " Couldn't find data for key [" + entry.getKey() + "]", e);
@@ -506,7 +506,7 @@
 
 
 	private boolean performSingleKeyRemoval(final K key) {
-		boolean removed;
+		final boolean removed;
 		// remove single item.
 		final int[] ded = this.keyStore.remove( key );
 		removed = ded != null;
diff --git a/commons-jcs-core/src/main/java/org/apache/commons/jcs3/auxiliary/disk/indexed/IndexedDiskCache.java b/commons-jcs-core/src/main/java/org/apache/commons/jcs3/auxiliary/disk/indexed/IndexedDiskCache.java
index 28c4eb0..92cb591 100644
--- a/commons-jcs-core/src/main/java/org/apache/commons/jcs3/auxiliary/disk/indexed/IndexedDiskCache.java
+++ b/commons-jcs-core/src/main/java/org/apache/commons/jcs3/auxiliary/disk/indexed/IndexedDiskCache.java
@@ -846,7 +846,7 @@
      */
     private boolean performSingleKeyRemoval(final K key)
     {
-        boolean removed;
+        final boolean removed;
         // remove single item.
         final IndexedDiskElementDescriptor ded = keyHash.remove(key);
         removed = ded != null;
diff --git a/commons-jcs-core/src/main/java/org/apache/commons/jcs3/auxiliary/disk/jdbc/JDBCDiskCache.java b/commons-jcs-core/src/main/java/org/apache/commons/jcs3/auxiliary/disk/jdbc/JDBCDiskCache.java
index 59b38c2..d55f352 100644
--- a/commons-jcs-core/src/main/java/org/apache/commons/jcs3/auxiliary/disk/jdbc/JDBCDiskCache.java
+++ b/commons-jcs-core/src/main/java/org/apache/commons/jcs3/auxiliary/disk/jdbc/JDBCDiskCache.java
@@ -150,7 +150,7 @@
         {
             log.debug( "Putting [{0}] on disk.",  () -> ce.getKey());
 
-            byte[] element;
+            final byte[] element;
 
             try
             {
diff --git a/commons-jcs-core/src/main/java/org/apache/commons/jcs3/auxiliary/disk/jdbc/JDBCDiskCacheAttributes.java b/commons-jcs-core/src/main/java/org/apache/commons/jcs3/auxiliary/disk/jdbc/JDBCDiskCacheAttributes.java
index 398fcb8..92009b4 100644
--- a/commons-jcs-core/src/main/java/org/apache/commons/jcs3/auxiliary/disk/jdbc/JDBCDiskCacheAttributes.java
+++ b/commons-jcs-core/src/main/java/org/apache/commons/jcs3/auxiliary/disk/jdbc/JDBCDiskCacheAttributes.java
@@ -243,7 +243,7 @@
     }
 
     /**
-     * @param maxTotal The maxTotal to set.
+     * @param maxActive The maxTotal to set.
      */
     public void setMaxTotal( final int maxActive )
     {
diff --git a/commons-jcs-core/src/main/java/org/apache/commons/jcs3/auxiliary/disk/jdbc/JDBCDiskCacheFactory.java b/commons-jcs-core/src/main/java/org/apache/commons/jcs3/auxiliary/disk/jdbc/JDBCDiskCacheFactory.java
index b3d907f..ebd4040 100644
--- a/commons-jcs-core/src/main/java/org/apache/commons/jcs3/auxiliary/disk/jdbc/JDBCDiskCacheFactory.java
+++ b/commons-jcs-core/src/main/java/org/apache/commons/jcs3/auxiliary/disk/jdbc/JDBCDiskCacheFactory.java
@@ -223,7 +223,7 @@
 
 
     	final DataSourceFactory dsFactory = this.dsFactories.computeIfAbsent(poolName, key -> {
-    	    DataSourceFactory newDsFactory;
+    	    final DataSourceFactory newDsFactory;
             JDBCDiskCacheAttributes dsConfig = null;
 
             if (cattr.getConnectionPoolName() == null)
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 899ce2c..801f511 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
@@ -157,7 +157,7 @@
             terminated = new AtomicBoolean(false);
             shutdown = new AtomicBoolean(false);
 
-            ServerSocket serverSocket;
+            final ServerSocket serverSocket;
             if (host != null && host.length() > 0)
             {
                 log.info( "Listening on {0}:{1}", host, port );
diff --git a/commons-jcs-core/src/main/java/org/apache/commons/jcs3/auxiliary/remote/RemoteCacheManager.java b/commons-jcs-core/src/main/java/org/apache/commons/jcs3/auxiliary/remote/RemoteCacheManager.java
index e9df6d6..1f47feb 100644
--- a/commons-jcs-core/src/main/java/org/apache/commons/jcs3/auxiliary/remote/RemoteCacheManager.java
+++ b/commons-jcs-core/src/main/java/org/apache/commons/jcs3/auxiliary/remote/RemoteCacheManager.java
@@ -243,7 +243,7 @@
      */
     protected <K, V> RemoteCacheNoWait<K, V> newRemoteCacheNoWait(final IRemoteCacheAttributes cattr)
     {
-        RemoteCacheNoWait<K, V> remoteCacheNoWait;
+        final RemoteCacheNoWait<K, V> remoteCacheNoWait;
         // create a listener first and pass it to the remotecache
         // sender.
         RemoteCacheListener<K, V> listener = null;
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 a098c85..6f6aede 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
@@ -1148,7 +1148,7 @@
         {
             throw new IllegalArgumentException( "cacheName and listener must not be null" );
         }
-        CacheListeners<KK, VV> cacheListeners;
+        final CacheListeners<KK, VV> cacheListeners;
 
         final IRemoteCacheListener<KK, VV> ircl = (IRemoteCacheListener<KK, VV>) listener;
 
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 16c4584..5ecae58 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
@@ -103,7 +103,7 @@
             {
                 final String regionName = key.substring( SYSTEM_REGION_PREFIX.length() );
                 final String auxiliaries = OptionConverter.findAndSubst( key, props );
-                ICache<?, ?> cache;
+                final ICache<?, ?> cache;
                 synchronized ( regionName )
                 {
                     cache = parseRegion( props, ccm, regionName, auxiliaries, null, SYSTEM_REGION_PREFIX );
@@ -130,7 +130,7 @@
                 final String regionName = key.substring( REGION_PREFIX.length() );
                 regionNames.add( regionName );
                 final String auxiliaries = OptionConverter.findAndSubst( key, props );
-                ICache<?, ?> cache;
+                final ICache<?, ?> cache;
                 synchronized ( regionName )
                 {
                     cache = parseRegion( props, ccm, regionName, auxiliaries );
diff --git a/commons-jcs-core/src/main/java/org/apache/commons/jcs3/log/LogManager.java b/commons-jcs-core/src/main/java/org/apache/commons/jcs3/log/LogManager.java
index 3cb8964..942cf2d 100644
--- a/commons-jcs-core/src/main/java/org/apache/commons/jcs3/log/LogManager.java
+++ b/commons-jcs-core/src/main/java/org/apache/commons/jcs3/log/LogManager.java
@@ -135,7 +135,7 @@
     /**
      * Returns the root logger.
      *
-     * @return the root logger, named {@link LogFactory.ROOT_LOGGER_NAME}.
+     * @return the root logger, named {@link LogFactory#ROOT_LOGGER_NAME}.
      */
     public static Log getRootLogger()
     {
diff --git a/commons-jcs-core/src/main/java/org/apache/commons/jcs3/utils/config/OptionConverter.java b/commons-jcs-core/src/main/java/org/apache/commons/jcs3/utils/config/OptionConverter.java
index dfe03bc..535cba3 100644
--- a/commons-jcs-core/src/main/java/org/apache/commons/jcs3/utils/config/OptionConverter.java
+++ b/commons-jcs-core/src/main/java/org/apache/commons/jcs3/utils/config/OptionConverter.java
@@ -329,7 +329,7 @@
                     return defaultValue;
                 }
             }
-            catch ( ClassNotFoundException | InstantiationException | IllegalAccessException e )
+            catch ( final ClassNotFoundException | InstantiationException | IllegalAccessException e )
             {
                 log.error( "Could not instantiate class [{0}]", className, e );
             }
diff --git a/commons-jcs-core/src/main/java/org/apache/commons/jcs3/utils/config/PropertySetter.java b/commons-jcs-core/src/main/java/org/apache/commons/jcs3/utils/config/PropertySetter.java
index 1bf07ea..8d5a040 100644
--- a/commons-jcs-core/src/main/java/org/apache/commons/jcs3/utils/config/PropertySetter.java
+++ b/commons-jcs-core/src/main/java/org/apache/commons/jcs3/utils/config/PropertySetter.java
@@ -202,7 +202,7 @@
             throw new PropertySetterException( "#params for setter != 1" );
         }
 
-        Object arg;
+        final Object arg;
         try
         {
             arg = convertArg( value, paramTypes[0] );
diff --git a/commons-jcs-core/src/main/java/org/apache/commons/jcs3/utils/struct/AbstractLRUMap.java b/commons-jcs-core/src/main/java/org/apache/commons/jcs3/utils/struct/AbstractLRUMap.java
index 6efa127..26a0d6b 100644
--- a/commons-jcs-core/src/main/java/org/apache/commons/jcs3/utils/struct/AbstractLRUMap.java
+++ b/commons-jcs-core/src/main/java/org/apache/commons/jcs3/utils/struct/AbstractLRUMap.java
@@ -184,7 +184,7 @@
     @Override
     public V get( final Object key )
     {
-        V retVal;
+        final V retVal;
 
         log.debug( "getting item  for key {0}", key );
 
diff --git a/commons-jcs-core/src/test/java/org/apache/commons/jcs3/access/TestCacheAccess.java b/commons-jcs-core/src/test/java/org/apache/commons/jcs3/access/TestCacheAccess.java
index 289abdf..8186410 100644
--- a/commons-jcs-core/src/test/java/org/apache/commons/jcs3/access/TestCacheAccess.java
+++ b/commons-jcs-core/src/test/java/org/apache/commons/jcs3/access/TestCacheAccess.java
@@ -275,7 +275,7 @@
                 }
             }
         }
-        catch ( CacheException | IOException e )
+        catch ( final CacheException | IOException e )
         {
             p( e.toString() );
             e.printStackTrace( System.out );
