<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;CkUHSXg9eCp7ImA9WhRaFE0.&quot;"><id>tag:blogger.com,1999:blog-3314286357054482328</id><updated>2012-02-16T14:50:38.660+01:00</updated><category term="logging" /><category term="felix" /><category term="spring dm" /><category term="pax runner" /><category term="specification" /><category term="osgi enterprise" /><category term="tools" /><category term="tutorial" /><category term="junit" /><category term="jprobe" /><category term="maven" /><category term="JUL" /><category term="draft" /><category term="MonitorAdmin" /><category term="pax exam" /><category term="yourkit" /><category term="general" /><category term="LogService" /><category term="equinox" /><category term="spring osgi" /><category term="scr" /><category term="osgi" /><category term="integration" /><category term="knopflerfish" /><category term="shell" /><category term="java.util.logging" /><category term="gogo" /><category term="jprofiler" /><category term="jee" /><category term="release" /><category term="testing" /><category term="blueprint" /><category term="jmx" /><category term="profiling" /><category term="NoClassDefFoundError" /><category term="visualvm" /><title>KnowHowLab</title><subtitle type="html">Java/JEE/OSGi development experience sharing blog. This is the official blog for KnowHowLab open-source project.</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://blog.knowhowlab.org/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://blog.knowhowlab.org/" /><author><name>Dmytro Pishchukhin</name><uri>https://profiles.google.com/106807340219118383792</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-ZZb_y1fm8uQ/AAAAAAAAAAI/AAAAAAAACMw/zItcRzswVq4/s512-c/photo.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>24</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/Knowhowlab" /><feedburner:info uri="knowhowlab" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;CEYNRn46cSp7ImA9WhZWGU0.&quot;"><id>tag:blogger.com,1999:blog-3314286357054482328.post-6567925770857426107</id><published>2011-05-20T16:36:00.000+02:00</published><updated>2011-05-20T16:36:37.019+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-20T16:36:37.019+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="knopflerfish" /><category scheme="http://www.blogger.com/atom/ns#" term="felix" /><category scheme="http://www.blogger.com/atom/ns#" term="equinox" /><category scheme="http://www.blogger.com/atom/ns#" term="osgi" /><category scheme="http://www.blogger.com/atom/ns#" term="shell" /><category scheme="http://www.blogger.com/atom/ns#" term="maven" /><category scheme="http://www.blogger.com/atom/ns#" term="gogo" /><title>OSGi universal shell implementation 1.1.0 released</title><content type="html">There is a new 1.1.0 version of &lt;a href="http://code.google.com/p/osgilab/wiki/UniversalShell"&gt;OSGi universal shell adapters&lt;/a&gt; available.
&lt;br /&gt;
&lt;br /&gt;
Changes:&lt;br /&gt;
&amp;nbsp; * Added support of defining commands services with Declarative Services&lt;br /&gt;
&lt;br /&gt;

Command service registration with DS:
&lt;br /&gt;
&lt;pre class="Xml" name="code"&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;
&amp;lt;component name=&amp;quot;shell_test.component&amp;quot;&amp;gt;
    &amp;lt;implementation class=&amp;quot;...ShellTestService&amp;quot;/&amp;gt;

    &amp;lt;service&amp;gt;
        &amp;lt;provide interface=&amp;quot;...ShellTestService&amp;quot;/&amp;gt;
    &amp;lt;/service&amp;gt;

    &amp;lt;property name=&amp;quot;org.knowhowlab.osgi.shell.group.id&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;test_group_id&amp;quot;/&amp;gt;
    &amp;lt;property name=&amp;quot;org.knowhowlab.osgi.shell.group.name&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;Test commands&amp;quot;/&amp;gt;
    &amp;lt;property name=&amp;quot;org.knowhowlab.osgi.shell.commands&amp;quot; type=&amp;quot;String&amp;quot;&amp;gt;
        bndinfo#bndinfo &amp;lt;bundleId&amp;gt; - Print information for bundle with &amp;lt;bundleId&amp;gt;
        bndsinfo#bndsinfo - Print information for all bundles
    &amp;lt;/property&amp;gt;
...
&amp;lt;/component&amp;gt;
&lt;/pre&gt;
&lt;br /&gt;

Maven artifacts:
&lt;br /&gt;
&lt;pre class="Xml" name="code"&gt;&amp;lt;dependency&amp;gt;
    &amp;lt;groupId&amp;gt;org.knowhowlab.osgi.shell&amp;lt;/groupId&amp;gt;
    &amp;lt;artifactId&amp;gt;equinox&amp;lt;/artifactId&amp;gt;
    &amp;lt;version&amp;gt;1.1.0&amp;lt;/version&amp;gt;
&amp;lt;/dependency&amp;gt;
&lt;/pre&gt;
&lt;pre class="Xml" name="code"&gt;&amp;lt;dependency&amp;gt;
    &amp;lt;groupId&amp;gt;org.knowhowlab.osgi.shell&amp;lt;/groupId&amp;gt;
    &amp;lt;artifactId&amp;gt;felix&amp;lt;/artifactId&amp;gt;
    &amp;lt;version&amp;gt;1.1.0&amp;lt;/version&amp;gt;
&amp;lt;/dependency&amp;gt;
&lt;/pre&gt;
&lt;pre class="Xml" name="code"&gt;&amp;lt;dependency&amp;gt;
    &amp;lt;groupId&amp;gt;org.knowhowlab.osgi.shell&amp;lt;/groupId&amp;gt;
    &amp;lt;artifactId&amp;gt;felix-gogo&amp;lt;/artifactId&amp;gt;
    &amp;lt;version&amp;gt;1.1.0&amp;lt;/version&amp;gt;
&amp;lt;/dependency&amp;gt;
&lt;/pre&gt;
&lt;pre class="Xml" name="code"&gt;&amp;lt;dependency&amp;gt;
    &amp;lt;groupId&amp;gt;org.knowhowlab.osgi.shell&amp;lt;/groupId&amp;gt;
    &amp;lt;artifactId&amp;gt;knopflerfish&amp;lt;/artifactId&amp;gt;
    &amp;lt;version&amp;gt;1.1.0&amp;lt;/version&amp;gt;
&amp;lt;/dependency&amp;gt;
&lt;/pre&gt;
&lt;br /&gt;
Cheers,&lt;br /&gt;
Dmytro&lt;br /&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3314286357054482328-6567925770857426107?l=blog.knowhowlab.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/8UqKuG_AhF5DdEZtrrtuwFNciKg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8UqKuG_AhF5DdEZtrrtuwFNciKg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/8UqKuG_AhF5DdEZtrrtuwFNciKg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8UqKuG_AhF5DdEZtrrtuwFNciKg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=Gep3Sl1hbd0:1NP45U7jQEc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=Gep3Sl1hbd0:1NP45U7jQEc:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=Gep3Sl1hbd0:1NP45U7jQEc:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=Gep3Sl1hbd0:1NP45U7jQEc:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=Gep3Sl1hbd0:1NP45U7jQEc:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=Gep3Sl1hbd0:1NP45U7jQEc:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=Gep3Sl1hbd0:1NP45U7jQEc:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=Gep3Sl1hbd0:1NP45U7jQEc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=Gep3Sl1hbd0:1NP45U7jQEc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Knowhowlab/~4/Gep3Sl1hbd0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.knowhowlab.org/feeds/6567925770857426107/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.knowhowlab.org/2011/05/osgi-universal-shell-implementation-110.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3314286357054482328/posts/default/6567925770857426107?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3314286357054482328/posts/default/6567925770857426107?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Knowhowlab/~3/Gep3Sl1hbd0/osgi-universal-shell-implementation-110.html" title="OSGi universal shell implementation 1.1.0 released" /><author><name>Dmytro Pishchukhin</name><uri>https://profiles.google.com/106807340219118383792</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-ZZb_y1fm8uQ/AAAAAAAAAAI/AAAAAAAACMw/zItcRzswVq4/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.knowhowlab.org/2011/05/osgi-universal-shell-implementation-110.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CU8NRXY-eCp7ImA9WhZSF04.&quot;"><id>tag:blogger.com,1999:blog-3314286357054482328.post-7841016677708827397</id><published>2011-04-02T10:44:00.000+02:00</published><updated>2011-04-02T10:44:54.850+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-02T10:44:54.850+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="knopflerfish" /><category scheme="http://www.blogger.com/atom/ns#" term="felix" /><category scheme="http://www.blogger.com/atom/ns#" term="equinox" /><category scheme="http://www.blogger.com/atom/ns#" term="osgi" /><category scheme="http://www.blogger.com/atom/ns#" term="shell" /><category scheme="http://www.blogger.com/atom/ns#" term="maven" /><category scheme="http://www.blogger.com/atom/ns#" term="gogo" /><title>OSGi universal shell implementation 1.0.1 released</title><content type="html">Hi,

There is a new 1.0.1 version of &lt;a href="http://code.google.com/p/osgilab/wiki/UniversalShell"&gt;OSGi universal shell adapters&lt;/a&gt; available.
&lt;br /&gt;
&lt;br /&gt;
Changes:&lt;br /&gt;
&amp;nbsp; * Changed package to org.knowhowlab.osgi.shell&lt;br /&gt;
&amp;nbsp; * Changed maven groupId to org.knowhowlab.osgi.shell&lt;br /&gt;
&amp;nbsp; * Added Apache Felix GoGo Universal Shell Adapter&lt;br /&gt;
&lt;br /&gt;

Maven artifacts:
&lt;br /&gt;
&lt;pre class="Xml" name="code"&gt;&amp;lt;dependency&amp;gt;
    &amp;lt;groupId&amp;gt;org.knowhowlab.osgi.shell&amp;lt;/groupId&amp;gt;
    &amp;lt;artifactId&amp;gt;equinox&amp;lt;/artifactId&amp;gt;
    &amp;lt;version&amp;gt;1.0.1&amp;lt;/version&amp;gt;
&amp;lt;/dependency&amp;gt;
&lt;/pre&gt;
&lt;pre class="Xml" name="code"&gt;&amp;lt;dependency&amp;gt;
    &amp;lt;groupId&amp;gt;org.knowhowlab.osgi.shell&amp;lt;/groupId&amp;gt;
    &amp;lt;artifactId&amp;gt;felix&amp;lt;/artifactId&amp;gt;
    &amp;lt;version&amp;gt;1.0.1&amp;lt;/version&amp;gt;
&amp;lt;/dependency&amp;gt;
&lt;/pre&gt;
&lt;pre class="Xml" name="code"&gt;&amp;lt;dependency&amp;gt;
    &amp;lt;groupId&amp;gt;org.knowhowlab.osgi.shell&amp;lt;/groupId&amp;gt;
    &amp;lt;artifactId&amp;gt;felix-gogo&amp;lt;/artifactId&amp;gt;
    &amp;lt;version&amp;gt;1.0.1&amp;lt;/version&amp;gt;
&amp;lt;/dependency&amp;gt;
&lt;/pre&gt;
&lt;pre class="Xml" name="code"&gt;&amp;lt;dependency&amp;gt;
    &amp;lt;groupId&amp;gt;org.knowhowlab.osgi.shell&amp;lt;/groupId&amp;gt;
    &amp;lt;artifactId&amp;gt;knopflerfish&amp;lt;/artifactId&amp;gt;
    &amp;lt;version&amp;gt;1.0.1&amp;lt;/version&amp;gt;
&amp;lt;/dependency&amp;gt;
&lt;/pre&gt;
&lt;br /&gt;
Cheers,&lt;br /&gt;
Dmytro&lt;br /&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3314286357054482328-7841016677708827397?l=blog.knowhowlab.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/A5cSuxe_iBtnJ4JSHMC_qexSZ6w/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/A5cSuxe_iBtnJ4JSHMC_qexSZ6w/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/A5cSuxe_iBtnJ4JSHMC_qexSZ6w/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/A5cSuxe_iBtnJ4JSHMC_qexSZ6w/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=8v6XmPm5x14:GFe1_kt4VlI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=8v6XmPm5x14:GFe1_kt4VlI:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=8v6XmPm5x14:GFe1_kt4VlI:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=8v6XmPm5x14:GFe1_kt4VlI:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=8v6XmPm5x14:GFe1_kt4VlI:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=8v6XmPm5x14:GFe1_kt4VlI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=8v6XmPm5x14:GFe1_kt4VlI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=8v6XmPm5x14:GFe1_kt4VlI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=8v6XmPm5x14:GFe1_kt4VlI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Knowhowlab/~4/8v6XmPm5x14" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.knowhowlab.org/feeds/7841016677708827397/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.knowhowlab.org/2011/04/osgi-universal-shell-implementation-101.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3314286357054482328/posts/default/7841016677708827397?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3314286357054482328/posts/default/7841016677708827397?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Knowhowlab/~3/8v6XmPm5x14/osgi-universal-shell-implementation-101.html" title="OSGi universal shell implementation 1.0.1 released" /><author><name>Dmytro Pishchukhin</name><uri>https://profiles.google.com/106807340219118383792</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-ZZb_y1fm8uQ/AAAAAAAAAAI/AAAAAAAACMw/zItcRzswVq4/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.knowhowlab.org/2011/04/osgi-universal-shell-implementation-101.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D08DQXo4fSp7ImA9Wx9aE08.&quot;"><id>tag:blogger.com,1999:blog-3314286357054482328.post-9126145064292037829</id><published>2010-10-30T15:33:00.002+02:00</published><updated>2011-03-05T12:51:10.435+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-05T12:51:10.435+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="scr" /><category scheme="http://www.blogger.com/atom/ns#" term="osgi enterprise" /><category scheme="http://www.blogger.com/atom/ns#" term="blueprint" /><category scheme="http://www.blogger.com/atom/ns#" term="tools" /><category scheme="http://www.blogger.com/atom/ns#" term="tutorial" /><category scheme="http://www.blogger.com/atom/ns#" term="pax runner" /><category scheme="http://www.blogger.com/atom/ns#" term="osgi" /><category scheme="http://www.blogger.com/atom/ns#" term="maven" /><category scheme="http://www.blogger.com/atom/ns#" term="specification" /><title>OSGi Tutorial: 4 ways to activate code in OSGi bundle</title><content type="html">Hello everybody!&lt;br/&gt;
&lt;br/&gt;
I would like to present a tutorial in which I show 4 ways how to activate/start code inside your OSGi bundle.
All those ways are part of OSGi 4.2 specifications.
The goal of the tutorial is to explain in a short form some OSGi specifications chapters with samples.
I do not like to make any deep comparison of activation ways, just overview with workable examples.

All sources you can find &lt;a href="http://osgilab.googlecode.com/files/osgi-activation-samples.zip"&gt;here&lt;/a&gt;.&lt;br/&gt;

&lt;br/&gt;
&lt;b&gt;Contents:&lt;/b&gt;
&lt;br/&gt;
&lt;ol&gt;
    &lt;li&gt;&lt;a href="#requirements"&gt;Requirements&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="#testcase"&gt;Use Case details&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="#ba"&gt;Bundle Activator&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="#ds"&gt;Declarative Services&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="#bluepring"&gt;Blueprint Services&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="#wab"&gt;Web Application Bundle&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="#run"&gt;How to run examples&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="#references"&gt;References&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;br/&gt;
&lt;a name='more'&gt;&lt;/a&gt;
&lt;ol&gt;
&lt;li&gt;&lt;b&gt;&lt;a name="requirements"&gt;Requirements.&lt;/a&gt;&lt;/b&gt; There are minimum requirements:
    &lt;br/&gt;
    &lt;ul&gt;
        &lt;li&gt;&lt;a href="http://maven.apache.org/download.html"&gt;Apache Maven 2.x or 3.0.x&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;Your IDE with Maven support.&lt;/li&gt;
        &lt;li&gt;Basic knowledge of OSGi specification&lt;/li&gt;
        &lt;li&gt;Basic knowledge of PAX tools (&lt;a href="http://paxrunner.ops4j.org/space/Pax+Runner"&gt;Pax Runner&lt;/a&gt;).
            You can get some brief information also &lt;a
                    href="http://blog.knowhowlab.org/2010/05/pax-runner-and-exam-new-osgi-framework.html"&gt;here&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
    &lt;br/&gt;

&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a name="testcase"&gt;Use Case details.&lt;/a&gt;&lt;/b&gt;
    The tutorial use case is very simple:
    &lt;br/&gt;
    &lt;ul&gt;
        &lt;li&gt;There is interface &lt;i&gt;org.knowhowlab.osgi.tips.activation.core.Echo&lt;/i&gt;
            &lt;pre class="Java" name="code"&gt;
                public interface Echo {
                    String ECHO_TYPE_PROP = "echo_type";

                    String echo(String str);
                }
            &lt;/pre&gt;
            This interface exported by &lt;a
                    href="http://osgilab.googlecode.com/svn/trunk/org.osgilab.tips/activation/core/pom.xml"&gt;core&lt;/a&gt;
            bundle.
        &lt;/li&gt;
        &lt;li&gt;This interface should be implemented&lt;/li&gt;
        &lt;li&gt;Implementation should be registered as OSGi service only when
            &lt;i&gt;org.osgi.service.prefs.PreferencesService&lt;/i&gt; service is available in OSGi registry
        &lt;/li&gt;
    &lt;/ul&gt;
    &lt;br/&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a name="ba"&gt;Bundle Activator.&lt;/a&gt;&lt;/b&gt;
    This is the simplest and oldest way to activate code in your bundle.
    &lt;br/&gt;
    There are some details of this activation way:
    &lt;ul&gt;
        &lt;li&gt;There is only one BundleActivator per bundle&lt;/li&gt;
        &lt;li&gt;Any class could implement &lt;i&gt;org.osgi.framework.BundleActivator&lt;/i&gt; interface&lt;/li&gt;
        &lt;li&gt;This class should have empty constructor&lt;/li&gt;
        &lt;li&gt;This class should be provided with MANIFEST OSGi header &lt;i&gt;Bundle-Activator&lt;/i&gt;
            to be called on OSGi bundle STARTING stage
        &lt;/li&gt;
        &lt;li&gt;The best way to use it (from my own experience) in low-level bundles (e.g. implementation of any OSGi API)
            or when you like to control everything yourself
        &lt;/li&gt;
        &lt;li&gt;This way could be also used when your code does not have a lot of dependencies to external services.
            &lt;i&gt;org.osgi.util.tracker.ServiceTracker&lt;/i&gt; could be used to track external services.
            As many external services you track as more logic code you have to write to cover all cases.
        &lt;/li&gt;
    &lt;/ul&gt;
    &lt;br/&gt;
    Here is code of my BundleActivator that implements required tutorial use case:
    &lt;pre class="Java" name="code"&gt;
        public class Activator implements BundleActivator, Echo {
            // ServiceTracker for PreferencesServices
            private ServiceTracker serviceTracker;
            // BundleContext
            private BundleContext bc;
            // Registration of Echo service
            private ServiceRegistration registration;

            // activation
            public void start(BundleContext context) throws Exception {
                bc = context;
                // init and start ServiceTracker to track PreferencesService
                serviceTracker = new ServiceTracker(context, PreferencesService.class.getName(), new Customizer());
                serviceTracker.open();
            }

            // deactivation
            public void stop(BundleContext context) throws Exception {
                // stop ServiceTracker to track PreferencesService
                serviceTracker.close();
                serviceTracker = null;
            }

            public String echo(String str) {
                return str;
            }

            // customizer that handles tracked service registration/modification/unregistration events
            private class Customizer implements ServiceTrackerCustomizer {
                public Object addingService(ServiceReference reference) {
                    System.out.println("PreferencesService is linked");
                    // register Echo service
                    Dictionary&amp;lt;String, String&amp;gt; props = new Hashtable&amp;lt;String, String&amp;gt;();
                    props.put(ECHO_TYPE_PROP, "BundleActivator");
                    registration = bc.registerService(Echo.class.getName(), Activator.this, props);

                    return bc.getService(reference);
                }

                public void modifiedService(ServiceReference reference, Object service) {
                }

                public void removedService(ServiceReference reference, Object service) {
                    // unregister Echo service
                    registration.unregister();
                    System.out.println("PreferencesService is unlinked");
                }
            }
        }
    &lt;/pre&gt;
    &lt;br/&gt;
    Bundle MANIFEST.MF:
    &lt;pre class="Xml" name="code"&gt;
        Manifest-Version: 1.0
        Bundle-Name: KnowHowLab Tips&amp;Tricks: Bundle Activation - Activator
        Bundle-Version: 1.0.0.SNAPSHOT
        Bundle-ManifestVersion: 2
        Bundle-Activator: org.knowhowlab.osgi.tips.activation.activator.Activa
         tor
        Bundle-Description: KnowHowLab Tips and Tricks: Bundle Activation - Ac
         tivator
        Import-Package: org.knowhowlab.osgi.tips.activation.core,org.osgi.fram
         ework;version="1.5",org.osgi.service.prefs;version="1.1",org.osgi.uti
         l.tracker;version="1.4"
        Bundle-SymbolicName: org.knowhowlab.osgi.tips.activation.activator
    &lt;/pre&gt;
    &lt;br/&gt;

