Package com.dotmarketing.servlets

Source Code of com.dotmarketing.servlets.InitServlet

package com.dotmarketing.servlets;

import com.dotcms.content.elasticsearch.util.ESClient;
import com.dotcms.enterprise.LicenseUtil;
import com.dotcms.repackage.org.apache.commons.lang.SystemUtils;
import com.dotcms.repackage.org.apache.lucene.search.BooleanQuery;
import com.dotcms.workflow.EscalationThread;
import com.dotmarketing.beans.Host;
import com.dotmarketing.business.APILocator;
import com.dotmarketing.business.CacheLocator;
import com.dotmarketing.business.DotGuavaCacheAdministratorImpl;
import com.dotmarketing.business.PermissionAPI;
import com.dotmarketing.cache.VirtualLinksCache;
import com.dotmarketing.cms.factories.PublicCompanyFactory;
import com.dotmarketing.db.DbConnectionFactory;
import com.dotmarketing.db.HibernateUtil;
import com.dotmarketing.exception.DotDataException;
import com.dotmarketing.exception.DotHibernateException;
import com.dotmarketing.exception.DotSecurityException;
import com.dotmarketing.init.DotInitScheduler;
import com.dotmarketing.loggers.mbeans.Log4jConfig;
import com.dotmarketing.menubuilders.RefreshMenus;
import com.dotmarketing.plugin.PluginLoader;
import com.dotmarketing.portlets.campaigns.factories.CampaignFactory;
import com.dotmarketing.portlets.contentlet.action.ImportAuditUtil;
import com.dotmarketing.portlets.contentlet.business.HostAPI;
import com.dotmarketing.portlets.languagesmanager.business.LanguageAPI;
import com.dotmarketing.portlets.languagesmanager.model.Language;
import com.dotmarketing.quartz.job.ShutdownHookThread;
import com.dotmarketing.util.*;
import com.liferay.portal.model.Company;
import com.liferay.portal.util.ReleaseInfo;
import org.quartz.SchedulerException;

import javax.management.*;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.lang.management.ManagementFactory;
import java.net.*;
import java.net.URLEncoder;
import java.util.Date;
import java.util.List;
import java.util.TimeZone;

