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