Update changelog and doc for release
git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@811907 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/bundlerepository/doc/apache-felix-osgi-bundle-repository-obr.html b/bundlerepository/doc/apache-felix-osgi-bundle-repository-obr.html
deleted file mode 100644
index fd356d6..0000000
--- a/bundlerepository/doc/apache-felix-osgi-bundle-repository-obr.html
+++ /dev/null
@@ -1,484 +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 - Apache Felix OSGi Bundle Repository (OBR)</title>
-
-
-
-
- <link rel="stylesheet" href="apache-felix-osgi-bundle-repository-obr_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="apache-felix-osgi-bundle-repository-obr_files/logo.png" border="0"></a></div><div class="header"><a href="http://www.apache.org/"><img alt="Apache" src="apache-felix-osgi-bundle-repository-obr_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="apache-felix-osgi-bundle-repository-obr_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="apache-felix-osgi-bundle-repository-obr_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="apache-felix-osgi-bundle-repository-obr_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-osgi-bundle-repository-obr_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-osgi-bundle-repository-obr_files/linkext7.gif" alt="" align="absmiddle" border="0" height="7" width="7"></sup></a></span></li>
-</ul> </div>
- <div class="main">
-<h1><a name="ApacheFelixOSGiBundleRepository(OBR)-ApacheFelixOSGiBundleRepository(OBR)"></a>Apache Felix OSGi Bundle Repository (OBR)</h1>
-
-<ul>
- <li><a href="#ApacheFelixOSGiBundleRepository%2528OBR%2529-motivation" title="motivation on Apache Felix OSGi Bundle Repository (OBR)">Motivation</a></li>
- <li><a href="#ApacheFelixOSGiBundleRepository%2528OBR%2529-overview" title="overview on Apache Felix OSGi Bundle Repository (OBR)">Overview</a></li>
- <li><a href="#ApacheFelixOSGiBundleRepository%2528OBR%2529-repositoryfile" title="repository-file on Apache Felix OSGi Bundle Repository (OBR)">OBR Repository File</a></li>
- <li><a href="#ApacheFelixOSGiBundleRepository%2528OBR%2529-serviceapi" title="service-api on Apache Felix OSGi Bundle Repository (OBR)">OBR Service API</a></li>
- <li><a href="#ApacheFelixOSGiBundleRepository%2528OBR%2529-shellcommand" title="shell-command on Apache Felix OSGi Bundle Repository (OBR)">OBR Shell Command</a>
- <ul>
- <li><a href="#ApacheFelixOSGiBundleRepository%2528OBR%2529-obrhelp" title="obr-help on Apache Felix OSGi Bundle Repository (OBR)"><tt>obr help</tt></a></li>
- <li><a href="#ApacheFelixOSGiBundleRepository%2528OBR%2529-obrlisturl" title="obr-list-url on Apache Felix OSGi Bundle Repository (OBR)"><tt>obr list-url</tt></a></li>
- <li><a href="#ApacheFelixOSGiBundleRepository%2528OBR%2529-obraddurl" title="obr-add-url on Apache Felix OSGi Bundle Repository (OBR)"><tt>obr add-url</tt></a></li>
- <li><a href="#ApacheFelixOSGiBundleRepository%2528OBR%2529-obrremoveurl" title="obr-remove-url on Apache Felix OSGi Bundle Repository (OBR)"><tt>obr remove-url</tt></a></li>
- <li><a href="#ApacheFelixOSGiBundleRepository%2528OBR%2529-obrlist" title="obr-list on Apache Felix OSGi Bundle Repository (OBR)"><tt>obr list</tt></a></li>
- <li><a href="#ApacheFelixOSGiBundleRepository%2528OBR%2529-obrinfo" title="obr-info on Apache Felix OSGi Bundle Repository (OBR)"><tt>obr info</tt></a></li>
- <li><a href="#ApacheFelixOSGiBundleRepository%2528OBR%2529-obrdeploy" title="obr-deploy on Apache Felix OSGi Bundle Repository (OBR)"><tt>obr deploy</tt></a></li>
- <li><a href="#ApacheFelixOSGiBundleRepository%2528OBR%2529-obrstart" title="obr-start on Apache Felix OSGi Bundle Repository (OBR)"><tt>obr start</tt></a></li>
- <li><a href="#ApacheFelixOSGiBundleRepository%2528OBR%2529-obrsource" title="obr-source on Apache Felix OSGi Bundle Repository (OBR)"><tt>obr source</tt></a></li>
- </ul>
- </li>
- <li><a href="#ApacheFelixOSGiBundleRepository%2528OBR%2529-proxy" title="proxy on Apache Felix OSGi Bundle Repository (OBR)">Using OBR with a Proxy</a></li>
- <li><a href="#ApacheFelixOSGiBundleRepository%2528OBR%2529-sourcepackaging" title="source-packaging on Apache Felix OSGi Bundle Repository (OBR)">Bundle Source Packaging</a></li>
- <li><a href="#ApacheFelixOSGiBundleRepository%2528OBR%2529-feedback" title="feedback on Apache Felix OSGi Bundle Repository (OBR)">Feedback</a></li>
-</ul>
-
-
-<p><a name="ApacheFelixOSGiBundleRepository(OBR)-motivation"></a></p>
-
-<h2><a name="ApacheFelixOSGiBundleRepository(OBR)-Motivation"></a>Motivation</h2>
-
-<p>The goal of the Apache Felix OSGi Bundle Repository (OBR) is two-fold:</p>
-
-<ol>
- <li>To simplify deploying and using available bundles with Felix.</li>
- <li>To encourage independent bundle development so that communities of interest can grow.</li>
-</ol>
-
-
-<p>OBR achieves the first goal by providing a service that can
-automatically install a bundle, with its deployment dependencies, from
-a bundle repository. This makes it easier for people to experiment with
-existing bundles. The second goal is achieved by raising the visibility
-of the available bundles and providing access to both the executable
-bundle and its source code. Hopefully, by making OBR and the bundles
-themselves more visible, community members will be encouraged to
-provide or improve service implementations.</p>
-
-<p>Note: OBR provides access to the Felix' default bundle repository,
-but you can also use it to deploy your own bundles by creating a bundle
-repository meta-data file for your local bundles; see the <tt>obr list-url</tt>, <tt>obr add-url</tt>, and <tt>obr remove-url</tt> commands for more details.</p>
-
-<p><a name="ApacheFelixOSGiBundleRepository(OBR)-overview"></a></p>
-
-<h2><a name="ApacheFelixOSGiBundleRepository(OBR)-Overview"></a>Overview</h2>
-
-<p>For the most part, OBR is quite simple. An OBR "repository server"
-is not necessary, since all functionality may reside on the client
-side. OBR is able to provide its functionality by reading an XML-based
-meta-data file that describes the bundles available to it. The
-meta-data file essentially contains an XML encoding of the bundles'
-manifest information. From the meta-data, OBR is able to construct
-dependency information for deploying (i.e., installing and updating)
-bundles.</p>
-
-<p>OBR defines the following entities:</p>
-
-<ul>
- <li><em><b>Repository Admin</b></em> - a service to access a federation of repositories.</li>
- <li><em><b>Repository</b></em> - provides access to a set of resources.</li>
- <li><em><b>Resource</b></em> - a description of an artifact to be installed on a device.</li>
- <li><em><b>Capability</b></em> - a named set of properties.</li>
- <li><em><b>Requirement</b></em> - an assertion on a capability.</li>
- <li><em><b>Resolver</b></em> - an object to resolve resource dependencies and to deploy them.</li>
- <li><em><b>Repository file</b></em> - XML file containing resource meta-data.</li>
-</ul>
-
-
-<p>The following diagram illustrates the relationships among these entities:</p>
-
-<p><img src="apache-felix-osgi-bundle-repository-obr_files/obr-entities.png" align="absmiddle" border="0"></p>
-
-<p>The client has access to a federated set of repositories via the Repository Admin service; such as depicted in this view:</p>
-
-<p><img src="apache-felix-osgi-bundle-repository-obr_files/obr-high-level.png" align="absmiddle" border="0"></p>
-
-<p><a name="ApacheFelixOSGiBundleRepository(OBR)-repositoryfile"></a></p>
-
-<h2><a name="ApacheFelixOSGiBundleRepository(OBR)-OBRRepositoryFile"></a>OBR Repository File</h2>
-
-<p>The OBR repository file is an XML-based representation of bundle
-meta-data. The goal is provide a generic model for describing
-dependencies among resources; as such, the term <em><b>resource</b></em> is used instead of <em><b>bundle</b></em> in the OBR repository syntax; a detailed description of the OBR meta-data format is available in the <span class="nobr"><a href="http://www2.osgi.org/download/rfc-0112_BundleRepository.pdf" title="Visit page outside Confluence" rel="nofollow">OSGi RFC 112<sup><img class="rendericon" src="apache-felix-osgi-bundle-repository-obr_files/linkext7.gif" alt="" align="absmiddle" border="0" height="7" width="7"></sup></a></span>
-document; this document is not completely in sync with the
-implementation, but the concepts are still correct. The following XML
-snippet depicts the overall structure of a repository file:</p>
-
-<div class="preformatted"><div class="preformattedContent">
-<pre><repository presentationname="..." symbolicname="..." ... >
- <resource>
- <description>...</description>
- <size>...</size>
- <documentation>...</documentation>
- <source>...</source>
- <category id="..."/>
- <capability>...</capability>
- ...
- <requirement>...</requirement>
- ...
- </resource>
- ...
-</repository>
-</pre>
-</div></div>
-
-<p>The above repository defines a set of available resources, each
-described by a set of meta-data. Some resource meta-data is purely
-intended for human consumption; the most important aspects relate to
-the generic capability/requirement model.</p>
-
-<p>A resource can provide any number of capabilities. A capability is a
-typed set of properties. For example, the following is an exported
-package capability:</p>
-
-<div class="preformatted"><div class="preformattedContent">
-<pre><capability name='package'>
- <p n='package' v='org.foo.bar'/>
- <p n='version' t='version' v='1.0.0'/>
-</capability>
-</pre>
-</div></div>
-
-<p>This capability is of type 'package' and exports 'org.foo.bar' at
-version '1.0.0'. Conversely, a requirement is a typed LDAP query over a
-set of capability properties. For example, the following is an imported
-package requirement:</p>
-
-<div class="preformatted"><div class="preformattedContent">
-<pre><require name='package' extend='false'
- multiple='false' optional='false'
- filter='(&amp;(package=org.foo.bar)(version&gt;=1.0.0))'>
- Import package org.foo.bar
-</require>
-</pre>
-</div></div>
-
-<p>This requirement is of type 'package' and imports 'org.foo.bar' at
-versions greater than '1.0.0'. Although this syntax looks rather
-complicated with the '\&' and '\>=' syntax, it is simply the
-standard OSGi LDAP query syntax in XML form (additionally, Peter Kriens
-has created a tool called <tt>bindex</tt> to generate this meta-data from a bundle's manifest).</p>
-
-<p>With this generic dependency model, OBR is able to provide mappings
-for the various OSGi bundle dependencies; e.g., import/export package,
-provide/require bundle, host/fragment, import/export service, execution
-environment, and native code. In addition, it is possible for bundles
-to introduce arbitrary dependencies for custom purposes.</p>
-
-<p>Two other important pieces of meta-data are <tt>Bundle-SymbolicName</tt> and <tt>Bundle-Version</tt>;
-these are standard OSGi bundle manifest attributes that OBR uses to
-uniquely identify a bundle. For example, if you want to use OBR to
-update a locally installed bundle, OBR gets its symbolic name and
-version and searches the repository metadata for a matching symbolic
-name. If the matching symbolic name is found, then OBR checks if there
-is a newer version than the local copy using the bundle version number.
-Thus, the symbolic name plus bundle version forms a unique key to match
-locally installed bundles to remotely available bundles.</p>
-
-<p><a name="ApacheFelixOSGiBundleRepository(OBR)-serviceapi"></a></p>
-
-<h2><a name="ApacheFelixOSGiBundleRepository(OBR)-OBRServiceAPI"></a>OBR Service API</h2>
-
-<p>Typically, OBR service clients only need to interact with the
-Repository Admin service, which provides the mechanisms necessary to
-discover available resources. The Repository Admin interface is defined
-as follows:</p>
-
-<div class="code"><div class="codeContent">
-<pre class="code-java"><span class="code-keyword">public</span> <span class="code-keyword">interface</span> RepositoryAdmin
-{
- <span class="code-keyword">public</span> Resource[] discoverResources(<span class="code-object">String</span> filterExpr);
- <span class="code-keyword">public</span> Resolver resolver();
- <span class="code-keyword">public</span> Repository addRepository(URL repository)?
- <span class="code-keyword">throws</span> Exception;
- <span class="code-keyword">public</span> <span class="code-object">boolean</span> removeRepository(URL repository);
- <span class="code-keyword">public</span> Repository[] listRepositories();
- <span class="code-keyword">public</span> Resource getResource(<span class="code-object">String</span> respositoryId);
-}</pre>
-</div></div>
-
-<p>In order to resolve and deploy available resources, the Repository
-Admin provides Resolver instances, which are defined as follows:</p>
-
-<div class="code"><div class="codeContent">
-<pre class="code-java"><span class="code-keyword">public</span> <span class="code-keyword">interface</span> Resolver
-{
- <span class="code-keyword">public</span> void add(Resource resource);
- <span class="code-keyword">public</span> Requirement[] getUnsatisfiedRequirements();
- <span class="code-keyword">public</span> Resource[] getOptionalResources();
- <span class="code-keyword">public</span> Requirement[] getReason(Resource resource);
- <span class="code-keyword">public</span> Resource[] getResources(Requirement requirement);
- <span class="code-keyword">public</span> Resource[] getRequiredResources();
- <span class="code-keyword">public</span> Resource[] getAddedResources();
- <span class="code-keyword">public</span> <span class="code-object">boolean</span> resolve();
- <span class="code-keyword">public</span> void deploy(<span class="code-object">boolean</span> start);
-}</pre>
-</div></div>
-
-<p>When desired resources are discovered via the query mechanisms of
-the Repository Admin, they are added to a Resolver instance which will
-can be used to resolve all transitive dependencies and to reflect on
-any resolution result. The following code snippet depicts a typical
-usage scenario:</p>
-
-<div class="code"><div class="codeContent">
-<pre class="code-java">RepositoryAdmin repoAdmin = ... <span class="code-comment">// Get repo admin service
-</span>Resolver resolver = repoAdmin.resolver();
-Resource resource = repoAdmin.discoverResources(filterStr);
-resolver.add(resource);
-<span class="code-keyword">if</span> (resolver.resolve())
-{
- resolver.deploy(<span class="code-keyword">true</span>);
-}
-<span class="code-keyword">else</span>
-{
- Requirement[] reqs = resolver.getUnsatisfiedRequirements();
- <span class="code-keyword">for</span> (<span class="code-object">int</span> i = 0; i < reqs.length; i++)
- {
- <span class="code-object">System</span>.out.println(<span class="code-quote">"Unable to resolve: "</span> + reqs[i]);
- }
-}</pre>
-</div></div>
-
-<p>This code gets the Repository Admin service and then gets a Resolver
-instance from it. It then discovers an available resource and adds it
-to the resolver. Then it tries to resolve the resources dependencies.
-If successful it deploys the resource to the local framework instance;
-if not successful it prints the unsatisfied requirements.</p>
-
-<p>OBR's deployment algorithm appears simple at first glance, but it is
-actually somewhat complex due to the nature of deploying independently
-developed bundles. For example, in an ideal world, if an update for a
-bundle is made available, then updates for all of the bundles
-satisfying its dependencies are also made available. Unfortunately,
-this may not be the case, thus the deployment algorithm might have to
-install new bundles during an update to satisfy either new dependencies
-or updated dependencies that can no longer be satisfied by existing
-local bundles. In response to this type of scenario, the OBR deployment
-algorithm tries to favor updating existing bundles, if possible, as
-opposed to installing new bundles to satisfy dependencies.</p>
-
-<p>In the general case, OBR user's will not use the OBR API directly,
-but will use its functionality indirectly from another tool or user
-interface. For example, interactive access to OBR is available via a
-command for Felix' <a href="http://cwiki.apache.org/FELIX/apache-felix-shell-service.html" title="Apache Felix Shell Service">shell service</a>. The OBR shell command is discussed in the next section.</p>
-
-<p><a name="ApacheFelixOSGiBundleRepository(OBR)-shellcommand"></a></p>
-
-<h2><a name="ApacheFelixOSGiBundleRepository(OBR)-OBRShellCommand"></a>OBR Shell Command</h2>
-
-<p>Besides providing a service API, OBR implements a Felix shell
-command for accessing its functionality. For the end user, the OBR
-shell command is accessed using the text-based or GUI-based user
-interfaces for Felix' shell service. This section describes the syntax
-for the OBR shell command.</p>
-
-<p><a name="ApacheFelixOSGiBundleRepository(OBR)-obrhelp"></a></p>
-
-<h3><a name="ApacheFelixOSGiBundleRepository(OBR)-{{obrhelp}}"></a><tt>obr help</tt></h3>
-
-<p>Syntax:</p>
-<div class="preformatted"><div class="preformattedContent">
-<pre>obr help [urls | list | info | install | deploy | start | update | source]
-</pre>
-</div></div>
-<p>This command is used to display additional information about the other OBR commands.</p>
-
-<p><a name="ApacheFelixOSGiBundleRepository(OBR)-obrlisturl"></a></p>
-
-<h3><a name="ApacheFelixOSGiBundleRepository(OBR)-{{obrlisturl}}"></a><tt>obr list-url</tt></h3>
-
-<p>Syntax:</p>
-<div class="preformatted"><div class="preformattedContent">
-<pre>obr list-url
-</pre>
-</div></div>
-<p>This command gets the URLs to the repository files used by the Repository Admin.</p>
-
-<p><a name="ApacheFelixOSGiBundleRepository(OBR)-obraddurl"></a></p>
-
-<h3><a name="ApacheFelixOSGiBundleRepository(OBR)-{{obraddurl}}"></a><tt>obr add-url</tt></h3>
-
-<p>Syntax:</p>
-<div class="preformatted"><div class="preformattedContent">
-<pre>obr add-url [<repository-file-url> ...]
-</pre>
-</div></div>
-<p>This command adds a repository file to the set of repository files
-for which the Repository Admin service provides access. The repository
-file is represented as a URL. If the repository file URL is already in
-the Repository Admin's set of repository files, the request is treated
-like a reload operation.</p>
-
-<p><a name="ApacheFelixOSGiBundleRepository(OBR)-obrremoveurl"></a></p>
-
-<h3><a name="ApacheFelixOSGiBundleRepository(OBR)-{{obrremoveurl}}"></a><tt>obr remove-url</tt></h3>
-
-<p>Syntax:</p>
-<div class="preformatted"><div class="preformattedContent">
-<pre>obr remove-url [<repository-file-url> ...]
-</pre>
-</div></div>
-<p>This command removes a repository file to the set of repository
-files for which the Repository Admin service provides access. The
-repository file is represented as a URL.</p>
-
-<p><a name="ApacheFelixOSGiBundleRepository(OBR)-obrlist"></a></p>
-
-<h3><a name="ApacheFelixOSGiBundleRepository(OBR)-{{obrlist}}"></a><tt>obr list</tt></h3>
-
-<p>Syntax:</p>
-<div class="preformatted"><div class="preformattedContent">
-<pre>obr list [<string> ...]
-</pre>
-</div></div>
-<p>This command lists bundles available in the bundle repository. If no
-arguments are specified, then all available bundles are listed,
-otherwise any arguments are concatenated with spaces and used as a
-substring filter on the bundle names.</p>
-
-<p><a name="ApacheFelixOSGiBundleRepository(OBR)-obrinfo"></a></p>
-
-<h3><a name="ApacheFelixOSGiBundleRepository(OBR)-{{obrinfo}}"></a><tt>obr info</tt></h3>
-
-<p>Syntax:</p>
-<div class="preformatted"><div class="preformattedContent">
-<pre>obr info <bundle-name>[;<version>] ...
-</pre>
-</div></div>
-<p>This command displays the meta-data for the specified bundles. If a
-bundle's name contains spaces, then it must be surrounded by quotes. It
-is also possible to specify a precise version if more than one version
-exists, such as:</p>
-<div class="preformatted"><div class="preformattedContent">
-<pre>obr info "Bundle Repository";1.0.0
-</pre>
-</div></div>
-<p>The above example retrieves the meta-data for version "1.0.0" of the bundle named "Bundle Repository".</p>
-
-<p><a name="ApacheFelixOSGiBundleRepository(OBR)-obrdeploy"></a></p>
-
-<h3><a name="ApacheFelixOSGiBundleRepository(OBR)-{{obrdeploy}}"></a><tt>obr deploy</tt></h3>
-
-<p>Syntax:</p>
-<div class="preformatted"><div class="preformattedContent">
-<pre>obr deploy [-nodeps] <bundle-name>[;<version>] ... | <bundle-id> ...
-</pre>
-</div></div>
-<p>This command tries to install or update the specified bundles and
-all of their dependencies by default; use the "-nodeps" switch to
-ignore dependencies. You can specify either the bundle name or the
-bundle identifier. If a bundle's name contains spaces, then it must be
-surrounded by quotes. It is also possible to specify a precise version
-if more than one version exists, such as:</p>
-<div class="preformatted"><div class="preformattedContent">
-<pre>obr deploy "Bundle Repository";1.0.0
-</pre>
-</div></div>
-<p>For the above example, if version "1.0.0" of "Bundle Repository" is
-already installed locally, then the command will attempt to update it
-and all of its dependencies; otherwise, the command will install it and
-all of its dependencies.</p>
-
-<p><a name="ApacheFelixOSGiBundleRepository(OBR)-obrstart"></a></p>
-
-<h3><a name="ApacheFelixOSGiBundleRepository(OBR)-{{obrstart}}"></a><tt>obr start</tt></h3>
-
-<p>Syntax:</p>
-<div class="preformatted"><div class="preformattedContent">
-<pre>obr start [-nodeps] <bundle-name>[;<version>] ...
-</pre>
-</div></div>
-<p>This command installs and starts the specified bundles and all of
-their dependencies by default; use the "-nodeps" switch to ignore
-dependencies. If a bundle's name contains spaces, then it must be
-surrounded by quotes. If a specified bundle is already installed, then
-this command has no effect. It is also possible to specify a precise
-version if more than one version exists, such as:</p>
-<div class="preformatted"><div class="preformattedContent">
-<pre>obr start "Bundle Repository";1.0.0
-</pre>
-</div></div>
-<p>The above example installs and starts the "1.0.0" version of the bundle named "Bundle Repository" and its dependencies.</p>
-
-<p><a name="ApacheFelixOSGiBundleRepository(OBR)-obrsource"></a></p>
-
-<h3><a name="ApacheFelixOSGiBundleRepository(OBR)-{{obrsource}}"></a><tt>obr source</tt></h3>
-
-<p>Syntax:</p>
-<div class="preformatted"><div class="preformattedContent">
-<pre>obr source [-x] <local-dir> <bundle-name>[;<version>] ...
-</pre>
-</div></div>
-<p>This command retrieves the source archives of the specified bundles
-and saves them to the specified local directory; use the "-x" switch to
-automatically extract the source archives. If a bundle name contains
-spaces, then it must be surrounded by quotes. It is also possible to
-specify a precise version if more than one version exists, such as:</p>
-<div class="preformatted"><div class="preformattedContent">
-<pre>obr source /home/rickhall/tmp "Bundle Repository";1.0.0
-</pre>
-</div></div>
-<p>The above example retrieves the source archive of version "1.0.0" of
-the bundle named "Bundle Repository" and saves it to the specified
-local directory.</p>
-
-<p><a name="ApacheFelixOSGiBundleRepository(OBR)-proxy"></a></p>
-
-<h2><a name="ApacheFelixOSGiBundleRepository(OBR)-UsingOBRwithaProxy"></a>Using OBR with a Proxy</h2>
-
-<p>If you use a proxy for Web access, then OBR will not work for you in
-its default configuration; certain system properties must be set to
-enable OBR to work with a proxy. These properties are:</p>
-
-<ul>
- <li>http.proxyHost - the name of the proxy host.</li>
- <li>http.proxyPort - the port of the proxy host.</li>
- <li>http.proxyAuth
-- the user name and password to use when connecting to the proxy; this
-string should be the user name and password separated by a colon (e.g.,
-rickhall:mypassword).</li>
-</ul>
-
-
-<p>These system properties can be set directly on the command line when
-starting the JVM using the standard "-D<prop>=<value>"
-syntax or you can put them in the lib/system.properties file of your
-Felix installation; see documentation on configuring Felix for more
-information.</p>
-
-<p><a name="ApacheFelixOSGiBundleRepository(OBR)-sourcepackaging"></a></p>
-
-<h2><a name="ApacheFelixOSGiBundleRepository(OBR)-BundleSourcePackaging"></a>Bundle Source Packaging</h2>
-
-<p>Coming soon...</p>
-
-<p><a name="ApacheFelixOSGiBundleRepository(OBR)-feedback"></a></p>
-
-<h2><a name="ApacheFelixOSGiBundleRepository(OBR)-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-osgi-bundle-repository-obr_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-osgi-bundle-repository-obr_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/bundlerepository/doc/apache-felix-osgi-bundle-repository.html b/bundlerepository/doc/apache-felix-osgi-bundle-repository.html
new file mode 100644
index 0000000..825a9ff
--- /dev/null
+++ b/bundlerepository/doc/apache-felix-osgi-bundle-repository.html
@@ -0,0 +1,524 @@
+<!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 OSGi Bundle Repository</title>
+ <link rel="stylesheet" href="apache-felix-osgi-bundle-repository_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-osgi-bundle-repository_files/logo.png" border="0"></a></div><div class="header"><a href="http://www.apache.org/"><img alt="Apache" src="apache-felix-osgi-bundle-repository_files/apache.png" border="0"></a></div></div>
+ <div class="menu">
+<ul>
+ <li><a href="http://cwiki.apache.org/FELIX/news.html" title="news">news</a></li>
+ <li><a href="http://cwiki.apache.org/FELIX/license.html" title="license">license</a></li>
+ <li><a href="http://felix.apache.org/site/downloads.cgi" rel="nofollow">downloads</a></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><a href="http://cwiki.apache.org/FELIX/contributing.html" title="Contributing">contributing</a></li>
+ <li><a href="http://www.apache.org/" rel="nofollow">asf</a></li>
+ <li><a href="http://www.apache.org/foundation/sponsorship.html" rel="nofollow">sponsorship</a></li>
+ <li><a href="http://www.apache.org/foundation/thanks.html" rel="nofollow">sponsors</a>
+<!-- ApacheCon Ad -->
+<iframe src="apache-felix-osgi-bundle-repository_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="ApacheFelixOSGiBundleRepository-ApacheFelixOSGiBundleRepository(OBR)"></a>Apache Felix OSGi Bundle Repository (OBR)</h1>
+
+<div>
+<ul>
+ <li><a href="#ApacheFelixOSGiBundleRepository-Motivation">Motivation</a></li>
+ <li><a href="#ApacheFelixOSGiBundleRepository-Overview">Overview</a></li>
+ <li><a href="#ApacheFelixOSGiBundleRepository-OBRRepositoryFile">OBR Repository File</a></li>
+ <li><a href="#ApacheFelixOSGiBundleRepository-OBRServiceAPI">OBR Service API</a></li>
+ <li><a href="#ApacheFelixOSGiBundleRepository-OBRShellCommand">OBR Shell Command</a></li>
+<ul>
+ <li><a href="#ApacheFelixOSGiBundleRepository-obrhelp">obr help</a></li>
+ <li><a href="#ApacheFelixOSGiBundleRepository-obrlisturl">obr list-url</a></li>
+ <li><a href="#ApacheFelixOSGiBundleRepository-obraddurl">obr add-url</a></li>
+ <li><a href="#ApacheFelixOSGiBundleRepository-obrremoveurl">obr remove-url</a></li>
+ <li><a href="#ApacheFelixOSGiBundleRepository-obrlist">obr list</a></li>
+ <li><a href="#ApacheFelixOSGiBundleRepository-obrinfo">obr info</a></li>
+ <li><a href="#ApacheFelixOSGiBundleRepository-obrdeploy">obr deploy</a></li>
+ <li><a href="#ApacheFelixOSGiBundleRepository-obrstart">obr start</a></li>
+ <li><a href="#ApacheFelixOSGiBundleRepository-obrsource">obr source</a></li>
+ <li><a href="#ApacheFelixOSGiBundleRepository-obrjavadoc">obr javadoc</a></li>
+</ul>
+ <li><a href="#ApacheFelixOSGiBundleRepository-UsingOBRwithaProxy">Using OBR with a Proxy</a></li>
+ <li><a href="#ApacheFelixOSGiBundleRepository-BundleSourcePackaging">Bundle Source Packaging</a></li>
+ <li><a href="#ApacheFelixOSGiBundleRepository-NoteonOSGiR3Bundles">Note on OSGi R3 Bundles</a></li>
+ <li><a href="#ApacheFelixOSGiBundleRepository-Feedback">Feedback</a></li>
+</ul></div>
+
+<p><a name="ApacheFelixOSGiBundleRepository-motivation"></a></p>
+
+<h2><a name="ApacheFelixOSGiBundleRepository-Motivation"></a>Motivation</h2>
+
+<p>The goal of the Apache Felix OSGi Bundle Repository (OBR) is two-fold:</p>
+
+<ol>
+ <li>To simplify deploying and using available bundles with Felix.</li>
+ <li>To encourage independent bundle development so that communities of interest can grow.</li>
+</ol>
+
+
+<p>OBR achieves the first goal by providing a service that can
+automatically install a bundle, with its deployment dependencies, from
+a bundle repository. This makes it easier for people to experiment with
+existing bundles. The second goal is achieved by raising the visibility
+of the available bundles and providing access to both the executable
+bundle and its source code. Hopefully, by making OBR and the bundles
+themselves more visible, community members will be encouraged to
+provide or improve service implementations.</p>
+
+<p>Note: OBR provides access to the Felix' default bundle repository,
+but you can also use it to deploy your own bundles by creating a bundle
+repository meta-data file for your local bundles; see the <tt>obr list-url</tt>, <tt>obr add-url</tt>, and <tt>obr remove-url</tt> commands for more details.</p>
+
+<p><a name="ApacheFelixOSGiBundleRepository-overview"></a></p>
+
+<h2><a name="ApacheFelixOSGiBundleRepository-Overview"></a>Overview</h2>
+
+<p>For the most part, OBR is quite simple. An OBR "repository server"
+is not necessary, since all functionality may reside on the client
+side. OBR is able to provide its functionality by reading an XML-based
+meta-data file that describes the bundles available to it. The
+meta-data file essentially contains an XML encoding of the bundles'
+manifest information. From the meta-data, OBR is able to construct
+dependency information for deploying (i.e., installing and updating)
+bundles.</p>
+
+<p>OBR defines the following entities:</p>
+
+<ul>
+ <li><em><b>Repository Admin</b></em> - a service to access a federation of repositories.</li>
+ <li><em><b>Repository</b></em> - provides access to a set of resources.</li>
+ <li><em><b>Resource</b></em> - a description of an artifact to be installed on a device.</li>
+ <li><em><b>Capability</b></em> - a named set of properties.</li>
+ <li><em><b>Requirement</b></em> - an assertion on a capability.</li>
+ <li><em><b>Resolver</b></em> - an object to resolve resource dependencies and to deploy them.</li>
+ <li><em><b>Repository file</b></em> - XML file containing resource meta-data.</li>
+</ul>
+
+
+<p>The following diagram illustrates the relationships among these entities:</p>
+
+<p><img src="apache-felix-osgi-bundle-repository_files/obr-entities.png" align="absmiddle" border="0"></p>
+
+<p>The client has access to a federated set of repositories via the Repository Admin service; such as depicted in this view:</p>
+
+<p><img src="apache-felix-osgi-bundle-repository_files/obr-high-level.png" align="absmiddle" border="0"></p>
+
+<p><a name="ApacheFelixOSGiBundleRepository-repositoryfile"></a></p>
+
+<h2><a name="ApacheFelixOSGiBundleRepository-OBRRepositoryFile"></a>OBR Repository File</h2>
+
+<p>The OBR repository file is an XML-based representation of bundle
+meta-data. The goal is provide a generic model for describing
+dependencies among resources; as such, the term <em><b>resource</b></em> is used instead of <em><b>bundle</b></em> in the OBR repository syntax; a detailed description of the OBR meta-data format is available in the <a href="http://www2.osgi.org/download/rfc-0112_BundleRepository.pdf" rel="nofollow">OSGi RFC 112</a>
+document; this document is not completely in sync with the
+implementation, but the concepts are still correct. The following XML
+snippet depicts the overall structure of a repository file:</p>
+
+<div class="preformatted panel" style="border-width: 1px;"><div class="preformattedContent panelContent">
+<pre><repository presentationname="..." symbolicname="..." ... >
+ <resource>
+ <description>...</description>
+ <size>...</size>
+ <documentation>...</documentation>
+ <source>...</source>
+ <category id="..."/>
+ <capability>...</capability>
+ ...
+ <requirement>...</requirement>
+ ...
+ </resource>
+ ...
+</repository>
+</pre>
+</div></div>
+
+<p>The above repository defines a set of available resources, each
+described by a set of meta-data. Some resource meta-data is purely
+intended for human consumption; the most important aspects relate to
+the generic capability/requirement model.</p>
+
+<p>A resource can provide any number of capabilities. A capability is a
+typed set of properties. For example, the following is an exported
+package capability:</p>
+
+<div class="preformatted panel" style="border-width: 1px;"><div class="preformattedContent panelContent">
+<pre><capability name='package'>
+ <p n='package' v='org.foo.bar'/>
+ <p n='version' t='version' v='1.0.0'/>
+</capability>
+</pre>
+</div></div>
+
+<p>This capability is of type 'package' and exports 'org.foo.bar' at
+version '1.0.0'. Conversely, a requirement is a typed LDAP query over a
+set of capability properties. For example, the following is an imported
+package requirement:</p>
+
+<div class="preformatted panel" style="border-width: 1px;"><div class="preformattedContent panelContent">
+<pre><require name='package' extend='false'
+ multiple='false' optional='false'
+ filter='(&amp;(package=org.foo.bar)(version&gt;=1.0.0))'>
+ Import package org.foo.bar
+</require>
+</pre>
+</div></div>
+
+<p>This requirement is of type 'package' and imports 'org.foo.bar' at
+versions greater than '1.0.0'. Although this syntax looks rather
+complicated with the '\&' and '\>=' syntax, it is simply the
+standard OSGi LDAP query syntax in XML form (additionally, Peter Kriens
+has created a tool called <tt>bindex</tt> to generate this meta-data from a bundle's manifest).</p>
+
+<p>With this generic dependency model, OBR is able to provide mappings
+for the various OSGi bundle dependencies; e.g., import/export package,
+provide/require bundle, host/fragment, import/export service, execution
+environment, and native code. In addition, it is possible for bundles
+to introduce arbitrary dependencies for custom purposes.</p>
+
+<p>Two other important pieces of meta-data are <tt>Bundle-SymbolicName</tt> and <tt>Bundle-Version</tt>;
+these are standard OSGi bundle manifest attributes that OBR uses to
+uniquely identify a bundle. For example, if you want to use OBR to
+update a locally installed bundle, OBR gets its symbolic name and
+version and searches the repository metadata for a matching symbolic
+name. If the matching symbolic name is found, then OBR checks if there
+is a newer version than the local copy using the bundle version number.
+Thus, the symbolic name plus bundle version forms a unique key to match
+locally installed bundles to remotely available bundles.</p>
+
+<p><a name="ApacheFelixOSGiBundleRepository-serviceapi"></a></p>
+
+<h2><a name="ApacheFelixOSGiBundleRepository-OBRServiceAPI"></a>OBR Service API</h2>
+
+<p>Typically, OBR service clients only need to interact with the
+Repository Admin service, which provides the mechanisms necessary to
+discover available resources. The Repository Admin interface is defined
+as follows:</p>
+
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-java"><span class="code-keyword">public</span> <span class="code-keyword">interface</span> RepositoryAdmin
+{
+ <span class="code-keyword">public</span> Resource[] discoverResources(<span class="code-object">String</span> filterExpr);
+ <span class="code-keyword">public</span> Resolver resolver();
+ <span class="code-keyword">public</span> Repository addRepository(URL repository)?
+ <span class="code-keyword">throws</span> Exception;
+ <span class="code-keyword">public</span> <span class="code-object">boolean</span> removeRepository(URL repository);
+ <span class="code-keyword">public</span> Repository[] listRepositories();
+ <span class="code-keyword">public</span> Resource getResource(<span class="code-object">String</span> respositoryId);
+}
+</pre>
+</div></div>
+
+<p>In order to resolve and deploy available resources, the Repository
+Admin provides Resolver instances, which are defined as follows:</p>
+
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-java"><span class="code-keyword">public</span> <span class="code-keyword">interface</span> Resolver
+{
+ <span class="code-keyword">public</span> void add(Resource resource);
+ <span class="code-keyword">public</span> Requirement[] getUnsatisfiedRequirements();
+ <span class="code-keyword">public</span> Resource[] getOptionalResources();
+ <span class="code-keyword">public</span> Requirement[] getReason(Resource resource);
+ <span class="code-keyword">public</span> Resource[] getResources(Requirement requirement);
+ <span class="code-keyword">public</span> Resource[] getRequiredResources();
+ <span class="code-keyword">public</span> Resource[] getAddedResources();
+ <span class="code-keyword">public</span> <span class="code-object">boolean</span> resolve();
+ <span class="code-keyword">public</span> void deploy(<span class="code-object">boolean</span> start);
+}
+</pre>
+</div></div>
+
+<p>When desired resources are discovered via the query mechanisms of
+the Repository Admin, they are added to a Resolver instance which will
+can be used to resolve all transitive dependencies and to reflect on
+any resolution result. The following code snippet depicts a typical
+usage scenario:</p>
+
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-java">RepositoryAdmin repoAdmin = ... <span class="code-comment">// Get repo admin service
+</span>Resolver resolver = repoAdmin.resolver();
+Resource resource = repoAdmin.discoverResources(filterStr);
+resolver.add(resource);
+<span class="code-keyword">if</span> (resolver.resolve())
+{
+ resolver.deploy(<span class="code-keyword">true</span>);
+}
+<span class="code-keyword">else</span>
+{
+ Requirement[] reqs = resolver.getUnsatisfiedRequirements();
+ <span class="code-keyword">for</span> (<span class="code-object">int</span> i = 0; i < reqs.length; i++)
+ {
+ <span class="code-object">System</span>.out.println(<span class="code-quote">"Unable to resolve: "</span> + reqs[i]);
+ }
+}
+</pre>
+</div></div>
+
+<p>This code gets the Repository Admin service and then gets a Resolver
+instance from it. It then discovers an available resource and adds it
+to the resolver. Then it tries to resolve the resources dependencies.
+If successful it deploys the resource to the local framework instance;
+if not successful it prints the unsatisfied requirements.</p>
+
+<p>OBR's deployment algorithm appears simple at first glance, but it is
+actually somewhat complex due to the nature of deploying independently
+developed bundles. For example, in an ideal world, if an update for a
+bundle is made available, then updates for all of the bundles
+satisfying its dependencies are also made available. Unfortunately,
+this may not be the case, thus the deployment algorithm might have to
+install new bundles during an update to satisfy either new dependencies
+or updated dependencies that can no longer be satisfied by existing
+local bundles. In response to this type of scenario, the OBR deployment
+algorithm tries to favor updating existing bundles, if possible, as
+opposed to installing new bundles to satisfy dependencies.</p>
+
+<p>In the general case, OBR user's will not use the OBR API directly,
+but will use its functionality indirectly from another tool or user
+interface. For example, interactive access to OBR is available via a
+command for Felix' <a href="http://cwiki.apache.org/confluence/display/FELIX/Apache%20Felix%20Shell%20Service" title="Apache Felix Shell Service">shell service</a>. The OBR shell command is discussed in the next section.</p>
+
+<p><a name="ApacheFelixOSGiBundleRepository-shellcommand"></a></p>
+
+<h2><a name="ApacheFelixOSGiBundleRepository-OBRShellCommand"></a>OBR Shell Command</h2>
+
+<p>Besides providing a service API, OBR implements a Felix shell
+command for accessing its functionality. For the end user, the OBR
+shell command is accessed using the text-based or GUI-based user
+interfaces for Felix' shell service. This section describes the syntax
+for the OBR shell command.</p>
+
+<p><a name="ApacheFelixOSGiBundleRepository-obrhelp"></a></p>
+
+<h3><a name="ApacheFelixOSGiBundleRepository-obrhelp"></a>obr help</h3>
+
+<p>Syntax:</p>
+<div class="preformatted panel" style="border-width: 1px;"><div class="preformattedContent panelContent">
+<pre>obr help [add-url | remove-url | list-url | list | info | deploy | start | source | javadoc]
+</pre>
+</div></div>
+<p>This command is used to display additional information about the other OBR commands.</p>
+
+<p><a name="ApacheFelixOSGiBundleRepository-obrlisturl"></a></p>
+
+<h3><a name="ApacheFelixOSGiBundleRepository-obrlisturl"></a>obr list-url</h3>
+
+<p>Syntax:</p>
+<div class="preformatted panel" style="border-width: 1px;"><div class="preformattedContent panelContent">
+<pre>obr list-url
+</pre>
+</div></div>
+<p>This command gets the URLs to the repository files used by the Repository Admin.</p>
+
+<p><a name="ApacheFelixOSGiBundleRepository-obraddurl"></a></p>
+
+<h3><a name="ApacheFelixOSGiBundleRepository-obraddurl"></a>obr add-url</h3>
+
+<p>Syntax:</p>
+<div class="preformatted panel" style="border-width: 1px;"><div class="preformattedContent panelContent">
+<pre>obr add-url [<repository-file-url> ...]
+</pre>
+</div></div>
+<p>This command adds a repository file to the set of repository files
+for which the Repository Admin service provides access. The repository
+file is represented as a URL. If the repository file URL is already in
+the Repository Admin's set of repository files, the request is treated
+like a reload operation.</p>
+
+<p><a name="ApacheFelixOSGiBundleRepository-obrremoveurl"></a></p>
+
+<h3><a name="ApacheFelixOSGiBundleRepository-obrremoveurl"></a>obr remove-url</h3>
+
+<p>Syntax:</p>
+<div class="preformatted panel" style="border-width: 1px;"><div class="preformattedContent panelContent">
+<pre>obr remove-url [<repository-file-url> ...]
+</pre>
+</div></div>
+<p>This command removes a repository file to the set of repository
+files for which the Repository Admin service provides access. The
+repository file is represented as a URL.</p>
+
+<p><a name="ApacheFelixOSGiBundleRepository-obrlist"></a></p>
+
+<h3><a name="ApacheFelixOSGiBundleRepository-obrlist"></a>obr list</h3>
+
+<p>Syntax:</p>
+<div class="preformatted panel" style="border-width: 1px;"><div class="preformattedContent panelContent">
+<pre>obr list [<string> ...]
+</pre>
+</div></div>
+<p>This command lists bundles available in the bundle repository. If no
+arguments are specified, then all available bundles are listed,
+otherwise any arguments are concatenated with spaces and used as a
+substring filter on the bundle names.</p>
+
+<p><a name="ApacheFelixOSGiBundleRepository-obrinfo"></a></p>
+
+<h3><a name="ApacheFelixOSGiBundleRepository-obrinfo"></a>obr info</h3>
+
+<p>Syntax:</p>
+<div class="preformatted panel" style="border-width: 1px;"><div class="preformattedContent panelContent">
+<pre>obr info <bundle-name>[;<version>] ...
+</pre>
+</div></div>
+<p>This command displays the meta-data for the specified bundles. If a
+bundle's name contains spaces, then it must be surrounded by quotes. It
+is also possible to specify a precise version if more than one version
+exists, such as:</p>
+<div class="preformatted panel" style="border-width: 1px;"><div class="preformattedContent panelContent">
+<pre>obr info "Bundle Repository";1.0.0
+</pre>
+</div></div>
+<p>The above example retrieves the meta-data for version "1.0.0" of the bundle named "Bundle Repository".</p>
+
+<p><a name="ApacheFelixOSGiBundleRepository-obrdeploy"></a></p>
+
+<h3><a name="ApacheFelixOSGiBundleRepository-obrdeploy"></a>obr deploy</h3>
+
+<p>Syntax:</p>
+<div class="preformatted panel" style="border-width: 1px;"><div class="preformattedContent panelContent">
+<pre>obr deploy <bundle-name>[;<version>] ... | <bundle-id> ...
+</pre>
+</div></div>
+<p>This command tries to install or update the specified bundles and
+all of their dependencies by default. You can specify either the bundle
+name or the bundle identifier. If a bundle's name contains spaces, then
+it must be surrounded by quotes. It is also possible to specify a
+precise version if more than one version exists, such as:</p>
+<div class="preformatted panel" style="border-width: 1px;"><div class="preformattedContent panelContent">
+<pre>obr deploy "Bundle Repository";1.0.0
+</pre>
+</div></div>
+<p>For the above example, if version "1.0.0" of "Bundle Repository" is
+already installed locally, then the command will attempt to update it
+and all of its dependencies; otherwise, the command will install it and
+all of its dependencies.</p>
+
+<p><a name="ApacheFelixOSGiBundleRepository-obrstart"></a></p>
+
+<h3><a name="ApacheFelixOSGiBundleRepository-obrstart"></a>obr start</h3>
+
+<p>Syntax:</p>
+<div class="preformatted panel" style="border-width: 1px;"><div class="preformattedContent panelContent">
+<pre>obr start [-nodeps] <bundle-name>[;<version>] ...
+</pre>
+</div></div>
+<p>This command installs and starts the specified bundles and all of
+their dependencies by default; use the "-nodeps" switch to ignore
+dependencies. If a bundle's name contains spaces, then it must be
+surrounded by quotes. If a specified bundle is already installed, then
+this command has no effect. It is also possible to specify a precise
+version if more than one version exists, such as:</p>
+<div class="preformatted panel" style="border-width: 1px;"><div class="preformattedContent panelContent">
+<pre>obr start "Bundle Repository";1.0.0
+</pre>
+</div></div>
+<p>The above example installs and starts the "1.0.0" version of the bundle named "Bundle Repository" and its dependencies.</p>
+
+<p><a name="ApacheFelixOSGiBundleRepository-obrsource"></a></p>
+
+<h3><a name="ApacheFelixOSGiBundleRepository-obrsource"></a>obr source</h3>
+
+<p>Syntax:</p>
+<div class="preformatted panel" style="border-width: 1px;"><div class="preformattedContent panelContent">
+<pre>obr source [-x] <local-dir> <bundle-name>[;<version>] ...
+</pre>
+</div></div>
+<p>This command retrieves the source archives of the specified bundles
+and saves them to the specified local directory; use the "-x" switch to
+automatically extract the source archives. If a bundle name contains
+spaces, then it must be surrounded by quotes. It is also possible to
+specify a precise version if more than one version exists, such as:</p>
+<div class="preformatted panel" style="border-width: 1px;"><div class="preformattedContent panelContent">
+<pre>obr source /home/rickhall/tmp "Bundle Repository";1.0.0
+</pre>
+</div></div>
+<p>The above example retrieves the source archive of version "1.0.0" of
+the bundle named "Bundle Repository" and saves it to the specified
+local directory.</p>
+
+<h3><a name="ApacheFelixOSGiBundleRepository-obrjavadoc"></a>obr javadoc</h3>
+
+<p>Syntax:</p>
+<div class="preformatted panel" style="border-width: 1px;"><div class="preformattedContent panelContent">
+<pre>obr javadoc [-x] <local-dir> <bundle-name>[;<version>] ...
+</pre>
+</div></div>
+<p>This command retrieves the javadoc archives of the specified bundles
+and saves them to the specified local directory; use the "-x" switch to
+automatically extract the javadoc archives. If a bundle name contains
+spaces, then it must be surrounded by quotes. It is also possible to
+specify a precise version if more than one version exists, such as:</p>
+<div class="preformatted panel" style="border-width: 1px;"><div class="preformattedContent panelContent">
+<pre>obr javadoc /home/rickhall/tmp "Bundle Repository";1.0.0
+</pre>
+</div></div>
+<p>The above example retrieves the javadoc archive of version "1.0.0"
+of the bundle named "Bundle Repository" and saves it to the specified
+local directory.</p>
+
+<p><a name="ApacheFelixOSGiBundleRepository-proxy"></a></p>
+
+<h2><a name="ApacheFelixOSGiBundleRepository-UsingOBRwithaProxy"></a>Using OBR with a Proxy</h2>
+
+<p>If you use a proxy for Web access, then OBR will not work for you in
+its default configuration; certain system properties must be set to
+enable OBR to work with a proxy. These properties are:</p>
+
+<ul>
+ <li>http.proxyHost - the name of the proxy host.</li>
+ <li>http.proxyPort - the port of the proxy host.</li>
+ <li>http.proxyAuth
+- the user name and password to use when connecting to the proxy; this
+string should be the user name and password separated by a colon (e.g.,
+rickhall:mypassword).</li>
+</ul>
+
+
+<p>These system properties can be set directly on the command line when
+starting the JVM using the standard "-D<prop>=<value>"
+syntax or you can put them in the lib/system.properties file of your
+Felix installation; see documentation on configuring Felix for more
+information.</p>
+
+<p><a name="ApacheFelixOSGiBundleRepository-sourcepackaging"></a></p>
+
+<h2><a name="ApacheFelixOSGiBundleRepository-BundleSourcePackaging"></a>Bundle Source Packaging</h2>
+
+<p>Coming soon...</p>
+
+<p><a name="ApacheFelixOSGiBundleRepository-r3note"></a></p>
+
+<h2><a name="ApacheFelixOSGiBundleRepository-NoteonOSGiR3Bundles"></a>Note on OSGi R3 Bundles</h2>
+
+<p>In contrast to OSGi R4 the previous specifications, most notably R3, allowed bundles without the <tt>Bundle-SymbolicName</tt>
+header. The Felix OSGi Bundle Repository implementation heavily relies
+on the symbolic name being defined in bundles. As a consequence bundles
+without a symbolic name are not fully supported by the Bundle
+Repository:</p>
+
+<ul>
+ <li>Bundles installed in the framework are used by the Bundle
+Repository implementation to resolve dependencies regardless of whether
+they have a <tt>Bundle-SymbolicName</tt> header or not. Resolution of dependencies against the installed bundles takes place based on the <tt>Export-Package</tt> headers.</li>
+ <li>Bundles installed in the framework without a <tt>Bundle-SymbolicName</tt>
+header cannot be updated by the Bundle Repository implementation
+because updates from the bundle repository cannot be correlated to such
+"anonymous" bundles.</li>
+</ul>
+
+
+
+<p><a name="ApacheFelixOSGiBundleRepository-feedback"></a></p>
+
+<h2><a name="ApacheFelixOSGiBundleRepository-Feedback"></a>Feedback</h2>
+
+<p>Subscribe to the Felix users mailing list by sending a message to <a href="mailto:users-subscribe@felix.apache.org" rel="nofollow">users-subscribe@felix.apache.org</a>; after subscribing, email questions or feedback to <a href="mailto:users@felix.apache.org" rel="nofollow">users@felix.apache.org</a>.</p>
+ </div>
+ </body></html>
diff --git a/bundlerepository/doc/apache-felix-osgi-bundle-repository-obr_files/apache-felix-small.png b/bundlerepository/doc/apache-felix-osgi-bundle-repository_files/apache-felix-small.png
similarity index 100%
rename from bundlerepository/doc/apache-felix-osgi-bundle-repository-obr_files/apache-felix-small.png
rename to bundlerepository/doc/apache-felix-osgi-bundle-repository_files/apache-felix-small.png
Binary files differ
diff --git a/bundlerepository/doc/apache-felix-osgi-bundle-repository-obr_files/apache.png b/bundlerepository/doc/apache-felix-osgi-bundle-repository_files/apache.png
similarity index 100%
rename from bundlerepository/doc/apache-felix-osgi-bundle-repository-obr_files/apache.png
rename to bundlerepository/doc/apache-felix-osgi-bundle-repository_files/apache.png
Binary files differ
diff --git a/bundlerepository/doc/apache-felix-osgi-bundle-repository_files/button.html b/bundlerepository/doc/apache-felix-osgi-bundle-repository_files/button.html
new file mode 100644
index 0000000..dc64b6c
--- /dev/null
+++ b/bundlerepository/doc/apache-felix-osgi-bundle-repository_files/button.html
@@ -0,0 +1,5 @@
+<html><head>
+<meta http-equiv="content-type" content="text/html; charset=UTF-8"><!-- ads start -->
+</head><body><a href="http://www.us.apachecon.com/c/acus2009/" target="_blank"><img src="button_data/2009-usa-125x125.png" title="ApacheCon US 2009" border="0" height="125" width="125"></a>
+<!-- ads end -->
+</body></html>
\ No newline at end of file
diff --git a/bundlerepository/doc/apache-felix-osgi-bundle-repository_files/button_data/2009-usa-125x125.png b/bundlerepository/doc/apache-felix-osgi-bundle-repository_files/button_data/2009-usa-125x125.png
new file mode 100644
index 0000000..117c695
--- /dev/null
+++ b/bundlerepository/doc/apache-felix-osgi-bundle-repository_files/button_data/2009-usa-125x125.png
Binary files differ
diff --git a/bundlerepository/doc/apache-felix-osgi-bundle-repository-obr_files/linkext7.gif b/bundlerepository/doc/apache-felix-osgi-bundle-repository_files/linkext7.gif
similarity index 100%
rename from bundlerepository/doc/apache-felix-osgi-bundle-repository-obr_files/linkext7.gif
rename to bundlerepository/doc/apache-felix-osgi-bundle-repository_files/linkext7.gif
Binary files differ
diff --git a/bundlerepository/doc/apache-felix-osgi-bundle-repository-obr_files/logo.png b/bundlerepository/doc/apache-felix-osgi-bundle-repository_files/logo.png
similarity index 100%
rename from bundlerepository/doc/apache-felix-osgi-bundle-repository-obr_files/logo.png
rename to bundlerepository/doc/apache-felix-osgi-bundle-repository_files/logo.png
Binary files differ
diff --git a/bundlerepository/doc/apache-felix-osgi-bundle-repository-obr_files/mail_small.gif b/bundlerepository/doc/apache-felix-osgi-bundle-repository_files/mail_small.gif
similarity index 100%
rename from bundlerepository/doc/apache-felix-osgi-bundle-repository-obr_files/mail_small.gif
rename to bundlerepository/doc/apache-felix-osgi-bundle-repository_files/mail_small.gif
Binary files differ
diff --git a/bundlerepository/doc/apache-felix-osgi-bundle-repository-obr_files/obr-entities.png b/bundlerepository/doc/apache-felix-osgi-bundle-repository_files/obr-entities.png
similarity index 100%
rename from bundlerepository/doc/apache-felix-osgi-bundle-repository-obr_files/obr-entities.png
rename to bundlerepository/doc/apache-felix-osgi-bundle-repository_files/obr-entities.png
Binary files differ
diff --git a/bundlerepository/doc/apache-felix-osgi-bundle-repository-obr_files/obr-high-level.png b/bundlerepository/doc/apache-felix-osgi-bundle-repository_files/obr-high-level.png
similarity index 100%
rename from bundlerepository/doc/apache-felix-osgi-bundle-repository-obr_files/obr-high-level.png
rename to bundlerepository/doc/apache-felix-osgi-bundle-repository_files/obr-high-level.png
Binary files differ
diff --git a/bundlerepository/doc/apache-felix-osgi-bundle-repository-obr_files/site.css b/bundlerepository/doc/apache-felix-osgi-bundle-repository_files/site.css
similarity index 100%
rename from bundlerepository/doc/apache-felix-osgi-bundle-repository-obr_files/site.css
rename to bundlerepository/doc/apache-felix-osgi-bundle-repository_files/site.css
diff --git a/bundlerepository/doc/changelog.txt b/bundlerepository/doc/changelog.txt
index f85d144..0e780e7 100644
--- a/bundlerepository/doc/changelog.txt
+++ b/bundlerepository/doc/changelog.txt
@@ -1,3 +1,11 @@
+Changes from 1.4.0 to 1.4.1
+---------------------------
+
+** Bug
+ * [FELIX-1000] - Updating an bundle which was installed via OBR fails
+ * [FELIX-1157] - NPE results in OBR if a resource does not have a presentation name
+ * [FELIX-1433] - java.lang.NumberFormatException in Bundle-Version (org.osgi.framework.Version) due to trailing whitespace
+
Changes from 1.2.1 to 1.4.0
---------------------------
** Bug