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.cms.pddescriptor.ProductDescriptorExtractor;
40 import info.magnolia.module.ModuleManagementException;
41 import info.magnolia.module.ModuleManager;
42 import info.magnolia.module.ModuleRegistry;
43 import info.magnolia.objectfactory.Components;
44 import info.magnolia.objectfactory.configuration.ComponentProviderConfiguration;
45 import info.magnolia.objectfactory.configuration.ComponentProviderConfigurationBuilder;
46 import info.magnolia.objectfactory.guice.GuiceComponentProvider;
47 import info.magnolia.objectfactory.guice.GuiceComponentProviderBuilder;
48
49 import javax.inject.Inject;
50 import javax.inject.Singleton;
51 import javax.servlet.ServletContext;
52
53 import org.apache.commons.lang3.StringUtils;
54 import org.slf4j.Logger;
55 import org.slf4j.LoggerFactory;
56
57
58
59
60
61 @Singleton
62 public class ConfigLoader {
63 private static final Logger log = LoggerFactory.getLogger(ConfigLoader.class);
64 private static final String JAAS_PROPERTYNAME = "java.security.auth.login.config";
65
66 private final ModuleManager moduleManager;
67 private final ModuleRegistry moduleRegistry;
68 private final ProductDescriptorExtractor productDescriptorExtractor;
69 private final MessagesManager messagesManager;
70 private final VersionConfig versionConfig;
71 private GuiceComponentProvider main;
72
73
74
75
76
77
78
79
80
81
82 @Inject
83 public ConfigLoader(ModuleManager moduleManager, ModuleRegistry moduleRegistry, ProductDescriptorExtractor productDescriptorExtractor, MessagesManager messagesManager, VersionConfig versionConfig, ServletContext context) {
84 this.moduleManager = moduleManager;
85 this.moduleRegistry = moduleRegistry;
86 this.productDescriptorExtractor = productDescriptorExtractor;
87 this.messagesManager = messagesManager;
88 this.versionConfig = versionConfig;
89
90 if (StringUtils.isEmpty(System.getProperty(JAAS_PROPERTYNAME))) {
91 try {
92 System.setProperty(JAAS_PROPERTYNAME, Path.getAbsoluteFileSystemPath("WEB-INF/config/jaas.config"));
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 @Deprecated
110 public ConfigLoader(ModuleManager moduleManager, ModuleRegistry moduleRegistry, LicenseFileExtractor licenseFileExtractor, MessagesManager messagesManager, VersionConfig versionConfig, ServletContext context) {
111 this(moduleManager, moduleRegistry, (ProductDescriptorExtractor) licenseFileExtractor, messagesManager, versionConfig, context);
112 }
113
114
115
116
117 public void unload(ServletContext servletContext) {
118 unload();
119 }
120
121 public void unload() {
122
123 if (main != null) {
124 Components.setComponentProvider(main.getParent());
125 main.destroy();
126 }
127 ContentRepository.shutdown();
128 }
129
130
131
132
133 public void load(ServletContext servletContext) {
134 load();
135 }
136
137
138
139
140 public void load() {
141 productDescriptorExtractor.init();
142 productDescriptorExtractor.printVersionInfo();
143
144 final long millis = System.currentTimeMillis();
145 log.info("Initializing content repositories");
146
147 ContentRepository.init();
148
149 GuiceComponentProviderBuilder builder = new GuiceComponentProviderBuilder();
150 builder.withConfiguration(getMainComponents());
151 builder.withParent((GuiceComponentProvider) Components.getComponentProvider());
152 builder.exposeGlobally();
153 main = builder.build();
154
155 try {
156 moduleManager.checkForInstallOrUpdates();
157 moduleManager.getUI().onStartup();
158
159
160
161 messagesManager.init();
162
163 MIMEMapping.init();
164 versionConfig.init();
165
166
167 log.info("Configuration loaded (took {} seconds)", Long.toString((System.currentTimeMillis() - millis) / 1000));
168
169 } catch (ModuleManagementException e) {
170 log.error("A module error occurred during initialization: {}", e.getMessage(), e);
171 } catch (ConfigurationException e) {
172 log.error("A configuration error occurred during initialization: {}", e.getMessage(), e);
173 } catch (Throwable e) {
174 log.error("An unspecified error occurred during initialization: {}", e.getMessage(), e);
175 }
176
177 }
178
179 protected ComponentProviderConfiguration getMainComponents() {
180 ComponentProviderConfigurationBuilder configurationBuilder = new ComponentProviderConfigurationBuilder();
181 return configurationBuilder.getComponentsFromModules("main", moduleRegistry.getModuleDefinitions());
182 }
183 }