This is an automated email from the ASF dual-hosted git repository.

asf-gitbox-commits pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cayenne.git

commit e965ee2d551ec60ff2020c4e1f504d7129b5c88e
Author: Andrus Adamchik <[email protected]>
AuthorDate: Sun Jul 26 18:13:44 2026 +0300

    DataRowStore init cleanup
---
 .../org/apache/cayenne/access/DataRowStore.java    | 50 ++++++++--------------
 .../cayenne/access/DefaultDataRowStoreFactory.java | 30 ++++++++++---
 .../java/org/apache/cayenne/event/EventBridge.java |  2 +-
 .../cayenne/access/DataContextSerializationIT.java |  4 +-
 .../access/DataContextSharedCacheEmpiricIT.java    |  4 +-
 .../org/apache/cayenne/access/DataDomainIT.java    |  4 +-
 .../org/apache/cayenne/access/DataRowStoreIT.java  | 15 +------
 .../apache/cayenne/access/MockDataRowStore.java    | 12 ++----
 8 files changed, 51 insertions(+), 70 deletions(-)

diff --git a/cayenne/src/main/java/org/apache/cayenne/access/DataRowStore.java 
b/cayenne/src/main/java/org/apache/cayenne/access/DataRowStore.java
index 18cd4d065..c51d54c7c 100644
--- a/cayenne/src/main/java/org/apache/cayenne/access/DataRowStore.java
+++ b/cayenne/src/main/java/org/apache/cayenne/access/DataRowStore.java
@@ -25,8 +25,6 @@ import org.apache.cayenne.ObjectId;
 import org.apache.cayenne.PersistenceState;
 import org.apache.cayenne.Persistent;
 import org.apache.cayenne.access.event.SnapshotEvent;
-import org.apache.cayenne.configuration.Constants;
-import org.apache.cayenne.configuration.RuntimeProperties;
 import org.apache.cayenne.event.EventBridge;
 import org.apache.cayenne.event.EventManager;
 import org.apache.cayenne.event.EventSubject;
