Professional Documents
Culture Documents
Chapter 4. Deploying Features: 49 Fuse Esb Deploying Into The Osgi Container Version 4.2
Chapter 4. Deploying Features: 49 Fuse Esb Deploying Into The Osgi Container Version 4.2
Deploying Features
Because applications and other tools typically consist of multiple OSGi bundles, it is generally impractical to
treat a bundle as the basic unit of deployment. FUSE ESB therefore provides a scalable unit of deployment, the
feature, which enables you to deploy multiple bundles (and, optionally, dependencies on other features) in a
single step.
Creating a Feature
Overview Essentially, a feature is created by adding a new feature element to a special
kind of XML file, known as a feature repository. To create a feature, perform
the following steps:
2. "Add the local repository URL to the features service" on page 50.
Create a local feature repository If you have not already defined a local feature repository, you can create one
as follows. Choose a convenient location for the feature repository on your
file system—for example, C:\Projects\features.xml—and use your
favorite text editor to add the following lines to it:
<?xml version="1.0" encoding="UTF-8"?>
<features>
</features>
Add the local repository URL to In order to make the new feature repository available to the Apache Felix
the features service kernel, you must add the feature repository to the kernel using the
features:addUrl console command. For example, to make the contents of
the repository, C:\Projects\features.xml, available to the kernel, you
would enter the following console command:
features:addUrl file:C:/Projects/features.xml
You can check that the repository's URL is registered correctly by entering
the features:listUrl console command, to get a complete listing of all
registered feature repository URLs, as follows:
karaf@root> features:listUrl
mvn:org.apache.servicemix.nmr/apache-servicemix-nmr/1.1.0-psc-
01-00RC1/xml/features
mvn:org.apache.servicemix.camel/features/4.1.0-psc-01-
00RC1/xml/features
file:C:/Projects/features.xml
mvn:org.apache.ode/ode-jbi-karaf/1.3.3-psc-01-00RC1/xml/fea
tures
mvn:org.apache.felix.karaf/apache-felix-karaf/1.2.0-psc-01-
00RC1/xml/features
mvn:org.apache.servicemix/apache-servicemix/4.1.0-psc-01-
00RC1/xml/features
Add a feature to the local feature To add a feature to the local feature repository, insert a new feature element
repository as a child of the root features element. You must give the feature a name
and you can list any number of bundles belonging to the feature, by inserting
bundle child elements. For example, to add a feature named
example-camel-bundle containing the single bundle,
C:\Projects\camel-bundle\target\camel-bundle-1.0-SNAPSHOT.jar,
add a feature element as follows:
<?xml version="1.0" encoding="UTF-8"?>
<features>
<feature name="example-camel-bundle">
<bundle>file:C:/Projects/camel-bundle/target/camel-bundle-
1.0-SNAPSHOT.jar</bundle>
</feature>
</features>
The contents of the bundle element can be any valid URL, giving the location
of a bundle (see Appendix A on page 133). You can optionally specify a
version attribute on the feature element, if you want to keep track of the
feature's version number.
To check whether the kernel successfully parses the new feature entry, enter
the following pair of console commands:
karaf@root> features:refreshUrl
karaf@root> features:list
...
[uninstalled] [0.0.0 ] example-camel-bundle
repo-0
...
repositories: if you did not issue this command, the kernel would not be aware
of any recent changes that you made to any of the repositories (in particular,
the new feature would not appear in the listing).
Add dependent features to the If your feature depends on other features, you can specify these dependencies
feature by adding feature elements as children of the original feature element.
Each child feature element contains the name of a feature on which the
current feature depends. When you deploy a feature with dependent features,
the dependency mechanism checks whether or not the dependent features
are available in the container. If not, the dependency mechanism automatically
loads the missing dependencies (and any recursive dependencies).
Add OSGi configurations to the If your application uses the OSGi Configuration Admin service, you can specify
feature configuration settings for this service using the config child element of your
feature definition. For example, to specify that the prefix property has the
value, MyTransform, add the following config child element to your feature's
configuration:
<?xml version="1.0" encoding="UTF-8"?>
<features>
<feature name="example-camel-bundle">
<config name="org.fusesource.fuseesb.example">
prefix=MyTransform
</config>
</feature>
</features>
Where the name attribute of the config element specifies the scope of the
property settings. The content of the config element is parsed in the same
1
way as a Java properties file .
</beans>
1
http://java.sun.com/j2se/1.5.0/docs/api/java/util/Properties.html#load(java.io.InputStream)
Deploying a Feature
Overview You can deploy a feature in one of the following ways:
Installing at the console After you have created a feature (by adding an entry for it in a feature
repository and registering the feature repository), it is relatively easy to deploy
the feature using the features:install console command. For example,
to deploy the example-camel-bundle feature, enter the following pair of
console commands:
karaf@root> features:refreshUrl
karaf@root> features:install example-camel-bundle
Note
Features use a flat namespace. So when naming your features, be
careful to avoid name clashes with existing features.
Uninstalling at the console To uninstall a feature, invoke the features:uninstall command as follows:
karaf@root> features:uninstall example-camel-bundle
Note
After uninstalling, the feature will still be visible when you invoke
features:list, but its status will now be flagged as
[uninstalled].
You can modify the configuration to customize the features that are installed
as FUSE ESB kernel starts up. You can also modify this configuration file, if
you plan to distribute FUSE ESB kernel with pre-installed features.
Hot deployment