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 c241f8229250503c9d3f4b087ade8ada7e211d64 Author: Andrus Adamchik <[email protected]> AuthorDate: Wed May 13 18:15:56 2026 -0400 unifying CayenneTestsEnv tool --- .../org/apache/cayenne/access/ObjectStoreGCIT.java | 4 +- .../cayenne/unit/di/runtime/CayenneTestsEnv.java | 40 ++++++- ...eakReferenceStrategyCayenneRuntimeProvider.java | 48 --------- .../WeakReferenceStrategyRuntimeCaseModule.java | 36 ------- .../di/runtime/WeakReferenceStrategyTestsEnv.java | 117 --------------------- 5 files changed, 37 insertions(+), 208 deletions(-) diff --git a/cayenne/src/test/java/org/apache/cayenne/access/ObjectStoreGCIT.java b/cayenne/src/test/java/org/apache/cayenne/access/ObjectStoreGCIT.java index 15ded4a67..8af1f88d3 100644 --- a/cayenne/src/test/java/org/apache/cayenne/access/ObjectStoreGCIT.java +++ b/cayenne/src/test/java/org/apache/cayenne/access/ObjectStoreGCIT.java @@ -24,7 +24,7 @@ import org.apache.cayenne.query.SQLTemplate; import org.apache.cayenne.test.parallel.ParallelTestContainer; import org.apache.cayenne.testdo.testmap.Artist; import org.apache.cayenne.unit.di.runtime.CayenneProjects; -import org.apache.cayenne.unit.di.runtime.WeakReferenceStrategyTestsEnv; +import org.apache.cayenne.unit.di.runtime.CayenneTestsEnv; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.RegisterExtension; @@ -34,7 +34,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; public class ObjectStoreGCIT { @RegisterExtension - static final WeakReferenceStrategyTestsEnv env = WeakReferenceStrategyTestsEnv.forProject(CayenneProjects.TESTMAP_PROJECT); + static final CayenneTestsEnv env = CayenneTestsEnv.forProject(CayenneProjects.TESTMAP_PROJECT).withWeakReferenceStrategy(); private DataContext context; diff --git a/cayenne/src/test/java/org/apache/cayenne/unit/di/runtime/CayenneTestsEnv.java b/cayenne/src/test/java/org/apache/cayenne/unit/di/runtime/CayenneTestsEnv.java index bd6e2297c..499bc9bfc 100644 --- a/cayenne/src/test/java/org/apache/cayenne/unit/di/runtime/CayenneTestsEnv.java +++ b/cayenne/src/test/java/org/apache/cayenne/unit/di/runtime/CayenneTestsEnv.java @@ -20,8 +20,12 @@ package org.apache.cayenne.unit.di.runtime; import org.apache.cayenne.ObjectContext; import org.apache.cayenne.access.DataContext; +import org.apache.cayenne.configuration.Constants; +import org.apache.cayenne.configuration.runtime.CoreModule; +import org.apache.cayenne.di.Binder; import org.apache.cayenne.di.DIBootstrap; import org.apache.cayenne.di.Injector; +import org.apache.cayenne.di.Module; import org.apache.cayenne.di.spi.DefaultScope; import org.apache.cayenne.runtime.CayenneRuntime; import org.apache.cayenne.test.jdbc.DBHelper; @@ -59,24 +63,26 @@ public class CayenneTestsEnv implements BeforeEachCallback, AfterEachCallback { private final String project; private final Class<?>[] extraModules; private final boolean autoClean; + private final boolean weakReferenceStrategy; private ObjectContext context; private DataContext dataContext; private DBHelper dbHelper; private CayenneRuntime runtime; - private CayenneTestsEnv(String project, Class<?>[] extraModules, boolean autoClean) { + private CayenneTestsEnv(String project, Class<?>[] extraModules, boolean autoClean, boolean weakReferenceStrategy) { this.project = project; this.extraModules = extraModules; this.autoClean = autoClean; + this.weakReferenceStrategy = weakReferenceStrategy; } public static CayenneTestsEnv forProject(String project) { - return new CayenneTestsEnv(project, new Class<?>[0], true); + return new CayenneTestsEnv(project, new Class<?>[0], true, false); } public CayenneTestsEnv withExtraModules(Class<?>... modules) { - return new CayenneTestsEnv(project, modules, autoClean); + return new CayenneTestsEnv(project, modules, autoClean, weakReferenceStrategy); } /** @@ -87,13 +93,30 @@ public class CayenneTestsEnv implements BeforeEachCallback, AfterEachCallback { * from its own {@code @BeforeEach}. */ public CayenneTestsEnv withoutAutoClean() { - return new CayenneTestsEnv(project, extraModules, false); + return new CayenneTestsEnv(project, extraModules, false, weakReferenceStrategy); + } + + /** + * Configures the runtime with the weak-reference object-tracking strategy + * instead of the default soft-reference strategy used by other tests. Use + * for GC-sensitive tests that need objects to be collectable as soon as + * they become unreferenced. + */ + public CayenneTestsEnv withWeakReferenceStrategy() { + return new CayenneTestsEnv(project, extraModules, autoClean, true); } @Override public void beforeEach(ExtensionContext ctx) throws Exception { INJECTOR.getInstance(RuntimeCaseProperties.class).setConfigurationLocation(project); - INJECTOR.getInstance(RuntimeCaseExtraModules.class).setExtraModules(extraModules); + + Class<?>[] effectiveExtras = extraModules; + if (weakReferenceStrategy) { + effectiveExtras = new Class<?>[extraModules.length + 1]; + System.arraycopy(extraModules, 0, effectiveExtras, 0, extraModules.length); + effectiveExtras[extraModules.length] = WeakReferenceStrategyModule.class; + } + INJECTOR.getInstance(RuntimeCaseExtraModules.class).setExtraModules(effectiveExtras); runtime = INJECTOR.getInstance(CayenneRuntime.class); context = INJECTOR.getInstance(ObjectContext.class); @@ -149,4 +172,11 @@ public class CayenneTestsEnv implements BeforeEachCallback, AfterEachCallback { public <T> T getInstance(Class<T> type) { return INJECTOR.getInstance(type); } + + public static class WeakReferenceStrategyModule implements Module { + @Override + public void configure(Binder binder) { + CoreModule.extend(binder).setProperty(Constants.OBJECT_RETAIN_STRATEGY_PROPERTY, "weak"); + } + } } diff --git a/cayenne/src/test/java/org/apache/cayenne/unit/di/runtime/WeakReferenceStrategyCayenneRuntimeProvider.java b/cayenne/src/test/java/org/apache/cayenne/unit/di/runtime/WeakReferenceStrategyCayenneRuntimeProvider.java deleted file mode 100644 index 9628fb2ba..000000000 --- a/cayenne/src/test/java/org/apache/cayenne/unit/di/runtime/WeakReferenceStrategyCayenneRuntimeProvider.java +++ /dev/null @@ -1,48 +0,0 @@ -/***************************************************************** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - ****************************************************************/ -package org.apache.cayenne.unit.di.runtime; - -import org.apache.cayenne.configuration.Constants; -import org.apache.cayenne.configuration.runtime.CoreModule; -import org.apache.cayenne.dba.DbAdapter; -import org.apache.cayenne.di.Inject; -import org.apache.cayenne.di.Module; -import org.apache.cayenne.di.Provider; -import org.apache.cayenne.unit.UnitDbAdapter; - -import java.util.ArrayList; -import java.util.Collection; - -public class WeakReferenceStrategyCayenneRuntimeProvider extends CayenneRuntimeProvider { - - public WeakReferenceStrategyCayenneRuntimeProvider(@Inject RuntimeCaseDataSourceFactory dataSourceFactory, - @Inject RuntimeCaseProperties properties, - @Inject RuntimeCaseExtraModules extraModulesProperties, - @Inject Provider<DbAdapter> dbAdapterProvider, - @Inject UnitDbAdapter unitDbAdapter) { - super(dataSourceFactory, properties, extraModulesProperties, dbAdapterProvider, unitDbAdapter); - } - - @Override - protected Collection<? extends Module> getExtraModules() { - Collection<Module> modules = new ArrayList<>(super.getExtraModules()); - modules.add(b -> CoreModule.extend(b).setProperty(Constants.OBJECT_RETAIN_STRATEGY_PROPERTY, "weak")); - return modules; - } -} diff --git a/cayenne/src/test/java/org/apache/cayenne/unit/di/runtime/WeakReferenceStrategyRuntimeCaseModule.java b/cayenne/src/test/java/org/apache/cayenne/unit/di/runtime/WeakReferenceStrategyRuntimeCaseModule.java deleted file mode 100644 index dc8dd83bb..000000000 --- a/cayenne/src/test/java/org/apache/cayenne/unit/di/runtime/WeakReferenceStrategyRuntimeCaseModule.java +++ /dev/null @@ -1,36 +0,0 @@ -/***************************************************************** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - ****************************************************************/ -package org.apache.cayenne.unit.di.runtime; - -import org.apache.cayenne.di.Binder; -import org.apache.cayenne.di.spi.DefaultScope; -import org.apache.cayenne.runtime.CayenneRuntime; - -public class WeakReferenceStrategyRuntimeCaseModule extends RuntimeCaseModule { - - public WeakReferenceStrategyRuntimeCaseModule(DefaultScope testScope) { - super(testScope); - } - - @Override - public void configure(Binder binder){ - super.configure(binder); - binder.bind(CayenneRuntime.class).toProvider(WeakReferenceStrategyCayenneRuntimeProvider.class).in(testScope); - } -} diff --git a/cayenne/src/test/java/org/apache/cayenne/unit/di/runtime/WeakReferenceStrategyTestsEnv.java b/cayenne/src/test/java/org/apache/cayenne/unit/di/runtime/WeakReferenceStrategyTestsEnv.java deleted file mode 100644 index 54bd1248b..000000000 --- a/cayenne/src/test/java/org/apache/cayenne/unit/di/runtime/WeakReferenceStrategyTestsEnv.java +++ /dev/null @@ -1,117 +0,0 @@ -/***************************************************************** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - ****************************************************************/ -package org.apache.cayenne.unit.di.runtime; - -import org.apache.cayenne.ObjectContext; -import org.apache.cayenne.access.DataContext; -import org.apache.cayenne.di.DIBootstrap; -import org.apache.cayenne.di.Injector; -import org.apache.cayenne.di.spi.DefaultScope; -import org.apache.cayenne.runtime.CayenneRuntime; -import org.apache.cayenne.test.jdbc.DBHelper; -import org.junit.jupiter.api.extension.AfterEachCallback; -import org.junit.jupiter.api.extension.BeforeEachCallback; -import org.junit.jupiter.api.extension.ExtensionContext; - -/** - * Sibling of {@link CayenneTestsEnv} that wires its own injector via - * {@link WeakReferenceStrategyRuntimeCaseModule}. Use it for tests that need - * a runtime configured with the weak-reference object-tracking strategy. - */ -// TODO: merge with CayenneTestsEnv -@Deprecated(forRemoval = true) -public class WeakReferenceStrategyTestsEnv implements BeforeEachCallback, AfterEachCallback { - - private static final DefaultScope TEST_SCOPE; - private static final Injector INJECTOR; - - static { - TEST_SCOPE = new DefaultScope(); - INJECTOR = DIBootstrap.createInjector(new WeakReferenceStrategyRuntimeCaseModule(TEST_SCOPE)); - INJECTOR.getInstance(SchemaBuilder.class).rebuildSchema(); - } - - private final String project; - private final Class<?>[] extraModules; - - private ObjectContext context; - private DataContext dataContext; - private DBHelper dbHelper; - private CayenneRuntime runtime; - - private WeakReferenceStrategyTestsEnv(String project, Class<?>[] extraModules) { - this.project = project; - this.extraModules = extraModules; - } - - public static WeakReferenceStrategyTestsEnv forProject(String project) { - return new WeakReferenceStrategyTestsEnv(project, new Class<?>[0]); - } - - public WeakReferenceStrategyTestsEnv withExtraModules(Class<?>... modules) { - return new WeakReferenceStrategyTestsEnv(project, modules); - } - - @Override - public void beforeEach(ExtensionContext ctx) throws Exception { - INJECTOR.getInstance(RuntimeCaseProperties.class).setConfigurationLocation(project); - INJECTOR.getInstance(RuntimeCaseExtraModules.class).setExtraModules(extraModules); - - runtime = INJECTOR.getInstance(CayenneRuntime.class); - context = INJECTOR.getInstance(ObjectContext.class); - dataContext = INJECTOR.getInstance(DataContext.class); - dbHelper = INJECTOR.getInstance(DBHelper.class); - - DBCleaner dbCleaner = INJECTOR.getInstance(DBCleaner.class); - try { - dbCleaner.clean(); - } catch (Exception ex) { - dbCleaner.clean(); - } - } - - @Override - public void afterEach(ExtensionContext ctx) { - TEST_SCOPE.shutdown(); - context = null; - dataContext = null; - dbHelper = null; - runtime = null; - } - - public ObjectContext context() { - return context; - } - - public DataContext dataContext() { - return dataContext; - } - - public DBHelper dbHelper() { - return dbHelper; - } - - public CayenneRuntime runtime() { - return runtime; - } - - public <T> T getInstance(Class<T> type) { - return INJECTOR.getInstance(type); - } -}