public class InitServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    PermissionAPI             permissionAPI    = APILocator.getPermissionAPI();
  private LanguageAPI langAPI = APILocator.getLanguageAPI();

    //  private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(Config
    //      .getIntProperty("EXEC_NUM_OF_THREAD"));

    /**
     * @param permissionAPI
     *            the permissionAPI to set
     */
    public void setPermissionAPI(PermissionAPI permissionAPI) {
        this.permissionAPI = permissionAPI;
    }

    public void destroy() {
      new ESClient().shutDownNode();
        Logger.info(this, "dotCMS shutting down");


    }

    public static Date startupDate;

    /**
     * Description of the Method
     *
     * @throws DotDataException
     */
    public void init(ServletConfig config) throws ServletException {

        startupDate = new java.util.Date();
        // Config class Initialization
//        Config.initializeConfig();
//        com.dotmarketing.util.Config.setMyApp(config.getServletContext());



        Company company = PublicCompanyFactory.getDefaultCompany();
        TimeZone companyTimeZone = company.getTimeZone();
        TimeZone.setDefault(companyTimeZone);
        Logger.info(this, "InitServlet: Setting Default Timezone: " + companyTimeZone.getDisplayName());

        String _dbType = DbConnectionFactory.getDBType();
        String _dailect = "";
    try {
      _dailect = HibernateUtil.getDialect();
    } catch (DotHibernateException e3) {
      Logger.error(InitServlet.class, e3.getMessage(), e3);
    }
        String _companyId = PublicCompanyFactory.getDefaultCompanyId();
        Logger.info(this, "");
        Logger.info(this, "   Initializing dotCMS");
        Logger.info(this, "   Using database: " + _dbType);
        Logger.info(this, "   Using dialect : " + _dailect);
        Logger.info(this, "   Company Name  : " + _companyId);

        if(Config.getBooleanProperty("DIST_INDEXATION_ENABLED", false)){

          Logger.info(this, "   Clustering    : Enabled");
          //    Logger.info(this, "   Server        :" + Config.getIntProperty("DIST_INDEXATION_SERVER_ID", 0)  + " of cluster " + Config.getStringProperty("DIST_INDEXATION_SERVERS_IDS", "...unknown"));
          try{
            ((DotGuavaCacheAdministratorImpl)CacheLocator.getCacheAdministrator().getImplementationObject()).testCluster();
            Logger.info(this, "     Ping Sent");
          }
          catch(Exception e){
            Logger.error(this, "   Ping Error: " + e.getMessage());

          }
        }
        else{
          Logger.info(this, "   Clustering    : Disabled");
        }


        Logger.info(this, "");

        //Check and start the ES Content Store
        APILocator.getContentletIndexAPI().checkAndInitialiazeIndex();
        Logger.info(this, "");

    Logger.info(this, "");

        String classPath = config.getServletContext().getRealPath("WEB-INF/lib");

      new PluginLoader().loadPlugins(config.getServletContext().getRealPath("."),classPath);









        int mc = Config.getIntProperty("lucene_max_clause_count", 4096);
        BooleanQuery.setMaxClauseCount(mc);

        ImportAuditUtil.voidValidateAuditTableOnStartup();

        // Set up the database
//        try {
//            DotCMSInitDb.InitializeDb();
//        } catch (DotDataException e1) {
//            throw new ServletException(e1);
//        }



        // set the application context for use all over the site
        Logger.debug(this, "");
        Logger.debug(this, "InitServlet: Setting Application Context!!!!!!");

        // creates the velocity folders to make sure they are there
        new java.io.File(ConfigUtils.getDynamicVelocityPath() + File.separator + "live").mkdirs();
        new java.io.File(ConfigUtils.getDynamicVelocityPath() + File.separator + "working").mkdirs();


       
        if(Config.getBooleanProperty("CACHE_DISK_SHOULD_DELETE_NAVTOOL", false)){
            // deletes all menues that have been generated
            RefreshMenus.deleteMenus();
          CacheLocator.getCacheAdministrator().flushGroupLocalOnly("navCache");
        }


        // maps all virtual links in memory
        VirtualLinksCache.mapAllVirtualLinks();

        Language language = langAPI.getDefaultLanguage();

        if (language.getId() == 0) {
            Logger.debug(this, "Creating Default Language");
            langAPI.createDefaultLanguage();
        }

        try {
      DotInitScheduler.start();
    } catch (SchedulerException e2) {
      Logger.fatal(InitServlet.class, e2.getMessage(), e2);
      throw new ServletException(e2.getMessage(), e2);
    }

        //Adding the shutdown hook
        Runtime.getRuntime().addShutdownHook(new ShutdownHookThread());

        /*
         * Delete the files out of the temp dir (this gets huge)
         */

        deleteFiles(new File(SystemUtils.JAVA_IO_TMPDIR));

        /*
         * unlocking campaigns
         */
        try {
      CampaignFactory.unlockAllCampaigns();
    } catch (DotHibernateException e2) {
      Logger.error(InitServlet.class, e2.getMessage(), e2);
      throw new ServletException("Unable to Unlock Campaigns", e2);
    }

        // runs the InitThread

        InitThread it = new InitThread();
        it.start();

        //Ensure the system host is in the system
        try {
      APILocator.getHostAPI().findSystemHost(APILocator.getUserAPI().getSystemUser(), false);
    } catch (DotDataException e1) {
      Logger.fatal(InitServlet.class, e1.getMessage(), e1);
      throw new ServletException("Unable to initialize system host", e1);
    } catch (DotSecurityException e) {
      Logger.fatal(InitServlet.class, e.getMessage(), e);
      throw new ServletException("Unable to initialize system host", e);
    }

    try {
      APILocator.getFolderAPI().findSystemFolder();
    } catch (DotDataException e1) {
      Logger.error(InitServlet.class, e1.getMessage(), e1);
      throw new ServletException("Unable to initialize system folder", e1);
    }

    if(Config.getBooleanProperty("ESCALATION_ENABLE",false)) {
        EscalationThread.getInstace().start();
    }

        /*
         * SHOULD BE LAST THING THAT HAPPENS
         */
        try {
      HibernateUtil.closeSession();
    } catch (DotHibernateException e1) {
      Logger.error(InitServlet.class, e1.getMessage(), e1);
    }


      try {
        MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
        ObjectName name = new ObjectName("org.dotcms:type=Log4J");
        Log4jConfig mbean = new Log4jConfig();
        mbs.registerMBean(mbean, name);
      } catch (MalformedObjectNameException e) {
        Logger.debug(InitServlet.class,"MalformedObjectNameException: " + e.getMessage(),e);
      } catch (InstanceAlreadyExistsException e) {
        Logger.debug(InitServlet.class,"InstanceAlreadyExistsException: " + e.getMessage(),e);
      } catch (MBeanRegistrationException e) {
        Logger.debug(InitServlet.class,"MBeanRegistrationException: " + e.getMessage(),e);
      } catch (NotCompliantMBeanException e) {
        Logger.debug(InitServlet.class,"NotCompliantMBeanException: " + e.getMessage(),e);
      } catch (NullPointerException e) {
        Logger.debug(InitServlet.class,"NullPointerException: " + e.getMessage(),e);
      }


      //Just get the Engine to make sure it gets inited on time before the first request
      VelocityUtil.getEngine();






    }

    protected void deleteFiles(java.io.File directory) {
        if (directory.isDirectory()) {
            // get all files for this directory
            java.io.File[] files = directory.listFiles();
            for (int i = 0; i < files.length; i++) {
                // deletes all files on the directory
                ((java.io.File) files[i]).delete();
            }
        }
    }

    public static Date getStartupDate() {
        return startupDate;
    }
