<!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 Configuration Properties</title>
    <link rel="stylesheet" href="apache-felix-framework-configuration-properties_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-configuration-properties_files/logo.png" border="0"></a></div><div class="header"><a href="http://www.apache.org/"><img alt="Apache" src="apache-felix-framework-configuration-properties_files/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><a href="http://felix.apache.org/site/downloads.cgi" class="external-link" rel="nofollow">downloads</a></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><a href="http://www.apache.org/" class="external-link" rel="nofollow">asf</a></li>
	<li><a href="http://www.apache.org/foundation/sponsorship.html" class="external-link" rel="nofollow">sponsorship</a></li>
	<li><a href="http://www.apache.org/foundation/thanks.html" class="external-link" rel="nofollow">sponsors</a>
<!-- ApacheCon Ad -->
<iframe src="apache-felix-framework-configuration-properties_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="ApacheFelixFrameworkConfigurationProperties-ApacheFelixFrameworkConfigurationProperties"></a>Apache Felix Framework Configuration Properties</h1>

<ul>
	<li><a href="#ApacheFelixFrameworkConfigurationProperties-overview">Overview</a></li>
	<li><a href="#ApacheFelixFrameworkConfigurationProperties-framework">Framework configuration properties</a></li>
	<li><a href="#ApacheFelixFrameworkConfigurationProperties-launcher">Launcher configuration properties</a></li>
	<li><a href="#ApacheFelixFrameworkConfigurationProperties-migrating">Mirgrating from earlier versions</a></li>
	<li><a href="#ApacheFelixFrameworkConfigurationProperties-feedback">Feedback</a></li>
</ul>


<p><a name="ApacheFelixFrameworkConfigurationProperties-overview"></a></p>

<h2><a name="ApacheFelixFrameworkConfigurationProperties-Overview"></a>Overview</h2>

<p>This document describes the various configuration properties related
to the Apache Felix Framework. Technically, there are framework
properties and launcher properties. If you are using the Felix
Framework JAR file (i.e., <tt>org.apache.felix.framework-x.y.x.jar</tt>), then you can only use framework properties. On the other hand, if you are using the Felix Main launcher JAR (i.e., <tt>felix.jar</tt> or <tt>org.apache.felix.main-x.y.z.jar</tt>), then you can use both framework and launcher properties. This document will describe both sets of properties.</p>

<p>Note that the framework does not use system properties to find its
configuration properties, it only consults the map passed into its
constructor. In contrast to bundles, which use <tt>BundleContext.getProperty()</tt>,
which exposes both configuration and system properties at execution
time. In the case of overlap, the configuration properties override
system properties. As a convenience, if you are using the Felix
launcher, it will copy all configuration properties it finds in the
system properties to the configuration map passed into the framework
constructor, which allows you to set configuration properties on the
command line. This feature is <b>not</b> available if you are just using the Felix framework JAR file.</p>

<p><a name="ApacheFelixFrameworkConfigurationProperties-framework"></a></p>

<h2><a name="ApacheFelixFrameworkConfigurationProperties-Frameworkconfigurationproperties"></a>Framework configuration properties</h2>

<p>The following configuration properties are for the framework (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.executionenvironment</tt> - Sets the
OSGi execution environment for the framework. The framework tries to
set this to a reasonable default value. If you specify a value, it
overrides the framework default. Refer to the OSGi specification for
appropriate execution environment values.</li>
	<li><tt>org.osgi.framework.storage</tt> - Sets the directory to use as the bundle cache; by default the 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>felix.cache.rootdir</tt> - Sets the root directory used 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>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.locking</tt>
- Enables or disables bundle cache locking, which is used to prevent
concurrent access to the bundle cache. This is enabled by default, but
on older/smaller JVMs file channel locking is not available; set this
property to <tt>false</tt> to disable it.</li>
	<li><tt>felix.cache.bufsize</tt>
- 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 framework 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 framework 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>org.osgi.framework.bundle.parent</tt> - Specifies which class loader is used for boot delegation. Possible values are: <tt>boot</tt> for the boot class loader, <tt>app</tt> for the application class loader, <tt>ext</tt> for the extension class loader, and <tt>framework</tt> for the framework's class loader. The default is <tt>boot</tt>.</li>
	<li><tt>felix.bootdelegation.implicit</tt>
- Specifies whether the framework should try to guess when to
implicitly boot delegate to ease integration with external code. The
default value is <tt>true</tt>.</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. (This property cannot be
set in the configuration file since it requires instances; it can only
be passed into Felix' constructor directly.)</li>
	<li><tt>felix.log.logger</tt> - An instance of <tt>Logger</tt>
that the framework uses as its default logger. (This property cannot be
set in the configuration file since it requires an instance; it can
only be passed into Felix' constructor directly.)</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.beginning</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>
</ul>


<p><a name="ApacheFelixFrameworkConfigurationProperties-launcher"></a></p>

<h2><a name="ApacheFelixFrameworkConfigurationProperties-Launcherconfigurationproperties"></a>Launcher configuration properties</h2>

<p>The following configuration properties are for the launcher:</p>

<ul>
	<li><tt>felix.auto.deploy.dir</tt> - Specifies the auto-deploy directory from which bundles are automatically deployed at framework startup. The default is the <tt>bundle/</tt> directory of the current directory.</li>
	<li><tt>felix.auto.deploy.action</tt>
- Specifies a comma-delimited list of actions to be performed on bundle
JAR files found in the auto-deploy directory. The possible actions are <tt>install</tt>, <tt>update</tt>, <tt>start</tt>, and <tt>uninstall</tt>.
An undefined or blank value is equivalent to disabling auto-deploy
processing; there is no default value, so this value must be defined to
enable it.</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.&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>
	<li><tt>felix.shutdown.hook</tt>
- Specifies whether the launcher should install a shutdown hook to
cleanly shutdown the framework on process exit. The default value is <tt>true</tt>.</li>
</ul>


<p><a name="ApacheFelixFrameworkConfigurationProperties-migrating"></a></p>

<h2><a name="ApacheFelixFrameworkConfigurationProperties-MigratingfromEarlierVersions"></a>Migrating from Earlier Versions</h2>

<p>Apache Felix Framework <tt>2.0.0</tt> introduced significant
configuration property changes. This section describes the differences
from older versions of the framework.</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 the framework no longer uses bundle cache profiles for saving sets of bundles.</li>
		<li><tt>felix.fragment.validation</tt> - No longer needed, since the framework supports fragments.</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.beginning</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>
	</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="ApacheFelixFrameworkConfigurationProperties-feedback"></a></p>

<h2><a name="ApacheFelixFrameworkConfigurationProperties-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" class="external-link" rel="nofollow">users-subscribe@felix.apache.org</a>; after subscribing, email questions or feedback to <a href="mailto:users@felix.apache.org" class="external-link" rel="nofollow">users@felix.apache.org</a>.</p>
    </div>
  </body></html>
