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}