&lt;li&gt;&lt;b&gt;&lt;a name="ds"&gt;Declarative Services.&lt;/a&gt;&lt;/b&gt;
    Declarative Services specification is the next higher-level way of activation your code in bundle.
    It helps developer to concentate on application logic and takes responsibility for almost all OSGi aspects
    of tracking and registering services.
    &lt;br/&gt;
    There are some details of this activation way:
    &lt;ul&gt;
        &lt;li&gt;Declarative Services do not work with bundle as atomic item (as in BundleActivator way).
            Service Component model is used instead of Bundle model
        &lt;/li&gt;
        &lt;li&gt;OSGi bundle can contain any count of Service Components&lt;/li&gt;
        &lt;li&gt;Every component should have Component Description - XML file with declaration of component&lt;/li&gt;
        &lt;li&gt;Every Component Description should be listed in MANIFEST OSGi header &lt;i&gt;Service-Component&lt;/i&gt; to
            be available for Service Component Runtime, that manages components and their life cycle
        &lt;/li&gt;
    &lt;/ul&gt;
    &lt;br/&gt;
    Here is code of my EchoComponent:
    &lt;pre class="Java" name="code"&gt;
        public class EchoComponent implements Echo {
            // Reference to PreferencesService
            private PreferencesService preferencesService;

            public String echo(String str) {
                return str;
            }

            // Called to bind PreferencesService
            public void bindPreferencesService(PreferencesService preferencesService) {
                System.out.println("PreferencesService is linked");
                this.preferencesService = preferencesService;
            }

            // Called to unbind PreferencesService
            public void unbindPreferencesService(PreferencesService preferencesService) {
                this.preferencesService = null;
                System.out.println("PreferencesService is unlinked");
            }
        }
    &lt;/pre&gt;
    &lt;br/&gt;
    Here is Component Description:
    &lt;pre class="Xml" name="code"&gt;
        &amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;
        &amp;lt;components xmlns:scr="http://www.osgi.org/xmlns/scr/v1.0.0"&amp;gt;
            &amp;lt;!-- Echo Component --&amp;gt;
            &amp;lt;scr:component enabled="true" immediate="true" name="Echo"&amp;gt;
                &amp;lt;!--Component Class name--&amp;gt;
                &amp;lt;implementation class="org.knowhowlab.osgi.tips.activation.ds.EchoComponent"/&amp;gt;
                &amp;lt;!-- Echo Service description --&amp;gt;
                &amp;lt;service servicefactory="false"&amp;gt;
                    &amp;lt;provide interface="org.knowhowlab.osgi.tips.activation.core.Echo"/&amp;gt;
                &amp;lt;/service&amp;gt;
                &amp;lt;!-- Service registration properties --&amp;gt;
                &amp;lt;property name="echo_type" type="String" value="Declarative Services"/&amp;gt;
                &amp;lt;property name="service.pid" value="Echo"/&amp;gt;
                &amp;lt;!-- PreferencesService dependency description --&amp;gt;
                &amp;lt;reference name="preferencesService" 
                           interface="org.osgi.service.prefs.PreferencesService" 
                           cardinality="1..1"
                           policy="static" 
                           bind="bindPreferencesService" 
                           unbind="unbindPreferencesService"/&amp;gt;
            &amp;lt;/scr:component&amp;gt;
        &amp;lt;/components&amp;gt;
    &lt;/pre&gt;
    &lt;br/&gt;
    Bundle MANIFEST.MF:
    &lt;pre class="Xml" name="code"&gt;
        Manifest-Version: 1.0
        Service-Component: OSGI-INF/serviceComponents.xml
        Export-Package: org.knowhowlab.osgi.tips.activation.ds;uses:="org.know
         howlab.osgi.tips.activation.core,org.osgi.service.prefs"
        Bundle-Name: KnowHowLab Tips&amp;Tricks: Bundle Activation - DS
        Bundle-Version: 1.0.0.SNAPSHOT
        Bundle-ManifestVersion: 2
        Import-Package: org.knowhowlab.osgi.tips.activation.core,org.osgi.serv
         ice.prefs;version="1.1"
        Bundle-SymbolicName: org.knowhowlab.osgi.tips.activation.ds
    &lt;/pre&gt;
    &lt;br/&gt;
    There is Component Descrition annotations library that generate Component Description during OSGi bundle build
    and makes development of Service Components easier. Here is code with annotations:
    &lt;pre class="Java" name="code"&gt;
        // Component description
        @Component(name = "Echo", immediate = true)
        // Service description
        @Service(value = Echo.class)
        // Service properties
        @Property(name = Echo.ECHO_TYPE_PROP, value = "Declarative Services")
        public class EchoComponent implements Echo {
            // Reference to PreferencesService
            @Reference(name = "preferencesService", referenceInterface = PreferencesService.class,
                    cardinality = ReferenceCardinality.MANDATORY_UNARY, policy = ReferencePolicy.STATIC)
            private PreferencesService preferencesService;

            public String echo(String str) {
                return str;
            }

            // Called to bind PreferencesService
            public void bindPreferencesService(PreferencesService preferencesService) {
                System.out.println("PreferencesService is linked");
                this.preferencesService = preferencesService;
            }

            // Called to unbind PreferencesService
            public void unbindPreferencesService(PreferencesService preferencesService) {
                this.preferencesService = null;
                System.out.println("PreferencesService is unlinked");
            }
        }
    &lt;/pre&gt;
    &lt;br/&gt;
&lt;/li&gt;
&lt;br/&gt;
&lt;li&gt;&lt;b&gt;&lt;a name="blueprint"&gt;Blueprint Services.&lt;/a&gt;&lt;/b&gt;
    Blueprint Services specification is derived from Spint Dynamic Modules specification and very similar to
    Declarative Services specification (developer concentrates more on application-specific code).
    &lt;br/&gt;
    There are some details of this activation way:
    &lt;ul&gt;
        &lt;li&gt;Blueprint Services do not work with bundle as atomic item (as in BundleActivator way).
            Component/Bean model is used instead of Bundle model
        &lt;/li&gt;
        &lt;li&gt;OSGi bundle can contain any count of Components/Beans&lt;/li&gt;
        &lt;li&gt;Every component/bean should have Component Definition - XML file with definition&lt;/li&gt;
        &lt;li&gt;All Component/Bean Definitions should be stored in OSGI-INF/blueprint directory
        &lt;/li&gt;
    &lt;/ul&gt;
    &lt;br/&gt;
    Here is code of my EchoBean:
    &lt;pre class="Java" name="code"&gt;
        public class EchoBean implements Echo {
            // Reference to PreferencesService
            private PreferencesService preferencesService;

            public String echo(String str) {
                return str;
            }

            // Called to bind PreferencesService
            public void bindPreferencesService(PreferencesService preferencesService, Map props) {
                this.preferencesService = preferencesService;
                System.out.println("PreferencesService is linked");
            }

            // Called to unbind PreferencesService
            public void unbindPreferencesService(PreferencesService preferencesService, Map props) {
                this.preferencesService = null;
                System.out.println("PreferencesService is unlinked");
            }
        }
    &lt;/pre&gt;
    &lt;br/&gt;
    Here is Bean Definition (OSGI-INF/blueprint/echo.xml):
    &lt;pre class="Xml" name="code"&gt;
        &amp;lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&amp;gt;
        &amp;lt;blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"&amp;gt;
            &amp;lt;!-- Bean definition --&amp;gt;
            &amp;lt;bean id="echoservice" class="org.knowhowlab.osgi.tips.activation.blueprint.EchoBean"/&amp;gt;
            &amp;lt;!-- Service definition --&amp;gt;
            &amp;lt;service ref="echoservice" interface="org.knowhowlab.osgi.tips.activation.core.Echo"
                     depends-on="preferencesService"&amp;gt;
                &amp;lt;service-properties&amp;gt;
                    &amp;lt;entry key="ECHO_TYPE_PROP" value="Blueprint"/&amp;gt;
                &amp;lt;/service-properties&amp;gt;
            &amp;lt;/service&amp;gt;
            &amp;lt;!-- PreferencesService reference definition --&amp;gt;
            &amp;lt;reference id="preferencesService" interface="org.osgi.service.prefs.PreferencesService"
                       availability="mandatory"&amp;gt;
                &amp;lt;reference-listener bind-method="bindPreferencesService" unbind-method="unbindPreferencesService"&amp;gt;
                    &amp;lt;ref component-id="echoservice"/&amp;gt;
                &amp;lt;/reference-listener&amp;gt;
            &amp;lt;/reference&amp;gt;
        &amp;lt;/blueprint&amp;gt;
    &lt;/pre&gt;
    &lt;br/&gt;
    I found very nice project BlueprintAnnotation under Apache Aries project. It provides runtime annotations
    for Blueprint beans that replaces Component/Bean Definition files. Here is EchoBean with Blueprint Annotations:
    &lt;pre class="Java" name="code"&gt;
        // Bean definition
        @Bean(id = "echoservice")
        // Service definition
        @Service(interfaces = Echo.class,
                serviceProperties = @ServiceProperty(key = Echo.ECHO_TYPE_PROP, value = "Blueprint-Annotations"))
        @ReferenceListener
        public class EchoBean implements Echo {
            // Reference definition 
            @Reference(availability = "mandatory", referenceListeners = @ReferenceListener(ref = "echoservice"))
            private PreferencesService preferencesService;

            public String echo(String str) {
                return str;
            }

            @Bind
            public void bindPreferencesService(PreferencesService preferencesService, Map props) {
                this.preferencesService = preferencesService;
                System.out.println("PreferencesService is linked");
            }

            @Unbind
            public void unbindPreferencesService(PreferencesService preferencesService, Map props) {
                this.preferencesService = null;
                System.out.println("PreferencesService is unlinked");
            }
        }
    &lt;/pre&gt;
    &lt;br/&gt;
&lt;/li&gt;
&lt;br/&gt;

&lt;li&gt;&lt;b&gt;&lt;a name="wab"&gt;Web Application Bundle.&lt;/a&gt;&lt;/b&gt;
    Web Application Bundle (WAB) was introduced in OSGi Enterprise 4.2 Specification.
    WAB is a combination of JEE Web Application and OSGi bundle.
    &lt;br/&gt;
    There are some details of this activation way:
    &lt;ul&gt;
        &lt;li&gt;WAB has the same structure as standard WAR + OSGi MANIFEST.MF&lt;/li&gt;
        &lt;li&gt;WAB uses the same life cycle and class/resource loading rules as standard OSGi bundle&lt;/li&gt;
        &lt;li&gt;WAB context path should be described in MANIFEST OSGi header &lt;i&gt;Web-ContextPath&lt;/i&gt;&lt;/li&gt;
        &lt;li&gt;/classes and all JARs/ZIPs in /lib folder should be listed in MANIFEST OSGi header &lt;i&gt;Bundle-Classpath&lt;/i&gt;&lt;/li&gt;
        &lt;li&gt;OSGi &lt;i&gt;BundleContext&lt;/i&gt; is provided to WAB as &lt;i&gt;ServletContext&lt;/i&gt; attribute "osgi-bundlecontext".
            It is available for Servlets/JSPs/Listeners/Filters.&lt;/li&gt;
    &lt;/ul&gt;
    &lt;br/&gt;
    Here is code of my ContextListener:
    &lt;pre class="Java" name="code"&gt;
        public class ContextListener implements ServletContextListener, Echo {
            private ServiceTracker serviceTracker;
            private BundleContext bc;
            private ServiceRegistration registration;

            public void contextInitialized(ServletContextEvent sce) {
                bc = (BundleContext) sce.getServletContext().getAttribute("osgi-bundlecontext");
                serviceTracker = new ServiceTracker(bc, PreferencesService.class.getName(), new Customizer());
                serviceTracker.open();
            }

            public void contextDestroyed(ServletContextEvent sce) {
                serviceTracker.close();
                serviceTracker = null;
            }

            public String echo(String str) {
                return str;
            }

            private class Customizer implements ServiceTrackerCustomizer {

                public Object addingService(ServiceReference reference) {
                    System.out.println("PreferencesService is linked");

                    Dictionary&amp;lt;String, String&amp;gt; props = new Hashtable&amp;lt;String, String&amp;gt;();
                    props.put(ECHO_TYPE_PROP, "WAB");
                    registration = bc.registerService(Echo.class.getName(), ContextListener.this, props);

                    return bc.getService(reference);
                }

                public void modifiedService(ServiceReference reference, Object service) {
                }

                public void removedService(ServiceReference reference, Object service) {
                    registration.unregister();
                    System.out.println("PreferencesService is unlinked");
                }
            }
        }
    &lt;/pre&gt;
    &lt;br/&gt;
    Here is web.xml:
    &lt;pre class="Xml" name="code"&gt;
        &amp;lt;web-app xmlns="http://java.sun.com/xml/ns/javaee"
                 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                 metadata-complete="true"
                 version="2.5"&amp;gt;
            &amp;lt;listener&amp;gt;
                &amp;lt;listener-class&amp;gt;org.knowhowlab.osgi.tips.activation.wab.ContextListener&amp;lt;/listener-class&amp;gt;
            &amp;lt;/listener&amp;gt;

            &amp;lt;!-- welcome file mapping --&amp;gt;
            &amp;lt;welcome-file-list&amp;gt;
                &amp;lt;welcome-file&amp;gt;index.htm&amp;lt;/welcome-file&amp;gt;
            &amp;lt;/welcome-file-list&amp;gt;
        &amp;lt;/web-app&amp;gt;
    &lt;/pre&gt;
    &lt;br/&gt;
    Here is MANIFEST.MF:
    &lt;pre class="Xml" name="code"&gt;
        Manifest-Version: 1.0
        Export-Package: org.knowhowlab.osgi.tips.activation.wab;uses:="org.kno
         whowlab.osgi.tips.activation.core,org.osgi.util.tracker,org.osgi.fram
         ework,javax.servlet,org.osgi.service.prefs";version="1.0.0.SNAPSHOT"
        Bundle-Classpath: WEB-INF/classes
        Bundle-Name: KnowHowLab Tips&amp;Tricks: Bundle Activation - WAB
        Web-ContextPath: /
        Bundle-Version: 1.0.0.SNAPSHOT
        Bundle-ManifestVersion: 2
        Import-Package: javax.servlet,org.knowhowlab.osgi.tips.activation.core
         ,org.osgi.framework;version="1.5",org.osgi.service.prefs;version="1.1
         ",org.osgi.util.tracker;version="1.4"
        Bundle-SymbolicName: org.knowhowlab.osgi.tips.activation.wab
    &lt;/pre&gt;
    &lt;br/&gt;
&lt;/li&gt;
&lt;br/&gt;

&lt;li&gt;
    &lt;b&gt;&lt;a name="run"&gt;How to run examples&lt;/a&gt;&lt;/b&gt;
    &lt;ol&gt;
        &lt;li&gt;
            Download samples from &lt;a href="http://osgilab.googlecode.com/files/osgi-activation-samples.zip"&gt;here&lt;/a&gt;
        &lt;/li&gt;
        &lt;li&gt;
            Compile with Maven command
            &lt;pre class="Xml" name="code"&gt;mvn clean install&lt;/pre&gt;
        &lt;/li&gt;
        &lt;li&gt;
            Run BundleActivator sample
            &lt;pre class="Xml" name="code"&gt;mvn -f run.xml -P activator&lt;/pre&gt;
        &lt;/li&gt;
        &lt;li&gt;
            Run Declarative Services sample
            &lt;pre class="Xml" name="code"&gt;mvn -f run.xml -P ds&lt;/pre&gt;
        &lt;/li&gt;
        &lt;li&gt;
            Run Blueprint Services sample
            &lt;pre class="Xml" name="code"&gt;mvn -f run.xml -P blueprint&lt;/pre&gt;
        &lt;/li&gt;
        &lt;li&gt;
            Run Blueprint Annotations sample
            &lt;pre class="Xml" name="code"&gt;mvn -f run.xml -P blueprint-annotations&lt;/pre&gt;
            &lt;b&gt;Note:&lt;/b&gt; It does not work for me (even Aries BlueprintAnnotation sample). I'll try with the next version.
        &lt;/li&gt;
        &lt;li&gt;
            Run WAB sample
            &lt;pre class="Xml" name="code"&gt;mvn -f run.xml -P wab&lt;/pre&gt;
        &lt;/li&gt;
        &lt;li&gt;
            Run All sample
            &lt;pre class="Xml" name="code"&gt;mvn -f run.xml -P all&lt;/pre&gt;
            Framework started:
            &lt;pre class="Xml" name="code"&gt;
id      State       Bundle
0       ACTIVE      org.eclipse.osgi_3.6.0.v20100517
1       ACTIVE      org.eclipse.osgi.services_3.2.100.v20100503
2       ACTIVE      org.eclipse.equinox.common_3.6.0.v20100503
3       ACTIVE      org.eclipse.equinox.preferences_3.3.0.v20100503
4       ACTIVE      org.eclipse.equinox.cm_1.0.200.v20100520
5       ACTIVE      org.eclipse.equinox.util_1.0.200.v20100503
6       ACTIVE      org.eclipse.equinox.ds_1.2.0.v20100507
7       ACTIVE      org.apache.geronimo.specs.geronimo-servlet_2.5_spec_1.2.0
8       ACTIVE      org.apache.geronimo.specs.geronimo-jaspic_1.0_spec_1.1.0
9       ACTIVE      org.eclipse.jetty.aggregate.jetty-all-server_7.2.0.v20101020
10      ACTIVE      org.eclipse.jetty.osgi.boot_7.2.0.v20101020
11      ACTIVE      slf4j.api_1.6.1
                    Fragments=12
12      RESOLVED    slf4j.jdk14_1.6.1
                    Master=11
13      ACTIVE      org.apache.aries.blueprint_0.2.0.incubating
14      ACTIVE      org.knowhowlab.osgi.tips.activation.core_1.0.0.SNAPSHOT
15      ACTIVE      org.knowhowlab.osgi.tips.activation.activator_1.0.0.SNAPSHOT
16      ACTIVE      org.knowhowlab.osgi.tips.activation.ds_1.0.0.SNAPSHOT
17      ACTIVE      org.knowhowlab.osgi.tips.activation.blueprint_1.0.0.SNAPSHOT
18      ACTIVE      org.knowhowlab.osgi.tips.activation.wab_1.0.0.SNAPSHOT
            &lt;/pre&gt;
            All Echo services registered:
            &lt;pre class="Xml" name="code"&gt;
osgi&gt; services (objectClass=org.knowhowlab.osgi.tips.activation.core.Echo)
{org.knowhowlab.osgi.tips.activation.core.Echo}={echo_type=BundleActivator, service.id=41}
  Registered by bundle: org.knowhowlab.osgi.tips.activation.activator_1.0.0.SNAPSHOT [15]
  No bundles using service.
{org.knowhowlab.osgi.tips.activation.core.Echo}={service.pid=Echo, echo_type=Declarative Services, component.name=Echo, component.id=0, service.id=42}
  Registered by bundle: org.knowhowlab.osgi.tips.activation.ds_1.0.0.SNAPSHOT [16]
  No bundles using service.
{org.knowhowlab.osgi.tips.activation.core.Echo}={osgi.service.blueprint.compname=echoservice, ECHO_TYPE_PROP=Blueprint, service.id=46}
  Registered by bundle: org.knowhowlab.osgi.tips.activation.blueprint_1.0.0.SNAPSHOT [17]
  No bundles using service.
{org.knowhowlab.osgi.tips.activation.core.Echo}={echo_type=WAB, service.id=49}
  Registered by bundle: org.knowhowlab.osgi.tips.activation.wab_1.0.0.SNAPSHOT [18]
  No bundles using service.
            &lt;/pre&gt;
            Stop PersistenceService bundle, all Echo services are unregistered:
            &lt;pre class="Xml" name="code"&gt;
osgi&gt; stop 3
PreferencesService is unlinked
PreferencesService is unlinked
PreferencesService is unlinked
PreferencesService is unlinked

osgi&gt; services (objectClass=org.knowhowlab.osgi.tips.activation.core.Echo)
No registered services.
            &lt;/pre&gt;
        &lt;/li&gt;
    &lt;/ol&gt;
&lt;/li&gt;
&lt;br/&gt;
&lt;li&gt;
    &lt;b&gt;&lt;a name="references"&gt;References:&lt;/a&gt;&lt;/b&gt;
    &lt;br/&gt;
    &lt;ol&gt;
        &lt;li&gt;
            &lt;a href="http://www.osgi.org/Release4/HomePage"&gt;OSGi specifications&lt;/a&gt;
        &lt;/li&gt;
        &lt;li&gt;
            &lt;a href="http://www.osgi.org/javadoc/r4v42/"&gt;OSGi API&lt;/a&gt;
        &lt;/li&gt;
        &lt;li&gt;
            &lt;a href="http://www.aqute.biz/Code/Bnd"&gt;Bnd tool&lt;/a&gt; - tool to help you diagnose and create OSGi bundles
        &lt;/li&gt;
        &lt;li&gt;
            &lt;a href="http://felix.apache.org/site/apache-felix-maven-bundle-plugin-bnd.html"&gt;maven-bundle-plugin&lt;/a&gt; -
            Maven plugin for Bnd tool
        &lt;/li&gt;
        &lt;li&gt;
            &lt;a href="http://felix.apache.org/site/apache-felix-maven-scr-plugin.html"&gt;maven-scr-plugin&lt;/a&gt; -
            Maven plugin to ease the development of OSGi component and services
        &lt;/li&gt;
        &lt;li&gt;
            &lt;a href="http://felix.apache.org/site/scr-annotations.html"&gt;SCR annotations&lt;/a&gt; -
            How to use annotations for OSGi components
        &lt;/li&gt;
        &lt;li&gt;
            &lt;a href="http://aries.apache.org/documentation/tutorials/blueprinthelloworldtutorial.html"&gt;Aries Blueprint&lt;/a&gt; -
            Blueprint "Hello World" tutorial
        &lt;/li&gt;
        &lt;li&gt;
            &lt;a href="http://incubator.apache.org/aries/blueprintannotation.html"&gt;Aries BlueprintAnnotations&lt;/a&gt; -
            BlueprintAnnotation tutorial
        &lt;/li&gt;
        &lt;li&gt;
            &lt;a href="http://paxrunner.ops4j.org/space/Pax+Runner"&gt;Pax Runner&lt;/a&gt; - tool to provision OSGi bundles in all
            major open source OSGi framework implementations (Felix, Equinox, Knopflerfish, Concierge)
        &lt;/li&gt;
    &lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;
