001    /**
002     * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
003     *
004     * This library is free software; you can redistribute it and/or modify it under
005     * the terms of the GNU Lesser General Public License as published by the Free
006     * Software Foundation; either version 2.1 of the License, or (at your option)
007     * any later version.
008     *
009     * This library is distributed in the hope that it will be useful, but WITHOUT
010     * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
011     * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
012     * details.
013     */
014    
015    package com.liferay.portal.util;
016    
017    import com.liferay.portal.bean.BeanLocatorImpl;
018    import com.liferay.portal.cache.CacheRegistryImpl;
019    import com.liferay.portal.configuration.ConfigurationFactoryImpl;
020    import com.liferay.portal.dao.db.DBFactoryImpl;
021    import com.liferay.portal.dao.jdbc.DataSourceFactoryImpl;
022    import com.liferay.portal.kernel.bean.PortalBeanLocatorUtil;
023    import com.liferay.portal.kernel.cache.CacheRegistryUtil;
024    import com.liferay.portal.kernel.configuration.ConfigurationFactoryUtil;
025    import com.liferay.portal.kernel.dao.db.DBFactoryUtil;
026    import com.liferay.portal.kernel.dao.jdbc.DataSourceFactoryUtil;
027    import com.liferay.portal.kernel.log.LogFactoryUtil;
028    import com.liferay.portal.kernel.log.SanitizerLogWrapper;
029    import com.liferay.portal.kernel.util.GetterUtil;
030    import com.liferay.portal.kernel.util.JavaDetector;
031    import com.liferay.portal.kernel.util.LocaleUtil;
032    import com.liferay.portal.kernel.util.PortalClassLoaderUtil;
033    import com.liferay.portal.kernel.util.StringPool;
034    import com.liferay.portal.kernel.util.SystemProperties;
035    import com.liferay.portal.kernel.util.TimeZoneUtil;
036    import com.liferay.portal.log.Log4jLogFactoryImpl;
037    import com.liferay.portal.module.framework.ModuleFrameworkUtilAdapter;
038    import com.liferay.portal.security.lang.DoPrivilegedUtil;
039    import com.liferay.portal.security.lang.SecurityManagerUtil;
040    import com.liferay.portal.spring.util.SpringUtil;
041    import com.liferay.util.log4j.Log4JUtil;
042    
043    import com.sun.syndication.io.XmlReader;
044    
045    import java.util.List;
046    
047    import org.apache.commons.lang.time.StopWatch;
048    
049    /**
050     * @author Brian Wing Shun Chan
051     */
052    public class InitUtil {
053    
054            public static synchronized void init() {
055                    if (_initialized) {
056                            return;
057                    }
058    
059                    StopWatch stopWatch = new StopWatch();
060    
061                    stopWatch.start();
062    
063                    // Set the default locale used by Liferay. This locale is no longer set
064                    // at the VM level. See LEP-2584.
065    
066                    String userLanguage = SystemProperties.get("user.language");
067                    String userCountry = SystemProperties.get("user.country");
068                    String userVariant = SystemProperties.get("user.variant");
069    
070                    LocaleUtil.setDefault(userLanguage, userCountry, userVariant);
071    
072                    // Set the default time zone used by Liferay. This time zone is no
073                    // longer set at the VM level. See LEP-2584.
074    
075                    String userTimeZone = SystemProperties.get("user.timezone");
076    
077                    TimeZoneUtil.setDefault(userTimeZone);
078    
079                    // Shared class loader
080    
081                    try {
082                            PortalClassLoaderUtil.setClassLoader(
083                                    ClassLoaderUtil.getContextClassLoader());
084                    }
085                    catch (Exception e) {
086                            e.printStackTrace();
087                    }
088    
089                    // Properties
090    
091                    com.liferay.portal.kernel.util.PropsUtil.setProps(new PropsImpl());
092    
093                    // Log4J
094    
095                    if (GetterUtil.getBoolean(
096                                    SystemProperties.get("log4j.configure.on.startup"), true)) {
097    
098                            ClassLoader classLoader = InitUtil.class.getClassLoader();
099    
100                            Log4JUtil.configureLog4J(classLoader);
101                    }
102    
103                    // Shared log
104    
105                    try {
106                            LogFactoryUtil.setLogFactory(new Log4jLogFactoryImpl());
107                    }
108                    catch (Exception e) {
109                            e.printStackTrace();
110                    }
111    
112                    // Log sanitizer
113    
114                    SanitizerLogWrapper.init();
115    
116                    // Java properties
117    
118                    JavaDetector.isJDK5();
119    
120                    // Security manager
121    
122                    SecurityManagerUtil.init();
123    
124                    if (SecurityManagerUtil.ENABLED) {
125                            com.liferay.portal.kernel.util.PropsUtil.setProps(
126                                    DoPrivilegedUtil.wrap(
127                                            com.liferay.portal.kernel.util.PropsUtil.getProps()));
128    
129                            LogFactoryUtil.setLogFactory(
130                                    DoPrivilegedUtil.wrap(LogFactoryUtil.getLogFactory()));
131                    }
132    
133                    // Cache registry
134    
135                    CacheRegistryUtil.setCacheRegistry(
136                            DoPrivilegedUtil.wrap(new CacheRegistryImpl()));
137    
138                    // Configuration factory
139    
140                    ConfigurationFactoryUtil.setConfigurationFactory(
141                            DoPrivilegedUtil.wrap(new ConfigurationFactoryImpl()));
142    
143                    // Data source factory
144    
145                    DataSourceFactoryUtil.setDataSourceFactory(
146                            DoPrivilegedUtil.wrap(new DataSourceFactoryImpl()));
147    
148                    // DB factory
149    
150                    DBFactoryUtil.setDBFactory(DoPrivilegedUtil.wrap(new DBFactoryImpl()));
151    
152                    // ROME
153    
154                    XmlReader.setDefaultEncoding(StringPool.UTF8);
155    
156                    if (_PRINT_TIME) {
157                            System.out.println(
158                                    "InitAction takes " + stopWatch.getTime() + " ms");
159                    }
160    
161                    _initialized = true;
162            }
163    
164            public synchronized static void initWithSpring() {
165                    initWithSpring(false, null);
166            }
167    
168            public synchronized static void initWithSpring(boolean force) {
169                    initWithSpring(force, null);
170            }
171    
172            public synchronized static void initWithSpring(
173                    boolean force, List<String> extraConfigLocations) {
174    
175                    if (force) {
176                            _initialized = false;
177                    }
178    
179                    if (_initialized) {
180                            return;
181                    }
182    
183                    if (!_neverInitialized) {
184                            PropsUtil.reload();
185                    }
186                    else {
187                            _neverInitialized = false;
188                    }
189    
190                    init();
191    
192                    SpringUtil.loadContext(extraConfigLocations);
193    
194                    _initialized = true;
195            }
196    
197            public synchronized static void initWithSpring(
198                    List<String> extraConfigLocations) {
199    
200                    initWithSpring(false, extraConfigLocations);
201            }
202    
203            public synchronized static void initWithSpringAndModuleFramework() {
204                    initWithSpringAndModuleFramework(false, null);
205            }
206    
207            public synchronized static void initWithSpringAndModuleFramework(
208                    boolean force, List<String> configLocations) {
209    
210                    initWithSpringAndModuleFramework(force, configLocations, true);
211            }
212    
213            public synchronized static void initWithSpringAndModuleFramework(
214                    boolean force, List<String> configLocations,
215                    boolean addDefaultConfigLocations) {
216    
217                    if (force) {
218                            _initialized = false;
219                    }
220    
221                    if (_initialized) {
222                            return;
223                    }
224    
225                    if (!_neverInitialized) {
226                            PropsUtil.reload();
227                    }
228                    else {
229                            _neverInitialized = false;
230                    }
231    
232                    try {
233                            PropsValues.LIFERAY_WEB_PORTAL_CONTEXT_TEMPDIR = System.getProperty(
234                                    SystemProperties.TMP_DIR);
235    
236                            init();
237    
238                            ModuleFrameworkUtilAdapter.startFramework();
239    
240                            if (addDefaultConfigLocations) {
241                                    SpringUtil.loadContext(configLocations);
242                            }
243                            else {
244                                    SpringUtil.loadContext(
245                                            configLocations.toArray(
246                                                    new String[configLocations.size()]));
247                            }
248    
249                            BeanLocatorImpl beanLocatorImpl =
250                                    (BeanLocatorImpl)PortalBeanLocatorUtil.getBeanLocator();
251    
252                            ModuleFrameworkUtilAdapter.registerContext(
253                                    beanLocatorImpl.getApplicationContext());
254    
255                            ModuleFrameworkUtilAdapter.startRuntime();
256                    }
257                    catch (Exception e) {
258                            throw new RuntimeException(e);
259                    }
260    
261                    _initialized = true;
262            }
263    
264            public synchronized static void initWithSpringAndModuleFramework(
265                    List<String> configLocations) {
266    
267                    initWithSpringAndModuleFramework(false, configLocations);
268            }
269    
270            public synchronized static void stopModuleFramework() {
271                    try {
272                            ModuleFrameworkUtilAdapter.stopFramework();
273                    }
274                    catch (Exception e) {
275                            new RuntimeException(e);
276                    }
277            }
278    
279            private static final boolean _PRINT_TIME = false;
280    
281            private static boolean _initialized;
282            private static boolean _neverInitialized = true;
283    
284    }