You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicemix.apache.org by gn...@apache.org on 2007/12/03 21:40:50 UTC

svn commit: r600677 - in /servicemix/branches/servicemix-4.0/runtime: filemonitor/src/main/java/org/apache/servicemix/runtime/filemonitor/ main/src/main/java/org/apache/servicemix/main/ minimum/src/main/descriptors/ minimum/src/main/release/bin/ minimu...

Author: gnodet
Date: Mon Dec  3 12:40:49 2007
New Revision: 600677

URL: http://svn.apache.org/viewvc?rev=600677&view=rev
Log:
Change config dir to etc to align with gshell which is not extensible

Added:
    servicemix/branches/servicemix-4.0/runtime/minimum/src/main/release/etc/config.properties   (contents, props changed)
      - copied, changed from r600637, servicemix/branches/servicemix-4.0/runtime/minimum/src/main/release/conf/config.properties
    servicemix/branches/servicemix-4.0/runtime/minimum/src/main/release/etc/org.apache.servicemix.management.cfg
      - copied unchanged from r600637, servicemix/branches/servicemix-4.0/runtime/minimum/src/main/release/conf/org.apache.servicemix.management.cfg
    servicemix/branches/servicemix-4.0/runtime/minimum/src/main/release/etc/org.apache.servicemix.shell.cfg   (props changed)
      - copied unchanged from r600637, servicemix/branches/servicemix-4.0/runtime/minimum/src/main/release/conf/org.apache.servicemix.shell.cfg
    servicemix/branches/servicemix-4.0/runtime/minimum/src/main/release/etc/org.ops4j.pax.logging.cfg   (props changed)
      - copied unchanged from r600637, servicemix/branches/servicemix-4.0/runtime/minimum/src/main/release/conf/org.ops4j.pax.logging.cfg
Removed:
    servicemix/branches/servicemix-4.0/runtime/minimum/src/main/release/conf/
Modified:
    servicemix/branches/servicemix-4.0/runtime/filemonitor/src/main/java/org/apache/servicemix/runtime/filemonitor/FileMonitor.java
    servicemix/branches/servicemix-4.0/runtime/main/src/main/java/org/apache/servicemix/main/Main.java
    servicemix/branches/servicemix-4.0/runtime/minimum/src/main/descriptors/unix-bin.xml
    servicemix/branches/servicemix-4.0/runtime/minimum/src/main/descriptors/windows-bin.xml
    servicemix/branches/servicemix-4.0/runtime/minimum/src/main/release/bin/servicemix.sh

Modified: servicemix/branches/servicemix-4.0/runtime/filemonitor/src/main/java/org/apache/servicemix/runtime/filemonitor/FileMonitor.java
URL: http://svn.apache.org/viewvc/servicemix/branches/servicemix-4.0/runtime/filemonitor/src/main/java/org/apache/servicemix/runtime/filemonitor/FileMonitor.java?rev=600677&r1=600676&r2=600677&view=diff
==============================================================================
--- servicemix/branches/servicemix-4.0/runtime/filemonitor/src/main/java/org/apache/servicemix/runtime/filemonitor/FileMonitor.java (original)
+++ servicemix/branches/servicemix-4.0/runtime/filemonitor/src/main/java/org/apache/servicemix/runtime/filemonitor/FileMonitor.java Mon Dec  3 12:40:49 2007
@@ -54,7 +54,7 @@
     public final static String SCAN_INTERVAL = "org.apache.servicemix.filemonitor.scanInterval";
     protected static final String ALIAS_KEY = "_alias_factory_pid";
     private FileMonitorActivator activator;
-    private File configDir = new File("./conf");
+    private File configDir = new File("./etc");
     private File deployDir = new File("./deploy");
     private File generateDir = new File("./data/generated-bundles");
     private Scanner scanner = new Scanner();

