All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.jivesoftware.openfire.starter.ServerStarter Maven / Gradle / Ivy

The newest version!
/*
 *
 * Copyright (C) 2004-2008 Jive Software. All rights reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.jivesoftware.openfire.starter;

import org.jivesoftware.util.Log;

import java.io.File;
/**
 * Starts the core XMPP server. A bootstrap class that configures classloaders
 * to ensure easy, dynamic server startup.
 *
 * This class should be for standalone mode only. Openfire servers launched
 * through a J2EE container (servlet/EJB) will use those environment's
 * classloading facilities to ensure proper startup.

* * Tasks:

    *
  • Unpack any pack files in the lib directory (Pack200 encoded JAR files).
  • *
  • Add all jars in the lib directory to the classpath.
  • *
  • Add the config directory to the classpath for loadResource()
  • *
  • Start the server
  • *
* * Note: if the enviroment property openfire.lib.dir is specified * ServerStarter will attempt to use this value as the value for openfire's lib * directory. If the property is not specified the default value of ../lib will be used. * * @author Iain Shigeoka */ public class ServerStarter { /** * Default to this location if one has not been specified */ private static final String DEFAULT_LIB_DIR = "../lib"; private static final String DEFAULT_ADMIN_LIB_DIR = "../plugins/admin/webapp/WEB-INF/lib"; public static void main(String [] args) { new ServerStarter().start(); } /** * Starts the server by loading and instantiating the bootstrap * container. Once the start method is called, the server is * started and the server starter should not be used again. */ private void start() { // Setup the classpath using JiveClassLoader try { // Load up the bootstrap container final ClassLoader parent = findParentClassLoader(); String libDirString = System.getProperty("openfire.lib.dir"); File libDir; if (libDirString != null) { // If the lib directory property has been specified and it actually // exists use it, else use the default libDir = new File(libDirString); if (!libDir.exists()) { Log.warn("Lib directory " + libDirString + " does not exist. Using default " + DEFAULT_LIB_DIR); libDir = new File(DEFAULT_LIB_DIR); } } else { libDir = new File(DEFAULT_LIB_DIR); } String adminLibDirString = System.getProperty("openfireHome"); if (adminLibDirString == null) { adminLibDirString = DEFAULT_ADMIN_LIB_DIR; } else { adminLibDirString = adminLibDirString+"/plugins/admin/webapp/WEB-INF/lib"; } File adminLibDir = new File(adminLibDirString); if (!adminLibDir.exists()) { Log.warn("Admin Lib Directory " + adminLibDirString + " does not exist. Web admin console may not work."); } ClassLoader loader = new JiveClassLoader(parent, libDir); Thread.currentThread().setContextClassLoader(loader); Class containerClass = loader.loadClass( "org.jivesoftware.openfire.XMPPServer"); containerClass.newInstance(); } catch (Exception e) { e.printStackTrace(); } } /** * Locates the best class loader based on context (see class description). * * @return The best parent classloader to use */ private ClassLoader findParentClassLoader() { ClassLoader parent = Thread.currentThread().getContextClassLoader(); if (parent == null) { parent = this.getClass().getClassLoader(); if (parent == null) { parent = ClassLoader.getSystemClassLoader(); } } return parent; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy