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 3f72abf3c8902b16a618e6c4b4b7b0cec15dec82
Author: Thomas Vandahl <[email protected]>
AuthorDate: Thu Mar 19 09:41:33 2026 +0100

    Replace System.currentTimeMillis() with Instant.now()
---
 .../jcs4/auxiliary/disk/jdbc/JDBCDiskCache.java    |  4 +-
 .../commons/jcs4/engine/logging/CacheEvent.java    | 10 ++--
 .../jcs4/utils/discovery/DiscoveredService.java    |  9 +--
 .../jcs4/utils/discovery/UDPDiscoveryService.java  |  5 +-
 .../commons/jcs4/utils/timing/ElapsedTimer.java    |  9 ++-
 .../commons/jcs4/access/TestCacheAccess.java       | 68 +++++++++-------------
 .../discovery/UDPDiscoveryServiceUnitTest.java     | 13 +++--
 src/site/xdoc/UpgradingFrom3x.xml                  | 33 +++++++++--
 8 files changed, 84 insertions(+), 67 deletions(-)

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 6088c4ca..8bab209c 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
@@ -186,7 +186,7 @@ public class JDBCDiskCache<K, V>
             if (result.next())
             {
                 getTableState().setState( TableStateType.DELETE_RUNNING );
-                final long now = System.currentTimeMillis() / 1000;
+                final Instant now = Instant.now();
 
                 final String sql = String.format(SQL_DELETE_EXPIRED, 
getTableName());
 
@@ -194,7 +194,7 @@ public class JDBCDiskCache<K, V>
                 {
                     psDelete.setString( 1, "F" );
                     psDelete.setString( 2, getCacheName() );
-                    psDelete.setLong( 3, now );
+                    psDelete.setLong( 3, now.getEpochSecond() );
 
                     setAlive(true);
 
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 63156df4..6f0d2355 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
@@ -19,7 +19,7 @@ package org.apache.commons.jcs4.engine.logging;
  * under the License.
  */
 
-import java.util.Date;
+import java.time.Instant;
 
 import org.apache.commons.jcs4.engine.logging.behavior.ICacheEvent;
 import 
org.apache.commons.jcs4.engine.logging.behavior.ICacheEventLogger.CacheEventType;
@@ -27,7 +27,7 @@ import 
org.apache.commons.jcs4.engine.logging.behavior.ICacheEventLogger.CacheEv
 /** It's returned from create and passed into log. */
 public record CacheEvent<K>(
         /** The time at which this object was created. */
-        long createTime,
+        Instant createTime,
 
         /** The auxiliary or other source of the event. */
         String source,
@@ -53,7 +53,7 @@ public record CacheEvent<K>(
      */
     public CacheEvent()
     {
-        this(System.currentTimeMillis(), null, null, null, null, null);
+        this(Instant.now(), null, null, null, null, null);
     }
 
     /**
@@ -68,7 +68,7 @@ public record CacheEvent<K>(
     public CacheEvent(final String source, final String region, CacheEventType 
eventType,
             String optionalDetails, K key)
     {
-        this(System.currentTimeMillis(), source, region, eventType, 
optionalDetails, key);
+        this(Instant.now(), source, region, eventType, optionalDetails, key);
     }
 
     /**
@@ -79,7 +79,7 @@ public record CacheEvent<K>(
     {
        final StringBuilder sb = new StringBuilder();
        sb.append("CacheEvent: ").append(eventType)
-         .append(" Created: ").append(new Date(createTime));
+         .append(" Created: ").append(createTime);
        if (source != null)
        {
                sb.append(" Source: ").append(source);
diff --git 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/utils/discovery/DiscoveredService.java
 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/utils/discovery/DiscoveredService.java
index 52c10388..69d80e29 100644
--- 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/utils/discovery/DiscoveredService.java
+++ 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/utils/discovery/DiscoveredService.java
@@ -20,6 +20,7 @@ package org.apache.commons.jcs4.utils.discovery;
  */
 
 import java.io.Serializable;
+import java.time.Instant;
 import java.util.ArrayList;
 import java.util.Objects;
 
@@ -43,7 +44,7 @@ public class DiscoveredService
     private int servicePort;
 
     /** Last time we heard from this service? */
-    private long lastHearFromTime;
+    private Instant lastHearFromTime;
 
     /**
      * Default constructor
@@ -64,7 +65,7 @@ public class DiscoveredService
         setServiceAddress( message.getHost() );
         setCacheNames( message.getCacheNames() );
         setServicePort( message.getPort() );
-        setLastHearFromTime( System.currentTimeMillis() );
+        setLastHearFromTime(Instant.now());
     }
 
     /**
@@ -104,7 +105,7 @@ public class DiscoveredService
     /**
      * @return the lastHearFromTime.
      */
-    public long getLastHearFromTime()
+    public Instant getLastHearFromTime()
     {
         return lastHearFromTime;
     }
@@ -143,7 +144,7 @@ public class DiscoveredService
     /**
      * @param lastHearFromTime The lastHearFromTime to set.
      */
-    public void setLastHearFromTime( final long lastHearFromTime )
+    public void setLastHearFromTime( final Instant lastHearFromTime )
     {
         this.lastHearFromTime = lastHearFromTime;
     }
diff --git 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/utils/discovery/UDPDiscoveryService.java
 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/utils/discovery/UDPDiscoveryService.java
index 513c0f53..65ae7f0e 100644
--- 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/utils/discovery/UDPDiscoveryService.java
+++ 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/utils/discovery/UDPDiscoveryService.java
@@ -25,6 +25,7 @@ import java.net.Inet6Address;
 import java.net.InetAddress;
 import java.net.NetworkInterface;
 import java.net.UnknownHostException;
+import java.time.Instant;
 import java.util.ArrayList;
 import java.util.Enumeration;
 import java.util.HashSet;
@@ -254,12 +255,12 @@ public class UDPDiscoveryService
      */
     protected void cleanup()
     {
-        final long now = System.currentTimeMillis();
+        final Instant now = Instant.now();
 
         // the listeners need to be notified.
         getDiscoveredServices().stream()
             .filter(service -> {
-                if (now - service.getLastHearFromTime() > 
getUdpDiscoveryAttributes().maxIdleTimeSec() * 1000)
+                if 
(now.isAfter(service.getLastHearFromTime().plusSeconds(getUdpDiscoveryAttributes().maxIdleTimeSec())))
                 {
                     log.info( "Removing service, since we haven't heard from 
it in "
                             + "{0} seconds. service = {1}",
diff --git 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/utils/timing/ElapsedTimer.java
 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/utils/timing/ElapsedTimer.java
index acf80fe8..5832c8eb 100644
--- 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/utils/timing/ElapsedTimer.java
+++ 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/utils/timing/ElapsedTimer.java
@@ -19,6 +19,9 @@ package org.apache.commons.jcs4.utils.timing;
  * under the License.
  */
 
+import java.time.Duration;
+import java.time.Instant;
+
 /**
  * This is a simple timer utility.
  */
@@ -30,7 +33,7 @@ public class ElapsedTimer
     /**
      * Sets the start time when created.
      */
-    private long timeStamp = System.currentTimeMillis();
+    private Instant timeStamp = Instant.now();
 
     /**
      * Gets the time elapsed between the start time and now. The start time is 
reset to now.
@@ -40,8 +43,8 @@ public class ElapsedTimer
      */
     public long getElapsedTime()
     {
-        final long now = System.currentTimeMillis();
-        final long elapsed = now - timeStamp;
+        final Instant now = Instant.now();
+        final long elapsed = Duration.between(timeStamp, now).toMillis();
         timeStamp = now;
         return elapsed;
     }
diff --git 
a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/access/TestCacheAccess.java
 
b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/access/TestCacheAccess.java
index 92d843ca..7660f195 100644
--- 
a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/access/TestCacheAccess.java
+++ 
b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/access/TestCacheAccess.java
@@ -33,6 +33,7 @@ import org.apache.commons.jcs4.engine.ElementAttributes;
 import org.apache.commons.jcs4.engine.behavior.IElementAttributes;
 import 
org.apache.commons.jcs4.engine.control.event.ElementEventHandlerMockImpl;
 import org.apache.commons.jcs4.log.Log;
+import org.apache.commons.jcs4.utils.timing.ElapsedTimer;
 
 /**
  * Allows the user to run common cache commands from the command line for a 
test cache. This also
@@ -167,7 +168,7 @@ public class TestCacheAccess
      */
     public void getMultiple( final int num, final boolean show )
     {
-        final long n_start = System.currentTimeMillis();
+        final ElapsedTimer timer = new ElapsedTimer();
         for ( int n = 0; n < num; n++ )
         {
             try
@@ -183,8 +184,7 @@ public class TestCacheAccess
                 log.error( e );
             }
         }
-        final long n_end = System.currentTimeMillis();
-        p( "---got " + num + " in " + String.valueOf( n_end - n_start ) + " 
millis ---" );
+        p( "---got " + num + " in " + timer.getElapsedTimeString() + " ---" );
     }
 
     /**
@@ -219,7 +219,7 @@ public class TestCacheAccess
         }
         else
         {
-            final long n_start = System.currentTimeMillis();
+            final ElapsedTimer timer = new ElapsedTimer();
             try
             {
                 final Object obj = cache_control.get( key );
@@ -232,8 +232,7 @@ public class TestCacheAccess
             {
                 log.error( e );
             }
-            final long n_end = System.currentTimeMillis();
-            p( "---got " + key + " in " + String.valueOf( n_end - n_start ) + 
" millis ---" );
+            p( "---got " + key + " in " + timer.getElapsedTimeString() + " 
---" );
         }
     }
 
@@ -275,7 +274,7 @@ public class TestCacheAccess
         }
         else
         {
-            final long n_start = System.currentTimeMillis();
+            final ElapsedTimer timer = new ElapsedTimer();
             try
             {
                 for ( int a = 0; a < num; a++ )
@@ -291,8 +290,7 @@ public class TestCacheAccess
             {
                 log.error( e );
             }
-            final long n_end = System.currentTimeMillis();
-            p( "---got " + num + " from group " + group + " in " + 
String.valueOf( n_end - n_start ) + " millis ---" );
+            p( "---got " + num + " from group " + group + " in " + 
timer.getElapsedTimeString() + " ---" );
         }
     }
 
@@ -332,7 +330,7 @@ public class TestCacheAccess
         }
         else
         {
-            final long n_start = System.currentTimeMillis();
+            final ElapsedTimer timer = new ElapsedTimer();
             try
             {
                 final Object obj = group_cache_control.getFromGroup( key, 
group );
@@ -345,8 +343,7 @@ public class TestCacheAccess
             {
                 log.error( e );
             }
-            final long n_end = System.currentTimeMillis();
-            p( "---got " + key + " from group " + group + " in " + 
String.valueOf( n_end - n_start ) + " millis ---" );
+            p( "---got " + key + " from group " + group + " in " + 
timer.getElapsedTimeString() + " ---" );
         }
     }
 
@@ -382,7 +379,7 @@ public class TestCacheAccess
         }
         else
         {
-            final long n_start = System.currentTimeMillis();
+            final ElapsedTimer timer = new ElapsedTimer();
             try
             {
                 final Map<String, String> results = cache_control.getMatching( 
pattern );
@@ -395,8 +392,7 @@ public class TestCacheAccess
             {
                 log.error( e );
             }
-            final long n_end = System.currentTimeMillis();
-            p( "---gotMatching [" + pattern + "] in " + String.valueOf( n_end 
- n_start ) + " millis ---" );
+            p( "---gotMatching [" + pattern + "] in " + 
timer.getElapsedTimeString() + " ---" );
         }
     }
 
@@ -475,11 +471,9 @@ public class TestCacheAccess
         }
         else
         {
-
-            final long n_start = System.currentTimeMillis();
+            final ElapsedTimer timer = new ElapsedTimer();
             cache_control.put( key, val );
-            final long n_end = System.currentTimeMillis();
-            p( "---put " + key + " | " + val + " in " + String.valueOf( n_end 
- n_start ) + " millis ---" );
+            p( "---put " + key + " | " + val + " in " + 
timer.getElapsedTimeString() + " ---" );
         }
     }
 
@@ -514,14 +508,13 @@ public class TestCacheAccess
         }
         else
         {
-            final long n_start = System.currentTimeMillis();
+            final ElapsedTimer timer = new ElapsedTimer();
             for ( int a = 0; a < num; a++ )
             {
                 group_cache_control.putInGroup( "keygr" + a, group, "data " + a
                     + " from putag ----asdfasfas-asfasfas-asfas in group " + 
group );
             }
-            final long n_end = System.currentTimeMillis();
-            p( "---put " + num + " in group " + group + " in " + 
String.valueOf( n_end - n_start ) + " millis ---" );
+            p( "---put " + num + " in group " + group + " in " + 
timer.getElapsedTimeString() + " ---" );
         }
     }
 
@@ -556,10 +549,9 @@ public class TestCacheAccess
         }
         else
         {
-            final long n_start = System.currentTimeMillis();
+            final ElapsedTimer timer = new ElapsedTimer();
             group_cache_control.putInGroup( key, group, "data from putg 
----asdfasfas-asfasfas-asfas in group " + group );
-            final long n_end = System.currentTimeMillis();
-            p( "---put " + key + " in group " + group + " in " + 
String.valueOf( n_end - n_start ) + " millis ---" );
+            p( "---put " + key + " in group " + group + " in " + 
timer.getElapsedTimeString() + " ---" );
         }
     }
 
@@ -626,13 +618,12 @@ public class TestCacheAccess
     {
         try
         {
-            final long n_start = System.currentTimeMillis();
+            final ElapsedTimer timer = new ElapsedTimer();
             for ( int n = 0; n < num; n++ )
             {
                 cache_control.put( "key" + n, "data" + n + " put from ta = 
junk" );
             }
-            final long n_end = System.currentTimeMillis();
-            p( "---put " + num + " in " + String.valueOf( n_end - n_start ) + 
" millis ---" );
+            p( "---put " + num + " in " + timer.getElapsedTimeString() + " 
---" );
         }
         catch ( final Exception e )
         {
@@ -715,13 +706,12 @@ public class TestCacheAccess
     {
         try
         {
-            final long n_start = System.currentTimeMillis();
+            final ElapsedTimer timer = new ElapsedTimer();
             for ( int n = 0; n < num; n++ )
             {
                 cache_control.remove( "key" + n );
             }
-            final long n_end = System.currentTimeMillis();
-            p( "---removed " + num + " in " + String.valueOf( n_end - n_start 
) + " millis ---" );
+            p( "---removed " + num + " in " + timer.getElapsedTimeString() + " 
---" );
         }
         catch ( final Exception e )
         {
@@ -760,7 +750,7 @@ public class TestCacheAccess
                 }
                 else if ( message.startsWith( "getAttributeNames" ) )
                 {
-                    final long n_start = System.currentTimeMillis();
+                    final ElapsedTimer timer = new ElapsedTimer();
                     String groupName = null;
                     final StringTokenizer toke = new StringTokenizer( message 
);
                     int tcnt = 0;
@@ -774,13 +764,11 @@ public class TestCacheAccess
                         }
                     }
                     getAttributeNames( groupName );
-                    final long n_end = System.currentTimeMillis();
-                    p( "---got attrNames for " + groupName + " in " + 
String.valueOf( n_end - n_start ) + " millis ---" );
+                    p( "---got attrNames for " + groupName + " in " + 
timer.getElapsedTimeString() + " ---" );
                 }
                 else if ( message.startsWith( "shutDown" ) )
                 {
                     JCS.shutdown();
-                    //cache_control.dispose();
                     notDone = false;
                     //System.exit( -1 );
                     return;
@@ -839,7 +827,7 @@ public class TestCacheAccess
                     else
                     {
                         final int num = Integer.parseInt( numS.trim() );
-                        final long n_start = System.currentTimeMillis();
+                        final ElapsedTimer timer = new ElapsedTimer();
                         for ( int n = 0; n < num; n++ )
                         {
                             final IElementAttributes attrp = 
cache_control.getDefaultElementAttributes();
@@ -847,8 +835,7 @@ public class TestCacheAccess
                             attrp.addElementEventHandler( hand );
                             cache_control.put( "key" + n, "data" + n + " put 
from ta = junk", attrp );
                         }
-                        final long n_end = System.currentTimeMillis();
-                        p( "---put " + num + " in " + String.valueOf( n_end - 
n_start ) + " millis ---" );
+                        p( "---put " + num + " in " + 
timer.getElapsedTimeString() + " ---" );
                     }
                 }
                 else if ( message.startsWith( "put" ) )
@@ -895,13 +882,12 @@ public class TestCacheAccess
                     {
                         final int num = Integer.parseInt( numS.trim() );
                         final IElementAttributes attrp = new 
ElementAttributes();
-                        final long n_start = System.currentTimeMillis();
+                        final ElapsedTimer timer = new ElapsedTimer();
                         for ( int n = 0; n < num; n++ )
                         {
                             new ElementAttributes(attrp);
                         }
-                        final long n_end = System.currentTimeMillis();
-                        p( "---cloned attr " + num + " in " + String.valueOf( 
n_end - n_start ) + " millis ---" );
+                        p( "---cloned attr " + num + " in " + 
timer.getElapsedTimeString() + " ---" );
                     }
                 }
                 else if ( message.startsWith( "switch" ) )
diff --git 
a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/utils/discovery/UDPDiscoveryServiceUnitTest.java
 
b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/utils/discovery/UDPDiscoveryServiceUnitTest.java
index bcf1eba6..b390a583 100644
--- 
a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/utils/discovery/UDPDiscoveryServiceUnitTest.java
+++ 
b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/utils/discovery/UDPDiscoveryServiceUnitTest.java
@@ -23,6 +23,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
+import java.time.Instant;
 import java.util.ArrayList;
 
 import org.apache.commons.jcs4.utils.serialization.StandardSerializer;
@@ -67,7 +68,7 @@ class UDPDiscoveryServiceUnitTest
         discoveredService.setServiceAddress( host );
         discoveredService.setCacheNames( new ArrayList<>() );
         discoveredService.setServicePort( 1000 );
-        discoveredService.setLastHearFromTime( 100 );
+        discoveredService.setLastHearFromTime(Instant.ofEpochMilli(100));
 
         final ArrayList<String> differentCacheNames = new ArrayList<>();
         differentCacheNames.add( "name1" );
@@ -75,7 +76,7 @@ class UDPDiscoveryServiceUnitTest
         discoveredService2.setServiceAddress( host );
         discoveredService2.setCacheNames( differentCacheNames );
         discoveredService2.setServicePort( 1000 );
-        discoveredService2.setLastHearFromTime( 500 );
+        discoveredService2.setLastHearFromTime(Instant.ofEpochMilli(500));
 
         // DO WORK
         service.addOrUpdateService( discoveredService );
@@ -119,13 +120,13 @@ class UDPDiscoveryServiceUnitTest
         discoveredService.setServiceAddress( host );
         discoveredService.setCacheNames( sameCacheNames );
         discoveredService.setServicePort( 1000 );
-        discoveredService.setLastHearFromTime( 100 );
+        discoveredService.setLastHearFromTime(Instant.ofEpochMilli(100));
 
         final DiscoveredService discoveredService2 = new DiscoveredService();
         discoveredService2.setServiceAddress( host );
         discoveredService2.setCacheNames( sameCacheNames );
         discoveredService2.setServicePort( 1000 );
-        discoveredService2.setLastHearFromTime( 500 );
+        discoveredService2.setLastHearFromTime(Instant.ofEpochMilli(500));
 
         // DO WORK
         service.addOrUpdateService( discoveredService );
@@ -164,7 +165,7 @@ class UDPDiscoveryServiceUnitTest
         discoveredService.setServiceAddress( host );
         discoveredService.setCacheNames( new ArrayList<>() );
         discoveredService.setServicePort( 1000 );
-        discoveredService.setLastHearFromTime( 100 );
+        discoveredService.setLastHearFromTime(Instant.ofEpochMilli(100));
 
         // DO WORK
         service.addOrUpdateService( discoveredService );
@@ -184,7 +185,7 @@ class UDPDiscoveryServiceUnitTest
         discoveredService.setServiceAddress( host );
         discoveredService.setCacheNames( new ArrayList<>() );
         discoveredService.setServicePort( 1000 );
-        discoveredService.setLastHearFromTime( 100 );
+        discoveredService.setLastHearFromTime(Instant.ofEpochMilli(100));
 
         service.addOrUpdateService( discoveredService );
 
diff --git a/src/site/xdoc/UpgradingFrom3x.xml 
b/src/site/xdoc/UpgradingFrom3x.xml
index 3a65fc2c..78d8ed91 100644
--- a/src/site/xdoc/UpgradingFrom3x.xml
+++ b/src/site/xdoc/UpgradingFrom3x.xml
@@ -89,12 +89,25 @@ 
jcs.auxiliary.blockDiskCache=org.apache.commons.jcs4.auxiliary.disk.block.BlockD
           You should be aware that data previously saved to auxiliaries will 
be deleted
           on startup. 
         </p>
+        <p>
+          JCS 4.0.0 tries to pull some long-standing configuration 
inconsistencies straight.
+          Note that configuration keys are case-sensitive. See the table of 
+          renamed or removed configuration keys <a href="#ccb">below</a>.
+        </p>
+        <p>
+          Time related configuration items are now represented as 
<code>java.time.Duration</code>
+          internally. The corresponding configuration file properties are 
being parsed using
+          <code>Duration.parse()</code> and use the syntax documented 
+          <a 
href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/time/Duration.html#parse(java.lang.CharSequence)">here</a>.
+          If parsing fails, the value is assumed to be a millisecond duration. 
See the table of 
+          affected configuration keys <a href="#ccb">below</a>.
+        </p>
       </subsection>
       <subsection name="Logging">
         <p>
-          JCS 4.0.0 uses a thin wrapper around the JDK9+ System.Logger 
interface for logging.
-          By default, JCS uses java.util.logging as implementation. For a 
better readability
-          we recommend to configure the logger formatting like this:
+          JCS 4.0.0 uses a thin wrapper around the JDK9+ 
<code>System.Logger</code> interface 
+          for logging. By default, JCS uses <code>java.util.logging</code> as 
implementation. 
+          For a better readability we recommend to configure the logger 
formatting like this:
         </p>
         <source><![CDATA[
 java.util.logging.FileHandler.formatter=java.util.logging.SimpleFormatter
@@ -121,8 +134,9 @@ java.util.logging.SimpleFormatter.format=[%1$tF %1$tT] %3$s 
[%4$-7s] %5$s %n
           Please note that several internals structures are not exported 
intentionally.
         </p>
       </subsection>
-      <subsection name="Changed Configuration Behavior">
+      <subsection name="Changed Configuration Behavior" id="ccb">
         <p>
+          <b>Breaking:</b>
           JCS 4.0.0 tries to pull some long-standing configuration 
inconsistencies straight.
           Note that configuration keys are case-sensitive.
           The following configuration keys have been renamed or removed:
@@ -179,6 +193,7 @@ java.util.logging.SimpleFormatter.format=[%1$tF %1$tT] %3$s 
[%4$-7s] %5$s %n
           environments.
         </p>
         <p>
+          <b>Breaking:</b>
           Time related configuration items are now represented as 
<code>java.time.Duration</code>
           internally. The corresponding configuration file properties are 
being parsed using
           <code>Duration.parse()</code> and use the syntax documented 
@@ -202,6 +217,16 @@ java.util.logging.SimpleFormatter.format=[%1$tF %1$tT] 
%3$s [%4$-7s] %5$s %n
               <td>ShrinkerInterval</td>
               <td>PT30s</td>
             </tr>
+            <tr>
+              <td>Element configuration (ElementAttributes)</td>
+              <td>MaxLife</td>
+              <td>PT-0.001s (unlimited)</td>
+            </tr>
+            <tr>
+              <td></td>
+              <td>MaxIdleTime</td>
+              <td>PT-0.001s (unlimited)</td>
+            </tr>
             <tr>
               <td>Thread Pool Configuration (thread_pool, 
PoolConfiguration)</td>
               <td>keepAliveTime</td>

Reply via email to