diff --git a/doc/apache-felix-framework-launching-and-embedding.html b/doc/apache-felix-framework-launching-and-embedding.html
new file mode 100644
index 0000000..ac14e03
--- /dev/null
+++ b/doc/apache-felix-framework-launching-and-embedding.html
@@ -0,0 +1,981 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head>
+
+
+  
+    <title>Apache Felix - Apache Felix Framework Launching and Embedding</title>
+    <link rel="stylesheet" href="apache-felix-framework-launching-and-embedding_files/site.css" type="text/css" media="all">
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+  </head><body>
+    <div class="title"><div class="logo"><a href="http://felix.apache.org/site/index.html"><img alt="Apache Felix" src="apache-felix-framework-launching-and-embedding_files/logo.png" border="0"></a></div><div class="header"><a href="http://www.apache.org/"><img alt="Apache" src="apache-felix-framework-launching-and-embedding-Dateien/apache.png" border="0"></a></div></div>
+    <div class="menu">
+<ul>
+	<li><a href="http://felix.apache.org/site/news.html" title="news">news</a></li>
+	<li><a href="http://felix.apache.org/site/license.html" title="license">license</a></li>
+	<li><span class="nobr"><a href="http://felix.apache.org/site/downloads.cgi" title="Visit page outside Confluence" rel="nofollow">downloads<sup><img class="rendericon" src="apache-felix-framework-launching-and-embedding_files/linkext7.gif" alt="" align="absmiddle" border="0" height="7" width="7"></sup></a></span></li>
+	<li><a href="http://felix.apache.org/site/documentation.html" title="documentation">documentation</a></li>
+	<li><a href="http://felix.apache.org/site/mailinglists.html" title="mailinglists">mailing lists</a></li>
+	<li><a href="http://felix.apache.org/site/contributing.html" title="Contributing">contributing</a></li>
+	<li><span class="nobr"><a href="http://www.apache.org/" title="Visit page outside Confluence" rel="nofollow">asf<sup><img class="rendericon" src="apache-felix-framework-launching-and-embedding_files/linkext7.gif" alt="" align="absmiddle" border="0" height="7" width="7"></sup></a></span></li>
+	<li><span class="nobr"><a href="http://www.apache.org/foundation/sponsorship.html" title="Visit page outside Confluence" rel="nofollow">sponsorship<sup><img class="rendericon" src="apache-felix-framework-launching-and-embedding_files/linkext7.gif" alt="" align="absmiddle" border="0" height="7" width="7"></sup></a></span></li>
+	<li><span class="nobr"><a href="http://www.apache.org/foundation/thanks.html" title="Visit page outside Confluence" rel="nofollow">sponsors<sup><img class="rendericon" src="apache-felix-framework-launching-and-embedding_files/linkext7.gif" alt="" align="absmiddle" border="0" height="7" width="7"></sup></a></span>
+<!-- ApacheCon Ad -->
+<iframe src="apache-felix-framework-launching-and-embedding_files/button.html" style="border-width: 0pt; float: left;" frameborder="0" height="135" scrolling="no" width="135"></iframe>
+<p style="height: 100px;">
+<!-- ApacheCon Ad -->
+</p></li></ul> </div>
+    <div class="main">
+<h1><a name="ApacheFelixFrameworkLaunchingandEmbedding-ApacheFelixFrameworkLaunchingandEmbedding"></a>Apache Felix Framework Launching and Embedding</h1>
+
+<p><em>[This document is based on Felix 1.4.0.]</em></p>
+
+<ul>
+	<li><a href="#ApacheFelixFrameworkLaunchingandEmbedding-introduction" title="introduction on Apache Felix Framework Launching and Embedding">Introduction</a></li>
+	<li><a href="#ApacheFelixFrameworkLaunchingandEmbedding-overview" title="overview on Apache Felix Framework Launching and Embedding">API Overview</a>
+	<ul>
+		<li><a href="#ApacheFelixFrameworkLaunchingandEmbedding-creatingandconfiguring" title="creating-and-configuring on Apache Felix Framework Launching and Embedding">Creating and Configuring the Framework Instance</a></li>
+		<li><a href="#ApacheFelixFrameworkLaunchingandEmbedding-startinginstance" title="starting-instance on Apache Felix Framework Launching and Embedding">Starting the Framework Instance</a></li>
+		<li><a href="#ApacheFelixFrameworkLaunchingandEmbedding-stoppinginstance" title="stopping-instance on Apache Felix Framework Launching and Embedding">Stopping the Framework Instance</a></li>
+	</ul>
+	</li>
+	<li><a href="#ApacheFelixFrameworkLaunchingandEmbedding-launching" title="launching on Apache Felix Framework Launching and Embedding">Launching Felix</a>
+	<ul>
+		<li><a href="#ApacheFelixFrameworkLaunchingandEmbedding-standardlauncher" title="standard-launcher on Apache Felix Framework Launching and Embedding">Standard Felix Launcher</a></li>
+		<li><a href="#ApacheFelixFrameworkLaunchingandEmbedding-customlauncher" title="custom-launcher on Apache Felix Framework Launching and Embedding">Custom Felix Launcher</a></li>
+	</ul>
+	</li>
+	<li><a href="#ApacheFelixFrameworkLaunchingandEmbedding-embedding" title="embedding on Apache Felix Framework Launching and Embedding">Embedding Felix</a>
+	<ul>
+		<li><a href="#ApacheFelixFrameworkLaunchingandEmbedding-hostinteraction" title="host-interaction on Apache Felix Framework Launching and Embedding">Host/Felix Interaction</a></li>
+		<li><a href="#ApacheFelixFrameworkLaunchingandEmbedding-hostservices" title="host-services on Apache Felix Framework Launching and Embedding">Providing Host Application Services</a></li>
+		<li><a href="#ApacheFelixFrameworkLaunchingandEmbedding-hostserviceusage" title="host-service-usage on Apache Felix Framework Launching and Embedding">Using Services Provided by Bundles</a>
+		<ul>
+			<li><a href="#ApacheFelixFrameworkLaunchingandEmbedding-servicereflection" title="service-reflection on Apache Felix Framework Launching and Embedding">Using Bundle Services via Reflection</a></li>
+			<li><a href="#ApacheFelixFrameworkLaunchingandEmbedding-serviceother" title="service-other on Apache Felix Framework Launching and Embedding">Other Approaches</a></li>
+		</ul>
+		</li>
+	</ul>
+	</li>
+	<li><a href="#ApacheFelixFrameworkLaunchingandEmbedding-caveat" title="caveat on Apache Felix Framework Launching and Embedding">Caveat</a></li>
+	<li><a href="#ApacheFelixFrameworkLaunchingandEmbedding-feedback" title="feedback on Apache Felix Framework Launching and Embedding">Feedback</a></li>
+</ul>
+
+
+<p><a name="ApacheFelixFrameworkLaunchingandEmbedding-introduction"></a></p>
+
+<h1><a name="ApacheFelixFrameworkLaunchingandEmbedding-Introduction"></a>Introduction</h1>
+
+<p>The Apache Felix framework is intended to be easily launchable and
+embeddable. For example, Felix avoids the use of system properties for
+configuration, since these are globals and can cause interference if
+multiple framework instances are created in the same VM. Felix also
+tries to multiplex singleton facilities, like the URL stream handler
+factory. The goal is to make it possible to use Felix in as many
+scenarios as possible; however, this is still just a goal. In other
+words, this is a work in progress and if any issues arise, it would be
+greatly appreciated if they are brought to the attention of the Felix
+community. The next section provides a Felix API overview, while the
+remainder of the document is divided into two sections, one focusing on
+how to launch Felix and one focusing on how to embed Felix into a host
+application.</p>
+
+<p><a name="ApacheFelixFrameworkLaunchingandEmbedding-overview"></a></p>
+
+<h1><a name="ApacheFelixFrameworkLaunchingandEmbedding-APIOverview"></a>API Overview</h1>
+
+<p>The Felix framework is implemented by the <tt>org.apache.felix.framework.Felix</tt> class or just <tt>Felix</tt>
+for short. As part of the ongoing OSGi specification process, there is
+a movement to standardize the API for launching and embedding OSGi
+framework implementations. The approach is to have the framework
+implement the <tt>org.osgi.framework.launch.Framework</tt> interface, which extends the <tt>org.osgi.framework.Bundle</tt> interface. These interfaces provide the necessary means to launch and manage framework instances. The <tt>Bundle</tt> interface is defined as:</p>
+
+<div class="code"><div class="codeContent">
+<pre class="code-java"><span class="code-keyword">public</span> <span class="code-keyword">interface</span> Bundle
+{
+    BundleContext getBundleContext();
+    <span class="code-object">long</span> getBundleId();
+    URL getEntry(<span class="code-object">String</span> name);
+    Enumeration getEntryPaths(<span class="code-object">String</span> path);
+    Enumeration findEntries(<span class="code-object">String</span> path, <span class="code-object">String</span> filePattern, <span class="code-object">boolean</span> recurse);
+    Dictionary getHeaders();
+    Dictionary getHeaders(<span class="code-object">String</span> locale);
+    <span class="code-object">long</span> getLastModified();
+    <span class="code-object">String</span> getLocation();
+    URL getResource(<span class="code-object">String</span> name);
+    Enumeration getResources(<span class="code-object">String</span> name) <span class="code-keyword">throws</span> IOException;
+    ServiceReference[] getRegisteredServices();
+    ServiceReference[] getServicesInUse();
+    <span class="code-object">int</span> getState();
+    <span class="code-object">String</span> getSymbolicName();
+    <span class="code-object">boolean</span> hasPermission(<span class="code-object">Object</span> obj);
+    <span class="code-object">Class</span> loadClass(<span class="code-object">String</span> name) <span class="code-keyword">throws</span> ClassNotFoundException;
+    void start() <span class="code-keyword">throws</span> BundleException;
+    void stop() <span class="code-keyword">throws</span> BundleException;
+    void uninstall() <span class="code-keyword">throws</span> BundleException;
+    void update() <span class="code-keyword">throws</span> BundleException;
+    void update(InputStream is) <span class="code-keyword">throws</span> BundleException;
+}</pre>
+</div></div>
+
+<p>The <tt>Framework</tt> interface is defined as:</p>
+
+<div class="code"><div class="codeContent">
+<pre class="code-java"><span class="code-keyword">public</span> <span class="code-keyword">interface</span> Framework <span class="code-keyword">extends</span> Bundle
+{
+    void init();
+    FrameworkEvent waitForStop();
+}</pre>
+</div></div>
+
+<p>An additional requirement for framework implementations not captured
+in the interface definitions is that they must implement a public
+constructor that accepts a <tt>Map</tt>, which is used to pass in configuration properties. When you instantiate the <tt>Felix</tt>
+class, the resulting object is the actual System Bundle that bundles
+inside the framework will see if they get bundle 0, which is the System
+Bundle as defined by the OSGi specification.</p>
+
+<table class="warningMacro" align="center" border="0" cellpadding="5" cellspacing="8" width="85%"><colgroup><col width="24"><col></colgroup><tbody><tr><td valign="top"><img src="apache-felix-framework-launching-and-embedding_files/forbidden.gif" alt="" align="absmiddle" border="0" height="16" width="16"></td><td><b class="strong">WARNING</b><br>
+<p>This API is undergoing changes and is not completely finalized, so future changes are possible.</p></td></tr></tbody></table>
+
+<p><a name="ApacheFelixFrameworkLaunchingandEmbedding-creatingandconfiguring"></a></p>
+
+<h2><a name="ApacheFelixFrameworkLaunchingandEmbedding-CreatingandConfiguringtheFrameworkInstance"></a>Creating and Configuring the Framework Instance</h2>
+
+<p>To create a framework instance, simply instantiate the <tt>Felix</tt> class. A newly created framework instance is in the <tt>Bundle.INSTALLED</tt> state. You configure the instance by passing the constructor a <tt>Map</tt> containing its configurations properties. The configuration map may contain the following OSGi standard properties:</p>
+
+<ul>
+	<li><tt>org.osgi.framework.system.packages</tt> - specifies a
+list of packages the system bundle should export from the environment;
+if this is not set, then the framework uses a reasonable default fault.</li>
+	<li><tt>org.osgi.framework.system.packages.extra</tt>
+- specifies a list of additional packages the system bundle should
+export from the environment that are appended to the packages specified
+in <tt>org.osgi.framework.system.packages</tt>; there is no default value for this property.</li>
+	<li><tt>org.osgi.framework.bootdelegation</tt>
+- specifies a list of packages that should be made implicitly available
+to all bundles from the environment (i.e., no need to import them);
+there is no default value for this property and its use should be
+avoided.</li>
+	<li><tt>org.osgi.framework.storage</tt> - specifies the
+path to a directory, which will be created if it does not exist, to use
+for bundle cache storage; the default value for this property is "<tt>felix-cache</tt>" in the current working directory.</li>
+	<li><tt>org.osgi.framework.storage.clean</tt>
+- specifies whether the bundle cache should be flushed; the default
+value for this property is "none", but it can be changed to
+"onFirstInit" to flush the bundle cache when the framework is
+initialized.</li>
+	<li><tt>org.osgi.framework.startlevel</tt> - specifies the start level the framework enters upon startup; the default value for this property is 1.</li>
+</ul>
+
+
+<p>Felix also has the following, non-standard configuration properties:</p>
+
+<ul>
+	<li><tt>felix.cache.rootdir</tt> - specifies which directory should be used to calculate absolute paths when relative paths are used for the <tt>org.osgi.framework.storage</tt> property; the default value for this property is the current working directory.</li>
+	<li><tt>felix.systembundle.activators</tt> - specifies a <tt>List</tt> of <tt>BundleActivator</tt>
+instances that are started/stopped when the System Bundle is
+started/stopped; the specified instances will receive the System
+Bundle's <tt>BundleContext</tt> when invoked.</li>
+	<li><tt>felix.log.logger</tt> - specifies an instance of <tt>org.apache.felix.framework.util.Logger</tt> that the framework uses as its default logger.</li>
+	<li><tt>felix.log.level</tt> - specifies an integer <tt>String</tt>
+whose value indicates the degree of logging reported by the framework;
+the default value is "1" and "0" turns off logging completely,
+otherwise log levels match those specified in the OSGi Log Service
+(i.e., 1 = error, 2 = warning, 3 = information, and 4 = debug).</li>
+	<li><tt>felix.startlevel.bundle</tt> - specifies the start level for newly installed bundles; the default value is 1.</li>
+	<li><tt>framework.service.urlhandlers</tt>
+- specifies whether or not to activate the URL Handlers service for the
+framework instance; the default value is "&lt;tt&gt;true&lt;/tt&gt;",
+which results in the
+&lt;tt&gt;URL.setURLStreamHandlerFactory()&lt;/tt&gt; and
+&lt;tt&gt;URLConnection.setContentHandlerFactory()&lt;/tt&gt; being
+called.</li>
+</ul>
+
+
+<p>The configuration map passed into the constructor is copied and the
+keys are treated as case insensitive. You are not able to change the
+framework's configuration after construction. If you need a different
+configuration, you must create a new framework instance.</p>
+
+<p><a name="ApacheFelixFrameworkLaunchingandEmbedding-startinginstance"></a></p>
+
+<h2><a name="ApacheFelixFrameworkLaunchingandEmbedding-StartingtheFrameworkInstance"></a>Starting the Framework Instance</h2>
+
+<p>The <tt>start()</tt> method is used to start the framework instance. If the <tt>init()</tt> method was not invoked prior to calling <tt>start()</tt>, then it is implicitly invoked from <tt>start()</tt>. The two methods result in two different framework state transitions:</p>
+
+<ul>
+	<li><tt>init()</tt> results in the framework instance in the <tt>Bundle.STARTING</tt> state.</li>
+	<li><tt>start()</tt> results in the framework instance in the <tt>Bundle.ACTIVE</tt> state.</li>
+</ul>
+
+
+<p>The <tt>init()} method is necessary since the framework does not have a {{BundleContext</tt> when it is first created, so a transition to the <tt>Bundle.STARTING</tt> state is required to acquire its context (via <tt>Bundle.getBundleContext()</tt>) for performing various tasks, such as installing bundles. Note that Felix also provides the <tt>felix.systembundle.activators</tt> property that serves a similar purpose. After the <tt>init()</tt> method completes, the follow actions have been performed:</p>
+
+<ul>
+	<li>Event handling is enabled.</li>
+	<li>The security manager is installed if it is enabled.</li>
+	<li>The framework is set to start level 0.</li>
+	<li>All bundles in the bundle caches are reified and their state is set to <tt>Bundle.INSTALLED</tt>.</li>
+	<li>The framework gets a valid <tt>BundleContext</tt>.</li>
+	<li>All framework-provided services are made available (e.g., PackageAdmin, StartLevel, etc.).</li>
+	<li>The framework enters the <tt>Bundle.STARTING</tt> state.</li>
+</ul>
+
+
+<p>A call to <tt>start()</tt> is necessary to start the framework instance, if the <tt>init()</tt> method is invoked manually. Invoking <tt>init()</tt> or <tt>start()</tt> on an already started framework as no effect.</p>
+
+<p><a name="ApacheFelixFrameworkLaunchingandEmbedding-stoppinginstance"></a></p>
+
+<h2><a name="ApacheFelixFrameworkLaunchingandEmbedding-StoppingtheFrameworkInstance"></a>Stopping the Framework Instance</h2>
+
+<p>To stop the framework instance, invoke the <tt>stop()</tt> method, which will asynchronously stop the framework. To know when the framework has finished its shutdown sequence, use the <tt>waitForStop()</tt> method to wait until it is complete. A stopped framework will be in the <tt>Bundle.RESOLVED</tt> state. It is possible to restart the framework, using the normal combination of <tt>init()</tt>/<tt>start()</tt> methods as previously described.</p>
+
+<p><a name="ApacheFelixFrameworkLaunchingandEmbedding-launching"></a></p>
+
+<h1><a name="ApacheFelixFrameworkLaunchingandEmbedding-LaunchingFelix"></a>Launching Felix</h1>
+
+<p>Launching Felix is fairly simple and involves only three steps:</p>
+
+<ol>
+	<li>Define some configuration properties.</li>
+	<li>Create an instance of <tt>org.apache.felix.framework.Felix</tt> with the configuration properties.</li>
+	<li>Invoke the <tt>org.apache.felix.framework.Felix.start()</tt> method.</li>
+</ol>
+
+
+<p>In reality, the first step is optional, since all properties will
+have reasonable defaults, but if you are creating a launcher you will
+generally want to more than that, such as automatically installing and
+starting bundles when you start the framework instance. The default
+Felix launcher defines reusable functionality to automatically install
+and/or start bundles upon framework startup; see the <a href="http://felix.apache.org/site/apache-felix-usage-documentation.html#ApacheFelixUsageDocumentation-configuringfelix" title="configuring-felix on Apache Felix Usage Documentation">usage document</a> for more information on configuring Felix and on the various configuration properties.</p>
+
+<p>The remainder of this section describes how the standard Felix
+launcher works as well as how to create a custom launcher for Felix.</p>
+
+<p><a name="ApacheFelixFrameworkLaunchingandEmbedding-standardlauncher"></a></p>
+
+<h2><a name="ApacheFelixFrameworkLaunchingandEmbedding-StandardFelixLauncher"></a>Standard Felix Launcher</h2>
+
+<p>The standard Felix launcher is very simple and is not intended to
+solve every possible requirement; it is intended to work for most
+standard situations. Most special launching requirements should be
+resolved by creating a custom launcher. This section describes how the
+standard launcher works. The following code represents the complete <tt>main()</tt> method of the standard launcher, each numbered comment will be described in more detail below:</p>
+
+<div class="code"><div class="codeContent">
+<pre class="code-java"><span class="code-keyword">public</span> <span class="code-keyword">static</span> void main(<span class="code-object">String</span>[] argv) <span class="code-keyword">throws</span> Exception
+{
+    <span class="code-comment">// (1) Check <span class="code-keyword">for</span> proper command line usage.
+</span>    <span class="code-keyword">if</span> (args.length &gt; 1)
+    {
+        <span class="code-object">System</span>.out.println(<span class="code-quote">"Usage: [&lt;bundle-cache-dir&gt;]"</span>);
+        <span class="code-object">System</span>.exit(0);
+    }
+
+    <span class="code-comment">// (2) Load system properties.
+</span>    Main.loadSystemProperties();
+
+    <span class="code-comment">// (3) Read configuration properties.
+</span>    Properties configProps = Main.loadConfigProperties();
+
+    <span class="code-comment">// (4) Copy framework properties from the system properties.
+</span>    Main.copySystemProperties(configProps);
+
+    <span class="code-comment">// (5) If specified, use command-line argument as path to bundle cache.
+</span>    <span class="code-keyword">if</span> (args.length &gt; 0)
+    {
+        configProps.setProperty(Constants.FRAMEWORK_STORAGE, args[0]);
+    }
+
+    <span class="code-comment">// (6) Create a list <span class="code-keyword">for</span> custom framework activators and
+</span>    <span class="code-comment">// add an instance of the auto-activator it <span class="code-keyword">for</span> processing
+</span>    <span class="code-comment">// auto-install and auto-start properties. Add <span class="code-keyword">this</span> list
+</span>    <span class="code-comment">// to the configuration properties.
+</span>    List list = <span class="code-keyword">new</span> ArrayList();
+    list.add(<span class="code-keyword">new</span> AutoActivator(configProps));
+    configProps.put(FelixConstants.SYSTEMBUNDLE_ACTIVATORS_PROP, list);
+
+    <span class="code-comment">// Print welcome banner.
+</span>    <span class="code-object">System</span>.out.println(<span class="code-quote">"\nWelcome to Felix."</span>);
+    <span class="code-object">System</span>.out.println(<span class="code-quote">"=================\n"</span>);
+
+    <span class="code-keyword">try</span>
+    {
+        <span class="code-comment">// (7) Create an instance and start the framework.
+</span>
+        m_felix = <span class="code-keyword">new</span> Felix(configProps);
+        m_felix.start();
+        <span class="code-comment">// (8) Wait <span class="code-keyword">for</span> framework to stop to exit the VM.
+</span>        m_felix.waitForStop();
+        <span class="code-object">System</span>.exit(0);
+    }
+    <span class="code-keyword">catch</span> (Exception ex)
+    {
+        <span class="code-object">System</span>.err.println(<span class="code-quote">"Could not create framework: "</span> + ex);
+        ex.printStackTrace();
+        <span class="code-object">System</span>.exit(-1);
+    }
+}</pre>
+</div></div>
+
+<p>The general steps of the standard launcher are quite straightforward:</p>
+
+<ol>
+	<li>The launcher only supports a single, optional command-line
+argument, which is the path to the bundle cache, so check for this and
+issue a usage message it there are more than one arguments.</li>
+	<li>Load any system properties specified in the <tt>system.properties</tt> file; this file is typically located in the <tt>conf/</tt> directory of the Felix installation directory, but it can be specified directly using the <tt>felix.system.properties</tt>
+system property. This file is not needed to launch Felix and is
+provided merely for convenience when system properties must be
+specified. The file is a standard Java properties file, but it also
+supports property substitution using <tt>${&lt;property-name</tt>} syntax. Property substitution can be nested; only system properties will be used for substitution.</li>
+	<li>Load any configuration properties specified in the <tt>config.properties</tt> file; this file is typically located in the <tt>conf/</tt> directory of the Felix installation directory, but it can be specified directly using the <tt>felix.config.properties</tt>
+system property. This file is used to configure the Felix instance
+created by the launcher. The file is a standard Java properties file,
+but it also supports property substitution using "<tt>${&lt;property-name</tt>}"
+syntax. Property substitution can be nested; configuration and system
+properties will be used for substitution with configuration properties
+having precedence.</li>
+	<li>For convenience, any configuration
+properties that are set as system properties will be copied into the
+set of configuration properties to provide an easy way to add to or
+override configuration properties specified in the <tt>config.properties</tt> file.</li>
+	<li>If there is a single command-line argument, then use that to set the value of <tt>org.osgi.framework.storage</tt>; relative paths are relative to the current directory unless the <tt>felix.cache.rootdir</tt> property is set.</li>
+	<li>Create a list to hold custom framework activators and add an instance of <tt>org.apache.felix.main.AutoActivator</tt>, which will process <tt>felix.auto.install</tt> and <tt>felix.auto.start</tt> configuration properties during framework startup to automatically install and/or start bundles; see the <a href="http://felix.apache.org/site/apache-felix-usage-documentation.html#ApacheFelixUsageDocumentation-configuringfelix" title="configuring-felix on Apache Felix Usage Documentation">usage document</a> for more information configuration properties.</li>
+	<li>Create the Felix instance passing in the configuration properties, then call <tt>start()</tt>.</li>
+	<li>Invoke <tt>waitForStop()</tt> to wait for the framework to stop to force the VM to exit; this is necessary because the framework never calls <tt>System.exit()</tt> and some libraries (e.g., Swing) create threads that will not allow the VM to exit.</li>
+</ol>
+
+
+<p>The framework is not active until the <tt>start()</tt> method is
+called. If no shell bundles are installed and started or if there is
+difficulty locating the shell bundles specified in the auto-start
+property, then it will appear as if the framework is hung, but it is
+actually running without any way to interact with it since the shell
+bundles provide the only means of interaction.</p>
+
+<p><a name="ApacheFelixFrameworkLaunchingandEmbedding-customlauncher"></a></p>
+
+<h2><a name="ApacheFelixFrameworkLaunchingandEmbedding-CustomFelixLauncher"></a>Custom Felix Launcher</h2>
+
+<p>This section creates a bare-bones launcher to demonstrate the
+minimum requirements for creating an interactive launcher for the Felix
+framework. This example uses the standard Felix shell bundles for
+interactivity, but any other bundles could be used instead. For
+example, the shell service and telnet bundles could be used to launch
+Felix and make it remotely accessible.</p>
+
+<p>This example launcher project has the following directory structure:</p>
+
+<div class="preformatted"><div class="preformattedContent">
+<pre>launcher/
+   lib/
+      org.apache.felix.main-1.4.0.jar
+   bundle/
+      org.apache.felix.shell-1.0.2.jar
+      org.apache.felix.shell.tui-1.0.2.jar
+   src/
+      example/
+         Main.java
+</pre>
+</div></div>
+
+<p>The <tt>lib/</tt> directory contains Felix' main JAR file, which
+also contains the OSGi core interfaces. The main JAR file is used so
+that we can reuse the default launcher's auto-install/auto-start
+configuration property handling; if these capabilities are not needed,
+then it would be possible to use the framework JAR file instead of the
+main JAR file. The <tt>bundle/</tt> directory contains the shell
+service and textual shell interface bundles that will be used for
+interacting with the framework instance. Note: If you do not launch
+Felix with interactive bundles, it will appear as if the framework
+instance is hung, but it is actually just sitting there waiting for
+someone to tell it to do something. The <tt>src/example/</tt> directory contains the following <tt>Main.java</tt> file, which is a very simplistic Felix launcher.</p>
+
+<div class="code"><div class="codeContent">
+<pre class="code-java"><span class="code-keyword">package</span> example;
+
+<span class="code-keyword">import</span> java.util.ArrayList;
+<span class="code-keyword">import</span> java.util.List;
+<span class="code-keyword">import</span> java.util.Map;
+<span class="code-keyword">import</span> java.util.HashMap;
+<span class="code-keyword">import</span> org.osgi.framework.Constants;
+<span class="code-keyword">import</span> org.apache.felix.framework.Felix;
+<span class="code-keyword">import</span> org.apache.felix.framework.util.FelixConstants;
+<span class="code-keyword">import</span> org.apache.felix.main.AutoActivator;
+
+<span class="code-keyword">public</span> class Main
+{
+    <span class="code-keyword">private</span> <span class="code-keyword">static</span> Felix m_felix = <span class="code-keyword">null</span>;
+
+    <span class="code-keyword">public</span> <span class="code-keyword">static</span> void main(<span class="code-object">String</span>[] argv) <span class="code-keyword">throws</span> Exception
+    {
+        <span class="code-comment">// Print welcome banner.
+</span>        <span class="code-object">System</span>.out.println(<span class="code-quote">"\nWelcome to Felix."</span>);
+        <span class="code-object">System</span>.out.println(<span class="code-quote">"=================\n"</span>);
+
+        Map configMap = <span class="code-keyword">new</span> HashMap();
+        configMap.put(AutoActivator.AUTO_START_PROP + <span class="code-quote">".1"</span>,
+            <span class="code-quote">"file:bundle/org.apache.felix.shell-1.0.2.jar "</span> +
+            <span class="code-quote">"file:bundle/org.apache.felix.shell.tui-1.0.2.jar"</span>);
+        List list = <span class="code-keyword">new</span> ArrayList();
+        list.add(<span class="code-keyword">new</span> AutoActivator(configMap));
+        configMap.put(FelixConstants.SYSTEMBUNDLE_ACTIVATORS_PROP, list);
+
+        <span class="code-keyword">try</span>
+        {
+            m_felix = <span class="code-keyword">new</span> Felix(configMap);
+            m_felix.start();
+            m_felix.waitForStop();
+            <span class="code-object">System</span>.exit(0);
+        }
+        <span class="code-keyword">catch</span> (Exception ex)
+        {
+            <span class="code-object">System</span>.err.println(<span class="code-quote">"Could not create framework: "</span> + ex);
+            ex.printStackTrace();
+            <span class="code-object">System</span>.exit(-1);
+        }
+    }
+}</pre>
+</div></div>
+
+<p>This launcher has all information hard coded in it, unlike the
+default Felix launcher, which loads configuration properties from files
+and performs variable substitution. This simple launcher provides a
+good starting point if the features of the default launcher are not
+necessary. Since very few configuration properties are specified, the
+default values are used. In the case of the framework bundle cache, it
+will use "<tt>felix-cache</tt>" in the current directory.</p>
+
+<p>By breaking down the above source code into small chunks, it is quite easy to see what is going on.</p>
+
+<div class="code"><div class="codeContent">
+<pre class="code-java">Map configMap = <span class="code-keyword">new</span> HashMap();</pre>
+</div></div>
+
+<p>This simply creates a map to hold configuration properties.</p>
+
+<div class="code"><div class="codeContent">
+<pre class="code-java">configMap.put(AutoActivator.AUTO_START_PROP + <span class="code-quote">".1"</span>,
+            <span class="code-quote">"file:bundle/org.apache.felix.shell-1.0.2.jar "</span> +
+            <span class="code-quote">"file:bundle/org.apache.felix.shell.tui-1.0.2.jar"</span>);</pre>
+</div></div>
+
+<p>This sets the <tt>AutoActivator.AUTO_START_PROP</tt> configuration property (string value "<tt>felix.auto.start</tt>"),
+which is a space-delimited list of bundle URLs that the framework will
+automatically install and start when the framework starts. However,
+this property key cannot be used as is; it must be appended with a "."
+and then a number, where the number represents the start level for the
+bundle when it is installed. In this particular example, ".1" is
+appended to the property name, thus the two bundles will be installed
+into start level one. This example uses relative <tt>file:</tt> URLs, which will load the bundles from the <tt>bundle/</tt>
+directory assuming that the launcher is started from the root directory
+of the launcher project. It is also possible to specify absolute URLs
+or remote URLs.</p>
+
+<div class="code"><div class="codeContent">
+<pre class="code-java">List list = <span class="code-keyword">new</span> ArrayList();
+        list.add(<span class="code-keyword">new</span> AutoActivator(configMap));
+        configMap.put(FelixConstants.SYSTEMBUNDLE_ACTIVATORS_PROP, list);</pre>
+</div></div>
+
+<p>This above creates a list to hold custom framework activators and adds an instance of <tt>org.apache.felix.main.AutoActivator</tt>
+to it, which will process the auto-install and auto-start configuration
+properties during framework startup. The list of activators is then
+added to the configuration map.</p>
+
+<div class="code"><div class="codeContent">
+<pre class="code-java">m_felix = <span class="code-keyword">new</span> Felix(configMap);
+            m_felix.start();</pre>
+</div></div>
+
+<p>These steps create the framework instance and start it. The configuration property map is passed into the <tt>Felix</tt> constructor.</p>
+
+<div class="code"><div class="codeContent">
+<pre class="code-java">m_felix.waitForStop();
+            <span class="code-object">System</span>.exit(0);</pre>
+</div></div>
+
+<p>These final steps cause the launching application thread to wait for
+the framework to stop and when it does the launching thread calls <tt>System.exit()</tt> to make sure the VM actually exits.</p>
+
+<p>The following command compiles the launcher when run from the root directory of the launcher project:</p>
+
+<div class="preformatted"><div class="preformattedContent">
+<pre>javac -d . -classpath lib/org.apache.felix.main-1.4.0.jar src/example/Main.java
+</pre>
+</div></div>
+
+<p>After executing this command, an <tt>example/</tt> directory is
+created in the current directory, which contains the generated class
+file. The following command executes the simple launcher when run from
+the root directory of the launcher project:</p>
+
+<div class="preformatted"><div class="preformattedContent">
+<pre>java -cp .:lib/org.apache.felix.main-1.4.0.jar example.Main
+</pre>
+</div></div>
+
+<p>After executing this command, a "<tt>felix-cache/</tt>" directory is created that contains the installed bundles, which were installed from the <tt>bundle/</tt> directory.</p>
+
+<p><a name="ApacheFelixFrameworkLaunchingandEmbedding-embedding"></a></p>
+
+<h1><a name="ApacheFelixFrameworkLaunchingandEmbedding-EmbeddingFelix"></a>Embedding Felix</h1>
+
+<p>Embedding Felix into a host application is a simple way to provide a
+sophisticated extensibility mechanism (i.e., a plugin system) to the
+host application. Embedding Felix is very similar to launching Felix as
+described above, the main difference is that the host application
+typically wants to interact with the framework instance and/or
+installed bundles/services from the outside. This is fairly easy to
+achieve with Felix, but there are some subtle issues to understand.
+This section presents the mechanisms for embedding Felix into a host
+application and the issues in doing so.</p>
+
+<p><a name="ApacheFelixFrameworkLaunchingandEmbedding-hostinteraction"></a></p>
+
+<h2><a name="ApacheFelixFrameworkLaunchingandEmbedding-Host/FelixInteraction"></a>Host/Felix Interaction</h2>
+
+<p>In the section on <a href="#ApacheFelixFrameworkLaunchingandEmbedding-launching" title="launching on Apache Felix Framework Launching and Embedding">launching</a> Felix above, the <tt>Felix</tt> accepts a configuration property called <tt>felix.systembundle.activators</tt>,
+which is a list of bundle activator instances. These bundle activator
+instances provide a convenient way for host applications to interact
+with the Felix framework. The ability offered by these activators can
+also be accomplished by invoking <tt>init()</tt> on the framework instance and the using <tt>getBundleContext()</tt> to get the System Bundle's context, but it can be more convenient to use an activator instance.</p>
+
+<p>Each activator instance passed into the constructor effectively becomes part of the System Bundle. This means that the <tt>start()</tt>/<tt>stop()</tt> methods of each activator instance in the list gets invoked when the System Bundle's activator <tt>start()</tt>/<tt>stop()</tt> methods gets invoked, respectively. Each activator instance will be given the System Bundle's <tt>BundleContext</tt> object so that they can interact with the framework. Consider following snippet of a bundle activator:</p>
+
+<div class="code"><div class="codeContent">
+<pre class="code-java"><span class="code-keyword">public</span> class HostActivator <span class="code-keyword">implements</span> BundleActivator
+{
+    <span class="code-keyword">private</span> BundleContext m_context = <span class="code-keyword">null</span>;
+
+    <span class="code-keyword">public</span> void start(BundleContext context)
+    {
+        m_context = context;
+    }
+
+    <span class="code-keyword">public</span> void stop(BundleContext context)
+    {
+        m_context = <span class="code-keyword">null</span>;
+    }
+
+    <span class="code-keyword">public</span> Bundle[] getBundles()
+    {
+        <span class="code-keyword">if</span> (m_context != <span class="code-keyword">null</span>)
+        {
+            <span class="code-keyword">return</span> m_context.getBundles();
+        }
+        <span class="code-keyword">return</span> <span class="code-keyword">null</span>;
+    }
+}</pre>
+</div></div>
+
+<p>Given the above bundle activator, it is now possible to embed Felix
+into a host application and interact with it as the following snippet
+illustrates:</p>
+
+<div class="code"><div class="codeContent">
+<pre class="code-java"><span class="code-keyword">public</span> class HostApplication
+{
+    <span class="code-keyword">private</span> HostActivator m_activator = <span class="code-keyword">null</span>;
+    <span class="code-keyword">private</span> Felix m_felix = <span class="code-keyword">null</span>;
+
+    <span class="code-keyword">public</span> HostApplication()
+    {
+        <span class="code-comment">// Create a configuration property map.
+</span>        Map configMap = <span class="code-keyword">new</span> HashMap();
+        <span class="code-comment">// Create host activator;
+</span>        m_activator = <span class="code-keyword">new</span> HostActivator();
+        List list = <span class="code-keyword">new</span> ArrayList();
+        list.add(m_activator);
+        configMap.put(FelixConstants.SYSTEMBUNDLE_ACTIVATORS_PROP, list);
+
+        <span class="code-keyword">try</span>
+        {
+            <span class="code-comment">// Now create an instance of the framework with
+</span>            <span class="code-comment">// our configuration properties.
+</span>            m_felix = <span class="code-keyword">new</span> Felix(configMap);
+            <span class="code-comment">// Now start Felix instance.
+</span>            m_felix.start();
+        }
+        <span class="code-keyword">catch</span> (Exception ex)
+        {
+            <span class="code-object">System</span>.err.println(<span class="code-quote">"Could not create framework: "</span> + ex);
+            ex.printStackTrace();
+        }
+    }
+
+    <span class="code-keyword">public</span> Bundle[] getInstalledBundles()
+    {
+        <span class="code-comment">// Use the system bundle activator to gain external
+</span>        <span class="code-comment">// access to the set of installed bundles.
+</span>        <span class="code-keyword">return</span> m_activator.getBundles();
+    }
+
+    <span class="code-keyword">public</span> void shutdownApplication()
+    {
+        <span class="code-comment">// Shut down the felix framework when stopping the
+</span>        <span class="code-comment">// host application.
+</span>        m_felix.stop();
+        m_felix.waitForStop();
+    }
+}</pre>
+</div></div>
+
+<p>Notice how the <tt>HostApplication.getInstalledBundles()</tt> method
+uses its activator instance to get access to the System Bundle's
+context in order to interact with the embedded Felix framework
+instance. This approach provides the foundation for all interaction
+between the host application and the embedded framework instance.</p>
+
+<p><a name="ApacheFelixFrameworkLaunchingandEmbedding-hostservices"></a></p>
+
+<h2><a name="ApacheFelixFrameworkLaunchingandEmbedding-ProvidingHostApplicationServices"></a>Providing Host Application Services</h2>
+
+<p>Providing services from the host application to bundles inside the
+embedded Felix framework instance follows the basic approach laid out
+in <a href="#ApacheFelixFrameworkLaunchingandEmbedding-hostinteraction" title="host-interaction on Apache Felix Framework Launching and Embedding">above</a>.
+The main complication for providing a host application service to
+bundles is the fact that both the host application and the bundles must
+be using the same class definitions for the service interface classes.
+Since the host application cannot import classes from a bundle, this
+means that the service interface classes <b>must</b> be accessible on
+the class path, typically as part of the host application itself. The
+host application then must export the service interface package via the
+system bundle so that bundles installed into the embedded framework
+instance can import it. This is achieved using the <tt>org.osgi.framework.system.packages.extra</tt> configuration property previously presented.</p>
+
+<p>Consider the follow simple property lookup service:</p>
+
+<div class="code"><div class="codeContent">
+<pre class="code-java"><span class="code-keyword">package</span> host.service.lookup;
+
+<span class="code-keyword">public</span> class Lookup
+{
+    <span class="code-keyword">public</span> <span class="code-object">Object</span> lookup(<span class="code-object">String</span> name);
+}</pre>
+</div></div>
+
+<p>This package is simply part of the host application, which is potentially packaged into a JAR file and started with the "<tt>java -jar</tt>"
+command. Now consider the following host application bundle activator,
+which will be used to register/unregister the property lookup service
+when the embedded framework instance starts/stops:</p>
+
+<div class="code"><div class="codeContent">
+<pre class="code-java"><span class="code-keyword">package</span> host.core;
+
+<span class="code-keyword">import</span> java.util.Map;
+<span class="code-keyword">import</span> org.osgi.framework.BundleActivator;
+<span class="code-keyword">import</span> org.osgi.framework.BundleContext;
+<span class="code-keyword">import</span> org.osgi.framework.ServiceRegistration;
+<span class="code-keyword">import</span> host.service.lookup;
+
+<span class="code-keyword">public</span> class HostActivator <span class="code-keyword">implements</span> BundleActivator
+{
+    <span class="code-keyword">private</span> Map m_lookupMap = <span class="code-keyword">null</span>;
+    <span class="code-keyword">private</span> BundleContext m_context = <span class="code-keyword">null</span>;
+    <span class="code-keyword">private</span> ServiceRegistration m_registration = <span class="code-keyword">null</span>;
+
+    <span class="code-keyword">public</span> HostActivator(Map lookupMap)
+    {
+        <span class="code-comment">// Save a reference to the service's backing store.
+</span>        m_lookupMap = lookupMap;
+    }
+
+    <span class="code-keyword">public</span> void start(BundleContext context)
+    {
+        <span class="code-comment">// Save a reference to the bundle context.
+</span>        m_context = context;
+        <span class="code-comment">// Create a property lookup service implementation.
+</span>        Lookup lookup = <span class="code-keyword">new</span> Lookup() {
+            <span class="code-keyword">public</span> <span class="code-object">Object</span> lookup(<span class="code-object">String</span> name)
+            {
+                <span class="code-keyword">return</span> m_lookupMap.get(name);
+            }
+        };
+        <span class="code-comment">// Register the property lookup service and save
+</span>        <span class="code-comment">// the service registration.
+</span>        m_registration = m_context.registerService(
+            Lookup.class.getName(), lookup, <span class="code-keyword">null</span>);
+    }
+
+    <span class="code-keyword">public</span> void stop(BundleContext context)
+    {
+        <span class="code-comment">// Unregister the property lookup service.
+</span>        m_registration.unregister();
+        m_context = <span class="code-keyword">null</span>;
+    }
+}</pre>
+</div></div>
+
+<p>Given the above host application bundle activator, the following
+code snippet shows how the host application could create an embedded
+version of the Felix framework and provide the property lookup service
+to installed bundles:</p>
+
+<div class="code"><div class="codeContent">
+<pre class="code-java"><span class="code-keyword">package</span> host.core;
+
+<span class="code-keyword">import</span> java.util.List;
+<span class="code-keyword">import</span> java.util.ArrayList;
+<span class="code-keyword">import</span> java.util.Map;
+<span class="code-keyword">import</span> java.util.HashMap;
+<span class="code-keyword">import</span> host.service.lookup.Lookup;
+<span class="code-keyword">import</span> org.apache.felix.framework.Felix;
+<span class="code-keyword">import</span> org.apache.felix.framework.util.FelixConstants;
+<span class="code-keyword">import</span> org.osgi.framework.Constants;
+
+<span class="code-keyword">public</span> class HostApplication
+{
+    <span class="code-keyword">private</span> HostActivator m_activator = <span class="code-keyword">null</span>;
+    <span class="code-keyword">private</span> Felix m_felix = <span class="code-keyword">null</span>;
+    <span class="code-keyword">private</span> Map m_lookupMap = <span class="code-keyword">new</span> HashMap();
+
+    <span class="code-keyword">public</span> HostApplication()
+    {
+        <span class="code-comment">// Initialize the map <span class="code-keyword">for</span> the property lookup service.
+</span>        m_lookupMap.put(<span class="code-quote">"name1"</span>, <span class="code-quote">"value1"</span>);
+
+        m_lookupMap.put(<span class="code-quote">"name2"</span>, <span class="code-quote">"value2"</span>);
+        m_lookupMap.put(<span class="code-quote">"name3"</span>, <span class="code-quote">"value3"</span>);
+        m_lookupMap.put(<span class="code-quote">"name4"</span>, <span class="code-quote">"value4"</span>);
+
+        <span class="code-comment">// Create a configuration property map.
+</span>        Map configMap = <span class="code-keyword">new</span> HashMap();
+        <span class="code-comment">// Export the host provided service <span class="code-keyword">interface</span> <span class="code-keyword">package</span>.
+</span>        configMap.put(Constants.FRAMEWORK_SYSTEMPACKAGES_EXTRA,
+            <span class="code-quote">"host.service.lookup; version=1.0.0"</span>);
+        <span class="code-comment">// Create host activator;
+</span>        m_activator = <span class="code-keyword">new</span> HostActivator(m_lookupMap);
+        List list = <span class="code-keyword">new</span> ArrayList();
+        list.add(m_activator);
+        configMap.put(FelixConstants.SYSTEMBUNDLE_ACTIVATORS_PROP, list);
+
+        <span class="code-keyword">try</span>
+        {
+            <span class="code-comment">// Now create an instance of the framework with
+</span>            <span class="code-comment">// our configuration properties.
+</span>            m_felix = <span class="code-keyword">new</span> Felix(configMap);
+            <span class="code-comment">// Now start Felix instance.
+</span>            m_felix.start();
+        }
+        <span class="code-keyword">catch</span> (Exception ex)
+        {
+            <span class="code-object">System</span>.err.println(<span class="code-quote">"Could not create framework: "</span> + ex);
+            ex.printStackTrace();
+        }
+    }
+
+    <span class="code-keyword">public</span> void shutdownApplication()
+    {
+        <span class="code-comment">// Shut down the felix framework when stopping the
+</span>        <span class="code-comment">// host application.
+</span>        m_felix.stop();
+        m_felix.waitForStop();
+    }
+}</pre>
+</div></div>
+
+<p>Rather than having the host application bundle activator register
+the service, it is also possible for the the host application to simply
+get the bundle context from the bundle activator and register the
+service directly, but the presented approach is perhaps a little
+cleaner since it allows the host application to register/unregister the
+service when the system bundle starts/stops.</p>
+
+<p><a name="ApacheFelixFrameworkLaunchingandEmbedding-hostserviceusage"></a></p>
+
+<h2><a name="ApacheFelixFrameworkLaunchingandEmbedding-UsingServicesProvidedbyBundles"></a>Using Services Provided by Bundles</h2>
+
+<p>Using services provided by bundles follows the same general approach
+of using a host application bundle activator. The main complication for
+the host application using a service from a bundle is the fact that
+both the host application and the bundle must be using the same class
+definitions for the service interface classes. Since the host
+application cannot import classes from a bundle, this means that the
+service interface classes <b>must</b> be accessible on the class path,
+typically as part of the host application itself. The host application
+then must export the service interface package via the system bundle so
+that bundles installed into the embedded framework instance can import
+it. This is achieved using the <tt>org.osgi.framework.system.packages.extra</tt> configuration property previously presented.</p>
+
+<p>Consider the following simple command service interface for which
+bundles provide implementations, such as might be used to create an
+extensible interactive shell:</p>
+
+<div class="code"><div class="codeContent">
+<pre class="code-java"><span class="code-keyword">package</span> host.service.command;
+
+<span class="code-keyword">public</span> class Command
+{
+    <span class="code-keyword">public</span> <span class="code-object">String</span> getName();
+    <span class="code-keyword">public</span> <span class="code-object">String</span> getDescription();
+    <span class="code-keyword">public</span> <span class="code-object">boolean</span> execute(<span class="code-object">String</span> commandline);
+}</pre>
+</div></div>
+
+<p>This package is simply part of the host application, which is potentially packaged into a JAR file and started with the "<tt>java -jar</tt>"
+command. Now consider the previously introduced host application bundle
+activator below, which simply provides access to the system bundle
+context:</p>
+
+<div class="code"><div class="codeContent">
+<pre class="code-java"><span class="code-keyword">package</span> host.core;
+
+<span class="code-keyword">import</span> org.osgi.framework.BundleActivator;
+<span class="code-keyword">import</span> org.osgi.framework.BundleContext;
+
+<span class="code-keyword">public</span> class HostActivator <span class="code-keyword">implements</span> BundleActivator
+{
+    <span class="code-keyword">private</span> BundleContext m_context = <span class="code-keyword">null</span>;
+
+    <span class="code-keyword">public</span> void start(BundleContext context)
+    {
+        m_context = context;
+    }
+
+    <span class="code-keyword">public</span> void stop(BundleContext context)
+    {
+        m_context = <span class="code-keyword">null</span>;
+    }
+
+    <span class="code-keyword">public</span> BundleContext getContext()
+    {
+        <span class="code-keyword">return</span> m_context;
+    }
+}</pre>
+</div></div>
+
+<p>With this bundle activator, the host application can use command
+services provided by bundles installed inside its embedded Felix
+framework instance. The following code snippet illustrates one possible
+approach:</p>
+
+<div class="code"><div class="codeContent">
+<pre class="code-java"><span class="code-keyword">package</span> host.core;
+
+<span class="code-keyword">import</span> java.util.List;
+<span class="code-keyword">import</span> java.util.ArrayList;
+<span class="code-keyword">import</span> java.util.Map;
+<span class="code-keyword">import</span> host.service.command.Command;
+<span class="code-keyword">import</span> org.apache.felix.framework.Felix;
+<span class="code-keyword">import</span> org.apache.felix.framework.util.FelixConstants;
+<span class="code-keyword">import</span> org.apache.felix.framework.cache.BundleCache;
+<span class="code-keyword">import</span> org.osgi.framework.Constants;
+<span class="code-keyword">import</span> org.osgi.util.tracker.ServiceTracker;
+
+<span class="code-keyword">public</span> class HostApplication
+{
+    <span class="code-keyword">private</span> HostActivator m_activator = <span class="code-keyword">null</span>;
+    <span class="code-keyword">private</span> Felix m_felix = <span class="code-keyword">null</span>;
+    <span class="code-keyword">private</span> ServiceTracker m_tracker = <span class="code-keyword">null</span>;
+
+    <span class="code-keyword">public</span> HostApplication()
+    {
+        <span class="code-comment">// Create a configuration property map.
+</span>        Map configMap = <span class="code-keyword">new</span> HashMap();
+        <span class="code-comment">// Export the host provided service <span class="code-keyword">interface</span> <span class="code-keyword">package</span>.
+</span>        configMap.put(Constants.FRAMEWORK_SYSTEMPACKAGES_EXTRA,
+            <span class="code-quote">"host.service.command; version=1.0.0"</span>);
+        <span class="code-comment">// Create host activator;
+</span>        m_activator = <span class="code-keyword">new</span> HostActivator();
+        List list = <span class="code-keyword">new</span> ArrayList();
+        list.add(m_activator);
+        configMap.put(FelixConstants.SYSTEMBUNDLE_ACTIVATORS_PROP, list);
+
+        <span class="code-keyword">try</span>
+        {
+            <span class="code-comment">// Now create an instance of the framework with
+</span>            <span class="code-comment">// our configuration properties.
+</span>            m_felix = <span class="code-keyword">new</span> Felix(configMap);
+            <span class="code-comment">// Now start Felix instance.
+</span>            m_felix.start();
+        }
+        <span class="code-keyword">catch</span> (Exception ex)
+        {
+            <span class="code-object">System</span>.err.println(<span class="code-quote">"Could not create framework: "</span> + ex);
+            ex.printStackTrace();
+        }
+
+        m_tracker = <span class="code-keyword">new</span> ServiceTracker(
+            m_activator.getContext(), Command.class.getName(), <span class="code-keyword">null</span>);
+        m_tracker.open();
+    }
+
+    <span class="code-keyword">public</span> <span class="code-object">boolean</span> execute(<span class="code-object">String</span> name, <span class="code-object">String</span> commandline)
+    {
+        <span class="code-comment">// See <span class="code-keyword">if</span> any of the currently tracked command services
+</span>        <span class="code-comment">// match the specified command name, <span class="code-keyword">if</span> so then execute it.
+</span>        <span class="code-object">Object</span>[] services = m_tracker.getServices();
+        <span class="code-keyword">for</span> (<span class="code-object">int</span> i = 0; (services != <span class="code-keyword">null</span>) &amp;&amp; (i &lt; services.length); i++)
+        {
+            <span class="code-keyword">try</span>
+            {
+                <span class="code-keyword">if</span> (((Command) services[i]).getName().equals(name))
+                {
+                    <span class="code-keyword">return</span> ((Command) services[i]).execute(commandline);
+                }
+            }
+            <span class="code-keyword">catch</span> (Exception ex)
+            {
+                <span class="code-comment">// Since the services returned by the tracker could become
+</span>                <span class="code-comment">// invalid at any moment, we will <span class="code-keyword">catch</span> all exceptions, log
+</span>                <span class="code-comment">// a message, and then ignore faulty services.
+</span>                <span class="code-object">System</span>.err.println(ex);
+            }
+        }
+        <span class="code-keyword">return</span> <span class="code-keyword">false</span>;
+    }
+
+    <span class="code-keyword">public</span> void shutdownApplication()
+    {
+    {
+        <span class="code-comment">// Shut down the felix framework when stopping the
+</span>        <span class="code-comment">// host application.
+</span>        m_felix.stop();
+        m_felix.waitForStop();
+    }
+}</pre>
+</div></div>
+
+<p>The above example is overly simplistic with respect to concurrency
+issues and error conditions, but it demonstrates the overall approach
+for using bundle-provided services from the host application.</p>
+
+<p><a name="ApacheFelixFrameworkLaunchingandEmbedding-servicereflection"></a></p>
+
+<h3><a name="ApacheFelixFrameworkLaunchingandEmbedding-UsingBundleServicesviaReflection"></a>Using Bundle Services via Reflection</h3>
+
+<p>It possible for the host application to use services provided by
+bundles without having access to the service interface classes and thus
+not needing to put the service interface classes on the class path. To
+do this, the host application uses the same general approach to acquire
+the system bundle context object, which it can use to look up service
+objects. Using either an LDAP filter or the service interface class
+name, the host application can retrieve the service object and then use
+standard Java reflection to invoke methods on the service object.</p>
+
+<p><a name="ApacheFelixFrameworkLaunchingandEmbedding-serviceother"></a></p>
+
+<h3><a name="ApacheFelixFrameworkLaunchingandEmbedding-OtherApproaches"></a>Other Approaches</h3>
+
+<p>The <span class="nobr"><a href="http://code.google.com/p/transloader/" title="Visit page outside Confluence" rel="nofollow">Transloader<sup><img class="rendericon" src="apache-felix-framework-launching-and-embedding_files/linkext7.gif" alt="" align="absmiddle" border="0" height="7" width="7"></sup></a></span> project is another attempt at dealing with issues of classes loaded from different class loaders and may be of interest.</p>
+
+<p><a name="ApacheFelixFrameworkLaunchingandEmbedding-caveat"></a></p>
+
+<h1><a name="ApacheFelixFrameworkLaunchingandEmbedding-Caveat"></a>Caveat</h1>
+
+<p>The code in this document has not been thoroughly tested nor even
+compiled and may be out of date with respect to the current Felix
+source code. If you find errors please report them so the that they can
+be corrected.</p>
+
+<p><a name="ApacheFelixFrameworkLaunchingandEmbedding-feedback"></a></p>
+
+<h2><a name="ApacheFelixFrameworkLaunchingandEmbedding-Feedback"></a>Feedback</h2>
+
+<p>Subscribe to the Felix users mailing list by sending a message to <span class="nobr"><a href="mailto:users-subscribe@felix.apache.org" title="Send mail to users-subscribe@felix.apache.org" rel="nofollow">users-subscribe@felix.apache.org<sup><img class="rendericon" src="apache-felix-framework-launching-and-embedding_files/mail_small.gif" alt="" align="absmiddle" border="0" height="12" width="13"></sup></a></span>; after subscribing, email questions or feedback to <span class="nobr"><a href="mailto:users@felix.apache.org" title="Send mail to users@felix.apache.org" rel="nofollow">users@felix.apache.org<sup><img class="rendericon" src="apache-felix-framework-launching-and-embedding-Dateien/mail_small.gif" alt="" align="absmiddle" border="0" height="12" width="13"></sup></a></span>.</p>
+    </div>
+  </body></html>
diff --git a/doc/launching-and-embedding-apache-felix_files/apache.png b/doc/apache-felix-framework-launching-and-embedding_files/apache.png
similarity index 100%
rename from doc/launching-and-embedding-apache-felix_files/apache.png
rename to doc/apache-felix-framework-launching-and-embedding_files/apache.png
Binary files differ
diff --git a/doc/apache-felix-framework-launching-and-embedding_files/button.html b/doc/apache-felix-framework-launching-and-embedding_files/button.html
new file mode 100644
index 0000000..6ff0533
--- /dev/null
+++ b/doc/apache-felix-framework-launching-and-embedding_files/button.html
@@ -0,0 +1,5 @@
+<html><head>
+<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1"><!-- ads start -->
+</head><body><a href="http://www.us.apachecon.com/" target="_blank"><img src="button_data/2008-usa-125x125.png" title="ApacheCon US 2008" border="0" height="125" width="125"></a>
+<!-- ads end -->
+</body></html>
\ No newline at end of file
diff --git a/doc/apache-felix-framework-launching-and-embedding_files/button_data/2008-usa-125x125.png b/doc/apache-felix-framework-launching-and-embedding_files/button_data/2008-usa-125x125.png
new file mode 100644
index 0000000..37cca05
--- /dev/null
+++ b/doc/apache-felix-framework-launching-and-embedding_files/button_data/2008-usa-125x125.png
Binary files differ
diff --git a/doc/apache-felix-framework-launching-and-embedding_files/forbidden.gif b/doc/apache-felix-framework-launching-and-embedding_files/forbidden.gif
new file mode 100644
index 0000000..c6acdec
--- /dev/null
+++ b/doc/apache-felix-framework-launching-and-embedding_files/forbidden.gif
Binary files differ
diff --git a/doc/launching-and-embedding-apache-felix_files/linkext7.gif b/doc/apache-felix-framework-launching-and-embedding_files/linkext7.gif
similarity index 100%
rename from doc/launching-and-embedding-apache-felix_files/linkext7.gif
rename to doc/apache-felix-framework-launching-and-embedding_files/linkext7.gif
Binary files differ
diff --git a/doc/launching-and-embedding-apache-felix_files/logo.png b/doc/apache-felix-framework-launching-and-embedding_files/logo.png
similarity index 100%
rename from doc/launching-and-embedding-apache-felix_files/logo.png
rename to doc/apache-felix-framework-launching-and-embedding_files/logo.png
Binary files differ
diff --git a/doc/launching-and-embedding-apache-felix_files/mail_small.gif b/doc/apache-felix-framework-launching-and-embedding_files/mail_small.gif
similarity index 100%
rename from doc/launching-and-embedding-apache-felix_files/mail_small.gif
rename to doc/apache-felix-framework-launching-and-embedding_files/mail_small.gif
Binary files differ
diff --git a/doc/launching-and-embedding-apache-felix_files/site.css b/doc/apache-felix-framework-launching-and-embedding_files/site.css
similarity index 100%
rename from doc/launching-and-embedding-apache-felix_files/site.css
rename to doc/apache-felix-framework-launching-and-embedding_files/site.css
diff --git a/doc/apache-felix-usage-documentation.html b/doc/apache-felix-usage-documentation.html
index 1e09bb0..46c915b 100644
--- a/doc/apache-felix-usage-documentation.html
+++ b/doc/apache-felix-usage-documentation.html
@@ -1,30 +1,448 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html><head><title>Apache Felix - Apache Felix Usage Documentation</title>
+<html><head>
 
 
   
-    
+    <title>Apache Felix - Apache Felix Usage Documentation</title>
     <link rel="stylesheet" href="apache-felix-usage-documentation_files/site.css" type="text/css" media="all">
-    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"></head><body>
-    <div class="title"><div class="logo"><a href="http://felix.apache.org/site/index.html"><img alt="Apache Felix" src="apache-felix-usage-documentation_files/logo.png" border="0"></a></div><div class="header"><a href="http://www.apache.org/"><img alt="Apache" src="apache-felix-usage-documentation_files/apache.png" border="0"></a></div></div>
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+  </head><body>
+    <div class="title"><div class="logo"><a href="http://felix.apache.org/site/index.html"><img alt="Apache Felix" src="apache-felix-usage-documentation_files/logo.png" border="0"></a></div><div class="header"><a href="http://www.apache.org/"><img alt="Apache" src="apache-felix-usage-documentation-Dateien/apache.png" border="0"></a></div></div>
     <div class="menu">
-<ul>
-	<li><a href="http://felix.apache.org/site/index.html" title="Index">home</a></li>
+
+    
+    
+    
+
+    
+    
+    
+    
+
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+            
+            
+
+            
+            
+            
+            
+
+            
+            
+            
+            
+
+            &gt;
 	<li><a href="http://felix.apache.org/site/news.html" title="news">news</a></li>
-	<li><a href="http://felix.apache.org/site/status.html" title="status">status</a></li>
 	<li><a href="http://felix.apache.org/site/license.html" title="license">license</a></li>
 	<li><span class="nobr"><a href="http://felix.apache.org/site/downloads.cgi" title="Visit page outside Confluence" rel="nofollow">downloads<sup><img class="rendericon" src="apache-felix-usage-documentation_files/linkext7.gif" alt="" align="absmiddle" border="0" height="7" width="7"></sup></a></span></li>
 	<li><a href="http://felix.apache.org/site/documentation.html" title="documentation">documentation</a></li>
 	<li><a href="http://felix.apache.org/site/mailinglists.html" title="mailinglists">mailing lists</a></li>
-	<li><span class="nobr"><a href="http://cwiki.apache.org/confluence/x/O-" title="Visit page outside Confluence" rel="nofollow">wiki<sup><img class="rendericon" src="apache-felix-usage-documentation_files/linkext7.gif" alt="" align="absmiddle" border="0" height="7" width="7"></sup></a></span></li>
-	<li><a href="http://felix.apache.org/site/committers.html" title="committers">committers</a></li>
-	<li><a href="http://felix.apache.org/site/faq.html" title="faq">faq</a></li>
-	<li><a href="http://felix.apache.org/site/roadmap.html" title="roadmap">roadmap</a></li>
-	<li><a href="http://felix.apache.org/site/sourcecode.html" title="sourcecode">source code</a></li>
-	<li><a href="http://felix.apache.org/site/codingstandards.html" title="codingstandards">coding standards</a></li>
-	<li><a href="http://felix.apache.org/site/issuetracking.html" title="issuetracking">issue tracking</a></li>
-	<li><a href="http://felix.apache.org/site/dependencies.html" title="dependencies">dependencies</a></li>
-</ul> </div>
+	<li><a href="http://felix.apache.org/site/contributing.html" title="Contributing">contributing</a></li>
+	<li><span class="nobr"><a href="http://www.apache.org/" title="Visit page outside Confluence" rel="nofollow">asf<sup><img class="rendericon" src="apache-felix-usage-documentation_files/linkext7.gif" alt="" align="absmiddle" border="0" height="7" width="7"></sup></a></span></li>
+	<li><span class="nobr"><a href="http://www.apache.org/foundation/sponsorship.html" title="Visit page outside Confluence" rel="nofollow">sponsorship<sup><img class="rendericon" src="apache-felix-usage-documentation_files/linkext7.gif" alt="" align="absmiddle" border="0" height="7" width="7"></sup></a></span></li>
+	<li><span class="nobr"><a href="http://www.apache.org/foundation/thanks.html" title="Visit page outside Confluence" rel="nofollow">sponsors<sup><img class="rendericon" src="apache-felix-usage-documentation_files/linkext7.gif" alt="" align="absmiddle" border="0" height="7" width="7"></sup></a></span>
+<!-- ApacheCon Ad -->
+<iframe src="apache-felix-usage-documentation_files/button.html" style="border-width: 0pt; float: left;" frameborder="0" height="135" scrolling="no" width="135"></iframe>
+<p style="height: 100px;">
+<!-- ApacheCon Ad -->
+&lt;
+
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+    </p></li></div>
     <div class="main">
 <h1><a name="ApacheFelixUsageDocumentation-ApacheFelixUsageDocumentation"></a>Apache Felix Usage Documentation</h1>
 
@@ -38,6 +456,7 @@
 	</li>
 	<li><a href="#ApacheFelixUsageDocumentation-configuringfelix" title="configuring-felix on Apache Felix Usage Documentation">Configuring Felix</a>
 	<ul>
+		<li><a href="#ApacheFelixUsageDocumentation-migrating" title="migrating on Apache Felix Usage Documentation">Migrating from Earlier Versions</a></li>
 		<li><a href="#ApacheFelixUsageDocumentation-propertysubstitution" title="property-substitution on Apache Felix Usage Documentation">System Property Substitution</a></li>
 		<li><a href="#ApacheFelixUsageDocumentation-defaultshell" title="default-shell on Apache Felix Usage Documentation">Changing the Command Shell User Interface</a></li>
 	</ul>
@@ -50,28 +469,44 @@
 <p><a name="ApacheFelixUsageDocumentation-startingfelix"></a></p>
 
 <h2><a name="ApacheFelixUsageDocumentation-StartingFelix"></a>Starting Felix</h2>
+
 <p>Start Felix from the installation directory by typing:</p>
+
 <div class="preformatted"><div class="preformattedContent">
 <pre>java -jar bin/felix.jar
 </pre>
 </div></div>
-<p>After executing the above command, you will be prompted to enter a
-profile name; a profile is a simple way to organize sets of installed
-bundles and any arbitrary name will suffice. Entering the same profile
-name for subsequent executions of Felix will restore the installed
-bundles associated with that profile. By default, Felix creates a
-directory, called <tt>.felix</tt>, in your home directory and inside
-of this directory Felix creates a separate sub-directory for each
-profile; this behavior is configurable, see the <a href="http://felix.apache.org/site/apache-felix-bundle-cache.html" title="Apache Felix Bundle Cache">Apache Felix Bundle Cache</a>
-document for more details. After you have specified a profile name, the
-text-based shell interface is started. It is possible to <a href="#ApacheFelixUsageDocumentation-defaultshell" title="default-shell on Apache Felix Usage Documentation">change your default shell user interface</a>.</p>
+
+<p>After Felix starts, the text-based shell interface is started. It is possible to <a href="#ApacheFelixUsageDocumentation-defaultshell" title="default-shell on Apache Felix Usage Documentation">change your default shell user interface</a>. Felix stores all installed bundles into a bundle cache directory. By default, Felix creates a cache directory, called <tt>felix-cache</tt>, in your current working directory; this behavior is configurable, see the <a href="http://felix.apache.org/site/apache-felix-bundle-cache.html" title="Apache Felix Bundle Cache">Apache Felix Bundle Cache</a> document for more details.</p>
+
+<p>If you want to start Felix using a different bundle cache directory, you can start Felix like this:</p>
+
+<div class="preformatted"><div class="preformattedContent">
+<pre>java -jar bin/felix.jar &lt;cache-path&gt;
+</pre>
+</div></div>
+
+<p>Where <tt>&lt;cache-path&gt;</tt> is the path you want to use as the
+bundle cache. If you specify a relative cache path, then it will be
+treated as relative to the current working directory.</p>
+
+<table class="infoMacro" align="center" border="0" cellpadding="5" cellspacing="8" width="85%"><colgroup><col width="24"><col></colgroup><tbody><tr><td valign="top"><img src="apache-felix-usage-documentation_files/information.gif" alt="" align="absmiddle" border="0" height="16" width="16"></td><td><b class="strong">Useful Information</b><br>
+<p>Previous versions of Felix prompted for a profile name when executed. The profile name was used to create a directory inside <tt>.felix/</tt>
+in the users home directory. This approach allowed user's to have
+different sets of bundles for different purposes, e.g., testing,
+production, etc. If this behavior is still desired, it is very easy to
+mimic. Modify <tt>conf/config.properties</tt> to include "<tt>felix.cache.rootdir=${user.home}/.felix</tt>". Now, if you start Felix with something like "<tt>java -jar bin/felix.jar foo</tt>", it will use "<tt>${user.home}/.felix/foo/</tt>"
+as the bundle cache directory, where "${user.home}" is automatically
+substituted with the appropriate system property by the launcher.</p></td></tr></tbody></table>
 
 <p><a name="ApacheFelixUsageDocumentation-felixshell"></a></p>
 
 <h2><a name="ApacheFelixUsageDocumentation-FelixShell"></a>Felix Shell</h2>
+
 <p>The main way to interact with Felix is via its shell service. Felix'
 shell service is implemented as an OSGi service that, be default, uses
 a simple text-based user interface. After starting Felix, type <tt>help</tt> into the shell to see the list of the available commands; these are the default commands:</p>
+
 <div class="preformatted"><div class="preformattedContent">
 <pre>bundlelevel &lt;level&gt; &lt;id&gt; ... | &lt;id&gt; - set or get bundle start level.
 cd [&lt;base-URL&gt;] - change or display base URL.
@@ -92,16 +527,19 @@
 version - display version of framework.
 </pre>
 </div></div>
+
 <p>For a detailed description of how to install bundles into Felix refer to the next <a href="#ApacheFelixUsageDocumentation-installingbundles" title="installing-bundles on Apache Felix Usage Documentation">sub-section</a>; the remainder of this section briefly describes shell behavior.</p>
 
 <p>Despite the fact that the Felix shell tries to mimic a typical Unix-like shell, it is actually quite limited. The notion of <tt>cd</tt>,
 for example, is only used to specify a default base URL in order to
 save typing. To illustrate, assume that you want to install several
 bundles from a directory on your disk, you could type:</p>
+
 <div class="preformatted"><div class="preformattedContent">
 <pre>cd file:/c:/projects/felix/bundle/
 </pre>
 </div></div>
+
 <p>After issuing this <tt>cd</tt> command, you no longer need to type
 the complete URL for bundles located in the above directory, only the
 name of the bundle JAR file is necessary. It is not possible to perform
@@ -109,14 +547,16 @@
 base URL, since this operation is not possible with URLs. To view all
 currently installed bundles, use the <tt>ps</tt> command.</p>
 
-<p>To exit the Felix shell, simply type <tt>shutdown</tt>; any bundles
-that are loaded will automatically be reloaded the next time you start
-the associated profile. Additionally, any bundles that are active, will
-be reactivated the next time you start the associated profile.</p>
+<p>To exit the Felix shell, simply type <tt>stop 0</tt> to stop the
+System Bundle; any installed bundles will automatically be reloaded the
+next time you start the associated profile. Additionally, any active
+bundles will be reactivated the next time you restart the framework
+with the same bundle cache.</p>
 
 <p><a name="ApacheFelixUsageDocumentation-installingbundles"></a></p>
 
 <h3><a name="ApacheFelixUsageDocumentation-InstallingBundles"></a>Installing Bundles</h3>
+
 <p>A bundle is the OSGi term for a component for the OSGi framework. A
 bundle is simply a JAR file containing a manifest and some combination
 of Java classes, embedded JAR files, native code, and resources. A
@@ -130,20 +570,23 @@
 bundle repository service, and a simple example bundle. In addition to
 these bundles, the bundle repository services provides access to many
 other bundles for easy installation. The bundle repository service
-provides a shell command, named <tt>obr</tt>, to access available bundles; refer to the <a href="http://felix.apache.org/site/apache-felix-osgi-bundle-repository-obr.html" title="Apache Felix OSGi Bundle Repository (OBR)">Apache Felix OSGi Bundle Repository (OBR)</a> for more information.</p>
+provides a shell command, named <tt>obr</tt>, to access available bundles; refer to the <a href="http://felix.apache.org/site/apache-felix-osgi-bundle-repository.html" title="Apache Felix OSGi Bundle Repository">Apache Felix OSGi Bundle Repository</a> for more information.</p>
 
 <p>Before installing any bundles, it is important to understand how
 bundles are manually deployed into the framework. Bundles are deployed
 in two stages; first they are installed, then they are started. To
 install a bundle use the <tt>install</tt> shell command followed by a bundle URL. For example, to install the <tt>simple.jar</tt> bundle included with Felix you type (assuming you have started Felix from its installation directory):</p>
+
 <div class="preformatted"><div class="preformattedContent">
 <pre>install file:bundle/simple.jar
 </pre>
 </div></div>
+
 <p>Once a bundle is installed, it can then be started by using the <tt>start</tt> command and the bundle identifier of the desired bundle. The <tt>ps</tt>
 shell command is used to list all installed bundles and to obtain the
-bundle's identifier. The following Oscar shell session capture
+bundle's identifier. The following Felix shell session capture
 illustrates how to start the <tt>simple.jar</tt> bundle:</p>
+
 <div class="preformatted"><div class="preformattedContent">
 <pre>-&gt; install [file:bundle/simple]
 -&gt; ps
@@ -166,7 +609,8 @@
 -&gt;
 </pre>
 </div></div>
-<p>The <tt>stop</tt> command is used to stop a bundle and the <tt>uninstall</tt> command is used to remove a bundle from the Felix profile. As an alternative to using the <tt>install</tt> and <tt>start</tt> commands explicitly, it is also possible to install and start a bundle in one step by using the <tt>start</tt> command with a bundle URL.</p>
+
+<p>The <tt>stop</tt> command is used to stop a bundle and the <tt>uninstall</tt> command is used to remove a bundle from the bundle cache. As an alternative to using the <tt>install</tt> and <tt>start</tt> commands explicitly, it is also possible to install and start a bundle in one step by using the <tt>start</tt> command with a bundle URL.</p>
 
 <p>Bundles can be updated using the <tt>update</tt> command. The update
 command allows you to specify an URL from which to retrieve the updated
@@ -184,10 +628,12 @@
 <p><a name="ApacheFelixUsageDocumentation-installingbundlesproxies"></a></p>
 
 <h3><a name="ApacheFelixUsageDocumentation-WebProxyIssueswhenInstallingBundles"></a>Web Proxy Issues when Installing Bundles</h3>
+
 <p>If you use a proxy for Web access, then you may run into difficulty
 using the Felix shell to install bundles from a remote URL. To remedy
 this situation, certain system properties must be set to make Felix
 work with your proxy. These properties are:</p>
+
 <ul>
 	<li><tt>http.proxyHost</tt> - the name of the proxy host.</li>
 	<li><tt>http.proxyPort</tt> - the port of the proxy host.</li>
@@ -203,109 +649,172 @@
 <p><a name="ApacheFelixUsageDocumentation-configuringfelix"></a></p>
 
 <h2><a name="ApacheFelixUsageDocumentation-ConfiguringFelix"></a>Configuring Felix</h2>
-<p>Felix uses properties to configure certain aspects of its behavior. When you execute Felix using <tt>bin/felix.jar</tt> there are two property files that are consulted, they are <tt>conf/system.properties</tt> and <tt>conf/config.properties</tt> in the Felix installation directory. Both files use standard Java property file syntax.</p>
+
+<p>Felix uses properties to configure certain aspects of its behavior. The Felix launcher (i.e., <tt>java -jar bin/felix.jar</tt>) reads configuration properties from two different locations in the installation directory: <tt>conf/system.properties</tt> and <tt>conf/config.properties</tt>. Both files use standard Java property file syntax.</p>
 
 <p>The <tt>conf/system.properties</tt> file provides a convenient
 mechanism for defining Java system properties, but it is largely
-ignored by Felix, since Felix does not use system properties for
-configuration purposes. Any properties placed in the <tt>conf/system.properties</tt> file are available at run time via <tt>System.getProperty()</tt> and <tt>BundleContext.getProperty()</tt>. It is also possible to specify a different location for the system properties file by using the <tt>felix.system.properties</tt> system property when executing Felix. For example:</p>
+ignored by Felix, since Felix does not typically use system properties
+for configuration purposes. Any properties placed in the <tt>conf/system.properties</tt> file are available at run time via <tt>System.getProperty()</tt> and <tt>BundleContext.getProperty()</tt>. It is also possible to specify a different location for the system properties file by using the <tt>felix.system.properties</tt> system property when executing Felix. For example:</p>
+
 <div class="preformatted"><div class="preformattedContent">
 <pre>java -Dfelix.system.properties=file:/home/rickhall/system.properties -jar bin/felix.jar
 </pre>
 </div></div>
-<p>When executing Felix, nearly configuration occurs using properties in the <tt>conf/config.properties</tt> file. It is possible to change the location of the configuration properties file by specifying a new location value using the <tt>felix.config.properties</tt>
+
+<p>Nearly all Felix configuration occurs using properties in the <tt>conf/config.properties</tt> file. It is possible to change the location of the configuration properties file by specifying a new location value using the <tt>felix.config.properties</tt>
 system property. It is necessary to use a system property here since
 Felix needs this value to start execution. As an example, the following
 command could be used to specify a custom location for the
 configuration properties file:</p>
+
 <div class="preformatted"><div class="preformattedContent">
 <pre>java -Dfelix.config.properties=file:/home/rickhall/config.properties -jar bin/felix.jar
 </pre>
 </div></div>
+
 <p>In this example the configuration properties will be read from the
 specified URL. All remaining configuration properties should be defined
 in the <tt>config.properties</tt> file itself. All configuration properties are accessible at run time via <tt>BundleContext.getProperty()</tt>.</p>
 
-<p>Felix does provide one other way to specify configuration
-properties, but to do so you must manually instantiate an instance of
-Felix, rather than executing Felix' JAR file. When you create your own
-instance of Felix, it is possible to pass in precise configuration
-properties to the <tt>Felix.start()</tt> method. If this approach is used, then no property files are consulted.</p>
+<p>Some configuration properties are handled by Felix' launcher, while
+others are handled by the Felix framework itself. Regardless, both
+launcher and framework configuration properties are placed in the <tt>conf/config.properties</tt> files.</p>
 
-<p>The following properties describes the purpose of each Felix configuration property:</p>
+<p>The following are launcher configuration properties:</p>
+
 <ul>
-	<li><tt>felix.log.level</tt> - An integer value indicating the
-degree of logging reported by the framework; a higher value results in
-more logging. If zero ('0') is specified, then logging is turned off
-completely. The log levels match those specified in the OSGi Log
-Service (i.e., 1 = error, 2 = warning, 3 = information, and 4 = debug).
-The default value is 1.</li>
 	<li><tt>felix.auto.install.&lt;n&gt;</tt> - Space-delimited list of bundle URLs to automatically install when Felix is started, where <tt>&lt;n&gt;</tt> is the start level into which the bundle will be installed (e.g., <tt>felix.auto.install.2</tt>).</li>
-	<li><tt>felix.auto.start</tt> - Space-delimited list of bundle URLs to automatically install and start when Oscar is started, where <tt>&lt;n&gt;</tt> is the start level into which the bundle will be installed (e.g., <tt>felix.auto.start.2</tt>).</li>
-	<li><tt>felix.startlevel.framework</tt> - The initial start level of the framework once it starts execution; the default value is 1.</li>
-	<li><tt>felix.startlevel.bundle</tt> - The default start level for newly installed bundles; the default value is 1.</li>
-	<li><tt>felix.service.urlhandlers</tt> - Flag to indicate whether Felix should enable the URL Handlers service, which will result in calls to <tt>URL.setURLStreamHandlerFactory()</tt> and <tt>URLConnection.setContentHandlerFactory()</tt>. The default value is "<tt>true</tt>" to enable the URL Handlers service.</li>
-	<li><tt>felix.embedded.execution</tt> - Flag to indicate whether Felix is embedded into a host application; the default value is "<tt>false</tt>". If this flag is "<tt>true</tt>" then Felix will not call <tt>System.exit()</tt> upon termination.</li>
-	<li><tt>felix.strict.osgi</tt> - Flag to indicate whether Felix is running in strict OSGi mode; the default value is "<tt>true</tt>". If this flag is "<tt>false</tt>" it currently enables a single non-OSGi-compliant feature: persisting <tt>BundleActivator</tt>s that implement <tt>Serializable</tt>. This feature is not recommended since it is non-compliant.</li>
+	<li><tt>felix.auto.start.&lt;n&gt;</tt> - Space-delimited list of bundle URLs to automatically install and start when Felix is started, where <tt>&lt;n&gt;</tt> is the start level into which the bundle will be installed (e.g., <tt>felix.auto.start.2</tt>).</li>
+</ul>
+
+
+<p>The following are framework configuration properties (properties starting with "<tt>felix</tt>" are specific to Felix, while those starting with "<tt>org.osgi</tt>" are standard OSGi properties):</p>
+
+<ul>
+	<li><tt>org.osgi.framework.storage</tt> - Sets the directory to use as the bundle cache; by default bundle cache directory is <tt>felix-cache</tt>
+in the current working directory. The value should be a valid directory
+name. The directory name can be either absolute or relative. Relative
+directory names are relative to the current working directory. The
+specified directory will be created if it does not exist.</li>
+	<li><tt>org.osgi.framework.storage.clean</tt> - Determines whether the bundle cache is flushed. The value can either be "<tt>none</tt>" or "<tt>onFirstInit</tt>", where "<tt>none</tt>" does not flush the bundle cache and "<tt>onFirstInit</tt>" flushes the bundle cache when the framework instance is first initialized. The default value is "<tt>none</tt>".</li>
+	<li><tt>felix.cache.rootdir</tt> - Sets the root directory to use to calculate the bundle cache directory for relative directory names. If <tt>org.osgi.framework.storage</tt>
+is set to a relative name, by default it is relative to the current
+working directory. If this property is set, then it will be calculated
+as being relative to the specified root directory.</li>
 	<li><tt>felix.cache.bufsize</tt>
-- Sets the buffer size to be used by the bundle cache when copying JAR
-files and input streams; the default value is 4096 bytes. The integer
-value of this string provides control over the size of the internal
-buffer of the disk cache for performance reasons.</li>
-	<li><tt>felix.cache.dir</tt>
-- Sets the directory to be used by the bundle cache as its cache
-directory. The cache directory is where all profile directories are
-stored and a profile directory is where a set of installed bundles are
-stored. By default, the cache directory is <tt>.felix</tt> in the user's home directory. If this property is specified, then its value will be used as the cache directory instead of <tt>.felix</tt>. This directory will be created if it does not exist.</li>
-	<li><tt>felix.cache.profile</tt>
-- Sets the profile name that will be used to create a profile directory
-inside of the bundle cache directory. The created directory will
-contain all installed bundles associated with the profile.</li>
-	<li><tt>felix.cache.profiledir</tt>
-- Sets the directory to use as the profile directory for the bundle
-cache; by default the profile name is used to create a directory in the
-<tt>.felix</tt> bundle cache directory (more precisely <tt>${felix.cache.dir}/${felix.cache.profile</tt>}). If the <tt>felix.cache.profiledir</tt>
-property is specified, then the cache directory and profile name
-properties are ignored since they are only used to calculate the
-profile directory. The specified value of the profile directory
-property is used directly as the directory to contain all cached
-bundles. This directory will be created if it does not exist.</li>
+- Sets the buffer size to be used by the cache; the default value is
+4096. The integer value of this string provides control over the size
+of the internal buffer of the disk cache for performance reasons.</li>
+	<li><tt>org.osgi.framework.system.packages</tt>
+- Specifies a comma-delimited list of packages that should be exported
+via the System Bundle from the parent class loader. The framework will
+set this to a reasonable default. If the value is specified, it
+replaces any default value.</li>
+	<li><tt>org.osgi.framework.system.packages.extra</tt>
+- Specifies a comma-delimited list of packages that should be exported
+via the System Bundle from the parent class loader in addition to the
+packages in <tt>org.osgi.framework.system.packages</tt>. The default value is empty. If a value is specified, it is appended to the list of default or specified packages in <tt>org.osgi.framework.system.packages</tt>.</li>
+	<li><tt>org.osgi.framework.bootdelegation</tt>
+- Specifies a comma-delimited list of packages that should be made
+implicitly available to all bundles from the parent class loader. It is
+recommended not to use this property since it breaks modularity. The
+default value is empty.</li>
+	<li><tt>felix.systembundle.activators</tt> - A <tt>List</tt> of <tt>BundleActivator</tt>
+instances that are started/stopped when the System Bundle is
+started/stopped. The specified instances will receive the System
+Bundle's <tt>BundleContext</tt> when invoked.</li>
+	<li><tt>felix.log.logger</tt> - An instance of <tt>Logger</tt> that the framework uses as its default logger.</li>
+	<li><tt>felix.log.level</tt>
+- An integer value indicating the degree of logging reported by the
+framework; the higher the value the more logging is reported. If zero
+('0') is specified, then logging is turned off completely. The log
+levels match those specified in the OSGi Log Service (i.e., 1 = error,
+2 = warning, 3 = information, and 4 = debug). The default value is 1.</li>
+	<li><tt>org.osgi.framework.startlevel</tt> - The initial start level of the framework once it starts execution; the default value is 1.</li>
+	<li><tt>felix.startlevel.bundle</tt> - The default start level for newly installed bundles; the default value is 1.</li>
+	<li><tt>felix.service.urlhandlers</tt> - Flag to indicate whether to activate the URL Handlers service for the framework instance; the default value is "<tt>true</tt>". Activating the URL Handlers service will result in the <tt>URL.setURLStreamHandlerFactory()</tt> and <tt>URLConnection.setContentHandlerFactory()</tt> being called.</li>
+	<li><tt>felix.fragment.validation</tt> - Determines if installing unsupported fragment bundles throws an exception or logs a warning. Possible values are "<tt>exception</tt>" or "<tt>warning</tt>". The default value is "<tt>exception</tt>".</li>
 </ul>
 
 
 <p>The Felix installation contains a default <tt>conf/config.properties</tt> file for automatically starting the shell-related bundles.</p>
 
+<p><a name="ApacheFelixUsageDocumentation-migrating"></a></p>
+
+<h3><a name="ApacheFelixUsageDocumentation-MigratingfromEarlierVersions"></a>Migrating from Earlier Versions</h3>
+
+<p>The release of Felix <tt>1.4.0</tt> introduced some configuration property changes. This section describes the differences from older versions of Felix.</p>
+
+<ul>
+	<li><b>Removed</b>
+	<ul>
+		<li><tt>felix.embedded.execution</tt> - No longer needed, since the framework now never calls <tt>System.exit()</tt>; the creator of the framework is now always responsible for exiting the VM.</li>
+		<li><tt>felix.strict.osgi</tt> - No longer needed, since all non-specification features have been removed.</li>
+		<li><tt>felix.cache.dir</tt> - No longer needed, since Felix no longer uses bundle cache profiles for saving sets of bundles.</li>
+		<li><tt>felix.cache.profile</tt> - No longer needed, since Felix no longer uses bundle cache profiles for saving sets of bundles.</li>
+	</ul>
+	</li>
+	<li><b>Renamed</b>
+	<ul>
+		<li><tt>felix.cache.profiledir</tt> - The equivalent of this property is now named <tt>org.osgi.framework.storage</tt>.</li>
+		<li><tt>felix.startlevel.framework</tt> - The equivalent of this property is now named <tt>org.osgi.framework.startlevel</tt>.</li>
+	</ul>
+	</li>
+	<li><b>Introduced</b>
+	<ul>
+		<li><tt>org.osgi.framework.system.packages.extra</tt> - New property, as described above, added to align with standard framework API.</li>
+		<li><tt>org.osgi.framework.storage.clean</tt> - New property, as described above, added to align with standard framework API.</li>
+		<li><tt>felix.cache.rootdir</tt> - Introduced as a result of removing bundle profiles to help resolve relative bundle cache directories.</li>
+		<li><tt>felix.fragment.validation</tt> - Introduced to control fragment validation, since the default behavior introduced in <tt>1.2.0</tt> of throwing an exception for fragments using unsupported features was causing issues for some users.</li>
+	</ul>
+	</li>
+</ul>
+
+
+<p>For the most part, these changes are minor and previous behavior
+achieved from older configuration properties is either easily attained
+with the new properties or no longer necessary.</p>
+
 <p><a name="ApacheFelixUsageDocumentation-propertysubstitution"></a></p>
 
 <h3><a name="ApacheFelixUsageDocumentation-SystemPropertySubstituion"></a>System Property Substituion</h3>
 <p>It is possible to use system properties to specify the values of properties in the <tt>conf/config.properties</tt> file. This is achieved through system property substitution, which is instigated by using <tt>${&lt;property&gt;</tt>} syntax, where <tt>&lt;property&gt;</tt>
 is the name of a system property to substitute. When such a property
 value is retrieved by a bundle, the system property value will be
-substituted into the bundle property value as appropriate.</p>
+substituted into the bundle property value as appropriate. It is
+possible to have nested system property substitution, in which case the
+inner-most property is substituted first, then the next inner most,
+until reaching the outer most.</p>
 
 <p><a name="ApacheFelixUsageDocumentation-defaultshell"></a></p>
 
 <h3><a name="ApacheFelixUsageDocumentation-ChangingtheCommandShellUserInterface"></a>Changing the Command Shell User Interface</h3>
+
 <p>Felix' shell service supports multiple user interface
 implementations; the default shell user interface is text-based, but a
 simple graphical shell is also available. To change the default shell
 user interface, you must download the Shell GUI and Shell GUI Plugin
 bundles. Then you must modify the <tt>felix.auto.start</tt> property in the <tt>conf/config.properties</tt> file of your Felix installation. For the text-based user interface, the property value should look like this:</p>
+
 <div class="preformatted"><div class="preformattedContent">
 <pre>felix.auto.start.1=file:bundle/shell.jar file:bundle/shelltui.jar \
  file:bundle/bundlerepository.jar
 </pre>
 </div></div>
+
 <p>This property value instructs Felix to automatically start the shell
 service, the shell textual user interface, and the bundle repository. (<em>Note:
 The "\" character at the end of the above line indicates that the
 property value continues on the next line; it is also possible to
 specify the property value on one line.</em>) For the GUI-based shell user interface, the property value should look something like this:</p>
+
 <div class="preformatted"><div class="preformattedContent">
 <pre>felix.auto.start.1=file:bundle/shell.jar file:bundle/bundlerepository.jar \
  file:bundle/shellgui.jar file:bundle/shellplugin.jar
 </pre>
 </div></div>
+
 <p>This property value instructs Felix to automatically start the shell
 service, the bundle repository, the shell GUI, and the shell GUI
 plugins.</p>
@@ -313,6 +822,7 @@
 <p><a name="ApacheFelixUsageDocumentation-configuringbundles"></a></p>
 
 <h2><a name="ApacheFelixUsageDocumentation-ConfiguringBundles"></a>Configuring Bundles</h2>
+
 <p>Some bundles use properties to configure certain aspects of their behavior. As an example, the default URL for the <tt>cd</tt> command of the shell service can be specified using the property <tt>felix.shell.baseurl</tt>.
 It is a good idea, when implementing bundles, to parameterize them with
 properties where appropriate. To learn about the configuration options
@@ -327,7 +837,6 @@
 
 <h2><a name="ApacheFelixUsageDocumentation-Feedback"></a>Feedback</h2>
 
-<p>Subscribe to the Felix users mailing list by sending a message to <span class="nobr"><a href="mailto:users-subscribe@felix.apache.org" title="Send mail to users-subscribe@felix.apache.org" rel="nofollow">users-subscribe@felix.apache.org<sup><img class="rendericon" src="apache-felix-usage-documentation_files/mail_small.gif" alt="" align="absmiddle" border="0" height="12" width="13"></sup></a></span>; after subscribing, email questions or feedback to <span class="nobr"><a href="mailto:users@felix.apache.org" title="Send mail to users@felix.apache.org" rel="nofollow">users@felix.apache.org<sup><img class="rendericon" src="apache-felix-usage-documentation_files/mail_small.gif" alt="" align="absmiddle" border="0" height="12" width="13"></sup></a></span>.</p>
+<p>Subscribe to the Felix users mailing list by sending a message to <span class="nobr"><a href="mailto:users-subscribe@felix.apache.org" title="Send mail to users-subscribe@felix.apache.org" rel="nofollow">users-subscribe@felix.apache.org<sup><img class="rendericon" src="apache-felix-usage-documentation_files/mail_small.gif" alt="" align="absmiddle" border="0" height="12" width="13"></sup></a></span>; after subscribing, email questions or feedback to <span class="nobr"><a href="mailto:users@felix.apache.org" title="Send mail to users@felix.apache.org" rel="nofollow">users@felix.apache.org<sup><img class="rendericon" src="apache-felix-usage-documentation-Dateien/mail_small.gif" alt="" align="absmiddle" border="0" height="12" width="13"></sup></a></span>.</p>
     </div>
-  
-</body></html>
+  </body></html>
diff --git a/doc/apache-felix-usage-documentation_files/button.html b/doc/apache-felix-usage-documentation_files/button.html
new file mode 100644
index 0000000..6ff0533
--- /dev/null
+++ b/doc/apache-felix-usage-documentation_files/button.html
@@ -0,0 +1,5 @@
+<html><head>
+<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1"><!-- ads start -->
+</head><body><a href="http://www.us.apachecon.com/" target="_blank"><img src="button_data/2008-usa-125x125.png" title="ApacheCon US 2008" border="0" height="125" width="125"></a>
+<!-- ads end -->
+</body></html>
\ No newline at end of file
diff --git a/doc/apache-felix-usage-documentation_files/button_data/2008-usa-125x125.png b/doc/apache-felix-usage-documentation_files/button_data/2008-usa-125x125.png
new file mode 100644
index 0000000..37cca05
--- /dev/null
+++ b/doc/apache-felix-usage-documentation_files/button_data/2008-usa-125x125.png
Binary files differ
diff --git a/doc/apache-felix-usage-documentation_files/information.gif b/doc/apache-felix-usage-documentation_files/information.gif
new file mode 100644
index 0000000..072ab66
--- /dev/null
+++ b/doc/apache-felix-usage-documentation_files/information.gif
Binary files differ
diff --git a/doc/changelog.txt b/doc/changelog.txt
index be32d42..d8b677d 100644
--- a/doc/changelog.txt
+++ b/doc/changelog.txt
@@ -1,3 +1,27 @@
+Changes from 1.2.2 to 1.4.0
+---------------------------
+* [2008-10-31] Fixed a possible NPE when no configuration file is found.
+* [2008-10-23] Change the name of the SystemBundle interface to be Framework. 
+  (FELIX-753)
+* [2008-10-22] Hide wire messages in felix releases. (FELIX-707)
+* [2008-10-16] Modified framework to have default values for the system packages 
+  property. Now it is really possible to start Felix with no configuration 
+  properties. (FELIX-753)
+* [2008-10-10] Implements support for flushing the cache on framework 
+  initialization. (FELIX-755)
+* [2008-10-09] Modified the bundle cache to no longer have profiles. (FELIX-754)
+* [2008-10-08] Modified the Felix API to aligned with the proposed standard OSGi 
+  framework API. (FELIX-753)
+* [2008-09-23] Added symbolic names to framework and main.
+* [2008-09-12] Added a configuration property to determine whether installing a 
+  fragment that uses unimplemented features throws an exception or logs a 
+  warning. (FELIX-725)
+
+Changes form 1.2.1 to 1.2.2
+---------------------------
+
+* [2008-10-14] Update to latest framework version 1.2.2.
+
 Changes from 1.2.0 to 1.2.1
 ---------------------------
 
diff --git a/doc/launching-and-embedding-apache-felix.html b/doc/launching-and-embedding-apache-felix.html
deleted file mode 100644
index 9bf40d5..0000000
--- a/doc/launching-and-embedding-apache-felix.html
+++ /dev/null
@@ -1,985 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html><head><title>Apache Felix - Launching and Embedding Apache Felix</title>
-
-
-  
-    
-    <link rel="stylesheet" href="launching-and-embedding-apache-felix_files/site.css" type="text/css" media="all">
-    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"></head><body linkifying="true">
-    <div class="title"><div class="logo"><a href="http://felix.apache.org/site/index.html"><img alt="Apache Felix" src="launching-and-embedding-apache-felix_files/logo.png" border="0"></a></div><div class="header"><a href="http://www.apache.org/"><img alt="Apache" src="launching-and-embedding-apache-felix_files/apache.png" border="0"></a></div></div>
-    <div class="menu">
-<ul>
-	<li><a href="http://cwiki.apache.org/FELIX/index.html" title="Index">home</a></li>
-	<li><a href="http://cwiki.apache.org/FELIX/news.html" title="news">news</a></li>
-	<li><a href="http://cwiki.apache.org/FELIX/status.html" title="status">status</a></li>
-	<li><a href="http://cwiki.apache.org/FELIX/license.html" title="license">license</a></li>
-	<li><span class="nobr"><a href="http://felix.apache.org/site/downloads.cgi" title="Visit page outside Confluence" rel="nofollow">downloads<sup><img class="rendericon" src="launching-and-embedding-apache-felix_files/linkext7.gif" alt="" align="absmiddle" border="0" height="7" width="7"></sup></a></span></li>
-	<li><a href="http://cwiki.apache.org/FELIX/documentation.html" title="documentation">documentation</a></li>
-	<li><a href="http://cwiki.apache.org/FELIX/mailinglists.html" title="mailinglists">mailing lists</a></li>
-	<li><span class="nobr"><a href="http://cwiki.apache.org/confluence/x/O-" title="Visit page outside Confluence" rel="nofollow">wiki<sup><img class="rendericon" src="launching-and-embedding-apache-felix_files/linkext7.gif" alt="" align="absmiddle" border="0" height="7" width="7"></sup></a></span></li>
-	<li><a href="http://cwiki.apache.org/FELIX/committers.html" title="committers">committers</a></li>
-	<li><a href="http://cwiki.apache.org/FELIX/faq.html" title="faq">faq</a></li>
-	<li><a href="http://cwiki.apache.org/FELIX/roadmap.html" title="roadmap">roadmap</a></li>
-	<li><a href="http://cwiki.apache.org/FELIX/sourcecode.html" title="sourcecode">source code</a></li>
-	<li><a href="http://cwiki.apache.org/FELIX/codingstandards.html" title="codingstandards">coding standards</a></li>
-	<li><a href="http://cwiki.apache.org/FELIX/issuetracking.html" title="issuetracking">issue tracking</a></li>
-	<li><a href="http://cwiki.apache.org/FELIX/dependencies.html" title="dependencies">dependencies</a></li>
-	<li><span class="nobr"><a href="http://www.apache.org/" title="Visit page outside Confluence" rel="nofollow">apache software foundation<sup><img class="rendericon" src="launching-and-embedding-apache-felix_files/linkext7.gif" alt="" align="absmiddle" border="0" height="7" width="7"></sup></a></span></li>
-	<li><span class="nobr"><a href="http://www.apache.org/foundation/sponsorship.html" title="Visit page outside Confluence" rel="nofollow">sponsorship<sup><img class="rendericon" src="launching-and-embedding-apache-felix_files/linkext7.gif" alt="" align="absmiddle" border="0" height="7" width="7"></sup></a></span></li>
-	<li><span class="nobr"><a href="http://www.apache.org/foundation/thanks.html" title="Visit page outside Confluence" rel="nofollow">sponsors<sup><img class="rendericon" src="launching-and-embedding-apache-felix_files/linkext7.gif" alt="" align="absmiddle" border="0" height="7" width="7"></sup></a></span></li>
-</ul> </div>
-    <div class="main">
-<h1><a name="LaunchingandEmbeddingApacheFelix-LaunchingandEmbeddingApacheFelix"></a>Launching and Embedding Apache Felix</h1>
-
-<p><em>[This document is based on Felix 1.0.3.]</em></p>
-
-<ul>
-	<li><a href="#LaunchingandEmbeddingApacheFelix-introduction" title="introduction on Launching and Embedding Apache Felix">Introduction</a></li>
-	<li><a href="#LaunchingandEmbeddingApacheFelix-overview" title="overview on Launching and Embedding Apache Felix">API Overview</a></li>
-	<li><a href="#LaunchingandEmbeddingApacheFelix-launching" title="launching on Launching and Embedding Apache Felix">Launching Felix</a>
-	<ul>
-		<li><a href="#LaunchingandEmbeddingApacheFelix-standardlauncher" title="standard-launcher on Launching and Embedding Apache Felix">Standard Felix Launcher</a></li>
-		<li><a href="#LaunchingandEmbeddingApacheFelix-customlauncher" title="custom-launcher on Launching and Embedding Apache Felix">Custom Felix Launcher</a></li>
-	</ul>
-	</li>
-	<li><a href="#LaunchingandEmbeddingApacheFelix-embedding" title="embedding on Launching and Embedding Apache Felix">Embedding Felix</a>
-	<ul>
-		<li><a href="#LaunchingandEmbeddingApacheFelix-configproperty" title="config-property on Launching and Embedding Apache Felix">Embedded Execution Configuration Property</a></li>
-		<li><a href="#LaunchingandEmbeddingApacheFelix-hostinteraction" title="host-interaction on Launching and Embedding Apache Felix">Host/Felix Interaction</a></li>
-		<li><a href="#LaunchingandEmbeddingApacheFelix-hostservices" title="host-services on Launching and Embedding Apache Felix">Providing Host Application Services</a></li>
-		<li><a href="#LaunchingandEmbeddingApacheFelix-hostserviceusage" title="host-service-usage on Launching and Embedding Apache Felix">Using Services Provided by Bundles</a>
-		<ul>
-			<li><a href="#LaunchingandEmbeddingApacheFelix-servicereflection" title="service-reflection on Launching and Embedding Apache Felix">Using Bundle Services via Reflection</a></li>
-		</ul>
-		</li>
-	</ul>
-	</li>
-	<li><a href="#LaunchingandEmbeddingApacheFelix-caveat" title="caveat on Launching and Embedding Apache Felix">Caveat</a></li>
-	<li><a href="#LaunchingandEmbeddingApacheFelix-feedback" title="feedback on Launching and Embedding Apache Felix">Feedback</a></li>
-</ul>
-
-
-<p><a name="LaunchingandEmbeddingApacheFelix-introduction"></a></p>
-
-<h1><a name="LaunchingandEmbeddingApacheFelix-Introduction"></a>Introduction</h1>
-
-<p>The Apache Felix OSGi framework is intended to be easily launchable
-and embeddable. For example, Felix avoids the use of system properties
-for configuration, since these are globals that can cause interference
-if multiple framework instances are created in the same VM. Felix is
-also implemented to multiplex singleton facilities, like the URL stream
-handler factory. The goal is to make it possible to use Felix in as
-many scenarios as possible; however, this is still just a goal. In
-other words, this is a work in progress and if any issues arise, it
-would be greatly appreciated if they are brought to the attention of
-the Felix community. The next section provides a Felix API overview,
-while the remainder of the document is divided into two sections, one
-focusing on how to launch Felix and one focusing on how to embed Felix
-into a host application.</p>
-
-<p><a name="LaunchingandEmbeddingApacheFelix-overview"></a></p>
-
-<h1><a name="LaunchingandEmbeddingApacheFelix-APIOverview"></a>API Overview</h1>
-
-<p>The Felix class that implements the OSGi framework is <tt>org.apache.felix.framework.Felix</tt> or just <tt>Felix</tt> for short. The OSGi specification defines a special bundle, called the <em><b>System Bundle</b></em>,
-that represents the framework at run time and appears like any other
-bundle in the list of installed bundles. To make this notion even more
-intuitive, the <tt>Felix</tt> class implements the <tt>org.osgi.framework.Bundle</tt> interface, which is reiterated here:</p>
-
-<div class="code"><div class="codeContent">
-<pre class="code-java"><span class="code-keyword">public</span> <span class="code-keyword">interface</span> Bundle
-{
-    <span class="code-keyword">public</span> BundleContext getBundleContext();
-    <span class="code-keyword">public</span> <span class="code-object">long</span> getBundleId();
-    <span class="code-keyword">public</span> URL getEntry(<span class="code-object">String</span> name);
-    <span class="code-keyword">public</span> Enumeration getEntryPaths(<span class="code-object">String</span> path);
-    <span class="code-keyword">public</span> Enumeration findEntries(<span class="code-object">String</span> path, <span class="code-object">String</span> filePattern, <span class="code-object">boolean</span> recurse);
-    <span class="code-keyword">public</span> Dictionary getHeaders();
-    <span class="code-keyword">public</span> Dictionary getHeaders(<span class="code-object">String</span> locale);
-    <span class="code-keyword">public</span> <span class="code-object">long</span> getLastModified();
-    <span class="code-keyword">public</span> <span class="code-object">String</span> getLocation();
-    <span class="code-keyword">public</span> URL getResource(<span class="code-object">String</span> name);
-    <span class="code-keyword">public</span> Enumeration getResources(<span class="code-object">String</span> name) <span class="code-keyword">throws</span> IOException;
-    <span class="code-keyword">public</span> ServiceReference[] getRegisteredServices();
-    <span class="code-keyword">public</span> ServiceReference[] getServicesInUse();
-    <span class="code-keyword">public</span> <span class="code-object">int</span> getState();
-    <span class="code-keyword">public</span> <span class="code-object">String</span> getSymbolicName();
-    <span class="code-keyword">public</span> <span class="code-object">boolean</span> hasPermission(<span class="code-object">Object</span> obj);
-    <span class="code-keyword">public</span> <span class="code-object">Class</span> loadClass(<span class="code-object">String</span> name) <span class="code-keyword">throws</span> ClassNotFoundException;
-    <span class="code-keyword">public</span> void start() <span class="code-keyword">throws</span> BundleException;
-    <span class="code-keyword">public</span> void stop() <span class="code-keyword">throws</span> BundleException;
-    <span class="code-keyword">public</span> void uninstall() <span class="code-keyword">throws</span> BundleException;
-    <span class="code-keyword">public</span> void update() <span class="code-keyword">throws</span> BundleException;
-    <span class="code-keyword">public</span> void update(InputStream is) <span class="code-keyword">throws</span> BundleException;
-}</pre>
-</div></div>
-
-<p>When you instantiate the <tt>Felix</tt> class, the resulting object is actually the System Bundle and can be cast to the <tt>Bundle</tt> interface. The <tt>start()</tt> method is used to start the framework instance, while the <tt>stop()</tt> method is used to asynchronously stop the framework instance. The <tt>Felix</tt> class also includes the following three additional public methods:</p>
-
-<div class="code"><div class="codeContent">
-<pre class="code-java"><span class="code-keyword">public</span> class Felix <span class="code-keyword">extends</span> FelixBundle
-{
-    <span class="code-keyword">public</span> Felix(Map configMutableMap, List activatorList);
-    <span class="code-keyword">public</span> Felix(Logger logger, Map configMutableMap, List activatorList)
-    <span class="code-keyword">public</span> void stopAndWait();
-}</pre>
-</div></div>
-
-<p>The first two methods are constructors used to instantiate framework
-instances; the important parameters of the constructors are the
-configuration properties and System Bundle activators, which are both
-described in more detail later. The <tt>stopAndWait()</tt> method is a synchronous version of the <tt>stop()</tt> method, used to stop the framework and block the calling thread until the framework is completely stopped.</p>
-
-<p><a name="LaunchingandEmbeddingApacheFelix-launching"></a></p>
-
-<h1><a name="LaunchingandEmbeddingApacheFelix-LaunchingFelix"></a>Launching Felix</h1>
-
-<p>Launching Felix is fairly simple and involves only three steps:</p>
-
-<ol>
-	<li>Defining some configuration properties.</li>
-	<li>Creating an instance of <tt>org.apache.felix.framework.Felix</tt> with the configuration properties.</li>
-	<li>Invoking the <tt>org.apache.felix.framework.Felix.start()</tt> method.</li>
-</ol>
-
-
-<p>The only configuration properties that are actually required to
-start Felix are ones that tell it where/how to locate the bundle cache
-profile directory where installed bundles will be cached. Felix' bundle
-cache implementation allows you to configure the location where bundles
-are cached using configuration properties. At a minimum, either a
-bundle cache profile name or directory must be specified; see the <a href="http://cwiki.apache.org/FELIX/apache-felix-bundle-cache.html" title="Apache Felix Bundle Cache">bundle cache document</a> for more detailed information on configuring the bundle cache.</p>
-
-<p>Besides configuration properties for the bundle cache, it is usually necessary to set the <tt>org.osgi.framework.system.packages</tt> configuration property to export packages from the class path, such as the OSGi interface classes (e.g., <tt>org.osgi.framework</tt>)
-on which all bundles depend. If you are creating a launcher for Felix,
-then often you want to automatically install and start bundles when you
-start the framework instance. The default Felix launcher defines
-reusable functionality to automatically install and/or start bundles
-upon framework startup; see the <a href="http://cwiki.apache.org/FELIX/apache-felix-usage-documentation.html#ApacheFelixUsageDocumentation-configuringfelix" title="configuring-felix on Apache Felix Usage Documentation">usage document</a> for more information on configuring Felix and on the various configuration properties.</p>
-
-<p>The remainder of this section describes how the standard Felix
-launcher works as well as how to create a custom launcher for Felix.</p>
-
-<p><a name="LaunchingandEmbeddingApacheFelix-standardlauncher"></a></p>
-
-<h2><a name="LaunchingandEmbeddingApacheFelix-StandardFelixLauncher"></a>Standard Felix Launcher</h2>
-
-<p>The standard Felix launcher is very simple and is not intended to
-solve every possible requirement; it is intended to work for most
-standard situations. Most special launching requirements should be
-resolved by creating a custom launcher. This section describes how the
-standard launcher works. The following code represents the complete <tt>main()</tt> method of the standard launcher, each numbered comment will be described in more detail below:</p>
-
-<div class="code"><div class="codeContent">
-<pre class="code-java"><span class="code-keyword">public</span> <span class="code-keyword">static</span> void main(<span class="code-object">String</span>[] argv) <span class="code-keyword">throws</span> Exception
-{
-    <span class="code-comment">// (1) Load system properties.
-</span>    Main.loadSystemProperties();
-
-    <span class="code-comment">// (2) Read configuration properties.
-</span>    Properties configProps = Main.loadConfigProperties();
-
-    <span class="code-comment">// (3) Copy framework properties from the system properties.
-</span>    Main.copySystemProperties(configProps);
-
-    <span class="code-comment">// (4) See <span class="code-keyword">if</span> the profile name property was specified.
-</span>    <span class="code-object">String</span> profileName = configProps.getProperty(BundleCache.CACHE_PROFILE_PROP);
-
-    <span class="code-comment">// (4) See <span class="code-keyword">if</span> the profile directory property was specified.
-</span>    <span class="code-object">String</span> profileDirName = configProps.getProperty(BundleCache.CACHE_PROFILE_DIR_PROP);
-
-    <span class="code-comment">// Print welcome banner.
-</span>    <span class="code-object">System</span>.out.println(<span class="code-quote">"\nWelcome to Felix."</span>);
-    <span class="code-object">System</span>.out.println(<span class="code-quote">"=================\n"</span>);
-
-    <span class="code-comment">// (5) If no profile or profile directory is specified in the
-</span>    <span class="code-comment">// properties, then ask <span class="code-keyword">for</span> a profile name.
-</span>    <span class="code-keyword">if</span> ((profileName == <span class="code-keyword">null</span>) &amp;&amp; (profileDirName == <span class="code-keyword">null</span>))
-    {
-        <span class="code-object">System</span>.out.print(<span class="code-quote">"Enter profile name: "</span>);
-        BufferedReader in = <span class="code-keyword">new</span> BufferedReader(<span class="code-keyword">new</span> InputStreamReader(<span class="code-object">System</span>.in));
-        <span class="code-keyword">try</span>
-        {
-            profileName = in.readLine();
-        }
-        <span class="code-keyword">catch</span> (IOException ex)
-        {
-            <span class="code-object">System</span>.err.println(<span class="code-quote">"Could not read input."</span>);
-            <span class="code-object">System</span>.exit(-1);
-        }
-        <span class="code-object">System</span>.out.println("");
-        <span class="code-keyword">if</span> (profileName.length() != 0)
-        {
-            configProps.setProperty(BundleCache.CACHE_PROFILE_PROP, profileName);
-        }
-    }
-
-    <span class="code-comment">// (6) A profile directory or name must be specified.
-</span>    <span class="code-keyword">if</span> ((profileDirName == <span class="code-keyword">null</span>) &amp;&amp; (profileName.length() == 0))
-    {
-        <span class="code-object">System</span>.err.println(<span class="code-quote">"You must specify a profile name or directory."</span>);
-        <span class="code-object">System</span>.exit(-1);
-    }
-
-    <span class="code-keyword">try</span>
-    {
-        <span class="code-comment">// (7) Create a list <span class="code-keyword">for</span> custom framework activators and
-</span>        <span class="code-comment">// add an instance of the auto-activator it <span class="code-keyword">for</span> processing
-</span>        <span class="code-comment">// auto-install and auto-start properties.
-</span>        List list = <span class="code-keyword">new</span> ArrayList();
-        list.add(<span class="code-keyword">new</span> AutoActivator(configProps));
-        <span class="code-comment">// (8) Create a <span class="code-keyword">case</span>-insensitive property map.
-</span>        Map configMap = <span class="code-keyword">new</span> StringMap(configProps, <span class="code-keyword">false</span>);
-        <span class="code-comment">// (9) Create an instance of the framework.
-</span>        m_felix = <span class="code-keyword">new</span> Felix(configMap, list);
-        m_felix.start();
-    }
-    <span class="code-keyword">catch</span> (Exception ex)
-    {
-        <span class="code-object">System</span>.err.println(<span class="code-quote">"Could not create framework: "</span> + ex);
-        ex.printStackTrace();
-        <span class="code-object">System</span>.exit(-1);
-    }
-}</pre>
-</div></div>
-
-<p>The general steps of the standard launcher are quite straightforward:</p>
-
-<ol>
-	<li>Load any system properties specified in the <tt>system.properties</tt> file; this file is typically located in the <tt>conf/</tt> directory of the Felix installation directory, but it can be specified directly using the <tt>felix.system.properties</tt>
-system property. This file is not needed to launch Felix and is
-provided merely for convenience when system properties must be
-specified. The file is a standard Java properties file, but it also
-supports property substitution using <tt>${&lt;property-name</tt>} syntax. Property substitution can be nested; only system properties will be used for substitution.</li>
-	<li>Load any configuration properties specified in the <tt>config.properties</tt> file; this file is typically located in the <tt>conf/</tt> directory of the Felix installation directory, but it can be specified directly using the <tt>felix.config.properties</tt>
-system property. This file is used to configure the Felix instance
-created by the launcher. The file is a standard Java properties file,
-but it also supports property substitution using "<tt>${&lt;property-name</tt>}"
-syntax. Property substitution can be nested; configuration and system
-properties will be used for substitution with configuration properties
-having precedence.</li>
-	<li>For convenience, any configuration
-properties that are set as system properties will be copied into the
-set of configuration properties to provide an easy way to add to or
-override configuration properties specified in the <tt>config.properties</tt> file.</li>
-	<li>Try to load the profile name or profile directory configuration properties. At least one of these must be specified so that the <a href="http://cwiki.apache.org/FELIX/apache-felix-bundle-cache.html" title="Apache Felix Bundle Cache">bundle cache</a> knows where to save installed bundles.</li>
-	<li>If
-either the profile name or profile directory configuration property has
-not been specified, then ask the user to specify a profile name and add
-it to the current set of configuration properties.</li>
-	<li>Error if there is no profile name or profile directory.</li>
-	<li>Create a list to hold custom framework activators and add an instance of <tt>org.apache.felix.main.AutoActivator</tt>, which will process <tt>felix.auto.install</tt> and <tt>felix.auto.start</tt> configuration properties during framework startup to automatically install and/or start bundles; see the <a href="http://cwiki.apache.org/FELIX/apache-felix-usage-documentation.html#ApacheFelixUsageDocumentation-configuringfelix" title="configuring-felix on Apache Felix Usage Documentation">usage document</a> for more information configuration properties.</li>
-	<li>Create a case-insensitive map to hold our configuration properties.</li>
-	<li>Create the Felix instance passing in the configuration properties and custom framework activators, then call <tt>start()</tt>.</li>
-</ol>
-
-
-<p>The framework is not active until the <tt>start()</tt> method is
-called. If no shell bundles are installed and started or if there is
-difficulty locating the shell bundles specified in the auto-start
-property, then it will appear as if the framework is hung, but it is
-actually running without any way to interact with it since the shell
-bundles provide the only means of interaction.</p>
-
-<p><a name="LaunchingandEmbeddingApacheFelix-customlauncher"></a></p>
-
-<h2><a name="LaunchingandEmbeddingApacheFelix-CustomFelixLauncher"></a>Custom Felix Launcher</h2>
-
-<p>This section creates a bare-bones launcher to demonstrate the
-minimum requirements for creating an interactive launcher for the Felix
-framework. This example uses the standard Felix shell bundles for
-interactivity, but any other bundles could be used instead. For
-example, the shell service and telnet bundles could be used to launch
-Felix and make it remotely accessible.</p>
-
-<p>This example launcher project has the following directory structure:</p>
-
-<div class="preformatted"><div class="preformattedContent">
-<pre>launcher/
-   lib/
-      org.apache.felix.main-1.0.3.jar
-   bundle/
-      org.apache.felix.shell-1.0.0.jar
-      org.apache.felix.shell.tui-1.0.0.jar
-   src/
-      example/
-         Main.java
-</pre>
-</div></div>
-
-<p>The <tt>lib/</tt> directory contains Felix' main JAR file, which
-also contains the OSGi core interfaces. The main JAR file is used so
-that we can reuse the default launcher's auto-install/auto-start
-configuration property handling; if these capabilities are needed, then
-it would be possible to use the framework JAR file. The <tt>bundle/</tt>
-directory contains the shell service and textual shell interface
-bundles that will be used for interacting with the framework instance.
-Note: If you do not launch Felix with interactive bundles, it will
-appear as if the framework instance is hung, but it is actually just
-sitting there waiting for someone to tell it to do something. The <tt>src/example/</tt> directory contains the following <tt>Main.java</tt> file, which is a very simplistic Felix launcher.</p>
-
-<div class="code"><div class="codeContent">
-<pre class="code-java"><span class="code-keyword">package</span> example;
-
-<span class="code-keyword">import</span> java.util.Map;
-<span class="code-keyword">import</span> org.osgi.framework.Constants;
-<span class="code-keyword">import</span> org.apache.felix.framework.Felix;
-<span class="code-keyword">import</span> org.apache.felix.framework.cache.BundleCache;
-<span class="code-keyword">import</span> org.apache.felix.framework.util.StringMap;
-<span class="code-keyword">import</span> org.apache.felix.framework.main.AutoActivator;
-
-<span class="code-keyword">public</span> class Main
-{
-    <span class="code-keyword">private</span> <span class="code-keyword">static</span> Felix m_felix = <span class="code-keyword">null</span>;
-
-    <span class="code-keyword">public</span> <span class="code-keyword">static</span> void main(<span class="code-object">String</span>[] argv) <span class="code-keyword">throws</span> Exception
-    {
-        <span class="code-comment">// Print welcome banner.
-</span>        <span class="code-object">System</span>.out.println(<span class="code-quote">"\nWelcome to Felix."</span>);
-        <span class="code-object">System</span>.out.println(<span class="code-quote">"=================\n"</span>);
-
-        Map configMap = <span class="code-keyword">new</span> StringMap(<span class="code-keyword">false</span>);
-        configMap.put(Constants.FRAMEWORK_SYSTEMPACKAGES,
-            <span class="code-quote">"org.osgi.framework; version=1.3.0,"</span> +
-            <span class="code-quote">"org.osgi.service.packageadmin; version=1.2.0,"</span> +
-            <span class="code-quote">"org.osgi.service.startlevel; version=1.0.0,"</span> +
-            <span class="code-quote">"org.osgi.service.url; version=1.0.0"</span>);
-        configMap.put(AutoActivator.AUTO_START_PROP + <span class="code-quote">".1"</span>,
-            <span class="code-quote">"file:bundle/org.apache.felix.shell-1.0.0.jar "</span> +
-            <span class="code-quote">"file:bundle/org.apache.felix.shell.tui-1.0.0.jar"</span>);
-        configMap.put(BundleCache.CACHE_PROFILE_DIR_PROP, <span class="code-quote">"cache"</span>);
-
-        <span class="code-keyword">try</span>
-        {
-            List list = <span class="code-keyword">new</span> ArrayList();
-            list.add(<span class="code-keyword">new</span> AutoActivator(configProps));
-            Map configMap = <span class="code-keyword">new</span> StringMap(configProps, <span class="code-keyword">false</span>);
-            m_felix = <span class="code-keyword">new</span> Felix(configMap, list);
-            m_felix.start();
-        }
-        <span class="code-keyword">catch</span> (Exception ex)
-        {
-            <span class="code-object">System</span>.err.println(<span class="code-quote">"Could not create framework: "</span> + ex);
-            ex.printStackTrace();
-            <span class="code-object">System</span>.exit(-1);
-        }
-    }
-}</pre>
-</div></div>
-
-<p>This launcher has all information hard coded in it, unlike the
-default Felix launcher, which loads configuration properties from files
-and performs variable substitution. This simple launcher provides a
-good starting point if the features of the default launcher are not
-necessary. For example, if you want to create a launcher that
-automatically deletes the bundle cache directory each time it starts,
-then it is quite easy to figure out how to do that with this simple
-launcher.</p>
-
-<p>By breaking down the above source code into small chunks, it is quite easy to see what is going on.</p>
-
-<div class="code"><div class="codeContent">
-<pre class="code-java">Map configMap = <span class="code-keyword">new</span> StringMap(<span class="code-keyword">false</span>);</pre>
-</div></div>
-
-<p>This simply creates a map to hold configuration properties where the keys are strings and lookups are case insensitive.</p>
-
-<div class="code"><div class="codeContent">
-<pre class="code-java">configMap.put(Constants.FRAMEWORK_SYSTEMPACKAGES,
-            <span class="code-quote">"org.osgi.framework; version=1.3.0,"</span> +
-            <span class="code-quote">"org.osgi.service.packageadmin; version=1.2.0,"</span> +
-            <span class="code-quote">"org.osgi.service.startlevel; version=1.0.0,"</span> +
-            <span class="code-quote">"org.osgi.service.url; version=1.0.0"</span>);</pre>
-</div></div>
-
-<p>This sets the <tt>Constants.FRAMEWORK_SYSTEMPACKAGES</tt> configuration property (string value "<tt>org.osgi.framework.system.packages</tt>"),
-which specifies the class path packages the system bundle should
-export; this is how classes on the class path are made available to
-bundles. This example only exports the core OSGi API packages, but
-other JRE packages could also be added, such as <tt>javax.swing</tt>.
-For example, the default Felix launcher defines properties for all
-packages in various JRE versions (e.g., 1.3.x, 1.4.x, 1.5.x) and
-appends them to this property using property substitution.</p>
-
-<div class="code"><div class="codeContent">
-<pre class="code-java">configMap.put(AutoActivator.AUTO_START_PROP + <span class="code-quote">".1"</span>,
-            <span class="code-quote">"file:bundle/org.apache.felix.shell-1.0.0.jar "</span> +
-            <span class="code-quote">"file:bundle/org.apache.felix.shell.tui-1.0.0.jar"</span>);</pre>
-</div></div>
-
-<p>This sets the <tt>AutoActivator.AUTO_START_PROP</tt> configuration property (string value "<tt>felix.auto.start</tt>"),
-which is a space-delimited list of bundle URLs that the framework will
-automatically install and start when the framework starts. However,
-this property key cannot be used as is; it must be appended with a "."
-and then a number, where the number represents the start level for the
-bundle when it is installed. In this particular example, ".1" is
-appended to the property name, thus the two bundles will be installed
-into start level one. This example uses relative <tt>file:</tt> URLs, which will load the bundles from the <tt>bundle/</tt>
-directory assuming that the launcher is started from the root directory
-of the launcher project. It is also possible to specify absolute URLs
-or remote URLs.</p>
-
-<div class="code"><div class="codeContent">
-<pre class="code-java">configMap.put(BundleCache.CACHE_PROFILE_DIR_PROP, <span class="code-quote">"cache"</span>);</pre>
-</div></div>
-
-<p>This sets the last configuration property, <tt>BundleCache.CACHE_PROFILE_DIR_PROP</tt> (string value "<tt>felix.cache.profiledir</tt>"),
-which is a string that specifies the precise directory to be used as
-the bundle cache profile directory; the Felix bundle cache supports
-other properties to configure its behavior, but those are not covered
-here. In this example, the bundle cache profile directory is specified
-as a relative directory called "<tt>cache</tt>". Assuming that the
-launcher is executed from the root directory of the launcher project,
-then the bundle cache profile directory will be created in the root
-directory of the project.</p>
-
-<div class="code"><div class="codeContent">
-<pre class="code-java">List list = <span class="code-keyword">new</span> ArrayList();
-            list.add(<span class="code-keyword">new</span> AutoActivator(configProps));</pre>
-</div></div>
-
-<p>This above creates a list to hold custom framework activators and adds an instance of <tt>org.apache.felix.main.AutoActivator</tt> to it, which will process the auto-install and auto-start configuration properties during framework startup.</p>
-
-<div class="code"><div class="codeContent">
-<pre class="code-java">Map configMap = <span class="code-keyword">new</span> StringMap(configProps, <span class="code-keyword">false</span>);</pre>
-</div></div>
-
-<p>This above creates a case-insensitive map from the configuration
-properties, since the OSGi specification says that properties are not
-case sensitive.</p>
-
-<div class="code"><div class="codeContent">
-<pre class="code-java">m_felix = <span class="code-keyword">new</span> Felix(configMap, list);
-            m_felix.start();</pre>
-</div></div>
-
-<p>These last steps create the framework instance and start it. The
-configuration property map and custom framework activator list are
-passed into the <tt>Felix</tt> constructor.</p>
-
-<p>The following command compiles the launcher when run from the root directory of the launcher project:</p>
-
-<div class="preformatted"><div class="preformattedContent">
-<pre>javac -d . -classpath lib/org.apache.felix.main-1.0.2.jar src/example/Main.java
-</pre>
-</div></div>
-
-<p>After executing this command, an <tt>example/</tt> directory is
-created in the current directory, which contains the generated class
-file. The following command executes the simple launcher when run from
-the root directory of the launcher project:</p>
-
-<div class="preformatted"><div class="preformattedContent">
-<pre>java -cp .:lib/org.apache.felix.main-1.0.2.jar example.Main
-</pre>
-</div></div>
-
-<p>After executing this command, a <tt>cache/</tt> directory is created that contains the installed bundles, which were installed from the <tt>bundle/</tt> directory.</p>
-
-<p><a name="LaunchingandEmbeddingApacheFelix-embedding"></a></p>
-
-<h1><a name="LaunchingandEmbeddingApacheFelix-EmbeddingFelix"></a>Embedding Felix</h1>
-
-<p>Embedding Felix into a host application is a simple way to provide a
-sophisticated extensibility mechanism (i.e., plugin system) to the host
-application. Embedding Felix is very similar to launching Felix as
-described above, the main difference is that the host application
-typically wants to interact with the framework instance and/or
-installed bundles/services from the outside. This is fairly easy to
-achieve with Felix, but there are some subtle issues to understand.
-This section presents the mechanisms for embedding Felix into a host
-application and the issues in doing so.</p>
-
-<p><a name="LaunchingandEmbeddingApacheFelix-configproperty"></a></p>
-
-<h2><a name="LaunchingandEmbeddingApacheFelix-EmbeddedExecutionConfigurationProperty"></a>Embedded Execution Configuration Property</h2>
-
-<p>When a Felix instance is embedded in a host application, the host
-application must inform the Felix instance that it is embedded. To do
-this, the host application sets the "<tt>felix.embedded.execution</tt>" configuration property to "<tt>true</tt>";
-this can be accomplished in the same way that all configuration
-properties are set, i.e., passing it into the Felix constructor via a
-map. This property specifically controls whether or not the Felix
-instance will shutdown the JVM (i.e., call <tt>System.exit()</tt>)
-when the framework is shutdown. When embedding Felix it is generally
-not desirable for Felix to shutdown the JVM; therefore, by setting this
-property to "<tt>true</tt>" it can be avoided.</p>
-
-<p><a name="LaunchingandEmbeddingApacheFelix-hostinteraction"></a></p>
-
-<h2><a name="LaunchingandEmbeddingApacheFelix-Host/FelixInteraction"></a>Host/Felix Interaction</h2>
-
-<p>In the section on <a href="#LaunchingandEmbeddingApacheFelix-launching" title="launching on Launching and Embedding Apache Felix">launching</a> Felix above, the <tt>Felix</tt>
-constructor accepts two arguments, the first being the configuration
-properties for the framework, the second being a list of bundle
-activator instances. These bundle activator instances provide a
-convenient way for host applications to interact with the Felix
-framework.</p>
-
-<p>Each bundle activator instance passed into the constructor
-effectively becomes part of the System Bundle. This means that the
-start()/stop() method of each bundle activator instance in the passed
-in list gets invoked when the System Bundle's activator start()/stop()
-method gets invoked. Consequently, each bundle activator instance will
-be given the system bundle's <tt>BundleContext</tt> object so that they can interact with the framework externally. While it is possible to get the System Bundle's <tt>BundleContext</tt> object directly by calling <tt>Felix.getBundleContext()</tt>,
-this is generally not as convenient since it requires that you monitor
-when the System Bundle starts and/or stops. Consider following snippet
-of a bundle activator:</p>
-
-<div class="code"><div class="codeContent">
-<pre class="code-java"><span class="code-keyword">public</span> class HostActivator <span class="code-keyword">implements</span> BundleActivator
-{
-    <span class="code-keyword">private</span> BundleContext m_context = <span class="code-keyword">null</span>;
-
-    <span class="code-keyword">public</span> void start(BundleContext context)
-    {
-        m_context = context;
-    }
-
-    <span class="code-keyword">public</span> void stop(BundleContext context)
-    {
-        m_context = <span class="code-keyword">null</span>;
-    }
-
-    <span class="code-keyword">public</span> Bundle[] getBundles()
-    {
-        <span class="code-keyword">if</span> (m_context != <span class="code-keyword">null</span>)
-        {
-            <span class="code-keyword">return</span> m_context.getBundles();
-        }
-        <span class="code-keyword">return</span> <span class="code-keyword">null</span>;
-    }
-}</pre>
-</div></div>
-
-<p>Given the above bundle activator, it is now possible to embed Felix
-into a host application and interact with it as the following snippet
-illustrates:</p>
-
-<div class="code"><div class="codeContent">
-<pre class="code-java"><span class="code-keyword">public</span> class HostApplication
-{
-    <span class="code-keyword">private</span> HostActivator m_activator = <span class="code-keyword">null</span>;
-    <span class="code-keyword">private</span> Felix m_felix = <span class="code-keyword">null</span>;
-
-    <span class="code-keyword">public</span> HostApplication()
-    {
-        <span class="code-comment">// Create a <span class="code-keyword">case</span>-insensitive configuration property map.
-</span>        Map configMap = <span class="code-keyword">new</span> StringMap(<span class="code-keyword">false</span>);
-        <span class="code-comment">// Configure the Felix instance to be embedded.
-</span>        configMap.put(FelixConstants.EMBEDDED_EXECUTION_PROP, <span class="code-quote">"<span class="code-keyword">true</span>"</span>);
-        <span class="code-comment">// Add core OSGi packages to be exported from the class path
-</span>        <span class="code-comment">// via the system bundle.
-</span>        configMap.put(Constants.FRAMEWORK_SYSTEMPACKAGES,
-            <span class="code-quote">"org.osgi.framework; version=1.3.0,"</span> +
-            <span class="code-quote">"org.osgi.service.packageadmin; version=1.2.0,"</span> +
-            <span class="code-quote">"org.osgi.service.startlevel; version=1.0.0,"</span> +
-            <span class="code-quote">"org.osgi.service.url; version=1.0.0"</span>);
-        <span class="code-comment">// Explicitly specify the directory to use <span class="code-keyword">for</span> caching bundles.
-</span>        configMap.put(BundleCache.CACHE_PROFILE_DIR_PROP, <span class="code-quote">"cache"</span>);
-
-        <span class="code-keyword">try</span>
-        {
-            <span class="code-comment">// Create host activator;
-</span>            m_activator = <span class="code-keyword">new</span> HostActivator();
-            List list = <span class="code-keyword">new</span> ArrayList();
-            list.add(m_activator);
-
-            <span class="code-comment">// Now create an instance of the framework with
-</span>            <span class="code-comment">// our configuration properties and activator.
-</span>            m_felix = <span class="code-keyword">new</span> Felix(configMap, list);
-
-            <span class="code-comment">// Now start Felix instance.
-</span>            m_felix.start();
-        }
-        <span class="code-keyword">catch</span> (Exception ex)
-        {
-            <span class="code-object">System</span>.err.println(<span class="code-quote">"Could not create framework: "</span> + ex);
-            ex.printStackTrace();
-        }
-    }
-
-    <span class="code-keyword">public</span> Bundle[] getInstalledBundles()
-    {
-        <span class="code-comment">// Use the system bundle activator to gain external
-</span>        <span class="code-comment">// access to the set of installed bundles.
-</span>        <span class="code-keyword">return</span> m_activator.getBundles();
-    }
-
-    <span class="code-keyword">public</span> void shutdownApplication()
-    {
-        <span class="code-comment">// Shut down the felix framework when stopping the
-</span>        <span class="code-comment">// host application.
-</span>        m_felix.shutdown();
-    }
-}</pre>
-</div></div>
-
-<p>Notice how the <tt>HostApplication.getInstalledBundles()</tt> method
-uses its activator instance to get access to the System Bundle's
-context in order to interact with the embedded Felix framework
-instance. This approach provides the foundation for all interaction
-between the host application and the embedded framework instance.</p>
-
-<p><a name="LaunchingandEmbeddingApacheFelix-hostservices"></a></p>
-
-<h2><a name="LaunchingandEmbeddingApacheFelix-ProvidingHostApplicationServices"></a>Providing Host Application Services</h2>
-
-<p>Providing services from the host application to bundles inside the
-embedded Felix framework instance follows the basic approach laid out
-in <a href="#LaunchingandEmbeddingApacheFelix-hostinteraction" title="host-interaction on Launching and Embedding Apache Felix">above</a>.
-The main complication for providing a host application service to
-bundles is the fact that both the host application and the bundles must
-be using the same class definitions for the service interface classes.
-Since the host application cannot import classes from a bundle, this
-means that the service interface classes <b>must</b> be accessible on
-the class path, typically as part of the host application itself. The
-host application then must export the service interface package via the
-system bundle so that bundles installed into the embedded framework
-instance can import it. This is achieved using the <tt>org.osgi.framework.system.packages</tt> configuration property previously presented.</p>
-
-<p>Consider the follow simple property lookup service:</p>
-
-<div class="code"><div class="codeContent">
-<pre class="code-java"><span class="code-keyword">package</span> host.service.lookup;
-
-<span class="code-keyword">public</span> class Lookup
-{
-    <span class="code-keyword">public</span> <span class="code-object">Object</span> lookup(<span class="code-object">String</span> name);
-}</pre>
-</div></div>
-
-<p>This package is simply part of the host application, which is potentially packaged into a JAR file and started with the "<tt>java -jar</tt>"
-command. Now consider the following host application bundle activator,
-which will be used to register/unregister the property lookup service
-when the embedded framework instance starts/stops:</p>
-
-<div class="code"><div class="codeContent">
-<pre class="code-java"><span class="code-keyword">package</span> host.core;
-
-<span class="code-keyword">import</span> java.util.Map;
-<span class="code-keyword">import</span> org.osgi.framework.BundleActivator;
-<span class="code-keyword">import</span> org.osgi.framework.BundleContext;
-<span class="code-keyword">import</span> org.osgi.framework.ServiceRegistration;
-<span class="code-keyword">import</span> host.service.lookup;
-
-<span class="code-keyword">public</span> class HostActivator <span class="code-keyword">implements</span> BundleActivator
-{
-    <span class="code-keyword">private</span> Map m_lookupMap = <span class="code-keyword">null</span>;
-    <span class="code-keyword">private</span> BundleContext m_context = <span class="code-keyword">null</span>;
-    <span class="code-keyword">private</span> ServiceRegistration m_registration = <span class="code-keyword">null</span>;
-
-    <span class="code-keyword">public</span> HostActivator(Map lookupMap)
-    {
-        <span class="code-comment">// Save a reference to the service's backing store.
-</span>        m_lookupMap = lookupMap;
-    }
-
-    <span class="code-keyword">public</span> void start(BundleContext context)
-    {
-        <span class="code-comment">// Save a reference to the bundle context.
-</span>        m_context = context;
-        <span class="code-comment">// Create a property lookup service implementation.
-</span>        Lookup lookup = <span class="code-keyword">new</span> Lookup() {
-            <span class="code-keyword">public</span> <span class="code-object">Object</span> lookup(<span class="code-object">String</span> name)
-            {
-                <span class="code-keyword">return</span> m_lookupMap.get(name);
-            }
-        };
-        <span class="code-comment">// Register the property lookup service and save
-</span>        <span class="code-comment">// the service registration.
-</span>        m_registration = m_context.registerService(
-            Lookup.class.getName(), lookup, <span class="code-keyword">null</span>);
-    }
-
-    <span class="code-keyword">public</span> void stop(BundleContext context)
-    {
-        <span class="code-comment">// Unregister the property lookup service.
-</span>        m_registration.unregister();
-        m_context = <span class="code-keyword">null</span>;
-    }
-}</pre>
-</div></div>
-
-<p>Given the above host application bundle activator, the following
-code snippet shows how the host application could create an embedded
-version of the Felix framework and provide the property lookup service
-to installed bundles:</p>
-
-<div class="code"><div class="codeContent">
-<pre class="code-java"><span class="code-keyword">package</span> host.core;
-
-<span class="code-keyword">import</span> java.util.List;
-<span class="code-keyword">import</span> java.util.ArrayList;
-<span class="code-keyword">import</span> java.util.Map;
-<span class="code-keyword">import</span> java.util.HashMap;
-<span class="code-keyword">import</span> host.service.lookup.Lookup;
-<span class="code-keyword">import</span> org.apache.felix.framework.Felix;
-<span class="code-keyword">import</span> org.apache.felix.framework.util.FelixConstants;
-<span class="code-keyword">import</span> org.apache.felix.framework.util.StringMap;
-<span class="code-keyword">import</span> org.apache.felix.framework.cache.BundleCache;
-
-<span class="code-keyword">public</span> class HostApplication
-{
-    <span class="code-keyword">private</span> HostActivator m_activator = <span class="code-keyword">null</span>;
-    <span class="code-keyword">private</span> Felix m_felix = <span class="code-keyword">null</span>;
-    <span class="code-keyword">private</span> Map m_lookupMap = <span class="code-keyword">new</span> HashMap();
-
-    <span class="code-keyword">public</span> HostApplication()
-    {
-        <span class="code-comment">// Initialize the map <span class="code-keyword">for</span> the property lookup service.
-</span>        m_lookupMap.put(<span class="code-quote">"name1"</span>, <span class="code-quote">"value1"</span>);
-        m_lookupMap.put(<span class="code-quote">"name2"</span>, <span class="code-quote">"value2"</span>);
-        m_lookupMap.put(<span class="code-quote">"name3"</span>, <span class="code-quote">"value3"</span>);
-        m_lookupMap.put(<span class="code-quote">"name4"</span>, <span class="code-quote">"value4"</span>);
-
-        <span class="code-comment">// Create a <span class="code-keyword">case</span>-insensitive configuration property map.
-</span>        Map configMap = <span class="code-keyword">new</span> StringMap(<span class="code-keyword">false</span>);
-        <span class="code-comment">// Configure the Felix instance to be embedded.
-</span>        configMap.put(FelixConstants.EMBEDDED_EXECUTION_PROP, <span class="code-quote">"<span class="code-keyword">true</span>"</span>);
-        <span class="code-comment">// Add the host provided service <span class="code-keyword">interface</span> <span class="code-keyword">package</span> and the core OSGi
-</span>        <span class="code-comment">// packages to be exported from the class path via the system bundle.
-</span>        configMap.put(Constants.FRAMEWORK_SYSTEMPACKAGES,
-            <span class="code-quote">"org.osgi.framework; version=1.3.0,"</span> +
-            <span class="code-quote">"org.osgi.service.packageadmin; version=1.2.0,"</span> +
-            <span class="code-quote">"org.osgi.service.startlevel; version=1.0.0,"</span> +
-            <span class="code-quote">"org.osgi.service.url; version=1.0.0,"</span> +
-            <span class="code-quote">"host.service.lookup; version=1.0.0"</span>);
-        <span class="code-comment">// Explicitly specify the directory to use <span class="code-keyword">for</span> caching bundles.
-</span>        configMap.put(BundleCache.CACHE_PROFILE_DIR_PROP, <span class="code-quote">"cache"</span>);
-
-        <span class="code-keyword">try</span>
-        {
-            <span class="code-comment">// Create host activator;
-</span>            m_activator = <span class="code-keyword">new</span> HostActivator(m_lookupMap);
-            List list = <span class="code-keyword">new</span> ArrayList();
-            list.add(m_activator);
-
-            <span class="code-comment">// Now create an instance of the framework with
-</span>            <span class="code-comment">// our configuration properties and activator.
-</span>            m_felix = <span class="code-keyword">new</span> Felix(configMap, list);
-
-            <span class="code-comment">// Now start Felix instance.
-</span>            m_felix.start();
-        }
-        <span class="code-keyword">catch</span> (Exception ex)
-        {
-            <span class="code-object">System</span>.err.println(<span class="code-quote">"Could not create framework: "</span> + ex);
-            ex.printStackTrace();
-        }
-    }
-
-    <span class="code-keyword">public</span> void shutdownApplication()
-    {
-        <span class="code-comment">// Shut down the felix framework when stopping the
-</span>        <span class="code-comment">// host application.
-</span>        m_felix.shutdown();
-    }
-}</pre>
-</div></div>
-
-<p>Rather than having the host application bundle activator register
-the service, it is also possible for the the host application to simply
-get the bundle context from the bundle activator and register the
-service directly, but the presented approach is perhaps a little
-cleaner since it allows the host application to register/unregister the
-service when the system bundle starts/stops.</p>
-
-<p><a name="LaunchingandEmbeddingApacheFelix-hostserviceusage"></a></p>
-
-<h2><a name="LaunchingandEmbeddingApacheFelix-UsingServicesProvidedbyBundles"></a>Using Services Provided by Bundles</h2>
-
-<p>Using services provided by bundles follows the same general approach
-of using a host application bundle activator. The main complication for
-the host application using a service from a bundle is the fact that
-both the host application and the bundle must be using the same class
-definitions for the service interface classes. Since the host
-application cannot import classes from a bundle, this means that the
-service interface classes <b>must</b> be accessible on the class path,
-typically as part of the host application itself. The host application
-then must export the service interface package via the system bundle so
-that bundles installed into the embedded framework instance can import
-it. This is achieved using the <tt>org.osgi.framework.system.packages</tt> configuration property previously presented.</p>
-
-<p>Consider the following simple command service interface for which
-bundles provide implementations, such as might be used to create an
-extensible interactive shell:</p>
-
-<div class="code"><div class="codeContent">
-<pre class="code-java"><span class="code-keyword">package</span> host.service.command;
-
-<span class="code-keyword">public</span> class Command
-{
-    <span class="code-keyword">public</span> <span class="code-object">String</span> getName();
-    <span class="code-keyword">public</span> <span class="code-object">String</span> getDescription();
-    <span class="code-keyword">public</span> <span class="code-object">boolean</span> execute(<span class="code-object">String</span> commandline);
-}</pre>
-</div></div>
-
-<p>This package is simply part of the host application, which is potentially packaged into a JAR file and started with the "<tt>java -jar</tt>"
-command. Now consider the previously introduced host application bundle
-activator below, which simply provides access to the system bundle
-context:</p>
-
-<div class="code"><div class="codeContent">
-<pre class="code-java"><span class="code-keyword">package</span> host.core;
-
-<span class="code-keyword">import</span> org.osgi.framework.BundleActivator;
-<span class="code-keyword">import</span> org.osgi.framework.BundleContext;
-
-<span class="code-keyword">public</span> class HostActivator <span class="code-keyword">implements</span> BundleActivator
-{
-    <span class="code-keyword">private</span> BundleContext m_context = <span class="code-keyword">null</span>;
-
-    <span class="code-keyword">public</span> void start(BundleContext context)
-    {
-        m_context = context;
-    }
-
-    <span class="code-keyword">public</span> void stop(BundleContext context)
-    {
-        m_context = <span class="code-keyword">null</span>;
-    }
-
-    <span class="code-keyword">public</span> BundleContext getContext()
-    {
-        <span class="code-keyword">return</span> m_context;
-    }
-}</pre>
-</div></div>
-
-<p>With this bundle activator, the host application can command
-services provided by bundles installed inside its embedded Felix
-framework instance. The following code snippet illustrates one possible
-approach:</p>
-
-<div class="code"><div class="codeContent">
-<pre class="code-java"><span class="code-keyword">package</span> host.core;
-
-<span class="code-keyword">import</span> java.util.List;
-<span class="code-keyword">import</span> java.util.ArrayList;
-<span class="code-keyword">import</span> java.util.Map;
-<span class="code-keyword">import</span> host.service.command.Command;
-<span class="code-keyword">import</span> org.apache.felix.framework.Felix;
-<span class="code-keyword">import</span> org.apache.felix.framework.util.FelixConstants;
-<span class="code-keyword">import</span> org.apache.felix.framework.util.StringMap;
-<span class="code-keyword">import</span> org.apache.felix.framework.cache.BundleCache;
-<span class="code-keyword">import</span> org.osgi.util.tracker.ServiceTracker;
-
-<span class="code-keyword">public</span> class HostApplication
-{
-    <span class="code-keyword">private</span> HostActivator m_activator = <span class="code-keyword">null</span>;
-    <span class="code-keyword">private</span> Felix m_felix = <span class="code-keyword">null</span>;
-    <span class="code-keyword">private</span> ServiceTracker m_tracker = <span class="code-keyword">null</span>;
-
-    <span class="code-keyword">public</span> HostApplication()
-    {
-        <span class="code-comment">// Create a <span class="code-keyword">case</span>-insensitive configuration property map.
-</span>        Map configMap = <span class="code-keyword">new</span> StringMap(<span class="code-keyword">false</span>);
-        <span class="code-comment">// Configure the Felix instance to be embedded.
-</span>        configMap.put(FelixConstants.EMBEDDED_EXECUTION_PROP, <span class="code-quote">"<span class="code-keyword">true</span>"</span>);
-        <span class="code-comment">// Add the bundle provided service <span class="code-keyword">interface</span> <span class="code-keyword">package</span> and the core OSGi
-</span>        <span class="code-comment">// packages to be exported from the class path via the system bundle.
-</span>        configMap.put(Constants.FRAMEWORK_SYSTEMPACKAGES,
-            <span class="code-quote">"org.osgi.framework; version=1.3.0,"</span> +
-            <span class="code-quote">"org.osgi.service.packageadmin; version=1.2.0,"</span> +
-            <span class="code-quote">"org.osgi.service.startlevel; version=1.0.0,"</span> +
-            <span class="code-quote">"org.osgi.service.url; version=1.0.0,"</span> +
-            <span class="code-quote">"host.service.command; version=1.0.0"</span>);
-        <span class="code-comment">// Explicitly specify the directory to use <span class="code-keyword">for</span> caching bundles.
-</span>        configMap.put(BundleCache.CACHE_PROFILE_DIR_PROP, <span class="code-quote">"cache"</span>);
-
-        <span class="code-keyword">try</span>
-        {
-            <span class="code-comment">// Create host activator;
-</span>            m_activator = <span class="code-keyword">new</span> HostActivator(m_lookupMap);
-            List list = <span class="code-keyword">new</span> ArrayList();
-            list.add(m_activator);
-
-            <span class="code-comment">// Now create an instance of the framework with
-</span>            <span class="code-comment">// our configuration properties and activator.
-</span>            m_felix = <span class="code-keyword">new</span> Felix(configMap, list);
-
-            <span class="code-comment">// Now start Felix instance.
-</span>            m_felix.start();
-        }
-        <span class="code-keyword">catch</span> (Exception ex)
-        {
-            <span class="code-object">System</span>.err.println(<span class="code-quote">"Could not create framework: "</span> + ex);
-            ex.printStackTrace();
-        }
-
-        m_tracker = <span class="code-keyword">new</span> ServiceTracker(
-            m_activator.getContext(), Command.class.getName(), <span class="code-keyword">null</span>);
-        m_tracker.open();
-    }
-
-    <span class="code-keyword">public</span> <span class="code-object">boolean</span> execute(<span class="code-object">String</span> name, <span class="code-object">String</span> commandline)
-    {
-        <span class="code-comment">// See <span class="code-keyword">if</span> any of the currently tracked command services
-</span>        <span class="code-comment">// match the specified command name, <span class="code-keyword">if</span> so then execute it.
-</span>        <span class="code-object">Object</span>[] services = m_tracker.getServices();
-        <span class="code-keyword">for</span> (<span class="code-object">int</span> i = 0; (services != <span class="code-keyword">null</span>) &amp;&amp; (i &lt; services.length); i++)
-        {
-            <span class="code-keyword">try</span>
-            {
-                <span class="code-keyword">if</span> (((Command) services[i]).getName().equals(name))
-                {
-                    <span class="code-keyword">return</span> ((Command) services[i]).execute(commandline);
-                }
-            }
-            <span class="code-keyword">catch</span> (Exception ex)
-            {
-                <span class="code-comment">// Since the services returned by the tracker could become
-</span>                <span class="code-comment">// invalid at any moment, we will <span class="code-keyword">catch</span> all exceptions, log
-</span>                <span class="code-comment">// a message, and then ignore faulty services.
-</span>                <span class="code-object">System</span>.err.println(ex);
-            }
-        }
-        <span class="code-keyword">return</span> <span class="code-keyword">false</span>;
-    }
-
-    <span class="code-keyword">public</span> void shutdownApplication()
-    {
-        <span class="code-comment">// Shut down the felix framework when stopping the
-</span>        <span class="code-comment">// host application.
-</span>        m_felix.shutdown();
-    }
-}</pre>
-</div></div>
-
-<p>The above example is overly simplistic with respect to concurrency
-issues and error conditions, but it demonstrates the overall approach
-for using bundle-provided services from the host application. Note, to
-compile the above code you will need to compile against the Felix
-framework and Felix OSGi compendium JAR files, since the <tt>ServiceTracker</tt> classes are included in the compendium JAR file, not the framework JAR file.</p>
-
-<p><a name="LaunchingandEmbeddingApacheFelix-servicereflection"></a></p>
-
-<h3><a name="LaunchingandEmbeddingApacheFelix-UsingBundleServicesviaReflection"></a>Using Bundle Services via Reflection</h3>
-
-<p>It possible for the host application to use services provided by
-bundles without having access to the service interface classes and thus
-not needing to put the service interface classes on the class path. To
-do this, the host application uses the same general approach to acquire
-the system bundle context object, which it can use to look up service
-objects. Using either an LDAP filter or the service interface class
-name, the host application can retrieve the service object and then use
-standard Java reflection to invoke methods on the service object.</p>
-
-<p><a name="LaunchingandEmbeddingApacheFelix-caveat"></a></p>
-
-<h1><a name="LaunchingandEmbeddingApacheFelix-Caveat"></a>Caveat</h1>
-
-<p>The code in this document has not been thoroughly tested or even
-compiled and may be out of date with respect to the current Felix
-source code. If you find errors please report them so the that they can
-be corrected.</p>
-
-<p><a name="LaunchingandEmbeddingApacheFelix-feedback"></a></p>
-
-<h2><a name="LaunchingandEmbeddingApacheFelix-Feedback"></a>Feedback</h2>
-
-<p>Subscribe to the Felix users mailing list by sending a message to <span class="nobr"><a href="mailto:users-subscribe@felix.apache.org" title="Send mail to users-subscribe@felix.apache.org" rel="nofollow">users-subscribe@felix.apache.org<sup><img class="rendericon" src="launching-and-embedding-apache-felix_files/mail_small.gif" alt="" align="absmiddle" border="0" height="12" width="13"></sup></a></span>; after subscribing, email questions or feedback to <span class="nobr"><a href="mailto:users@felix.apache.org" title="Send mail to users@felix.apache.org" rel="nofollow">users@felix.apache.org<sup><img class="rendericon" src="launching-and-embedding-apache-felix_files/mail_small.gif" alt="" align="absmiddle" border="0" height="12" width="13"></sup></a></span>.</p>
-    </div>
-  </body></html>
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index e65cac2..b010e1ff 100644
--- a/pom.xml
+++ b/pom.xml
@@ -32,7 +32,7 @@
     <dependency>
       <groupId>${pom.groupId}</groupId>
       <artifactId>org.apache.felix.framework</artifactId>
-      <version>1.3.0-SNAPSHOT</version>
+      <version>1.4.0</version>
       <exclusions>
         <exclusion>
           <groupId>${pom.groupId}</groupId>
@@ -47,7 +47,7 @@
     <dependency>
       <groupId>${pom.groupId}</groupId>
       <artifactId>org.apache.felix.shell</artifactId>
-      <version>1.1.0-SNAPSHOT</version>
+      <version>1.0.2</version>
       <exclusions>
         <exclusion>
           <groupId>${pom.groupId}</groupId>
@@ -58,7 +58,7 @@
     <dependency>
       <groupId>${pom.groupId}</groupId>
       <artifactId>org.apache.felix.shell.tui</artifactId>
-      <version>1.1.0-SNAPSHOT</version>
+      <version>1.0.2</version>
       <exclusions>
         <exclusion>
           <groupId>${pom.groupId}</groupId>
@@ -69,7 +69,7 @@
     <dependency>
       <groupId>${pom.groupId}</groupId>
       <artifactId>org.apache.felix.bundlerepository</artifactId>
-      <version>1.3.0-SNAPSHOT</version>
+      <version>1.2.1</version>
       <exclusions>
         <exclusion>
           <groupId>${pom.groupId}</groupId>
@@ -136,7 +136,7 @@
                 <artifactItem>
                   <groupId>${pom.groupId}</groupId>
                   <artifactId>org.apache.felix.framework</artifactId>
-                  <version>1.3.0-SNAPSHOT</version>
+                  <version>1.4.0</version>
                 </artifactItem>
               </artifactItems>
             </configuration>
@@ -152,7 +152,7 @@
                   <artifactItem>
                      <groupId>${pom.groupId}</groupId>
                      <artifactId>org.apache.felix.shell</artifactId>
-                     <version>1.1.0-SNAPSHOT</version>
+                     <version>1.0.2</version>
                      <type>jar</type>
                      <overWrite>true</overWrite>
                      <outputDirectory>${project.build.directory}/bundle</outputDirectory>
@@ -160,7 +160,7 @@
                    <artifactItem>
                      <groupId>${pom.groupId}</groupId>
                      <artifactId>org.apache.felix.shell.tui</artifactId>
-                     <version>1.1.0-SNAPSHOT</version>
+                     <version>1.0.2</version>
                      <type>jar</type>
                      <overWrite>true</overWrite>
                      <outputDirectory>${project.build.directory}/bundle</outputDirectory>
@@ -168,7 +168,7 @@
                    <artifactItem>
                      <groupId>${pom.groupId}</groupId>
                      <artifactId>org.apache.felix.bundlerepository</artifactId>
-                     <version>1.3.0-SNAPSHOT</version>
+                     <version>1.2.1</version>
                      <type>jar</type>
                      <overWrite>true</overWrite>
                      <outputDirectory>${project.build.directory}/bundle</outputDirectory>
diff --git a/src/main/resources/config.properties b/src/main/resources/config.properties
index f99772c..b9d6e85 100644
--- a/src/main/resources/config.properties
+++ b/src/main/resources/config.properties
@@ -49,9 +49,9 @@
 #org.osgi.framework.storage.clean=onFirstInit
 
 felix.auto.start.1= \
- file:bundle/org.apache.felix.shell-1.1.0-SNAPSHOT.jar \
- file:bundle/org.apache.felix.shell.tui-1.1.0-SNAPSHOT.jar \
- file:bundle/org.apache.felix.bundlerepository-1.3.0-SNAPSHOT.jar 
+ file:bundle/org.apache.felix.shell-1.0.2.jar \
+ file:bundle/org.apache.felix.shell.tui-1.0.2.jar \
+ file:bundle/org.apache.felix.bundlerepository-1.2.1.jar 
 felix.log.level=${felix.log.level}
 
 # Sets the initial start level of the framework upon startup.
