From 0c8f668ac2eee3de048d4d5bdb0c9d45d9dc4262 Mon Sep 17 00:00:00 2001 From: Thorsten Marx Date: Mon, 7 Oct 2024 16:21:54 +0200 Subject: [PATCH] fix reloading of configurations --- .../eventbus/events/ConfigurationFileChanged.java | 15 +++++++++++++-- .../core/scheduler/AbstractCronJobScheduler.java | 7 ++++++- .../core/scheduler/SingleCronJobScheduler.java | 7 ++++--- .../cms/core/scheduler/SiteCronJobScheduler.java | 5 +++-- cms-server/hosts/features/site.yaml | 2 +- .../main/java/com/condation/cms/server/VHost.java | 2 ++ .../cms/server/configs/SiteGlobalModule.java | 8 ++++---- .../condation/cms/server/configs/SiteModule.java | 1 - .../tests/ConfigurationManagementReloadTest.java | 9 ++++++++- 9 files changed, 41 insertions(+), 15 deletions(-) diff --git a/cms-api/src/main/java/com/condation/cms/api/eventbus/events/ConfigurationFileChanged.java b/cms-api/src/main/java/com/condation/cms/api/eventbus/events/ConfigurationFileChanged.java index d4b5ee1d7..bc9404569 100644 --- a/cms-api/src/main/java/com/condation/cms/api/eventbus/events/ConfigurationFileChanged.java +++ b/cms-api/src/main/java/com/condation/cms/api/eventbus/events/ConfigurationFileChanged.java @@ -21,7 +21,6 @@ * . * #L% */ - import com.condation.cms.api.configuration.Config; import com.condation.cms.api.eventbus.Event; @@ -29,5 +28,17 @@ * * @author t.marx */ -public record ConfigurationFileChanged(Class clazz) implements Event { +public record ConfigurationFileChanged(String configurationClassName) implements Event { + + public ConfigurationFileChanged(Class configClass) { + this(configClass.getName()); + } + + public Class clazz() { + try { + return Class.forName(configurationClassName); + } catch (ClassNotFoundException ex) { + throw new RuntimeException("", ex); + } + } } diff --git a/cms-core/src/main/java/com/condation/cms/core/scheduler/AbstractCronJobScheduler.java b/cms-core/src/main/java/com/condation/cms/core/scheduler/AbstractCronJobScheduler.java index 3b0055c1c..37e9302f1 100644 --- a/cms-core/src/main/java/com/condation/cms/core/scheduler/AbstractCronJobScheduler.java +++ b/cms-core/src/main/java/com/condation/cms/core/scheduler/AbstractCronJobScheduler.java @@ -23,6 +23,7 @@ */ +import com.condation.cms.api.SiteProperties; import com.condation.cms.api.scheduler.CronJob; import com.condation.cms.api.scheduler.CronJobContext; import lombok.RequiredArgsConstructor; @@ -48,18 +49,22 @@ public class AbstractCronJobScheduler { private final Scheduler scheduler; private final CronJobContext context; + private final SiteProperties siteProperties; protected void schedule( String cronExpression, String name, CronJob job, Class jobClass) { + + var identity = "%s-%s".formatted(siteProperties.id(), name); + JobDataMap data = new JobDataMap(); data.put(SingleCronJobRunner.DATA_CRONJOB, job); data.put(SingleCronJobRunner.DATA_CONTEXT, context); JobDetail jobDetail = JobBuilder .newJob(jobClass) - .withIdentity(name) + .withIdentity(identity) .usingJobData(data) .build(); diff --git a/cms-core/src/main/java/com/condation/cms/core/scheduler/SingleCronJobScheduler.java b/cms-core/src/main/java/com/condation/cms/core/scheduler/SingleCronJobScheduler.java index 86667e7d5..c05189f1e 100644 --- a/cms-core/src/main/java/com/condation/cms/core/scheduler/SingleCronJobScheduler.java +++ b/cms-core/src/main/java/com/condation/cms/core/scheduler/SingleCronJobScheduler.java @@ -23,6 +23,7 @@ */ +import com.condation.cms.api.SiteProperties; import com.condation.cms.api.scheduler.CronJob; import com.condation.cms.api.scheduler.CronJobContext; import com.condation.cms.api.scheduler.CronJobScheduler; @@ -35,9 +36,9 @@ */ @Slf4j public class SingleCronJobScheduler extends AbstractCronJobScheduler implements CronJobScheduler { - - public SingleCronJobScheduler(Scheduler scheduler, CronJobContext context) { - super(scheduler, context); + + public SingleCronJobScheduler(Scheduler scheduler, CronJobContext context, SiteProperties siteProperties) { + super(scheduler, context, siteProperties); } @Override diff --git a/cms-core/src/main/java/com/condation/cms/core/scheduler/SiteCronJobScheduler.java b/cms-core/src/main/java/com/condation/cms/core/scheduler/SiteCronJobScheduler.java index 681b62b1f..fa8248373 100644 --- a/cms-core/src/main/java/com/condation/cms/core/scheduler/SiteCronJobScheduler.java +++ b/cms-core/src/main/java/com/condation/cms/core/scheduler/SiteCronJobScheduler.java @@ -23,6 +23,7 @@ */ +import com.condation.cms.api.SiteProperties; import com.condation.cms.api.scheduler.CronJob; import com.condation.cms.api.scheduler.CronJobContext; import com.condation.cms.api.scheduler.CronJobScheduler; @@ -36,8 +37,8 @@ @Slf4j public class SiteCronJobScheduler extends AbstractCronJobScheduler implements CronJobScheduler { - public SiteCronJobScheduler(Scheduler scheduler, CronJobContext context) { - super(scheduler, context); + public SiteCronJobScheduler(Scheduler scheduler, CronJobContext context, SiteProperties siteProperties) { + super(scheduler, context, siteProperties); } @Override diff --git a/cms-server/hosts/features/site.yaml b/cms-server/hosts/features/site.yaml index bd10e799f..c42eb0216 100644 --- a/cms-server/hosts/features/site.yaml +++ b/cms-server/hosts/features/site.yaml @@ -3,7 +3,7 @@ hostname: - localhost2 baseurl: "http://localhost2:1010" language: en -test: Hallo12 +test: Hallo theme: test cache: content: true diff --git a/cms-server/src/main/java/com/condation/cms/server/VHost.java b/cms-server/src/main/java/com/condation/cms/server/VHost.java index 5dbc1c356..e6b772a3e 100644 --- a/cms-server/src/main/java/com/condation/cms/server/VHost.java +++ b/cms-server/src/main/java/com/condation/cms/server/VHost.java @@ -180,6 +180,8 @@ public void init(Path modulesPath, Injector globalInjector) throws IOException { var moduleManager = injector.getInstance(ModuleManager.class); var contentResolver = injector.getInstance(ContentResolver.class); var requestContextFactory = injector.getInstance(RequestContextFactory.class); + // start configuration managment + injector.getInstance(ConfigurationManagement.class); cmsModuleContext.add( ContentRenderFeature.class, diff --git a/cms-server/src/main/java/com/condation/cms/server/configs/SiteGlobalModule.java b/cms-server/src/main/java/com/condation/cms/server/configs/SiteGlobalModule.java index 2f0f6705d..c03765959 100644 --- a/cms-server/src/main/java/com/condation/cms/server/configs/SiteGlobalModule.java +++ b/cms-server/src/main/java/com/condation/cms/server/configs/SiteGlobalModule.java @@ -95,13 +95,13 @@ public GlobalHooks globalHooks (SingleCronJobScheduler scheduler, @Named("global @Provides @Singleton - public SiteCronJobScheduler cronJobScheduler (Scheduler scheduler, CronJobContext context) { - return new SiteCronJobScheduler(scheduler, context); + public SiteCronJobScheduler cronJobScheduler (Scheduler scheduler, CronJobContext context, SiteProperties siteProperties) { + return new SiteCronJobScheduler(scheduler, context, siteProperties); } @Provides @Singleton - public SingleCronJobScheduler singleCronJobScheduler (Scheduler scheduler, CronJobContext context) { - return new SingleCronJobScheduler(scheduler, context); + public SingleCronJobScheduler singleCronJobScheduler (Scheduler scheduler, CronJobContext context, SiteProperties siteProperties) { + return new SingleCronJobScheduler(scheduler, context, siteProperties); } @Provides diff --git a/cms-server/src/main/java/com/condation/cms/server/configs/SiteModule.java b/cms-server/src/main/java/com/condation/cms/server/configs/SiteModule.java index 5ec5ef3a2..add4c630f 100644 --- a/cms-server/src/main/java/com/condation/cms/server/configs/SiteModule.java +++ b/cms-server/src/main/java/com/condation/cms/server/configs/SiteModule.java @@ -59,7 +59,6 @@ import com.condation.cms.content.DefaultContentRenderer; import com.condation.cms.content.TaxonomyResolver; import com.condation.cms.content.ViewResolver; -import com.condation.cms.core.eventbus.DefaultEventBus; import com.condation.cms.extensions.ExtensionManager; import com.condation.cms.filesystem.FileDB; import com.condation.cms.filesystem.MetaData; diff --git a/integration-tests/src/test/java/com/condation/cms/integration/tests/ConfigurationManagementReloadTest.java b/integration-tests/src/test/java/com/condation/cms/integration/tests/ConfigurationManagementReloadTest.java index 8cee073dc..b2093d1e9 100644 --- a/integration-tests/src/test/java/com/condation/cms/integration/tests/ConfigurationManagementReloadTest.java +++ b/integration-tests/src/test/java/com/condation/cms/integration/tests/ConfigurationManagementReloadTest.java @@ -23,6 +23,7 @@ */ import com.condation.cms.api.ServerProperties; +import com.condation.cms.api.SiteProperties; import com.condation.cms.api.configuration.Configuration; import com.condation.cms.api.configuration.ConfigurationManagement; import com.condation.cms.api.configuration.configs.ServerConfiguration; @@ -71,8 +72,10 @@ public class ConfigurationManagementReloadTest { static void setup() throws IOException, SchedulerException { var serverProps = Mockito.mock(ServerProperties.class); + var siteProps = Mockito.mock(SiteProperties.class); Mockito.when(serverProps.env()).thenReturn("dev"); + Mockito.when(siteProps.id()).thenReturn("site"); configuration = new Configuration(Path.of("reload/")); configuration.add(ServerConfiguration.class, new ServerConfiguration(serverProps)); @@ -85,7 +88,11 @@ static void setup() throws IOException, SchedulerException { scheduler.start(); - configurationManagement = new ConfigurationManagement(db, configuration, new SingleCronJobScheduler(scheduler, new CronJobContext()), eventBus); + configurationManagement = new ConfigurationManagement( + db, + configuration, + new SingleCronJobScheduler(scheduler, new CronJobContext(), siteProps), + eventBus); configurationManagement.init("0/5 * * * * ?"); }