Modified: servicemix/branches/servicemix-4.0/runtime/main/src/main/java/org/apache/servicemix/main/Main.java
URL: http://svn.apache.org/viewvc/servicemix/branches/servicemix-4.0/runtime/main/src/main/java/org/apache/servicemix/main/Main.java?rev=600677&r1=600676&r2=600677&view=diff
==============================================================================
--- servicemix/branches/servicemix-4.0/runtime/main/src/main/java/org/apache/servicemix/main/Main.java (original)
+++ servicemix/branches/servicemix-4.0/runtime/main/src/main/java/org/apache/servicemix/main/Main.java Mon Dec  3 12:40:49 2007
@@ -1,600 +1,600 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.apache.servicemix.main;
-
-import java.io.*;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.*;
-
-import org.apache.felix.framework.Felix;
-import org.apache.felix.framework.cache.BundleCache;
-import org.apache.felix.framework.util.StringMap;
-
-/**
- * <p>
- * This class is the default way to instantiate and execute the framework. It is not
- * intended to be the only way to instantiate and execute the framework; rather, it is
- * one example of how to do so. When embedding the framework in a host application,
- * this class can serve as a simple guide of how to do so. It may even be
- * worthwhile to reuse some of its property handling capabilities. This class
- * is completely static and is only intended to start a single instance of
- * the framework.
- * </p>
-**/
-public class Main
-{
-    /**
-     * The system property name used to specify an URL to the system
-     * property file.
-    **/
-    public static final String SYSTEM_PROPERTIES_PROP = "felix.system.properties";
-    /**
-     * The default name used for the system properties file.
-    **/
-    public static final String SYSTEM_PROPERTIES_FILE_VALUE = "system.properties";
-    /**
-     * The system property name used to specify an URL to the configuration
-     * property file to be used for the created the framework instance.
-    **/
-    public static final String CONFIG_PROPERTIES_PROP = "felix.config.properties";
-    /**
-     * The default name used for the configuration properties file.
-    **/
-    public static final String CONFIG_PROPERTIES_FILE_VALUE = "config.properties";
-    /*
-     * The property for auto-discovering the bundles 
-     */
-    public static final String PROPERTY_AUTO_START = "felix.auto.start";
-
-    private static Felix m_felix = null;
-
-    /**
-     * <p>
-     * This method performs the main task of constructing an framework instance
-     * and starting its execution. The following functions are performed
-     * when invoked:
-     * </p>
-     * <ol>
-     *   <li><i><b>Read the system properties file.<b></i> This is a file
-     *       containing properties to be pushed into <tt>System.setProperty()</tt>
-     *       before starting the framework. This mechanism is mainly shorthand
-     *       for people starting the framework from the command line to avoid having
-     *       to specify a bunch of <tt>-D</tt> system property definitions.
-     *       The only properties defined in this file that will impact the framework's
-     *       behavior are the those concerning setting HTTP proxies, such as
-     *       <tt>http.proxyHost</tt>, <tt>http.proxyPort</tt>, and
-     *       <tt>http.proxyAuth</tt>.
-     *   </li>
-     *   <li><i><b>Perform system property variable substitution on system
-     *       properties.</b></i> Any system properties in the system property
-     *       file whose value adheres to <tt>${&lt;system-prop-name&gt;}</tt>
-     *       syntax will have their value substituted with the appropriate
-     *       system property value.
-     *   </li>
-     *   <li><i><b>Read the framework's configuration property file.</b></i> This is
-     *       a file containing properties used to configure the framework
-     *       instance and to pass configuration information into
-     *       bundles installed into the framework instance. The configuration
-     *       property file is called <tt>config.properties</tt> by default
-     *       and is located in the <tt>conf/</tt> directory of the Felix
-     *       installation directory, which is the parent directory of the
-     *       directory containing the <tt>felix.jar</tt> file. It is possible
-     *       to use a different location for the property file by specifying
-     *       the desired URL using the <tt>felix.config.properties</tt>
-     *       system property; this should be set using the <tt>-D</tt> syntax
-     *       when executing the JVM. Refer to the
-     *       <a href="Felix.html#Felix(java.util.Map, java.util.List)">
-     *       <tt>Felix</tt></a> constructor documentation for more
-     *       information on the framework configuration options.
-     *   </li>
-     *   <li><i><b>Perform system property variable substitution on configuration
-     *       properties.</b></i> Any configuration properties whose value adheres to
-     *       <tt>${&lt;system-prop-name&gt;}</tt> syntax will have their value
-     *       substituted with the appropriate system property value.
-     *   </li>
-     *   <li><i><b>Ensure the default bundle cache has sufficient information to
-     *       initialize.</b></i> The default implementation of the bundle cache
-     *       requires either a profile name or a profile directory in order to
-     *       start. The configuration properties are checked for at least one
-     *       of the <tt>felix.cache.profile</tt> or <tt>felix.cache.profiledir</tt>
-     *       properties. If neither is found, the user is asked to supply a profile
-     *       name that is added to the configuration property set. See the
-     *       <a href="cache/DefaultBundleCache.html"><tt>DefaultBundleCache</tt></a>
-     *       documentation for more details its configuration options.
-     *   </li>
-     *   <li><i><b>Creates and starts a framework instance.</b></i> A 
-     *       case insensitive
-     *       <a href="util/StringMap.html"><tt>StringMap</tt></a>
-     *       is created for the configuration property file and is passed
-     *       into the framework.
-     *   </li>
-     * </ol>
-     * <p>
-     * It should be noted that simply starting an instance of the framework is not enough
-     * to create an interactive session with it. It is necessary to install
-     * and start bundles that provide an interactive impl; this is generally
-     * done by specifying an "auto-start" property in the framework configuration
-     * property file. If no interactive impl bundles are installed or if
-     * the configuration property file cannot be found, the framework will appear to
-     * be hung or deadlocked. This is not the case, it is executing correctly,
-     * there is just no way to interact with it. Refer to the
-     * <a href="Felix.html#Felix(java.util.Map, java.util.List)">
-     * <tt>Felix</tt></a> constructor documentation for more information on
-     * framework configuration options.
-     * </p>
-     * @param argv An array of arguments, all of which are ignored.
-     * @throws Exception If an error occurs.
-    **/
-    public static void main(String[] argv) throws Exception
-    {
-        // Load system properties.
-        Main.loadSystemProperties();
-
-        // Read configuration properties.
-        Properties configProps = Main.loadConfigProperties();
-
-        // Copy framework properties from the system properties.
-        Main.copySystemProperties(configProps);
-
-        // See if the profile name property was specified.
-        String profileName = configProps.getProperty(BundleCache.CACHE_PROFILE_PROP);
-
-        // See if the profile directory property was specified.
-        String profileDirName = configProps.getProperty(BundleCache.CACHE_PROFILE_DIR_PROP);
-
-        // Print welcome banner.
-        System.out.println("\nWelcome to ServiceMix.");
-        System.out.println("=====================\n");
-
-        // If no profile or profile directory is specified in the
-        // properties, then ask for a profile name.
-        if ((profileName == null) && (profileDirName == null))
-        {
-            System.out.print("Enter profile name: ");
-            BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
-            try
-            {
-                profileName = in.readLine();
-            }
-            catch (IOException ex)
-            {
-                System.err.println("Could not read input.");
-                System.exit(-1);
-            }
-            System.out.println("");
-            if (profileName.length() != 0)
-            {
-                configProps.setProperty(BundleCache.CACHE_PROFILE_PROP, profileName);
-            }
-        }
-
-        // A profile directory or name must be specified.
-        if ((profileDirName == null) && (profileName.length() == 0))
-        {
-            System.err.println("You must specify a profile name or directory.");
-            System.exit(-1);
-        }
-
-        try
-        {
-            // Now create an instance of the framework.
-            m_felix = new Felix(new StringMap(configProps, false), null);
-            m_felix.start();
-        }
-        catch (Exception ex)
-        {
-            System.err.println("Could not create framework: " + ex);
-            ex.printStackTrace();
-            System.exit(-1);
-        }
-    }
-
-    /**
-     * <p>
-     * Loads the properties in the system property file associated with the
-     * framework installation into <tt>System.setProperty()</tt>. These properties
-     * are not directly used by the framework in anyway. By default, the system
-     * property file is located in the <tt>conf/</tt> directory of the Felix
-     * installation directory and is called "<tt>system.properties</tt>". The
-     * installation directory of Felix is assumed to be the parent directory of
-     * the <tt>felix.jar</tt> file as found on the system class path property.
-     * The precise file from which to load system properties can be set by
-     * initializing the "<tt>felix.system.properties</tt>" system property to an
-     * arbitrary URL.
-     * </p>
-    **/
-    public static void loadSystemProperties()
-    {
-        // The system properties file is either specified by a system
-        // property or it is in the same directory as the Felix JAR file.
-        // Try to load it from one of these places.
-
-        // See if the property URL was specified as a property.
-        URL propURL = null;
-        String custom = System.getProperty(SYSTEM_PROPERTIES_PROP);
-        if (custom != null)
-        {
-            try
-            {
-                propURL = new URL(custom);
-            }
-            catch (MalformedURLException ex)
-            {
-                System.err.print("Main: " + ex);
-                return;
-            }
-        }
-        else
-        {
-            // Determine where the configuration directory is by figuring
-            // out where felix.jar is located on the system class path.
-            File confDir = null;
-            String classpath = System.getProperty("java.class.path");
-            int index = classpath.toLowerCase().indexOf("servicemix.jar");
-            int start = classpath.lastIndexOf(File.pathSeparator, index) + 1;
-            if (index >= start)
-            {
-                // Get the path of the felix.jar file.
-                String jarLocation = classpath.substring(start, index);
-                // Calculate the conf directory based on the parent
-                // directory of the felix.jar directory.
-                confDir = new File(
-                    new File(new File(jarLocation).getAbsolutePath()).getParent(),
-                    "conf");
-            }
-            else
-            {
-                // Can't figure it out so use the current directory as default.
-                confDir = new File(System.getProperty("user.dir"));
-            }
-
-            try
-            {
-                propURL = new File(confDir, SYSTEM_PROPERTIES_FILE_VALUE).toURL();
-            }
-            catch (MalformedURLException ex)
-            {
-                System.err.print("Main: " + ex);
-                return;
-            }
-        }
-
-        // Read the properties file.
-        Properties props = new Properties();
-        InputStream is = null;
-        try
-        {
-            is = propURL.openConnection().getInputStream();
-            props.load(is);
-            is.close();
-        }
-        catch (FileNotFoundException ex)
-        {
-            // Ignore file not found.
-        }
-        catch (Exception ex)
-        {
-            System.err.println(
-                "Main: Error loading system properties from " + propURL);
-            System.err.println("Main: " + ex);
-            try
-            {
-                if (is != null) is.close();
-            }
-            catch (IOException ex2)
-            {
-                // Nothing we can do.
-            }
-            return;
-        }
-
-        // Perform variable substitution on specified properties.
-        for (Enumeration e = props.propertyNames(); e.hasMoreElements(); )
-        {
-            String name = (String) e.nextElement();
-            System.setProperty(name,
-                substVars(props.getProperty(name), name, null, null));
-        }
-    }
-
-    /**
-     * <p>
-     * Loads the configuration properties in the configuration property file
-     * associated with the framework installation; these properties
-     * are accessible to the framework and to bundles and are intended
-     * for configuration purposes. By default, the configuration property
-     * file is located in the <tt>conf/</tt> directory of the Felix
-     * installation directory and is called "<tt>config.properties</tt>".
-     * The installation directory of Felix is assumed to be the parent
-     * directory of the <tt>felix.jar</tt> file as found on the system class
-     * path property. The precise file from which to load configuration
-     * properties can be set by initializing the "<tt>felix.config.properties</tt>"
-     * system property to an arbitrary URL.
-     * </p>
-     * @return A <tt>Properties</tt> instance or <tt>null</tt> if there was an error.
-    **/
-    public static Properties loadConfigProperties()
-    {
-        // The config properties file is either specified by a system
-        // property or it is in the conf/ directory of the Felix
-        // installation directory.  Try to load it from one of these
-        // places.
-
-        File bundleDir = null;
-
-        // See if the property URL was specified as a property.
-        URL propURL = null;
-        String custom = System.getProperty(CONFIG_PROPERTIES_PROP);
-        if (custom != null)
-        {
-            try
-            {
-                propURL = new URL(custom);
-            }
-            catch (MalformedURLException ex)
-            {
-                System.err.print("Main: " + ex);
-                return null;
-            }
-        }
-        else
-        {
-            // Determine where the configuration directory is by figuring
-            // out where felix.jar is located on the system class path.
-            File confDir = null;
-            String classpath = System.getProperty("java.class.path");
-            int index = classpath.toLowerCase().indexOf("servicemix.jar");
-            int start = classpath.lastIndexOf(File.pathSeparator, index) + 1;
-            if (index >= start)
-            {
-                // Get the path of the felix.jar file.
-                String jarLocation = classpath.substring(start, index);
-                // Calculate the conf directory based on the parent
-                // directory of the servicemix.jar directory.
-                confDir = new File(
-                    new File(new File(jarLocation).getAbsolutePath()).getParent(),
-                    "conf");
-                bundleDir = new File(
-                    new File(new File(jarLocation).getAbsolutePath()).getParent(),
-                    "system");
-            }
-            else
-            {
-                // Can't figure it out so use the current directory as default.
-                confDir = new File(System.getProperty("user.dir"));
-                bundleDir = new File(System.getProperty("user.dir"));
-            }
-
-            try
-            {
-                propURL = new File(confDir, CONFIG_PROPERTIES_FILE_VALUE).toURL();
-            }
-            catch (MalformedURLException ex)
-            {
-                System.err.print("Main: " + ex);
-                return null;
-            }
-        }
-
-        // Read the properties file.
-        Properties props = new Properties();
-        InputStream is = null;
-        try
-        {
-            is = propURL.openConnection().getInputStream();
-            props.load(is);
-            is.close();
-        }
-        catch (FileNotFoundException ex)
-        {
-            // Ignore file not found.
-        }
-        catch (Exception ex)
-        {
-            System.err.println(
-                "Error loading config properties from " + propURL);
-            System.err.println("Main: " + ex);
-            try
-            {
-                if (is != null) is.close();
-            }
-            catch (IOException ex2)
-            {
-                // Nothing we can do.
-            }
-            return null;
-        }
-
-        // Perform variable substitution for system properties.
-        for (Enumeration e = props.propertyNames(); e.hasMoreElements(); )
-        {
-            String name = (String) e.nextElement();
-            props.setProperty(name,
-                substVars(props.getProperty(name), name, null, props));
-        }
-
-        // Mutate properties
-        Main.processConfigurationProperties(props, bundleDir);
-
-        return props;
-    }
-
-    public static void copySystemProperties(Properties configProps)
-    {
-        for (Enumeration e = System.getProperties().propertyNames();
-             e.hasMoreElements(); )
-        {
-            String key = (String)e.nextElement();
-            if (key.startsWith("felix.") ||
-                key.equals("org.osgi.framework.system.packages") ||
-                key.equals("org.osgi.framework.bootdelegation"))
-            {
-                configProps.setProperty(key, System.getProperty(key));
-            }
-        }
-    }
-
-    /**
-     * Process properties to customize default felix behavior
-     */
-    protected static void processConfigurationProperties(Properties props, File bundleDir) {
-        if (Boolean.parseBoolean(props.getProperty(PROPERTY_AUTO_START)) && bundleDir != null) {
-            File[] bundles = bundleDir.listFiles(new FileFilter() {
-                public boolean accept(File pathname) {
-                    return pathname.toString().endsWith(".jar");
-                }
-            });
-            StringBuffer sb = new StringBuffer();
-            for (int i = 0; i < bundles.length; i++) {
-                try {
-                    sb.append("\"").append(bundles[i].toURL().toString()).append("\" ");
-                } catch (MalformedURLException e) {
-                    System.err.print( "Ignoring " + bundles[i].toString() + " (" + e + ")" );
-                }
-            }
-            props.setProperty("felix.auto.start.1", sb.toString());
-            props.remove(PROPERTY_AUTO_START);
-        }
-    }
-
-    private static final String DELIM_START = "${";
-    private static final String DELIM_STOP  = "}";
-
-    /**
-     * <p>
-     * This method performs property variable substitution on the
-     * specified value. If the specified value contains the syntax
-     * <tt>${&lt;prop-name&gt;}</tt>, where <tt>&lt;prop-name&gt;</tt>
-     * refers to either a configuration property or a system property,
-     * then the corresponding property value is substituted for the variable
-     * placeholder. Multiple variable placeholders may exist in the
-     * specified value as well as nested variable placeholders, which
-     * are substituted from inner most to outer most. Configuration
-     * properties override system properties.
-     * </p>
-     * @param val The string on which to perform property substitution.
-     * @param currentKey The key of the property being evaluated used to
-     *        detect cycles.
-     * @param cycleMap Map of variable references used to detect nested cycles.
-     * @param configProps Set of configuration properties.
-     * @return The value of the specified string after system property substitution.
-     * @throws IllegalArgumentException If there was a syntax error in the
-     *         property placeholder syntax or a recursive variable reference.
-    **/
-    public static String substVars(String val, String currentKey,
-        Map cycleMap, Properties configProps)
-        throws IllegalArgumentException
-    {
-        // If there is currently no cycle map, then create
-        // one for detecting cycles for this invocation.
-        if (cycleMap == null)
-        {
-            cycleMap = new HashMap();
-        }
-
-        // Put the current key in the cycle map.
-        cycleMap.put(currentKey, currentKey);
-
-        // Assume we have a value that is something like:
-        // "leading ${foo.${bar}} middle ${baz} trailing"
-
-        // Find the first ending '}' variable delimiter, which
-        // will correspond to the first deepest nested variable
-        // placeholder.
-        int stopDelim = val.indexOf(DELIM_STOP);
-
-        // Find the matching starting "${" variable delimiter
-        // by looping until we find a start delimiter that is
-        // greater than the stop delimiter we have found.
-        int startDelim = val.indexOf(DELIM_START);
-        while (stopDelim >= 0)
-        {
-            int idx = val.indexOf(DELIM_START, startDelim + DELIM_START.length());
-            if ((idx < 0) || (idx > stopDelim))
-            {
-                break;
-            }
-            else if (idx < stopDelim)
-            {
-                startDelim = idx;
-            }
-        }
-
-        // If we do not have a start or stop delimiter, then just
-        // return the existing value.
-        if ((startDelim < 0) && (stopDelim < 0))
-        {
-            return val;
-        }
-        // At this point, we found a stop delimiter without a start,
-        // so throw an exception.
-        else if (((startDelim < 0) || (startDelim > stopDelim))
-            && (stopDelim >= 0))
-        {
-            throw new IllegalArgumentException(
-                "stop delimiter with no start delimiter: "
-                + val);
-        }
-
-        // At this point, we have found a variable placeholder so
-        // we must perform a variable substitution on it.
-        // Using the start and stop delimiter indices, extract
-        // the first, deepest nested variable placeholder.
-        String variable =
-            val.substring(startDelim + DELIM_START.length(), stopDelim);
-
-        // Verify that this is not a recursive variable reference.
-        if (cycleMap.get(variable) != null)
-        {
-            throw new IllegalArgumentException(
-                "recursive variable reference: " + variable);
-        }
-
-        // Get the value of the deepest nested variable placeholder.
-        // Try to configuration properties first.
-        String substValue = (configProps != null)
-            ? configProps.getProperty(variable, null)
-            : null;
-        if (substValue == null)
-        {
-            // Ignore unknown property values.
-            substValue = System.getProperty(variable, "");
-        }
-
-        // Remove the found variable from the cycle map, since
-        // it may appear more than once in the value and we don't
-        // want such situations to appear as a recursive reference.
-        cycleMap.remove(variable);
-
-        // Append the leading characters, the substituted value of
-        // the variable, and the trailing characters to get the new
-        // value.
-        val = val.substring(0, startDelim)
-            + substValue
-            + val.substring(stopDelim + DELIM_STOP.length(), val.length());
-
-        // Now perform substitution again, since there could still
-        // be substitutions to make.
-        val = substVars(val, currentKey, cycleMap, configProps);
-
-        // Return the value.
-        return val;
-    }
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.apache.servicemix.main;
+
+import java.io.*;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.*;
+
+import org.apache.felix.framework.Felix;
+import org.apache.felix.framework.cache.BundleCache;
+import org.apache.felix.framework.util.StringMap;
+
+/**
+ * <p>
+ * This class is the default way to instantiate and execute the framework. It is not
+ * intended to be the only way to instantiate and execute the framework; rather, it is
+ * one example of how to do so. When embedding the framework in a host application,
+ * this class can serve as a simple guide of how to do so. It may even be
+ * worthwhile to reuse some of its property handling capabilities. This class
+ * is completely static and is only intended to start a single instance of
+ * the framework.
+ * </p>
+**/
+public class Main
+{
+    /**
+     * The system property name used to specify an URL to the system
+     * property file.
+    **/
+    public static final String SYSTEM_PROPERTIES_PROP = "felix.system.properties";
+    /**
+     * The default name used for the system properties file.
+    **/
+    public static final String SYSTEM_PROPERTIES_FILE_VALUE = "system.properties";
+    /**
+     * The system property name used to specify an URL to the configuration
+     * property file to be used for the created the framework instance.
+    **/
+    public static final String CONFIG_PROPERTIES_PROP = "felix.config.properties";
+    /**
+     * The default name used for the configuration properties file.
+    **/
+    public static final String CONFIG_PROPERTIES_FILE_VALUE = "config.properties";
+    /*
+     * The property for auto-discovering the bundles 
+     */
+    public static final String PROPERTY_AUTO_START = "felix.auto.start";
+
+    private static Felix m_felix = null;
+
+    /**
+     * <p>
+     * This method performs the main task of constructing an framework instance
+     * and starting its execution. The following functions are performed
+     * when invoked:
+     * </p>
+     * <ol>
+     *   <li><i><b>Read the system properties file.<b></i> This is a file
+     *       containing properties to be pushed into <tt>System.setProperty()</tt>
+     *       before starting the framework. This mechanism is mainly shorthand
+     *       for people starting the framework from the command line to avoid having
+     *       to specify a bunch of <tt>-D</tt> system property definitions.
+     *       The only properties defined in this file that will impact the framework's
+     *       behavior are the those concerning setting HTTP proxies, such as
+     *       <tt>http.proxyHost</tt>, <tt>http.proxyPort</tt>, and
+     *       <tt>http.proxyAuth</tt>.
+     *   </li>
+     *   <li><i><b>Perform system property variable substitution on system
+     *       properties.</b></i> Any system properties in the system property
+     *       file whose value adheres to <tt>${&lt;system-prop-name&gt;}</tt>
+     *       syntax will have their value substituted with the appropriate
+     *       system property value.
+     *   </li>
+     *   <li><i><b>Read the framework's configuration property file.</b></i> This is
+     *       a file containing properties used to configure the framework
+     *       instance and to pass configuration information into
+     *       bundles installed into the framework instance. The configuration
+     *       property file is called <tt>config.properties</tt> by default
+     *       and is located in the <tt>conf/</tt> directory of the Felix
+     *       installation directory, which is the parent directory of the
+     *       directory containing the <tt>felix.jar</tt> file. It is possible
+     *       to use a different location for the property file by specifying
+     *       the desired URL using the <tt>felix.config.properties</tt>
+     *       system property; this should be set using the <tt>-D</tt> syntax
+     *       when executing the JVM. Refer to the
+     *       <a href="Felix.html#Felix(java.util.Map, java.util.List)">
+     *       <tt>Felix</tt></a> constructor documentation for more
+     *       information on the framework configuration options.
+     *   </li>
+     *   <li><i><b>Perform system property variable substitution on configuration
+     *       properties.</b></i> Any configuration properties whose value adheres to
+     *       <tt>${&lt;system-prop-name&gt;}</tt> syntax will have their value
+     *       substituted with the appropriate system property value.
+     *   </li>
+     *   <li><i><b>Ensure the default bundle cache has sufficient information to
+     *       initialize.</b></i> The default implementation of the bundle cache
+     *       requires either a profile name or a profile directory in order to
+     *       start. The configuration properties are checked for at least one
+     *       of the <tt>felix.cache.profile</tt> or <tt>felix.cache.profiledir</tt>
+     *       properties. If neither is found, the user is asked to supply a profile
+     *       name that is added to the configuration property set. See the
+     *       <a href="cache/DefaultBundleCache.html"><tt>DefaultBundleCache</tt></a>
+     *       documentation for more details its configuration options.
+     *   </li>
+     *   <li><i><b>Creates and starts a framework instance.</b></i> A 
+     *       case insensitive
+     *       <a href="util/StringMap.html"><tt>StringMap</tt></a>
+     *       is created for the configuration property file and is passed
+     *       into the framework.
+     *   </li>
+     * </ol>
+     * <p>
+     * It should be noted that simply starting an instance of the framework is not enough
+     * to create an interactive session with it. It is necessary to install
+     * and start bundles that provide an interactive impl; this is generally
+     * done by specifying an "auto-start" property in the framework configuration
+     * property file. If no interactive impl bundles are installed or if
+     * the configuration property file cannot be found, the framework will appear to
+     * be hung or deadlocked. This is not the case, it is executing correctly,
+     * there is just no way to interact with it. Refer to the
+     * <a href="Felix.html#Felix(java.util.Map, java.util.List)">
+     * <tt>Felix</tt></a> constructor documentation for more information on
+     * framework configuration options.
+     * </p>
+     * @param argv An array of arguments, all of which are ignored.
+     * @throws Exception If an error occurs.
+    **/
+    public static void main(String[] argv) throws Exception
+    {
+        // Load system properties.
+        Main.loadSystemProperties();
+
+        // Read configuration properties.
+        Properties configProps = Main.loadConfigProperties();
+
+        // Copy framework properties from the system properties.
+        Main.copySystemProperties(configProps);
+
+        // See if the profile name property was specified.
+        String profileName = configProps.getProperty(BundleCache.CACHE_PROFILE_PROP);
+
+        // See if the profile directory property was specified.
+        String profileDirName = configProps.getProperty(BundleCache.CACHE_PROFILE_DIR_PROP);
+
+        // Print welcome banner.
+        System.out.println("\nWelcome to ServiceMix.");
+        System.out.println("=====================\n");
+
+        // If no profile or profile directory is specified in the
+        // properties, then ask for a profile name.
+        if ((profileName == null) && (profileDirName == null))
+        {
+            System.out.print("Enter profile name: ");
+            BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
+            try
+            {
+                profileName = in.readLine();
+            }
+            catch (IOException ex)
+            {
+                System.err.println("Could not read input.");
+                System.exit(-1);
+            }
+            System.out.println("");
+            if (profileName.length() != 0)
+            {
+                configProps.setProperty(BundleCache.CACHE_PROFILE_PROP, profileName);
+            }
+        }
+
+        // A profile directory or name must be specified.
+        if ((profileDirName == null) && (profileName.length() == 0))
+        {
+            System.err.println("You must specify a profile name or directory.");
+            System.exit(-1);
+        }
+
+        try
+        {
+            // Now create an instance of the framework.
+            m_felix = new Felix(new StringMap(configProps, false), null);
+            m_felix.start();
+        }
+        catch (Exception ex)
+        {
+            System.err.println("Could not create framework: " + ex);
+            ex.printStackTrace();
+            System.exit(-1);
+        }
+    }
+
+    /**
+     * <p>
+     * Loads the properties in the system property file associated with the
+     * framework installation into <tt>System.setProperty()</tt>. These properties
+     * are not directly used by the framework in anyway. By default, the system
+     * property file is located in the <tt>conf/</tt> directory of the Felix
+     * installation directory and is called "<tt>system.properties</tt>". The
+     * installation directory of Felix is assumed to be the parent directory of
+     * the <tt>felix.jar</tt> file as found on the system class path property.
+     * The precise file from which to load system properties can be set by
+     * initializing the "<tt>felix.system.properties</tt>" system property to an
+     * arbitrary URL.
+     * </p>
+    **/
+    public static void loadSystemProperties()
+    {
+        // The system properties file is either specified by a system
+        // property or it is in the same directory as the Felix JAR file.
+        // Try to load it from one of these places.
+
+        // See if the property URL was specified as a property.
+        URL propURL = null;
+        String custom = System.getProperty(SYSTEM_PROPERTIES_PROP);
+        if (custom != null)
+        {
+            try
+            {
+                propURL = new URL(custom);
+            }
+            catch (MalformedURLException ex)
+            {
+                System.err.print("Main: " + ex);
+                return;
+            }
+        }
+        else
+        {
+            // Determine where the configuration directory is by figuring
+            // out where felix.jar is located on the system class path.
+            File confDir = null;
+            String classpath = System.getProperty("java.class.path");
+            int index = classpath.toLowerCase().indexOf("servicemix.jar");
+            int start = classpath.lastIndexOf(File.pathSeparator, index) + 1;
+            if (index >= start)
+            {
+                // Get the path of the felix.jar file.
+                String jarLocation = classpath.substring(start, index);
+                // Calculate the conf directory based on the parent
+                // directory of the felix.jar directory.
+                confDir = new File(
+                    new File(new File(jarLocation).getAbsolutePath()).getParent(),
+                    "conf");
+            }
+            else
+            {
+                // Can't figure it out so use the current directory as default.
+                confDir = new File(System.getProperty("user.dir"));
+            }
+
+            try
+            {
+                propURL = new File(confDir, SYSTEM_PROPERTIES_FILE_VALUE).toURL();
+            }
+            catch (MalformedURLException ex)
+            {
+                System.err.print("Main: " + ex);
+                return;
+            }
+        }
+
+        // Read the properties file.
+        Properties props = new Properties();
+        InputStream is = null;
+        try
+        {
+            is = propURL.openConnection().getInputStream();
+            props.load(is);
+            is.close();
+        }
+        catch (FileNotFoundException ex)
+        {
+            // Ignore file not found.
+        }
+        catch (Exception ex)
+        {
+            System.err.println(
+                "Main: Error loading system properties from " + propURL);
+            System.err.println("Main: " + ex);
+            try
+            {
+                if (is != null) is.close();
+            }
+            catch (IOException ex2)
+            {
+                // Nothing we can do.
+            }
+            return;
+        }
+
+        // Perform variable substitution on specified properties.
+        for (Enumeration e = props.propertyNames(); e.hasMoreElements(); )
+        {
+            String name = (String) e.nextElement();
+            System.setProperty(name,
+                substVars(props.getProperty(name), name, null, null));
+        }
+    }
+
+    /**
+     * <p>
+     * Loads the configuration properties in the configuration property file
+     * associated with the framework installation; these properties
+     * are accessible to the framework and to bundles and are intended
+     * for configuration purposes. By default, the configuration property
+     * file is located in the <tt>conf/</tt> directory of the Felix
+     * installation directory and is called "<tt>config.properties</tt>".
+     * The installation directory of Felix is assumed to be the parent
+     * directory of the <tt>felix.jar</tt> file as found on the system class
+     * path property. The precise file from which to load configuration
+     * properties can be set by initializing the "<tt>felix.config.properties</tt>"
+     * system property to an arbitrary URL.
+     * </p>
+     * @return A <tt>Properties</tt> instance or <tt>null</tt> if there was an error.
+    **/
+    public static Properties loadConfigProperties()
+    {
+        // The config properties file is either specified by a system
+        // property or it is in the conf/ directory of the Felix
+        // installation directory.  Try to load it from one of these
+        // places.
+
+        File bundleDir = null;
+
+        // See if the property URL was specified as a property.
+        URL propURL = null;
+        String custom = System.getProperty(CONFIG_PROPERTIES_PROP);
+        if (custom != null)
+        {
+            try
+            {
+                propURL = new URL(custom);
+            }
+            catch (MalformedURLException ex)
+            {
+                System.err.print("Main: " + ex);
+                return null;
+            }
+        }
+        else
+        {
+            // Determine where the configuration directory is by figuring
+            // out where felix.jar is located on the system class path.
+            File confDir = null;
+            String classpath = System.getProperty("java.class.path");
+            int index = classpath.toLowerCase().indexOf("servicemix.jar");
+            int start = classpath.lastIndexOf(File.pathSeparator, index) + 1;
+            if (index >= start)
+            {
+                // Get the path of the felix.jar file.
+                String jarLocation = classpath.substring(start, index);
+                // Calculate the conf directory based on the parent
+                // directory of the servicemix.jar directory.
+                confDir = new File(
+                    new File(new File(jarLocation).getAbsolutePath()).getParent(),
+                    "etc");
+                bundleDir = new File(
+                    new File(new File(jarLocation).getAbsolutePath()).getParent(),
+                    "system");
+            }
+            else
+            {
+                // Can't figure it out so use the current directory as default.
+                confDir = new File(System.getProperty("user.dir"));
+                bundleDir = new File(System.getProperty("user.dir"));
+            }
+
+            try
+            {
+                propURL = new File(confDir, CONFIG_PROPERTIES_FILE_VALUE).toURL();
+            }
+            catch (MalformedURLException ex)
+            {
+                System.err.print("Main: " + ex);
+                return null;
+            }
+        }
+
+        // Read the properties file.
+        Properties props = new Properties();
+        InputStream is = null;
+        try
+        {
+            is = propURL.openConnection().getInputStream();
+            props.load(is);
+            is.close();
+        }
+        catch (FileNotFoundException ex)
+        {
+            // Ignore file not found.
+        }
+        catch (Exception ex)
+        {
+            System.err.println(
+                "Error loading config properties from " + propURL);
+            System.err.println("Main: " + ex);
+            try
+            {
+                if (is != null) is.close();
+            }
+            catch (IOException ex2)
+            {
+                // Nothing we can do.
+            }
+            return null;
+        }
+
+        // Perform variable substitution for system properties.
+        for (Enumeration e = props.propertyNames(); e.hasMoreElements(); )
+        {
+            String name = (String) e.nextElement();
+            props.setProperty(name,
+                substVars(props.getProperty(name), name, null, props));
+        }
+
+        // Mutate properties
+        Main.processConfigurationProperties(props, bundleDir);
+
+        return props;
+    }
+
+    public static void copySystemProperties(Properties configProps)
+    {
+        for (Enumeration e = System.getProperties().propertyNames();
+             e.hasMoreElements(); )
+        {
+            String key = (String)e.nextElement();
+            if (key.startsWith("felix.") ||
+                key.equals("org.osgi.framework.system.packages") ||
+                key.equals("org.osgi.framework.bootdelegation"))
+            {
+                configProps.setProperty(key, System.getProperty(key));
+            }
+        }
+    }
+
+    /**
+     * Process properties to customize default felix behavior
+     */
+    protected static void processConfigurationProperties(Properties props, File bundleDir) {
+        if (Boolean.parseBoolean(props.getProperty(PROPERTY_AUTO_START)) && bundleDir != null) {
+            File[] bundles = bundleDir.listFiles(new FileFilter() {
+                public boolean accept(File pathname) {
+                    return pathname.toString().endsWith(".jar");
+                }
+            });
+            StringBuffer sb = new StringBuffer();
+            for (int i = 0; i < bundles.length; i++) {
+                try {
+                    sb.append("\"").append(bundles[i].toURL().toString()).append("\" ");
+                } catch (MalformedURLException e) {
+                    System.err.print( "Ignoring " + bundles[i].toString() + " (" + e + ")" );
+                }
+            }
+            props.setProperty("felix.auto.start.1", sb.toString());
+            props.remove(PROPERTY_AUTO_START);
+        }
+    }
+
+    private static final String DELIM_START = "${";
+    private static final String DELIM_STOP  = "}";
+
+    /**
+     * <p>
+     * This method performs property variable substitution on the
+     * specified value. If the specified value contains the syntax
+     * <tt>${&lt;prop-name&gt;}</tt>, where <tt>&lt;prop-name&gt;</tt>
+     * refers to either a configuration property or a system property,
+     * then the corresponding property value is substituted for the variable
+     * placeholder. Multiple variable placeholders may exist in the
+     * specified value as well as nested variable placeholders, which
+     * are substituted from inner most to outer most. Configuration
+     * properties override system properties.
+     * </p>
+     * @param val The string on which to perform property substitution.
+     * @param currentKey The key of the property being evaluated used to
+     *        detect cycles.
+     * @param cycleMap Map of variable references used to detect nested cycles.
+     * @param configProps Set of configuration properties.
+     * @return The value of the specified string after system property substitution.
+     * @throws IllegalArgumentException If there was a syntax error in the
+     *         property placeholder syntax or a recursive variable reference.
+    **/
+    public static String substVars(String val, String currentKey,
+        Map cycleMap, Properties configProps)
+        throws IllegalArgumentException
+    {
+        // If there is currently no cycle map, then create
+        // one for detecting cycles for this invocation.
+        if (cycleMap == null)
+        {
+            cycleMap = new HashMap();
+        }
+
+        // Put the current key in the cycle map.
+        cycleMap.put(currentKey, currentKey);
+
+        // Assume we have a value that is something like:
+        // "leading ${foo.${bar}} middle ${baz} trailing"
+
+        // Find the first ending '}' variable delimiter, which
+        // will correspond to the first deepest nested variable
+        // placeholder.
+        int stopDelim = val.indexOf(DELIM_STOP);
+
+        // Find the matching starting "${" variable delimiter
+        // by looping until we find a start delimiter that is
+        // greater than the stop delimiter we have found.
+        int startDelim = val.indexOf(DELIM_START);
+        while (stopDelim >= 0)
+        {
+            int idx = val.indexOf(DELIM_START, startDelim + DELIM_START.length());
+            if ((idx < 0) || (idx > stopDelim))
+            {
+                break;
+            }
+            else if (idx < stopDelim)
+            {
+                startDelim = idx;
+            }
+        }
+
+        // If we do not have a start or stop delimiter, then just
+        // return the existing value.
+        if ((startDelim < 0) && (stopDelim < 0))
+        {
+            return val;
+        }
+        // At this point, we found a stop delimiter without a start,
+        // so throw an exception.
+        else if (((startDelim < 0) || (startDelim > stopDelim))
+            && (stopDelim >= 0))
+        {
+            throw new IllegalArgumentException(
+                "stop delimiter with no start delimiter: "
+                + val);
+        }
+
+        // At this point, we have found a variable placeholder so
+        // we must perform a variable substitution on it.
+        // Using the start and stop delimiter indices, extract
+        // the first, deepest nested variable placeholder.
+        String variable =
+            val.substring(startDelim + DELIM_START.length(), stopDelim);
+
+        // Verify that this is not a recursive variable reference.
+        if (cycleMap.get(variable) != null)
+        {
+            throw new IllegalArgumentException(
+                "recursive variable reference: " + variable);
+        }
+
+        // Get the value of the deepest nested variable placeholder.
+        // Try to configuration properties first.
+        String substValue = (configProps != null)
+            ? configProps.getProperty(variable, null)
+            : null;
+        if (substValue == null)
+        {
+            // Ignore unknown property values.
+            substValue = System.getProperty(variable, "");
+        }
+
+        // Remove the found variable from the cycle map, since
+        // it may appear more than once in the value and we don't
+        // want such situations to appear as a recursive reference.
+        cycleMap.remove(variable);
+
+        // Append the leading characters, the substituted value of
+        // the variable, and the trailing characters to get the new
+        // value.
+        val = val.substring(0, startDelim)
+            + substValue
+            + val.substring(stopDelim + DELIM_STOP.length(), val.length());
+
+        // Now perform substitution again, since there could still
+        // be substitutions to make.
+        val = substVars(val, currentKey, cycleMap, configProps);
+
+        // Return the value.
+        return val;
+    }
+}

Modified: servicemix/branches/servicemix-4.0/runtime/minimum/src/main/descriptors/unix-bin.xml
URL: http://svn.apache.org/viewvc/servicemix/branches/servicemix-4.0/runtime/minimum/src/main/descriptors/unix-bin.xml?rev=600677&r1=600676&r2=600677&view=diff
==============================================================================
--- servicemix/branches/servicemix-4.0/runtime/minimum/src/main/descriptors/unix-bin.xml (original)
+++ servicemix/branches/servicemix-4.0/runtime/minimum/src/main/descriptors/unix-bin.xml Mon Dec  3 12:40:49 2007
@@ -131,30 +131,16 @@
                 <include>org.apache.servicemix.bundles:org.apache.servicemix.bundles.aopalliance</include>
                 <include>org.apache.servicemix.bundles:org.apache.servicemix.bundles.cglib</include>
 
-            </includes>
-        </dependencySet>
-
-        <!-- GShell -->
-        <dependencySet>
-            <outputDirectory>/system</outputDirectory>
-            <unpack>false</unpack>
-            <scope>runtime</scope>
-            <includes>
+		        <!-- GShell -->
                 <include>org.apache.geronimo.specs:geronimo-stax-api_1.0_spec</include>
                 <include>org.apache.servicemix.bundles:org.apache.servicemix.bundles.xstream</include>
                 <include>org.apache.servicemix.gshell:org.apache.servicemix.gshell.core</include>
                 <include>org.apache.servicemix.gshell:org.apache.servicemix.gshell.osgi</include>
-            </includes>
-        </dependencySet>
 
-        <!-- OBR + GShell command -->
-        <dependencySet>
-            <outputDirectory>/system</outputDirectory>
-            <unpack>false</unpack>
-            <scope>runtime</scope>
-            <includes>
+		        <!-- OBR + GShell command -->
                 <include>org.apache.felix:org.apache.felix.bundlerepository</include>
                 <include>org.apache.servicemix.gshell:org.apache.servicemix.gshell.obr</include>
+
             </includes>
         </dependencySet>
 

Modified: servicemix/branches/servicemix-4.0/runtime/minimum/src/main/descriptors/windows-bin.xml
URL: http://svn.apache.org/viewvc/servicemix/branches/servicemix-4.0/runtime/minimum/src/main/descriptors/windows-bin.xml?rev=600677&r1=600676&r2=600677&view=diff
==============================================================================
--- servicemix/branches/servicemix-4.0/runtime/minimum/src/main/descriptors/windows-bin.xml (original)
+++ servicemix/branches/servicemix-4.0/runtime/minimum/src/main/descriptors/windows-bin.xml Mon Dec  3 12:40:49 2007
@@ -131,29 +131,16 @@
                 <include>org.apache.servicemix.bundles:org.apache.servicemix.bundles.aopalliance</include>
                 <include>org.apache.servicemix.bundles:org.apache.servicemix.bundles.cglib</include>
 
-            </includes>
-        </dependencySet>
-
-        <!-- GShell -->
-        <dependencySet>
-            <outputDirectory>/system</outputDirectory>
-            <unpack>false</unpack>
-            <scope>runtime</scope>
-            <includes>
+		        <!-- GShell -->
+                <include>org.apache.geronimo.specs:geronimo-stax-api_1.0_spec</include>
                 <include>org.apache.servicemix.bundles:org.apache.servicemix.bundles.xstream</include>
                 <include>org.apache.servicemix.gshell:org.apache.servicemix.gshell.core</include>
                 <include>org.apache.servicemix.gshell:org.apache.servicemix.gshell.osgi</include>
-            </includes>
-        </dependencySet>
 
-        <!-- OBR + GShell command -->
-        <dependencySet>
-            <outputDirectory>/system</outputDirectory>
-            <unpack>false</unpack>
-            <scope>runtime</scope>
-            <includes>
+		        <!-- OBR + GShell command -->
                 <include>org.apache.felix:org.apache.felix.bundlerepository</include>
                 <include>org.apache.servicemix.gshell:org.apache.servicemix.gshell.obr</include>
+
             </includes>
         </dependencySet>
 

Modified: servicemix/branches/servicemix-4.0/runtime/minimum/src/main/release/bin/servicemix.sh
URL: http://svn.apache.org/viewvc/servicemix/branches/servicemix-4.0/runtime/minimum/src/main/release/bin/servicemix.sh?rev=600677&r1=600676&r2=600677&view=diff
==============================================================================
--- servicemix/branches/servicemix-4.0/runtime/minimum/src/main/release/bin/servicemix.sh (original)
+++ servicemix/branches/servicemix-4.0/runtime/minimum/src/main/release/bin/servicemix.sh Mon Dec  3 12:40:49 2007
@@ -241,16 +241,11 @@
 
 run() {
     JAR=$SERVICEMIX_HOME/bin/servicemix.jar
-    CLASSPATH=$SERVICEMIX_HOME/bin/bootstrapper.jar:$SERVICEMIX_HOME/bin/daemon.jar:$SERVICEMIX_HOME/bin/logger.jar:$SERVICEMIX_HOME/bin/servicemix.jar
     if $cygwin; then
         SERVICEMIX_HOME=`cygpath --path --windows "$SERVICEMIX_HOME"`
-        CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
-        CLASSWORLDS_CONF=`cygpath --path --windows "$CLASSWORLDS_CONF"`
-        CYGHOME=`cygpath --windows "$HOME"`
-        JAR=`cygpath --windows "$JAR"`
     fi
     cd "$SERVICEMIX_HOME"
-    exec $JAVA $JAVA_OPTS -Dservicemix.home="$SERVICEMIX_HOME" -Dbundles.configuration.location="$SERVICEMIX_HOME/conf" -jar "$JAR" "$1" 
+    exec $JAVA $JAVA_OPTS -Dservicemix.home="$SERVICEMIX_HOME" -Dbundles.configuration.location="$SERVICEMIX_HOME/etc" -jar "$JAR" "$1" 
 }
 
 main() {

Copied: servicemix/branches/servicemix-4.0/runtime/minimum/src/main/release/etc/config.properties (from r600637, servicemix/branches/servicemix-4.0/runtime/minimum/src/main/release/conf/config.properties)
URL: http://svn.apache.org/viewvc/servicemix/branches/servicemix-4.0/runtime/minimum/src/main/release/etc/config.properties?p2=servicemix/branches/servicemix-4.0/runtime/minimum/src/main/release/etc/config.properties&p1=servicemix/branches/servicemix-4.0/runtime/minimum/src/main/release/conf/config.properties&r1=600637&r2=600677&rev=600677&view=diff
==============================================================================
--- servicemix/branches/servicemix-4.0/runtime/minimum/src/main/release/conf/config.properties (original)
+++ servicemix/branches/servicemix-4.0/runtime/minimum/src/main/release/etc/config.properties Mon Dec  3 12:40:49 2007
@@ -45,7 +45,7 @@
 #
 # FileMonitor properties
 #
-org.apache.servicemix.filemonitor.configDir        = ./conf
+org.apache.servicemix.filemonitor.configDir        = ./etc
 org.apache.servicemix.filemonitor.monitorDir       = ./deploy
 org.apache.servicemix.filemonitor.generatedJarDir  = ./data/generated-bundles
 org.apache.servicemix.filemonitor.scanInterval     = 500

Propchange: servicemix/branches/servicemix-4.0/runtime/minimum/src/main/release/etc/config.properties
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: servicemix/branches/servicemix-4.0/runtime/minimum/src/main/release/etc/org.apache.servicemix.shell.cfg
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: servicemix/branches/servicemix-4.0/runtime/minimum/src/main/release/etc/org.ops4j.pax.logging.cfg
------------------------------------------------------------------------------
    svn:eol-style = native