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