001// Generated by delombok at Mon Oct 12 22:59:35 BST 2020
002/*
003 *  Licensed to the Apache Software Foundation (ASF) under one
004 *  or more contributor license agreements.  See the NOTICE file
005 *  distributed with this work for additional information
006 *  regarding copyright ownership.  The ASF licenses this file
007 *  to you under the Apache License, Version 2.0 (the
008 *  "License"); you may not use this file except in compliance
009 *  with the License.  You may obtain a copy of the License at
010 *
011 *        http://www.apache.org/licenses/LICENSE-2.0
012 *
013 *  Unless required by applicable law or agreed to in writing,
014 *  software distributed under the License is distributed on an
015 *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
016 *  KIND, either express or implied.  See the License for the
017 *  specific language governing permissions and limitations
018 *  under the License.
019 */
020package org.apache.isis.extensions.commandreplay.secondary;
021
022import javax.inject.Inject;
023import org.quartz.JobDetail;
024import org.quartz.Scheduler;
025import org.quartz.SchedulerException;
026import org.quartz.SimpleTrigger;
027import org.quartz.Trigger;
028import org.springframework.beans.factory.annotation.Qualifier;
029import org.springframework.context.ApplicationContext;
030import org.springframework.context.annotation.Bean;
031import org.springframework.context.annotation.Configuration;
032import org.springframework.context.annotation.Import;
033import org.springframework.context.annotation.Profile;
034import org.springframework.scheduling.quartz.JobDetailFactoryBean;
035import org.springframework.scheduling.quartz.SchedulerFactoryBean;
036import org.springframework.scheduling.quartz.SimpleTriggerFactoryBean;
037import org.springframework.scheduling.quartz.SpringBeanJobFactory;
038import org.apache.isis.core.config.IsisConfiguration;
039import org.apache.isis.extensions.commandlog.impl.IsisModuleExtCommandLogImpl;
040import org.apache.isis.extensions.commandreplay.secondary.analyser.CommandReplayAnalyserException;
041import org.apache.isis.extensions.commandreplay.secondary.analyser.CommandReplayAnalyserResult;
042import org.apache.isis.extensions.commandreplay.secondary.analysis.CommandReplayAnalysisService;
043import org.apache.isis.extensions.commandreplay.secondary.clock.TickingClockService;
044import org.apache.isis.extensions.commandreplay.secondary.executor.CommandExecutorServiceWithTime;
045import org.apache.isis.extensions.commandreplay.secondary.fetch.CommandFetcher;
046import org.apache.isis.extensions.commandreplay.secondary.config.SecondaryConfig;
047import org.apache.isis.extensions.commandreplay.secondary.job.ReplicateAndReplayJob;
048import org.apache.isis.extensions.commandreplay.secondary.mixins.Object_openOnPrimary;
049import org.apache.isis.extensions.commandreplay.secondary.ui.CommandReplayOnSecondaryService;
050import org.apache.isis.extensions.quartz.IsisModuleExtQuartzImpl;
051import org.apache.isis.extensions.quartz.spring.AutowiringSpringBeanJobFactory;
052// @Configuration's
053// @Service's
054// @Service's
055// mixins
056@Configuration
057@Import({IsisModuleExtCommandLogImpl.class, IsisModuleExtQuartzImpl.class, CommandExecutorServiceWithTime.class, CommandFetcher.class, CommandReplayAnalyserResult.class, CommandReplayAnalyserException.class, CommandReplayAnalysisService.class, CommandReplayOnSecondaryService.class, TickingClockService.class, SecondaryConfig.class, Object_openOnPrimary.class})
058@Profile("secondary")
059public class IsisModuleExtCommandReplaySecondary {
060
061    public static abstract class ActionDomainEvent<S> extends org.apache.isis.applib.events.domain.ActionDomainEvent<S> {
062    }
063
064
065    public static abstract class CollectionDomainEvent<S, T> extends org.apache.isis.applib.events.domain.CollectionDomainEvent<S, T> {
066    }
067
068
069    public static abstract class PropertyDomainEvent<S, T> extends org.apache.isis.applib.events.domain.PropertyDomainEvent<S, T> {
070    }
071
072    @Inject
073    ApplicationContext applicationContext;
074    @Inject
075    IsisConfiguration isisConfiguration;
076
077    @Bean(name = "ReplicateAndReplayJob")
078    public JobDetailFactoryBean replicateAndReplayJobDetailFactory() {
079        final org.springframework.scheduling.quartz.JobDetailFactoryBean jobDetailFactory = new JobDetailFactoryBean();
080        jobDetailFactory.setJobClass(ReplicateAndReplayJob.class);
081        jobDetailFactory.setDescription("Replicate commands from primary and replay on secondary");
082        jobDetailFactory.setDurability(true);
083        return jobDetailFactory;
084    }
085
086    @Bean(name = "ReplicateAndReplayTrigger")
087    public SimpleTriggerFactoryBean replicateAndReplayTriggerFactory(@Qualifier("ReplicateAndReplayJob") JobDetail job) {
088        final org.springframework.scheduling.quartz.SimpleTriggerFactoryBean triggerFactory = new SimpleTriggerFactoryBean();
089        triggerFactory.setJobDetail(job);
090        final org.apache.isis.core.config.IsisConfiguration.Extensions.CommandReplay.QuartzReplicateAndReplayJob config = isisConfiguration.getExtensions().getCommandReplay().getQuartzReplicateAndReplayJob();
091        triggerFactory.setRepeatInterval(config.getRepeatInterval());
092        triggerFactory.setStartDelay(config.getStartDelay());
093        triggerFactory.setRepeatCount(SimpleTrigger.REPEAT_INDEFINITELY);
094        return triggerFactory;
095    }
096
097    @Bean(name = "ReplicateAndReplaySbjf")
098    public SpringBeanJobFactory springBeanJobFactory() {
099        final org.apache.isis.extensions.quartz.spring.AutowiringSpringBeanJobFactory jobFactory = new AutowiringSpringBeanJobFactory();
100        jobFactory.setApplicationContext(applicationContext);
101        return jobFactory;
102    }
103
104    @Bean(name = "ReplicateAndReplaySfb")
105    public SchedulerFactoryBean scheduler(@Qualifier("ReplicateAndReplayTrigger") final Trigger trigger, @Qualifier("ReplicateAndReplayJob") final JobDetail jobDetail, @Qualifier("ReplicateAndReplaySbjf") final SpringBeanJobFactory sbjf) {
106        final org.springframework.scheduling.quartz.SchedulerFactoryBean schedulerFactory = new SchedulerFactoryBean();
107        schedulerFactory.setJobFactory(sbjf);
108        schedulerFactory.setJobDetails(jobDetail);
109        schedulerFactory.setTriggers(trigger);
110        return schedulerFactory;
111    }
112
113    @Bean(name = "ReplicateAndReplayScheduler")
114    public Scheduler scheduler(@Qualifier("ReplicateAndReplayTrigger") final Trigger trigger, @Qualifier("ReplicateAndReplayJob") final JobDetail job, @Qualifier("ReplicateAndReplaySfb") final SchedulerFactoryBean factory) throws SchedulerException {
115        final org.quartz.Scheduler scheduler = factory.getScheduler();
116        scheduler.start();
117        return scheduler;
118    }
119}