Your comments are welcome.
&lt;br/&gt;
Thank you.
&lt;br/&gt;
Dmytro&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3314286357054482328-9126145064292037829?l=blog.knowhowlab.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/3N3CVWwhXkU9XLcudtn6hyr6NVM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/3N3CVWwhXkU9XLcudtn6hyr6NVM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/3N3CVWwhXkU9XLcudtn6hyr6NVM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/3N3CVWwhXkU9XLcudtn6hyr6NVM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=AfNWkH5QD78:0TvM5HKRPTQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=AfNWkH5QD78:0TvM5HKRPTQ:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=AfNWkH5QD78:0TvM5HKRPTQ:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=AfNWkH5QD78:0TvM5HKRPTQ:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=AfNWkH5QD78:0TvM5HKRPTQ:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=AfNWkH5QD78:0TvM5HKRPTQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=AfNWkH5QD78:0TvM5HKRPTQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=AfNWkH5QD78:0TvM5HKRPTQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=AfNWkH5QD78:0TvM5HKRPTQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Knowhowlab/~4/AfNWkH5QD78" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.knowhowlab.org/feeds/9126145064292037829/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.knowhowlab.org/2010/10/osgi-tutorial-4-ways-to-activate-code.html#comment-form" title="5 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3314286357054482328/posts/default/9126145064292037829?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3314286357054482328/posts/default/9126145064292037829?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Knowhowlab/~3/AfNWkH5QD78/osgi-tutorial-4-ways-to-activate-code.html" title="OSGi Tutorial: 4 ways to activate code in OSGi bundle" /><author><name>Dmytro Pishchukhin</name><uri>https://profiles.google.com/106807340219118383792</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-ZZb_y1fm8uQ/AAAAAAAAAAI/AAAAAAAACMw/zItcRzswVq4/s512-c/photo.jpg" /></author><thr:total>5</thr:total><feedburner:origLink>http://blog.knowhowlab.org/2010/10/osgi-tutorial-4-ways-to-activate-code.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkYFRHczcCp7ImA9Wx5TE0g.&quot;"><id>tag:blogger.com,1999:blog-3314286357054482328.post-4129385896851825846</id><published>2010-07-28T23:55:00.000+02:00</published><updated>2010-07-28T23:55:15.988+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-07-28T23:55:15.988+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="release" /><category scheme="http://www.blogger.com/atom/ns#" term="osgi" /><category scheme="http://www.blogger.com/atom/ns#" term="maven" /><category scheme="http://www.blogger.com/atom/ns#" term="MonitorAdmin" /><category scheme="http://www.blogger.com/atom/ns#" term="specification" /><title>OSGi MonitorAdmin Implementation: Release 1.0.2</title><content type="html">Hello,&lt;br /&gt;
&lt;br /&gt;
I'd like to announce a new release of &lt;a href="http://code.google.com/p/osgilab/wiki/MonitorAdmin"&gt;MonitorAdmin&lt;/a&gt; bundle 1.0.2. The major change - support of security permissions.&lt;br /&gt;
&lt;br /&gt;
Changes:&lt;br /&gt;
&amp;nbsp; * change POM packaging to JAR&lt;br /&gt;
&amp;nbsp; * embed org.osgi.service.monitor package&lt;br /&gt;
&amp;nbsp; * refactor package to org.knowhowlab.osgi.monitoradmin&lt;br /&gt;
&amp;nbsp; * change groupId to org.knowhowlab.osgi&lt;br /&gt;
&amp;nbsp; * change license to Apache License 2.0&lt;br /&gt;
&amp;nbsp; * add support of security permissions&lt;br /&gt;
&amp;nbsp; * add local permissions file&lt;br /&gt;
&lt;br /&gt;
Maven artifact:
&lt;br /&gt;
&lt;pre class="Xml" name="code"&gt;&amp;lt;dependency&amp;gt;
    &amp;lt;groupId&amp;gt;org.knowhowlab.osgi&amp;lt;/groupId&amp;gt;
    &amp;lt;artifactId&amp;gt;monitoradmin&amp;lt;/artifactId&amp;gt;
    &amp;lt;version&amp;gt;1.0.2&amp;lt;/version&amp;gt;
&amp;lt;/dependency&amp;gt;
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
Cheers,&lt;br /&gt;
Dmytro&lt;br /&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3314286357054482328-4129385896851825846?l=blog.knowhowlab.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/od0ohge1HMpGwOzUWp9O245F6RI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/od0ohge1HMpGwOzUWp9O245F6RI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/od0ohge1HMpGwOzUWp9O245F6RI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/od0ohge1HMpGwOzUWp9O245F6RI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=nX8PaQlqT1c:tie1zYffAvI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=nX8PaQlqT1c:tie1zYffAvI:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=nX8PaQlqT1c:tie1zYffAvI:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=nX8PaQlqT1c:tie1zYffAvI:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=nX8PaQlqT1c:tie1zYffAvI:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=nX8PaQlqT1c:tie1zYffAvI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=nX8PaQlqT1c:tie1zYffAvI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=nX8PaQlqT1c:tie1zYffAvI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=nX8PaQlqT1c:tie1zYffAvI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Knowhowlab/~4/nX8PaQlqT1c" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.knowhowlab.org/feeds/4129385896851825846/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.knowhowlab.org/2010/07/osgi-monitoradmin-implementation.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3314286357054482328/posts/default/4129385896851825846?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3314286357054482328/posts/default/4129385896851825846?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Knowhowlab/~3/nX8PaQlqT1c/osgi-monitoradmin-implementation.html" title="OSGi MonitorAdmin Implementation: Release 1.0.2" /><author><name>Dmytro Pishchukhin</name><uri>https://profiles.google.com/106807340219118383792</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-ZZb_y1fm8uQ/AAAAAAAAAAI/AAAAAAAACMw/zItcRzswVq4/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.knowhowlab.org/2010/07/osgi-monitoradmin-implementation.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck4DSHcycSp7ImA9WxFbFkQ.&quot;"><id>tag:blogger.com,1999:blog-3314286357054482328.post-8785141635471020060</id><published>2010-07-09T17:56:00.000+02:00</published><updated>2010-07-09T17:56:19.999+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-07-09T17:56:19.999+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="osgi enterprise" /><category scheme="http://www.blogger.com/atom/ns#" term="jmx" /><category scheme="http://www.blogger.com/atom/ns#" term="release" /><category scheme="http://www.blogger.com/atom/ns#" term="osgi" /><category scheme="http://www.blogger.com/atom/ns#" term="maven" /><title>JMX Management Model Implementation: Release 1.0.2</title><content type="html">Hi,&lt;br /&gt;
&lt;br /&gt;
I'd like to announce a new minor release of &lt;a href="http://code.google.com/p/osgilab/wiki/JMX"&gt;JMX&lt;/a&gt; bundle 1.0.2.&lt;br /&gt;
&lt;br /&gt;
Changes:&lt;br /&gt;
&amp;nbsp; * refactor package to org.knowhowlab.osgi.jmx&lt;br /&gt;
&amp;nbsp; * change groupId to org.knowhowlab.osgi&lt;br /&gt;
&amp;nbsp; * change license to Apache License 2.0&lt;br /&gt;
&amp;nbsp; * add support of MonitorAdmin event to notify through JMX&lt;br /&gt;
&amp;nbsp; * handle errors on bundle start and unregister registered MBeans&lt;br /&gt;
&amp;nbsp; * embed org.osgi.jmx package&lt;br /&gt;
&lt;br /&gt;
Maven artifact:
&lt;br /&gt;
&lt;pre class="Xml" name="code"&gt;&amp;lt;dependency&amp;gt;
    &amp;lt;groupId&amp;gt;org.knowhowlab.osgi&amp;lt;/groupId&amp;gt;
    &amp;lt;artifactId&amp;gt;jmx&amp;lt;/artifactId&amp;gt;
    &amp;lt;version&amp;gt;1.0.2&amp;lt;/version&amp;gt;
&amp;lt;/dependency&amp;gt;
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
Cheers,&lt;br /&gt;
Dmytro&lt;br /&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3314286357054482328-8785141635471020060?l=blog.knowhowlab.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/HAKJORpcDaejNGT3WUzQJKwnRW0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/HAKJORpcDaejNGT3WUzQJKwnRW0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/HAKJORpcDaejNGT3WUzQJKwnRW0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/HAKJORpcDaejNGT3WUzQJKwnRW0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=Nj5nTocqqL4:yFcJhnEHvYo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=Nj5nTocqqL4:yFcJhnEHvYo:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=Nj5nTocqqL4:yFcJhnEHvYo:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=Nj5nTocqqL4:yFcJhnEHvYo:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=Nj5nTocqqL4:yFcJhnEHvYo:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=Nj5nTocqqL4:yFcJhnEHvYo:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=Nj5nTocqqL4:yFcJhnEHvYo:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=Nj5nTocqqL4:yFcJhnEHvYo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=Nj5nTocqqL4:yFcJhnEHvYo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Knowhowlab/~4/Nj5nTocqqL4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.knowhowlab.org/feeds/8785141635471020060/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.knowhowlab.org/2010/07/jmx-management-model-implementation.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3314286357054482328/posts/default/8785141635471020060?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3314286357054482328/posts/default/8785141635471020060?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Knowhowlab/~3/Nj5nTocqqL4/jmx-management-model-implementation.html" title="JMX Management Model Implementation: Release 1.0.2" /><author><name>Dmytro Pishchukhin</name><uri>https://profiles.google.com/106807340219118383792</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-ZZb_y1fm8uQ/AAAAAAAAAAI/AAAAAAAACMw/zItcRzswVq4/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.knowhowlab.org/2010/07/jmx-management-model-implementation.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkMER309cSp7ImA9WxFUGUQ.&quot;"><id>tag:blogger.com,1999:blog-3314286357054482328.post-3850945676886535267</id><published>2010-07-01T17:33:00.000+02:00</published><updated>2010-07-01T17:33:26.369+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-07-01T17:33:26.369+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="general" /><title>Blog update</title><content type="html">Hello,&lt;br /&gt;
&lt;br /&gt;
I've just moved blog from http://www.osgilab.org to http://blog.knowhowlab.org. It could be unavailable for couple of days. Hope to solve all problems with host change as soon as possible.&lt;br /&gt;
 &lt;br /&gt;
 Sorry for inconvenience.&lt;br /&gt;
&lt;br /&gt;
Best regards,&lt;br /&gt;
Dmytro&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3314286357054482328-3850945676886535267?l=blog.knowhowlab.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/dA__NMM_Z0mHO_GxHSS5tRn7cFw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/dA__NMM_Z0mHO_GxHSS5tRn7cFw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/dA__NMM_Z0mHO_GxHSS5tRn7cFw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/dA__NMM_Z0mHO_GxHSS5tRn7cFw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=yUwz3EMeB8c:RLbXDR4RBMA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=yUwz3EMeB8c:RLbXDR4RBMA:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=yUwz3EMeB8c:RLbXDR4RBMA:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=yUwz3EMeB8c:RLbXDR4RBMA:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=yUwz3EMeB8c:RLbXDR4RBMA:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=yUwz3EMeB8c:RLbXDR4RBMA:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=yUwz3EMeB8c:RLbXDR4RBMA:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=yUwz3EMeB8c:RLbXDR4RBMA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=yUwz3EMeB8c:RLbXDR4RBMA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Knowhowlab/~4/yUwz3EMeB8c" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.knowhowlab.org/feeds/3850945676886535267/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.knowhowlab.org/2010/07/blog-update.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3314286357054482328/posts/default/3850945676886535267?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3314286357054482328/posts/default/3850945676886535267?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Knowhowlab/~3/yUwz3EMeB8c/blog-update.html" title="Blog update" /><author><name>Dmytro Pishchukhin</name><uri>https://profiles.google.com/106807340219118383792</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-ZZb_y1fm8uQ/AAAAAAAAAAI/AAAAAAAACMw/zItcRzswVq4/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.knowhowlab.org/2010/07/blog-update.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUEASX47fCp7ImA9WxFUGUQ.&quot;"><id>tag:blogger.com,1999:blog-3314286357054482328.post-8094067434266843016</id><published>2010-06-28T23:09:00.002+02:00</published><updated>2010-07-01T17:20:48.004+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-07-01T17:20:48.004+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="integration" /><category scheme="http://www.blogger.com/atom/ns#" term="tools" /><category scheme="http://www.blogger.com/atom/ns#" term="felix" /><category scheme="http://www.blogger.com/atom/ns#" term="equinox" /><category scheme="http://www.blogger.com/atom/ns#" term="pax runner" /><category scheme="http://www.blogger.com/atom/ns#" term="osgi" /><category scheme="http://www.blogger.com/atom/ns#" term="shell" /><category scheme="http://www.blogger.com/atom/ns#" term="maven" /><category scheme="http://www.blogger.com/atom/ns#" term="gogo" /><title>How to replace standard Equinox shell with Apache Felix GoGo</title><content type="html">Hello,&lt;br /&gt;
&lt;br /&gt;
I've just spent some time to figure out how to integrate &lt;a href="http://felix.apache.org/site/apache-felix-gogo.html"&gt;Apache Felix GoGo&lt;/a&gt; shell into Eclipse Equinox. I found two steps that should be done for this:&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Disable standard Equinox shell and activate GoGo shell as default. Actually, it was not so complicated. One problem, that Equinox shell is a part of system bundle and you cannot just throw it away and replace with another implementation as you can do it with Knopflerfish. Equinox has runtime options to enable and disable console (-console, -noConsole). Then, to enable GoGo we have to install and start 3 GoGo bundles with runtime, shell and commands functionality. Fine! Now we can register shell commands based on GoGo API. Known issue: I could not replace shell when Equinox is started via Eclipse Launcher.&lt;/li&gt;
&lt;li&gt;The second and also very important step is how to integrate Equinox shell commands into GoGo shell. I wrote some Equinox-&amp;gt;GoGo adapter bundle that tracks Equinox shell services and registers GoGo shell service. This adapter can redirect calls from GoGo to Equinox. It can also add some usage help to Equinox commands if this help is provided by Equinox shell service.&amp;nbsp;&lt;/li&gt;
&lt;/ol&gt;
When above steps are finished (except support of Eclipse Launcher) we can add new shell commands with GoGo and Equinox shell APIs.&lt;br /&gt;
&lt;br /&gt;
Below you can find some logs from my console and the way how you can run this on your computer.&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
Standard Equinox Console:
&lt;br /&gt;
&lt;pre&gt;osgi&amp;gt; help
---Controlling the OSGi framework---
 launch - start the OSGi Framework
 shutdown - shutdown the OSGi Framework
 close - shutdown and exit
 exit - exit immediately (System.exit)
 init - uninstall all bundles
 setprop &lt;key&gt;=&lt;value&gt; - set the OSGi property
.......
&lt;/value&gt;&lt;/key&gt;&lt;/pre&gt;
&lt;br /&gt;
Now Equinox with GoGo console and support of Equinox shell commands
&lt;br /&gt;
&lt;pre&gt;g! help
equinox:b
equinox:bundle
equinox:bundles
equinox:classSpaces
equinox:close
equinox:diag
equinox:disableBundle
equinox:disabledBundles
equinox:enableBundle
equinox:exec
equinox:exit
equinox:fork
.....
felix:start
felix:stop
felix:uninstall
felix:update
felix:which
gogo:cat
gogo:each
gogo:echo
gogo:format
gogo:getopt
gogo:gosh
......

g! help ss
ss - [-s [&lt;comma bundle="" list="" of="" separated="" states=""&gt;]  [&lt;segment bsn="" of=""&gt;]] - display installed bundles (short status)
   scope: equinox
   parameters:
      CommandSession
      String[]

g! ss -s ACTIVE
Framework is launched.
id      State       Bundle
0       ACTIVE      org.eclipse.osgi_3.6.0.v20100517
1       ACTIVE      org.apache.felix.gogo.runtime_0.6.0
2       ACTIVE      org.apache.felix.gogo.shell_0.6.0
3       ACTIVE      org.apache.felix.gogo.command_0.6.0
4       ACTIVE      org.knowhowlab.osgi.experiments.gogo.equinox_1.0.0
&lt;/segment&gt;&lt;/comma&gt;&lt;/pre&gt;
&lt;br /&gt;
This solution was an experiment to integrate Apache Felix GoGo into Eclipse Equinox with support of all Equinox shell commands. 
&lt;br /&gt;
If you like to make some tests on you computer you have to download &lt;a href="http://osgilab.googlecode.com/svn/trunk/org.knowhowlab.osgi.experiments/gogo/equinox/demo-pom.xml"&gt;Maven project&lt;/a&gt; and &lt;a href="http://osgilab.googlecode.com/svn/trunk/org.knowhowlab.osgi.experiments/gogo/equinox/platform-equinox-3.6.0.xml"&gt;platform definition&lt;/a&gt;. To start OSGi framework use command:
&lt;pre class="Xml" name="code"&gt;
mvn -f demo-pom.xml
&lt;/pre&gt;
&lt;br/&gt;
Hope, that code helps you.&lt;br/&gt;&lt;br/&gt;

Have a nice day,&lt;br/&gt;
Dmytro&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3314286357054482328-8094067434266843016?l=blog.knowhowlab.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/_vJ9x-OFHoKhcY4EyPimZlSWKZs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/_vJ9x-OFHoKhcY4EyPimZlSWKZs/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/_vJ9x-OFHoKhcY4EyPimZlSWKZs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/_vJ9x-OFHoKhcY4EyPimZlSWKZs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=lrtsdeI2Za0:vXyCOnDoqdE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=lrtsdeI2Za0:vXyCOnDoqdE:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=lrtsdeI2Za0:vXyCOnDoqdE:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=lrtsdeI2Za0:vXyCOnDoqdE:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=lrtsdeI2Za0:vXyCOnDoqdE:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=lrtsdeI2Za0:vXyCOnDoqdE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=lrtsdeI2Za0:vXyCOnDoqdE:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=lrtsdeI2Za0:vXyCOnDoqdE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=lrtsdeI2Za0:vXyCOnDoqdE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Knowhowlab/~4/lrtsdeI2Za0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.knowhowlab.org/feeds/8094067434266843016/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.knowhowlab.org/2010/06/how-to-replace-standard-equinox-shell.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3314286357054482328/posts/default/8094067434266843016?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3314286357054482328/posts/default/8094067434266843016?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Knowhowlab/~3/lrtsdeI2Za0/how-to-replace-standard-equinox-shell.html" title="How to replace standard Equinox shell with Apache Felix GoGo" /><author><name>Dmytro Pishchukhin</name><uri>https://profiles.google.com/106807340219118383792</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-ZZb_y1fm8uQ/AAAAAAAAAAI/AAAAAAAACMw/zItcRzswVq4/s512-c/photo.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://blog.knowhowlab.org/2010/06/how-to-replace-standard-equinox-shell.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEMCSX8zfSp7ImA9WxFUE0w.&quot;"><id>tag:blogger.com,1999:blog-3314286357054482328.post-2491549812855084320</id><published>2010-06-23T19:01:00.000+02:00</published><updated>2010-06-23T19:01:08.185+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-23T19:01:08.185+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="tools" /><category scheme="http://www.blogger.com/atom/ns#" term="pax exam" /><category scheme="http://www.blogger.com/atom/ns#" term="release" /><category scheme="http://www.blogger.com/atom/ns#" term="pax runner" /><category scheme="http://www.blogger.com/atom/ns#" term="testing" /><category scheme="http://www.blogger.com/atom/ns#" term="osgi" /><category scheme="http://www.blogger.com/atom/ns#" term="junit" /><category scheme="http://www.blogger.com/atom/ns#" term="maven" /><category scheme="http://www.blogger.com/atom/ns#" term="specification" /><title>Eclipse Equinox Helios 3.6 is out!</title><content type="html">Hello,&lt;br /&gt;
&lt;br /&gt;
now we have very nice time to test our bundles and applications with 3 the most popular OSGi R4 v.4.2 frameworks: Felix, Equinox and Knopflerfish. The Equinox 3.6 was released just a few hours ago. 
&lt;br /&gt;
I've composed platform definition for Eclipse Equinox 3.6 for Pax Runned and Pax Exam.
&lt;br /&gt;
You can download it from &lt;a href="http://osgilab.googlecode.com/svn/trunk/org.osgilab.tips/pax-platforms/platform-equinox-3.6.0.xml"&gt;here&lt;/a&gt; or&amp;nbsp; you can use it directly from POM:&lt;br /&gt;
&lt;pre class="Xml" name="code"&gt;
&amp;lt;plugin&amp;gt;
    &amp;lt;groupId&amp;gt;org.ops4j&amp;lt;/groupId&amp;gt;
    &amp;lt;artifactId&amp;gt;maven-pax-plugin&amp;lt;/artifactId&amp;gt;
    &amp;lt;version&amp;gt;1.4&amp;lt;/version&amp;gt;
    &amp;lt;configuration&amp;gt;
        &amp;lt;runner&amp;gt;1.4.0&amp;lt;/runner&amp;gt;
        &amp;lt;framework&amp;gt;equinox&amp;lt;/framework&amp;gt;
        &amp;lt;provision&amp;gt;
            &amp;lt;param&amp;gt;--log=debug&amp;lt;/param&amp;gt;
            &amp;lt;param&amp;gt;--workingDirectory=target/runner&amp;lt;/param&amp;gt;
            &amp;lt;param&amp;gt;--ee=J2SE-1.5&amp;lt;/param&amp;gt;
            &amp;lt;param&amp;gt;--definitionURL=http://osgilab.googlecode.com/svn/trunk/org.osgilab.tips/pax-platforms/platform-equinox-3.6.0.xml&amp;lt;/param&amp;gt;
        &amp;lt;/provision&amp;gt;
    &amp;lt;/configuration&amp;gt;
&amp;lt;/plugin&amp;gt;
&lt;/pre&gt;
&lt;br /&gt;

