This is an automated email from the ASF dual-hosted git repository. asf-gitbox-commits pushed a commit to branch past-M2 in repository https://gitbox.apache.org/repos/asf/cayenne.git
commit 76dd1d7035554f4a2d692458e7ea2b80e8d0a23b Author: Andrus Adamchik <[email protected]> AuthorDate: Sun Jun 7 12:26:12 2026 -0400 Getting rid of DataDomain "properties" --- .../java/org/apache/cayenne/access/DataDomain.java | 57 +--- .../configuration/runtime/DataDomainProvider.java | 295 +++++++++++---------- .../java/org/apache/cayenne/query/QueryChain.java | 1 - .../cayenne/access/DataContextSerializationIT.java | 3 +- .../org/apache/cayenne/access/DataDomainIT.java | 38 +-- 5 files changed, 165 insertions(+), 229 deletions(-) diff --git a/cayenne/src/main/java/org/apache/cayenne/access/DataDomain.java b/cayenne/src/main/java/org/apache/cayenne/access/DataDomain.java index e4774de8f..9f963ae5e 100644 --- a/cayenne/src/main/java/org/apache/cayenne/access/DataDomain.java +++ b/cayenne/src/main/java/org/apache/cayenne/access/DataDomain.java @@ -49,7 +49,6 @@ import org.apache.cayenne.util.ToStringBuilder; import java.util.Collection; import java.util.Collections; -import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; @@ -116,7 +115,6 @@ public class DataDomain implements DataChannel { protected Map<String, DataNode> nodes; protected Map<String, DataNode> nodesByDataMapName; protected DataNode defaultNode; - protected Map<String, String> properties; protected EntityResolver entityResolver; protected DataRowStore sharedSnapshotCache; @@ -147,20 +145,6 @@ public class DataDomain implements DataChannel { resetProperties(); } - /** - * Creates new DataDomain. - * - * @param name DataDomain name. Domain can be located using its name in the - * Configuration object. - * @param properties A Map containing domain configuration properties. - * @deprecated since 4.0 unused - */ - @Deprecated - public DataDomain(String name, Map<String, String> properties) { - init(name); - initWithProperties(properties); - } - private void init(String name) { this.queryFilters = new CopyOnWriteArrayList<>(); @@ -168,11 +152,6 @@ public class DataDomain implements DataChannel { this.nodesByDataMapName = new ConcurrentHashMap<>(); this.nodes = new ConcurrentHashMap<>(); - // properties are read-only, so no need for concurrent map, or any - // specific map - // for that matter - this.properties = Collections.emptyMap(); - setName(name); } @@ -204,39 +183,15 @@ public class DataDomain implements DataChannel { } /** + * Resets the domain's behavioral flags to their defaults. + * * @since 1.1 */ protected void resetProperties() { - properties = Collections.emptyMap(); - sharedCacheEnabled = SHARED_CACHE_ENABLED_DEFAULT; validatingObjectsOnCommit = VALIDATING_OBJECTS_ON_COMMIT_DEFAULT; } - /** - * Reinitializes domain state with a new set of properties. - * - * @since 1.1 - * @deprecated since 4.0 properties are processed by the DI provider. - */ - @Deprecated - public void initWithProperties(Map<String, String> properties) { - - // clone properties to ensure that it is read-only internally - properties = properties != null ? new HashMap<>(properties) : Collections.emptyMap(); - - String sharedCacheEnabled = properties.get(SHARED_CACHE_ENABLED_PROPERTY); - String validatingObjectsOnCommit = properties.get(VALIDATING_OBJECTS_ON_COMMIT_PROPERTY); - - // init ivars from properties - this.sharedCacheEnabled = (sharedCacheEnabled != null) ? "true".equalsIgnoreCase(sharedCacheEnabled) - : SHARED_CACHE_ENABLED_DEFAULT; - this.validatingObjectsOnCommit = (validatingObjectsOnCommit != null) ? "true" - .equalsIgnoreCase(validatingObjectsOnCommit) : VALIDATING_OBJECTS_ON_COMMIT_DEFAULT; - - this.properties = properties; - } - /** * Returns EventManager used by this DataDomain. * @@ -310,14 +265,6 @@ public class DataDomain implements DataChannel { this.validatingObjectsOnCommit = flag; } - /** - * @return a Map of properties for this DataDomain. - * @since 1.1 - */ - public Map<String, String> getProperties() { - return properties; - } - /** * Returns snapshots cache for this DataDomain, lazily initializing it on * the first call if 'sharedCacheEnabled' flag is true. diff --git a/cayenne/src/main/java/org/apache/cayenne/configuration/runtime/DataDomainProvider.java b/cayenne/src/main/java/org/apache/cayenne/configuration/runtime/DataDomainProvider.java index 690474792..81831d606 100644 --- a/cayenne/src/main/java/org/apache/cayenne/configuration/runtime/DataDomainProvider.java +++ b/cayenne/src/main/java/org/apache/cayenne/configuration/runtime/DataDomainProvider.java @@ -50,211 +50,218 @@ import org.slf4j.LoggerFactory; import java.util.Collection; import java.util.List; +import java.util.Map; /** * A {@link DataChannel} provider that provides a single instance of DataDomain * configured per configuration supplied via injected * {@link DataChannelDescriptorLoader}. - * + * * @since 3.1 */ public class DataDomainProvider implements Provider<DataDomain> { - private static final Logger logger = LoggerFactory.getLogger(DataDomainProvider.class); + private static final Logger logger = LoggerFactory.getLogger(DataDomainProvider.class); - @Inject - protected ResourceLocator resourceLocator; + @Inject + protected ResourceLocator resourceLocator; - @Inject - protected DataChannelDescriptorMerger descriptorMerger; + @Inject + protected DataChannelDescriptorMerger descriptorMerger; - @Inject - protected DataChannelDescriptorLoader loader; + @Inject + protected DataChannelDescriptorLoader loader; - /** - * @since 4.1 - */ - @Inject - protected List<DataChannelQueryFilter> queryFilters; + /** + * @since 4.1 + */ + @Inject + protected List<DataChannelQueryFilter> queryFilters; - /** - * @since 4.1 - */ - @Inject - protected List<DataChannelSyncFilter> syncFilters; + /** + * @since 4.1 + */ + @Inject + protected List<DataChannelSyncFilter> syncFilters; - @Inject(Constants.DOMAIN_LISTENERS_LIST) - protected List<Object> listeners; + @Inject(Constants.DOMAIN_LISTENERS_LIST) + protected List<Object> listeners; - @Inject(Constants.PROJECT_LOCATIONS_LIST) - protected List<String> locations; + @Inject(Constants.PROJECT_LOCATIONS_LIST) + protected List<String> locations; - @Inject - protected Injector injector; + @Inject + protected Injector injector; - @Inject - protected QueryCache queryCache; + @Inject + protected QueryCache queryCache; - @Inject - protected RuntimeProperties runtimeProperties; + @Inject + protected RuntimeProperties runtimeProperties; - @Inject - protected DataNodeFactory dataNodeFactory; + @Inject + protected DataNodeFactory dataNodeFactory; - @Override - public DataDomain get() throws ConfigurationException { + @Override + public DataDomain get() throws ConfigurationException { - try { - return createAndInitDataDomain(); - } catch (ConfigurationException e) { - throw e; - } catch (Exception e) { - String causeMessage = e.getMessage(); - String message = causeMessage != null && causeMessage.length() > 0 ? causeMessage : e.getClass().getName(); - throw new DataDomainLoadException("DataDomain startup failed: %s", e, message); - } - } + try { + return createAndInitDataDomain(); + } catch (ConfigurationException e) { + throw e; + } catch (Exception e) { + String causeMessage = e.getMessage(); + String message = causeMessage != null && !causeMessage.isEmpty() ? causeMessage : e.getClass().getName(); + throw new DataDomainLoadException("DataDomain startup failed: %s", e, message); + } + } - protected DataDomain createDataDomain(String name) { - return new DataDomain(name); - } + protected DataDomain createDataDomain(String name) { + return new DataDomain(name); + } - @SuppressWarnings("deprecation") - protected DataDomain createAndInitDataDomain() throws Exception { + protected DataDomain createAndInitDataDomain() throws Exception { - DataChannelDescriptor descriptor = loadDescriptor(); + DataChannelDescriptor descriptor = loadDescriptor(); - DataDomain dataDomain = createDataDomain(descriptor.getName()); + DataDomain dataDomain = createDataDomain(descriptor.getName()); - dataDomain.setMaxIdQualifierSize(runtimeProperties.getInt(Constants.MAX_ID_QUALIFIER_SIZE_PROPERTY, -1)); + dataDomain.setMaxIdQualifierSize(runtimeProperties.getInt(Constants.MAX_ID_QUALIFIER_SIZE_PROPERTY, -1)); - dataDomain.setQueryCache(new NestedQueryCache(queryCache)); - dataDomain.setEntitySorter(injector.getInstance(EntitySorter.class)); - dataDomain.setEventManager(injector.getInstance(EventManager.class)); - dataDomain.setDataRowStoreFactory(injector.getInstance(DataRowStoreFactory.class)); + dataDomain.setQueryCache(new NestedQueryCache(queryCache)); + dataDomain.setEntitySorter(injector.getInstance(EntitySorter.class)); + dataDomain.setEventManager(injector.getInstance(EventManager.class)); + dataDomain.setDataRowStoreFactory(injector.getInstance(DataRowStoreFactory.class)); - dataDomain.initWithProperties(descriptor.getProperties()); + Map<String, String> properties = descriptor.getProperties(); + if ("true".equalsIgnoreCase(properties.get(DataDomain.SHARED_CACHE_ENABLED_PROPERTY))) { + dataDomain.setSharedCacheEnabled(true); + } - for (DataMap dataMap : descriptor.getDataMaps()) { - dataDomain.addDataMap(dataMap); - } + if ("true".equalsIgnoreCase(properties.get(DataDomain.VALIDATING_OBJECTS_ON_COMMIT_PROPERTY))) { + dataDomain.setValidatingObjectsOnCommit(true); + } - dataDomain.getEntityResolver().applyDBLayerDefaults(); - dataDomain.getEntityResolver().setValueObjectTypeRegistry(injector.getInstance(ValueObjectTypeRegistry.class)); - dataDomain.getEntityResolver().setValueComparisonStrategyFactory(injector.getInstance(ValueComparisonStrategyFactory.class)); - dataDomain.getEntityResolver().setObjectFactory(injector.getInstance(AdhocObjectFactory.class)); + for (DataMap dataMap : descriptor.getDataMaps()) { + dataDomain.addDataMap(dataMap); + } - for (DataNodeDescriptor nodeDescriptor : descriptor.getNodeDescriptors()) { - addDataNode(dataDomain, nodeDescriptor); - } + dataDomain.getEntityResolver().applyDBLayerDefaults(); + dataDomain.getEntityResolver().setValueObjectTypeRegistry(injector.getInstance(ValueObjectTypeRegistry.class)); + dataDomain.getEntityResolver().setValueComparisonStrategyFactory(injector.getInstance(ValueComparisonStrategyFactory.class)); + dataDomain.getEntityResolver().setObjectFactory(injector.getInstance(AdhocObjectFactory.class)); - // init default node - DataNode defaultNode = null; + for (DataNodeDescriptor nodeDescriptor : descriptor.getNodeDescriptors()) { + addDataNode(dataDomain, nodeDescriptor); + } - if (descriptor.getDefaultNodeName() != null) { - defaultNode = dataDomain.getDataNode(descriptor.getDefaultNodeName()); - } + // init default node + DataNode defaultNode = null; - if (defaultNode == null) { - Collection<DataNode> allNodes = dataDomain.getDataNodes(); - if (allNodes.size() == 1) { - defaultNode = allNodes.iterator().next(); - } - } + if (descriptor.getDefaultNodeName() != null) { + defaultNode = dataDomain.getDataNode(descriptor.getDefaultNodeName()); + } - if (defaultNode != null) { - logger.info("setting DataNode '" + defaultNode.getName() + "' as default, used by all unlinked DataMaps"); + if (defaultNode == null) { + Collection<DataNode> allNodes = dataDomain.getDataNodes(); + if (allNodes.size() == 1) { + defaultNode = allNodes.iterator().next(); + } + } - dataDomain.setDefaultNode(defaultNode); - } + if (defaultNode != null) { + logger.info("setting DataNode '" + defaultNode.getName() + "' as default, used by all unlinked DataMaps"); - for (DataChannelQueryFilter filter : queryFilters) { - dataDomain.addQueryFilter(filter); - } + dataDomain.setDefaultNode(defaultNode); + } - for (DataChannelSyncFilter filter : syncFilters) { - dataDomain.addSyncFilter(filter); - } + for (DataChannelQueryFilter filter : queryFilters) { + dataDomain.addQueryFilter(filter); + } - for (Object listener : listeners) { - dataDomain.addListener(listener); - } + for (DataChannelSyncFilter filter : syncFilters) { + dataDomain.addSyncFilter(filter); + } - return dataDomain; - } + for (Object listener : listeners) { + dataDomain.addListener(listener); + } - /** - * @since 4.0 + return dataDomain; + } + + /** + * @since 4.0 */ - protected DataChannelDescriptor loadDescriptor() { - DataChannelDescriptor descriptor = locations.isEmpty() ? new DataChannelDescriptor() : loadDescriptorFromConfigs(); + protected DataChannelDescriptor loadDescriptor() { + DataChannelDescriptor descriptor = locations.isEmpty() ? new DataChannelDescriptor() : loadDescriptorFromConfigs(); - String nameOverride = runtimeProperties.get(Constants.DOMAIN_NAME_PROPERTY); - if (nameOverride != null) { - descriptor.setName(nameOverride); - } + String nameOverride = runtimeProperties.get(Constants.DOMAIN_NAME_PROPERTY); + if (nameOverride != null) { + descriptor.setName(nameOverride); + } - return descriptor; - } + return descriptor; + } - /** - * @since 4.0 - */ - protected DataNode addDataNode(DataDomain dataDomain, DataNodeDescriptor nodeDescriptor) throws Exception { - DataNode dataNode = dataNodeFactory.createDataNode(nodeDescriptor); + /** + * @since 4.0 + */ + protected DataNode addDataNode(DataDomain dataDomain, DataNodeDescriptor nodeDescriptor) throws Exception { + DataNode dataNode = dataNodeFactory.createDataNode(nodeDescriptor); - // DataMaps - for (String dataMapName : nodeDescriptor.getDataMapNames()) { - dataNode.addDataMap(dataDomain.getDataMap(dataMapName)); - } + // DataMaps + for (String dataMapName : nodeDescriptor.getDataMapNames()) { + dataNode.addDataMap(dataDomain.getDataMap(dataMapName)); + } - dataDomain.addNode(dataNode); - return dataNode; - } + dataDomain.addNode(dataNode); + return dataNode; + } - private DataChannelDescriptor loadDescriptorFromConfigs() { + private DataChannelDescriptor loadDescriptorFromConfigs() { - long t0 = System.currentTimeMillis(); + long t0 = System.currentTimeMillis(); - if (logger.isDebugEnabled()) { - logger.debug("starting configuration loading: " + locations); - } + if (logger.isDebugEnabled()) { + logger.debug("starting configuration loading: " + locations); + } - DataChannelDescriptor[] descriptors = new DataChannelDescriptor[locations.size()]; + DataChannelDescriptor[] descriptors = new DataChannelDescriptor[locations.size()]; - for (int i = 0; i < locations.size(); i++) { + for (int i = 0; i < locations.size(); i++) { - String location = locations.get(i); + String location = locations.get(i); - Collection<Resource> configurations = resourceLocator.findResources(location); + Collection<Resource> configurations = resourceLocator.findResources(location); - if (configurations.isEmpty()) { - throw new DataDomainLoadException("Configuration resource \"%s\" is not found.", location); - } + if (configurations.isEmpty()) { + throw new DataDomainLoadException("Configuration resource \"%s\" is not found.", location); + } - Resource configurationResource = configurations.iterator().next(); + Resource configurationResource = configurations.iterator().next(); - // no support for multiple configs yet, but this is not a hard error - if (configurations.size() > 1) { - logger.info("found " + configurations.size() + " configurations for " + location - + ", will use the first one: " + configurationResource.getURL()); - } + // no support for multiple configs yet, but this is not a hard error + if (configurations.size() > 1) { + logger.info("found " + configurations.size() + " configurations for " + location + + ", will use the first one: " + configurationResource.getURL()); + } - ConfigurationTree<DataChannelDescriptor> tree = loader.load(configurationResource); - if (!tree.getLoadFailures().isEmpty()) { - // TODO: andrus 03/10/2010 - log the errors before throwing? - throw new DataDomainLoadException(tree, "Error loading DataChannelDescriptor"); - } + ConfigurationTree<DataChannelDescriptor> tree = loader.load(configurationResource); + if (!tree.getLoadFailures().isEmpty()) { + // TODO: andrus 03/10/2010 - log the errors before throwing? + throw new DataDomainLoadException(tree, "Error loading DataChannelDescriptor"); + } - descriptors[i] = tree.getRootNode(); - } + descriptors[i] = tree.getRootNode(); + } - long t1 = System.currentTimeMillis(); + long t1 = System.currentTimeMillis(); - if (logger.isDebugEnabled()) { - logger.debug("finished configuration loading in " + (t1 - t0) + " ms."); - } + if (logger.isDebugEnabled()) { + logger.debug("finished configuration loading in " + (t1 - t0) + " ms."); + } - return descriptorMerger.merge(descriptors); - } + return descriptorMerger.merge(descriptors); + } } diff --git a/cayenne/src/main/java/org/apache/cayenne/query/QueryChain.java b/cayenne/src/main/java/org/apache/cayenne/query/QueryChain.java index d2419d045..3f701abf5 100644 --- a/cayenne/src/main/java/org/apache/cayenne/query/QueryChain.java +++ b/cayenne/src/main/java/org/apache/cayenne/query/QueryChain.java @@ -20,7 +20,6 @@ package org.apache.cayenne.query; import org.apache.cayenne.CayenneRuntimeException; -import org.apache.cayenne.map.DataMap; import org.apache.cayenne.map.EntityResolver; import java.util.ArrayList; 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 3fccb34f3..e52d25fb4 100644 --- a/cayenne/src/test/java/org/apache/cayenne/access/DataContextSerializationIT.java +++ b/cayenne/src/test/java/org/apache/cayenne/access/DataContextSerializationIT.java @@ -35,6 +35,7 @@ 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; @@ -137,7 +138,7 @@ public class DataContextSerializationIT { DataDomain domain = context.getParentDataDomain(); DataRowStore snapshotCache = new DataRowStore( domain.getName(), - new DefaultRuntimeProperties(domain.getProperties()), + new DefaultRuntimeProperties(Collections.emptyMap()), domain.getEventManager()); Map<Object, Persistent> map = new HashMap<>(); 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 ea7842963..7ac546804 100644 --- a/cayenne/src/test/java/org/apache/cayenne/access/DataDomainIT.java +++ b/cayenne/src/test/java/org/apache/cayenne/access/DataDomainIT.java @@ -38,8 +38,6 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.RegisterExtension; import java.util.Collections; -import java.util.HashMap; -import java.util.Map; import static org.junit.jupiter.api.Assertions.*; @@ -158,43 +156,27 @@ public class DataDomainIT { assertNotNull(domain.getEntityResolver()); } - @SuppressWarnings("deprecation") @Test - public void initDataDomainWithSharedCache() throws Exception { - Map<String, String> properties = new HashMap<>(); - properties.put(DataDomain.SHARED_CACHE_ENABLED_PROPERTY, Boolean.TRUE.toString()); - - DataDomain domain = new DataDomain("d1", properties); - assertTrue(domain.isSharedCacheEnabled()); + public void sharedCacheEnabledDefault() { + assertTrue(new DataDomain("d1").isSharedCacheEnabled()); } - @SuppressWarnings("deprecation") @Test - public void initDataDomainWithDedicatedCache() throws Exception { - Map<String, String> properties = new HashMap<>(); - properties.put(DataDomain.SHARED_CACHE_ENABLED_PROPERTY, Boolean.FALSE.toString()); - - DataDomain domain = new DataDomain("d1", properties); + public void sharedCacheEnabled() { + DataDomain domain = new DataDomain("d1"); + domain.setSharedCacheEnabled(false); assertFalse(domain.isSharedCacheEnabled()); } - @SuppressWarnings("deprecation") @Test - public void initDataDomainValidation() throws Exception { - Map<String, String> properties = new HashMap<>(); - properties.put(DataDomain.VALIDATING_OBJECTS_ON_COMMIT_PROPERTY, Boolean.TRUE.toString()); - - DataDomain domain = new DataDomain("d1", properties); - assertTrue(domain.isValidatingObjectsOnCommit()); + public void validatingObjectsOnCommitDefault() { + assertTrue(new DataDomain("d1").isValidatingObjectsOnCommit()); } - @SuppressWarnings("deprecation") @Test - public void initDataDomainNoValidation() throws Exception { - Map<String, String> properties = new HashMap<>(); - properties.put(DataDomain.VALIDATING_OBJECTS_ON_COMMIT_PROPERTY, Boolean.FALSE.toString()); - - DataDomain domain = new DataDomain("d1", properties); + public void validatingObjectsOnCommit() { + DataDomain domain = new DataDomain("d1"); + domain.setValidatingObjectsOnCommit(false); assertFalse(domain.isValidatingObjectsOnCommit()); }