@@ -53,18 +51,21 @@ public class DataRowStore implements Serializable {
 
     private static final Logger LOGGER = 
LoggerFactory.getLogger(DataRowStore.class);
 
-    // default property values
-
     /**
      * @deprecated unused
      */
     @Deprecated(since = "5.0", forRemoval = true)
     public static final long SNAPSHOT_EXPIRATION_DEFAULT = 2 * 60 * 60;
-    public static final int SNAPSHOT_CACHE_SIZE_DEFAULT = 10000;
+
+    /**
+     * @deprecated use {@link 
DefaultDataRowStoreFactory#SNAPSHOT_CACHE_SIZE_DEFAULT}
+     */
+    @Deprecated(since = "5.0", forRemoval = true)
+    public static final int SNAPSHOT_CACHE_SIZE_DEFAULT = 
DefaultDataRowStoreFactory.SNAPSHOT_CACHE_SIZE_DEFAULT;
 
     protected String name;
-    private int maxSize;
-    protected ConcurrentMap<ObjectId, DataRow> snapshots;
+    private final int maxSize;
+    protected final ConcurrentMap<ObjectId, DataRow> snapshots;
 
     protected transient EventManager eventManager;
     protected transient EventBridge remoteNotificationsHandler;
@@ -74,18 +75,13 @@ public class DataRowStore implements Serializable {
     protected transient EventSubject eventSubject;
 
     /**
-     * Creates new DataRowStore with a specified name and a set of properties. 
If no
-     * properties are defined, default values are used.
-     *
-     * @param name         DataRowStore name. Used to identify this 
DataRowStore in events, etc.
-     *                     Can't be null.
-     * @param properties   Properties map used to configure DataRowStore 
parameters. Can be
-     *                     null.
-     * @param eventManager EventManager that should be used for posting and 
receiving
-     *                     events.
-     * @since 1.2
+     * @param name         DataRowStore name. Used to identify this 
DataRowStore in events, etc. Can't be null.
+     * @param maxSize      max number of cached snapshots. The cache is LRU, 
evicting the oldest snapshots past
+     *                     this size.
+     * @param eventManager EventManager that should be used for posting and 
receiving events.
+     * @since 5.0
      */
-    public DataRowStore(String name, RuntimeProperties properties, 
EventManager eventManager) {
+    public DataRowStore(String name, int maxSize, EventManager eventManager) {
         if (name == null) {
             throw new IllegalArgumentException("DataRowStore name can't be 
null.");
         }
@@ -93,25 +89,17 @@ public class DataRowStore implements Serializable {
         this.name = name;
         this.eventSubject = createSubject();
         this.eventManager = eventManager;
-        initWithProperties(properties);
-    }
-
-    private EventSubject createSubject() {
-        return EventSubject.getSubject(this.getClass(), name);
-    }
-
-    protected void initWithProperties(RuntimeProperties properties) {
-
-        // expiration time is never used actually
-        maxSize = properties.getInt(Constants.SNAPSHOT_CACHE_SIZE_PROPERTY, 
SNAPSHOT_CACHE_SIZE_DEFAULT);
-
-        LOGGER.debug("DataRowStore property {} = {}", 
Constants.SNAPSHOT_CACHE_SIZE_PROPERTY, maxSize);
+        this.maxSize = maxSize;
 
         this.snapshots = new ConcurrentLinkedHashMap.Builder<ObjectId, 
DataRow>()
                 .maximumWeightedCapacity(maxSize)
                 .build();
     }
 
+    private EventSubject createSubject() {
+        return EventSubject.getSubject(this.getClass(), name);
+    }
+
     protected void setEventBridge(EventBridge eventBridge) {
         remoteNotificationsHandler = eventBridge;
     }
diff --git 
a/cayenne/src/main/java/org/apache/cayenne/access/DefaultDataRowStoreFactory.java
 
b/cayenne/src/main/java/org/apache/cayenne/access/DefaultDataRowStoreFactory.java
index bc1af3759..1b8511000 100644
--- 
a/cayenne/src/main/java/org/apache/cayenne/access/DefaultDataRowStoreFactory.java
+++ 
b/cayenne/src/main/java/org/apache/cayenne/access/DefaultDataRowStoreFactory.java
@@ -20,6 +20,7 @@
 package org.apache.cayenne.access;
 
 import org.apache.cayenne.CayenneRuntimeException;
+import org.apache.cayenne.configuration.Constants;
 import org.apache.cayenne.configuration.RuntimeProperties;
 import org.apache.cayenne.di.DIRuntimeException;
 import org.apache.cayenne.di.Inject;
@@ -27,6 +28,8 @@ import org.apache.cayenne.di.Provider;
 import org.apache.cayenne.event.EventBridge;
 import org.apache.cayenne.event.EventManager;
 import org.apache.cayenne.event.NoopEventBridge;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * A default implementation of {@link DataRowStoreFactory}
@@ -35,15 +38,24 @@ import org.apache.cayenne.event.NoopEventBridge;
  */
 public class DefaultDataRowStoreFactory implements DataRowStoreFactory {
 
-    Provider<EventBridge> eventBridgeProvider;
+    /**
+     * Default max size of a DataRowStore, used when {@link 
Constants#SNAPSHOT_CACHE_SIZE_PROPERTY} is not set.
+     *
+     * @since 5.0
+     */
+    static final int SNAPSHOT_CACHE_SIZE_DEFAULT = 10000;
 
-    EventManager eventManager;
+    private static final Logger LOGGER = 
LoggerFactory.getLogger(DefaultDataRowStoreFactory.class);
 
-    RuntimeProperties properties;
+    private final Provider<EventBridge> eventBridgeProvider;
+    private final EventManager eventManager;
+    private final RuntimeProperties properties;
+
+    public DefaultDataRowStoreFactory(
+            @Inject Provider<EventBridge> eventBridgeProvider,
+            @Inject EventManager eventManager,
+            @Inject RuntimeProperties properties) {
 
-    public DefaultDataRowStoreFactory(@Inject Provider<EventBridge> 
eventBridgeProvider,
-                                      @Inject EventManager eventManager,
-                                      @Inject RuntimeProperties properties) {
         this.eventBridgeProvider = eventBridgeProvider;
         this.eventManager = eventManager;
         this.properties = properties;
@@ -51,7 +63,11 @@ public class DefaultDataRowStoreFactory implements 
DataRowStoreFactory {
 
     @Override
     public DataRowStore createDataRowStore(String name) throws 
DIRuntimeException {
-        DataRowStore store = new DataRowStore(name, properties, eventManager);
+
+        int maxSize = 
properties.getInt(Constants.SNAPSHOT_CACHE_SIZE_PROPERTY, 
SNAPSHOT_CACHE_SIZE_DEFAULT);
+        LOGGER.debug("DataRowStore property {} = {}", 
Constants.SNAPSHOT_CACHE_SIZE_PROPERTY, maxSize);
+
+        DataRowStore store = new DataRowStore(name, maxSize, eventManager);
         setUpEventBridge(store);
         return store;
     }
diff --git a/cayenne/src/main/java/org/apache/cayenne/event/EventBridge.java 
b/cayenne/src/main/java/org/apache/cayenne/event/EventBridge.java
index 748d30f63..71802046c 100644
--- a/cayenne/src/main/java/org/apache/cayenne/event/EventBridge.java
+++ b/cayenne/src/main/java/org/apache/cayenne/event/EventBridge.java
@@ -327,7 +327,7 @@ public abstract class EventBridge implements EventListener {
                 // make sure external event has the right subject, if not make 
a clone
                 // with the right one...
                 if (!subject.equals(event.getSubject())) {
-                    CayenneEvent clone = (CayenneEvent) 
Util.cloneViaSerialization(event);
+                    CayenneEvent clone = Util.cloneViaSerialization(event);
                     clone.setSubject(subject);
                     clone.setPostedBy(event.getPostedBy());
                     clone.setSource(event.getSource());
diff --git 
a/cayenne/src/test/java/org/apache/cayenne/access/DataContextSerializationIT.java
 
b/cayenne/src/test/java/org/apache/cayenne/access/DataContextSerializationIT.java
index 15506eb36..4ca0b9377 100644
--- 
a/cayenne/src/test/java/org/apache/cayenne/access/DataContextSerializationIT.java
+++ 
b/cayenne/src/test/java/org/apache/cayenne/access/DataContextSerializationIT.java
@@ -23,7 +23,6 @@ import org.apache.cayenne.Cayenne;
 import org.apache.cayenne.ObjectContext;
 import org.apache.cayenne.PersistenceState;
 import org.apache.cayenne.Persistent;
-import org.apache.cayenne.configuration.DefaultRuntimeProperties;
 import org.apache.cayenne.runtime.CayenneRuntime;
 import org.apache.cayenne.test.jdbc.TableHelper;
 import org.apache.cayenne.testdo.testmap.Artist;
@@ -35,7 +34,6 @@ import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.RegisterExtension;
 
-import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -138,7 +136,7 @@ public class DataContextSerializationIT {
         DataDomain domain = context.getParentDataDomain();
         DataRowStore snapshotCache = new DataRowStore(
                 domain.getName(),
-                new DefaultRuntimeProperties(Collections.emptyMap()),
+                DefaultDataRowStoreFactory.SNAPSHOT_CACHE_SIZE_DEFAULT,
                 domain.getEventManager());
 
         Map<Object, Persistent> map = new HashMap<>();
diff --git 
a/cayenne/src/test/java/org/apache/cayenne/access/DataContextSharedCacheEmpiricIT.java
 
b/cayenne/src/test/java/org/apache/cayenne/access/DataContextSharedCacheEmpiricIT.java
index d736a0d71..c100e7f1b 100644
--- 
a/cayenne/src/test/java/org/apache/cayenne/access/DataContextSharedCacheEmpiricIT.java
+++ 
b/cayenne/src/test/java/org/apache/cayenne/access/DataContextSharedCacheEmpiricIT.java
@@ -19,12 +19,10 @@
 
 package org.apache.cayenne.access;
 
-import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 
 import org.apache.cayenne.DataRow;
-import org.apache.cayenne.configuration.DefaultRuntimeProperties;
 import org.apache.cayenne.configuration.runtime.CoreModule;
 import org.apache.cayenne.event.DefaultEventManager;
 import org.apache.cayenne.query.ObjectSelect;
@@ -66,7 +64,7 @@ public class DataContextSharedCacheEmpiricIT {
         eventManager = new DefaultEventManager();
         DataRowStore cache = new DataRowStore(
                 "cacheTest",
-                new DefaultRuntimeProperties(Collections.emptyMap()),
+                DefaultDataRowStoreFactory.SNAPSHOT_CACHE_SIZE_DEFAULT,
                 eventManager);
 
         c1 = new DataContext(runtime.getDataDomain(),
diff --git a/cayenne/src/test/java/org/apache/cayenne/access/DataDomainIT.java 
b/cayenne/src/test/java/org/apache/cayenne/access/DataDomainIT.java
index c6b334568..f7eb4f4a5 100644
--- a/cayenne/src/test/java/org/apache/cayenne/access/DataDomainIT.java
+++ b/cayenne/src/test/java/org/apache/cayenne/access/DataDomainIT.java
@@ -23,7 +23,6 @@ import org.apache.cayenne.CayenneRuntimeException;
 import org.apache.cayenne.ObjectContext;
 import org.apache.cayenne.Persistent;
 import org.apache.cayenne.annotation.PostAdd;
-import org.apache.cayenne.configuration.DefaultRuntimeProperties;
 import org.apache.cayenne.event.DefaultEventManager;
 import org.apache.cayenne.map.DataMap;
 import org.apache.cayenne.map.EntityResolver;
@@ -38,7 +37,6 @@ import org.apache.cayenne.unit.CayenneTestsEnv;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.RegisterExtension;
 
-import java.util.Collections;
 
 import static org.junit.jupiter.api.Assertions.*;
 
@@ -153,7 +151,7 @@ public class DataDomainIT {
         DefaultEventManager eventManager = new DefaultEventManager();
         try {
             DataRowStore cache = new DataRowStore("Y",
-                    new DefaultRuntimeProperties(Collections.<String, 
String>emptyMap()),
+                    DefaultDataRowStoreFactory.SNAPSHOT_CACHE_SIZE_DEFAULT,
                     eventManager) {
                 @Override
                 public void shutdown() {
diff --git 
a/cayenne/src/test/java/org/apache/cayenne/access/DataRowStoreIT.java 
b/cayenne/src/test/java/org/apache/cayenne/access/DataRowStoreIT.java
index fd42b57f4..66c099713 100644
--- a/cayenne/src/test/java/org/apache/cayenne/access/DataRowStoreIT.java
+++ b/cayenne/src/test/java/org/apache/cayenne/access/DataRowStoreIT.java
@@ -21,8 +21,6 @@ package org.apache.cayenne.access;
 
 import org.apache.cayenne.DataRow;
 import org.apache.cayenne.ObjectId;
-import org.apache.cayenne.configuration.Constants;
-import org.apache.cayenne.configuration.DefaultRuntimeProperties;
 import org.apache.cayenne.testdo.testmap.Artist;
 import org.apache.cayenne.unit.CayenneProjects;
 import org.apache.cayenne.unit.CayenneTestsEnv;
@@ -61,10 +59,7 @@ public class DataRowStoreIT {
 
     @Test
     public void defaultConstructor() {
-        cache = new DataRowStore(
-                "cacheXYZ",
-                new DefaultRuntimeProperties(Collections.<String, 
String>emptyMap()),
-                null);
+        cache = new DataRowStore("cacheXYZ", 
DefaultDataRowStoreFactory.SNAPSHOT_CACHE_SIZE_DEFAULT, null);
         assertEquals("cacheXYZ", cache.getName());
         assertNotNull(cache.getSnapshotEventSubject());
         
assertTrue(cache.getSnapshotEventSubject().getSubjectName().contains("cacheXYZ"));
@@ -75,13 +70,7 @@ public class DataRowStoreIT {
      */
     @Test
     public void maxSize() throws Exception {
-        Map<String, String> props = new HashMap<>();
-        props.put(Constants.SNAPSHOT_CACHE_SIZE_PROPERTY, String.valueOf(2));
-
-        cache = new DataRowStore(
-                "cacheXYZ",
-                new DefaultRuntimeProperties(props),
-                null);
+        cache = new DataRowStore("cacheXYZ", 2, null);
         assertEquals(2, cache.maximumSize());
         assertEquals(0, cache.size());
 
diff --git 
a/cayenne/src/test/java/org/apache/cayenne/access/MockDataRowStore.java 
b/cayenne/src/test/java/org/apache/cayenne/access/MockDataRowStore.java
index 767e89124..3fa3c6df7 100644
--- a/cayenne/src/test/java/org/apache/cayenne/access/MockDataRowStore.java
+++ b/cayenne/src/test/java/org/apache/cayenne/access/MockDataRowStore.java
@@ -21,11 +21,8 @@ package org.apache.cayenne.access;
 
 import org.apache.cayenne.DataRow;
 import org.apache.cayenne.ObjectId;
-import org.apache.cayenne.configuration.Constants;
-import org.apache.cayenne.configuration.DefaultRuntimeProperties;
 import org.apache.cayenne.event.MockEventManager;
 
-import java.util.HashMap;
 import java.util.Map;
 
 /**
@@ -33,14 +30,11 @@ import java.util.Map;
  */
 public class MockDataRowStore extends DataRowStore {
 
-    private static final Map<String, String> TEST_DEFAULTS = new HashMap<>();
-
-    static {
-        TEST_DEFAULTS.put(Constants.SNAPSHOT_CACHE_SIZE_PROPERTY, 
Integer.toString(10));
-    }
+    private static final String NAME = "mock DataRowStore";
+    private static final int MAX_SIZE = 10;
 
     public MockDataRowStore() {
-        super("mock DataRowStore", new 
DefaultRuntimeProperties(TEST_DEFAULTS), new MockEventManager());
+        super(NAME, MAX_SIZE, new MockEventManager());
     }
 
     /**

Reply via email to