or from Pax Exam Unit test:
&lt;pre class="Java" name="code"&gt;
public class PaxExamTest {
   .......................
   @Configuration
    public static Option[] configurePlatform() {
        return options(
                equinox(),
                rawPaxRunnerOption(&amp;quot;--definitionURL&amp;quot;, &amp;quot;http://osgilab.googlecode.com/svn/trunk/org.osgilab.tips/pax-platforms/platform-equinox-3.6.0.xml&amp;quot;)
        );
    }
   .......................
}
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
Have a nice OSGi development and testing.
&lt;br /&gt;
Dmitriy&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3314286357054482328-2491549812855084320?l=blog.knowhowlab.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/7qofdFarnf2clNc8t0gPj9tSjvA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7qofdFarnf2clNc8t0gPj9tSjvA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/7qofdFarnf2clNc8t0gPj9tSjvA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7qofdFarnf2clNc8t0gPj9tSjvA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=P2OrZK6tit4:0nUn5KXlWr4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=P2OrZK6tit4:0nUn5KXlWr4:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=P2OrZK6tit4:0nUn5KXlWr4:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=P2OrZK6tit4:0nUn5KXlWr4:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=P2OrZK6tit4:0nUn5KXlWr4:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=P2OrZK6tit4:0nUn5KXlWr4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=P2OrZK6tit4:0nUn5KXlWr4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=P2OrZK6tit4:0nUn5KXlWr4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=P2OrZK6tit4:0nUn5KXlWr4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Knowhowlab/~4/P2OrZK6tit4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.knowhowlab.org/feeds/2491549812855084320/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.knowhowlab.org/2010/06/eclipse-equinox-helios-36-is-out.html#comment-form" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3314286357054482328/posts/default/2491549812855084320?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3314286357054482328/posts/default/2491549812855084320?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Knowhowlab/~3/P2OrZK6tit4/eclipse-equinox-helios-36-is-out.html" title="Eclipse Equinox Helios 3.6 is out!" /><author><name>Dmytro Pishchukhin</name><uri>https://profiles.google.com/106807340219118383792</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-ZZb_y1fm8uQ/AAAAAAAAAAI/AAAAAAAACMw/zItcRzswVq4/s512-c/photo.jpg" /></author><thr:total>4</thr:total><feedburner:origLink>http://blog.knowhowlab.org/2010/06/eclipse-equinox-helios-36-is-out.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEcDQHw-fyp7ImA9WxFUEUU.&quot;"><id>tag:blogger.com,1999:blog-3314286357054482328.post-8584578664131840940</id><published>2010-06-22T07:53:00.001+02:00</published><updated>2010-06-22T07:54:31.257+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-22T07:54:31.257+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="knopflerfish" /><category scheme="http://www.blogger.com/atom/ns#" term="tools" /><category scheme="http://www.blogger.com/atom/ns#" term="pax exam" /><category scheme="http://www.blogger.com/atom/ns#" term="release" /><category scheme="http://www.blogger.com/atom/ns#" term="pax runner" /><category scheme="http://www.blogger.com/atom/ns#" term="osgi" /><category scheme="http://www.blogger.com/atom/ns#" term="junit" /><category scheme="http://www.blogger.com/atom/ns#" term="maven" /><title>Knopflerfish 3.0.0 Released</title><content type="html">Hi, &lt;br /&gt;
&lt;br /&gt;
This month is very rich for new OSGi framework versions. Apache Felix 3.0.0 was released a week ago and now &lt;a href="http://www.knopflerfish.org/kf3_osgi_r4_v4.2.html"&gt;Knopflerfish OSGi framework 3.0.0 with R4 V4.2 support is released&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
What is inside:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Core specifications: Security, Module Layer, Service Layer, Life Cycle Layer - fully implemented&lt;/li&gt;
&lt;li&gt;Framework Services: Package Admin with multihost fragments support, Start Level, Conditional Permission Admin, Permission Admin, URL Handler, Service Hooks&lt;/li&gt;
&lt;li&gt;Service Compendium: Log, HTTP, Device Access, Configuration Admin, Meta Type, Preferences, User Admin, IO Connector, Declarative Services, Event Admin, Service and Bundle Trackers, XML Parser Service, Position, Measurement and State&lt;/li&gt;
&lt;/ul&gt;
A nice bunch of R4 V4.2 services :)&lt;br /&gt;
&lt;br /&gt;
I've composed platform definition for Knopflerfish 3.0.0 for Pax Runned and Pax Exam.
&lt;br /&gt;
You can download it from &lt;a href="http://osgilab.googlecode.com/svn/trunk/org.osgilab.tips/pax-platforms/platform-knopflerfish-3.0.0.xml"&gt;here&lt;/a&gt; or&amp;nbsp; you can use it directly from POM:&lt;br /&gt;
&lt;pre class="Xml" name="code"&gt;
&amp;lt;plugin&amp;gt;
    &amp;lt;groupId&amp;gt;org.ops4j&amp;lt;/groupId&amp;gt;
    &amp;lt;artifactId&amp;gt;maven-pax-plugin&amp;lt;/artifactId&amp;gt;
    &amp;lt;version&amp;gt;1.4&amp;lt;/version&amp;gt;
    &amp;lt;configuration&amp;gt;
        &amp;lt;runner&amp;gt;1.4.0&amp;lt;/runner&amp;gt;
        &amp;lt;framework&amp;gt;knopflerfish&amp;lt;/framework&amp;gt;
        &amp;lt;provision&amp;gt;
            &amp;lt;param&amp;gt;--log=debug&amp;lt;/param&amp;gt;
            &amp;lt;param&amp;gt;--workingDirectory=target/runner&amp;lt;/param&amp;gt;
            &amp;lt;param&amp;gt;--ee=J2SE-1.5&amp;lt;/param&amp;gt;
            &amp;lt;param&amp;gt;--definitionURL=http://osgilab.googlecode.com/svn/trunk/org.osgilab.tips/pax-platforms/platform-knopflerfish-3.0.0.xml&amp;lt;/param&amp;gt;
        &amp;lt;/provision&amp;gt;
    &amp;lt;/configuration&amp;gt;
&amp;lt;/plugin&amp;gt;
&lt;/pre&gt;
&lt;br /&gt;

or from Pax Exam Unit test:
&lt;pre class="Java" name="code"&gt;
public class PaxExamTest {
   .......................
   @Configuration
    public static Option[] configurePlatform() {
        return options(
                knopflerfish(),
                rawPaxRunnerOption(&amp;quot;--definitionURL&amp;quot;, &amp;quot;http://osgilab.googlecode.com/svn/trunk/org.osgilab.tips/pax-platforms/platform-knopflerfish-3.0.0.xml&amp;quot;)
        );
    }
   .......................
}
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
Waiting for Eclipse Helios release just to have all 3 OSGi R4 V4.2 framework implementations.
&lt;br /&gt;
&lt;br /&gt;
Have a nice day,
&lt;br /&gt;
Dmitriy&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3314286357054482328-8584578664131840940?l=blog.knowhowlab.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/7SMp7SAFLsxF5c59pddLZHe3fXc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7SMp7SAFLsxF5c59pddLZHe3fXc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/7SMp7SAFLsxF5c59pddLZHe3fXc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7SMp7SAFLsxF5c59pddLZHe3fXc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=_dri-fzNomo:jhSTj1sV3ok:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=_dri-fzNomo:jhSTj1sV3ok:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=_dri-fzNomo:jhSTj1sV3ok:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=_dri-fzNomo:jhSTj1sV3ok:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=_dri-fzNomo:jhSTj1sV3ok:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=_dri-fzNomo:jhSTj1sV3ok:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=_dri-fzNomo:jhSTj1sV3ok:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=_dri-fzNomo:jhSTj1sV3ok:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=_dri-fzNomo:jhSTj1sV3ok:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Knowhowlab/~4/_dri-fzNomo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.knowhowlab.org/feeds/8584578664131840940/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.knowhowlab.org/2010/06/knopflerfish-300-released.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3314286357054482328/posts/default/8584578664131840940?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3314286357054482328/posts/default/8584578664131840940?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Knowhowlab/~3/_dri-fzNomo/knopflerfish-300-released.html" title="Knopflerfish 3.0.0 Released" /><author><name>Dmytro Pishchukhin</name><uri>https://profiles.google.com/106807340219118383792</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-ZZb_y1fm8uQ/AAAAAAAAAAI/AAAAAAAACMw/zItcRzswVq4/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.knowhowlab.org/2010/06/knopflerfish-300-released.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck4FRX89cSp7ImA9WxFVFkQ.&quot;"><id>tag:blogger.com,1999:blog-3314286357054482328.post-7581774211207436707</id><published>2010-06-16T14:21:00.001+02:00</published><updated>2010-06-16T14:21:54.169+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-16T14:21:54.169+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="felix" /><category scheme="http://www.blogger.com/atom/ns#" term="pax exam" /><category scheme="http://www.blogger.com/atom/ns#" term="pax runner" /><category scheme="http://www.blogger.com/atom/ns#" term="osgi" /><category scheme="http://www.blogger.com/atom/ns#" term="shell" /><category scheme="http://www.blogger.com/atom/ns#" term="gogo" /><title>Pax Runner/Exam: Felix 3.0.0 + Gogo support</title><content type="html">Hello,&lt;br /&gt;
&lt;br /&gt;
I've just created Pax Runner/Exam platform definition for just released Felix 3.0.0 and Felix Gogo 0.6.0 (RFC147 implementation).&lt;br /&gt;
&lt;br /&gt;
You can download it from &lt;a href="http://osgilab.googlecode.com/svn/trunk/org.osgilab.tips/pax-platforms/platform-felix-3.0.0.xml"&gt;here&lt;/a&gt; or&amp;nbsp; you can use it directly from POM:&lt;br /&gt;
&lt;pre class="Xml" name="code"&gt;
&amp;lt;plugin&amp;gt;
    &amp;lt;groupId&amp;gt;org.ops4j&amp;lt;/groupId&amp;gt;
    &amp;lt;artifactId&amp;gt;maven-pax-plugin&amp;lt;/artifactId&amp;gt;
    &amp;lt;version&amp;gt;1.4&amp;lt;/version&amp;gt;
    &amp;lt;configuration&amp;gt;
        &amp;lt;runner&amp;gt;1.4.0&amp;lt;/runner&amp;gt;
        &amp;lt;framework&amp;gt;felix&amp;lt;/framework&amp;gt;
        &amp;lt;provision&amp;gt;
            &amp;lt;param&amp;gt;--log=debug&amp;lt;/param&amp;gt;
            &amp;lt;param&amp;gt;--workingDirectory=target/runner&amp;lt;/param&amp;gt;
            &amp;lt;param&amp;gt;--ee=J2SE-1.5&amp;lt;/param&amp;gt;
            &amp;lt;param&amp;gt;--definitionURL=http://osgilab.googlecode.com/svn/trunk/org.osgilab.tips/pax-platforms/platform-felix-3.0.0.xml&amp;lt;/param&amp;gt;
        &amp;lt;/provision&amp;gt;
    &amp;lt;/configuration&amp;gt;
&amp;lt;/plugin&amp;gt;
&lt;/pre&gt;
&lt;br /&gt;

or from Pax Exam Unit test:
&lt;pre class="Java" name="code"&gt;
public class PaxExamTest {
   .......................
   @Configuration
    public static Option[] configurePlatform() {
        return options(
                felix(),
                rawPaxRunnerOption(&amp;quot;--definitionURL&amp;quot;, &amp;quot;http://osgilab.googlecode.com/svn/trunk/org.osgilab.tips/pax-platforms/platform-felix-3.0.0.xml&amp;quot;)
        );
    }
   .......................
}
&lt;/pre&gt;

Best regards,
Dmitriy&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3314286357054482328-7581774211207436707?l=blog.knowhowlab.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/GdXxI0beDsTtDxkpd6mtDD3N5IA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/GdXxI0beDsTtDxkpd6mtDD3N5IA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/GdXxI0beDsTtDxkpd6mtDD3N5IA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/GdXxI0beDsTtDxkpd6mtDD3N5IA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=gBA8pc1P9oE:dyKcSzC7koE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=gBA8pc1P9oE:dyKcSzC7koE:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=gBA8pc1P9oE:dyKcSzC7koE:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=gBA8pc1P9oE:dyKcSzC7koE:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=gBA8pc1P9oE:dyKcSzC7koE:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=gBA8pc1P9oE:dyKcSzC7koE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=gBA8pc1P9oE:dyKcSzC7koE:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=gBA8pc1P9oE:dyKcSzC7koE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=gBA8pc1P9oE:dyKcSzC7koE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Knowhowlab/~4/gBA8pc1P9oE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.knowhowlab.org/feeds/7581774211207436707/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.knowhowlab.org/2010/06/pax-runnerexam-felix-300-gogo-support.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3314286357054482328/posts/default/7581774211207436707?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3314286357054482328/posts/default/7581774211207436707?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Knowhowlab/~3/gBA8pc1P9oE/pax-runnerexam-felix-300-gogo-support.html" title="Pax Runner/Exam: Felix 3.0.0 + Gogo support" /><author><name>Dmytro Pishchukhin</name><uri>https://profiles.google.com/106807340219118383792</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-ZZb_y1fm8uQ/AAAAAAAAAAI/AAAAAAAACMw/zItcRzswVq4/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.knowhowlab.org/2010/06/pax-runnerexam-felix-300-gogo-support.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEUGRHo4cCp7ImA9Wx5bFEk.&quot;"><id>tag:blogger.com,1999:blog-3314286357054482328.post-3516303048784086835</id><published>2010-06-12T20:49:00.003+02:00</published><updated>2010-10-30T15:43:45.438+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-30T15:43:45.438+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="integration" /><category scheme="http://www.blogger.com/atom/ns#" term="tools" /><category scheme="http://www.blogger.com/atom/ns#" term="spring osgi" /><category scheme="http://www.blogger.com/atom/ns#" term="pax exam" /><category scheme="http://www.blogger.com/atom/ns#" term="tutorial" /><category scheme="http://www.blogger.com/atom/ns#" term="pax runner" /><category scheme="http://www.blogger.com/atom/ns#" term="osgi" /><category scheme="http://www.blogger.com/atom/ns#" term="junit" /><category scheme="http://www.blogger.com/atom/ns#" term="maven" /><title>OSGi Tutorial: From project structure to release</title><content type="html">Hello everybody!&lt;br /&gt;
&lt;br /&gt;
This is a small OSGi tutorial where I tried to explain all main steps in OSGi bundle development. The tutorial is based on my own experience with MonitorAdmin API implementation. All sources you can find &lt;a href="http://osgilab.googlecode.com/svn/trunk/org.osgilab.bundles/"&gt;here&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Contents:&lt;/b&gt;
&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="#tools"&gt;Tools&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#pom"&gt;Maven POM file&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#development"&gt;Development tips&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#unit"&gt;Unit tests with mocks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#integration"&gt;Integration tests inside OSGi framework&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#manual"&gt;Provisioning and manual testing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#release"&gt;Release to Central Maven repository&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#references"&gt;References&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
Let's start!&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;ol&gt;
&lt;li&gt;&lt;b&gt;&lt;a name="tools"&gt;Tools.&lt;/a&gt;&lt;/b&gt; First of all, we have to prepare tools:
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://maven.apache.org/download.html"&gt;Apache Maven 2.x &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Your IDE with Maven support.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;

&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a name="pom"&gt;Create Maven POM file for your OSGi bundle.&lt;/a&gt;&lt;/b&gt; The goal of this step is a configuration how to package your bundle: which classes are included and add OSGi specific entries to JAR manifest file.
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;POM OSGi module configuration:
&lt;br /&gt;
&lt;pre class="Xml" name="code"&gt;&amp;lt;project&amp;gt;
    &amp;lt;modelVersion&amp;gt;4.0.0&amp;lt;/modelVersion&amp;gt;
    &amp;lt;!-- OSGi bundle group, artifact and version --&amp;gt;
    &amp;lt;groupId&amp;gt;org.osgilab.bundles&amp;lt;/groupId&amp;gt;
    &amp;lt;artifactId&amp;gt;monitoradmin&amp;lt;/artifactId&amp;gt;
    &amp;lt;version&amp;gt;1.0.2-SNAPSHOT&amp;lt;/version&amp;gt;
    &amp;lt;!-- module packaging [1] --&amp;gt;
    &amp;lt;packaging&amp;gt;bundle&amp;lt;/packaging&amp;gt;

    &amp;lt;!-- module dependencies [2] --&amp;gt;
    &amp;lt;dependencies&amp;gt;
        &amp;lt;dependency&amp;gt;
            &amp;lt;groupId&amp;gt;org.osgi&amp;lt;/groupId&amp;gt;
            &amp;lt;artifactId&amp;gt;org.osgi.core&amp;lt;/artifactId&amp;gt;
            &amp;lt;version&amp;gt;4.1.0&amp;lt;/version&amp;gt;
        &amp;lt;/dependency&amp;gt;
        &amp;lt;dependency&amp;gt;
            &amp;lt;groupId&amp;gt;org.osgi&amp;lt;/groupId&amp;gt;
            &amp;lt;artifactId&amp;gt;org.osgi.compendium&amp;lt;/artifactId&amp;gt;
            &amp;lt;version&amp;gt;4.1.0&amp;lt;/version&amp;gt;
        &amp;lt;/dependency&amp;gt;
    &amp;lt;/dependencies&amp;gt;
    &amp;lt;build&amp;gt;
        &amp;lt;plugins&amp;gt;
            &amp;lt;!-- maven-bundle-plugin [3] --&amp;gt;
            &amp;lt;plugin&amp;gt;
                &amp;lt;groupId&amp;gt;org.apache.felix&amp;lt;/groupId&amp;gt;
                &amp;lt;artifactId&amp;gt;maven-bundle-plugin&amp;lt;/artifactId&amp;gt;
                &amp;lt;version&amp;gt;2.0.1&amp;lt;/version&amp;gt;
                &amp;lt;extensions&amp;gt;true&amp;lt;/extensions&amp;gt;
                &amp;lt;!-- maven-bundle-plugin configuration [4] --&amp;gt;
                &amp;lt;configuration&amp;gt;
                    &amp;lt;instructions&amp;gt;
                        &amp;lt;Export-Package/&amp;gt;
                        &amp;lt;Import-Package&amp;gt;
                            org.osgi*
                        &amp;lt;/Import-Package&amp;gt;
                        &amp;lt;Bundle-Activator&amp;gt;
                            org.osgilab.bundles.monitoradmin.Activator
                        &amp;lt;/Bundle-Activator&amp;gt;
                        &amp;lt;Bundle-SymbolicName&amp;gt;
                            ${project.groupId}.${project.artifactId};singleton:=true
                        &amp;lt;/Bundle-SymbolicName&amp;gt;
                        &amp;lt;Bundle-RequiredExecutionEnvironment&amp;gt;
                            J2SE-1.5
                        &amp;lt;/Bundle-RequiredExecutionEnvironment&amp;gt;
                    &amp;lt;/instructions&amp;gt;
                &amp;lt;/configuration&amp;gt;
            &amp;lt;/plugin&amp;gt;
            &amp;lt;!-- other plugins ... --&amp;gt;
        &amp;lt;/plugins&amp;gt;
    &amp;lt;/build&amp;gt;
&amp;lt;/project&amp;gt;
&lt;/pre&gt;
[1] - &lt;b&gt;bundle&lt;/b&gt; packaging is a custom packaging type that is supported by &lt;a href="http://felix.apache.org/site/apache-felix-maven-bundle-plugin-bnd.html"&gt;maven-bundle-plugin&lt;/a&gt;&lt;br /&gt;
[2] - module dependencies. By default, OSGi Core and Compendium API are used.&lt;br /&gt;
[3] - maven-bundle-plugin. This plugin is based on &lt;a href="http://www.aqute.biz/Code/Bnd"&gt;Bnd tool&lt;/a&gt; and helps to generate OSGi bundle manifest&lt;br /&gt;
[4] - maven-bundle-plugin configuration with OSGi specific instructions&lt;br /&gt;

&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Alternative 1:&lt;/b&gt; use &lt;b&gt;jar&lt;/b&gt; packaging. In this case you have to configure maven-bundle-plugin to generate manifest file and maven-jar-plugin to include the generated MANIFEST.MF into OSGi JAR file.
&lt;br /&gt;
&lt;pre class="Xml" name="code"&gt;&amp;lt;project&amp;gt;
    &amp;lt;!-- module packaging --&amp;gt;
    &amp;lt;packaging&amp;gt;jar&amp;lt;/packaging&amp;gt;
    &amp;lt;build&amp;gt;
        &amp;lt;plugins&amp;gt;
            &amp;lt;!-- maven-bundle-plugin --&amp;gt;
            &amp;lt;plugin&amp;gt;
                &amp;lt;groupId&amp;gt;org.apache.felix&amp;lt;/groupId&amp;gt;
                &amp;lt;artifactId&amp;gt;maven-bundle-plugin&amp;lt;/artifactId&amp;gt;
                &amp;lt;version&amp;gt;2.0.1&amp;lt;/version&amp;gt;
                &amp;lt;extensions&amp;gt;true&amp;lt;/extensions&amp;gt;
                &amp;lt;!-- configure plugin to generate MANIFEST.MF --&amp;gt;
                &amp;lt;executions&amp;gt;
                    &amp;lt;execution&amp;gt;
                        &amp;lt;id&amp;gt;bundle-manifest&amp;lt;/id&amp;gt;
                        &amp;lt;phase&amp;gt;process-classes&amp;lt;/phase&amp;gt;
                        &amp;lt;goals&amp;gt;
                            &amp;lt;goal&amp;gt;manifest&amp;lt;/goal&amp;gt;
                        &amp;lt;/goals&amp;gt;
                    &amp;lt;/execution&amp;gt;
                &amp;lt;/executions&amp;gt;
                &amp;lt;configuration&amp;gt;
                    &amp;lt;!-- configure plugin to support jar packaging --&amp;gt;
                    &amp;lt;supportedProjectTypes&amp;gt;
                        &amp;lt;supportedProjectType&amp;gt;jar&amp;lt;/supportedProjectType&amp;gt;
                    &amp;lt;/supportedProjectTypes&amp;gt;
                    &amp;lt;instructions&amp;gt;
                        &amp;lt;!-- OSGi specific instruction --&amp;gt;
                    &amp;lt;/instructions&amp;gt;
                &amp;lt;/configuration&amp;gt;
            &amp;lt;/plugin&amp;gt;
            &amp;lt;!-- maven-jar-plugin --&amp;gt;
            &amp;lt;plugin&amp;gt;
                &amp;lt;groupId&amp;gt;org.apache.maven.plugins&amp;lt;/groupId&amp;gt;
                &amp;lt;artifactId&amp;gt;maven-jar-plugin&amp;lt;/artifactId&amp;gt;
                &amp;lt;configuration&amp;gt;
                    &amp;lt;archive&amp;gt;
                        &amp;lt;!-- configure plugin to use MANIFEST.MF
                        generated by maven-bundle-plugin --&amp;gt;
                        &amp;lt;manifestFile&amp;gt;
                            ${project.build.outputDirectory}/META-INF/MANIFEST.MF
                        &amp;lt;/manifestFile&amp;gt;
                    &amp;lt;/archive&amp;gt;
                &amp;lt;/configuration&amp;gt;
            &amp;lt;/plugin&amp;gt;
            &amp;lt;!-- other plugins ... --&amp;gt;
        &amp;lt;/plugins&amp;gt;
    &amp;lt;/build&amp;gt;
&amp;lt;/project&amp;gt;
&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Alternative 2:&lt;/b&gt; move maven-bundle-plugin OSGi specific configuration from POM to separate file. You can use Bnd native style configuration file with OSGi instructions. You can define OSGi instructions in POM and in Bnd configuration file.
&lt;br /&gt;
&lt;pre class="Xml" name="code"&gt;&amp;lt;project&amp;gt;
    &amp;lt;build&amp;gt;
        &amp;lt;plugins&amp;gt;
            &amp;lt;!-- maven-bundle-plugin --&amp;gt;
            &amp;lt;plugin&amp;gt;
                &amp;lt;groupId&amp;gt;org.apache.felix&amp;lt;/groupId&amp;gt;
                &amp;lt;artifactId&amp;gt;maven-bundle-plugin&amp;lt;/artifactId&amp;gt;
                &amp;lt;version&amp;gt;2.0.1&amp;lt;/version&amp;gt;
                &amp;lt;extensions&amp;gt;true&amp;lt;/extensions&amp;gt;
                &amp;lt;configuration&amp;gt;
                    &amp;lt;!-- OSGi specific instruction --&amp;gt;
                    &amp;lt;instructions&amp;gt;
                        &amp;lt;Bundle-SymbolicName&amp;gt;
                            ${project.groupId}.${project.artifactId};singleton:=true
                        &amp;lt;/Bundle-SymbolicName&amp;gt;
                        &amp;lt;!-- include instructions from 
                        Bnd native style file osgi.bnd --&amp;gt;
                        &amp;lt;_include&amp;gt;-osgi.bnd&amp;lt;/_include&amp;gt;
                    &amp;lt;/instructions&amp;gt;
                &amp;lt;/configuration&amp;gt;
            &amp;lt;/plugin&amp;gt;
            &amp;lt;!-- other plugins ... --&amp;gt;
        &amp;lt;/plugins&amp;gt;
    &amp;lt;/build&amp;gt;
&amp;lt;/project&amp;gt;
&lt;/pre&gt;
&lt;b&gt;osgi.bnd&lt;/b&gt; - file with Bnd instructions.
&lt;br /&gt;
&lt;pre class="Xml" name="code"&gt;Export-Package:
Import-Package: org.osgi*
Bundle-Activator: org.osgilab.bundles.monitoradmin.Activator
&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Alternative 3:&lt;/b&gt; use manually created MANIFEST.MF &lt;b&gt;(not recommended)&lt;/b&gt;. You can create OSGi specific MANIFEST.MF without any help from maven-bundle-plugin.
&lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;

&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a name="development"&gt;Development tips.&lt;/a&gt;&lt;/b&gt; This is the simplest section in my tutorial - just use standard OO approach and patterns to provide the best quality.&lt;br /&gt;
I can give several tips that you can use during OSGi bundle development &lt;a href="http://blog.knowhowlab.org/2010/10/osgi-tutorial-4-ways-to-activate-code.html"&gt;More details here&lt;/a&gt;:
&lt;ul&gt;
&lt;li&gt;select the most suitable way to activate your bundle. OSGi specification offers several ways: 
&lt;ul&gt;
&lt;li&gt;
BundleActivator - I use this way during development of low-level components
&lt;/li&gt;
&lt;li&gt;
Declarative Services - a very good way to concentrate on the application logic of your code.  
&lt;/li&gt;
&lt;li&gt;
Blueprint Services - this way was firstly implemented in Spring OSGi and then included into OSGi 4.2 specification. You can use this way instead of the Declarative Services if you have the experience with Spring technologies.
&lt;/li&gt;
&lt;li&gt;
Web Application Bundle - this is a new bundle type that was introduced in OSGi Enterprise Specification 4.2. 
&lt;/li&gt;
&lt;/ul&gt;
You have to decide which way suits your bundle design more.
&lt;/li&gt;
&lt;li&gt;
try to decouple your functionality from OSGi specific APIs as much as possible. It helps you to test your functionality with standard unit tests and simple mocks and avoids to move all functionality testing to integration tests.
&lt;/li&gt;
&lt;li&gt;
OSGi best practices:
&lt;ul&gt;
&lt;li&gt;
avoid Require-Bundle. Use Import-Package instead of.
&lt;/li&gt;
&lt;li&gt;
Only import packages that are used or needed. Avoid DynamicImport-Package: *;
&lt;/li&gt;
&lt;li&gt;
Dont forget that OSGi is dynamic environment where new bundles/services could (dis)appear any moment. Use BundleListener/BundleTracker to track bundles, ServiceListener/ServiceTracker (or better Declarative Services/Blueprint Services) to track services, avoid any hard links to services. 
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;br/&gt;
&lt;li&gt;&lt;b&gt;&lt;a name="unit"&gt;Unit tests and OSGi mocks.&lt;/a&gt;&lt;/b&gt; Unit tests should cover as much as possible of your functionality. Of course, it depends on your bundle design. If you detach your functionality from OSGi API you can easily test it. You can also develop simple OSGi specific tests with OSGi API mock classes that are provided by Spring OSGi project. You just need to add dependency to you POM file:
&lt;pre class="Xml" name="code"&gt;
&amp;lt;dependency&amp;gt;
    &amp;lt;groupId&amp;gt;org.springframework.osgi&amp;lt;/groupId&amp;gt;
    &amp;lt;artifactId&amp;gt;spring-osgi-mock&amp;lt;/artifactId&amp;gt;
    &amp;lt;version&amp;gt;1.2.1&amp;lt;/version&amp;gt;
    &amp;lt;scope&amp;gt;test&amp;lt;/scope&amp;gt;
&amp;lt;/dependency&amp;gt;
&lt;/pre&gt;
An example from MonitorAdmin implementation. I do not use OSGi BundleContext methods directly in cases when I try to find some services in OSGi registry. I added a simple interface OsgiVisitor with application-specific methods and implementation of the interface just calls BundleContext methods:
&lt;pre class="Java" name="code"&gt;
/**
 * MonitorAdmin implementation
 */
public class MonitorAdminImpl implements MonitorAdmin, MonitorListener, MonitoringJobVisitor {
    /**
    /**
     * Initialize MonitorAdmin implementation instance
     *
     * @param osgiVisitor osgi functionality visitor
     * @param logVisitor loggers visitor
     */
    public MonitorAdminImpl(OsgiVisitor osgiVisitor, LogVisitor logVisitor) {
        this.osgiVisitor = osgiVisitor;
        this.logVisitor = logVisitor;
    }
}

public interface OsgiVisitor {
    /**
     * Get &lt;code&gt;Monitorable&lt;/code&gt; service by &lt;code&gt;ServiceReference&lt;/code&gt;
     * @param reference &lt;code&gt;ServiceReference&lt;/code&gt;
     * @return &lt;code&gt;Monitorable&lt;/code&gt; service
     */
    Monitorable getService(ServiceReference reference);

