1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.syncope.core.starter;
20
21 import java.util.Comparator;
22 import org.apache.syncope.common.keymaster.client.api.model.NetworkService;
23 import org.apache.syncope.common.keymaster.client.api.startstop.KeymasterStart;
24 import org.apache.syncope.core.persistence.api.DomainHolder;
25 import org.apache.syncope.core.persistence.api.SyncopeCoreLoader;
26 import org.slf4j.Logger;
27 import org.slf4j.LoggerFactory;
28 import org.springframework.aop.support.AopUtils;
29 import org.springframework.context.event.ContextRefreshedEvent;
30 import org.springframework.core.Ordered;
31
32
33
34
35 public class SyncopeCoreStart extends KeymasterStart implements Ordered {
36
37 private static final Logger LOG = LoggerFactory.getLogger(SyncopeCoreStart.class);
38
39 private final DomainHolder domainHolder;
40
41 public SyncopeCoreStart(final DomainHolder domainHolder) {
42 super(NetworkService.Type.CORE);
43 this.domainHolder = domainHolder;
44 }
45
46 @Override
47 public int getOrder() {
48 return 0;
49 }
50
51 @Override
52 public void onApplicationEvent(final ContextRefreshedEvent event) {
53 event.getApplicationContext().getBeansOfType(SyncopeCoreLoader.class).values().stream().
54 sorted(Comparator.comparing(SyncopeCoreLoader::getOrder)).
55 forEachOrdered(loader -> {
56 String loaderName = AopUtils.getTargetClass(loader).getName();
57
58 LOG.debug("[{}#{}] Starting init", loaderName, loader.getOrder());
59
60 loader.load();
61
62 domainHolder.getDomains().forEach((domain, datasource) -> {
63 LOG.debug("[{}] Starting init on domain '{}'", loaderName, domain);
64 loader.load(domain, datasource);
65 LOG.debug("[{}] Init completed on domain '{}'", loaderName, domain);
66 });
67
68 LOG.debug("[{}] Init completed", loaderName);
69 });
70
71 super.onApplicationEvent(event);
72 }
73 }