Author: taher
Date: Tue Dec 6 12:31:00 2016 New Revision: 1772879 URL: http://svn.apache.org/viewvc?rev=1772879&view=rev Log: Improved: Refactor and simplify the startup sequence in OFBiz (OFBIZ-8337) This is another major commit to the refactoring of the startup sequence in OFBiz with the following highlighted changes: - Delete the NativeLibClassLoader.java - Delete the native classpath logic in Classpath.java - Refactor the ComponentContainer and StartupControlPanel to operate without the NativeLibClassLoader. This substantially simplifies the code - Declare a URLClassLoader in ComponentContainer that is instantiated upon building the classpath for all components. This makes the classloader start in one shot - Simplify the Config file and remove fields that are not used. Also refactor some messy logic for loading the props file and other code improvements - Refactor all the .properties files for startup to have a consistent structure that clearly documents all available properties and the default value for each property. This change is also related to the changes applied on Config.java - Remove the declaration of the StartupLoader implementation class from all startup .properties files because only one implementation exists and it should be the default always. - Refactor the loaders retrieval code (main, rmi, test, load-data) defined in the startup .properties files - Refactor some switch statements to comply with java coding standards - Add the DTDs defined in base through Gradle because we removed the NativeLibClassLoader and the classpath buildup logic in StartupControlPanel Thanks: Jacopo Cappellato for reviewing the work Removed: ofbiz/trunk/framework/start/src/main/java/org/apache/ofbiz/base/start/NativeLibClassLoader.java Modified: ofbiz/trunk/build.gradle ofbiz/trunk/framework/base/src/main/java/org/apache/ofbiz/base/container/ComponentContainer.java ofbiz/trunk/framework/base/src/main/java/org/apache/ofbiz/base/container/ContainerLoader.java ofbiz/trunk/framework/start/src/main/java/org/apache/ofbiz/base/start/Classpath.java ofbiz/trunk/framework/start/src/main/java/org/apache/ofbiz/base/start/Config.java ofbiz/trunk/framework/start/src/main/java/org/apache/ofbiz/base/start/Start.java ofbiz/trunk/framework/start/src/main/java/org/apache/ofbiz/base/start/StartupControlPanel.java ofbiz/trunk/framework/start/src/main/java/org/apache/ofbiz/base/start/load-data.properties ofbiz/trunk/framework/start/src/main/java/org/apache/ofbiz/base/start/rmi.properties ofbiz/trunk/framework/start/src/main/java/org/apache/ofbiz/base/start/start.properties ofbiz/trunk/framework/start/src/main/java/org/apache/ofbiz/base/start/test.properties Modified: ofbiz/trunk/build.gradle URL: http://svn.apache.org/viewvc/ofbiz/trunk/build.gradle?rev=1772879&r1=1772878&r2=1772879&view=diff ============================================================================== --- ofbiz/trunk/build.gradle (original) +++ ofbiz/trunk/build.gradle Tue Dec 6 12:31:00 2016 @@ -204,19 +204,19 @@ sourceSets { resources { srcDirs = getDirectoryInActiveComponentsIfExists('src/main/java') srcDirs += getDirectoryInActiveComponentsIfExists('config') + srcDirs += "${rootDir}/framework/base/dtd" exclude excludedJavaSources exclude excludedConfigFiles // Below are necessary for unit tests run by Gradle and integration tests + exclude { FileTreeElement elem -> elem.getName().contains('.Labels.xml') } exclude { FileTreeElement elem -> elem.getName().contains('.properties') && !elem.getName().contains('start.properties') && !elem.getName().contains('load-data.properties') && !elem.getName().contains('debug.properties') && !elem.getName().contains('cache.properties') && !elem.getName().contains('test.properties') && - !elem.getName().contains('rmi.properties')} - exclude { FileTreeElement elem -> elem.getName().contains('.xml') && - !elem.getName().contains('entityengine.xml') - } + !elem.getName().contains('rmi.properties') + } } } Modified: ofbiz/trunk/framework/base/src/main/java/org/apache/ofbiz/base/container/ComponentContainer.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/src/main/java/org/apache/ofbiz/base/container/ComponentContainer.java?rev=1772879&r1=1772878&r2=1772879&view=diff ============================================================================== --- ofbiz/trunk/framework/base/src/main/java/org/apache/ofbiz/base/container/ComponentContainer.java (original) +++ ofbiz/trunk/framework/base/src/main/java/org/apache/ofbiz/base/container/ComponentContainer.java Tue Dec 6 12:31:00 2016 @@ -22,6 +22,8 @@ import java.io.File; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; +import java.net.URLClassLoader; +import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.concurrent.atomic.AtomicBoolean; @@ -30,7 +32,6 @@ import org.apache.ofbiz.base.component.C import org.apache.ofbiz.base.component.ComponentException; import org.apache.ofbiz.base.component.ComponentLoaderConfig; import org.apache.ofbiz.base.start.Classpath; -import org.apache.ofbiz.base.start.NativeLibClassLoader; import org.apache.ofbiz.base.start.Start; import org.apache.ofbiz.base.start.StartupCommand; import org.apache.ofbiz.base.util.Debug; @@ -43,7 +44,7 @@ import org.apache.ofbiz.base.util.FileUt * defined in OFBiz. This container must run before any other containers to * allow components to access any necessary resources. Furthermore, the * ComponentContainer also builds up the <code>ComponentConfigCache</code> - * to keep track of all loaded components + * defined in <code>ComponentConfig</code> to keep track of loaded components * */ public class ComponentContainer implements Container { @@ -52,6 +53,7 @@ public class ComponentContainer implemen private String name; private final AtomicBoolean loaded = new AtomicBoolean(false); + private final List<Classpath> componentsClassPath = new ArrayList<Classpath>(); @Override public void init(List<StartupCommand> ofbizCommands, String name, String configFile) throws ContainerException { @@ -68,6 +70,7 @@ public class ComponentContainer implemen } catch (IOException | ComponentException e) { throw new ContainerException(e); } + loadClassPathForAllComponents(componentsClassPath); Debug.logInfo("All components loaded", module); } @@ -79,6 +82,28 @@ public class ComponentContainer implemen } /** + * Iterate over all the components and load their classpath URLs into the classloader + * and set the classloader as the context classloader + * + * @param componentsClassPath: a list of classpaths for all components + * @throws ContainerException + */ + private void loadClassPathForAllComponents(List<Classpath> componentsClassPath) throws ContainerException { + List<URL> allComponentUrls = new ArrayList<URL>(); + for(Classpath classPath : componentsClassPath) { + try { + allComponentUrls.addAll(Arrays.asList(classPath.getUrls())); + } catch (MalformedURLException e) { + Debug.logError("Unable to load component classpath" + classPath.toString(), module); + Debug.logError(e.getMessage(), module); + } + } + URL[] componentURLs = allComponentUrls.toArray(new URL[allComponentUrls.size()]); + URLClassLoader classLoader = new URLClassLoader(componentURLs, Thread.currentThread().getContextClassLoader()); + Thread.currentThread().setContextClassLoader(classLoader); + } + + /** * Checks if <code>ComponentDef.type</code> is a directory or a single component. * If it is a directory, load the directory, otherwise load a single component * @@ -197,28 +222,19 @@ public class ComponentContainer implemen /** * Load a single component by adding all its classpath entries to - * the classloader + * the list of classpaths to be loaded * * @param config: the component configuration * @throws IOException */ private void loadComponent(ComponentConfig config) throws IOException { - if (!config.enabled()) { + if (config.enabled()) { + Classpath classpath = buildClasspathFromComponentConfig(config); + componentsClassPath.add(classpath); + Debug.logInfo("Added class path for component : [" + config.getComponentName() + "]", module); + } else { Debug.logInfo("Not loading component [" + config.getComponentName() + "] because it is disabled", module); - return; - } - - NativeLibClassLoader classloader = (NativeLibClassLoader) Thread.currentThread().getContextClassLoader(); - Classpath classPath = buildClasspathFromComponentConfig(config); - - for (URL url : classPath.getUrls()) { - classloader.addURL(url); - } - for (File folder : classPath.getNativeFolders()) { - classloader.addNativeClassPath(folder); } - - Debug.logInfo("Loaded component : [" + config.getComponentName() + "]", module); } /** Modified: ofbiz/trunk/framework/base/src/main/java/org/apache/ofbiz/base/container/ContainerLoader.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/src/main/java/org/apache/ofbiz/base/container/ContainerLoader.java?rev=1772879&r1=1772878&r2=1772879&view=diff ============================================================================== --- ofbiz/trunk/framework/base/src/main/java/org/apache/ofbiz/base/container/ContainerLoader.java (original) +++ ofbiz/trunk/framework/base/src/main/java/org/apache/ofbiz/base/container/ContainerLoader.java Tue Dec 6 12:31:00 2016 @@ -22,7 +22,6 @@ import java.util.ArrayList; import java.util.Collection; import java.util.LinkedList; import java.util.List; -import java.util.Map; import java.util.stream.Collectors; import org.apache.ofbiz.base.component.ComponentConfig; @@ -31,7 +30,6 @@ import org.apache.ofbiz.base.start.Start import org.apache.ofbiz.base.start.StartupException; import org.apache.ofbiz.base.start.StartupLoader; import org.apache.ofbiz.base.util.Debug; -import org.apache.ofbiz.base.util.StringUtil; import org.apache.ofbiz.base.util.UtilValidate; import edu.emory.mathcs.backport.java.util.Collections; @@ -57,12 +55,7 @@ public class ContainerLoader implements public synchronized void load(Config config, List<StartupCommand> ofbizCommands) throws StartupException { // loaders defined in startup (e.g. main, test, load-data, etc ...) - List<String> loaders = null; - for (Map<String,String> loaderMap: config.loaders) { - if (module.equals(loaderMap.get("class"))) { - loaders = StringUtil.split((String)loaderMap.get("profiles"), ","); - } - } + List<String> loaders = config.loaders; // load containers defined in ofbiz-containers.xml Debug.logInfo("[Startup] Loading containers...", module); Modified: ofbiz/trunk/framework/start/src/main/java/org/apache/ofbiz/base/start/Classpath.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/start/src/main/java/org/apache/ofbiz/base/start/Classpath.java?rev=1772879&r1=1772878&r2=1772879&view=diff ============================================================================== --- ofbiz/trunk/framework/start/src/main/java/org/apache/ofbiz/base/start/Classpath.java (original) +++ ofbiz/trunk/framework/start/src/main/java/org/apache/ofbiz/base/start/Classpath.java Tue Dec 6 12:31:00 2016 @@ -35,9 +35,7 @@ import java.util.List; */ public final class Classpath { - private static final String nativeLibExt = System.mapLibraryName("someLib").replace("someLib", "").toLowerCase(); private List<File> elements = new ArrayList<File>(); - private final List<File> nativeFolders = new ArrayList<File>(); /** * Default constructor. @@ -103,7 +101,6 @@ public final class Classpath { } if (path.isDirectory() && path.exists()) { // load all .jar, .zip files and native libs in this directory - boolean containsNativeLibs = false; for (File file : path.listFiles()) { String fileName = file.getName().toLowerCase(); if (fileName.endsWith(".jar") || fileName.endsWith(".zip")) { @@ -113,16 +110,6 @@ public final class Classpath { elements.add(key); } } - } else if (fileName.endsWith(nativeLibExt)) { - containsNativeLibs = true; - } - } - if (containsNativeLibs) { - File key = path.getCanonicalFile(); - synchronized (nativeFolders) { - if (!nativeFolders.contains(key)) { - nativeFolders.add(key); - } } } } else { @@ -140,17 +127,6 @@ public final class Classpath { } } - /** - * Returns a list of folders containing native libraries. - * - * @return A list of folders containing native libraries - */ - public List<File> getNativeFolders() { - synchronized (nativeFolders) { - return new ArrayList<File>(nativeFolders); - } - } - /** * Returns a list of class path component URLs. * Modified: ofbiz/trunk/framework/start/src/main/java/org/apache/ofbiz/base/start/Config.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/start/src/main/java/org/apache/ofbiz/base/start/Config.java?rev=1772879&r1=1772878&r2=1772879&view=diff ============================================================================== --- ofbiz/trunk/framework/start/src/main/java/org/apache/ofbiz/base/start/Config.java (original) +++ ofbiz/trunk/framework/start/src/main/java/org/apache/ofbiz/base/start/Config.java Tue Dec 6 12:31:00 2016 @@ -20,14 +20,11 @@ package org.apache.ofbiz.base.start; import java.io.File; import java.io.FileInputStream; -import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.net.InetAddress; import java.net.UnknownHostException; import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; import java.util.List; import java.util.Locale; import java.util.Map; @@ -35,6 +32,8 @@ import java.util.Optional; import java.util.Properties; import java.util.TimeZone; +import org.apache.ofbiz.base.util.StringUtil; + /** * OFBiz server parameters needed on system startup and retrieved from * one of the properties files in the start component @@ -42,33 +41,25 @@ import java.util.TimeZone; public final class Config { public final String ofbizHome; - public final String awtHeadless; public final InetAddress adminAddress; public final String adminKey; public final int portOffset; public final int adminPort; public final String containerConfig; - public final List<Map<String, String>> loaders; + public final List<String> loaders; public final String logDir; public final boolean shutdownAfterLoad; public final boolean useShutdownHook; - public final String classpathAddComponent; Config(List<StartupCommand> ofbizCommands) throws StartupException { // fetch OFBiz Properties object - Properties props; - try { - props = getPropertiesFile(ofbizCommands); - } catch (IOException e) { - throw new StartupException(e); - } + Properties props = getPropertiesFile(ofbizCommands);; // set this class fields ofbizHome = getOfbizHome(props); - awtHeadless = getProperty(props, "java.awt.headless", "false"); adminAddress = getAdminAddress(props); - adminKey = getProperty(props, "ofbiz.admin.key", "NA"); + adminKey = getProperty(props, "ofbiz.admin.key", "so3du5kasd5dn"); portOffset = getPortOffsetValue(ofbizCommands); adminPort = getAdminPort(props, portOffset); containerConfig = getAbsolutePath(props, "ofbiz.container.config", "framework/base/config/ofbiz-containers.xml", ofbizHome); @@ -76,13 +67,12 @@ public final class Config { logDir = getAbsolutePath(props, "ofbiz.log.dir", "runtime/logs", ofbizHome); shutdownAfterLoad = isShutdownAfterLoad(props); useShutdownHook = isUseShutdownHook(props); - classpathAddComponent = props.getProperty("ofbiz.start.classpath.addComponent"); System.out.println("Set OFBIZ_HOME to - " + ofbizHome); // set system properties System.setProperty("ofbiz.home", ofbizHome); - System.setProperty("java.awt.headless", awtHeadless); + System.setProperty("java.awt.headless", getProperty(props, "java.awt.headless", "true")); System.setProperty("derby.system.home", getProperty(props, "derby.system.home", "runtime/data/derby")); // set the default locale @@ -111,46 +101,30 @@ public final class Config { } } - private Properties getPropertiesFile(List<StartupCommand> ofbizCommands) throws IOException { + private Properties getPropertiesFile(List<StartupCommand> ofbizCommands) throws StartupException { String fileName = determineOfbizPropertiesFileName(ofbizCommands); - String fullyQualifiedFileName = "org/apache/ofbiz/base/start/" + fileName + ".properties"; - InputStream propsStream = null; + String fullyQualifiedFileName = "org/apache/ofbiz/base/start/" + fileName; Properties props = new Properties(); - try { + + try (InputStream propsStream = getClass().getClassLoader().getResourceAsStream(fullyQualifiedFileName)) { // first try classpath - propsStream = getClass().getClassLoader().getResourceAsStream(fullyQualifiedFileName); if (propsStream != null) { props.load(propsStream); } else { - throw new IOException(); - } - } catch (IOException e) { // next try file location - File propsFile = new File(fullyQualifiedFileName); - if (propsFile != null) { - FileInputStream fis = null; - try { - fis = new FileInputStream(propsFile); + try(FileInputStream fis = new FileInputStream(new File(fullyQualifiedFileName))) { if (fis != null) { props.load(fis); } - } catch (FileNotFoundException e2) { - // do nothing; we will see empty props below - } finally { - if (fis != null) { - fis.close(); - } } } - } finally { - if (propsStream != null) { - propsStream.close(); - } + } catch (IOException e) { + throw new StartupException(e); } // check for empty properties if (props.isEmpty()) { - throw new IOException("Cannot load configuration properties : " + fullyQualifiedFileName); + throw new StartupException("Cannot load configuration properties : " + fullyQualifiedFileName); } System.out.println("Start.java using configuration file " + fullyQualifiedFileName); return props; @@ -159,37 +133,45 @@ public final class Config { private String determineOfbizPropertiesFileName(List<StartupCommand> ofbizCommands) { String fileName = null; if (ofbizCommands.stream().anyMatch(command -> - command.getName() == StartupCommandUtil.StartupOption.START.getName() - || command.getName() == StartupCommandUtil.StartupOption.SHUTDOWN.getName() - || command.getName() == StartupCommandUtil.StartupOption.STATUS.getName() ) + command.getName().equals(StartupCommandUtil.StartupOption.START.getName()) + || command.getName().equals(StartupCommandUtil.StartupOption.SHUTDOWN.getName()) + || command.getName().equals(StartupCommandUtil.StartupOption.STATUS.getName())) || ofbizCommands.isEmpty() - || ofbizCommands.stream().allMatch(command -> - command.getName() == StartupCommandUtil.StartupOption.PORTOFFSET.getName()) - ){ - fileName = "start"; + || ofbizCommands.stream().allMatch(command -> + command.getName().equals(StartupCommandUtil.StartupOption.PORTOFFSET.getName()))) { + fileName = "start.properties"; } else if(ofbizCommands.stream().anyMatch( - option -> option.getName() == StartupCommandUtil.StartupOption.LOAD_DATA.getName())) { - fileName = "load-data"; + option -> option.getName().equals(StartupCommandUtil.StartupOption.LOAD_DATA.getName()))) { + fileName = "load-data.properties"; } else if(ofbizCommands.stream().anyMatch( - option -> option.getName() == StartupCommandUtil.StartupOption.TEST.getName())) { - fileName = "test"; + option -> option.getName().equals(StartupCommandUtil.StartupOption.TEST.getName()))) { + fileName = "test.properties"; } return fileName; } + private List<String> getLoaders(Properties props) { + String loadersProp = getProperty(props, "ofbiz.start.loaders", ""); + List<String> loaders = new ArrayList<String>(); + for(String loader : StringUtil.split(loadersProp, ",")) { + loaders.add(loader); + } + return loaders; + } + private void setDefaultLocale(Properties props) { String localeString = props.getProperty("ofbiz.locale.default"); if (localeString != null && localeString.length() > 0) { String locales[] = localeString.split("_"); switch (locales.length) { - case 1: - Locale.setDefault(new Locale(locales[0])); - break; - case 2: - Locale.setDefault(new Locale(locales[0], locales[1])); - break; - case 3: - Locale.setDefault(new Locale(locales[0], locales[1], locales[2])); + case 1: + Locale.setDefault(new Locale(locales[0])); + break; + case 2: + Locale.setDefault(new Locale(locales[0], locales[1])); + break; + case 3: + Locale.setDefault(new Locale(locales[0], locales[1], locales[2])); } System.setProperty("user.language", localeString); } @@ -234,27 +216,6 @@ public final class Config { return calculatedAdminPort; } - private List<Map<String, String>> getLoaders(Properties props) { - ArrayList<Map<String, String>> loadersTmp = new ArrayList<Map<String, String>>(); - int currentPosition = 1; - Map<String, String> loader = null; - while (true) { - loader = new HashMap<String, String>(); - String loaderClass = props.getProperty("ofbiz.start.loader" + currentPosition); - - if (loaderClass == null || loaderClass.length() == 0) { - break; - } else { - loader.put("class", loaderClass); - loader.put("profiles", props.getProperty("ofbiz.start.loader" + currentPosition + ".loaders")); - loadersTmp.add(Collections.unmodifiableMap(loader)); - currentPosition++; - } - } - loadersTmp.trimToSize(); - return Collections.unmodifiableList(loadersTmp); - } - private String getOfbizHome(Properties props) { String extractedOfbizHome = props.getProperty("ofbiz.home", "."); if (extractedOfbizHome.equals(".")) { Modified: ofbiz/trunk/framework/start/src/main/java/org/apache/ofbiz/base/start/Start.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/start/src/main/java/org/apache/ofbiz/base/start/Start.java?rev=1772879&r1=1772878&r2=1772879&view=diff ============================================================================== --- ofbiz/trunk/framework/start/src/main/java/org/apache/ofbiz/base/start/Start.java (original) +++ ofbiz/trunk/framework/start/src/main/java/org/apache/ofbiz/base/start/Start.java Tue Dec 6 12:31:00 2016 @@ -70,22 +70,22 @@ public final class Start { instance.config = StartupControlPanel.init(ofbizCommands); } switch (commandType) { - case HELP: - StartupCommandUtil.printOfbizStartupHelp(System.out); - break; - case STATUS: - System.out.println("Current Status : " + AdminClient.requestStatus(instance.config)); - break; - case SHUTDOWN: - System.out.println("Shutting down server : " + AdminClient.requestShutdown(instance.config)); - break; - case START: - try { - StartupControlPanel.start(instance.config, instance.serverState, ofbizCommands); - } catch (StartupException e) { - StartupControlPanel.fullyTerminateSystem(e); - } - break; + case HELP: + StartupCommandUtil.printOfbizStartupHelp(System.out); + break; + case STATUS: + System.out.println("Current Status : " + AdminClient.requestStatus(instance.config)); + break; + case SHUTDOWN: + System.out.println("Shutting down server : " + AdminClient.requestShutdown(instance.config)); + break; + case START: + try { + StartupControlPanel.start(instance.config, instance.serverState, ofbizCommands); + } catch (StartupException e) { + StartupControlPanel.fullyTerminateSystem(e); + } + break; } } Modified: ofbiz/trunk/framework/start/src/main/java/org/apache/ofbiz/base/start/StartupControlPanel.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/start/src/main/java/org/apache/ofbiz/base/start/StartupControlPanel.java?rev=1772879&r1=1772878&r2=1772879&view=diff ============================================================================== --- ofbiz/trunk/framework/start/src/main/java/org/apache/ofbiz/base/start/StartupControlPanel.java (original) +++ ofbiz/trunk/framework/start/src/main/java/org/apache/ofbiz/base/start/StartupControlPanel.java Tue Dec 6 12:31:00 2016 @@ -23,7 +23,6 @@ import java.io.FileInputStream; import java.io.IOException; import java.util.ArrayList; import java.util.List; -import java.util.Map; import java.util.concurrent.atomic.AtomicReference; import org.apache.ofbiz.base.start.Start.ServerState; @@ -61,14 +60,13 @@ final class StartupControlPanel { AtomicReference<ServerState> serverState, List<StartupCommand> ofbizCommands) throws StartupException { + //TODO loaders should be converted to a single loader List<StartupLoader> loaders = new ArrayList<StartupLoader>(); Thread adminServer = createAdminServer(config, serverState, loaders); - Classpath classPath = createClassPath(config); - NativeLibClassLoader classLoader = createAndSetContextClassLoader(config, classPath); createLogDirectoryIfMissing(config); createRuntimeShutdownHook(config, loaders, serverState); - loadStartupLoaders(config, loaders, ofbizCommands, serverState, classLoader); + loadStartupLoaders(config, loaders, ofbizCommands, serverState); executeShutdownAfterLoadIfConfigured(config, loaders, serverState, adminServer); } @@ -159,42 +157,6 @@ final class StartupControlPanel { return adminServer; } - private static Classpath createClassPath(Config config) throws StartupException { - Classpath classPath = new Classpath(); - try { - classPath.addComponent(config.ofbizHome); - String ofbizHomeTmp = config.ofbizHome; - if (!ofbizHomeTmp.isEmpty() && !ofbizHomeTmp.endsWith("/")) { - ofbizHomeTmp = ofbizHomeTmp.concat("/"); - } - if (config.classpathAddComponent != null) { - String[] components = config.classpathAddComponent.split(","); - for (String component : components) { - classPath.addComponent(ofbizHomeTmp.concat(component.trim())); - } - } - } catch (IOException e) { - throw new StartupException("Cannot create classpath", e); - } - return classPath; - } - - private static NativeLibClassLoader createAndSetContextClassLoader(Config config, Classpath classPath) throws StartupException { - ClassLoader parent = Thread.currentThread().getContextClassLoader(); - NativeLibClassLoader classloader = null; - try { - classloader = new NativeLibClassLoader(classPath.getUrls(), parent); - classloader.addNativeClassPath(System.getProperty("java.library.path")); - for (File folder : classPath.getNativeFolders()) { - classloader.addNativeClassPath(folder); - } - } catch (IOException e) { - throw new StartupException("Couldn't create NativeLibClassLoader", e); - } - Thread.currentThread().setContextClassLoader(classloader); - return classloader; - } - private static void createLogDirectoryIfMissing(Config config) { File logDir = new File(config.logDir); if (!logDir.exists()) { @@ -224,33 +186,24 @@ final class StartupControlPanel { private static void loadStartupLoaders(Config config, List<StartupLoader> loaders, List<StartupCommand> ofbizCommands, - AtomicReference<ServerState> serverState, - NativeLibClassLoader classloader) throws StartupException { + AtomicReference<ServerState> serverState) throws StartupException { + + String startupLoaderName = "org.apache.ofbiz.base.container.ContainerLoader"; + ClassLoader classloader = Thread.currentThread().getContextClassLoader(); synchronized (loaders) { - for (Map<String, String> loaderMap : config.loaders) { - if (serverState.get() == ServerState.STOPPING) { - return; - } - try { - String loaderClassName = loaderMap.get("class"); - Class<?> loaderClass = classloader.loadClass(loaderClassName); - StartupLoader loader = (StartupLoader) loaderClass.newInstance(); - loaders.add(loader); // add before loading, so unload can occur if error during loading - loader.load(config, ofbizCommands); - } catch (ReflectiveOperationException e) { - throw new StartupException(e.getMessage(), e); - } + if (serverState.get() == ServerState.STOPPING) { + return; } - } - StringBuilder sb = new StringBuilder(); - for (String path : classloader.getNativeLibPaths()) { - if (sb.length() > 0) { - sb.append(File.pathSeparator); + try { + Class<?> loaderClass = classloader.loadClass(startupLoaderName); + StartupLoader loader = (StartupLoader) loaderClass.newInstance(); + loaders.add(loader); // add before loading, so unload can occur if error during loading + loader.load(config, ofbizCommands); + } catch (ReflectiveOperationException e) { + throw new StartupException(e); } - sb.append(path); } - System.setProperty("java.library.path", sb.toString()); } private static void executeShutdownAfterLoadIfConfigured( Modified: ofbiz/trunk/framework/start/src/main/java/org/apache/ofbiz/base/start/load-data.properties URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/start/src/main/java/org/apache/ofbiz/base/start/load-data.properties?rev=1772879&r1=1772878&r2=1772879&view=diff ============================================================================== --- ofbiz/trunk/framework/start/src/main/java/org/apache/ofbiz/base/start/load-data.properties (original) +++ ofbiz/trunk/framework/start/src/main/java/org/apache/ofbiz/base/start/load-data.properties Tue Dec 6 12:31:00 2016 @@ -16,35 +16,47 @@ # specific language governing permissions and limitations # under the License. ############################################################################### -#### + +#################################### # OFBiz Startup Application Settings -#### +#################################### -# --- Class paths needed to get StartupLoaders to work (see Start.createClassLoader()). -ofbiz.start.classpath.addComponent=framework/base/config,framework/base/dtd +# --- OFBiz startup loaders (comma separated) +ofbiz.start.loaders=load-data -# --- Default logs directory (relative to ofbiz.home) -#ofbiz.log.dir=runtime/logs +# --- OFBiz home directory. Default is current directory +#ofbiz.home= -# --- Location (relative to ofbiz.home) for (normal) container configuration -#ofbiz.container.config=framework/base/config/ofbiz-containers.xml +# --- logs directory relative to ofbiz.home. Default is runtime/logs +#ofbiz.log.dir= -# --- StartupLoader implementations to load (in order) -ofbiz.start.loader1=org.apache.ofbiz.base.container.ContainerLoader -ofbiz.start.loader1.loaders=load-data +# --- Derby directory relative to ofbiz.home. Default is runtime/data/derby +#derby.system.home= -# -- Enable the shutdown hook -#ofbiz.enable.hook=false +# --- Container config file relative to ofbiz.home. +# Default is framework/base/config/ofbiz-containers.xml +#ofbiz.container.config= -# -- Auto-Shutdown after load -ofbiz.auto.shutdown=true +# --- Network host, port and key used by the AdminClient to communicate +# with AdminServer for shutting down OFBiz or inquiring on status +# Default ofbiz.admin.host 127.0.0.1 +# Default ofbiz.admin.port 10523 +# Default ofbiz.admin.key so3du5kasd5dn +#ofbiz.admin.host= +#ofbiz.admin.port= +#ofbiz.admin.key= -# --- Default Derby system home directory -#derby.system.home=runtime/data/derby +# -- Enable the JVM shutdown hook. Default is true +ofbiz.enable.hook=false + +# -- Auto-Shutdown after load. Default is false +ofbiz.auto.shutdown=true -# --- Tells AWT (i.e. JasperReports/FOP/etc) to not require a head (X11) -java.awt.headless=true +# --- Tells AWT not not require a head (X11). Default is true +#java.awt.headless=false -# -- The default locale for this OFBiz instance. +# -- The locale for this OFBiz instance. Default depends on JVM environment ofbiz.locale.default=en +# -- The time zone for this OFBiz instance. Default depends on JVM environment +#ofbiz.timeZone.default=GMT Modified: ofbiz/trunk/framework/start/src/main/java/org/apache/ofbiz/base/start/rmi.properties URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/start/src/main/java/org/apache/ofbiz/base/start/rmi.properties?rev=1772879&r1=1772878&r2=1772879&view=diff ============================================================================== --- ofbiz/trunk/framework/start/src/main/java/org/apache/ofbiz/base/start/rmi.properties (original) +++ ofbiz/trunk/framework/start/src/main/java/org/apache/ofbiz/base/start/rmi.properties Tue Dec 6 12:31:00 2016 @@ -16,31 +16,47 @@ # specific language governing permissions and limitations # under the License. ############################################################################### -#### + +#################################### # OFBiz Startup Application Settings -#### +#################################### + +# --- OFBiz startup loaders (comma separated) +ofbiz.start.loaders=rmi + +# --- OFBiz home directory. Default is current directory +#ofbiz.home= + +# --- logs directory relative to ofbiz.home. Default is runtime/logs +#ofbiz.log.dir= -# --- Class paths needed to get StartupLoaders to work (see Start.createClassLoader()). -ofbiz.start.classpath.addComponent=framework/base/config,framework/base/dtd +# --- Derby directory relative to ofbiz.home. Default is runtime/data/derby +#derby.system.home= -# --- Default logs directory (relative to ofbiz.home) -#ofbiz.log.dir=runtime/logs +# --- Container config file relative to ofbiz.home. +# Default is framework/base/config/ofbiz-containers.xml +#ofbiz.container.config= -# --- Location (relative to ofbiz.home) for (normal) container configuration -#ofbiz.container.config=framework/base/config/ofbiz-containers.xml +# --- Network host, port and key used by the AdminClient to communicate +# with AdminServer for shutting down OFBiz or inquiring on status +# Default ofbiz.admin.host 127.0.0.1 +# Default ofbiz.admin.port 10523 +# Default ofbiz.admin.key so3du5kasd5dn +#ofbiz.admin.host= +#ofbiz.admin.port= +#ofbiz.admin.key= -# --- StartupLoader implementations to load (in order) -ofbiz.start.loader1=org.apache.ofbiz.base.container.ContainerLoader -ofbiz.start.loader1.loaders=rmi +# -- Enable the JVM shutdown hook. Default is true +#ofbiz.enable.hook=false -# -- Enable the shutdown hook -#ofbiz.enable.hook=true +# -- Auto-Shutdown after load. Default is false +#ofbiz.auto.shutdown=true -# -- Auto-Shutdown after load -#ofbiz.auto.shutdown=false +# --- Tells AWT not not require a head (X11). Default is true +#java.awt.headless=false -# --- Default Derby system home directory -#derby.system.home=runtime/data/derby +# -- The locale for this OFBiz instance. Default depends on JVM environment +#ofbiz.locale.default=en -# --- Tells AWT (i.e. JasperReports/FOP/etc) to not require a head (X11) -java.awt.headless=true +# -- The time zone for this OFBiz instance. Default depends on JVM environment +#ofbiz.timeZone.default=GMT Modified: ofbiz/trunk/framework/start/src/main/java/org/apache/ofbiz/base/start/start.properties URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/start/src/main/java/org/apache/ofbiz/base/start/start.properties?rev=1772879&r1=1772878&r2=1772879&view=diff ============================================================================== --- ofbiz/trunk/framework/start/src/main/java/org/apache/ofbiz/base/start/start.properties (original) +++ ofbiz/trunk/framework/start/src/main/java/org/apache/ofbiz/base/start/start.properties Tue Dec 6 12:31:00 2016 @@ -16,48 +16,47 @@ # specific language governing permissions and limitations # under the License. ############################################################################### -#### + +#################################### # OFBiz Startup Application Settings -#### +#################################### + +# --- OFBiz startup loaders (comma separated) +ofbiz.start.loaders=main -# --- By default we will use the current directory +# --- OFBiz home directory. Default is current directory #ofbiz.home= -# --- Class paths needed to get StartupLoaders to work (see Start.createClassLoader()). -ofbiz.start.classpath.addComponent=framework/base/config,framework/base/dtd +# --- logs directory relative to ofbiz.home. Default is runtime/logs +#ofbiz.log.dir= + +# --- Derby directory relative to ofbiz.home. Default is runtime/data/derby +#derby.system.home= -# --- Set these for shutting down when running as background process -ofbiz.admin.host=127.0.0.1 -ofbiz.admin.port=10523 -ofbiz.admin.key=so3du5kasd5dn - -# --- Default logs directory (relative to ofbiz.home) -#ofbiz.log.dir=runtime/logs - -# --- Location (relative to ofbiz.home) for (normal) container configuration -#ofbiz.container.config=framework/base/config/ofbiz-containers.xml - -# --- StartupLoader implementations to load (in order) -ofbiz.start.loader1=org.apache.ofbiz.base.container.ContainerLoader -# Because of the danger of Java deserialization when using RMI, the RMI component has been disabled in the default configuration of OFBiz. -# If you need RMI you just need to uncomment those places - See OFBIZ-6942 for details --> -#ofbiz.start.loader1.loaders=main,rmi -ofbiz.start.loader1.loaders=main - -# -- Enable the shutdown hook -#ofbiz.enable.hook=true - -# -- Auto-Shutdown after load -#ofbiz.auto.shutdown=false +# --- Container config file relative to ofbiz.home. +# Default is framework/base/config/ofbiz-containers.xml +#ofbiz.container.config= + +# --- Network host, port and key used by the AdminClient to communicate +# with AdminServer for shutting down OFBiz or inquiring on status +# Default ofbiz.admin.host 127.0.0.1 +# Default ofbiz.admin.port 10523 +# Default ofbiz.admin.key so3du5kasd5dn +#ofbiz.admin.host= +#ofbiz.admin.port= +#ofbiz.admin.key= + +# -- Enable the JVM shutdown hook. Default is true +#ofbiz.enable.hook=false -# --- Default Derby system home directory -#derby.system.home=runtime/data/derby +# -- Auto-Shutdown after load. Default is false +#ofbiz.auto.shutdown=true -# --- Tells AWT (i.e. JasperReports/FOP/etc) to not require a head (X11) -java.awt.headless=true +# --- Tells AWT not not require a head (X11). Default is true +#java.awt.headless=false -# -- The default locale for this OFBiz instance. +# -- The locale for this OFBiz instance. Default depends on JVM environment ofbiz.locale.default=en -# -- The default time zone for this OFBiz instance. +# -- The time zone for this OFBiz instance. Default depends on JVM environment #ofbiz.timeZone.default=GMT Modified: ofbiz/trunk/framework/start/src/main/java/org/apache/ofbiz/base/start/test.properties URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/start/src/main/java/org/apache/ofbiz/base/start/test.properties?rev=1772879&r1=1772878&r2=1772879&view=diff ============================================================================== --- ofbiz/trunk/framework/start/src/main/java/org/apache/ofbiz/base/start/test.properties (original) +++ ofbiz/trunk/framework/start/src/main/java/org/apache/ofbiz/base/start/test.properties Tue Dec 6 12:31:00 2016 @@ -16,34 +16,47 @@ # specific language governing permissions and limitations # under the License. ############################################################################### -#### + +#################################### # OFBiz Startup Application Settings -#### +#################################### + +# --- OFBiz startup loaders (comma separated) +ofbiz.start.loaders=test + +# --- OFBiz home directory. Default is current directory +#ofbiz.home= -# --- Class paths needed to get StartupLoaders to work (see Start.createClassLoader()). -ofbiz.start.classpath.addComponent=framework/base/config,framework/base/dtd +# --- logs directory relative to ofbiz.home. Default is runtime/logs +#ofbiz.log.dir= -# --- Default logs directory (relative to ofbiz.home) -#ofbiz.log.dir=runtime/logs +# --- Derby directory relative to ofbiz.home. Default is runtime/data/derby +#derby.system.home= -# --- Location (relative to ofbiz.home) for (normal) container configuration -#ofbiz.container.config=framework/base/config/ofbiz-containers.xml +# --- Container config file relative to ofbiz.home. +# Default is framework/base/config/ofbiz-containers.xml +#ofbiz.container.config= -# --- StartupLoader implementations to load (in order) -ofbiz.start.loader1=org.apache.ofbiz.base.container.ContainerLoader -ofbiz.start.loader1.loaders=test +# --- Network host, port and key used by the AdminClient to communicate +# with AdminServer for shutting down OFBiz or inquiring on status +# Default ofbiz.admin.host 127.0.0.1 +# Default ofbiz.admin.port 10523 +# Default ofbiz.admin.key so3du5kasd5dn +#ofbiz.admin.host= +#ofbiz.admin.port= +#ofbiz.admin.key= -# -- Enable the shutdown hook -#ofbiz.enable.hook=true +# -- Enable the JVM shutdown hook. Default is true +ofbiz.enable.hook=false -# -- Auto-Shutdown after load +# -- Auto-Shutdown after load. Default is false ofbiz.auto.shutdown=true -# --- Default Derby system home directory -#derby.system.home=runtime/data/derby +# --- Tells AWT not not require a head (X11). Default is true +#java.awt.headless=false -# -- The default locale for this OFBiz instance. +# -- The locale for this OFBiz instance. Default depends on JVM environment ofbiz.locale.default=en -# --- Tells AWT (i.e. JasperReports/FOP/etc) to not require a head (X11) -java.awt.headless=true +# -- The time zone for this OFBiz instance. Default depends on JVM environment +#ofbiz.timeZone.default=GMT |
Free forum by Nabble | Edit this page |