    /**
     * Get list of &lt;code&gt;Monitorable&lt;/code&gt; &lt;code&gt;ServiceReference&lt;/code&gt; by monitorableId
     * @param monitorableId monitorable Id
     * @return Array of &lt;code&gt;ServiceReference&lt;/code&gt;s or &lt;code&gt;null&lt;/code&gt;
     */
    ServiceReference[] findMonitorableReferences(String monitorableId);

    /**
     * Post &lt;code&gt;Event&lt;/code&gt; via &lt;code&gt;EventAdmin&lt;/code&gt;
     * @param event event
     */
    void postEvent(Event event);
}
&lt;/pre&gt;
With such design I can create a mock of OsgiVisitor interface and test MonitorAdmin implementation with standard unit tests.
&lt;br/&gt;  
This is a sample unit test with OSGi mocks from MonitorAdmin implementation:
&lt;pre class="Java" name="code"&gt;
@Test
public void testGetMonitorableNames_MonitorableAvailable() throws Exception {
    MockOsgiVisitor osgiVisitor = new MockOsgiVisitor();
    HashMap&amp;lt;ServiceReference, Monitorable&amp;gt; map = new HashMap&amp;lt;ServiceReference, Monitorable&amp;gt;();
    map.put(new MonitorableMockServiceReference(&amp;quot;com.acme.pid2&amp;quot;), new MockMonitorable());
    map.put(new MonitorableMockServiceReference(&amp;quot;com.acme.pid3&amp;quot;), new MockMonitorable());
    map.put(new MonitorableMockServiceReference(&amp;quot;com.acme.pid1&amp;quot;), new MockMonitorable());
    osgiVisitor.setReferences(map);

    MonitorAdmin monitorAdmin = new MonitorAdminImpl(osgiVisitor, new MockLogVisitor());

    String[] monitorableNames = monitorAdmin.getMonitorableNames();
    Assert.assertNotNull(monitorableNames);
    Assert.assertEquals(3, monitorableNames.length);
    Assert.assertEquals(&amp;quot;com.acme.pid1&amp;quot;, monitorableNames[0]);
    Assert.assertEquals(&amp;quot;com.acme.pid2&amp;quot;, monitorableNames[1]);
    Assert.assertEquals(&amp;quot;com.acme.pid3&amp;quot;, monitorableNames[2]);
}
&lt;/pre&gt;

&lt;/li&gt;
&lt;br/&gt;
&lt;li&gt;&lt;b&gt;&lt;a name="integration"&gt;Integration tests inside OSGi framework.&lt;/a&gt;&lt;/b&gt; Integration tests are very important because your OSGi bundle has been testing in real OSGi environment. Usually, integrations tests are placed in separate Maven module. Here is a sample POM for integration tests:&lt;br /&gt; 
&lt;br /&gt;
&lt;pre class="Xml" name="code"&gt;&amp;lt;project&amp;gt;
    &amp;lt;modelVersion&amp;gt;4.0.0&amp;lt;/modelVersion&amp;gt;

    &amp;lt;groupId&amp;gt;org.osgilab.bundles&amp;lt;/groupId&amp;gt;
    &amp;lt;artifactId&amp;gt;it&amp;lt;/artifactId&amp;gt;
    &amp;lt;version&amp;gt;1.0-SNAPSHOT&amp;lt;/version&amp;gt;

    &amp;lt;!-- dependencies --&amp;gt;
    &amp;lt;dependencies&amp;gt;
        &amp;lt;dependency&amp;gt;
            &amp;lt;groupId&amp;gt;org.osgi&amp;lt;/groupId&amp;gt;
            &amp;lt;artifactId&amp;gt;org.osgi.core&amp;lt;/artifactId&amp;gt;
            &amp;lt;version&amp;gt;4.2.0&amp;lt;/version&amp;gt;
        &amp;lt;/dependency&amp;gt;
        &amp;lt;dependency&amp;gt;
            &amp;lt;groupId&amp;gt;org.osgi&amp;lt;/groupId&amp;gt;
            &amp;lt;artifactId&amp;gt;org.osgi.compendium&amp;lt;/artifactId&amp;gt;
            &amp;lt;version&amp;gt;4.2.0&amp;lt;/version&amp;gt;
        &amp;lt;/dependency&amp;gt;
        &amp;lt;dependency&amp;gt;
            &amp;lt;groupId&amp;gt;org.osgilab.testing&amp;lt;/groupId&amp;gt;
            &amp;lt;artifactId&amp;gt;commons&amp;lt;/artifactId&amp;gt;
            &amp;lt;version&amp;gt;1.0.0&amp;lt;/version&amp;gt;
        &amp;lt;/dependency&amp;gt;
        &amp;lt;dependency&amp;gt;
            &amp;lt;groupId&amp;gt;junit&amp;lt;/groupId&amp;gt;
            &amp;lt;artifactId&amp;gt;junit&amp;lt;/artifactId&amp;gt;
            &amp;lt;version&amp;gt;4.8.1&amp;lt;/version&amp;gt;
            &amp;lt;scope&amp;gt;test&amp;lt;/scope&amp;gt;
        &amp;lt;/dependency&amp;gt;
        &amp;lt;dependency&amp;gt;
            &amp;lt;groupId&amp;gt;org.ops4j.pax.exam&amp;lt;/groupId&amp;gt;
            &amp;lt;artifactId&amp;gt;pax-exam&amp;lt;/artifactId&amp;gt;
            &amp;lt;version&amp;gt;1.2.0&amp;lt;/version&amp;gt;
            &amp;lt;scope&amp;gt;test&amp;lt;/scope&amp;gt;
        &amp;lt;/dependency&amp;gt;
        &amp;lt;dependency&amp;gt;
            &amp;lt;groupId&amp;gt;org.ops4j.pax.exam&amp;lt;/groupId&amp;gt;
            &amp;lt;artifactId&amp;gt;pax-exam-junit&amp;lt;/artifactId&amp;gt;
            &amp;lt;version&amp;gt;1.2.0&amp;lt;/version&amp;gt;
            &amp;lt;scope&amp;gt;test&amp;lt;/scope&amp;gt;
        &amp;lt;/dependency&amp;gt;
        &amp;lt;dependency&amp;gt;
            &amp;lt;groupId&amp;gt;org.ops4j.pax.exam&amp;lt;/groupId&amp;gt;
            &amp;lt;artifactId&amp;gt;pax-exam-container-default&amp;lt;/artifactId&amp;gt;
            &amp;lt;version&amp;gt;1.2.0&amp;lt;/version&amp;gt;
            &amp;lt;scope&amp;gt;test&amp;lt;/scope&amp;gt;
        &amp;lt;/dependency&amp;gt;
        &amp;lt;dependency&amp;gt;
            &amp;lt;groupId&amp;gt;org.osgilab.bundles&amp;lt;/groupId&amp;gt;
            &amp;lt;artifactId&amp;gt;monitoradmin&amp;lt;/artifactId&amp;gt;
            &amp;lt;version&amp;gt;1.0.2-SNAPSHOT&amp;lt;/version&amp;gt;
            &amp;lt;scope&amp;gt;test&amp;lt;/scope&amp;gt;
        &amp;lt;/dependency&amp;gt;
    &amp;lt;/dependencies&amp;gt;

    &amp;lt;build&amp;gt;
        &amp;lt;plugins&amp;gt;
            &amp;lt;!-- pax exam Maven plugin --&amp;gt;
            &amp;lt;plugin&amp;gt;
                &amp;lt;groupId&amp;gt;org.ops4j.pax.exam&amp;lt;/groupId&amp;gt;
                &amp;lt;artifactId&amp;gt;maven-paxexam-plugin&amp;lt;/artifactId&amp;gt;
                &amp;lt;version&amp;gt;1.2.0&amp;lt;/version&amp;gt;
                &amp;lt;executions&amp;gt;
                    &amp;lt;execution&amp;gt;
                        &amp;lt;id&amp;gt;generate-config&amp;lt;/id&amp;gt;
                        &amp;lt;goals&amp;gt;
                            &amp;lt;goal&amp;gt;generate-depends-file&amp;lt;/goal&amp;gt;
                            &amp;lt;goal&amp;gt;generate-config&amp;lt;/goal&amp;gt;
                        &amp;lt;/goals&amp;gt;
                    &amp;lt;/execution&amp;gt;
                &amp;lt;/executions&amp;gt;
                &amp;lt;configuration&amp;gt;
                    &amp;lt;options&amp;gt;
                        &amp;lt;workingDirectory&amp;gt;${project.build.directory}/paxexam&amp;lt;/workingDirectory&amp;gt;
                    &amp;lt;/options&amp;gt;
                &amp;lt;/configuration&amp;gt;
            &amp;lt;/plugin&amp;gt;
        &amp;lt;/plugins&amp;gt;
    &amp;lt;/build&amp;gt;
&amp;lt;/project&amp;gt;
&lt;/pre&gt;
To run JUnit tests inside OSGi framework I use Pax Exam testing tool. In the POM Pax Exam Maven plugin is configured.&lt;br /&gt;
&lt;br /&gt;
The next step - create JUnit test.
&lt;br /&gt;
&lt;pre class="Java" name="code"&gt;@RunWith(JUnit4TestRunner.class) // -- [1] --
public class MonitorAdminTest {
    // OSGi framework test configutation
    @Configuration // -- [2] --
    public static Option[] configuration() {
        return options(
                // list of frameworks to test // -- [3] --
                frameworks(equinox(), felix(), knopflerfish().version("3.0.0")),
                // list of bundles that should be installed // -- [4] --
                provision(
                        mavenBundle().groupId("org.osgi").artifactId("org.osgi.compendium").version("4.1.0"),
                        mavenBundle().groupId("org.apache.felix").artifactId("org.apache.felix.eventadmin").version("1.2.2"),
                        mavenBundle().groupId("org.apache.felix").artifactId("org.apache.felix.log").version("1.0.0"),
                        // add OSGi assertions // -- [5] --
                        mavenBundle().groupId("org.osgilab.testing").artifactId("commons").version("1.0.0"),
                        // install module to test // -- [6] --
                        mavenBundle().groupId("org.osgilab.bundles").artifactId("monitoradmin").version("1.0.2-SNAPSHOT")
                )
        );
    }

    // injected BundleContext // -- [7] --
    @Inject
    private BundleContext bc;

