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.FileSystemHelper;
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
91
92
93
94 @Deprecated
95 public ConfigLoader(ModuleManager moduleManager, ModuleRegistry moduleRegistry, LicenseFileExtractor licenseFileExtractor, MessagesManager messagesManager, VersionConfig versionConfig, ServletContext context) {
96 this(moduleManager, moduleRegistry, (ProductDescriptorExtractor) licenseFileExtractor, messagesManager, versionConfig, context);
97 }
98
99 public void unload() {
100
101 if (main != null) {
102 Components.setComponentProvider(main.getParent());
103 main.destroy();
104 }
105 ContentRepository.shutdown();
106 }
107
108 public void loadJaasConfig(FileSystemHelper fileSystemHelper) {
109 if (StringUtils.isEmpty(System.getProperty(JAAS_PROPERTYNAME))) {
110 try {
111 System.setProperty(JAAS_PROPERTYNAME, fileSystemHelper.getAbsoluteFileSystemPath("WEB-INF/config/jaas.config"));
112 } catch (SecurityException se) {
113 log.error("Failed to set {}, check application server settings", JAAS_PROPERTYNAME);
114 log.error(se.getMessage(), se);
115 log.info("Aborting startup");
116 return;
117 }
118 } else {
119 log.info("JAAS config file set by parent container or some other application");
120 log.info("Config in use {}", System.getProperty(JAAS_PROPERTYNAME));
121 log.info("Please make sure JAAS config has all necessary modules (refer config/jaas.config) configured");
122 }
123 }
124
125
126
127
128 public void load() {
129 productDescriptorExtractor.init();
130 productDescriptorExtractor.printVersionInfo();
131
132 final long millis = System.currentTimeMillis();
133 log.info("Initializing content repositories");
134
135 ContentRepository.init();
136
137 GuiceComponentProviderBuilder builder = new GuiceComponentProviderBuilder();
138 builder.withConfiguration(getMainComponents());
139 builder.withParent((GuiceComponentProvider) Components.getComponentProvider());
140 builder.exposeGlobally();
141 main = builder.build();
142
143 try {
144 moduleManager.checkForInstallOrUpdates();
145 moduleManager.getUI().onStartup();
146
147
148 messagesManager.init();
149
150 MIMEMapping.init();
151 versionConfig.init();
152
153
154 log.info("Configuration loaded (took {} seconds)", Long.toString((System.currentTimeMillis() - millis) / 1000));
155
156 } catch (ModuleManagementException e) {
157 log.error("A module error occurred during initialization: {}", e.getMessage(), e);
158 } catch (ConfigurationException e) {
159 log.error("A configuration error occurred during initialization: {}", e.getMessage(), e);
160 } catch (Throwable e) {
161 log.error("An unspecified error occurred during initialization: {}", e.getMessage(), e);
162 }
163
164 }
165
166 protected ComponentProviderConfiguration getMainComponents() {
167 ComponentProviderConfigurationBuilder configurationBuilder = new ComponentProviderConfigurationBuilder();
168 return configurationBuilder.getComponentsFromModules("main", moduleRegistry.getModuleDefinitions());
169 }
170 }