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()); } /**