/**
*
* @author will
* This thread will fire and send host ids to dotcms.com for internal
* corporate information (we are dying to know who is using dotCMS!).
* This can be turned off by setting RUN_INIT_THREAD=0 in the config
*
*/

    public class InitThread extends Thread {

        public void run() {
          try {
            long runInitThread = Config.getIntProperty("RUN_INIT_THREAD", 600000);
            if(runInitThread<1){return;}
           
                Thread.sleep(runInitThread);
            } catch (InterruptedException e) {
                Logger.debug(this,e.getMessage(),e);
            }
            String address = null;
            String hostname = "unknown";
            try {
                InetAddress addr = InetAddress.getLocalHost();
                // Get IP Address
                byte[] ipAddr = addr.getAddress();
                addr = InetAddress.getByAddress(ipAddr);
                address = addr.getHostAddress();
                // Get hostname
                hostname = addr.getHostName();
            } catch (Exception e) {
                Logger.debug(this, "InitThread broke:", e);
            }
            try{

              HostAPI hostAPI = APILocator.getHostAPI();
                String defaultHost = hostAPI.findDefaultHost(APILocator.getUserAPI().getSystemUser(), false).getHostname();
                StringBuilder sb = new StringBuilder();
                List<Host> hosts = hostAPI.findAll(APILocator.getUserAPI().getSystemUser(), false);
                for (Host h : hosts) {
                  if(!"System Host".equals(h.getHostname())){
                    sb.append(h.getHostname() + "\n");
                  }
                    if (UtilMethods.isSet(h.getAliases())) {
                      String[] x = h.getAliases().split("\\n|\\r");
                      for(String y : x){
                        if(UtilMethods.isSet(y) && !y.contains("dotcms.com") || !"host".equals(y)){
                          sb.append(y + "\\n");
                        }
                    }
                  }
                }

               
               
                // Construct data
                StringBuilder data = new StringBuilder();
                data.append(URLEncoder.encode("ipAddr", "UTF-8"));
                data.append("=");
                data.append(URLEncoder.encode(address, "UTF-8"));
                data.append("&");
                data.append(URLEncoder.encode("hostname", "UTF-8"));
                data.append("=");
                data.append(URLEncoder.encode(hostname, "UTF-8"));
                data.append("&");
                data.append(URLEncoder.encode("defaultHost", "UTF-8"));
                data.append("=");
                data.append(URLEncoder.encode(defaultHost, "UTF-8"));
                data.append("&");
                data.append(URLEncoder.encode("allHosts", "UTF-8"));
                data.append("=");
                data.append(URLEncoder.encode(sb.toString(), "UTF-8"));
                data.append("&");
                data.append(URLEncoder.encode("version", "UTF-8"));
                data.append("=");
                data.append(URLEncoder.encode(ReleaseInfo.getReleaseInfo(), "UTF-8"));
                data.append("&");
                data.append(URLEncoder.encode("build", "UTF-8"));
                data.append("=");
                data.append(URLEncoder.encode(String.valueOf(ReleaseInfo.getVersion()), "UTF-8"));
                data.append("&");
               
                data.append(URLEncoder.encode("serverId", "UTF-8"));
                data.append("=");
                data.append(URLEncoder.encode(String.valueOf(LicenseUtil.getDisplayServerId()), "UTF-8"));
                data.append("&");
               
                data.append(URLEncoder.encode("licenseId", "UTF-8"));
                data.append("=");
                data.append(URLEncoder.encode(String.valueOf(LicenseUtil.getSerial()), "UTF-8"));
                data.append("&");
               
                data.append(URLEncoder.encode("licenseLevel", "UTF-8"));
                data.append("=");
                data.append(URLEncoder.encode(String.valueOf(LicenseUtil.getLevel()), "UTF-8"));
                data.append("&");
               
                if(UtilMethods.isSet(LicenseUtil.getValidUntil())){
                  data.append(URLEncoder.encode("licenseValid", "UTF-8"));
                  data.append("=");
                  data.append(URLEncoder.encode(UtilMethods.dateToJDBC(LicenseUtil.getValidUntil())));
                  data.append("&");
                }
                data.append(URLEncoder.encode("perpetual", "UTF-8"));
                data.append("=");
                data.append(URLEncoder.encode(String.valueOf(LicenseUtil.isPerpetual()), "UTF-8"));
                data.append("&");
                data.append(URLEncoder.encode("stName", "UTF-8"));
                data.append("=");
                data.append(URLEncoder.encode("DotcmsStartup", "UTF-8"));
                data.append("&");
                data.append(URLEncoder.encode("clientName", "UTF-8"));
                data.append("=");
                data.append(URLEncoder.encode(String.valueOf(LicenseUtil.getClientName()), "UTF-8"));
                data.append("&");
               
                data.append(URLEncoder.encode("hostfolder", "UTF-8"));
                data.append("=");
                data.append(URLEncoder.encode("dotcms.com:/private", "UTF-8"));
                data.append("&");

               
               
               
                String portalUrl = Config.getStringProperty("DOTCMS_PORTAL_URL", "dotcms.com");
                String portalUrlProtocol = Config.getStringProperty("DOTCMS_PORTAL_URL_PROTOCOL", "https");
                String portalUrlUri = Config.getStringProperty("DOTCMS_PORTAL_URL_URI", "/api/content/save/1");
               

                // Send data

                sb = new StringBuilder();
                sb.append(portalUrlProtocol + "://" + portalUrl + portalUrlUri);
                URL url = new URL(sb.toString());
                HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                conn.setRequestMethod("PUT");
                conn.setDoOutput(true);
                conn.setDoInput(true);
                conn.setConnectTimeout(5000);
                conn.setReadTimeout(5000);
                conn.setUseCaches(false);
                conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");

                conn.setRequestProperty("DOTAUTH", "bGljZW5zZXJlcXVlc3RAZG90Y21zLmNvbTpKbnM0QHdAOCZM");
               

                DataOutputStream wr = new DataOutputStream(conn.getOutputStream());
                wr.writeBytes(data.toString());
                wr.flush();
                wr.close();
                DataInputStream input = new DataInputStream(conn.getInputStream());
                input.close();


            } catch (UnknownHostException e) {
                Logger.debug(this, "Unable to get Hostname", e);
            } catch (Exception e) {
                Logger.debug(this, "InitThread broke:", e);
            }
            finally{
                try {
          HibernateUtil.closeSession();
        } catch (DotHibernateException e) {
          Logger.error(InitServlet.class, e.getMessage(), e);
        }
            }

        }

    }
}
TOP

Related Classes of com.dotmarketing.servlets.InitServlet

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.