1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.syncope.core.provisioning.java.job;
20
21 import org.apache.syncope.core.spring.ApplicationContextProvider;
22 import org.quartz.spi.TriggerFiredBundle;
23 import org.slf4j.Logger;
24 import org.slf4j.LoggerFactory;
25 import org.springframework.beans.factory.support.DefaultListableBeanFactory;
26 import org.springframework.scheduling.quartz.SpringBeanJobFactory;
27
28 public class SyncopeSpringBeanJobFactory extends SpringBeanJobFactory {
29
30 private static final Logger LOG = LoggerFactory.getLogger(SyncopeSpringBeanJobFactory.class);
31
32 @Override
33 protected Object createJobInstance(final TriggerFiredBundle bundle) throws Exception {
34 Object job = super.createJobInstance(bundle);
35
36 DefaultListableBeanFactory factory = ApplicationContextProvider.getBeanFactory();
37 try {
38 if (factory.containsSingleton(bundle.getJobDetail().getKey().getName())) {
39 factory.destroySingleton(bundle.getJobDetail().getKey().getName());
40 }
41 factory.registerSingleton(bundle.getJobDetail().getKey().getName(), job);
42 } catch (Exception e) {
43 LOG.error("While attempting to replace job instance as singleton Spring bean", e);
44 }
45
46 return job;
47 }
48 }