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.lang.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
61
62 @Singleton
63 public class ConfigLoader {
64 private static final Logger log = LoggerFactory.getLogger(ConfigLoader.class);
65 private static final String JAAS_PROPERTYNAME = "java.security.auth.login.config";
66
67 private final ModuleManager moduleManager;
68 private final ModuleRegistry moduleRegistry;
69 private final LicenseFileExtractor license;
70 private final MessagesManager messagesManager;
71 private final VersionConfig versionConfig;
72 private GuiceComponentProvider main;
73
74
75
76
77
78
79
80
81
82
83 @Inject
84 public ConfigLoader(ModuleManager moduleManager, ModuleRegistry moduleRegistry, LicenseFileExtractor licenseFileExtractor, MessagesManager messagesManager, VersionConfig versionConfig, ServletContext context) {
85 this.moduleManager = moduleManager;
86 this.moduleRegistry = moduleRegistry;
87 this.license = licenseFileExtractor;
88 this.messagesManager = messagesManager;
89 this.versionConfig = versionConfig;
90
91 if (StringUtils.isEmpty(System.getProperty(JAAS_PROPERTYNAME))) {
92 try {
93 System.setProperty(JAAS_PROPERTYNAME, Path.getAbsoluteFileSystemPath("WEB-INF/config/jaas.config"));
94 }
95 catch (SecurityException se) {
96 log.error("Failed to set {}, check application server settings", JAAS_PROPERTYNAME);
97 log.error(se.getMessage(), se);
98 log.info("Aborting startup");
99 return;
100 }
101 } else {
102 log.info("JAAS config file set by parent container or some other application");
103 log.info("Config in use {}", System.getProperty(JAAS_PROPERTYNAME));
104 log.info("Please make sure JAAS config has all necessary modules (refer config/jaas.config) configured");
105 }
106 }
107
108
109
110
111 public void unload(ServletContext servletContext) {
112 unload();
113 }
114
115 public void unload() {
116
117 if (main != null) {
118 Components.setComponentProvider(main.getParent());
119 main.destroy();
120 }
121 ContentRepository.shutdown();
122 }
123
124
125
126
127 public void load(ServletContext servletContext) {
128 load();
129 }
130
131
132
133
134 public void load() {
135 license.init();
136 license.printVersionInfo();
137
138 final long millis = System.currentTimeMillis();
139 log.info("Initializing content repositories");
140
141 ContentRepository.init();
142
143 GuiceComponentProviderBuilder builder = new GuiceComponentProviderBuilder();
144 builder.withConfiguration(getMainComponents());
145 builder.withParent((GuiceComponentProvider) Components.getComponentProvider());
146 builder.exposeGlobally();
147 main = builder.build();
148
149 try {
150 moduleManager.checkForInstallOrUpdates();
151 moduleManager.getUI().onStartup();
152
153
154
155 messagesManager.init();
156
157 MIMEMapping.init();
158 versionConfig.init();
159
160
161 log.info("Configuration loaded (took {} seconds)", Long.toString((System.currentTimeMillis() - millis) / 1000));
162
163 } catch (ModuleManagementException e) {
164 log.error("A module error occurred during initialization: " + e.getMessage(), e);
165 } catch (ConfigurationException e) {
166 log.error("A configuration error occurred during initialization: " + e.getMessage(), e);
167 } catch (Throwable e) {
168 log.error("An unspecified error occurred during initialization: " + e.getMessage(), e);
169 }
170
171 }
172
173 protected ComponentProviderConfiguration getMainComponents() {
174 ComponentProviderConfigurationBuilder configurationBuilder = new ComponentProviderConfigurationBuilder();
175 return configurationBuilder.getComponentsFromModules("main", moduleRegistry.getModuleDefinitions());
176 }
177 }