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.ListUtil;
032    import com.liferay.portal.kernel.util.LocaleUtil;
033    import com.liferay.portal.kernel.util.PortalClassLoaderUtil;
034    import com.liferay.portal.kernel.util.StringPool;
035    import com.liferay.portal.kernel.util.SystemProperties;
036    import com.liferay.portal.kernel.util.TimeZoneUtil;
037    import com.liferay.portal.log.Log4jLogFactoryImpl;
038    import com.liferay.portal.module.framework.ModuleFrameworkUtilAdapter;
039    import com.liferay.portal.security.lang.DoPrivilegedUtil;
040    import com.liferay.portal.security.lang.SecurityManagerUtil;
041    import com.liferay.portal.spring.util.SpringUtil;
042    import com.liferay.util.log4j.Log4JUtil;
043    
044    import com.sun.syndication.io.XmlReader;
045    
046    import java.util.List;
047    
048    import org.apache.commons.lang.time.StopWatch;
049    
050    /**
051     * @author Brian Wing Shun Chan
052     */
053    public class InitUtil {
054    
055            public static synchronized void init() {
056                    if (_initialized) {
057                            return;
058                    }
059    
060                    StopWatch stopWatch = new StopWatch();
061    
062                    stopWatch.start();
063    
064                    // Set the default locale used by Liferay. This locale is no longer set
065                    // at the VM level. See LEP-2584.
066    
067                    String userLanguage = SystemProperties.get("user.language");
068                    String userCountry = SystemProperties.get("user.country");
069                    String userVariant = SystemProperties.get("user.variant");
070    
071                    LocaleUtil.setDefault(userLanguage, userCountry, userVariant);
072    
073                    // Set the default time zone used by Liferay. This time zone is no
074                    // longer set at the VM level. See LEP-2584.
075    
076                    String userTimeZone = SystemProperties.get("user.timezone");
077    
078                    TimeZoneUtil.setDefault(userTimeZone);
079    
080                    // Shared class loader
081    
082                    try {
083                            PortalClassLoaderUtil.setClassLoader(
084                                    ClassLoaderUtil.getContextClassLoader());
085                    }
086                    catch (Exception e) {
087                            e.printStackTrace();
088                    }
089    
090                    // Properties
091    
092                    com.liferay.portal.kernel.util.PropsUtil.setProps(new PropsImpl());
093    
094                    // Log4J
095    
096                    if (GetterUtil.getBoolean(
097                                    SystemProperties.get("log4j.configure.on.startup"), true)) {
098    
099                            ClassLoader classLoader = InitUtil.class.getClassLoader();
100    
101                            Log4JUtil.configureLog4J(classLoader);
102                    }
103    
104                    // Shared log
105    
106                    try {
107                            LogFactoryUtil.setLogFactory(new Log4jLogFactoryImpl());
108                    }
109                    catch (Exception e) {
110                            e.printStackTrace();
111                    }
112    
113                    // Log sanitizer
114    
115                    SanitizerLogWrapper.init();
116    
117                    // Java properties
118    
119                    JavaDetector.isJDK5();
120    
121                    // Security manager
122    
123                    SecurityManagerUtil.init();
124    
125                    if (SecurityManagerUtil.ENABLED) {
126                            com.liferay.portal.kernel.util.PropsUtil.setProps(
127                                    DoPrivilegedUtil.wrap(
128                                            com.liferay.portal.kernel.util.PropsUtil.getProps()));
129    
130                            LogFactoryUtil.setLogFactory(
131                                    DoPrivilegedUtil.wrap(LogFactoryUtil.getLogFactory()));
132                    }
133    
134                    // Cache registry
135    
136                    CacheRegistryUtil.setCacheRegistry(
137                            DoPrivilegedUtil.wrap(new CacheRegistryImpl()));
138    
139                    // Configuration factory
140    
141                    ConfigurationFactoryUtil.setConfigurationFactory(
142                            DoPrivilegedUtil.wrap(new ConfigurationFactoryImpl()));
143    
144                    // Data source factory
145    
146                    DataSourceFactoryUtil.setDataSourceFactory(
147                            DoPrivilegedUtil.wrap(new DataSourceFactoryImpl()));
148    
149                    // DB factory
150    
151                    DBFactoryUtil.setDBFactory(DoPrivilegedUtil.wrap(new DBFactoryImpl()));
152    
153                    // ROME
154    
155                    XmlReader.setDefaultEncoding(StringPool.UTF8);
156    
157                    if (_PRINT_TIME) {
158                            System.out.println(
159                                    "InitAction takes " + stopWatch.getTime() + " ms");
160                    }
161    
162                    _initialized = true;
163            }
164    
165            public synchronized static void initWithSpring(
166                    boolean initModuleFramework) {
167    
168                    List<String> configLocations = ListUtil.fromArray(
169                            PropsUtil.getArray(
170                                    com.liferay.portal.kernel.util.PropsKeys.SPRING_CONFIGS));
171    
172                    initWithSpring(configLocations, initModuleFramework);
173            }
174    
175            public synchronized static void initWithSpring(
176                    List<String> configLocations, boolean initModuleFramework) {
177    
178                    if (_initialized) {
179                            return;
180                    }
181    
182                    if (!_neverInitialized) {
183                            PropsUtil.reload();
184                    }
185                    else {
186                            _neverInitialized = false;
187                    }
188    
189                    init();
190    
191                    try {
192                            if (initModuleFramework) {
193                                    PropsValues.LIFERAY_WEB_PORTAL_CONTEXT_TEMPDIR =
194                                            System.getProperty(SystemProperties.TMP_DIR);
195    
196                                    ModuleFrameworkUtilAdapter.startFramework();
197                            }
198    
199                            SpringUtil.loadContext(configLocations);
200    
201                            if (initModuleFramework) {
202                                    BeanLocatorImpl beanLocatorImpl =
203                                            (BeanLocatorImpl)PortalBeanLocatorUtil.getBeanLocator();
204    
205                                    ModuleFrameworkUtilAdapter.registerContext(
206                                            beanLocatorImpl.getApplicationContext());
207    
208                                    ModuleFrameworkUtilAdapter.startRuntime();
209                            }
210                    }
211                    catch (Exception e) {
212                            throw new RuntimeException(e);
213                    }
214    
215                    _initialized = true;
216            }
217    
218            public synchronized static void stopModuleFramework() {
219                    try {
220                            ModuleFrameworkUtilAdapter.stopFramework();
221                    }
222                    catch (Exception e) {
223                            new RuntimeException(e);
224                    }
225            }
226    
227            private static final boolean _PRINT_TIME = false;
228    
229            private static boolean _initialized;
230            private static boolean _neverInitialized = true;
231    
232    }