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 2026/02/12 18:29:03 UTC
(commons-jcs) 01/03: More records, less code
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 7998ef3b135456261f734f0b934c335522da2ca1
Author: Thomas Vandahl <tv...@apache.org>
AuthorDate: Thu Feb 12 17:12:46 2026 +0100
More records, less code
---
.../jcs4/auxiliary/disk/AbstractDiskCache.java | 2 +-
.../disk/block/BlockDiskElementDescriptor.java | 114 +++------------------
.../auxiliary/disk/block/BlockDiskKeyStore.java | 4 +-
.../jcs4/auxiliary/disk/indexed/IndexedDisk.java | 33 +++---
.../auxiliary/disk/indexed/IndexedDiskCache.java | 50 +++++----
.../disk/indexed/IndexedDiskElementDescriptor.java | 58 ++---------
.../jcs4/auxiliary/disk/jdbc/JDBCDiskCache.java | 25 +----
.../jcs4/auxiliary/disk/jdbc/TableState.java | 52 ++++------
.../auxiliary/disk/jdbc/mysql/MySQLDiskCache.java | 9 +-
.../disk/jdbc/mysql/MySQLTableOptimizer.java | 7 +-
.../lateral/LateralElementDescriptor.java | 97 ++++--------------
.../lateral/socket/tcp/LateralTCPCache.java | 8 +-
.../lateral/socket/tcp/LateralTCPCacheNoWait.java | 4 +-
.../lateral/socket/tcp/LateralTCPListener.java | 20 ++--
.../lateral/socket/tcp/LateralTCPService.java | 12 +--
.../remote/CommonRemoteCacheAttributes.java | 4 +-
.../jcs4/auxiliary/remote/RemoteLocation.java | 78 ++------------
.../commons/jcs4/auxiliary/remote/RemoteUtils.java | 2 +-
.../org/apache/commons/jcs4/engine/CacheInfo.java | 13 +--
.../jcs4/utils/discovery/UDPDiscoveryReceiver.java | 2 +-
.../jcs4/utils/discovery/UDPDiscoverySender.java | 6 +-
.../disk/indexed/IndexDiskCacheCountUnitTest.java | 13 ---
.../disk/jdbc/mysql/MySQLDiskCacheUnitTest.java | 3 +-
.../jcs4/auxiliary/remote/RemoteUtilsUnitTest.java | 8 +-
.../BasicRemoteCacheClientServerUnitTest.java | 2 +-
25 files changed, 167 insertions(+), 459 deletions(-)
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 6b8c950a..8165f561 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
@@ -264,7 +264,7 @@ public abstract class AbstractDiskCache<K, V>
// create queue
final CacheEventQueueFactory<K, V> fact = new CacheEventQueueFactory<>();
this.cacheEventQueue = fact.createCacheEventQueue(
- new MyCacheListener(), CacheInfo.listenerId, cacheName,
+ new MyCacheListener(), CacheInfo.INSTANCE.listenerId(), cacheName,
diskCacheAttributes.getEventQueuePoolName(),
diskCacheAttributes.getEventQueueType() );
diff --git a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/disk/block/BlockDiskElementDescriptor.java b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/disk/block/BlockDiskElementDescriptor.java
index 9fec545d..9a1ddb50 100644
--- a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/disk/block/BlockDiskElementDescriptor.java
+++ b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/disk/block/BlockDiskElementDescriptor.java
@@ -19,10 +19,6 @@ package org.apache.commons.jcs4.auxiliary.disk.block;
* under the License.
*/
-import java.io.Externalizable;
-import java.io.IOException;
-import java.io.ObjectInput;
-import java.io.ObjectOutput;
import java.io.Serializable;
import java.util.Arrays;
@@ -31,87 +27,17 @@ import java.util.Arrays;
* block addresses in memory. We don't need the length here, since all the blocks are the same size
* recycle bin.
*/
-public class BlockDiskElementDescriptor<K>
- implements Serializable, Externalizable
+public record BlockDiskElementDescriptor<K>(
+ /** The key */
+ K key,
+
+ /** The array of block numbers */
+ int[] blocks
+) implements Serializable
{
/** Don't change */
private static final long serialVersionUID = -1400659301208101411L;
- /** The key */
- private K key;
-
- /** The array of block numbers */
- private int[] blocks;
-
- /**
- * Default constructor
- */
- public BlockDiskElementDescriptor()
- {
- }
-
- /**
- * Constructs a new instance.
- *
- * @param key the key
- * @param blocks the data
- * @since 3.1
- */
- public BlockDiskElementDescriptor(final K key, final int[] blocks)
- {
- this.key = key;
- this.blocks = blocks;
- }
-
- /**
- * This holds the block numbers. An item my be dispersed between multiple blocks.
- *
- * @return the blocks.
- */
- public int[] getBlocks()
- {
- return blocks;
- }
-
- /**
- * @return the key.
- */
- public K getKey()
- {
- return key;
- }
-
- /**
- * Saves on reflection.
- * <p>
- * (non-Javadoc)
- * @see java.io.Externalizable#readExternal(java.io.ObjectInput)
- */
- @Override
- @SuppressWarnings("unchecked") // Need cast to K
- public void readExternal( final ObjectInput input )
- throws IOException, ClassNotFoundException
- {
- this.key = (K) input.readObject();
- this.blocks = (int[]) input.readObject();
- }
-
- /**
- * @param blocks The blocks to set.
- */
- public void setBlocks( final int[] blocks )
- {
- this.blocks = blocks;
- }
-
- /**
- * @param key The key to set.
- */
- public void setKey( final K key )
- {
- this.key = key;
- }
-
/**
* For debugging.
*
@@ -121,28 +47,14 @@ public class BlockDiskElementDescriptor<K>
public String toString()
{
final StringBuilder buf = new StringBuilder();
- buf.append( "\nBlockDiskElementDescriptor" );
- buf.append( "\n key [" + this.getKey() + "]" );
- buf.append( "\n blocks [" );
- if ( this.getBlocks() != null )
+ buf.append("\nBlockDiskElementDescriptor" );
+ buf.append("\n key [").append(this.key()).append("]");
+ buf.append("\n blocks [" );
+ if ( this.blocks() != null )
{
- Arrays.stream(this.getBlocks()).forEach(buf::append);
+ Arrays.stream(this.blocks()).forEach(buf::append);
}
- buf.append( "]" );
+ buf.append("]");
return buf.toString();
}
-
- /**
- * Saves on reflection.
- * <p>
- * (non-Javadoc)
- * @see java.io.Externalizable#writeExternal(java.io.ObjectOutput)
- */
- @Override
- public void writeExternal( final ObjectOutput output )
- throws IOException
- {
- output.writeObject( this.key );
- output.writeObject( this.blocks );
- }
}
diff --git a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/disk/block/BlockDiskKeyStore.java b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/disk/block/BlockDiskKeyStore.java
index ee397c03..f3a54f74 100644
--- a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/disk/block/BlockDiskKeyStore.java
+++ b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/disk/block/BlockDiskKeyStore.java
@@ -415,7 +415,7 @@ public class BlockDiskKeyStore<K>
serializer.deSerializeFrom(bc, null);
if (descriptor != null)
{
- keys.put(descriptor.getKey(), descriptor.getBlocks());
+ keys.put(descriptor.key(), descriptor.blocks());
}
}
catch (final EOFException e)
@@ -443,7 +443,7 @@ public class BlockDiskKeyStore<K>
BlockDiskElementDescriptor<K> descriptor = (BlockDiskElementDescriptor<K>) ois.readObject();
if (descriptor != null)
{
- keys.put(descriptor.getKey(), descriptor.getBlocks());
+ keys.put(descriptor.key(), descriptor.blocks());
}
}
}
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 47426ffd..955d5bc5 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
@@ -114,24 +114,24 @@ public class IndexedDisk implements AutoCloseable
*
* @param ded
* @param newPosition
+ * @return new IndexedDiskElementDescriptor with updated position
* @throws IOException
*/
- protected void move(final IndexedDiskElementDescriptor ded, final long newPosition)
+ protected IndexedDiskElementDescriptor move(final IndexedDiskElementDescriptor ded, final long newPosition)
throws IOException
{
final ByteBuffer datalength = ByteBuffer.allocate(HEADER_SIZE_BYTES);
- fc.read(datalength, ded.pos);
+ fc.read(datalength, ded.pos());
datalength.flip();
final int length = datalength.getInt();
- if (length != ded.len)
+ if (length != ded.len())
{
throw new IOException("Mismatched memory and disk length (" + length + ") for " + ded);
}
// TODO: more checks?
-
- long readPos = ded.pos;
+ long readPos = ded.pos();
long writePos = newPosition;
// header len + data len
@@ -153,7 +153,7 @@ public class IndexedDisk implements AutoCloseable
remaining -= chunkSize;
}
- ded.pos = newPosition;
+ return new IndexedDiskElementDescriptor(newPosition, ded.len());
}
/**
@@ -173,7 +173,7 @@ public class IndexedDisk implements AutoCloseable
String message = null;
boolean corrupted = false;
final long fileLength = fc.size();
- if (ded.pos > fileLength)
+ if (ded.pos() > fileLength)
{
corrupted = true;
message = "Record " + ded + " starts past EOF.";
@@ -181,15 +181,15 @@ public class IndexedDisk implements AutoCloseable
else
{
final ByteBuffer datalength = ByteBuffer.allocate(HEADER_SIZE_BYTES);
- fc.read(datalength, ded.pos);
+ fc.read(datalength, ded.pos());
datalength.flip();
final int datalen = datalength.getInt();
- if (ded.len != datalen)
+ if (ded.len() != datalen)
{
corrupted = true;
message = "Record " + ded + " does not match data length on disk (" + datalen + ")";
}
- else if (ded.pos + ded.len > fileLength)
+ else if (ded.pos() + ded.len() > fileLength)
{
corrupted = true;
message = "Record " + ded + " exceeds file length.";
@@ -202,8 +202,8 @@ public class IndexedDisk implements AutoCloseable
throw new IOException("The File Is Corrupt, need to reset");
}
- final ByteBuffer data = ByteBuffer.allocate(ded.len);
- fc.read(data, ded.pos + HEADER_SIZE_BYTES);
+ final ByteBuffer data = ByteBuffer.allocate(ded.len());
+ fc.read(data, ded.pos() + HEADER_SIZE_BYTES);
data.flip();
return elementSerializer.deSerialize(data.array(), null);
@@ -246,14 +246,13 @@ public class IndexedDisk implements AutoCloseable
protected boolean write(final IndexedDiskElementDescriptor ded, final byte[] data)
throws IOException
{
- final long pos = ded.pos;
if (log.isTraceEnabled())
{
- log.trace("write> pos={0}", pos);
+ log.trace("write> pos={0}", ded.pos());
log.trace("{0} -- data.length = {1}", fc, data.length);
}
- if (data.length != ded.len)
+ if (data.length != ded.len())
{
throw new IOException("Mismatched descriptor and data lengths");
}
@@ -262,12 +261,12 @@ public class IndexedDisk implements AutoCloseable
headerBuffer.putInt(data.length);
// write the header
headerBuffer.flip();
- int written = fc.write(headerBuffer, pos);
+ int written = fc.write(headerBuffer, ded.pos());
assert written == HEADER_SIZE_BYTES;
//write the data
final ByteBuffer dataBuffer = ByteBuffer.wrap(data);
- written = fc.write(dataBuffer, pos + HEADER_SIZE_BYTES);
+ written = fc.write(dataBuffer, ded.pos() + HEADER_SIZE_BYTES);
return written == data.length;
}
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 4c3c0421..00df55a8 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
@@ -126,7 +126,7 @@ public class IndexedDiskCache<K, V> extends AbstractDiskCache<K, V>
// keep the content size in kB, so 2^31 kB is reasonable value
private void addLengthToCacheSize(final IndexedDiskElementDescriptor value)
{
- contentSize.addAndGet((value.len + IndexedDisk.HEADER_SIZE_BYTES) / 1024 + 1);
+ contentSize.addAndGet((value.len() + IndexedDisk.HEADER_SIZE_BYTES) / 1024 + 1);
}
/**
@@ -206,7 +206,7 @@ public class IndexedDiskCache<K, V> extends AbstractDiskCache<K, V>
// keep the content size in kB, so 2^31 kB is reasonable value
private void subLengthFromCacheSize(final IndexedDiskElementDescriptor value)
{
- contentSize.addAndGet((value.len + IndexedDisk.HEADER_SIZE_BYTES) / -1024 - 1);
+ contentSize.addAndGet((value.len() + IndexedDisk.HEADER_SIZE_BYTES) / -1024 - 1);
}
}
@@ -321,7 +321,7 @@ public class IndexedDiskCache<K, V> extends AbstractDiskCache<K, V>
// Make a clean file name
this.fileName = getCacheName().replaceAll("[^a-zA-Z0-9-_\\.]", "_");
this.keyHash = createInitialKeyMap();
- this.queuedPutList = new ConcurrentSkipListSet<>(Comparator.comparing(ded1 -> ded1.pos));
+ this.queuedPutList = new ConcurrentSkipListSet<>(Comparator.comparing(ded1 -> ded1.pos()));
this.recycle = new ConcurrentSkipListSet<>();
try
@@ -392,7 +392,7 @@ public class IndexedDiskCache<K, V> extends AbstractDiskCache<K, V>
{
if (ded != null)
{
- final int amount = ded.len + IndexedDisk.HEADER_SIZE_BYTES;
+ final int amount = ded.len() + IndexedDisk.HEADER_SIZE_BYTES;
if (add)
{
@@ -420,13 +420,13 @@ public class IndexedDiskCache<K, V> extends AbstractDiskCache<K, V>
boolean isOk = true;
long expectedNextPos = 0;
for (final IndexedDiskElementDescriptor ded : sortedDescriptors) {
- if (expectedNextPos > ded.pos)
+ if (expectedNextPos > ded.pos())
{
log.error("{0}: Corrupt file: overlapping deds {1}", logCacheName, ded);
isOk = false;
break;
}
- expectedNextPos = ded.pos + IndexedDisk.HEADER_SIZE_BYTES + ded.len;
+ expectedNextPos = ded.pos() + IndexedDisk.HEADER_SIZE_BYTES + ded.len();
}
log.debug("{0}: Check for DED overlaps took {1} ms.", () -> logCacheName,
timer::getElapsedTime);
@@ -456,7 +456,7 @@ public class IndexedDiskCache<K, V> extends AbstractDiskCache<K, V>
final long fileLength = dataFile.length();
final IndexedDiskElementDescriptor corruptDed = keyHash.values().stream()
- .filter(ded -> ded.pos + IndexedDisk.HEADER_SIZE_BYTES + ded.len > fileLength)
+ .filter(ded -> ded.pos() + IndexedDisk.HEADER_SIZE_BYTES + ded.len() > fileLength)
.findFirst()
.orElse(null);
@@ -464,7 +464,7 @@ public class IndexedDiskCache<K, V> extends AbstractDiskCache<K, V>
{
isOk = false;
log.warn("{0}: The dataFile is corrupted!\n raf.length() = {1}\n ded.pos = {2}",
- logCacheName, fileLength, corruptDed.pos);
+ logCacheName, fileLength, corruptDed.pos());
}
else if (checkForDedOverlaps)
{
@@ -525,7 +525,7 @@ public class IndexedDiskCache<K, V> extends AbstractDiskCache<K, V>
private Collection<IndexedDiskElementDescriptor> createPositionSortedDescriptorList()
{
final List<IndexedDiskElementDescriptor> defragList = new ArrayList<>(keyHash.values());
- defragList.sort(Comparator.comparing(ded1 -> ded1.pos));
+ defragList.sort(Comparator.comparing(ded1 -> ded1.pos()));
return defragList;
}
@@ -558,11 +558,12 @@ public class IndexedDiskCache<K, V> extends AbstractDiskCache<K, V>
storageLock.writeLock().lock();
try
{
- if (expectedNextPos != element.pos)
+ IndexedDiskElementDescriptor newDed = element;
+ if (expectedNextPos != element.pos())
{
- dataFile.move(element, expectedNextPos);
+ newDed = dataFile.move(element, expectedNextPos);
}
- expectedNextPos = element.pos + IndexedDisk.HEADER_SIZE_BYTES + element.len;
+ expectedNextPos = newDed.pos() + IndexedDisk.HEADER_SIZE_BYTES + newDed.len();
}
finally
{
@@ -688,7 +689,7 @@ public class IndexedDiskCache<K, V> extends AbstractDiskCache<K, V>
/**
* For debugging. This dumps the values by default.
*/
- public void dump()
+ protected void dump()
{
dump(true);
}
@@ -700,7 +701,7 @@ public class IndexedDiskCache<K, V> extends AbstractDiskCache<K, V>
* @param dumpValues
* A boolean indicating if values should be dumped.
*/
- public void dump(final boolean dumpValues)
+ protected void dump(final boolean dumpValues)
{
if (log.isTraceEnabled())
{
@@ -713,7 +714,7 @@ public class IndexedDiskCache<K, V> extends AbstractDiskCache<K, V>
log.trace("{0}: [dump] Disk element, key: {1}, pos: {2}, len: {3}" +
(dumpValues ? ", val: " + get(key) : ""),
- logCacheName, key, ded.pos, ded.len);
+ logCacheName, key, ded.pos(), ded.len());
}
}
}
@@ -1434,12 +1435,9 @@ public class IndexedDiskCache<K, V> extends AbstractDiskCache<K, V>
// Item with the same key already exists in file.
// Try to reuse the location if possible.
- if (old != null && data.length <= old.len)
+ if (old != null && data.length <= old.len())
{
- // Reuse the old ded. The defrag relies on ded updates by reference, not
- // replacement.
- ded = old;
- ded.len = data.length;
+ ded = new IndexedDiskElementDescriptor(old.pos(), data.length);
}
else
{
@@ -1453,18 +1451,14 @@ public class IndexedDiskCache<K, V> extends AbstractDiskCache<K, V>
{
// remove element from recycle bin
recycle.remove(rep);
- ded = rep;
- ded.len = data.length;
+ ded = new IndexedDiskElementDescriptor(rep.pos(), data.length);
recycleCnt++;
this.adjustBytesFree(ded, false);
log.debug("{0}: using recycled ded {1} rep.len = {2} ded.len = {3}",
- logCacheName, ded.pos, rep.len, ded.len);
+ logCacheName, ded.pos(), rep.len(), ded.len());
}
}
- // Put it in the map
- keyHash.put(ce.getKey(), ded);
-
if (queueInput)
{
queuedPutList.add(ded);
@@ -1479,6 +1473,8 @@ public class IndexedDiskCache<K, V> extends AbstractDiskCache<K, V>
}
}
+ // Put it in the map
+ keyHash.put(ce.getKey(), ded);
dataFile.write(ded, data);
}
finally
@@ -1487,7 +1483,7 @@ public class IndexedDiskCache<K, V> extends AbstractDiskCache<K, V>
}
log.debug("{0}: Put to file: {1}, key: {2}, position: {3}, size: {4}",
- logCacheName, fileName, ce.getKey(), ded.pos, ded.len);
+ logCacheName, fileName, ce.getKey(), ded.pos(), ded.len());
}
catch (final IOException e)
{
diff --git a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/disk/indexed/IndexedDiskElementDescriptor.java b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/disk/indexed/IndexedDiskElementDescriptor.java
index 34a5bcfc..7c08ccfb 100644
--- a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/disk/indexed/IndexedDiskElementDescriptor.java
+++ b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/disk/indexed/IndexedDiskElementDescriptor.java
@@ -25,30 +25,17 @@ import java.io.Serializable;
* Disk objects are located by descriptor entries. These are saved on shutdown and loaded into
* memory on startup.
*/
-public class IndexedDiskElementDescriptor
- implements Serializable, Comparable<IndexedDiskElementDescriptor>
+public record IndexedDiskElementDescriptor(
+ /** Position of the cache data entry on disk. */
+ long pos,
+
+ /** Number of bytes the serialized form of the cache data takes. */
+ int len
+) implements Serializable, Comparable<IndexedDiskElementDescriptor>
{
/** Don't change */
private static final long serialVersionUID = -3029163572847659450L;
- /** Position of the cache data entry on disk. */
- long pos;
-
- /** Number of bytes the serialized form of the cache data takes. */
- int len;
-
- /**
- * Constructs a usable disk element descriptor.
- *
- * @param pos
- * @param len
- */
- public IndexedDiskElementDescriptor( final long pos, final int len )
- {
- this.pos = pos;
- this.len = len;
- }
-
/**
* Compares based on length, then on pos descending.
*
@@ -72,33 +59,6 @@ public class IndexedDiskElementDescriptor
return lenCompare;
}
- /**
- * @see Object#equals(Object)
- */
- @Override
- public boolean equals(final Object o)
- {
- if (o == null)
- {
- return false;
- }
- if (o instanceof IndexedDiskElementDescriptor ided)
- {
- return pos == ided.pos && len == ided.len;
- }
-
- return false;
- }
-
- /**
- * @see Object#hashCode()
- */
- @Override
- public int hashCode()
- {
- return Long.valueOf(this.pos).hashCode() ^ Integer.valueOf(len).hashCode();
- }
-
/**
* @return debug string
*/
@@ -107,8 +67,8 @@ public class IndexedDiskElementDescriptor
{
final StringBuilder buf = new StringBuilder();
buf.append( "[DED: " );
- buf.append( " pos = " + pos );
- buf.append( " len = " + len );
+ buf.append( " pos = ").append(pos);
+ buf.append( " len = ").append(len);
buf.append( "]" );
return buf.toString();
}
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 fd35af49..3e6e3a90 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
@@ -34,6 +34,7 @@ import javax.sql.DataSource;
import org.apache.commons.jcs4.auxiliary.AuxiliaryCacheAttributes;
import org.apache.commons.jcs4.auxiliary.disk.AbstractDiskCache;
+import org.apache.commons.jcs4.auxiliary.disk.jdbc.TableState.TableStateType;
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;
@@ -129,8 +130,8 @@ public class JDBCDiskCache<K, V>
{
super( cattr );
- setTableState( tableState );
- setJdbcDiskCacheAttributes( cattr );
+ this.tableState = tableState;
+ this.jdbcDiskCacheAttributes = cattr;
log.info( "jdbcDiskCacheAttributes = {0}", this::getJdbcDiskCacheAttributes);
@@ -184,7 +185,7 @@ public class JDBCDiskCache<K, V>
if (result.next())
{
- getTableState().setState( TableState.DELETE_RUNNING );
+ getTableState().setState( TableStateType.DELETE_RUNNING );
final long now = System.currentTimeMillis() / 1000;
final String sql = String.format(SQL_DELETE_EXPIRED, getTableName());
@@ -222,7 +223,7 @@ public class JDBCDiskCache<K, V>
}
finally
{
- getTableState().setState( TableState.FREE );
+ getTableState().setState( TableStateType.FREE );
}
return deleted;
@@ -299,14 +300,6 @@ public class JDBCDiskCache<K, V>
return jdbcDiskCacheAttributes;
}
- /**
- * @param jdbcDiskCacheAttributes The jdbcDiskCacheAttributes to set.
- */
- protected void setJdbcDiskCacheAttributes( final JDBCDiskCacheAttributes jdbcDiskCacheAttributes )
- {
- this.jdbcDiskCacheAttributes = jdbcDiskCacheAttributes;
- }
-
/**
* Return the keys in this cache.
*
@@ -393,14 +386,6 @@ public class JDBCDiskCache<K, V>
return tableState;
}
- /**
- * @param tableState The tableState to set.
- */
- public void setTableState( final TableState tableState )
- {
- this.tableState = tableState;
- }
-
/**
* If test before insert it true, we check to see if the element exists. If the element exists
* we will update. Otherwise, we try inserting. If this fails because the item exists, we will
diff --git a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/disk/jdbc/TableState.java b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/disk/jdbc/TableState.java
index 46057af8..f1dc91bc 100644
--- a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/disk/jdbc/TableState.java
+++ b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/disk/jdbc/TableState.java
@@ -33,23 +33,26 @@ public class TableState
/** Don't change. */
private static final long serialVersionUID = -6625081552084964885L;
- /**
- * The table is free. It can be accessed and no potentially table locking
- * jobs are running.
- */
- public static final int FREE = 0;
+ public enum TableStateType
+ {
+ /**
+ * The table is free. It can be accessed and no potentially table locking
+ * jobs are running.
+ */
+ FREE,
- /** A potentially table locking deletion is running */
- public static final int DELETE_RUNNING = 1;
+ /** A potentially table locking deletion is running */
+ DELETE_RUNNING,
- /** A table locking optimization is running. */
- public static final int OPTIMIZATION_RUNNING = 2;
+ /** A table locking optimization is running. */
+ OPTIMIZATION_RUNNING
+ }
/** Name of the table whose state this reflects. */
private String tableName;
/** We might want to add error */
- private int state = FREE;
+ private TableStateType state = TableStateType.FREE;
/**
* Constructs a usable table state.
@@ -58,43 +61,26 @@ public class TableState
*/
public TableState( final String tableName )
{
- setTableName( tableName );
+ this.tableName = tableName;
}
/**
* @return the state.
*/
- public int getState()
+ public TableStateType getState()
{
return state;
}
- /**
- * @return the tableName.
- */
- public String getTableName()
- {
- return tableName;
- }
-
/**
* @param state
* The state to set.
*/
- public void setState( final int state )
+ public void setState(TableStateType state)
{
this.state = state;
}
- /**
- * @param tableName
- * The tableName to set.
- */
- public void setTableName( final String tableName )
- {
- this.tableName = tableName;
- }
-
/**
* Converts this instance to a String for debugging purposes.
*
@@ -104,9 +90,9 @@ public class TableState
public String toString()
{
final StringBuilder str = new StringBuilder();
- str.append( "TableState " );
- str.append( "\n TableName = " + getTableName() );
- str.append( "\n State = " + getState() );
+ str.append("TableState " );
+ str.append("\n TableName = ").append(tableName);
+ str.append("\n State = ").append(getState());
return str.toString();
}
}
diff --git a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/disk/jdbc/mysql/MySQLDiskCache.java b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/disk/jdbc/mysql/MySQLDiskCache.java
index 1fc3ad1b..723ce0b3 100644
--- a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/disk/jdbc/mysql/MySQLDiskCache.java
+++ b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/disk/jdbc/mysql/MySQLDiskCache.java
@@ -24,6 +24,7 @@ import java.util.Map;
import org.apache.commons.jcs4.auxiliary.disk.jdbc.JDBCDiskCache;
import org.apache.commons.jcs4.auxiliary.disk.jdbc.TableState;
+import org.apache.commons.jcs4.auxiliary.disk.jdbc.TableState.TableStateType;
import org.apache.commons.jcs4.auxiliary.disk.jdbc.dsfactory.DataSourceFactory;
import org.apache.commons.jcs4.engine.behavior.ICacheElement;
import org.apache.commons.jcs4.log.Log;
@@ -75,7 +76,7 @@ public class MySQLDiskCache<K, V>
@Override
protected int deleteExpired()
{
- if (getTableState().getState() == TableState.OPTIMIZATION_RUNNING &&
+ if (getTableState().getState() == TableStateType.OPTIMIZATION_RUNNING &&
this.mySQLDiskCacheAttributes.isBalkDuringOptimization())
{
return -1;
@@ -93,7 +94,7 @@ public class MySQLDiskCache<K, V>
@Override
protected ICacheElement<K, V> processGet( final K key )
{
- if (getTableState().getState() == TableState.OPTIMIZATION_RUNNING &&
+ if (getTableState().getState() == TableStateType.OPTIMIZATION_RUNNING &&
this.mySQLDiskCacheAttributes.isBalkDuringOptimization())
{
return null;
@@ -111,7 +112,7 @@ public class MySQLDiskCache<K, V>
@Override
protected Map<K, ICacheElement<K, V>> processGetMatching( final String pattern )
{
- if (getTableState().getState() == TableState.OPTIMIZATION_RUNNING &&
+ if (getTableState().getState() == TableStateType.OPTIMIZATION_RUNNING &&
this.mySQLDiskCacheAttributes.isBalkDuringOptimization())
{
return null;
@@ -128,7 +129,7 @@ public class MySQLDiskCache<K, V>
@Override
protected void processUpdate( final ICacheElement<K, V> element )
{
- if (getTableState().getState() == TableState.OPTIMIZATION_RUNNING &&
+ if (getTableState().getState() == TableStateType.OPTIMIZATION_RUNNING &&
this.mySQLDiskCacheAttributes.isBalkDuringOptimization())
{
return;
diff --git a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/disk/jdbc/mysql/MySQLTableOptimizer.java b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/disk/jdbc/mysql/MySQLTableOptimizer.java
index 73fff5e9..760c238a 100644
--- a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/disk/jdbc/mysql/MySQLTableOptimizer.java
+++ b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/disk/jdbc/mysql/MySQLTableOptimizer.java
@@ -27,6 +27,7 @@ import java.sql.Statement;
import javax.sql.DataSource;
import org.apache.commons.jcs4.auxiliary.disk.jdbc.TableState;
+import org.apache.commons.jcs4.auxiliary.disk.jdbc.TableState.TableStateType;
import org.apache.commons.jcs4.log.Log;
import org.apache.commons.jcs4.utils.timing.ElapsedTimer;
@@ -154,7 +155,7 @@ public class MySQLTableOptimizer
final ElapsedTimer timer = new ElapsedTimer();
boolean success = false;
- if ( tableState.getState() == TableState.OPTIMIZATION_RUNNING )
+ if ( tableState.getState() == TableStateType.OPTIMIZATION_RUNNING )
{
log.warn( "Skipping optimization. Optimize was called, but the "
+ "table state indicates that an optimization is currently running." );
@@ -163,7 +164,7 @@ public class MySQLTableOptimizer
try
{
- tableState.setState( TableState.OPTIMIZATION_RUNNING );
+ tableState.setState( TableStateType.OPTIMIZATION_RUNNING );
log.info( "Optimizing table [{0}]", getTableName());
try (Connection con = dataSource.getConnection())
@@ -219,7 +220,7 @@ public class MySQLTableOptimizer
}
finally
{
- tableState.setState( TableState.FREE );
+ tableState.setState( TableStateType.FREE );
log.info( "Optimization of table [{0}] took {1} ms.",
this::getTableName, timer::getElapsedTime);
diff --git a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/lateral/LateralElementDescriptor.java b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/lateral/LateralElementDescriptor.java
index 4cc9e124..e77ccac8 100644
--- a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/lateral/LateralElementDescriptor.java
+++ b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/lateral/LateralElementDescriptor.java
@@ -28,39 +28,28 @@ import org.apache.commons.jcs4.engine.behavior.ICacheElement;
* JCS-TCP-Lateral packet. The headers specify the action the receiver should
* take.
*/
-public class LateralElementDescriptor<K, V>
- implements Serializable
+public record LateralElementDescriptor<K, V>(
+ /** The Cache Element that we are distributing. */
+ ICacheElement<K, V> payload,
+
+ /** The operation has been requested by the client. */
+ LateralCommand command,
+
+ /**
+ * The id of the source of the request. This is used to prevent infinite
+ * loops.
+ */
+ long requesterId,
+
+ /**
+ * The hash code value for this element.
+ */
+ int valHashCode
+) implements Serializable
{
/** Don't change */
private static final long serialVersionUID = 5268222498076063575L;
- /** The Cache Element that we are distributing. */
- public ICacheElement<K, V> ce;
-
- /**
- * The id of the source of the request. This is used to prevent infinite
- * loops.
- */
- public long requesterId;
-
- /** The operation has been requested by the client. */
- public LateralCommand command = LateralCommand.UPDATE;
-
- /**
- * The hash code value for this element.
- */
- public int valHashCode = -1;
-
- /**
- * Constructor for the LateralElementDescriptor object
- *
- * @param ce ICacheElement<K, V> payload
- */
- public LateralElementDescriptor( final ICacheElement<K, V> ce )
- {
- this.ce = ce;
- }
-
/**
* Constructor for the LateralElementDescriptor object
*
@@ -70,8 +59,7 @@ public class LateralElementDescriptor<K, V>
*/
public LateralElementDescriptor( final ICacheElement<K, V> ce, final LateralCommand command)
{
- this(ce);
- this.command = command;
+ this(ce, command, 0, -1);
}
/**
@@ -84,50 +72,7 @@ public class LateralElementDescriptor<K, V>
*/
public LateralElementDescriptor( final ICacheElement<K, V> ce, final LateralCommand command, final long requesterId)
{
- this(ce, command);
- this.requesterId = requesterId;
- }
-
- /**
- * Return operation requested by the client
- *
- * @return the command
- * @since 3.1
- */
- public LateralCommand getCommand()
- {
- return command;
- }
-
- /**
- * Return payload
- *
- * @return the ce
- * @since 3.1
- */
- public ICacheElement<K, V> getPayload()
- {
- return ce;
- }
-
- /**
- * Return id of the source of the request
- *
- * @return the requesterId
- * @since 3.1
- */
- public long getRequesterId()
- {
- return requesterId;
- }
-
- /**
- * @return the valHashCode
- * @since 3.1
- */
- public int getValHashCode()
- {
- return valHashCode;
+ this(ce, command, requesterId, -1);
}
/**
@@ -140,7 +85,7 @@ public class LateralElementDescriptor<K, V>
buf.append( "\n LateralElementDescriptor " );
buf.append( "\n command = [" + this.command + "]" );
buf.append( "\n valHashCode = [" + this.valHashCode + "]" );
- buf.append( "\n ICacheElement = [" + this.ce + "]" );
+ buf.append( "\n ICacheElement = [" + this.payload + "]" );
return buf.toString();
}
}
diff --git a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/lateral/socket/tcp/LateralTCPCache.java b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/lateral/socket/tcp/LateralTCPCache.java
index 6ac44da0..be1c7852 100644
--- a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/lateral/socket/tcp/LateralTCPCache.java
+++ b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/lateral/socket/tcp/LateralTCPCache.java
@@ -320,7 +320,7 @@ public class LateralTCPCache<K, V>
try
{
- lateralCacheService.remove( cacheName, key, CacheInfo.listenerId );
+ lateralCacheService.remove( cacheName, key, CacheInfo.INSTANCE.listenerId());
}
catch ( final IOException ex )
{
@@ -341,7 +341,7 @@ public class LateralTCPCache<K, V>
{
try
{
- lateralCacheService.removeAll( cacheName, CacheInfo.listenerId );
+ lateralCacheService.removeAll( cacheName, CacheInfo.INSTANCE.listenerId());
}
catch ( final IOException ex )
{
@@ -364,8 +364,8 @@ public class LateralTCPCache<K, V>
if (ce != null)
{
log.debug( "update: lateral = [{0}], CacheInfo.listenerId = {1}",
- lateralCacheService, CacheInfo.listenerId );
- lateralCacheService.update( ce, CacheInfo.listenerId );
+ lateralCacheService, CacheInfo.INSTANCE.listenerId());
+ lateralCacheService.update( ce, CacheInfo.INSTANCE.listenerId());
}
}
catch ( final IOException ex )
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 02a99d57..e8f58788 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
@@ -86,7 +86,7 @@ public class LateralTCPCacheNoWait<K, V>
final CacheEventQueueFactory<K, V> fact = new CacheEventQueueFactory<>();
this.eventQueue = fact.createCacheEventQueue( new CacheAdaptor<>( cache ),
- CacheInfo.listenerId, cache.getCacheName(),
+ CacheInfo.INSTANCE.listenerId(), cache.getCacheName(),
getAuxiliaryCacheAttributes().getEventQueuePoolName(),
getAuxiliaryCacheAttributes().getEventQueueType() );
@@ -392,7 +392,7 @@ public class LateralTCPCacheNoWait<K, V>
}
final CacheEventQueueFactory<K, V> fact = new CacheEventQueueFactory<>();
this.eventQueue = fact.createCacheEventQueue( new CacheAdaptor<>( cache ),
- CacheInfo.listenerId, cache.getCacheName(),
+ CacheInfo.INSTANCE.listenerId(), cache.getCacheName(),
getAuxiliaryCacheAttributes().getEventQueuePoolName(),
getAuxiliaryCacheAttributes().getEventQueueType() );
}
diff --git a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/lateral/socket/tcp/LateralTCPListener.java b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/lateral/socket/tcp/LateralTCPListener.java
index 29804712..f8750128 100644
--- a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/lateral/socket/tcp/LateralTCPListener.java
+++ b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/lateral/socket/tcp/LateralTCPListener.java
@@ -114,7 +114,7 @@ public class LateralTCPListener<K, V>
* Use the vmid by default. This can be set for testing. If we ever need to run more than one
* per vm, then we need a new technique.
*/
- private long listenerId = CacheInfo.listenerId;
+ private long listenerId = CacheInfo.INSTANCE.listenerId();
/** Is this shut down? */
private final AtomicBoolean shutdown = new AtomicBoolean();
@@ -232,7 +232,7 @@ public class LateralTCPListener<K, V>
return;
}
- if ( led.getRequesterId() == getListenerId() )
+ if ( led.requesterId() == getListenerId() )
{
log.debug( "from self" );
}
@@ -292,35 +292,35 @@ public class LateralTCPListener<K, V>
*/
private Object handleElement(final LateralElementDescriptor<K, V> led) throws IOException
{
- final String cacheName = led.getPayload().getCacheName();
- final K key = led.getPayload().getKey();
+ final String cacheName = led.payload().getCacheName();
+ final K key = led.payload().getKey();
Object obj = null;
- switch (led.getCommand())
+ switch (led.command())
{
case UPDATE:
- handlePut(led.getPayload());
+ handlePut(led.payload());
break;
case REMOVE:
// if a hash code 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 &&
+ if (led.valHashCode() != -1 &&
getTcpLateralCacheAttributes().isFilterRemoveByHashCode())
{
final ICacheElement<K, V> test = getCache( cacheName ).localGet( key );
if ( test != null )
{
- if ( test.getVal().hashCode() == led.getValHashCode() )
+ if ( test.getVal().hashCode() == led.valHashCode() )
{
log.debug( "Filtering detected identical hashCode [{0}], "
+ "not issuing a remove for led {1}",
- led.getValHashCode(), led );
+ led.valHashCode(), led );
return null;
}
log.debug( "Different hash codes, in cache [{0}] sent [{1}]",
- test.getVal()::hashCode, led::getValHashCode );
+ test.getVal()::hashCode, led::valHashCode );
}
}
handleRemove( cacheName, key );
diff --git a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/lateral/socket/tcp/LateralTCPService.java b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/lateral/socket/tcp/LateralTCPService.java
index 6af8fb8c..2f8ab57f 100644
--- a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/lateral/socket/tcp/LateralTCPService.java
+++ b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/lateral/socket/tcp/LateralTCPService.java
@@ -54,7 +54,7 @@ public class LateralTCPService<K, V>
private final LateralTCPSender sender;
/** Use the vmid by default */
- private long listenerId = CacheInfo.listenerId;
+ private long listenerId = CacheInfo.INSTANCE.listenerId();
/**
* Constructor for the LateralTCPService object
@@ -131,8 +131,7 @@ public class LateralTCPService<K, V>
{
final CacheElement<K, V> ce = new CacheElement<>( cacheName, key, null );
final LateralElementDescriptor<K, V> led =
- new LateralElementDescriptor<>(ce, LateralCommand.GET);
- // led.requesterId = requesterId; // later
+ new LateralElementDescriptor<>(ce, LateralCommand.GET, requesterId);
@SuppressWarnings("unchecked") // Need to cast from Object
final
ICacheElement<K, V> response = (ICacheElement<K, V>)sender.sendAndReceive( led );
@@ -211,8 +210,7 @@ public class LateralTCPService<K, V>
}
final CacheElement<String, String> ce = new CacheElement<>( cacheName, pattern, null );
final LateralElementDescriptor<String, String> led =
- new LateralElementDescriptor<>(ce, LateralCommand.GET_MATCHING);
- // led.requesterId = requesterId; // later
+ new LateralElementDescriptor<>(ce, LateralCommand.GET_MATCHING, requesterId);
final Object response = sender.sendAndReceive( led );
if ( response != null )
@@ -391,8 +389,8 @@ public class LateralTCPService<K, V>
// set the value to null so we don't send the item
final CacheElement<K, V> ce = new CacheElement<>( item.getCacheName(), item.getKey(), null );
final LateralElementDescriptor<K, V> led =
- new LateralElementDescriptor<>(ce, LateralCommand.REMOVE, requesterId);
- led.valHashCode = item.getVal().hashCode();
+ new LateralElementDescriptor<>(ce, LateralCommand.REMOVE, requesterId,
+ item.getVal().hashCode());
sender.send( led );
}
}
diff --git a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/CommonRemoteCacheAttributes.java b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/CommonRemoteCacheAttributes.java
index 9668a9e0..4a801fcf 100644
--- a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/CommonRemoteCacheAttributes.java
+++ b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/CommonRemoteCacheAttributes.java
@@ -265,8 +265,8 @@ public abstract class CommonRemoteCacheAttributes
buf.append( "\n RemoteCacheAttributes ");
if (this.location != null)
{
- buf.append( "\n remoteHost = [").append(this.location.getHost()).append("]");
- buf.append( "\n remotePort = [").append(this.location.getPort()).append("]");
+ buf.append( "\n remoteHost = [").append(this.location.host()).append("]");
+ buf.append( "\n remotePort = [").append(this.location.port()).append("]");
}
buf.append( "\n cacheName = [").append(getCacheName()).append("]");
buf.append( "\n remoteType = [").append(remoteType).append("]");
diff --git a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/RemoteLocation.java b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/RemoteLocation.java
index 6df2938d..9bd45d72 100644
--- a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/RemoteLocation.java
+++ b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/RemoteLocation.java
@@ -27,7 +27,13 @@ import org.apache.commons.jcs4.log.Log;
/**
* Location of the RMI registry.
*/
-public final class RemoteLocation
+public record RemoteLocation(
+ /** Host name */
+ String host,
+
+ /** Port */
+ int port
+)
{
/** The logger. */
private static final Log log = Log.getLog( RemoteLocation.class );
@@ -48,79 +54,13 @@ public final class RemoteLocation
if (match.find() && match.groupCount() == 2)
{
- return new RemoteLocation( match.group(1), Integer.parseInt( match.group(2) ) );
+ return new RemoteLocation(match.group(1), Integer.parseInt( match.group(2)));
}
- log.error("Invalid server descriptor: {0}", server);
+ log.error("Invalid server descriptor: {0}", server);
return null;
}
- /** Host name */
- private final String host;
-
- /** Port */
- private final int port;
-
- /**
- * Constructor for the Location object
- *
- * @param host
- * @param port
- */
- public RemoteLocation( final String host, final int port )
- {
- this.host = host;
- this.port = port;
- }
-
- /**
- * @param obj
- * @return true if the host and port are equal
- */
- @Override
- public boolean equals( final Object obj )
- {
- if ( obj == this )
- {
- return true;
- }
- if (obj instanceof RemoteLocation l)
- {
- if ( this.host == null )
- {
- return l.host == null && port == l.port;
- }
- return host.equals( l.host ) && port == l.port;
- }
-
- return false;
- }
-
- /**
- * @return the host
- */
- public String getHost()
- {
- return host;
- }
-
- /**
- * @return the port
- */
- public int getPort()
- {
- return port;
- }
-
- /**
- * @return int
- */
- @Override
- public int hashCode()
- {
- return host == null ? port : host.hashCode() ^ port;
- }
-
/**
* @see Object#toString()
*/
diff --git a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/RemoteUtils.java b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/RemoteUtils.java
index acff24c2..53f89ea9 100644
--- a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/RemoteUtils.java
+++ b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/RemoteUtils.java
@@ -165,7 +165,7 @@ public class RemoteUtils
*/
public static String getNamingURL(final RemoteLocation location, final String serviceName)
{
- return getNamingURL(location.getHost(), location.getPort(), serviceName);
+ return getNamingURL(location.host(), location.port(), serviceName);
}
/**
diff --git a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/CacheInfo.java b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/CacheInfo.java
index 0482f6c9..d703571a 100644
--- a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/CacheInfo.java
+++ b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/CacheInfo.java
@@ -24,23 +24,20 @@ import java.rmi.dgc.VMID;
/**
* This is a static variable holder for the distribution auxiliaries that need something like a vmid.
*/
-public final class CacheInfo
+public record CacheInfo(
+ long listenerId
+)
{
/**
* Used to identify a client, so we can run multiple clients off one host.
* Need since there is no way to identify a client other than by host in
* rmi.
- * <p>
- * TODO: may have some trouble in failover mode if the cache keeps its old
- * id. We may need to reset this when moving into failover.
*/
- private static final VMID vmid = new VMID();
-
- /** By default this is the hash code of the VMID */
- public static final long listenerId = vmid.hashCode();
+ public static final CacheInfo INSTANCE = new CacheInfo();
/** Shouldn't be instantiated */
private CacheInfo()
{
+ this(new VMID().hashCode());
}
}
diff --git a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/utils/discovery/UDPDiscoveryReceiver.java b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/utils/discovery/UDPDiscoveryReceiver.java
index fdbe9069..2ec7c033 100644
--- a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/utils/discovery/UDPDiscoveryReceiver.java
+++ b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/utils/discovery/UDPDiscoveryReceiver.java
@@ -200,7 +200,7 @@ public class UDPDiscoveryReceiver
private void handleMessage(final UDPDiscoveryMessage message)
{
// consider comparing ports here instead.
- if ( message.getRequesterId() == CacheInfo.listenerId )
+ if ( message.getRequesterId() == CacheInfo.INSTANCE.listenerId())
{
log.debug( "Ignoring message sent from self" );
}
diff --git a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/utils/discovery/UDPDiscoverySender.java b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/utils/discovery/UDPDiscoverySender.java
index 0b2324b8..8f47e853 100644
--- a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/utils/discovery/UDPDiscoverySender.java
+++ b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/utils/discovery/UDPDiscoverySender.java
@@ -158,7 +158,7 @@ public class UDPDiscoverySender implements AutoCloseable
public void passiveBroadcast( final String host, final int port, final ArrayList<String> cacheNames )
throws IOException
{
- passiveBroadcast( host, port, cacheNames, CacheInfo.listenerId );
+ passiveBroadcast( host, port, cacheNames, CacheInfo.INSTANCE.listenerId());
}
/**
@@ -197,7 +197,7 @@ public class UDPDiscoverySender implements AutoCloseable
public void removeBroadcast( final String host, final int port, final ArrayList<String> cacheNames )
throws IOException
{
- removeBroadcast( host, port, cacheNames, CacheInfo.listenerId );
+ removeBroadcast( host, port, cacheNames, CacheInfo.INSTANCE.listenerId());
}
/**
@@ -232,7 +232,7 @@ public class UDPDiscoverySender implements AutoCloseable
public void requestBroadcast()
throws IOException
{
- requestBroadcast(CacheInfo.listenerId);
+ requestBroadcast(CacheInfo.INSTANCE.listenerId());
}
/**
diff --git a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/disk/indexed/IndexDiskCacheCountUnitTest.java b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/disk/indexed/IndexDiskCacheCountUnitTest.java
index ee34273a..760aaa8d 100644
--- a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/disk/indexed/IndexDiskCacheCountUnitTest.java
+++ b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/disk/indexed/IndexDiskCacheCountUnitTest.java
@@ -57,18 +57,14 @@ public class IndexDiskCacheCountUnitTest extends AbstractIndexDiskCacheUnitTest
final String[] test = { "a", "bb", "ccc", "dddd", "eeeee", "ffffff", "ggggggg", "hhhhhhhhh", "iiiiiiiiii" };
final String[] expect = { null, "bb", "ccc", null, null, "ffffff", null, "hhhhhhhhh", "iiiiiiiiii" };
- //System.out.println( "------------------------- testRecycleBin " );
-
for ( int i = 0; i < 6; i++ )
{
final ICacheElement<String, String> element = new CacheElement<>( "testRecycleBin", "key:" + test[i], test[i]);
- //System.out.println( "About to add key:" + test[i] + " i = " + i );
disk.processUpdate( element );
}
for ( int i = 3; i < 5; i++ )
{
- //System.out.println( "About to remove key:" + test[i] + " i = " + i );
disk.remove( "key:" + test[i]);
}
@@ -77,7 +73,6 @@ public class IndexDiskCacheCountUnitTest extends AbstractIndexDiskCacheUnitTest
for ( int i = 7; i < 9; i++ )
{
final ICacheElement<String, String> element = new CacheElement<>( "testRecycleBin", "key:" + test[i], test[i]);
- //System.out.println( "About to add key:" + test[i] + " i = " + i );
disk.processUpdate( element );
}
@@ -86,14 +81,6 @@ public class IndexDiskCacheCountUnitTest extends AbstractIndexDiskCacheUnitTest
for ( int i = 0; i < 9; i++ )
{
final ICacheElement<String, String> element = disk.get( "key:" + test[i]);
- if ( element != null )
- {
- //System.out.println( "element = " + element.getVal() );
- }
- else
- {
- //System.out.println( "null --key:" + test[i]);
- }
final String expectedValue = expect[i];
if ( expectedValue == null )
diff --git a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/disk/jdbc/mysql/MySQLDiskCacheUnitTest.java b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/disk/jdbc/mysql/MySQLDiskCacheUnitTest.java
index c8c5d9ab..291a955c 100644
--- a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/disk/jdbc/mysql/MySQLDiskCacheUnitTest.java
+++ b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/disk/jdbc/mysql/MySQLDiskCacheUnitTest.java
@@ -24,6 +24,7 @@ import static org.junit.jupiter.api.Assertions.assertNull;
import java.sql.SQLException;
import org.apache.commons.jcs4.auxiliary.disk.jdbc.TableState;
+import org.apache.commons.jcs4.auxiliary.disk.jdbc.TableState.TableStateType;
import org.apache.commons.jcs4.auxiliary.disk.jdbc.dsfactory.SharedPoolDataSourceFactory;
import org.junit.jupiter.api.Test;
@@ -59,7 +60,7 @@ class MySQLDiskCacheUnitTest
dsFactory.initialize(attributes);
final TableState tableState = new TableState( tableName );
- tableState.setState( TableState.OPTIMIZATION_RUNNING );
+ tableState.setState( TableStateType.OPTIMIZATION_RUNNING );
final MySQLDiskCache<String, String> cache = new MySQLDiskCache<>(attributes, dsFactory, tableState);
diff --git a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/remote/RemoteUtilsUnitTest.java b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/remote/RemoteUtilsUnitTest.java
index 873ee10a..d78a17c7 100644
--- a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/remote/RemoteUtilsUnitTest.java
+++ b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/remote/RemoteUtilsUnitTest.java
@@ -57,12 +57,12 @@ class RemoteUtilsUnitTest
void testParseServerAndPort()
{
RemoteLocation loc = RemoteLocation.parseServerAndPort("server1:1234");
- assertEquals("server1", loc.getHost());
- assertEquals(1234, loc.getPort());
+ assertEquals("server1", loc.host());
+ assertEquals(1234, loc.port());
loc = RemoteLocation.parseServerAndPort(" server2 : 4567 ");
- assertEquals("server2", loc.getHost());
- assertEquals(4567, loc.getPort());
+ assertEquals("server2", loc.host());
+ assertEquals(4567, loc.port());
loc = RemoteLocation.parseServerAndPort("server2 : port");
assertNull(loc);
diff --git a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/remote/server/BasicRemoteCacheClientServerUnitTest.java b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/remote/server/BasicRemoteCacheClientServerUnitTest.java
index 594a31b0..b033554a 100644
--- a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/remote/server/BasicRemoteCacheClientServerUnitTest.java
+++ b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/remote/server/BasicRemoteCacheClientServerUnitTest.java
@@ -112,7 +112,7 @@ class BasicRemoteCacheClientServerUnitTest
server = RemoteCacheServerStartupUtil.startServerUsingProperties(configFile);
factory = new RemoteCacheFactory();
factory.initialize();
- remotePort = server.remoteCacheServerAttributes.getRemoteLocation().getPort();
+ remotePort = server.remoteCacheServerAttributes.getRemoteLocation().port();
}
@AfterAll