    // initialize OSGi assertions // -- [8] --
    @Before
    public void initAsserts() {
        OSGiAssert.init(bc);
    }
}
&lt;/pre&gt;
[1] - use custom JUnit runner from Pax Exam&lt;br /&gt;
[2] - Configure OSGi framework for integration tests&lt;br /&gt;
[3] - define the list of OSGi frameworks for tests&lt;br /&gt;
[4] - define the list of bundles that should be installed during tests&lt;br /&gt;
[5] - add support of OSGi assertions&lt;br /&gt;
[6] - install the bundle with functionality you like to test&lt;br /&gt;
[7] - define BundleContext field to inject value during tests&lt;br /&gt;
[8] - initialize OSGi assertions&lt;br /&gt;
&lt;br /&gt;
A test sample to show what and how you can test your functionality during integration tests:
&lt;br /&gt;
&lt;pre class="Java" name="code"&gt;@Test
public void testServices() throws BundleException {
    // assert MonitorAdmin Service
    ServiceAssert.assertServiceAvailable(MonitorAdmin.class);

    // assert MonitorListener Service
    ServiceAssert.assertServiceAvailable(MonitorListener.class);

    // get MonitorAdmin service
    MonitorAdmin monitorAdmin = ServiceUtils.getService(bc, MonitorAdmin.class);

    // get list of Monitorable names
    String[] monitorableNames = monitorAdmin.getMonitorableNames();
    Assert.assertNotNull(monitorableNames);
    Assert.assertEquals(0, monitorableNames.length);

    // get list of running Monitoring jobs
    MonitoringJob[] runningJobs = monitorAdmin.getRunningJobs();
    Assert.assertNotNull(runningJobs);
    Assert.assertEquals(0, runningJobs.length);

    // get bundle
    Bundle bundle = BundleUtils.findBundle(bc, "org.osgilab.bundles.monitoradmin");
    bundle.stop();

    // assert MonitorAdmin Service
    ServiceAssert.assertServiceUnavailable(MonitorAdmin.class);

    // assert MonitorListener Service
    ServiceAssert.assertServiceUnavailable(MonitorListener.class);
}
&lt;/pre&gt;
&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a name="manual"&gt;Provisioning and manual testing.&lt;/a&gt;&lt;/b&gt; If you like to do some manual tests for your OSGi bundle you can use Pax Runner to prepare and start OSGi framework with bundles to test.&lt;br /&gt;
The simplest way is to add additional Maven profile to your POM.
&lt;br /&gt;
&lt;pre class="Xml" name="code"&gt;&amp;lt;profile&amp;gt;
    &amp;lt;!-- profile name --&amp;gt;
    &amp;lt;id&amp;gt;manual-test&amp;lt;/id&amp;gt;
    &amp;lt;build&amp;gt;
        &amp;lt;!-- default profile goal --&amp;gt;
        &amp;lt;defaultGoal&amp;gt;pax:provision&amp;lt;/defaultGoal&amp;gt;
        &amp;lt;plugins&amp;gt;
            &amp;lt;plugin&amp;gt;
                &amp;lt;!-- Pax Runner Maven plugin --&amp;gt;
                &amp;lt;groupId&amp;gt;org.ops4j&amp;lt;/groupId&amp;gt;
                &amp;lt;artifactId&amp;gt;maven-pax-plugin&amp;lt;/artifactId&amp;gt;
                &amp;lt;version&amp;gt;1.4&amp;lt;/version&amp;gt;
                &amp;lt;configuration&amp;gt;
                    &amp;lt;!-- Pax Runner version --&amp;gt;
                    &amp;lt;runner&amp;gt;1.4.0&amp;lt;/runner&amp;gt;
                    &amp;lt;!-- OSGi framework type (equinox, felix, knopflerfish) --&amp;gt;
                    &amp;lt;framework&amp;gt;equinox&amp;lt;/framework&amp;gt;
                    &amp;lt;provision&amp;gt;
                        &amp;lt;param&amp;gt;--log=debug&amp;lt;/param&amp;gt;
                        &amp;lt;param&amp;gt;--workingDirectory=target/runner&amp;lt;/param&amp;gt;
                        &amp;lt;!-- bundles that should be installed --&amp;gt;
                        &amp;lt;param&amp;gt;mvn:org.osgi/org.osgi.compendium/4.1.0@2&amp;lt;/param&amp;gt;
                        &amp;lt;param&amp;gt;mvn:org.apache.felix/org.apache.felix.eventadmin/1.2.2@3&amp;lt;/param&amp;gt;
                        &amp;lt;param&amp;gt;mvn:org.apache.felix/org.apache.felix.log/1.0.0@3&amp;lt;/param&amp;gt;
                        &amp;lt;param&amp;gt;mvn:org.osgilab.bundles/monitoradmin/1.0.2-SNAPSHOT@4&amp;lt;/param&amp;gt;
                    &amp;lt;/provision&amp;gt;
                &amp;lt;/configuration&amp;gt;
            &amp;lt;/plugin&amp;gt;
        &amp;lt;/plugins&amp;gt;
    &amp;lt;/build&amp;gt;
&amp;lt;/profile&amp;gt;
&lt;/pre&gt;
Use Maven command to run this profile:
&lt;br /&gt;
&lt;pre class="Xml" name="code"&gt;mvn -P manual-test
&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Alternative 1:&lt;/b&gt; If you like to share this OSGi framework configuration you can create a ZIP-package with such command:
&lt;br /&gt;
&lt;pre class="Xml" name="code"&gt;mvn -P manual-test -Dexecutor=zip
&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Alternative 2:&lt;/b&gt; If you like to use custom OSGi framework configuration or version that is not supported by the last Pax Runner you can describe this configuration with Pax Runner platform configuration file (platform.xml):
&lt;br /&gt;
&lt;pre class="Xml" name="code"&gt;&amp;lt;platform&amp;gt;
    &amp;lt;name&amp;gt;Equinox 3.5.2&amp;lt;/name&amp;gt;
    &amp;lt;system&amp;gt;
        http://mirror.netcologne.de/eclipse/equinox/drops/R-3.5.2-201002111343/org.eclipse.osgi_3.5.2.R35x_v20100126.jar
    &amp;lt;/system&amp;gt;
    &amp;lt;profile name="minimal" default="true"&amp;gt;
        &amp;lt;bundle&amp;gt;
            &amp;lt;name&amp;gt;OSGi Services&amp;lt;/name&amp;gt;
            &amp;lt;url&amp;gt;
                http://mirror.netcologne.de/eclipse/equinox/drops/R-3.5.2-201002111343/org.eclipse.osgi.services_3.2.0.v20090520-1800.jar
            &amp;lt;/url&amp;gt;
        &amp;lt;/bundle&amp;gt;
    &amp;lt;/profile&amp;gt;
&amp;lt;/platform&amp;gt;
&lt;/pre&gt;
To activate this platform configuration use Maven command:
&lt;br /&gt;
&lt;pre class="Xml" name="code"&gt;mvn -P manual-test -DdefinitionURL=file:platform.xml
&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a name="release"&gt;Release to Central Maven repository&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;
You can release your OSGi module to Maven central repository with &lt;a href="http://nexus.sonatype.org/oss-repository-hosting.html"&gt;Sonatype Repository Hosting service&lt;/a&gt; 
&lt;/li&gt;
&lt;br /&gt;
&lt;li&gt;
&lt;b&gt;&lt;a name="references"&gt;References:&lt;/a&gt;&lt;/b&gt;
&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;a href="http://www.osgi.org/Release4/HomePage"&gt;OSGi specifications&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.osgi.org/javadoc/r4v42/"&gt;OSGi API&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.aqute.biz/Code/Bnd"&gt;Bnd tool&lt;/a&gt; - tool to help you diagnose and create OSGi bundles
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://felix.apache.org/site/apache-felix-maven-bundle-plugin-bnd.html"&gt;maven-bundle-plugin&lt;/a&gt; - Maven plugin for Bnd tool
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.springsource.org/osgi"&gt;Spring OSGi&lt;/a&gt; - Blueprint Services RI and OSGi mocks project
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://wiki.ops4j.org/display/paxexam/Pax+Exam"&gt;Pax Exam&lt;/a&gt; - OSGi integration testing tool
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://paxrunner.ops4j.org/space/Pax+Runner"&gt;Pax Runner&lt;/a&gt; - tool to provision OSGi bundles in all major open source OSGi framework implementations (Felix, Equinox, Knopflerfish, Concierge)
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://paxrunner.ops4j.org/space/Pax+Runner"&gt;Sonatype Repository Service&lt;/a&gt; - Maven repositories that helps to synchronize artifacts with central Maven repository
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;
That's all. 

Thank you.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3314286357054482328-3516303048784086835?l=blog.knowhowlab.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/yB6eLInnsCDoNQc8mNAoZgH4YPs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/yB6eLInnsCDoNQc8mNAoZgH4YPs/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/yB6eLInnsCDoNQc8mNAoZgH4YPs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/yB6eLInnsCDoNQc8mNAoZgH4YPs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=vXQo2B8WLec:S7hRpHJ_7HU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=vXQo2B8WLec:S7hRpHJ_7HU:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=vXQo2B8WLec:S7hRpHJ_7HU:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=vXQo2B8WLec:S7hRpHJ_7HU:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=vXQo2B8WLec:S7hRpHJ_7HU:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=vXQo2B8WLec:S7hRpHJ_7HU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=vXQo2B8WLec:S7hRpHJ_7HU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=vXQo2B8WLec:S7hRpHJ_7HU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=vXQo2B8WLec:S7hRpHJ_7HU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Knowhowlab/~4/vXQo2B8WLec" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.knowhowlab.org/feeds/3516303048784086835/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.knowhowlab.org/2010/06/osgi-tutorial-from-project-structure-to.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3314286357054482328/posts/default/3516303048784086835?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3314286357054482328/posts/default/3516303048784086835?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Knowhowlab/~3/vXQo2B8WLec/osgi-tutorial-from-project-structure-to.html" title="OSGi Tutorial: From project structure to release" /><author><name>Dmytro Pishchukhin</name><uri>https://profiles.google.com/106807340219118383792</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-ZZb_y1fm8uQ/AAAAAAAAAAI/AAAAAAAACMw/zItcRzswVq4/s512-c/photo.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://blog.knowhowlab.org/2010/06/osgi-tutorial-from-project-structure-to.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck4BSHgzfSp7ImA9WxFWGE8.&quot;"><id>tag:blogger.com,1999:blog-3314286357054482328.post-2561334109742403561</id><published>2010-06-06T12:42:00.000+02:00</published><updated>2010-06-06T12:42:39.685+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-06T12:42:39.685+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="integration" /><category scheme="http://www.blogger.com/atom/ns#" term="tools" /><category scheme="http://www.blogger.com/atom/ns#" term="spring osgi" /><category scheme="http://www.blogger.com/atom/ns#" term="pax runner" /><category scheme="http://www.blogger.com/atom/ns#" term="testing" /><category scheme="http://www.blogger.com/atom/ns#" term="osgi" /><category scheme="http://www.blogger.com/atom/ns#" term="junit" /><category scheme="http://www.blogger.com/atom/ns#" term="spring dm" /><category scheme="http://www.blogger.com/atom/ns#" term="maven" /><title>OSGi Testing: OSGi Assertions and Utils for integraton and functional tests</title><content type="html">Hello everybody.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Testing of OSGi specific code is not so trivial task as standard JUnit test. You can test your OSGi code by 3 simple ways:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt; Decouple your functionality and OSGi API (like I implemented in &lt;a href="http://osgilab.googlecode.com/svn/tags/monitoradmin-1.0.1/src/main/java/org/osgilab/bundles/monitoradmin/"&gt;MonitorAdmin RI&lt;/a&gt;). In this case, you can test your functionality with standard unit tests.&lt;/li&gt;
&lt;li&gt;Use OSGi API mocks (provided by &lt;a href="http://www.springsource.org/osgi"&gt;Spring OSGi project&lt;/a&gt;). In this case, all OSGi behavior could not be reproduced, but some simple OSGi tests could be implemented.&lt;/li&gt;
&lt;li&gt; Test your code inside OSGi framework (provided by &lt;a href="http://wiki.ops4j.org/display/paxexam/Pax+Exam"&gt;Pax Exam&lt;/a&gt; and &lt;a href="http://www.springsource.org/osgi"&gt;Spring OSGi&lt;/a&gt;).&lt;/li&gt;
&lt;/ol&gt;Implementation of your tests depends, of course, on your functionality, but some common patters are used:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;check some bundle state;&lt;/li&gt;
&lt;li&gt;check some bundle type (fragment or not) &lt;/li&gt;
&lt;li&gt;check some service availability;&lt;/li&gt;
&lt;li&gt;create service filters;&lt;/li&gt;
&lt;li&gt;etc.&lt;/li&gt;
&lt;/ul&gt;Standard JUnit API does not provide any OSGi-specific assertions and you have to test your functionality using low-level JUnit assertions. In this case, you have to implement a lot of low-level OSGi code to access your bundles or services and the test implementation looks very complex. Like this:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="Java" name="code"&gt;ServiceTracker packageAdminTracker = new ServiceTracker(bc, PackageAdmin.class.getName(), null);
packageAdminTracker.open();
PackageAdmin packageAdmin = (PackageAdmin) packageAdminTracker.getService();
Assert.assertNotNull(packageAdmin);
packageAdminTracker.close();
Bundle[] bundles = packageAdmin.getBundles("org.osgilab.testing.it.commons.test.bundle", null);
// asserts that test bundle is installed
Assert.assertNotNull(bundles);
Assert.assertTrue(bundles.length &amp;gt; 0);
// gets bundle instance
Bundle bundle = bundles[0];
// asserts that test bundle is resolved
Assert.assertEquals(Bundle.RESOLVED, bundle.getState());
&lt;/pre&gt;&lt;br /&gt;
To simplify OSGi tests I provide &lt;a href="http://code.google.com/p/osgilab/wiki/TestingCommons"&gt;OSGi assertions and utilities library&lt;/a&gt; that could be easily integrated into Pax Exam and Spring OSGi tests. There are classes (assertions and utilities) that help you to write more clean and understandable OSGi tests and concentrate more on your functionality.&lt;br /&gt;
&lt;br /&gt;
The code from above can be easily replaced with OSGi assertions:&lt;br /&gt;
&lt;pre class="Java" name="code"&gt;// asserts that test bundle is installed
assertBundleAvailable("org.osgilab.testing.it.commons.test.bundle");
// asserts that test bundle is resolved
assertBundleState(Bundle.RESOLVED, "org.osgilab.testing.it.commons.test.bundle");
// gets bundle instance
Bundle bundle = findBundle(bc, "org.osgilab.testing.it.commons.test.bundle");
&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
You can find comparison of "standard" OSGi test and test with OSGi assertions below:&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;pre class="Java" name="code"&gt;@Test
public void test_Without_OSGiAssertions() throws BundleException, InterruptedException, InvalidSyntaxException {
ServiceTracker packageAdminTracker = new ServiceTracker(bc, PackageAdmin.class.getName(), null);
packageAdminTracker.open();
PackageAdmin packageAdmin = (PackageAdmin) packageAdminTracker.getService();
Assert.assertNotNull(packageAdmin);
packageAdminTracker.close();
Bundle[] bundles = packageAdmin.getBundles("org.osgilab.testing.it.commons.test.bundle", null);
// asserts that test bundle is installed
Assert.assertNotNull(bundles);
Assert.assertTrue(bundles.length &amp;gt; 0);
// gets bundle instance
Bundle bundle = bundles[0];
// asserts that test bundle is resolved
Assert.assertEquals(Bundle.RESOLVED, bundle.getState());
ServiceTracker serviceTracker1 = new ServiceTracker(bc, "org.osgi.testing.it.commons.testbundle.service.Echo", null);
serviceTracker1.open();
Assert.assertEquals(0, serviceTracker1.size());
// start bundle
bundle.start();
// asserts that test bundle is active
Assert.assertEquals(Bundle.ACTIVE, bundle.getState());
// asserts that test service is available within 2 seconds
Assert.assertNotNull(serviceTracker1.waitForService(2000));
// asserts that test service with custom properties is available
ServiceTracker serviceTracker2 = new ServiceTracker(bc, FrameworkUtil.createFilter(
                "(&amp;amp;(" + Constants.OBJECTCLASS + "=org.osgi.testing.it.commons.testbundle.service.Echo)" +
                        "(testkey=testvalue))"), null);
serviceTracker2.open();
Assert.assertTrue(serviceTracker2.size() &amp;gt; 0);
// gets service by class and filter
Echo echo = (Echo) serviceTracker2.getService();
// asserts service method call
Assert.assertEquals("test", echo.echo("test"));
// stops bundle
bundle.stop();
// asserts that test bundle is resolved
Assert.assertEquals(Bundle.RESOLVED, bundle.getState());
// asserts that test service is unregistered
Assert.assertEquals(0, serviceTracker1.size());
}

@Test
public void test_With_OSGiAssertions() throws BundleException, InvalidSyntaxException {
// asserts that test bundle is installed
assertBundleAvailable("org.osgilab.testing.it.commons.test.bundle");
// asserts that test bundle is resolved
assertBundleState(Bundle.RESOLVED, "org.osgilab.testing.it.commons.test.bundle");
// gets bundle instance
Bundle bundle = findBundle(bc, "org.osgilab.testing.it.commons.test.bundle");
// asserts that test service is unavailable
assertServiceUnavailable("org.osgi.testing.it.commons.testbundle.service.Echo");
// start bundle
bundle.start();
// asserts that test bundle is active
assertBundleState(Bundle.ACTIVE, "org.osgilab.testing.it.commons.test.bundle");
// asserts that test service is available within 2 seconds
assertServiceAvailable("org.osgi.testing.it.commons.testbundle.service.Echo", 2, TimeUnit.SECONDS);
// asserts that test service with custom properties is available
assertServiceAvailable(and(create(Echo.class), eq("testkey", "testvalue")));
// gets service by class and filter
Echo echo = ServiceUtils.getService(bc, Echo.class, eq("testkey", "testvalue"));
// asserts service method call
Assert.assertEquals("test", echo.echo("test"));
// stops bundle
bundle.stop();
// asserts that test bundle is resolved
assertBundleState(Bundle.RESOLVED, "org.osgilab.testing.it.commons.test.bundle");
// asserts that test service is unregistered
assertServiceUnavailable(Echo.class);
}&lt;/pre&gt;&lt;br /&gt;
Thank you for your attention. Your feedback is welcome as usual.&lt;br /&gt;
&lt;br /&gt;
Best Regards.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3314286357054482328-2561334109742403561?l=blog.knowhowlab.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/OwqmWcOQxHK69wFebdUG1qNgjlc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/OwqmWcOQxHK69wFebdUG1qNgjlc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/OwqmWcOQxHK69wFebdUG1qNgjlc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/OwqmWcOQxHK69wFebdUG1qNgjlc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=88zzawiBOiQ:kc0iidiUuFQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=88zzawiBOiQ:kc0iidiUuFQ:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=88zzawiBOiQ:kc0iidiUuFQ:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=88zzawiBOiQ:kc0iidiUuFQ:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=88zzawiBOiQ:kc0iidiUuFQ:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=88zzawiBOiQ:kc0iidiUuFQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=88zzawiBOiQ:kc0iidiUuFQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=88zzawiBOiQ:kc0iidiUuFQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=88zzawiBOiQ:kc0iidiUuFQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Knowhowlab/~4/88zzawiBOiQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.knowhowlab.org/feeds/2561334109742403561/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.knowhowlab.org/2010/06/osgi-testing-osgi-assertions-and-utils.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3314286357054482328/posts/default/2561334109742403561?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3314286357054482328/posts/default/2561334109742403561?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Knowhowlab/~3/88zzawiBOiQ/osgi-testing-osgi-assertions-and-utils.html" title="OSGi Testing: OSGi Assertions and Utils for integraton and functional tests" /><author><name>Dmytro Pishchukhin</name><uri>https://profiles.google.com/106807340219118383792</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-ZZb_y1fm8uQ/AAAAAAAAAAI/AAAAAAAACMw/zItcRzswVq4/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.knowhowlab.org/2010/06/osgi-testing-osgi-assertions-and-utils.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEYMRnkzeip7ImA9WxFXEkU.&quot;"><id>tag:blogger.com,1999:blog-3314286357054482328.post-5350737174613371830</id><published>2010-05-07T23:43:00.002+02:00</published><updated>2010-05-19T18:23:07.782+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-19T18:23:07.782+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="draft" /><category scheme="http://www.blogger.com/atom/ns#" term="osgi" /><category scheme="http://www.blogger.com/atom/ns#" term="specification" /><title>OSGi 4.3 Core Early Draft 1 is available</title><content type="html">Hello,&lt;br /&gt;
&lt;br /&gt;
yesterday &lt;a href="http://www.osgi.org/download/osgi-core-4.3-early-draft1.pdf"&gt;OSGi Service Platform Release 4 Core Version 4.3 Early Draft 1&lt;/a&gt; was published on OSGi Alliance site. Here the list of new RFCs that are included into this draft version:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;RFC-0138 - Multiple Frameworks in one JVM&lt;/li&gt;
&lt;li&gt;RFC-0151 - Framework Update. Changed in OSGi API to take advantage of Java 5 generics language feature etc.&lt;/li&gt;
&lt;li&gt;RFC-0154 - Generic Capabilities &amp;amp; Requirements&lt;/li&gt;
&lt;/ul&gt;&lt;a href="http://www.osgi.org/download/osgi-residential-4.2-early-draft3.pdf"&gt;OSGi Service Platform Release 4 Residential Version 4.2 Early Draft 3&lt;/a&gt; is also available. RFCs that are included into: &lt;br /&gt;
&lt;ul&gt;&lt;li&gt;RFC-0140 - Residential Management Tree&lt;/li&gt;
&lt;li&gt;RFC-0141 - DTM Admin Extension&lt;/li&gt;
&lt;li&gt;RFC-0144 - Configuration Admin Extension&lt;/li&gt;
&lt;li&gt;RFC-0145 - Home Gateway Administration&lt;/li&gt;
&lt;li&gt;RFC-0149 - TR-069 Protocol Implementation Guideline&lt;/li&gt;
&lt;/ul&gt;&lt;ul&gt;&lt;/ul&gt;Best Regards&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3314286357054482328-5350737174613371830?l=blog.knowhowlab.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/3nJU-ciKEA7cp_3z77ko_tMpB5o/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/3nJU-ciKEA7cp_3z77ko_tMpB5o/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/3nJU-ciKEA7cp_3z77ko_tMpB5o/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/3nJU-ciKEA7cp_3z77ko_tMpB5o/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=4cXu3vcs9VI:qNK17wt7zBI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=4cXu3vcs9VI:qNK17wt7zBI:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=4cXu3vcs9VI:qNK17wt7zBI:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=4cXu3vcs9VI:qNK17wt7zBI:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=4cXu3vcs9VI:qNK17wt7zBI:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=4cXu3vcs9VI:qNK17wt7zBI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=4cXu3vcs9VI:qNK17wt7zBI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=4cXu3vcs9VI:qNK17wt7zBI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=4cXu3vcs9VI:qNK17wt7zBI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Knowhowlab/~4/4cXu3vcs9VI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.knowhowlab.org/feeds/5350737174613371830/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.knowhowlab.org/2010/05/osgi-43-core-early-draft-1-is-available.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3314286357054482328/posts/default/5350737174613371830?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3314286357054482328/posts/default/5350737174613371830?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Knowhowlab/~3/4cXu3vcs9VI/osgi-43-core-early-draft-1-is-available.html" title="OSGi 4.3 Core Early Draft 1 is available" /><author><name>Dmytro Pishchukhin</name><uri>https://profiles.google.com/106807340219118383792</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-ZZb_y1fm8uQ/AAAAAAAAAAI/AAAAAAAACMw/zItcRzswVq4/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.knowhowlab.org/2010/05/osgi-43-core-early-draft-1-is-available.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck4CQ38zeCp7ImA9WxFWGE4.&quot;"><id>tag:blogger.com,1999:blog-3314286357054482328.post-7054628702721193802</id><published>2010-05-06T18:14:00.001+02:00</published><updated>2010-06-06T15:29:22.180+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-06T15:29:22.180+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="knopflerfish" /><category scheme="http://www.blogger.com/atom/ns#" term="felix" /><category scheme="http://www.blogger.com/atom/ns#" term="equinox" /><category scheme="http://www.blogger.com/atom/ns#" term="osgi" /><category scheme="http://www.blogger.com/atom/ns#" term="shell" /><title>OSGi universal shell implementation</title><content type="html">Hello OSGi-people,&lt;br /&gt;
&lt;br /&gt;
everybody, who provides their bundles and  components for various OSGi frameworks with shell commands, wants to  implement shell commands with some universal API, that will be supported  by all frameworks. Such API (RFC132) was a part of OSGi 4.2 Early Draft  specification, but it was not included by some reasons into the  release. &lt;br /&gt;
&lt;br /&gt;
Today the most popular OSGi frameworks (Eclipse Equinox, Apache  Felix and Knopflerfish) provide their own shell API to add new commands.  Bundle developer should import framework specific packages and add new  shell commands using framework specific API. It's not so easy to  maintain if multiple versions of the same API should be supported (e.g.  Knopflerfish Console API 2.0.1 (Knopflerfish 2.x.x) and 2.1.0  (Knopflerfish 3.0.x)).&lt;br /&gt;
&lt;br /&gt;
My idea is very simple: &lt;br /&gt;
&lt;ul&gt;&lt;li&gt;provide the way to add a new shell  command without any third-party or framework specific API dependencies;&lt;/li&gt;
&lt;li&gt;support of various OSGi frameworks is out of bundle developer tasks  list;&lt;/li&gt;
&lt;li&gt; command definition should be very simple;&lt;/li&gt;
&lt;li&gt;support of command  groups. &lt;/li&gt;
&lt;/ul&gt;&lt;a name='more'&gt;&lt;/a&gt;There are two simple steps that should be done by bundle developer to  add a new shell command:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Add commands definitions to class. Every  command is defined as public  method with such signature:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="Java" name="code"&gt;public void &amp;lt;command_name&amp;gt;(java.io.PrintWriter out, java.lang.String[] args);
&lt;/pre&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;ul&gt;&lt;li&gt; out - command output stream&lt;/li&gt;
&lt;li&gt;args - command arguments list&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;ol&gt;&lt;li value="2"&gt;Register Services in BundleContext with definition:&lt;/li&gt;
&lt;/ol&gt;&lt;ul&gt;&lt;li&gt;service property&lt;b&gt; "org.osgilab.tips.shell.group.&lt;wbr&gt;&lt;/wbr&gt;id"&lt;/b&gt; (&lt;b&gt;mandatory&lt;/b&gt;,  java.lang.String) - unique commands group id. Used by some framework  specific shell API that support command groups;&lt;/li&gt;
&lt;li&gt;service property &lt;b&gt;"org.osgilab.tips.shell.group.&lt;wbr&gt;&lt;/wbr&gt;name"&lt;/b&gt; (&lt;b&gt;mandatory&lt;/b&gt;,  java.lang.String) - commands group name. Used by some framework specific  shell API that support command groups;&lt;/li&gt;
&lt;li&gt;service property &lt;b&gt;"org.osgilab.tips.shell.&lt;/b&gt;&lt;wbr&gt;&lt;/wbr&gt;&lt;b&gt;commands"&lt;/b&gt; (&lt;b&gt;mandatory&lt;/b&gt;,  java.lang.String[][]) - commands definition "command_name" -&amp;gt;  "command_help";&lt;/li&gt;
&lt;li&gt;service object class - could be used any value.  It's very useful when commands are included into interface  implementation.&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
Here is a sample of new commands:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Commands implementation&lt;/li&gt;
&lt;/ol&gt;&lt;pre class="Java" name="code"&gt;public class ShellTestService {
................
    public void bndinfo(PrintWriter out, String... args) {
        if (args == null || args.length != 1) {
            out.println("Bundle id argument is missed");
            return;
        }
        try {
            int bundleId = Integer.parseInt(args[0]);
            Bundle bundle = bc.getBundle(bundleId);
            if (bundle == null) {
                out.println("Bundle id is invalid: " + bundleId);
                return;
            }
            printBundleInfo(bundle, out);
        } catch (NumberFormatException e) {
            out.println("Bundle id has wrong format: " + args[0]);
        }
    }

    public void bndsinfo(PrintWriter out, String... args) {
        Bundle[] bundles = bc.getBundles();
        for (Bundle bundle : bundles) {
            printBundleInfo(bundle, out);
        }
    }
......................
}
&lt;/pre&gt;&lt;br /&gt;
&lt;ol&gt;&lt;li value="2"&gt;Command service registration.&lt;/li&gt;
&lt;/ol&gt;&lt;pre class="Java" name="code"&gt;ShellTestService shellTestService = ....;
Dictionary&amp;lt;String, Object&amp;gt; props = new Hashtable&amp;lt;String, Object&amp;gt;();
props.put("org.osgilab.tips.shell.group.id", "test_group_id");
props.put("org.osgilab.tips.shell.group.name", "Test commands");
String[][] commandsArray = new String[2][2];
commandsArray[0] = new String[]{"bndinfo", "bndinfo &amp;lt;bundleId&amp;gt; - Print information for bundle with &amp;lt;bundleId&amp;gt;"};
commandsArray[1] = new String[]{"bndsinfo", "bndsinfo - Print information for all bundles"};
props.put("org.osgilab.tips.shell.commands", commandsArray);
bc.registerService(ShellTestService.class.getName(), shellTestService, props);
&lt;/pre&gt;&lt;br /&gt;
There are 3 OSGi frameworks supported:  Eclipse Equinox, Apache Felix and Knopflerfish. &lt;br /&gt;
Bundles are available in Central Maven Repository:&lt;br /&gt;
&lt;pre class="Xml" name="code"&gt;&amp;lt;dependency&amp;gt;
    &amp;lt;groupId&amp;gt;org.osgilab.bundles.shell&amp;lt;/groupId&amp;gt;
    &amp;lt;artifactId&amp;gt;equinox&amp;lt;/artifactId&amp;gt;
    &amp;lt;version&amp;gt;1.0.0&amp;lt;/version&amp;gt;
&amp;lt;/dependency&amp;gt;
&amp;lt;dependency&amp;gt;
    &amp;lt;groupId&amp;gt;org.osgilab.bundles.shell&amp;lt;/groupId&amp;gt;
    &amp;lt;artifactId&amp;gt;felix&amp;lt;/artifactId&amp;gt;
    &amp;lt;version&amp;gt;1.0.0&amp;lt;/version&amp;gt;
&amp;lt;/dependency&amp;gt;
&amp;lt;dependency&amp;gt;
    &amp;lt;groupId&amp;gt;org.osgilab.bundles.shell&amp;lt;/groupId&amp;gt;
    &amp;lt;artifactId&amp;gt;knopflerfish&amp;lt;/artifactId&amp;gt;
    &amp;lt;version&amp;gt;1.0.0&amp;lt;/version&amp;gt;
&amp;lt;/dependency&amp;gt;
&lt;/pre&gt;or  from project downloads &lt;a href="http://code.google.com/p/osgilab/downloads/list"&gt;page&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Thank you.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3314286357054482328-7054628702721193802?l=blog.knowhowlab.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/7o8uTuJ7wAGMAwnZ1Uka8sR4kQ4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7o8uTuJ7wAGMAwnZ1Uka8sR4kQ4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/7o8uTuJ7wAGMAwnZ1Uka8sR4kQ4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7o8uTuJ7wAGMAwnZ1Uka8sR4kQ4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=6q7kff_4M6s:aoytyX-F9XI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=6q7kff_4M6s:aoytyX-F9XI:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=6q7kff_4M6s:aoytyX-F9XI:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=6q7kff_4M6s:aoytyX-F9XI:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=6q7kff_4M6s:aoytyX-F9XI:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=6q7kff_4M6s:aoytyX-F9XI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=6q7kff_4M6s:aoytyX-F9XI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=6q7kff_4M6s:aoytyX-F9XI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=6q7kff_4M6s:aoytyX-F9XI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Knowhowlab/~4/6q7kff_4M6s" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.knowhowlab.org/feeds/7054628702721193802/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.knowhowlab.org/2010/05/osgi-universal-shell-implementation.html#comment-form" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3314286357054482328/posts/default/7054628702721193802?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3314286357054482328/posts/default/7054628702721193802?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Knowhowlab/~3/6q7kff_4M6s/osgi-universal-shell-implementation.html" title="OSGi universal shell implementation" /><author><name>Dmytro Pishchukhin</name><uri>https://profiles.google.com/106807340219118383792</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-ZZb_y1fm8uQ/AAAAAAAAAAI/AAAAAAAACMw/zItcRzswVq4/s512-c/photo.jpg" /></author><thr:total>4</thr:total><feedburner:origLink>http://blog.knowhowlab.org/2010/05/osgi-universal-shell-implementation.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0cASXo4eip7ImA9WxFWGE4.&quot;"><id>tag:blogger.com,1999:blog-3314286357054482328.post-8182733561466130391</id><published>2010-05-05T20:49:00.001+02:00</published><updated>2010-06-06T15:30:48.432+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-06T15:30:48.432+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="knopflerfish" /><category scheme="http://www.blogger.com/atom/ns#" term="felix" /><category scheme="http://www.blogger.com/atom/ns#" term="equinox" /><category scheme="http://www.blogger.com/atom/ns#" term="pax exam" /><category scheme="http://www.blogger.com/atom/ns#" term="pax runner" /><category scheme="http://www.blogger.com/atom/ns#" term="osgi" /><category scheme="http://www.blogger.com/atom/ns#" term="maven" /><title>Pax Runner and Exam: new OSGi framework support</title><content type="html">Hello,&lt;br /&gt;
&lt;br /&gt;
There are many people that use &lt;a href="http://paxrunner.ops4j.org/space/Pax+Runner"&gt;Pax Runner&lt;/a&gt; and &lt;a href="http://paxexam.ops4j.org/space/Pax+Exam"&gt;Pax Exam&lt;/a&gt; as  main OSGi development tools for integration and manual testing of their  bundles and configurations. The last released versions of Pax tools do  not support the last snapshot versions of popular OSGi frameworks (e.g.  Eclipse Equinox 3.6M7, Apache Felix 2.0.5, Knopflerfish 3.0.0.beta-4).  There is a simple way to add such support. Pax Runner provides very  flexible configuration for &lt;a href="http://srv07.ops4j.org:8081/display/paxrunner/5.4.1.+Pax+Runner+-+Platform+-+Extender"&gt;Platform-Extender module&lt;/a&gt;. Any custom OSGi  platform could be described with platform definition XML file and could  be used for testing.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;To set a new platform definition for Pax Runner Maven configuration use  such configuration:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="Xml" name="code"&gt;&amp;lt;plugin&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;groupId&amp;gt;org.ops4j&amp;lt;/groupId&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;artifactId&amp;gt;maven-pax-plugin&amp;lt;/artifactId&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;version&amp;gt;1.4&amp;lt;/version&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/executions&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;configuration&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;runner&amp;gt;1.4.0&amp;lt;/runner&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;framework&amp;gt;equinox&amp;lt;/framework&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;provision&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .............
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;param&amp;gt;--definitionURL=file:platform-equinox-3.6M7.xml&amp;lt;/param&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .............
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/provision&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/configuration&amp;gt;
&amp;lt;/plugin&amp;gt;&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
To set a new platform definition for Pax Exam use  such configuration:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="Java" name="code"&gt;public class PaxExamTest {
&amp;nbsp;&amp;nbsp; .......................
&amp;nbsp;&amp;nbsp; @Configuration
&amp;nbsp;&amp;nbsp;&amp;nbsp; public static Option[] configurePlatform() {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return options(
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; equinox(),
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rawPaxRunnerOption("--definitionURL", "file:platform-equinox-3.6M7.xml")
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; );
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp; .......................
}&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There is a sample of Eclipse Equinox 3.6M7 platform definition file.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="Xml" name="code"&gt;&amp;lt;platform&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!-- Platform name --&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;name&amp;gt;Eclipse Equinox 3.6M7&amp;lt;/name&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!-- URL to system bundle --&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;system&amp;gt;http://mirror.netcologne.de/eclipse//equinox/drops/S-3.6M7-201004291549/org.eclipse.osgi_3.6.0.v20100422-1745.jar&amp;lt;/system&amp;gt;

&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!-- List of bundles --&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;profile name="minimal" default="true"&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;bundle&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;name&amp;gt;OSGi Services&amp;lt;/name&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;url&amp;gt;http://mirror.netcologne.de/eclipse//equinox/drops/S-3.6M7-201004291549/org.eclipse.osgi.services_3.2.100.v20100108.jar&amp;lt;/url&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/bundle&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;bundle&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;name&amp;gt;Equinox Util&amp;lt;/name&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;url&amp;gt;http://mirror.netcologne.de/eclipse//equinox/drops/S-3.6M7-201004291549/org.eclipse.equinox.util_1.0.100.v20090520-1800.jar&amp;lt;/url&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/bundle&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;bundle&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;name&amp;gt;Equinox Common&amp;lt;/name&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;url&amp;gt;http://mirror.netcologne.de/eclipse//equinox/drops/S-3.6M7-201004291549/org.eclipse.equinox.common_3.6.0.v20100315.jar&amp;lt;/url&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/bundle&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/profile&amp;gt;
&amp;lt;/platform&amp;gt;&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
Regards.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3314286357054482328-8182733561466130391?l=blog.knowhowlab.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/4S9pOA0GdaHUTlPKVywEpzGK4do/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/4S9pOA0GdaHUTlPKVywEpzGK4do/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/4S9pOA0GdaHUTlPKVywEpzGK4do/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/4S9pOA0GdaHUTlPKVywEpzGK4do/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=DbkoObHnlm8:BdmRxVxlKFw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=DbkoObHnlm8:BdmRxVxlKFw:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=DbkoObHnlm8:BdmRxVxlKFw:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=DbkoObHnlm8:BdmRxVxlKFw:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=DbkoObHnlm8:BdmRxVxlKFw:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=DbkoObHnlm8:BdmRxVxlKFw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=DbkoObHnlm8:BdmRxVxlKFw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=DbkoObHnlm8:BdmRxVxlKFw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=DbkoObHnlm8:BdmRxVxlKFw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Knowhowlab/~4/DbkoObHnlm8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.knowhowlab.org/feeds/8182733561466130391/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.knowhowlab.org/2010/05/pax-runner-and-exam-new-osgi-framework.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3314286357054482328/posts/default/8182733561466130391?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3314286357054482328/posts/default/8182733561466130391?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Knowhowlab/~3/DbkoObHnlm8/pax-runner-and-exam-new-osgi-framework.html" title="Pax Runner and Exam: new OSGi framework support" /><author><name>Dmytro Pishchukhin</name><uri>https://profiles.google.com/106807340219118383792</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-ZZb_y1fm8uQ/AAAAAAAAAAI/AAAAAAAACMw/zItcRzswVq4/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.knowhowlab.org/2010/05/pax-runner-and-exam-new-osgi-framework.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0cDSH88fyp7ImA9WxFWGE4.&quot;"><id>tag:blogger.com,1999:blog-3314286357054482328.post-8158529958508388184</id><published>2010-04-27T17:20:00.001+02:00</published><updated>2010-06-06T15:31:19.177+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-06T15:31:19.177+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="osgi enterprise" /><category scheme="http://www.blogger.com/atom/ns#" term="jmx" /><category scheme="http://www.blogger.com/atom/ns#" term="osgi" /><category scheme="http://www.blogger.com/atom/ns#" term="MonitorAdmin" /><title>OSGi MonitorAdmin and JMX bundles minor update</title><content type="html">Hello,&lt;br /&gt;
&lt;br /&gt;
There are some minor updates available:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;&lt;a href="http://code.google.com/p/osgilab/wiki/MonitorAdmin"&gt;OSGi MonitorAdmin&lt;/a&gt; 1.0.1 version is available. Changes:&lt;/li&gt;
&lt;/ol&gt;&lt;ul&gt;&lt;li&gt;recompile with J2SE5&lt;/li&gt;
&lt;li&gt;use OSGi specification 4.1.0 dependencies&lt;/li&gt;
&lt;/ul&gt;&lt;ol&gt;&lt;li value="2"&gt;&lt;a href="http://code.google.com/p/osgilab/wiki/JMX"&gt;OSGi JMX Management Model&lt;/a&gt; 1.0.1 version is available. Changes: &lt;/li&gt;
&lt;/ol&gt;&lt;ul&gt;&lt;li value="2"&gt;fix NoClassDefFoundException for Compendium service&lt;/li&gt;
&lt;li value="2"&gt;fix NPEs&lt;/li&gt;
&lt;/ul&gt;&lt;ol&gt;&lt;li value="3"&gt;Artifacts are available in Central Maven repository:&lt;/li&gt;
&lt;pre class="Xml" name="code"&gt;&amp;lt;dependency&amp;gt;
     &amp;lt;groupId&amp;gt;org.osgilab.bundles&amp;lt;/groupId&amp;gt;
     &amp;lt;artifactId&amp;gt;monitoradmin&amp;lt;/artifactId&amp;gt;
     &amp;lt;version&amp;gt;1.0.1&amp;lt;/version&amp;gt;
&amp;lt;/dependency&amp;gt;
&amp;lt;dependency&amp;gt;
     &amp;lt;groupId&amp;gt;org.osgilab.bundles&amp;lt;/groupId&amp;gt;
     &amp;lt;artifactId&amp;gt;jmx&amp;lt;/artifactId&amp;gt;
     &amp;lt;version&amp;gt;1.0.1&amp;lt;/version&amp;gt;
&amp;lt;/dependency&amp;gt;
&lt;/pre&gt;&lt;/ol&gt;Your feedback is welcome.&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;&lt;/ol&gt;&lt;ol&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3314286357054482328-8158529958508388184?l=blog.knowhowlab.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/EMdtEIZ1IAmGmJotPdEh3-wQeJ4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/EMdtEIZ1IAmGmJotPdEh3-wQeJ4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/EMdtEIZ1IAmGmJotPdEh3-wQeJ4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/EMdtEIZ1IAmGmJotPdEh3-wQeJ4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=2eCnR_7SXLU:zoOyLP66b64:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=2eCnR_7SXLU:zoOyLP66b64:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=2eCnR_7SXLU:zoOyLP66b64:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=2eCnR_7SXLU:zoOyLP66b64:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=2eCnR_7SXLU:zoOyLP66b64:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=2eCnR_7SXLU:zoOyLP66b64:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=2eCnR_7SXLU:zoOyLP66b64:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=2eCnR_7SXLU:zoOyLP66b64:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=2eCnR_7SXLU:zoOyLP66b64:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Knowhowlab/~4/2eCnR_7SXLU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.knowhowlab.org/feeds/8158529958508388184/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.knowhowlab.org/2010/04/osgi-monitoradmin-and-jmx-bundles-minor.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3314286357054482328/posts/default/8158529958508388184?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3314286357054482328/posts/default/8158529958508388184?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Knowhowlab/~3/2eCnR_7SXLU/osgi-monitoradmin-and-jmx-bundles-minor.html" title="OSGi MonitorAdmin and JMX bundles minor update" /><author><name>Dmytro Pishchukhin</name><uri>https://profiles.google.com/106807340219118383792</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-ZZb_y1fm8uQ/AAAAAAAAAAI/AAAAAAAACMw/zItcRzswVq4/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.knowhowlab.org/2010/04/osgi-monitoradmin-and-jmx-bundles-minor.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0EEQ3w6cSp7ImA9WxFSFkk.&quot;"><id>tag:blogger.com,1999:blog-3314286357054482328.post-137015950478196933</id><published>2010-04-19T06:00:00.001+02:00</published><updated>2010-04-19T06:00:02.219+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-19T06:00:02.219+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="osgi enterprise" /><category scheme="http://www.blogger.com/atom/ns#" term="jmx" /><category scheme="http://www.blogger.com/atom/ns#" term="jee" /><category scheme="http://www.blogger.com/atom/ns#" term="osgi" /><title>JMX Management Model Implementation: Release 1.0.0</title><content type="html">Hello Everybody.&lt;br /&gt;
&lt;br /&gt;
I'd like to inform you that I've  released yesterday the first version of OSGi Enterprise JMX Management Model Implementation  version 1.0.0.&lt;br /&gt;
&lt;br /&gt;
All details are available on &lt;a href="http://code.google.com/p/osgilab/wiki/JMX"&gt;project site&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Have  a nice day.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3314286357054482328-137015950478196933?l=blog.knowhowlab.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/5r6rKYlzMwKLA3kmcXM8qXqm1jQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5r6rKYlzMwKLA3kmcXM8qXqm1jQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/5r6rKYlzMwKLA3kmcXM8qXqm1jQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5r6rKYlzMwKLA3kmcXM8qXqm1jQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=1bUK_ShG6rU:n6xppV4ETJ8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=1bUK_ShG6rU:n6xppV4ETJ8:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=1bUK_ShG6rU:n6xppV4ETJ8:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=1bUK_ShG6rU:n6xppV4ETJ8:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=1bUK_ShG6rU:n6xppV4ETJ8:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=1bUK_ShG6rU:n6xppV4ETJ8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=1bUK_ShG6rU:n6xppV4ETJ8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=1bUK_ShG6rU:n6xppV4ETJ8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=1bUK_ShG6rU:n6xppV4ETJ8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Knowhowlab/~4/1bUK_ShG6rU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.knowhowlab.org/feeds/137015950478196933/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.knowhowlab.org/2010/04/jmx-management-model-implementation.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3314286357054482328/posts/default/137015950478196933?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3314286357054482328/posts/default/137015950478196933?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Knowhowlab/~3/1bUK_ShG6rU/jmx-management-model-implementation.html" title="JMX Management Model Implementation: Release 1.0.0" /><author><name>Dmytro Pishchukhin</name><uri>https://profiles.google.com/106807340219118383792</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-ZZb_y1fm8uQ/AAAAAAAAAAI/AAAAAAAACMw/zItcRzswVq4/s512-c/photo.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://blog.knowhowlab.org/2010/04/jmx-management-model-implementation.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CU4BQnY-eyp7ImA9WxFTGE8.&quot;"><id>tag:blogger.com,1999:blog-3314286357054482328.post-8513462363276026529</id><published>2010-04-09T16:38:00.001+02:00</published><updated>2010-04-09T16:39:13.853+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-09T16:39:13.853+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="osgi" /><category scheme="http://www.blogger.com/atom/ns#" term="MonitorAdmin" /><title>MonitorAdmin Implementation: Release 1.0.0</title><content type="html">Hello Everybody.&lt;br /&gt;
&lt;br /&gt;
I'd like to inform you that I've released today the first version of OSGi MonitorAdmin Implementation version 1.0.0.&lt;br /&gt;
&lt;br /&gt;
All details are available on &lt;a href="http://code.google.com/p/osgilab/wiki/MonitorAdmin"&gt;project site&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Have a nice day.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3314286357054482328-8513462363276026529?l=blog.knowhowlab.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/yNhgK2HTqb8_e-UkLKpmZhF2qdM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/yNhgK2HTqb8_e-UkLKpmZhF2qdM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/yNhgK2HTqb8_e-UkLKpmZhF2qdM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/yNhgK2HTqb8_e-UkLKpmZhF2qdM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=S4Oc1XPySt8:REHI9XQh6Gk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=S4Oc1XPySt8:REHI9XQh6Gk:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=S4Oc1XPySt8:REHI9XQh6Gk:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=S4Oc1XPySt8:REHI9XQh6Gk:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=S4Oc1XPySt8:REHI9XQh6Gk:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=S4Oc1XPySt8:REHI9XQh6Gk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=S4Oc1XPySt8:REHI9XQh6Gk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=S4Oc1XPySt8:REHI9XQh6Gk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=S4Oc1XPySt8:REHI9XQh6Gk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Knowhowlab/~4/S4Oc1XPySt8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.knowhowlab.org/feeds/8513462363276026529/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.knowhowlab.org/2010/04/monitoradmin-implementation-release-100.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3314286357054482328/posts/default/8513462363276026529?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3314286357054482328/posts/default/8513462363276026529?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Knowhowlab/~3/S4Oc1XPySt8/monitoradmin-implementation-release-100.html" title="MonitorAdmin Implementation: Release 1.0.0" /><author><name>Dmytro Pishchukhin</name><uri>https://profiles.google.com/106807340219118383792</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-ZZb_y1fm8uQ/AAAAAAAAAAI/AAAAAAAACMw/zItcRzswVq4/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.knowhowlab.org/2010/04/monitoradmin-implementation-release-100.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUINQXo4cCp7ImA9WxBaFUU.&quot;"><id>tag:blogger.com,1999:blog-3314286357054482328.post-8464590651867284682</id><published>2010-03-24T19:08:00.001+01:00</published><updated>2010-03-26T08:13:10.438+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-26T08:13:10.438+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="java.util.logging" /><category scheme="http://www.blogger.com/atom/ns#" term="logging" /><category scheme="http://www.blogger.com/atom/ns#" term="LogService" /><category scheme="http://www.blogger.com/atom/ns#" term="osgi" /><category scheme="http://www.blogger.com/atom/ns#" term="JUL" /><title>OSGi Tips&amp;Tricks: Logging. JUL to OSGi. Forward java.util.logging to OSGi logs</title><content type="html">Hello everybody,&lt;br /&gt;
&lt;br /&gt;
There is another small tip regarding OSGi logging - how to  forward log records from &lt;i&gt;java.util.logging&lt;/i&gt;  (JUL) to OSGi &lt;i&gt;LogService&lt;/i&gt;.&lt;br /&gt;
Steps that you have to do:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Register &lt;i&gt;java.util.logging.Handler &lt;/i&gt;implementation to handle LogRecords&lt;/li&gt;
&lt;li&gt;Get &lt;i&gt;org.osgi.service.log.LogService&lt;/i&gt; from OSGi registry &lt;/li&gt;
&lt;li&gt;Implement Handler method public void publish(LogRecord record) to forward  Java &lt;i&gt;LogRecord &lt;/i&gt;to OSGi &lt;i&gt;LogService&lt;/i&gt;.&lt;/li&gt;
&lt;/ol&gt;&amp;nbsp;I've added some customization to this very simple flow.&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;You can enable/disable buffer for published LogRecords when LogService is not available in the OSGi registry. A system property "&lt;i&gt;org.osgilab.tips.logs.jul2osgi.bufferSize&lt;/i&gt;" should be used to activate buffer functionality. Available values:&lt;/li&gt;

&lt;ul&gt;&lt;li&gt;1 &amp;lt; value &amp;lt; Integer.MAX_VALUE - buffer is enabled with defined size&lt;/li&gt;
&lt;li&gt;value &amp;lt;= 0 - buffer is disabled&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;You can filter LogRecords by Log Level with a system property "&lt;i&gt;org.osgilab.tips.logs.jul2osgi.logsLevel&lt;/i&gt;". Available values are the same as levels defined in &lt;a href="http://java.sun.com/javase/6/docs/api/java/util/logging/Level.html"&gt;JUL API&lt;/a&gt;. Default level is &lt;i&gt;Level.ALL &lt;/i&gt;&lt;/li&gt;
&lt;li&gt; You can filter LogRecords by logger names with a system property "&lt;i&gt;org.osgilab.tips.logs.jul2osgi.loggerNames&lt;/i&gt;". Logger names should be listed with '&lt;i&gt;;&lt;/i&gt;' separator (e.g. "&lt;i&gt;org.osgilab.tips.logs.jul2osgi.loggerNames=logger1;com.acme.logger2;com.foo.logger3"&lt;/i&gt;). Root logger is used by default.&lt;/li&gt;
&lt;/ol&gt;See my reference implementation &lt;a href="http://code.google.com/p/osgilab/source/browse/trunk/org.osgilab.tips/logs/jul2osgi/"&gt;here&lt;/a&gt;. &lt;br /&gt;
&lt;br /&gt;
Have a nice day!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3314286357054482328-8464590651867284682?l=blog.knowhowlab.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/y48SIpBEF4G4PttMzwpVl0tcGVc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/y48SIpBEF4G4PttMzwpVl0tcGVc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/y48SIpBEF4G4PttMzwpVl0tcGVc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/y48SIpBEF4G4PttMzwpVl0tcGVc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=BHpIs7LuCx8:b6gCucrSAsA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=BHpIs7LuCx8:b6gCucrSAsA:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=BHpIs7LuCx8:b6gCucrSAsA:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=BHpIs7LuCx8:b6gCucrSAsA:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=BHpIs7LuCx8:b6gCucrSAsA:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=BHpIs7LuCx8:b6gCucrSAsA:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=BHpIs7LuCx8:b6gCucrSAsA:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=BHpIs7LuCx8:b6gCucrSAsA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=BHpIs7LuCx8:b6gCucrSAsA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Knowhowlab/~4/BHpIs7LuCx8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.knowhowlab.org/feeds/8464590651867284682/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.knowhowlab.org/2010/03/osgi-tips-logging-jul-to-osgi-forward.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3314286357054482328/posts/default/8464590651867284682?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3314286357054482328/posts/default/8464590651867284682?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Knowhowlab/~3/BHpIs7LuCx8/osgi-tips-logging-jul-to-osgi-forward.html" title="OSGi Tips&amp;Tricks: Logging. JUL to OSGi. Forward java.util.logging to OSGi logs" /><author><name>Dmytro Pishchukhin</name><uri>https://profiles.google.com/106807340219118383792</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-ZZb_y1fm8uQ/AAAAAAAAAAI/AAAAAAAACMw/zItcRzswVq4/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.knowhowlab.org/2010/03/osgi-tips-logging-jul-to-osgi-forward.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0YHQHY7fCp7ImA9WxFWGE4.&quot;"><id>tag:blogger.com,1999:blog-3314286357054482328.post-2297450580209020752</id><published>2010-03-12T08:11:00.002+01:00</published><updated>2010-06-06T15:32:11.804+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-06T15:32:11.804+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="java.util.logging" /><category scheme="http://www.blogger.com/atom/ns#" term="logging" /><category scheme="http://www.blogger.com/atom/ns#" term="LogService" /><category scheme="http://www.blogger.com/atom/ns#" term="osgi" /><category scheme="http://www.blogger.com/atom/ns#" term="JUL" /><title>OSGi Tips&amp;Tricks: Logging. OSGi to JUL. Forward OSGi logs to java.util.logging</title><content type="html">Morning everybody,&lt;br /&gt;
&lt;br /&gt;
There is a small tip - how to forward log entries from OSGi &lt;i&gt;LogService&lt;/i&gt; to &lt;i&gt;java.util.logging&lt;/i&gt; (JUL).&lt;br /&gt;
Steps that you have to do:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Get &lt;i&gt;org.osgi.service.log.LogReaderService&lt;/i&gt; from OSGi registry&lt;/li&gt;
&lt;li&gt; Add your implementation of &lt;i&gt;org.osgi.service.log.LogListener&lt;/i&gt; interface to LogReaderService&lt;/li&gt;
&lt;li&gt;Initialize/get Java util Logger instance&lt;/li&gt;
&lt;li&gt;Implement LogListener method public void logged(LogEntry) to map OSGi &lt;i&gt;LogEntry&lt;/i&gt; instance to Java &lt;i&gt;LogRecord&lt;/i&gt; and publish it with &lt;i&gt;Logger&lt;/i&gt;.&lt;/li&gt;
&lt;/ol&gt;&lt;br /&gt;
&lt;pre class="Java" name="code"&gt;public void logged(LogEntry logEntry) {
    LOG.log(mapLogEntry(logEntry));
}
&lt;/pre&gt;&lt;br /&gt;
You can configure name on Java Logger with system property "org.osgilab.tips.logs.osgi2jul.loggerName" with &lt;a href="http://code.google.com/p/osgilab/source/browse/trunk/org.osgilab.tips/logs/osgi2jul/"&gt;my  reference implementation.&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Have a nice day!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3314286357054482328-2297450580209020752?l=blog.knowhowlab.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/BOhYT0RKzvJ5ckgWPI6Pia17dmk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/BOhYT0RKzvJ5ckgWPI6Pia17dmk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/BOhYT0RKzvJ5ckgWPI6Pia17dmk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/BOhYT0RKzvJ5ckgWPI6Pia17dmk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=bHnsH0zwnsA:nm3HjtEouJ8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=bHnsH0zwnsA:nm3HjtEouJ8:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=bHnsH0zwnsA:nm3HjtEouJ8:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=bHnsH0zwnsA:nm3HjtEouJ8:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=bHnsH0zwnsA:nm3HjtEouJ8:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=bHnsH0zwnsA:nm3HjtEouJ8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=bHnsH0zwnsA:nm3HjtEouJ8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=bHnsH0zwnsA:nm3HjtEouJ8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=bHnsH0zwnsA:nm3HjtEouJ8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Knowhowlab/~4/bHnsH0zwnsA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.knowhowlab.org/feeds/2297450580209020752/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.knowhowlab.org/2010/03/osgi-tips-osgi-logging-forward-osgi.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3314286357054482328/posts/default/2297450580209020752?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3314286357054482328/posts/default/2297450580209020752?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Knowhowlab/~3/bHnsH0zwnsA/osgi-tips-osgi-logging-forward-osgi.html" title="OSGi Tips&amp;Tricks: Logging. OSGi to JUL. Forward OSGi logs to java.util.logging" /><author><name>Dmytro Pishchukhin</name><uri>https://profiles.google.com/106807340219118383792</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-ZZb_y1fm8uQ/AAAAAAAAAAI/AAAAAAAACMw/zItcRzswVq4/s512-c/photo.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://blog.knowhowlab.org/2010/03/osgi-tips-osgi-logging-forward-osgi.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Dk8MQ38-fSp7ImA9WhdUF08.&quot;"><id>tag:blogger.com,1999:blog-3314286357054482328.post-4404429901223217195</id><published>2010-03-07T11:26:00.001+01:00</published><updated>2011-10-04T12:41:22.155+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-04T12:41:22.155+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="tools" /><category scheme="http://www.blogger.com/atom/ns#" term="jprofiler" /><category scheme="http://www.blogger.com/atom/ns#" term="visualvm" /><category scheme="http://www.blogger.com/atom/ns#" term="NoClassDefFoundError" /><category scheme="http://www.blogger.com/atom/ns#" term="jprobe" /><category scheme="http://www.blogger.com/atom/ns#" term="yourkit" /><category scheme="http://www.blogger.com/atom/ns#" term="osgi" /><category scheme="http://www.blogger.com/atom/ns#" term="profiling" /><title>OSGi Tips&amp;Tricks: OSGi profiling (YourKit, VisualVM, JProfiler, JProbe) and NoClassDefFoundError</title><content type="html">Hello OSGi-people,&lt;br /&gt;
&lt;br /&gt;
There are some OSGi profiling configuration tricks to avoid NoClassDefFoundError on bundles start. I've tested four Java Profiler tools and prepared configuration settings for them.&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;YourKit (&lt;a href="http://www.yourkit.com/"&gt;http://www.yourkit.com/&lt;/a&gt;) v.8.0.x&lt;/li&gt;
&lt;/ul&gt;&lt;pre class="Java" name="code"&gt;-agentpath:${yourkit.root.folder}\bin\win32\yjpagent.dll -Dorg.osgi.framework.bootdelegation=com.yourkit.*
&lt;/pre&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Sun VisualVM (&lt;a href="https://visualvm.dev.java.net/"&gt;https://visualvm.dev.java.net/&lt;/a&gt;) v.1.2.2&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;&lt;pre class="Java" name="code"&gt;-Xbootclasspath:${visualvm.root.folder}\profiler3\lib\jfluid-server.jar -Dorg.osgi.framework.bootdelegation=org.netbeans.lib.profiler.*
&lt;/pre&gt;&lt;br /&gt;
&lt;ul&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;JProfiler (&lt;a href="http://www.ej-technologies.com/products/jprofiler/overview.html"&gt;http://www.ej-technologies.com/products/jprofiler/overview.html&lt;/a&gt;) v.6.0.x&lt;/li&gt;
&lt;/ul&gt;&lt;pre class="Java" name="code"&gt;-agentpath:${jprofiler.root.folder}\bin\windows\jprofilerti.dll -Xbootclasspath/a:${jprofiler.root.folder}\bin\agent.jar -Dorg.osgi.framework.bootdelegation=com.jprofiler.*
&lt;/pre&gt;&lt;br /&gt;
&lt;ul&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;JProbe (&lt;a href="http://www.quest.com/jprobe/"&gt;http://www.quest.com/jprobe/&lt;/a&gt;) v.8.3&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;&lt;pre class="Java" name="code"&gt;-agentpath:${jprobe.root.folder}\bin\ia32\jprobe.dll=${profile.jpl.file} -Dorg.osgi.framework.bootdelegation=com.jprobe.*
&lt;/pre&gt;&lt;br /&gt;
&lt;a href="http://code.google.com/p/osgilab/source/browse/trunk/org.osgilab.tips/profile/profile.xml"&gt;Here&lt;/a&gt; you can find Apache Maven POM file with profiles for OSGi frameworks (Eclipse Equinox, Apache Felix and Knopflerfish) and Java Profile Tools configurations.&lt;br /&gt;
&lt;br /&gt;
E.g. run this command to run Equinox Framework with YourKit Profiler configuration:&lt;br /&gt;
&lt;pre class="Java" name="code"&gt;mvn -f profile.xml -P equinox,yourkit
&lt;/pre&gt;&lt;br /&gt;
&lt;br/&gt;&lt;br /&gt;
&lt;b&gt;Update 2011/10/01&lt;/b&gt;: The last tests with YourKit Profiler 10.0 with OSGi + Declarative Services still require -Dorg.osgi.framework.bootdelegation=com.yourkit.* settings.&lt;br /&gt;
&lt;br /&gt;
Have a nice OSGi profiling!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3314286357054482328-4404429901223217195?l=blog.knowhowlab.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/66ug_CFikUNfHcKYypIGkPdBUt4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/66ug_CFikUNfHcKYypIGkPdBUt4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/66ug_CFikUNfHcKYypIGkPdBUt4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/66ug_CFikUNfHcKYypIGkPdBUt4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=uY5z1IR4JGY:rr4fE6tY36k:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=uY5z1IR4JGY:rr4fE6tY36k:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=uY5z1IR4JGY:rr4fE6tY36k:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=uY5z1IR4JGY:rr4fE6tY36k:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=uY5z1IR4JGY:rr4fE6tY36k:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=uY5z1IR4JGY:rr4fE6tY36k:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=uY5z1IR4JGY:rr4fE6tY36k:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=uY5z1IR4JGY:rr4fE6tY36k:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=uY5z1IR4JGY:rr4fE6tY36k:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Knowhowlab/~4/uY5z1IR4JGY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.knowhowlab.org/feeds/4404429901223217195/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.knowhowlab.org/2010/03/osgi-tips-osgi-profiling-yourkit.html#comment-form" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3314286357054482328/posts/default/4404429901223217195?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3314286357054482328/posts/default/4404429901223217195?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Knowhowlab/~3/uY5z1IR4JGY/osgi-tips-osgi-profiling-yourkit.html" title="OSGi Tips&amp;Tricks: OSGi profiling (YourKit, VisualVM, JProfiler, JProbe) and NoClassDefFoundError" /><author><name>Dmytro Pishchukhin</name><uri>https://profiles.google.com/106807340219118383792</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-ZZb_y1fm8uQ/AAAAAAAAAAI/AAAAAAAACMw/zItcRzswVq4/s512-c/photo.jpg" /></author><thr:total>4</thr:total><feedburner:origLink>http://blog.knowhowlab.org/2010/03/osgi-tips-osgi-profiling-yourkit.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0ICQ3k4fCp7ImA9WxBTGUU.&quot;"><id>tag:blogger.com,1999:blog-3314286357054482328.post-6502364381790131946</id><published>2009-12-16T19:51:00.002+01:00</published><updated>2009-12-16T19:52:42.734+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-16T19:52:42.734+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="osgi" /><category scheme="http://www.blogger.com/atom/ns#" term="MonitorAdmin" /><title>MonitorAdmin Implementation (Preparing steps)</title><content type="html">Hello OSGi-People!&lt;br /&gt;
&lt;br /&gt;
As the first experiment, I'd like to implement &lt;a href="http://www.osgi.org/javadoc/r4v42/org/osgi/service/monitor/package-summary.html"&gt;OSGi MonitorAdmin Service&lt;/a&gt; (&lt;a href="http://www.osgi.org/Download/File?url=/download/r4v42/r4.cmpn.pdf"&gt;r4.cmpn.pdf&lt;/a&gt;, Chapter 119).&lt;br /&gt;
&lt;br /&gt;
There is a list of development iterations that I've prepared:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;&lt;b&gt;Maintenance iteration&lt;/b&gt;. Create Maven project structure with modules and settings.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;"Getters" iteration.&lt;/b&gt; Implementation of MonitorAdmin get-methods (e.g.,&amp;nbsp; &lt;a href="http://www.osgi.org/javadoc/r4v42/org/osgi/service/monitor/MonitorAdmin.html#getMonitorableNames%28%29"&gt;getMonitorableNames()&lt;/a&gt; etc.). Cover functionality with unit tests with mocks and integration tests for various OSGi frameworks.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;"Jobs" iteration.&lt;/b&gt; Implementation of MonitorAdmin jobs-related methods (e.g., &lt;a href="http://www.osgi.org/javadoc/r4v42/org/osgi/service/monitor/MonitorAdmin.html#startJob%28java.lang.String,%20java.lang.String[],%20int%29"&gt;startJob()&lt;/a&gt;, &lt;a href="http://www.osgi.org/javadoc/r4v42/org/osgi/service/monitor/MonitorAdmin.html#switchEvents%28java.lang.String,%20boolean%29"&gt;switchEvents()&lt;/a&gt; etc.) and related interfaces: &lt;a href="http://www.osgi.org/javadoc/r4v42/org/osgi/service/monitor/MonitorListener.html"&gt;MonitorListener&lt;/a&gt; and &lt;a href="http://www.osgi.org/javadoc/r4v42/org/osgi/service/monitor/MonitoringJob.html"&gt;MonitoringJob&lt;/a&gt;. All new functionality should be covered with unit and integration tests.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;"Security" iteration.&lt;/b&gt; Add support of &lt;a href="http://www.osgi.org/javadoc/r4v42/org/osgi/service/monitor/MonitorPermission.html"&gt;MonitorPermission&lt;/a&gt; with unit and integration tests.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;"Maven release" iteration.&lt;/b&gt; The last iteration to release artifact and make it available through maven repository.&lt;/li&gt;
&lt;/ol&gt;I'll try to explain all development nuances in every iteration-related post.&lt;b&gt; &lt;br /&gt;
&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Let's get started! Your comments are welcome.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3314286357054482328-6502364381790131946?l=blog.knowhowlab.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/x51Wsin9kCA_edgR6zScKkMLI1c/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/x51Wsin9kCA_edgR6zScKkMLI1c/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/x51Wsin9kCA_edgR6zScKkMLI1c/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/x51Wsin9kCA_edgR6zScKkMLI1c/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=lJd43XhNwdQ:YaRjr6GBX9g:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=lJd43XhNwdQ:YaRjr6GBX9g:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=lJd43XhNwdQ:YaRjr6GBX9g:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=lJd43XhNwdQ:YaRjr6GBX9g:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=lJd43XhNwdQ:YaRjr6GBX9g:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=lJd43XhNwdQ:YaRjr6GBX9g:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=lJd43XhNwdQ:YaRjr6GBX9g:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=lJd43XhNwdQ:YaRjr6GBX9g:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=lJd43XhNwdQ:YaRjr6GBX9g:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Knowhowlab/~4/lJd43XhNwdQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.knowhowlab.org/feeds/6502364381790131946/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.knowhowlab.org/2009/12/monitoradmin-implementation-preparing.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3314286357054482328/posts/default/6502364381790131946?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3314286357054482328/posts/default/6502364381790131946?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Knowhowlab/~3/lJd43XhNwdQ/monitoradmin-implementation-preparing.html" title="MonitorAdmin Implementation (Preparing steps)" /><author><name>Dmytro Pishchukhin</name><uri>https://profiles.google.com/106807340219118383792</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-ZZb_y1fm8uQ/AAAAAAAAAAI/AAAAAAAACMw/zItcRzswVq4/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.knowhowlab.org/2009/12/monitoradmin-implementation-preparing.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEUNRXw_eip7ImA9WxNbFk4.&quot;"><id>tag:blogger.com,1999:blog-3314286357054482328.post-8947727505642990869</id><published>2009-11-19T10:48:00.000+01:00</published><updated>2009-11-19T13:04:54.242+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-19T13:04:54.242+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="tools" /><category scheme="http://www.blogger.com/atom/ns#" term="osgi" /><title>Tools box or project receipt ingredients</title><content type="html">Hello,&lt;br /&gt;
&lt;br /&gt;
Today I'd like to list the tools, utils and libraries I use for OSGi Lab projects. These ingredients are indispensable pieces of the project.&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;&lt;b&gt;Foundation&lt;/b&gt;. I use &lt;a href="http://code.google.com/"&gt;Google code&lt;/a&gt; service for the project. It provides almost everything I need: version control - Subversion, embedded issue tracker, embedded wiki engine, downloads page. One thing that I missed is build server. I'll try to find one somewhere. Before that I'll use my own PC for nightly builds. &lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Main ingredient&lt;/b&gt;. I'll base project structure on &lt;a href="http://maven.apache.org/"&gt;Apache Maven&lt;/a&gt;. This structure is very popular in open source projects and I like to follow it. Except common Maven plug-ins I'll use OSGi specific plug-in to generate bundle manifest -&amp;nbsp;&lt;a href="http://felix.apache.org/site/apache-felix-maven-bundle-plugin-bnd.html"&gt;Maven Bundle Plug-in. &lt;/a&gt;This plug-in is based on very popular OSGi tool &lt;a href="http://www.aqute.biz/Code/Bnd"&gt;BND&lt;/a&gt; from Peter Kriens. It helps to create bundle jars, create and validate manifest files, resolve bundle class-path dependencies etc.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Main tool&lt;/b&gt;. As the project structure is based on Maven we can use any editor for sources, even vi. I suggest to select one from high-end Java IDEs:&amp;nbsp;&lt;a href="http://eclipse.org/"&gt;Eclipse&lt;/a&gt;,&amp;nbsp;&lt;a href="http://www.jetbrains.org/"&gt;JetBrains IDEA Community Edition&lt;/a&gt; or &lt;a href="http://netbeans.org/"&gt;NetBeans&lt;/a&gt;. I personally like IDEA, but I don't like to start any "IDE holy wars". I think that all three IDE cover all project requirements, it's just a matter of habit.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Testing tools&lt;/b&gt;. To provide upscale and reliable code it should be covered with tests. During OSGi bundle development we have 2 types of tests: OSGi specific (or integration tests) and non-OSGi specific (e.g. unit tests). For unit tests I'll use &lt;a href="http://junit.org/"&gt;JUnit&lt;/a&gt; and for integration tests (inside OSGi framework) I'll use JUnit with&amp;nbsp;&lt;a href="http://wiki.ops4j.org/display/paxexam/Pax+Exam"&gt;Pax Exam - OSGi test framework&lt;/a&gt;.&amp;nbsp; &lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Spices&lt;/b&gt;. Additional useful tools and libraries: &lt;a href="http://mockito.org/"&gt;Mockito - mocking framework&lt;/a&gt; and &lt;a href="http://paxrunner.ops4j.org/space/Pax+Runner"&gt;Pax Runner - OSGi bundles provisioning tool&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;br /&gt;
So, let's start to cook! &lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3314286357054482328-8947727505642990869?l=blog.knowhowlab.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/yiCuyBLLiqmEaWK7m4J7na2zNgY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/yiCuyBLLiqmEaWK7m4J7na2zNgY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/yiCuyBLLiqmEaWK7m4J7na2zNgY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/yiCuyBLLiqmEaWK7m4J7na2zNgY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=jZS6v49gews:c2a5lT67hyg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=jZS6v49gews:c2a5lT67hyg:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=jZS6v49gews:c2a5lT67hyg:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=jZS6v49gews:c2a5lT67hyg:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=jZS6v49gews:c2a5lT67hyg:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=jZS6v49gews:c2a5lT67hyg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=jZS6v49gews:c2a5lT67hyg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=jZS6v49gews:c2a5lT67hyg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=jZS6v49gews:c2a5lT67hyg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Knowhowlab/~4/jZS6v49gews" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.knowhowlab.org/feeds/8947727505642990869/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.knowhowlab.org/2009/11/tools-box-or-project-receipt.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3314286357054482328/posts/default/8947727505642990869?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3314286357054482328/posts/default/8947727505642990869?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Knowhowlab/~3/jZS6v49gews/tools-box-or-project-receipt.html" title="Tools box or project receipt ingredients" /><author><name>Dmytro Pishchukhin</name><uri>https://profiles.google.com/106807340219118383792</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-ZZb_y1fm8uQ/AAAAAAAAAAI/AAAAAAAACMw/zItcRzswVq4/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.knowhowlab.org/2009/11/tools-box-or-project-receipt.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak4FQHY4eSp7ImA9WxNbF0w.&quot;"><id>tag:blogger.com,1999:blog-3314286357054482328.post-2456049089686632637</id><published>2009-11-16T12:52:00.000+01:00</published><updated>2009-11-20T13:08:31.831+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-20T13:08:31.831+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="osgi" /><title>Welcome</title><content type="html">Hello OSGi-people. Welcome to my blog where I'd like to share some OSGi experience from my previous and current projects.&lt;br /&gt;
For the last few years OSGi technology gets more and more popular. There are many components and tools that are based on OSGi frameworks like Eclipse IDE or JEE servers. The last version of OSGi specification brought many new APIs, but only few of them have reference implementations.&lt;br /&gt;
I'd like to develop some of APIs that, I think, will be helpfull for you, OSGi-community. I'll describe all developement steps and tools I use and share sources here&amp;nbsp;&lt;a href="http://code.google.com/p/osgilab/"&gt;OSGi Lab project&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
This is non-profit blog and project. "OSGi" trademark belongs to &lt;a href="http://osgi.org/"&gt;OSGi Alliance&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Your comments and ideas are welcome.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3314286357054482328-2456049089686632637?l=blog.knowhowlab.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/fbGRfdleKtmpuuNdnzJIVnTD2HM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/fbGRfdleKtmpuuNdnzJIVnTD2HM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/fbGRfdleKtmpuuNdnzJIVnTD2HM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/fbGRfdleKtmpuuNdnzJIVnTD2HM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=3CMNFzgSQQ4:zyZmHv6TArU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=3CMNFzgSQQ4:zyZmHv6TArU:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=3CMNFzgSQQ4:zyZmHv6TArU:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=3CMNFzgSQQ4:zyZmHv6TArU:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=3CMNFzgSQQ4:zyZmHv6TArU:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=3CMNFzgSQQ4:zyZmHv6TArU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=3CMNFzgSQQ4:zyZmHv6TArU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Knowhowlab?a=3CMNFzgSQQ4:zyZmHv6TArU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Knowhowlab?i=3CMNFzgSQQ4:zyZmHv6TArU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Knowhowlab/~4/3CMNFzgSQQ4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.knowhowlab.org/feeds/2456049089686632637/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.knowhowlab.org/2009/11/welcome.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3314286357054482328/posts/default/2456049089686632637?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3314286357054482328/posts/default/2456049089686632637?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Knowhowlab/~3/3CMNFzgSQQ4/welcome.html" title="Welcome" /><author><name>Dmytro Pishchukhin</name><uri>https://profiles.google.com/106807340219118383792</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-ZZb_y1fm8uQ/AAAAAAAAAAI/AAAAAAAACMw/zItcRzswVq4/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.knowhowlab.org/2009/11/welcome.html</feedburner:origLink></entry></feed>

