[SYNCOPE-1644] Fixing job reporting
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/SyncopeSpringBeanJobFactory.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/SyncopeSpringBeanJobFactory.java
index c690f39..6565f27 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/SyncopeSpringBeanJobFactory.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/SyncopeSpringBeanJobFactory.java
@@ -21,11 +21,17 @@
import java.util.Optional;
import org.apache.syncope.core.provisioning.api.job.JobManager;
import org.apache.syncope.core.provisioning.java.job.report.ReportJob;
+import org.apache.syncope.core.spring.ApplicationContextProvider;
import org.quartz.spi.TriggerFiredBundle;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.support.DefaultListableBeanFactory;
import org.springframework.scheduling.quartz.SpringBeanJobFactory;
public class SyncopeSpringBeanJobFactory extends SpringBeanJobFactory {
+ private static final Logger LOG = LoggerFactory.getLogger(SyncopeSpringBeanJobFactory.class);
+
@Override
protected Object createJobInstance(final TriggerFiredBundle bundle) throws Exception {
Object job = super.createJobInstance(bundle);
@@ -40,6 +46,16 @@
}
}
+ DefaultListableBeanFactory factory = ApplicationContextProvider.getBeanFactory();
+ try {
+ if (factory.containsSingleton(bundle.getJobDetail().getKey().getName())) {
+ factory.destroySingleton(bundle.getJobDetail().getKey().getName());
+ }
+ factory.registerSingleton(bundle.getJobDetail().getKey().getName(), job);
+ } catch (Exception e) {
+ LOG.error("While attempting to replace job instance as singleton Spring bean", e);
+ }
+
return job;
}
}