1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package info.magnolia.cms.beans.config;
35
36 import info.magnolia.cms.core.Path;
37 import info.magnolia.cms.i18n.MessagesManager;
38 import info.magnolia.cms.license.LicenseFileExtractor;
39 import info.magnolia.module.ModuleManagementException;
40 import info.magnolia.module.ModuleManager;
41 import info.magnolia.module.ModuleRegistry;
42 import info.magnolia.objectfactory.Components;
43 import info.magnolia.objectfactory.configuration.ComponentProviderConfiguration;
44 import info.magnolia.objectfactory.configuration.ComponentProviderConfigurationBuilder;
45 import info.magnolia.objectfactory.guice.GuiceComponentProvider;
46 import info.magnolia.objectfactory.guice.GuiceComponentProviderBuilder;
47
48 import org.apache.commons.lang3.StringUtils;
49 import org.slf4j.Logger;
50 import org.slf4j.LoggerFactory;
51
52 import javax.inject.Inject;
53 import javax.inject.Singleton;
54 import javax.servlet.ServletContext;
55
56
57
58
59
60 @Singleton
61 public class ConfigLoader {
62 private static final Logger log = LoggerFactory.getLogger(ConfigLoader.class);
63 private static final String JAAS_PROPERTYNAME = "java.security.auth.login.config";
64
65 private final ModuleManager moduleManager;
66 private final ModuleRegistry moduleRegistry;
67 private final LicenseFileExtractor license;
68 private final MessagesManager messagesManager;
69 private final VersionConfig versionConfig;
70 private GuiceComponentProvider main;
71
72
73
74
75
76
77
78
79
80
81 @Inject
82 public ConfigLoader(ModuleManager moduleManager, ModuleRegistry moduleRegistry, LicenseFileExtractor licenseFileExtractor, MessagesManager messagesManager, VersionConfig versionConfig, ServletContext context) {
83 this.moduleManager = moduleManager;
84 this.moduleRegistry = moduleRegistry;
85 this.license = licenseFileExtractor;
86 this.messagesManager = messagesManager;
87 this.versionConfig = versionConfig;
88
89 if (StringUtils.isEmpty(System.getProperty(JAAS_PROPERTYNAME))) {
90 try {
91 System.setProperty(JAAS_PROPERTYNAME, Path.getAbsoluteFileSystemPath("WEB-INF/config/jaas.config"));
92 }
93 catch (SecurityException se) {
94 log.error("Failed to set {}, check application server settings", JAAS_PROPERTYNAME);
95 log.error(se.getMessage(), se);
96 log.info("Aborting startup");
97 return;
98 }
99 } else {
100 log.info("JAAS config file set by parent container or some other application");
101 log.info("Config in use {}", System.getProperty(JAAS_PROPERTYNAME));
102 log.info("Please make sure JAAS config has all necessary modules (refer config/jaas.config) configured");
103 }
104 }
105
106
107
108
109 public void unload(ServletContext servletContext) {
110 unload();
111 }
112
113 public void unload() {
114
115 if (main != null) {
116 Components.setComponentProvider(main.getParent());
117 main.destroy();
118 }
119 ContentRepository.shutdown();
120 }
121
122
123
124
125 public void load(ServletContext servletContext) {
126 load();
127 }
128
129
130
131
132 public void load() {
133 license.init();
134 license.printVersionInfo();
135
136 final long millis = System.currentTimeMillis();
137 log.info("Initializing content repositories");
138
139 ContentRepository.init();
140
141 GuiceComponentProviderBuilder builder = new GuiceComponentProviderBuilder();
142 builder.withConfiguration(getMainComponents());
143 builder.withParent((GuiceComponentProvider) Components.getComponentProvider());
144 builder.exposeGlobally();
145 main = builder.build();
146
147 try {
148 moduleManager.checkForInstallOrUpdates();
149 moduleManager.getUI().onStartup();
150
151
152
153 messagesManager.init();
154
155 MIMEMapping.init();
156 versionConfig.init();
157
158
159 log.info("Configuration loaded (took {} seconds)", Long.toString((System.currentTimeMillis() - millis) / 1000));
160
161 } catch (ModuleManagementException e) {
162 log.error("A module error occurred during initialization: {}", e.getMessage(), e);
163 } catch (ConfigurationException e) {
164 log.error("A configuration error occurred during initialization: {}", e.getMessage(), e);
165 } catch (Throwable e) {
166 log.error("An unspecified error occurred during initialization: {}", e.getMessage(), e);
167 }
168
169 }
170
171 protected ComponentProviderConfiguration getMainComponents() {
172 ComponentProviderConfigurationBuilder configurationBuilder = new ComponentProviderConfigurationBuilder();
173 return configurationBuilder.getComponentsFromModules("main", moduleRegistry.getModuleDefinitions());
174 }
175 }