<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3314286357054482328</id><updated>2026-02-10T21:32:35.014+01:00</updated><category term="osgi"/><category term="maven"/><category term="junit"/><category term="pax exam"/><category term="felix"/><category term="pax runner"/><category term="tools"/><category term="integration"/><category term="equinox"/><category term="knopflerfish"/><category term="shell"/><category term="testing"/><category term="MonitorAdmin"/><category term="gogo"/><category term="release"/><category term="specification"/><category term="assertions"/><category term="osgi enterprise"/><category term="arquillian"/><category term="java"/><category term="jmx"/><category term="utilities"/><category term="JUL"/><category term="LogService"/><category term="iot"/><category term="java.util.logging"/><category term="keepass"/><category term="logging"/><category term="maven plugin keepass deployment"/><category term="plugin"/><category term="spring osgi"/><category term="tutorial"/><category term="NoClassDefFoundError"/><category term="android"/><category term="aws"/><category term="blueprint"/><category term="bndtools"/><category term="docker"/><category term="draft"/><category term="general"/><category term="gpsd"/><category term="ios"/><category term="jee"/><category term="jprobe"/><category term="jprofiler"/><category term="linux"/><category term="nginx"/><category term="nmea"/><category term="objectivec"/><category term="profiling"/><category term="scr"/><category term="spring dm"/><category term="visualvm"/><category term="yourkit"/><title type='text'>KnowHowLab</title><subtitle type='html'>Java/JEE/OSGi/AWS/Docker development experience sharing blog.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://blog.knowhowlab.org/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3314286357054482328/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://blog.knowhowlab.org/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/3314286357054482328/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/15456622107452083522</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>40</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3314286357054482328.post-6767183910599225681</id><published>2017-05-05T16:42:00.000+02:00</published><updated>2017-05-05T16:42:04.154+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="docker"/><category scheme="http://www.blogger.com/atom/ns#" term="gpsd"/><category scheme="http://www.blogger.com/atom/ns#" term="iot"/><category scheme="http://www.blogger.com/atom/ns#" term="nmea"/><title type='text'>gpsd and NMEA0183 simulator 0.1 as docker image is released</title><content type='html'>Hi All,&lt;br /&gt;
&lt;br /&gt;
I&#39;ve released a new Docker images that helps to make tests for GPS-specific components and connectors.&lt;br /&gt;
&lt;br /&gt;
How to use it:&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;docker run -d -p 8888:8888 -p 2947:2947 --name gpsd knowhowlab/gpsd-nmea-simulator&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
The started container exposes 2 ports:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;8888 - raw NMEA0183 stream&lt;/li&gt;
&lt;li&gt;2947 - gpsd service port&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
You can test it with:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;telnet localhost 8888&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;or&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;gpsmon localhost:2947&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https://hub.docker.com/r/knowhowlab/gpsd-nmea-simulator/&quot; target=&quot;_blank&quot;&gt;Docker hub project&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/knowhowlab/gpsd-nmea-simulator&quot; target=&quot;_blank&quot;&gt;Sources&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://blog.knowhowlab.org/feeds/6767183910599225681/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.knowhowlab.org/2017/05/gpsd-and-nmea0183-simulator-01.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3314286357054482328/posts/default/6767183910599225681'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3314286357054482328/posts/default/6767183910599225681'/><link rel='alternate' type='text/html' href='http://blog.knowhowlab.org/2017/05/gpsd-and-nmea0183-simulator-01.html' title='gpsd and NMEA0183 simulator 0.1 as docker image is released'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/15456622107452083522</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3314286357054482328.post-1076901788054327089</id><published>2016-04-06T12:05:00.001+02:00</published><updated>2016-04-06T12:05:29.980+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="keepass"/><category scheme="http://www.blogger.com/atom/ns#" term="maven"/><category scheme="http://www.blogger.com/atom/ns#" term="plugin"/><title type='text'>KeePass Maven plugin 0.4 released</title><content type='html'>A new version of KeePass Maven plugin 0.4 is available in Maven repository.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;New Features:&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li style=&quot;box-sizing: border-box;&quot;&gt;supports both credentials: master password and key file&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;b&gt;References&lt;/b&gt;:&lt;br /&gt;
&lt;div&gt;
&lt;ol&gt;
&lt;li&gt;Sources:&amp;nbsp;&lt;a href=&quot;https://github.com/knowhowlab/keepass-maven-plugin&quot;&gt;GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Documentation:&amp;nbsp;&lt;a href=&quot;https://knowhowlab.gitbooks.io/keepass-maven-plugin/content/&quot;&gt;User Manual&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Tech documentation:&amp;nbsp;&lt;a href=&quot;http://knowhowlab.github.io/keepass-maven-plugin/&quot;&gt;Project reports&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Contact:&amp;nbsp;&lt;a href=&quot;https://groups.google.com/d/forum/keepass-maven-plugin&quot;&gt;Mailing list&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
Thank you for your attention. Your feedback is welcome as usual.&lt;br /&gt;
&lt;div&gt;
Best Regards.&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://blog.knowhowlab.org/feeds/1076901788054327089/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.knowhowlab.org/2016/04/keepass-maven-plugin-04-released.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3314286357054482328/posts/default/1076901788054327089'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3314286357054482328/posts/default/1076901788054327089'/><link rel='alternate' type='text/html' href='http://blog.knowhowlab.org/2016/04/keepass-maven-plugin-04-released.html' title='KeePass Maven plugin 0.4 released'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/15456622107452083522</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3314286357054482328.post-9017833035899035417</id><published>2016-02-14T16:33:00.000+01:00</published><updated>2016-02-14T16:37:43.460+01:00</updated><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="osgi"/><category scheme="http://www.blogger.com/atom/ns#" term="release"/><category scheme="http://www.blogger.com/atom/ns#" term="specification"/><title type='text'>OSGi MonitorAdmin Implementation: Release 1.0.3</title><content type='html'>Hello,&lt;br /&gt;
&lt;br /&gt;
I&#39;d like to announce a new release of&amp;nbsp;&lt;a href=&quot;https://github.com/knowhowlab/org.knowhowlab.osgi.monitoradmin&quot; target=&quot;_blank&quot;&gt;MonitorAdmin&lt;/a&gt;&amp;nbsp;bundle 1.0.3.&lt;br /&gt;
&lt;br /&gt;
Changes:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&amp;nbsp; re&lt;span style=&quot;font-family: &amp;quot;times&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;quires Java 6+&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: &amp;quot;times&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;&amp;nbsp; exports org.osgi.service.monitor;version=&quot;1.0&quot; package&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: &amp;quot;times&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;&amp;nbsp; requir&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;times&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;es OSGi&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;times&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt; 4.2+&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: &amp;quot;times&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;&amp;nbsp; logging is switched to SLF4J 1.6+&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;times&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;Project changes:&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style=&quot;font-family: &amp;quot;times&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;ported to &lt;a href=&quot;https://github.com/knowhowlab/org.knowhowlab.osgi.monitoradmin&quot; target=&quot;_blank&quot;&gt;GitHub&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;add Core coverage reports&lt;/li&gt;
&lt;li&gt;Integrated with Travis CI&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Maven artifact:&lt;br /&gt;
&lt;pre class=&quot;Xml&quot; name=&quot;code&quot;&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.3&amp;lt;/version&amp;gt;
&amp;lt;/dependency&amp;gt;
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
Cheers,&lt;br /&gt;
Dmytro</content><link rel='replies' type='application/atom+xml' href='http://blog.knowhowlab.org/feeds/9017833035899035417/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.knowhowlab.org/2016/02/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/9017833035899035417'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3314286357054482328/posts/default/9017833035899035417'/><link rel='alternate' type='text/html' href='http://blog.knowhowlab.org/2016/02/osgi-monitoradmin-implementation.html' title='OSGi MonitorAdmin Implementation: Release 1.0.3'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/15456622107452083522</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3314286357054482328.post-6607065835092660227</id><published>2016-02-06T10:34:00.001+01:00</published><updated>2016-02-06T10:34:41.643+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="android"/><category scheme="http://www.blogger.com/atom/ns#" term="ios"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="objectivec"/><title type='text'>Google’s J2ObjC 1.0 Translates Java into Objective-C</title><content type='html'>&lt;a href=&quot;http://www.infoq.com/news/2016/02/j2objc?utm_campaign=infoq_content&amp;amp;utm_source=infoq&amp;amp;utm_medium=feed&amp;amp;utm_term=global#.VrW97s7x7kY.blogger&quot;&gt;Google’s J2ObjC 1.0 Translates Java into Objective-C&lt;/a&gt;: J2ObjC is an open source tool created by Google to translate Java code into corrresponding Objective-C code that can be run on iOS. The idea is to reuse Java business code between Android, web and iOS. For the web the translation is done with GWT. This tool does not deal with UI code which needs to be written separately for each platform.</content><link rel='replies' type='application/atom+xml' href='http://blog.knowhowlab.org/feeds/6607065835092660227/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.knowhowlab.org/2016/02/googles-j2objc-10-translates-java-into.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3314286357054482328/posts/default/6607065835092660227'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3314286357054482328/posts/default/6607065835092660227'/><link rel='alternate' type='text/html' href='http://blog.knowhowlab.org/2016/02/googles-j2objc-10-translates-java-into.html' title='Google’s J2ObjC 1.0 Translates Java into Objective-C'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/15456622107452083522</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3314286357054482328.post-5178234801540972405</id><published>2016-02-02T22:24:00.000+01:00</published><updated>2016-02-02T22:24:23.393+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="iot"/><category scheme="http://www.blogger.com/atom/ns#" term="osgi"/><title type='text'>Building the Internet of Things with OSGi</title><content type='html'>&lt;div class=&quot;excerpt&quot; style=&quot;background-color: white; border: 0px; box-sizing: border-box; font-stretch: inherit; line-height: 1.3em; margin: 0px 0px 30px; padding: 0px; vertical-align: baseline;&quot;&gt;
&lt;div style=&quot;border-image-outset: initial; border-image-repeat: initial; border-image-slice: initial; border-image-source: initial; border-image-width: initial; border: 0px; box-sizing: border-box; font-stretch: inherit; font-style: inherit; font-variant: inherit; line-height: 1.3em; padding: 0px; text-align: justify; vertical-align: baseline;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;In a world where billions of devices are being connected to the Internet, the Internet of Things (IoT) becomes an increasingly important domain. IoT offers a lot of opportunities for new and innovative applications, for example turning your home into a smart home, or turning cities into smart cities, by intelligently connecting sensor input data to various actuators.&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;text&quot; style=&quot;background-color: white; border: 0px; box-sizing: border-box; color: #333333; font-stretch: inherit; line-height: 1.5em; margin: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;
&lt;div style=&quot;border-image-outset: initial; border-image-repeat: initial; border-image-slice: initial; border-image-source: initial; border-image-width: initial; border: 0px; box-sizing: border-box; font-stretch: inherit; font-style: inherit; font-variant: inherit; line-height: 1.5em; margin-bottom: 10px; padding: 0px; text-align: justify; vertical-align: baseline;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;However, with the multitude of available IoT platforms, device management protocols, wireless communication protocols, etc. it becomes hard to see the forest for the trees. In this article we will illustrate how OSGi can help us build the next generation of IoT applications.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;border-image-outset: initial; border-image-repeat: initial; border-image-slice: initial; border-image-source: initial; border-image-width: initial; border: 0px; box-sizing: border-box; font-stretch: inherit; font-style: inherit; font-variant: inherit; line-height: 1.5em; margin-bottom: 10px; padding: 0px; text-align: justify; vertical-align: baseline;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;border-image-outset: initial; border-image-repeat: initial; border-image-slice: initial; border-image-source: initial; border-image-width: initial; border: 0px; box-sizing: border-box; font-stretch: inherit; font-style: inherit; font-variant: inherit; line-height: 1.5em; margin-bottom: 10px; padding: 0px; text-align: justify; vertical-align: baseline;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;a href=&quot;https://jaxenter.com/building-the-internet-of-things-with-osgi-123620.html&quot; target=&quot;_blank&quot;&gt;More details...&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://blog.knowhowlab.org/feeds/5178234801540972405/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.knowhowlab.org/2016/02/building-internet-of-things-with-osgi.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3314286357054482328/posts/default/5178234801540972405'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3314286357054482328/posts/default/5178234801540972405'/><link rel='alternate' type='text/html' href='http://blog.knowhowlab.org/2016/02/building-internet-of-things-with-osgi.html' title='Building the Internet of Things with OSGi'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/15456622107452083522</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3314286357054482328.post-4193785192854312412</id><published>2016-02-01T17:29:00.001+01:00</published><updated>2016-02-01T17:31:26.183+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="linux"/><category scheme="http://www.blogger.com/atom/ns#" term="nginx"/><title type='text'>Introduction to Nginx – Complete Tutorial</title><content type='html'>&lt;div style=&quot;background: rgb(255, 255, 255); border: 0px; font-family: arial, verdana, helvetica, sans-serif; font-size: 12.96px; line-height: 15.552px; margin-bottom: 15px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;
&lt;span style=&quot;background: transparent; border: 0px; font-size: 12.96px; font-weight: 700; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;Course Overview&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;background: rgb(255, 255, 255); border: 0px; font-family: arial, verdana, helvetica, sans-serif; font-size: 12.96px; line-height: 15.552px; margin-bottom: 15px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;
Nginx is an open source HTTP and reverse proxy server, as well as a mail proxy server, load balancer, and HTTP cache. The nginx project started with a strong focus on high concurrency, high performance and low memory usage. It runs on Linux, BSD variants, Mac OS X, Solaris, AIX, HP-UX, as well as on other *nix flavors. It also has a proof of concept port for Microsoft Windows. According to Netcraft nginx served or proxied 17.65% busiest sites in March 2014.&lt;/div&gt;
&lt;div style=&quot;background: rgb(255, 255, 255); border: 0px; font-family: arial, verdana, helvetica, sans-serif; font-size: 12.96px; line-height: 15.552px; margin-bottom: 15px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;
This course will introduce you to the magic of nginx. You will learn to install and configure nginx for a variety of software platforms and how to integrate it with Apache.&lt;/div&gt;
&lt;div style=&quot;background: rgb(255, 255, 255); border: 0px; font-family: arial, verdana, helvetica, sans-serif; font-size: 12.96px; line-height: 15.552px; margin-bottom: 15px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;
Additionally, you will get involved with more advanced concepts like Load Balancing, SSL configuration and Websockets proxying.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://www.theserverside.com/discussions/thread.tss?thread_id=81682&quot; target=&quot;_blank&quot;&gt;More details&lt;/a&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://blog.knowhowlab.org/feeds/4193785192854312412/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.knowhowlab.org/2016/02/introduction-to-nginx-complete-tutorial.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3314286357054482328/posts/default/4193785192854312412'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3314286357054482328/posts/default/4193785192854312412'/><link rel='alternate' type='text/html' href='http://blog.knowhowlab.org/2016/02/introduction-to-nginx-complete-tutorial.html' title='Introduction to Nginx – Complete Tutorial'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/15456622107452083522</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3314286357054482328.post-2006745133773756355</id><published>2016-01-30T21:07:00.001+01:00</published><updated>2016-01-30T21:07:54.804+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="aws"/><title type='text'>Amazon Announces AWS Region in Canada</title><content type='html'>&lt;a href=&quot;http://www.infoq.com/news/2016/01/Amazon-Canada-Launch?utm_campaign=infoq_content&amp;amp;utm_source=infoq&amp;amp;utm_medium=feed&amp;amp;utm_term=global#.Vq0X4AI4VxI.blogger&quot;&gt;Amazon Announces AWS Region in Canada&lt;/a&gt;: Following the recent news about its South Korea region reaching general availability, Amazon has announced its plans to enter the Canadian market in 2016.</content><link rel='replies' type='application/atom+xml' href='http://blog.knowhowlab.org/feeds/2006745133773756355/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.knowhowlab.org/2016/01/amazon-announces-aws-region-in-canada.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3314286357054482328/posts/default/2006745133773756355'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3314286357054482328/posts/default/2006745133773756355'/><link rel='alternate' type='text/html' href='http://blog.knowhowlab.org/2016/01/amazon-announces-aws-region-in-canada.html' title='Amazon Announces AWS Region in Canada'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/15456622107452083522</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3314286357054482328.post-3662313475526948946</id><published>2016-01-21T19:46:00.002+01:00</published><updated>2016-01-21T19:46:47.416+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="keepass"/><category scheme="http://www.blogger.com/atom/ns#" term="maven"/><category scheme="http://www.blogger.com/atom/ns#" term="plugin"/><title type='text'>KeePass Maven plugin 0.3 released</title><content type='html'>&lt;br /&gt;
A new version of KeePass Maven plugin 0.3 is available in Maven repository.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;New Features:&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Group filters: name, name regex, path and UUID&lt;/li&gt;
&lt;li&gt;Entry filters: title, title regex and UUID&lt;/li&gt;
&lt;li&gt;Custom entry attributes&lt;/li&gt;
&lt;li&gt;Groups/Entries duplication handling&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;b&gt;Example:&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre style=&quot;background-color: #f7f7f7; border-radius: 3px; box-sizing: border-box; color: #333333; font-family: Consolas, &#39;Liberation Mono&#39;, Menlo, Courier, monospace; font-size: 13.6px; font-stretch: normal; line-height: 1.45; margin-bottom: 16px; overflow: auto; padding: 16px; word-wrap: normal;&quot;&gt;&lt;code style=&quot;background: transparent; border-radius: 3px; border: 0px; box-sizing: border-box; display: inline; font-family: Consolas, &#39;Liberation Mono&#39;, Menlo, Courier, monospace; font-size: 13.6px; line-height: inherit; margin: 0px; max-width: initial; overflow: initial; padding: 0px; word-break: normal; word-wrap: normal;&quot;&gt;            &amp;lt;plugin&amp;gt;
                &amp;lt;groupId&amp;gt;org.knowhowlab.maven.plugins&amp;lt;/groupId&amp;gt;
                &amp;lt;artifactId&amp;gt;keepass-maven-plugin&amp;lt;/artifactId&amp;gt;
                &amp;lt;version&amp;gt;0.3&amp;lt;/version&amp;gt;
                &amp;lt;configuration&amp;gt;
                    &amp;lt;file&amp;gt;${project.basedir}/src/main/keepass/test.kdbx&amp;lt;/file&amp;gt;
                    &amp;lt;password&amp;gt;admin123&amp;lt;/password&amp;gt;
                    &amp;lt;jceWorkaround&amp;gt;true&amp;lt;/jceWorkaround&amp;gt;
                &amp;lt;/configuration&amp;gt;
                &amp;lt;executions&amp;gt;
                    &amp;lt;execution&amp;gt;
                        &amp;lt;id&amp;gt;read-production&amp;lt;/id&amp;gt;
                        &amp;lt;goals&amp;gt;
                            &amp;lt;goal&amp;gt;read&amp;lt;/goal&amp;gt;
                        &amp;lt;/goals&amp;gt;
                        &amp;lt;configuration&amp;gt;
                            &amp;lt;records&amp;gt;
                                &amp;lt;record&amp;gt;
                                    &amp;lt;prefix&amp;gt;nexus.test0.&amp;lt;/prefix&amp;gt;
                                    &amp;lt;entry&amp;gt;Nexus OSS&amp;lt;/entry&amp;gt;
                                &amp;lt;/record&amp;gt;
                                &amp;lt;record&amp;gt;
                                    &amp;lt;prefix&amp;gt;nexus.test1.&amp;lt;/prefix&amp;gt;
                                    &amp;lt;entry&amp;gt;title:Nexus OSS&amp;lt;/entry&amp;gt;
                                &amp;lt;/record&amp;gt;
                                &amp;lt;record&amp;gt;
                                    &amp;lt;prefix&amp;gt;nexus.test2.&amp;lt;/prefix&amp;gt;
                                    &amp;lt;entry&amp;gt;regex:Nexus O[S]{2}&amp;lt;/entry&amp;gt;
                                &amp;lt;/record&amp;gt;
                                &amp;lt;record&amp;gt;
                                    &amp;lt;prefix&amp;gt;nexus.test3.&amp;lt;/prefix&amp;gt;
                                    &amp;lt;entry&amp;gt;uuid:5feb40d6feee29511f957ff791f1ec29&amp;lt;/entry&amp;gt;
                                &amp;lt;/record&amp;gt;
                                &amp;lt;record&amp;gt;
                                    &amp;lt;prefix&amp;gt;nexus.test4.&amp;lt;/prefix&amp;gt;
                                    &amp;lt;entry&amp;gt;uuid:5feb40d6-feee-2951-1f95-7ff791f1ec29&amp;lt;/entry&amp;gt;
                                &amp;lt;/record&amp;gt;

                                &amp;lt;record&amp;gt;
                                    &amp;lt;prefix&amp;gt;http.test0.&amp;lt;/prefix&amp;gt;
                                    &amp;lt;group&amp;gt;production&amp;lt;/group&amp;gt;
                                    &amp;lt;entry&amp;gt;title:HTTP Server&amp;lt;/entry&amp;gt;
                                &amp;lt;/record&amp;gt;
                                &amp;lt;record&amp;gt;
                                    &amp;lt;prefix&amp;gt;http.test1.&amp;lt;/prefix&amp;gt;
                                    &amp;lt;group&amp;gt;name:production&amp;lt;/group&amp;gt;
                                    &amp;lt;entry&amp;gt;title:HTTP Server&amp;lt;/entry&amp;gt;
                                &amp;lt;/record&amp;gt;
                                &amp;lt;record&amp;gt;
                                    &amp;lt;prefix&amp;gt;http.test2.&amp;lt;/prefix&amp;gt;
                                    &amp;lt;group&amp;gt;regex:pro.*tion&amp;lt;/group&amp;gt;
                                    &amp;lt;entry&amp;gt;title:HTTP Server&amp;lt;/entry&amp;gt;
                                &amp;lt;/record&amp;gt;
                                &amp;lt;record&amp;gt;
                                    &amp;lt;prefix&amp;gt;http.test3.&amp;lt;/prefix&amp;gt;
                                    &amp;lt;group&amp;gt;path:/Root/production&amp;lt;/group&amp;gt;
                                    &amp;lt;entry&amp;gt;title:HTTP Server&amp;lt;/entry&amp;gt;
                                &amp;lt;/record&amp;gt;
                                &amp;lt;record&amp;gt;
                                    &amp;lt;prefix&amp;gt;http.test4.&amp;lt;/prefix&amp;gt;
                                    &amp;lt;group&amp;gt;uuid:6f14aa86e77ad58b4e4b4f997f888a34&amp;lt;/group&amp;gt;
                                    &amp;lt;entry&amp;gt;title:HTTP Server&amp;lt;/entry&amp;gt;
                                &amp;lt;/record&amp;gt;
                                &amp;lt;record&amp;gt;
                                    &amp;lt;prefix&amp;gt;http.test5.&amp;lt;/prefix&amp;gt;
                                    &amp;lt;group&amp;gt;uuid:6f14aa86-e77a-d58b-4e4b-4f997f888a34&amp;lt;/group&amp;gt;
                                    &amp;lt;entry&amp;gt;title:HTTP Server&amp;lt;/entry&amp;gt;
                                &amp;lt;/record&amp;gt;

                                &amp;lt;record&amp;gt;
                                    &amp;lt;prefix&amp;gt;ssh.test0.&amp;lt;/prefix&amp;gt;
                                    &amp;lt;group&amp;gt;name:test&amp;lt;/group&amp;gt;
                                    &amp;lt;entry&amp;gt;title:SSH Server&amp;lt;/entry&amp;gt;
                                    &amp;lt;attributes&amp;gt;
                                        &amp;lt;attribute&amp;gt;
                                            &amp;lt;name&amp;gt;test_attr&amp;lt;/name&amp;gt;
                                        &amp;lt;/attribute&amp;gt;
                                        &amp;lt;attribute&amp;gt;
                                            &amp;lt;name&amp;gt;Manager URL&amp;lt;/name&amp;gt;
                                            &amp;lt;mapTo&amp;gt;manager.url&amp;lt;/mapTo&amp;gt;
                                        &amp;lt;/attribute&amp;gt;
                                    &amp;lt;/attributes&amp;gt;
                                &amp;lt;/record&amp;gt;
                            &amp;lt;/records&amp;gt;
                        &amp;lt;/configuration&amp;gt;
                    &amp;lt;/execution&amp;gt;
                &amp;lt;/executions&amp;gt;
            &amp;lt;/plugin&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;&lt;/div&gt;&lt;b&gt;References&lt;/b&gt;:&lt;br /&gt;
&lt;div&gt;&lt;ol&gt;&lt;li&gt;Sources:&amp;nbsp;&lt;a href=&quot;https://github.com/knowhowlab/keepass-maven-plugin&quot;&gt;GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Documentation:&amp;nbsp;&lt;a href=&quot;https://knowhowlab.gitbooks.io/keepass-maven-plugin/content/&quot;&gt;User Manual&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Tech documentation:&amp;nbsp;&lt;a href=&quot;http://knowhowlab.github.io/keepass-maven-plugin/&quot;&gt;Project reports&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Contact:&amp;nbsp;&lt;a href=&quot;https://groups.google.com/d/forum/keepass-maven-plugin&quot;&gt;Mailing list&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
Thank you for your attention. Your feedback is welcome as usual.&lt;br /&gt;
&lt;div&gt;Best Regards.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.knowhowlab.org/feeds/3662313475526948946/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.knowhowlab.org/2016/01/keepass-maven-plugin-03-released.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3314286357054482328/posts/default/3662313475526948946'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3314286357054482328/posts/default/3662313475526948946'/><link rel='alternate' type='text/html' href='http://blog.knowhowlab.org/2016/01/keepass-maven-plugin-03-released.html' title='KeePass Maven plugin 0.3 released'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/15456622107452083522</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3314286357054482328.post-991317909945749415</id><published>2015-10-24T12:55:00.001+02:00</published><updated>2015-10-24T12:55:56.415+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="maven plugin keepass deployment"/><title type='text'>KeePass Maven Plugin 0.2 released</title><content type='html'>&lt;br /&gt;
A version of KeePass Maven plugin 0.2 is available in Maven repository.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Features:&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;KeePass 2.x files&lt;/li&gt;
&lt;li&gt;Filter entries by Group and Title&lt;/li&gt;
&lt;li&gt;Publish Username, Password and URL from entry to maven properties with defined prefix&lt;/li&gt;
&lt;li&gt;JCE workaround property (Only for Java 7 and 8)&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;b&gt;Installation:&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;
&lt;pre style=&quot;background-color: #f7f7f7; border-radius: 3px; box-sizing: border-box; color: #333333; font-family: Consolas, &#39;Liberation Mono&#39;, Menlo, Courier, monospace; font-size: 13.6px; font-stretch: normal; line-height: 1.45; margin-bottom: 16px; overflow: auto; padding: 16px; word-wrap: normal;&quot;&gt;&lt;code style=&quot;background: transparent; border-radius: 3px; border: 0px; box-sizing: border-box; display: inline; font-family: Consolas, &#39;Liberation Mono&#39;, Menlo, Courier, monospace; font-size: 13.6px; line-height: inherit; margin: 0px; max-width: initial; overflow: initial; padding: 0px; word-break: normal; word-wrap: normal;&quot;&gt;&amp;lt;plugin&amp;gt;
    &amp;lt;groupId&amp;gt;org.knowhowlab.maven.plugins&amp;lt;/groupId&amp;gt;
    &amp;lt;artifactId&amp;gt;keepass-maven-plugin&amp;lt;/artifactId&amp;gt;
    &amp;lt;version&amp;gt;0.2&amp;lt;/version&amp;gt;
&amp;lt;/plugin&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;div&gt;&lt;b&gt;Usage:&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;Read &lt;b&gt;Username&lt;/b&gt;, &lt;b&gt;Password&lt;/b&gt; and &lt;b&gt;URL&lt;/b&gt; from &lt;b&gt;test.kdbx&lt;/b&gt; file, group name is &lt;b&gt;production&lt;/b&gt;, entry title is &lt;b&gt;HTTP Server&lt;/b&gt; and publish to Maven properties &lt;b&gt;http.usrname&lt;/b&gt;, &lt;b&gt;http.password&lt;/b&gt; and &lt;b&gt;http.url&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;&lt;pre style=&quot;background-color: #f7f7f7; border-radius: 3px; box-sizing: border-box; color: #333333; font-family: Consolas, &#39;Liberation Mono&#39;, Menlo, Courier, monospace; font-size: 13.6px; font-stretch: normal; line-height: 1.45; overflow: auto; padding: 16px; word-wrap: normal;&quot;&gt;&lt;code style=&quot;background: transparent; border-radius: 3px; border: 0px; box-sizing: border-box; display: inline; font-family: Consolas, &#39;Liberation Mono&#39;, Menlo, Courier, monospace; font-size: 13.6px; line-height: inherit; margin: 0px; max-width: initial; overflow: initial; padding: 0px; word-break: normal; word-wrap: normal;&quot;&gt;&amp;lt;plugin&amp;gt;
    &amp;lt;groupId&amp;gt;org.knowhowlab.maven.plugins&amp;lt;/groupId&amp;gt;
    &amp;lt;artifactId&amp;gt;keepass-maven-plugin&amp;lt;/artifactId&amp;gt;
    &amp;lt;version&amp;gt;0.2&amp;lt;/version&amp;gt;
    &amp;lt;configuration&amp;gt;
        &amp;lt;file&amp;gt;${project.basedir}/src/main/keepass/test.kdbx&amp;lt;/file&amp;gt;
        &amp;lt;password&amp;gt;admin123&amp;lt;/password&amp;gt;
        &amp;lt;jceWorkaround&amp;gt;true&amp;lt;/jceWorkaround&amp;gt;
    &amp;lt;/configuration&amp;gt;
    &amp;lt;executions&amp;gt;
        &amp;lt;execution&amp;gt;
            &amp;lt;id&amp;gt;read-production&amp;lt;/id&amp;gt;
            &amp;lt;phase&amp;gt;validate&amp;lt;/phase&amp;gt;
            &amp;lt;goals&amp;gt;
                &amp;lt;goal&amp;gt;read&amp;lt;/goal&amp;gt;
            &amp;lt;/goals&amp;gt;
            &amp;lt;configuration&amp;gt;
                &amp;lt;records&amp;gt;
                    &amp;lt;record&amp;gt;
                        &amp;lt;prefix&amp;gt;http.&amp;lt;/prefix&amp;gt;
                        &amp;lt;group&amp;gt;production&amp;lt;/group&amp;gt;
                        &amp;lt;title&amp;gt;HTTP Server&amp;lt;/title&amp;gt;
                    &amp;lt;/record&amp;gt;
                &amp;lt;/records&amp;gt;
            &amp;lt;/configuration&amp;gt;
        &amp;lt;/execution&amp;gt;
    &amp;lt;/executions&amp;gt;
&amp;lt;/plugin&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;For Java 7 and 8 JCE should be installed. To use workaround use property &lt;b&gt;&amp;lt;jceWorkaround&amp;gt;true&amp;lt;/jceWorkaround&amp;gt;&lt;/b&gt;&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;&lt;/div&gt;&lt;b&gt;References&lt;/b&gt;:&lt;br /&gt;
&lt;div&gt;&lt;ol&gt;&lt;li&gt;Sources:&amp;nbsp;&lt;a href=&quot;https://github.com/knowhowlab/keepass-maven-plugin&quot;&gt;GitHub&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
Thank you for your attention. Your feedback is welcome as usual.&lt;br /&gt;
&lt;div&gt;Best Regards.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.knowhowlab.org/feeds/991317909945749415/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.knowhowlab.org/2015/10/keepass-maven-plugin-02-released.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3314286357054482328/posts/default/991317909945749415'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3314286357054482328/posts/default/991317909945749415'/><link rel='alternate' type='text/html' href='http://blog.knowhowlab.org/2015/10/keepass-maven-plugin-02-released.html' title='KeePass Maven Plugin 0.2 released'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/15456622107452083522</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3314286357054482328.post-2662096929895998739</id><published>2015-10-21T19:41:00.001+02:00</published><updated>2015-10-21T19:41:30.856+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="equinox"/><category scheme="http://www.blogger.com/atom/ns#" term="felix"/><category scheme="http://www.blogger.com/atom/ns#" term="gogo"/><category scheme="http://www.blogger.com/atom/ns#" term="knopflerfish"/><category scheme="http://www.blogger.com/atom/ns#" term="maven"/><category scheme="http://www.blogger.com/atom/ns#" term="osgi"/><category scheme="http://www.blogger.com/atom/ns#" term="shell"/><title type='text'>OSGi Universal shell 1.3.0 released</title><content type='html'>There is a new 1.3.0 version of &lt;a href=&quot;https://github.com/knowhowlab/org.knowhowlab.osgi.shell&quot;&gt;OSGi universal shell adapters&lt;/a&gt; available. &lt;br /&gt;
&lt;br /&gt;
Changes:&lt;br /&gt;
&amp;nbsp; * moved to GitHub&lt;br /&gt;
&amp;nbsp; * Java 6&lt;br /&gt;
&amp;nbsp; * bug fixes for Equinox and Felix GoGo adapters&lt;br /&gt;
&amp;nbsp; * integration tests&lt;br /&gt;
&lt;br /&gt;
Command service registration with DS: &lt;br /&gt;
&lt;pre class=&quot;Xml&quot; name=&quot;code&quot;&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&amp;gt;
&amp;lt;component name=&quot;shell_test.component&quot;&amp;gt;
    &amp;lt;implementation class=&quot;...ShellTestService&quot;/&amp;gt;

    &amp;lt;service&amp;gt;
        &amp;lt;provide interface=&quot;...ShellTestService&quot;/&amp;gt;
    &amp;lt;/service&amp;gt;

    &amp;lt;property name=&quot;org.knowhowlab.osgi.shell.group.id&quot; type=&quot;String&quot; value=&quot;test_group_id&quot;/&amp;gt;
    &amp;lt;property name=&quot;org.knowhowlab.osgi.shell.group.name&quot; type=&quot;String&quot; value=&quot;Test commands&quot;/&amp;gt;
    &amp;lt;property name=&quot;org.knowhowlab.osgi.shell.commands&quot; type=&quot;String&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=&quot;Xml&quot; name=&quot;code&quot;&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.3.0&amp;lt;/version&amp;gt;
&amp;lt;/dependency&amp;gt;
&lt;/pre&gt;&lt;pre class=&quot;Xml&quot; name=&quot;code&quot;&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.3.0&amp;lt;/version&amp;gt;
&amp;lt;/dependency&amp;gt;
&lt;/pre&gt;&lt;pre class=&quot;Xml&quot; name=&quot;code&quot;&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.3.0&amp;lt;/version&amp;gt;
&amp;lt;/dependency&amp;gt;
&lt;/pre&gt;&lt;pre class=&quot;Xml&quot; name=&quot;code&quot;&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.3.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;
</content><link rel='replies' type='application/atom+xml' href='http://blog.knowhowlab.org/feeds/2662096929895998739/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.knowhowlab.org/2015/10/osgi-universal-shell-130-released.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3314286357054482328/posts/default/2662096929895998739'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3314286357054482328/posts/default/2662096929895998739'/><link rel='alternate' type='text/html' href='http://blog.knowhowlab.org/2015/10/osgi-universal-shell-130-released.html' title='OSGi Universal shell 1.3.0 released'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/15456622107452083522</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3314286357054482328.post-4424973406246815573</id><published>2015-10-19T21:07:00.000+02:00</published><updated>2015-10-19T21:16:44.114+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="maven plugin keepass deployment"/><title type='text'>KeePass Maven Plugin 0.1 released</title><content type='html'>&lt;br /&gt;
The first version of KeePass Maven plugin 0.1 is available in Maven repository.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Features:&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;KeePass 2.x files&lt;/li&gt;
&lt;li&gt;Filter entries by Group and Title&lt;/li&gt;
&lt;li&gt;Publish Username, Password and URL from entry to maven properties with defined prefix&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;b&gt;Installation:&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;
&lt;pre style=&quot;background-color: #f7f7f7; border-radius: 3px; box-sizing: border-box; color: #333333; font-family: Consolas, &#39;Liberation Mono&#39;, Menlo, Courier, monospace; font-size: 13.6px; font-stretch: normal; line-height: 1.45; margin-bottom: 16px; overflow: auto; padding: 16px; word-wrap: normal;&quot;&gt;&lt;code style=&quot;background: transparent; border-radius: 3px; border: 0px; box-sizing: border-box; display: inline; font-family: Consolas, &#39;Liberation Mono&#39;, Menlo, Courier, monospace; font-size: 13.6px; line-height: inherit; margin: 0px; max-width: initial; overflow: initial; padding: 0px; word-break: normal; word-wrap: normal;&quot;&gt;&amp;lt;plugin&amp;gt;
    &amp;lt;groupId&amp;gt;org.knowhowlab.maven.plugins&amp;lt;/groupId&amp;gt;
    &amp;lt;artifactId&amp;gt;keepass-maven-plugin&amp;lt;/artifactId&amp;gt;
    &amp;lt;version&amp;gt;0.1&amp;lt;/version&amp;gt;
&amp;lt;/plugin&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;div&gt;&lt;b&gt;Usage:&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;Read &lt;b&gt;Username&lt;/b&gt;, &lt;b&gt;Password&lt;/b&gt; and &lt;b&gt;URL&lt;/b&gt; from &lt;b&gt;test.kdbx&lt;/b&gt; file, group name is &lt;b&gt;production&lt;/b&gt;, entry title is &lt;b&gt;HTTP Server&lt;/b&gt; and publish to Maven properties &lt;b&gt;http.usrname&lt;/b&gt;, &lt;b&gt;http.password&lt;/b&gt; and &lt;b&gt;http.url&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;&lt;pre style=&quot;background-color: #f7f7f7; border-radius: 3px; box-sizing: border-box; color: #333333; font-family: Consolas, &#39;Liberation Mono&#39;, Menlo, Courier, monospace; font-size: 13.6px; font-stretch: normal; line-height: 1.45; overflow: auto; padding: 16px; word-wrap: normal;&quot;&gt;&lt;code style=&quot;background: transparent; border-radius: 3px; border: 0px; box-sizing: border-box; display: inline; font-family: Consolas, &#39;Liberation Mono&#39;, Menlo, Courier, monospace; font-size: 13.6px; line-height: inherit; margin: 0px; max-width: initial; overflow: initial; padding: 0px; word-break: normal; word-wrap: normal;&quot;&gt;&amp;lt;plugin&amp;gt;
    &amp;lt;groupId&amp;gt;org.knowhowlab.maven.plugins&amp;lt;/groupId&amp;gt;
    &amp;lt;artifactId&amp;gt;keepass-maven-plugin&amp;lt;/artifactId&amp;gt;
    &amp;lt;version&amp;gt;0.1&amp;lt;/version&amp;gt;
    &amp;lt;configuration&amp;gt;
        &amp;lt;file&amp;gt;${project.basedir}/src/main/keepass/test.kdbx&amp;lt;/file&amp;gt;
        &amp;lt;password&amp;gt;admin123&amp;lt;/password&amp;gt;
    &amp;lt;/configuration&amp;gt;
    &amp;lt;executions&amp;gt;
        &amp;lt;execution&amp;gt;
            &amp;lt;id&amp;gt;read-production&amp;lt;/id&amp;gt;
            &amp;lt;phase&amp;gt;validate&amp;lt;/phase&amp;gt;
            &amp;lt;goals&amp;gt;
                &amp;lt;goal&amp;gt;read&amp;lt;/goal&amp;gt;
            &amp;lt;/goals&amp;gt;
            &amp;lt;configuration&amp;gt;
                &amp;lt;records&amp;gt;
                    &amp;lt;record&amp;gt;
                        &amp;lt;prefix&amp;gt;http.&amp;lt;/prefix&amp;gt;
                        &amp;lt;group&amp;gt;production&amp;lt;/group&amp;gt;
                        &amp;lt;title&amp;gt;HTTP Server&amp;lt;/title&amp;gt;
                    &amp;lt;/record&amp;gt;
                &amp;lt;/records&amp;gt;
            &amp;lt;/configuration&amp;gt;
        &amp;lt;/execution&amp;gt;
    &amp;lt;/executions&amp;gt;
&amp;lt;/plugin&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;&lt;/div&gt;&lt;b&gt;References&lt;/b&gt;:&lt;br /&gt;
&lt;div&gt;&lt;ol&gt;&lt;li&gt;Sources:&amp;nbsp;&lt;a href=&quot;https://github.com/knowhowlab/keepass-maven-plugin&quot;&gt;GitHub&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
Thank you for your attention. Your feedback is welcome as usual.&lt;br /&gt;
&lt;div&gt;Best Regards.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.knowhowlab.org/feeds/4424973406246815573/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.knowhowlab.org/2015/10/keepass-maven-plugin-01-released.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3314286357054482328/posts/default/4424973406246815573'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3314286357054482328/posts/default/4424973406246815573'/><link rel='alternate' type='text/html' href='http://blog.knowhowlab.org/2015/10/keepass-maven-plugin-01-released.html' title='KeePass Maven Plugin 0.1 released'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/15456622107452083522</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3314286357054482328.post-4472201783855122723</id><published>2015-01-08T17:14:00.001+01:00</published><updated>2016-01-14T07:52:41.325+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="arquillian"/><category scheme="http://www.blogger.com/atom/ns#" term="assertions"/><category scheme="http://www.blogger.com/atom/ns#" term="integration"/><category scheme="http://www.blogger.com/atom/ns#" term="junit"/><category scheme="http://www.blogger.com/atom/ns#" term="osgi"/><category scheme="http://www.blogger.com/atom/ns#" term="pax exam"/><category scheme="http://www.blogger.com/atom/ns#" term="testing"/><category scheme="http://www.blogger.com/atom/ns#" term="utilities"/><title type='text'>OSGi Assertions and Utilities library 1.3.0 released</title><content type='html'>&lt;div&gt;A new version 1.3.0 of OSGi Assertions and Utilities library for integration tests is released.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;b&gt;Changes&lt;/b&gt;:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;no more dependencies to JUnit API. Based on Hamcrest now&lt;/li&gt;
&lt;li&gt;TestNG is supported now&lt;/li&gt;
&lt;li&gt;aggregate bundle is added to simplify tests confuguration&lt;/li&gt;
&lt;li&gt;PaxExam 3.x integration tests with JUnit and TestNG&lt;/li&gt;
&lt;li&gt;PaxExam 4.x integration tests with JUnit and TestNG&lt;/li&gt;
&lt;li&gt;Bug fixes and improvements&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;b&gt;References&lt;/b&gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Sources: &lt;a href=&quot;https://github.com/dpishchukhin/org.knowhowlab.osgi.testing&quot;&gt;GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Mailing List: &lt;a href=&quot;http://groups.google.com/group/knowhowlab-osgi-testing&quot;&gt;knowhowlab-osgi-testing&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;br /&gt;
&lt;br /&gt;
Thank you for your attention. Your feedback is welcome as usual.&lt;br /&gt;
Best Regards.&lt;br /&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.knowhowlab.org/feeds/4472201783855122723/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.knowhowlab.org/2015/01/osgi-assertions-and-utilities-library.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3314286357054482328/posts/default/4472201783855122723'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3314286357054482328/posts/default/4472201783855122723'/><link rel='alternate' type='text/html' href='http://blog.knowhowlab.org/2015/01/osgi-assertions-and-utilities-library.html' title='OSGi Assertions and Utilities library 1.3.0 released'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/15456622107452083522</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3314286357054482328.post-2347578286004236265</id><published>2013-03-20T19:04:00.001+01:00</published><updated>2016-01-14T07:52:33.735+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="arquillian"/><category scheme="http://www.blogger.com/atom/ns#" term="assertions"/><category scheme="http://www.blogger.com/atom/ns#" term="integration"/><category scheme="http://www.blogger.com/atom/ns#" term="junit"/><category scheme="http://www.blogger.com/atom/ns#" term="osgi"/><category scheme="http://www.blogger.com/atom/ns#" term="pax exam"/><category scheme="http://www.blogger.com/atom/ns#" term="testing"/><category scheme="http://www.blogger.com/atom/ns#" term="utilities"/><title type='text'>OSGi Assertions and Utilities library 1.2.0 released</title><content type='html'>&lt;div&gt;A new version 1.2.0 of OSGi Assertions and Utilities library for integration tests is released.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;b&gt;Changes&lt;/b&gt;:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;EventAdmin-specific utilities and assertions&lt;/li&gt;
&lt;pre class=&quot;Java&quot; name=&quot;code&quot;&gt;@Test
public void test_Post_Event() {
    postEvent(getBundleContext(), KNOWHOWLAB_TOPICS_TEST, 200);

    assertEvent(KNOWHOWLAB_TOPICS_TEST, 500, TimeUnit.MILLISECONDS);
}

@Test
public void test_Post_Event_With_Filters() throws InvalidSyntaxException {
    Map&lt;String, String&gt; props = new HashMap&lt;String, String&gt;();
    props.put(&quot;prop_key&quot;, &quot;val123&quot;);

    postEvent(getBundleContext(), KNOWHOWLAB_TOPICS_TEST, props, 200);
    assertEvent(KNOWHOWLAB_TOPICS_TEST, FilterUtils.eq(&quot;prop_key&quot;, &quot;val123&quot;), 500, TimeUnit.MILLISECONDS);

    postEvent(getBundleContext(), KNOWHOWLAB_TOPICS_TEST, props, 200);
    try {
        assertEvent(KNOWHOWLAB_TOPICS_TEST, FilterUtils.eq(&quot;prop_key&quot;, &quot;val555&quot;), 500, TimeUnit.MILLISECONDS);
    } catch (AssertionError e) {
    }
}
&lt;/pre&gt;&lt;li&gt;ConfigurationAdmin-specific utilities and assertions&lt;/li&gt;
&lt;pre class=&quot;Java&quot; name=&quot;code&quot;&gt;@Test
public void test_Configuration_manipulations() {
    assertConfigurationUnavailable(&quot;test.pid&quot;, null, null);

    Map&lt;String, String&gt; config = new HashMap&lt;String, String&gt;();
    config.put(&quot;test.key&quot;, &quot;test.value&quot;);
    supplyConfiguration(getBundleContext(), &quot;test.pid&quot;, null, config, 0);

    assertConfigurationUpdated(&quot;test.pid&quot;, null, null, 500, TimeUnit.MILLISECONDS);

    assertConfigurationAvailable(&quot;test.pid&quot;, null, null);

    deleteConfiguration(getBundleContext(), &quot;test.pid&quot;, null, 0);

    assertConfigurationDeleted(&quot;test.pid&quot;, null, null, 500, TimeUnit.MILLISECONDS);

    assertConfigurationUnavailable(&quot;test.pid&quot;, null, null);
}
&lt;/pre&gt;&lt;li&gt;PaxExam 3.0.x integration tests&lt;/li&gt;
&lt;li&gt;Bug fixes and improvements&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;b&gt;References&lt;/b&gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Sources: &lt;a href=&quot;https://github.com/dpishchukhin/org.knowhowlab.osgi.testing&quot;&gt;GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Mailing List: &lt;a href=&quot;http://groups.google.com/group/knowhowlab-osgi-testing&quot;&gt;knowhowlab-osgi-testing&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;br /&gt;
&lt;br /&gt;
Thank you for your attention. Your feedback is welcome as usual.&lt;br /&gt;
Best Regards.&lt;br /&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.knowhowlab.org/feeds/2347578286004236265/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.knowhowlab.org/2013/03/osgi-assertions-and-utilities-library.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3314286357054482328/posts/default/2347578286004236265'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3314286357054482328/posts/default/2347578286004236265'/><link rel='alternate' type='text/html' href='http://blog.knowhowlab.org/2013/03/osgi-assertions-and-utilities-library.html' title='OSGi Assertions and Utilities library 1.2.0 released'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/15456622107452083522</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3314286357054482328.post-6061119049813122833</id><published>2013-03-16T17:13:00.000+01:00</published><updated>2016-01-14T07:52:21.446+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="assertions"/><category scheme="http://www.blogger.com/atom/ns#" term="bndtools"/><category scheme="http://www.blogger.com/atom/ns#" term="felix"/><category scheme="http://www.blogger.com/atom/ns#" term="junit"/><category scheme="http://www.blogger.com/atom/ns#" term="osgi"/><title type='text'>OSGi integration tests with Bndtools and OSGi assertions library</title><content type='html'>&lt;h3&gt;Table of Contents&lt;/h3&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;&lt;a href=&quot;#introduction&quot;&gt;Introduction&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#createproject&quot;&gt;Create an Integration Test project&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#installartifacts&quot;&gt;Installing external artifacts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#adddependencies&quot;&gt;Add build dependencies&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#writetests&quot;&gt;Write integration tests&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#executetests&quot;&gt;Execute integration tests&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;br /&gt;
&lt;h3 id=&quot;introduction&quot;&gt;1. Introduction&lt;/h3&gt;&lt;br /&gt;
This tutorial shows you how to create OSGi integration tests with &lt;a href=&quot;http://bndtools.org/&quot;&gt;Bndtools&lt;/a&gt; and &lt;a href=&quot;https://github.com/dpishchukhin/org.knowhowlab.osgi.testing&quot;&gt;OSGi Assertions library&lt;/a&gt;. The tutorial is a continuation of the original &lt;a href=&quot;http://bndtools.org/tutorial.html&quot;&gt;Bndtools Tutorial&lt;/a&gt;. &lt;br /&gt;
&lt;br /&gt;
&lt;h3 id=&quot;createproject&quot;&gt;2. Create an Integration Test project&lt;/h3&gt;&lt;br /&gt;
Before start with Integration tests project please check that you finished &lt;a href=&quot;http://bndtools.org/tutorial.html&quot;&gt;Bndtools Tutorial&lt;/a&gt; and projects &lt;b&gt;org.example.api&lt;/b&gt; and &lt;b&gt;org.example.impls&lt;/b&gt; are created.&lt;br /&gt;
&lt;br /&gt;
1. From the File menu, select &lt;b&gt;New-&gt;Bndtools OSGi Project&lt;/b&gt;. &lt;br /&gt;
2. Name project &lt;b&gt;org.example.it&lt;/b&gt;&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifiFDBcUFs9agTsvYQbcpAvuzxFojiq_MVWBglXMH40922QkE_bjzIYKx3DMLid91XbZt2QneWDSDk4mj77pd0LoeuN52YwAlzkXlW6YYcv19hMQcezMZd6msOTA8jtn2OnOmqQyNmjr28/s1600/create_project.jpg&quot; imageanchor=&quot;1&quot; &gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifiFDBcUFs9agTsvYQbcpAvuzxFojiq_MVWBglXMH40922QkE_bjzIYKx3DMLid91XbZt2QneWDSDk4mj77pd0LoeuN52YwAlzkXlW6YYcv19hMQcezMZd6msOTA8jtn2OnOmqQyNmjr28/s320/create_project.jpg&quot; /&gt;&lt;/a&gt; &lt;br /&gt;
3. Select &quot;Integration Testing&quot; project template&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCRMhZZ9HIKg3XSjdJP0ZOk3pw5lgzmhBzYJw97iJm0FXhgDEs3yFe1DcCB3Q65pALwJdPL1Z_CAUuomleFV1I60mDMT_GNjs4GM6dBD0oXFbvyIblqZFCFdsRBSdIuaK7rov0FT2-otVL/s1600/project_template.jpg&quot; imageanchor=&quot;1&quot; &gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCRMhZZ9HIKg3XSjdJP0ZOk3pw5lgzmhBzYJw97iJm0FXhgDEs3yFe1DcCB3Q65pALwJdPL1Z_CAUuomleFV1I60mDMT_GNjs4GM6dBD0oXFbvyIblqZFCFdsRBSdIuaK7rov0FT2-otVL/s320/project_template.jpg&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
4. Edit &lt;b&gt;org.example.tests.ExampleTest&lt;/b&gt; class to assert BundleContext&lt;br /&gt;
&lt;pre class=&quot;Java&quot; name=&quot;code&quot;&gt;package org.example.tests;

import junit.framework.TestCase;

import org.osgi.framework.BundleContext;
import org.osgi.framework.FrameworkUtil;

public class ExampleTest extends TestCase {

    private final BundleContext context = FrameworkUtil.getBundle(this.getClass()).getBundleContext();

    public void testExample() throws Exception {
        assertNotNull(context);
    }
}
&lt;/pre&gt;5. Right-click on &lt;b&gt;org.example.it&lt;/b&gt; project. &lt;b&gt;Run As-&gt;Bnd OSGi Test Launcher (JUnit)&lt;/b&gt;&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAYDpxHKzHYmAij6aucO5MKRMT3AMUUiVrHskoa-omS3RcqtnzNPlxHF4hHrqu_ow3ND2jbDuXid6ai7IxcUn43A3y6yMvdalGu-uKiG6HM-vOEj8IbeXjhvHme_z-oipvmbaZe86A33wv/s1600/run_test1.jpg&quot; imageanchor=&quot;1&quot; &gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAYDpxHKzHYmAij6aucO5MKRMT3AMUUiVrHskoa-omS3RcqtnzNPlxHF4hHrqu_ow3ND2jbDuXid6ai7IxcUn43A3y6yMvdalGu-uKiG6HM-vOEj8IbeXjhvHme_z-oipvmbaZe86A33wv/s320/run_test1.jpg&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h3 id=&quot;installartifacts&quot;&gt;3. Installing external artifacts&lt;/h3&gt;&lt;br /&gt;
Now we have to install &lt;a href=&quot;https://github.com/dpishchukhin/org.knowhowlab.osgi.testing&quot;&gt;OSGi Assertions library&lt;/a&gt; and dependencies into local repository.&lt;br /&gt;
1. Select &lt;b&gt;Local&lt;/b&gt; Repository from the list and click &lt;b&gt;Add Bundles to Repository&lt;/b&gt;&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2RmtSQA2WpxXGVfuJqBWiD7sYAUK2ETNjvmH1udkisyWPEDnBJ8DY7SZsN4J1M4tK58IuLl75ZkwQZLdB5k2k1WCiZm0UXmLOlZupIv1FlgaTeT9KELFSixbxzLff4CxU3I8spnuvMdnm/s1600/add_bundles.jpg&quot; imageanchor=&quot;1&quot; &gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2RmtSQA2WpxXGVfuJqBWiD7sYAUK2ETNjvmH1udkisyWPEDnBJ8DY7SZsN4J1M4tK58IuLl75ZkwQZLdB5k2k1WCiZm0UXmLOlZupIv1FlgaTeT9KELFSixbxzLff4CxU3I8spnuvMdnm/s320/add_bundles.jpg&quot; /&gt;&lt;/a&gt;  &lt;br /&gt;
2. Click &lt;b&gt;Add Exernal JARs...&lt;/b&gt; and copy-paste links to artifacts:&lt;br /&gt;
- &lt;a href=&quot;http://repo1.maven.org/maven2/org/apache/servicemix/bundles/org.apache.servicemix.bundles.junit/4.9_2/org.apache.servicemix.bundles.junit-4.9_2.jar&quot;&gt;org.apache.servicemix.bundles.junit-4.9_2.jar&lt;/a&gt;&lt;br /&gt;
- &lt;a href=&quot;http://repo1.maven.org/maven2/org/knowhowlab/osgi/org.knowhowlab.osgi.testing.utils/1.1.0/org.knowhowlab.osgi.testing.utils-1.1.0.jar&quot;&gt;org.knowhowlab.osgi.testing.utils-1.1.0.jar&lt;/a&gt;&lt;br /&gt;
- &lt;a href=&quot;http://repo1.maven.org/maven2/org/knowhowlab/osgi/org.knowhowlab.osgi.testing.assertions/1.1.0/org.knowhowlab.osgi.testing.assertions-1.1.0.jar&quot;&gt;org.knowhowlab.osgi.testing.assertions-1.1.0.jar&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLZfM9MkLYfHzU5Ei_U7gXj4b8a9Dd9yAy5XYuvCvdD024XUjsifKCg4-t66vu3GxIFpWiHKTsEWOq9nteAr7vtmNVLwHLIu62OyB1XEjNT9kBVfuf31TIHP8h9OpB4g_9hyphenhyphencHut6uhq6g/s1600/add_artifacts.jpg&quot; imageanchor=&quot;1&quot; &gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLZfM9MkLYfHzU5Ei_U7gXj4b8a9Dd9yAy5XYuvCvdD024XUjsifKCg4-t66vu3GxIFpWiHKTsEWOq9nteAr7vtmNVLwHLIu62OyB1XEjNT9kBVfuf31TIHP8h9OpB4g_9hyphenhyphencHut6uhq6g/s320/add_artifacts.jpg&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h3 id=&quot;adddependencies&quot;&gt;4. Add build dependencies&lt;/h3&gt;&lt;br /&gt;
Open &lt;b&gt;org.example.test&lt;/b&gt; Build tab and add dependencies:&lt;br /&gt;
- org.example.api&lt;br /&gt;
- org.knowhowlab.osgi.testing.utils&lt;br /&gt;
- org.knowhowlab.osgi.testing.assertions&lt;br /&gt;
- replace junit.osgi with org.apache.servicemix.bundles.junit (to support JUnit 4.x)&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhf4hA_7pFepzI1F-ILahyphenhyphen8D_eH4DODaULg71Y2C34GiTZpjaYEmEVpD47yYBK-QymggdN7v33Nm70x_Ay21dML81FBAE5KO67Y9LkIfEArlLxXBOJXxQh-KkSCtnnciDqbkXQEt7IOAGGP/s1600/build_deps.jpg&quot; imageanchor=&quot;1&quot; &gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhf4hA_7pFepzI1F-ILahyphenhyphen8D_eH4DODaULg71Y2C34GiTZpjaYEmEVpD47yYBK-QymggdN7v33Nm70x_Ay21dML81FBAE5KO67Y9LkIfEArlLxXBOJXxQh-KkSCtnnciDqbkXQEt7IOAGGP/s320/build_deps.jpg&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;h3 id=&quot;writetests&quot;&gt;5. Write integration tests&lt;/h3&gt;&lt;br /&gt;
Extend ExampleTest with JUnit 4 tests and OSGi Assertions&lt;br /&gt;
&lt;pre class=&quot;Java&quot; name=&quot;code&quot;&gt;package org.example.tests;

import java.util.concurrent.TimeUnit;

import org.example.api.Greeting;
import org.junit.Test;
import org.osgi.framework.Bundle;

import static org.knowhowlab.osgi.testing.assertions.ServiceAssert.*;
import static org.knowhowlab.osgi.testing.assertions.BundleAssert.*;
import static org.knowhowlab.osgi.testing.utils.BundleUtils.*;

public class ExampleTest {

 @Test
    public void testGreetingService() throws Exception {
        assertServiceAvailable(Greeting.class);
    }

 @Test
    public void testGreetingProvider() throws Exception {
        assertBundleState(Bundle.ACTIVE, &quot;org.example.impls.provider&quot;);
        
        assertServiceAvailable(Greeting.class);
        
        findBundle(getBundleContext(), &quot;org.example.impls.provider&quot;).stop();

        assertServiceUnavailable(Greeting.class, 1, TimeUnit.SECONDS);
    }
}
&lt;/pre&gt;&lt;br /&gt;
&lt;h3 id=&quot;executetests&quot;&gt;6. Execute integration tests&lt;/h3&gt;&lt;br /&gt;
1. Update &lt;b&gt;Run Requirements&lt;/b&gt;&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjuSuBfAu1544cMDwADbfqXucg5XPEeBZ0_ADXWewEgSbOa8CX0q9WP8GaGZcy8TsfjSskAJRGLvYa6Brn86-jyH0b9o9Rt8z1KIzqr-S6mC-O07r29EWN8h9H7fwIlS21qfV0vmbiSDY5x/s1600/run_requirements.jpg&quot; imageanchor=&quot;1&quot; &gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjuSuBfAu1544cMDwADbfqXucg5XPEeBZ0_ADXWewEgSbOa8CX0q9WP8GaGZcy8TsfjSskAJRGLvYa6Brn86-jyH0b9o9Rt8z1KIzqr-S6mC-O07r29EWN8h9H7fwIlS21qfV0vmbiSDY5x/s320/run_requirements.jpg&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
2. Update &lt;b&gt;Source&lt;/b&gt; tab and define manually test case class&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxlWkzIYZCOcHgre7gnUz8D1KPdWdYAwNGjvCZhueVi-zTKs-7Djl2wzzpGJSgoZGYbfN3LLIWpqq5yw6YaAqGUd6NAse_kD3Tvz88a4BBeB32waXrDT_cFI3vaUlfXXbasDMUCa2kF4Um/s1600/test_case.jpg&quot; imageanchor=&quot;1&quot; &gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxlWkzIYZCOcHgre7gnUz8D1KPdWdYAwNGjvCZhueVi-zTKs-7Djl2wzzpGJSgoZGYbfN3LLIWpqq5yw6YaAqGUd6NAse_kD3Tvz88a4BBeB32waXrDT_cFI3vaUlfXXbasDMUCa2kF4Um/s320/test_case.jpg&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
3. Right-click on &lt;b&gt;org.example.it&lt;/b&gt; project. &lt;b&gt;Run As-&gt;Bnd OSGi Test Launcher (JUnit)&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.knowhowlab.org/feeds/6061119049813122833/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.knowhowlab.org/2013/03/osgi-integration-tests-with-bndtools.html#comment-form' title='13 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3314286357054482328/posts/default/6061119049813122833'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3314286357054482328/posts/default/6061119049813122833'/><link rel='alternate' type='text/html' href='http://blog.knowhowlab.org/2013/03/osgi-integration-tests-with-bndtools.html' title='OSGi integration tests with Bndtools and OSGi assertions library'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/15456622107452083522</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifiFDBcUFs9agTsvYQbcpAvuzxFojiq_MVWBglXMH40922QkE_bjzIYKx3DMLid91XbZt2QneWDSDk4mj77pd0LoeuN52YwAlzkXlW6YYcv19hMQcezMZd6msOTA8jtn2OnOmqQyNmjr28/s72-c/create_project.jpg" height="72" width="72"/><thr:total>13</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3314286357054482328.post-1411956861367386392</id><published>2012-12-17T07:53:00.002+01:00</published><updated>2016-01-14T07:52:03.522+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="arquillian"/><category scheme="http://www.blogger.com/atom/ns#" term="assertions"/><category scheme="http://www.blogger.com/atom/ns#" term="integration"/><category scheme="http://www.blogger.com/atom/ns#" term="junit"/><category scheme="http://www.blogger.com/atom/ns#" term="osgi"/><category scheme="http://www.blogger.com/atom/ns#" term="pax exam"/><category scheme="http://www.blogger.com/atom/ns#" term="testing"/><category scheme="http://www.blogger.com/atom/ns#" term="utilities"/><title type='text'>OSGi Assertions and Utilities library 1.1.0 released</title><content type='html'>Hello,&lt;br /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;I&#39;ve released a new version 1.1.0 of OSGi Assertions and Utilities library for integration tests.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;b&gt;Changes&lt;/b&gt;:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Asynchronously change Bundle state (install, start, stop, update, uninstall) with and without delays&lt;/li&gt;
&lt;pre class=&quot;Java&quot; name=&quot;code&quot;&gt;@Test
    public void test_Start_Bundle_Async() {
        // bundle stopped
        assertBundleState(Bundle.RESOLVED | Bundle.INSTALLED,
                          &quot;org.knowhowlab.osgi.testing.it.test.bundle&quot;, 
                          1L, TimeUnit.MILLISECONDS);
        // start bundle in 2 sec
        startBundleAsync(getBundleContext(),  
                         &quot;org.knowhowlab.osgi.testing.it.test.bundle&quot;, 
                         2, TimeUnit.SECONDS);
        // bundle is still stopped
        assertBundleState(Bundle.RESOLVED | Bundle.INSTALLED,
                          &quot;org.knowhowlab.osgi.testing.it.test.bundle&quot;, 
                          1L, TimeUnit.MILLISECONDS);
        // bundle is active after 5 sec
        assertBundleState(Bundle.ACTIVE,
                          &quot;org.knowhowlab.osgi.testing.it.test.bundle&quot;, 
                          5, TimeUnit.SECONDS);
    }
&lt;/pre&gt;&lt;li&gt;Asynchronously change Service state (register, update, unregister) with and without delays&lt;/li&gt;
&lt;pre class=&quot;Java&quot; name=&quot;code&quot;&gt;@Test
    public void test_RegisterService_Async() {
        // service unregistered
        assertServiceUnavailable(TestService.class);
        // register service in 2 sec
        registerServiceAsync(getBundleContext(), TestService.class, 
                             new TestService(), null, 2, TimeUnit.SECONDS);
        // service still unregistered
        assertServiceUnavailable(TestService.class);
        // service registered
        assertServiceAvailable(TestService.class, 5, TimeUnit.SECONDS);
    }
&lt;/pre&gt;&lt;li&gt;Handle BundleEvents&lt;/li&gt;
&lt;pre class=&quot;Java&quot; name=&quot;code&quot;&gt;@Test
    public void test_Bundle_Event() {
        // start bundle in 2 sec
        startBundleAsync(getBundleContext(), 
                         &quot;org.knowhowlab.osgi.testing.it.test.bundle&quot;, 
                         2, TimeUnit.SECONDS);
        // expect bundle event within 5 sec
        assertBundleEvent(BundleEvent.STARTED,
                          &quot;org.knowhowlab.osgi.testing.it.test.bundle&quot;, 
                          5, TimeUnit.SECONDS);
    }
&lt;/pre&gt;&lt;li&gt;Handle ServiceEvents&lt;/li&gt;
&lt;pre class=&quot;Java&quot; name=&quot;code&quot;&gt;@Test
    public void test_Service_Event() {
        // register service in 2 sec
        registerServiceAsync(getBundleContext(), TestService.class, 
                             new TestService(), null, 2, TimeUnit.SECONDS);
        // service registered within 5 sec
        assertServiceEvent(ServiceEvent.REGISTERED, TestService.class, 
                           5, TimeUnit.SECONDS);
    }
&lt;/pre&gt;&lt;li&gt;Handle FrameworkEvents&lt;/li&gt;
&lt;pre class=&quot;Java&quot; name=&quot;code&quot;&gt;@Test
    public void test_Framework_Event() {
        // change start level
        Executors.newSingleThreadScheduledExecutor()
                   .schedule(new Runnable() {
                             public void run() {
                                  StartLevel startLevel = 
                                  ServiceUtils.getService(getBundleContext(),
                                                          StartLevel.class);
                                  startLevel.setStartLevel(10);
                                               }
                                            }, 2, TimeUnit.SECONDS);

        // start level changed within 5 sec
        assertFrameworkEvent(FrameworkEvent.STARTLEVEL_CHANGED, 
                             0, 5, TimeUnit.SECONDS);
    }
&lt;/pre&gt;&lt;/ul&gt;&lt;br /&gt;
&lt;b&gt;References&lt;/b&gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Sources: &lt;a href=&quot;https://github.com/dpishchukhin/org.knowhowlab.osgi.testing&quot;&gt;GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Mailing List: &lt;a href=&quot;http://groups.google.com/group/knowhowlab-osgi-testing&quot;&gt;knowhowlab-osgi-testing&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;br /&gt;
&lt;br /&gt;
Thank you for your attention. Your feedback is welcome as usual.&lt;br /&gt;
Best Regards.&lt;br /&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.knowhowlab.org/feeds/1411956861367386392/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.knowhowlab.org/2012/12/osgi-assertions-and-utilities-library.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3314286357054482328/posts/default/1411956861367386392'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3314286357054482328/posts/default/1411956861367386392'/><link rel='alternate' type='text/html' href='http://blog.knowhowlab.org/2012/12/osgi-assertions-and-utilities-library.html' title='OSGi Assertions and Utilities library 1.1.0 released'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/15456622107452083522</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3314286357054482328.post-1403644115012104250</id><published>2012-11-04T16:22:00.000+01:00</published><updated>2016-01-14T07:51:50.294+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="integration"/><category scheme="http://www.blogger.com/atom/ns#" term="junit"/><category scheme="http://www.blogger.com/atom/ns#" term="osgi"/><category scheme="http://www.blogger.com/atom/ns#" term="pax exam"/><category scheme="http://www.blogger.com/atom/ns#" term="testing"/><title type='text'>OSGi Testing: make your integration/functional tests clearer. A sample with PaxExam</title><content type='html'>Hello,&lt;br /&gt;
&lt;br /&gt;
two years ago I&#39;ve posted about &lt;a href=&quot;http://blog.knowhowlab.org/2010/06/osgi-testing-osgi-assertions-and-utils.html&quot;&gt;small library&lt;/a&gt; that I used for my OSGi integration tests. During the last tree weeks I made some changes in it:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Sources were moved to &lt;a href=&quot;https://github.com/dpishchukhin/org.knowhowlab.osgi.testing&quot;&gt;GitHub&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Maven groupId and artifactId were changed&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Initialization process of OSGi assertions was simplified and does not require BundleContext&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;New utility and assertion methods for Bundles were added.&lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;h4&gt;What is the difference?&lt;/h4&gt;You can compare two test methods that test the same functionality.&lt;br /&gt;
&lt;pre class=&quot;Java&quot; name=&quot;code&quot;&gt;/**
     * Test bundle and service without OSGi assertions/utils
     *
     * @throws org.osgi.framework.BundleException
     *                              bundle start/stop problems
     * @throws org.osgi.framework.InvalidSyntaxException
     *                              filter creation problems
     * @throws InterruptedException wait exception
     */
    @Test
    public void test_Without_OSGiAssertions() throws BundleException, InterruptedException, InvalidSyntaxException {
        ServiceTracker packageAdminTracker = new ServiceTracker(getBundleContext(), PackageAdmin.class.getName(), null);
        packageAdminTracker.open();
        PackageAdmin packageAdmin = (PackageAdmin) packageAdminTracker.getService();
        assertNotNull(packageAdmin);
        packageAdminTracker.close();
        Bundle[] bundles = packageAdmin.getBundles(&quot;org.knowhowlab.osgi.testing.it.test.bundle&quot;, null);
        // asserts that test bundle is installed
        assertNotNull(bundles);
        // gets bundle instance
        Bundle bundle = bundles[0];
        // asserts that test bundle is resolved
        assertTrue(bundle.getState() == Bundle.INSTALLED || bundle.getState() == Bundle.RESOLVED);
        ServiceTracker serviceTracker1 = new ServiceTracker(getBundleContext(), &quot;org.knowhowlab.osgi.testing.it.testbundle.service.Echo&quot;, null);
        serviceTracker1.open();
        assertEquals(0, serviceTracker1.size());
        // start bundle
        bundle.start();
        // asserts that test bundle is active
        assertEquals(Bundle.ACTIVE, bundle.getState());
        // asserts that test service is available within 2 seconds
        assertNotNull(serviceTracker1.waitForService(2000));
        // asserts that test service with custom properties is available
        ServiceTracker serviceTracker2 = new ServiceTracker(getBundleContext(), FrameworkUtil.createFilter(
                &quot;(&amp;(&quot; + Constants.OBJECTCLASS + &quot;=org.knowhowlab.osgi.testing.it.testbundle.service.Echo)&quot; +
                        &quot;(testkey=testvalue))&quot;), null);
        serviceTracker2.open();
        assertTrue(serviceTracker2.size() &gt; 0);
        // gets service by class and filter
        Echo echo = (Echo) serviceTracker2.getService();
        // asserts service method call
        assertEquals(&quot;test&quot;, echo.echo(&quot;test&quot;));
        // stops bundle
        bundle.stop();
        // asserts that test bundle is resolved
        assertEquals(Bundle.RESOLVED, bundle.getState());
        // asserts that test service is unregistered
        assertEquals(0, serviceTracker1.size());
    }

    /**
     * The same Test bundle and service with OSGi assertions/utils
     *
     * @throws org.osgi.framework.BundleException
     *          bundle start/stop problems
     * @throws org.osgi.framework.InvalidSyntaxException
     *          filter creation problems
     */
    @Test
    public void test_With_OSGiAssertions() throws BundleException, InvalidSyntaxException {
        // asserts that test bundle is installed
        assertBundleAvailable(&quot;org.knowhowlab.osgi.testing.it.test.bundle&quot;);
        // asserts that test bundle is resolved
        assertBundleState(Bundle.INSTALLED | Bundle.RESOLVED, &quot;org.knowhowlab.osgi.testing.it.test.bundle&quot;, 5, TimeUnit.SECONDS);
        // gets bundle instance
        Bundle bundle = findBundle(bc, &quot;org.knowhowlab.osgi.testing.it.test.bundle&quot;);
        // asserts that test service is unavailable
        assertServiceUnavailable(&quot;org.knowhowlab.osgi.testing.it.testbundle.service.Echo&quot;);
        // start bundle
        bundle.start();
        // asserts that test bundle is active
        assertBundleState(Bundle.ACTIVE, &quot;org.knowhowlab.osgi.testing.it.test.bundle&quot;);
        // asserts that test service is available within 2 seconds
        assertServiceAvailable(&quot;org.knowhowlab.osgi.testing.it.testbundle.service.Echo&quot;, 2, TimeUnit.SECONDS);
        // asserts that test service with custom properties is available
        assertServiceAvailable(and(create(Echo.class), eq(&quot;testkey&quot;, &quot;testvalue&quot;)));
        // gets service by class and filter
        Echo echo = ServiceUtils.getService(getBundleContext(), Echo.class, eq(&quot;testkey&quot;, &quot;testvalue&quot;));
        // asserts service method call
        assertEquals(&quot;test&quot;, echo.echo(&quot;test&quot;));
        // stops bundle
        bundle.stop();
        // asserts that test bundle is resolved
        assertBundleState(Bundle.RESOLVED, &quot;org.knowhowlab.osgi.testing.it.test.bundle&quot;);
        // asserts that test service is unregistered
        assertServiceUnavailable(Echo.class);
    }
&lt;/pre&gt;&lt;h4&gt;How to use the library with PaxExam&lt;/h4&gt;Add Maven dependencies to your integration tests pom.xml&lt;br /&gt;
&lt;pre class=&quot;Xml&quot; name=&quot;code&quot;&gt;&amp;lt;dependency&amp;gt;
            &amp;lt;groupId&amp;gt;org.knowhowlab.osgi&amp;lt;/groupId&amp;gt;
            &amp;lt;artifactId&amp;gt;org.knowhowlab.osgi.testing.utils&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.knowhowlab.osgi&amp;lt;/groupId&amp;gt;
            &amp;lt;artifactId&amp;gt;org.knowhowlab.osgi.testing.assertions&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;&lt;br /&gt;
Include library bundles into PaxExam tests&lt;br /&gt;
&lt;pre class=&quot;Java&quot; name=&quot;code&quot;&gt;@Configuration
protected static Option[] baseConfiguration() {
   return options(
...
mavenBundle().groupId(&quot;org.knowhowlab.osgi&quot;).artifactId(&quot;org.knowhowlab.osgi.testing.utils&quot;).version(System.getProperty(&quot;project.version&quot;)),

mavenBundle().groupId(&quot;org.knowhowlab.osgi&quot;).artifactId(&quot;org.knowhowlab.osgi.testing.assertions&quot;).version(System.getProperty(&quot;project.version&quot;)),
...
    );
}
&lt;/pre&gt;&lt;br /&gt;
Use in your PaxExam integration tests:&lt;br /&gt;
&lt;pre class=&quot;Java&quot; name=&quot;code&quot;&gt;// assert bundle with symbolic name &quot;org.knowhowlab.osgi.testing.utils&quot; is installed into OSGi framework
assertBundleState(Bundle.ACTIVE, &quot;org.knowhowlab.osgi.testing.utils&quot;, 5, TimeUnit.SECONDS);
// assert bundle with symbolic name &quot;org.knowhowlab.osgi.testing.utils&quot; is installed into OSGi framework
assertBundleAvailable(&quot;org.knowhowlab.osgi.testing.utils&quot;);
// assert bundle with symbolic name &quot;org.knowhowlab.osgi.testing.utils&quot; and version &quot;1.0.1&quot;
// is installed into OSGi framework
assertBundleAvailable(&quot;org.knowhowlab.osgi.testing.utils&quot;, new Version(&quot;1.0.1&quot;));
// assert bundle with symbolic name &quot;org.knowhowlab.osgi.testing.utils&quot; and version &quot;2.0.0&quot;
// is not installed into OSGi framework
assertBundleUnavailable(&quot;org.knowhowlab.osgi.testing.utils&quot;, new Version(&quot;2.0.0&quot;));

// assert PackageAdmin service is available in OSGi registry
assertServiceAvailable(PackageAdmin.class, 5, TimeUnit.SECONDS);
// assert MonitorAdmin service is unavailable in OSGi registry
assertServiceUnavailable(&quot;org.osgi.service.monitor.MonitorAdmin&quot;);
// assert StartLevel service is available in OSGi registry
assertServiceAvailable(StartLevel.class);
// assert PackageAdmin service is available in OSGi registry
assertServiceAvailable(FilterUtils.create(PackageAdmin.class));
// assert MonitorAdmin service is unavailable in OSGi registry
assertServiceUnavailable(FilterUtils.create(&quot;org.osgi.service.monitor.MonitorAdmin&quot;));
&lt;/pre&gt;&lt;br /&gt;
&lt;a href=&quot;https://github.com/dpishchukhin/org.knowhowlab.osgi.testing/archive/master.zip&quot;&gt;Here&lt;/a&gt; you can find the last sources of the sample. &lt;br /&gt;
&lt;br /&gt;
Thank you for your attention. Your feedback is welcome as usual.&lt;br /&gt;
Best Regards.</content><link rel='replies' type='application/atom+xml' href='http://blog.knowhowlab.org/feeds/1403644115012104250/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.knowhowlab.org/2012/11/osgi-testing-make-your.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3314286357054482328/posts/default/1403644115012104250'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3314286357054482328/posts/default/1403644115012104250'/><link rel='alternate' type='text/html' href='http://blog.knowhowlab.org/2012/11/osgi-testing-make-your.html' title='OSGi Testing: make your integration/functional tests clearer. A sample with PaxExam'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/15456622107452083522</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><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><category scheme="http://www.blogger.com/atom/ns#" term="equinox"/><category scheme="http://www.blogger.com/atom/ns#" term="felix"/><category scheme="http://www.blogger.com/atom/ns#" term="gogo"/><category scheme="http://www.blogger.com/atom/ns#" term="knopflerfish"/><category scheme="http://www.blogger.com/atom/ns#" term="maven"/><category scheme="http://www.blogger.com/atom/ns#" term="osgi"/><category scheme="http://www.blogger.com/atom/ns#" term="shell"/><title type='text'>OSGi universal shell implementation 1.1.0 released</title><content type='html'>There is a new 1.1.0 version of &lt;a href=&quot;http://code.google.com/p/osgilab/wiki/UniversalShell&quot;&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=&quot;Xml&quot; name=&quot;code&quot;&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=&quot;Xml&quot; name=&quot;code&quot;&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=&quot;Xml&quot; name=&quot;code&quot;&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=&quot;Xml&quot; name=&quot;code&quot;&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=&quot;Xml&quot; name=&quot;code&quot;&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;</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'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3314286357054482328/posts/default/6567925770857426107'/><link rel='alternate' type='text/html' href='http://blog.knowhowlab.org/2011/05/osgi-universal-shell-implementation-110.html' title='OSGi universal shell implementation 1.1.0 released'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/15456622107452083522</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><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><category scheme="http://www.blogger.com/atom/ns#" term="equinox"/><category scheme="http://www.blogger.com/atom/ns#" term="felix"/><category scheme="http://www.blogger.com/atom/ns#" term="gogo"/><category scheme="http://www.blogger.com/atom/ns#" term="knopflerfish"/><category scheme="http://www.blogger.com/atom/ns#" term="maven"/><category scheme="http://www.blogger.com/atom/ns#" term="osgi"/><category scheme="http://www.blogger.com/atom/ns#" term="shell"/><title type='text'>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=&quot;http://code.google.com/p/osgilab/wiki/UniversalShell&quot;&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=&quot;Xml&quot; name=&quot;code&quot;&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=&quot;Xml&quot; name=&quot;code&quot;&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=&quot;Xml&quot; name=&quot;code&quot;&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=&quot;Xml&quot; name=&quot;code&quot;&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;</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='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3314286357054482328/posts/default/7841016677708827397'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3314286357054482328/posts/default/7841016677708827397'/><link rel='alternate' type='text/html' href='http://blog.knowhowlab.org/2011/04/osgi-universal-shell-implementation-101.html' title='OSGi universal shell implementation 1.0.1 released'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/15456622107452083522</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3314286357054482328.post-9126145064292037829</id><published>2010-10-30T15:33:00.002+02:00</published><updated>2018-02-21T12:33:21.869+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="blueprint"/><category scheme="http://www.blogger.com/atom/ns#" term="maven"/><category scheme="http://www.blogger.com/atom/ns#" term="osgi"/><category scheme="http://www.blogger.com/atom/ns#" term="osgi enterprise"/><category scheme="http://www.blogger.com/atom/ns#" term="pax runner"/><category scheme="http://www.blogger.com/atom/ns#" term="scr"/><category scheme="http://www.blogger.com/atom/ns#" term="specification"/><category scheme="http://www.blogger.com/atom/ns#" term="tools"/><category scheme="http://www.blogger.com/atom/ns#" term="tutorial"/><title type='text'>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=&quot;https://osgilab.googlecode.com/files/osgi-activation-samples_updated.zip&quot;&gt;here&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Update 21.10.2013: examples were updated (Fixed an issue with missed Equinox Maven artifacts)&lt;/b&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=&quot;https://draft.blogger.com/blogger.g?blogID=3314286357054482328#requirements&quot;&gt;Requirements&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://draft.blogger.com/blogger.g?blogID=3314286357054482328#testcase&quot;&gt;Use Case details&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://draft.blogger.com/blogger.g?blogID=3314286357054482328#ba&quot;&gt;Bundle Activator&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://draft.blogger.com/blogger.g?blogID=3314286357054482328#ds&quot;&gt;Declarative Services&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://draft.blogger.com/blogger.g?blogID=3314286357054482328#bluepring&quot;&gt;Blueprint Services&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://draft.blogger.com/blogger.g?blogID=3314286357054482328#wab&quot;&gt;Web Application Bundle&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://draft.blogger.com/blogger.g?blogID=3314286357054482328#run&quot;&gt;How to run examples&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://draft.blogger.com/blogger.g?blogID=3314286357054482328#references&quot;&gt;References&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;ol&gt;&lt;li&gt;&lt;b&gt;&lt;a href=&quot;https://draft.blogger.com/null&quot; name=&quot;requirements&quot;&gt;Requirements.&lt;/a&gt;&lt;/b&gt; There are minimum requirements:     &lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://maven.apache.org/download.html&quot;&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=&quot;http://paxrunner.ops4j.org/space/Pax+Runner&quot;&gt;Pax Runner&lt;/a&gt;).             You can get some brief information also &lt;a href=&quot;http://blog.knowhowlab.org/2010/05/pax-runner-and-exam-new-osgi-framework.html&quot;&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 href=&quot;https://draft.blogger.com/null&quot; name=&quot;testcase&quot;&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=&quot;Java&quot; name=&quot;code&quot;&gt;public interface Echo {
                    String ECHO_TYPE_PROP = &quot;echo_type&quot;;

                    String echo(String str);
                }
            &lt;/pre&gt;This interface exported by &lt;a href=&quot;http://osgilab.googlecode.com/svn/trunk/org.osgilab.tips/activation/core/pom.xml&quot;&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 href=&quot;https://draft.blogger.com/null&quot; name=&quot;ba&quot;&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=&quot;Java&quot; name=&quot;code&quot;&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(&quot;PreferencesService is linked&quot;);
                    // register Echo service
                    Dictionary&amp;lt;String, String&amp;gt; props = new Hashtable&amp;lt;String, String&amp;gt;();
                    props.put(ECHO_TYPE_PROP, &quot;BundleActivator&quot;);
                    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(&quot;PreferencesService is unlinked&quot;);
                }
            }
        }
    &lt;/pre&gt;&lt;br /&gt;
Bundle MANIFEST.MF:     &lt;pre class=&quot;Xml&quot; name=&quot;code&quot;&gt;Manifest-Version: 1.0
        Bundle-Name: KnowHowLab Tips&amp;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=&quot;1.5&quot;,org.osgi.service.prefs;version=&quot;1.1&quot;,org.osgi.uti
         l.tracker;version=&quot;1.4&quot;
        Bundle-SymbolicName: org.knowhowlab.osgi.tips.activation.activator
    &lt;/pre&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href=&quot;https://draft.blogger.com/null&quot; name=&quot;ds&quot;&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=&quot;Java&quot; name=&quot;code&quot;&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(&quot;PreferencesService is linked&quot;);
                this.preferencesService = preferencesService;
            }

            // Called to unbind PreferencesService
            public void unbindPreferencesService(PreferencesService preferencesService) {
                this.preferencesService = null;
                System.out.println(&quot;PreferencesService is unlinked&quot;);
            }
        }
    &lt;/pre&gt;&lt;br /&gt;
Here is Component Description:     &lt;pre class=&quot;Xml&quot; name=&quot;code&quot;&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&amp;gt;
        &amp;lt;components xmlns:scr=&quot;http://www.osgi.org/xmlns/scr/v1.0.0&quot;&amp;gt;
            &amp;lt;!-- Echo Component --&amp;gt;
            &amp;lt;scr:component enabled=&quot;true&quot; immediate=&quot;true&quot; name=&quot;Echo&quot;&amp;gt;
                &amp;lt;!--Component Class name--&amp;gt;
                &amp;lt;implementation class=&quot;org.knowhowlab.osgi.tips.activation.ds.EchoComponent&quot;/&amp;gt;
                &amp;lt;!-- Echo Service description --&amp;gt;
                &amp;lt;service servicefactory=&quot;false&quot;&amp;gt;
                    &amp;lt;provide interface=&quot;org.knowhowlab.osgi.tips.activation.core.Echo&quot;/&amp;gt;
                &amp;lt;/service&amp;gt;
                &amp;lt;!-- Service registration properties --&amp;gt;
                &amp;lt;property name=&quot;echo_type&quot; type=&quot;String&quot; value=&quot;Declarative Services&quot;/&amp;gt;
                &amp;lt;property name=&quot;service.pid&quot; value=&quot;Echo&quot;/&amp;gt;
                &amp;lt;!-- PreferencesService dependency description --&amp;gt;
                &amp;lt;reference name=&quot;preferencesService&quot; 
                           interface=&quot;org.osgi.service.prefs.PreferencesService&quot; 
                           cardinality=&quot;1..1&quot;
                           policy=&quot;static&quot; 
                           bind=&quot;bindPreferencesService&quot; 
                           unbind=&quot;unbindPreferencesService&quot;/&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=&quot;Xml&quot; name=&quot;code&quot;&gt;Manifest-Version: 1.0
        Service-Component: OSGI-INF/serviceComponents.xml
        Export-Package: org.knowhowlab.osgi.tips.activation.ds;uses:=&quot;org.know
         howlab.osgi.tips.activation.core,org.osgi.service.prefs&quot;
        Bundle-Name: KnowHowLab Tips&amp;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=&quot;1.1&quot;
        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=&quot;Java&quot; name=&quot;code&quot;&gt;// Component description
        @Component(name = &quot;Echo&quot;, immediate = true)
        // Service description
        @Service(value = Echo.class)
        // Service properties
        @Property(name = Echo.ECHO_TYPE_PROP, value = &quot;Declarative Services&quot;)
        public class EchoComponent implements Echo {
            // Reference to PreferencesService
            @Reference(name = &quot;preferencesService&quot;, 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(&quot;PreferencesService is linked&quot;);
                this.preferencesService = preferencesService;
            }

            // Called to unbind PreferencesService
            public void unbindPreferencesService(PreferencesService preferencesService) {
                this.preferencesService = null;
                System.out.println(&quot;PreferencesService is unlinked&quot;);
            }
        }
    &lt;/pre&gt;&lt;br /&gt;
&lt;/li&gt;



&lt;li&gt;&lt;b&gt;&lt;a href=&quot;https://draft.blogger.com/null&quot; name=&quot;blueprint&quot;&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=&quot;Java&quot; name=&quot;code&quot;&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(&quot;PreferencesService is linked&quot;);
            }

            // Called to unbind PreferencesService
            public void unbindPreferencesService(PreferencesService preferencesService, Map props) {
                this.preferencesService = null;
                System.out.println(&quot;PreferencesService is unlinked&quot;);
            }
        }
    &lt;/pre&gt;&lt;br /&gt;
Here is Bean Definition (OSGI-INF/blueprint/echo.xml):     &lt;pre class=&quot;Xml&quot; name=&quot;code&quot;&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&amp;gt;
        &amp;lt;blueprint xmlns=&quot;http://www.osgi.org/xmlns/blueprint/v1.0.0&quot;&amp;gt;
            &amp;lt;!-- Bean definition --&amp;gt;
            &amp;lt;bean id=&quot;echoservice&quot; class=&quot;org.knowhowlab.osgi.tips.activation.blueprint.EchoBean&quot;/&amp;gt;
            &amp;lt;!-- Service definition --&amp;gt;
            &amp;lt;service ref=&quot;echoservice&quot; interface=&quot;org.knowhowlab.osgi.tips.activation.core.Echo&quot;
                     depends-on=&quot;preferencesService&quot;&amp;gt;
                &amp;lt;service-properties&amp;gt;
                    &amp;lt;entry key=&quot;ECHO_TYPE_PROP&quot; value=&quot;Blueprint&quot;/&amp;gt;
                &amp;lt;/service-properties&amp;gt;
            &amp;lt;/service&amp;gt;
            &amp;lt;!-- PreferencesService reference definition --&amp;gt;
            &amp;lt;reference id=&quot;preferencesService&quot; interface=&quot;org.osgi.service.prefs.PreferencesService&quot;
                       availability=&quot;mandatory&quot;&amp;gt;
                &amp;lt;reference-listener bind-method=&quot;bindPreferencesService&quot; unbind-method=&quot;unbindPreferencesService&quot;&amp;gt;
                    &amp;lt;ref component-id=&quot;echoservice&quot;/&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=&quot;Java&quot; name=&quot;code&quot;&gt;// Bean definition
        @Bean(id = &quot;echoservice&quot;)
        // Service definition
        @Service(interfaces = Echo.class,
                serviceProperties = @ServiceProperty(key = Echo.ECHO_TYPE_PROP, value = &quot;Blueprint-Annotations&quot;))
        @ReferenceListener
        public class EchoBean implements Echo {
            // Reference definition 
            @Reference(availability = &quot;mandatory&quot;, referenceListeners = @ReferenceListener(ref = &quot;echoservice&quot;))
            private PreferencesService preferencesService;

            public String echo(String str) {
                return str;
            }

            @Bind
            public void bindPreferencesService(PreferencesService preferencesService, Map props) {
                this.preferencesService = preferencesService;
                System.out.println(&quot;PreferencesService is linked&quot;);
            }

            @Unbind
            public void unbindPreferencesService(PreferencesService preferencesService, Map props) {
                this.preferencesService = null;
                System.out.println(&quot;PreferencesService is unlinked&quot;);
            }
        }
    &lt;/pre&gt;&lt;br /&gt;
&lt;/li&gt;



&lt;li&gt;&lt;b&gt;&lt;a href=&quot;https://draft.blogger.com/null&quot; name=&quot;wab&quot;&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 &quot;osgi-bundlecontext&quot;.             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=&quot;Java&quot; name=&quot;code&quot;&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(&quot;osgi-bundlecontext&quot;);
                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(&quot;PreferencesService is linked&quot;);

                    Dictionary&amp;lt;String, String&amp;gt; props = new Hashtable&amp;lt;String, String&amp;gt;();
                    props.put(ECHO_TYPE_PROP, &quot;WAB&quot;);
                    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(&quot;PreferencesService is unlinked&quot;);
                }
            }
        }
    &lt;/pre&gt;&lt;br /&gt;
Here is web.xml:     &lt;pre class=&quot;Xml&quot; name=&quot;code&quot;&gt;&amp;lt;web-app xmlns=&quot;http://java.sun.com/xml/ns/javaee&quot;
                 xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;
                 metadata-complete=&quot;true&quot;
                 version=&quot;2.5&quot;&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=&quot;Xml&quot; name=&quot;code&quot;&gt;Manifest-Version: 1.0
        Export-Package: org.knowhowlab.osgi.tips.activation.wab;uses:=&quot;org.kno
         whowlab.osgi.tips.activation.core,org.osgi.util.tracker,org.osgi.fram
         ework,javax.servlet,org.osgi.service.prefs&quot;;version=&quot;1.0.0.SNAPSHOT&quot;
        Bundle-Classpath: WEB-INF/classes
        Bundle-Name: KnowHowLab Tips&amp;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=&quot;1.5&quot;,org.osgi.service.prefs;version=&quot;1.1
         &quot;,org.osgi.util.tracker;version=&quot;1.4&quot;
        Bundle-SymbolicName: org.knowhowlab.osgi.tips.activation.wab
    &lt;/pre&gt;&lt;br /&gt;
&lt;/li&gt;



&lt;li&gt;     &lt;b&gt;&lt;a href=&quot;https://draft.blogger.com/null&quot; name=&quot;run&quot;&gt;How to run examples&lt;/a&gt;&lt;/b&gt;     &lt;ol&gt;&lt;li&gt;             Download samples from &lt;a href=&quot;https://github.com/dpishchukhin/osgilab/tree/master/org.osgilab.tips/activation&quot;&gt;here&lt;/a&gt;         &lt;/li&gt;
&lt;li&gt;             Compile with Maven command             &lt;pre class=&quot;Xml&quot; name=&quot;code&quot;&gt;mvn clean install&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;             Run BundleActivator sample             &lt;pre class=&quot;Xml&quot; name=&quot;code&quot;&gt;mvn -f run.xml -P activator&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;             Run Declarative Services sample             &lt;pre class=&quot;Xml&quot; name=&quot;code&quot;&gt;mvn -f run.xml -P ds&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;             Run Blueprint Services sample             &lt;pre class=&quot;Xml&quot; name=&quot;code&quot;&gt;mvn -f run.xml -P blueprint&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;             Run Blueprint Annotations sample             &lt;pre class=&quot;Xml&quot; name=&quot;code&quot;&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&#39;ll try with the next version.         &lt;/li&gt;
&lt;li&gt;             Run WAB sample             &lt;pre class=&quot;Xml&quot; name=&quot;code&quot;&gt;mvn -f run.xml -P wab&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;             Run All sample             &lt;pre class=&quot;Xml&quot; name=&quot;code&quot;&gt;mvn -f run.xml -P all&lt;/pre&gt;Framework started:             &lt;pre class=&quot;Xml&quot; name=&quot;code&quot;&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=&quot;Xml&quot; name=&quot;code&quot;&gt;osgi&amp;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=&quot;Xml&quot; name=&quot;code&quot;&gt;osgi&amp;gt; stop 3
PreferencesService is unlinked
PreferencesService is unlinked
PreferencesService is unlinked
PreferencesService is unlinked

osgi&amp;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;li&gt;     &lt;b&gt;&lt;a href=&quot;https://draft.blogger.com/null&quot; name=&quot;references&quot;&gt;References:&lt;/a&gt;&lt;/b&gt;     &lt;br /&gt;
&lt;ol&gt;&lt;li&gt;             &lt;a href=&quot;http://www.osgi.org/Release4/HomePage&quot;&gt;OSGi specifications&lt;/a&gt;         &lt;/li&gt;
&lt;li&gt;             &lt;a href=&quot;http://www.osgi.org/javadoc/r4v42/&quot;&gt;OSGi API&lt;/a&gt;         &lt;/li&gt;
&lt;li&gt;             &lt;a href=&quot;http://www.aqute.biz/Code/Bnd&quot;&gt;Bnd tool&lt;/a&gt; - tool to help you diagnose and create OSGi bundles         &lt;/li&gt;
&lt;li&gt;             &lt;a href=&quot;http://felix.apache.org/site/apache-felix-maven-bundle-plugin-bnd.html&quot;&gt;maven-bundle-plugin&lt;/a&gt; -             Maven plugin for Bnd tool         &lt;/li&gt;
&lt;li&gt;             &lt;a href=&quot;http://felix.apache.org/site/apache-felix-maven-scr-plugin.html&quot;&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=&quot;http://felix.apache.org/site/scr-annotations.html&quot;&gt;SCR annotations&lt;/a&gt; -             How to use annotations for OSGi components         &lt;/li&gt;
&lt;li&gt;             &lt;a href=&quot;http://aries.apache.org/documentation/tutorials/blueprinthelloworldtutorial.html&quot;&gt;Aries Blueprint&lt;/a&gt; -             Blueprint &quot;Hello World&quot; tutorial         &lt;/li&gt;
&lt;li&gt;             &lt;a href=&quot;http://incubator.apache.org/aries/blueprintannotation.html&quot;&gt;Aries BlueprintAnnotations&lt;/a&gt; -             BlueprintAnnotation tutorial         &lt;/li&gt;
&lt;li&gt;             &lt;a href=&quot;http://paxrunner.ops4j.org/space/Pax+Runner&quot;&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</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='23 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3314286357054482328/posts/default/9126145064292037829'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3314286357054482328/posts/default/9126145064292037829'/><link rel='alternate' type='text/html' href='http://blog.knowhowlab.org/2010/10/osgi-tutorial-4-ways-to-activate-code.html' title='OSGi Tutorial: 4 ways to activate code in OSGi bundle'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/15456622107452083522</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>23</thr:total></entry><entry><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><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="osgi"/><category scheme="http://www.blogger.com/atom/ns#" term="release"/><category scheme="http://www.blogger.com/atom/ns#" term="specification"/><title type='text'>OSGi MonitorAdmin Implementation: Release 1.0.2</title><content type='html'>Hello,&lt;br /&gt;
&lt;br /&gt;
I&#39;d like to announce a new release of &lt;a href=&quot;http://code.google.com/p/osgilab/wiki/MonitorAdmin&quot;&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=&quot;Xml&quot; name=&quot;code&quot;&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;</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'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3314286357054482328/posts/default/4129385896851825846'/><link rel='alternate' type='text/html' href='http://blog.knowhowlab.org/2010/07/osgi-monitoradmin-implementation.html' title='OSGi MonitorAdmin Implementation: Release 1.0.2'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/15456622107452083522</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><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><category scheme="http://www.blogger.com/atom/ns#" term="jmx"/><category scheme="http://www.blogger.com/atom/ns#" term="maven"/><category scheme="http://www.blogger.com/atom/ns#" term="osgi"/><category scheme="http://www.blogger.com/atom/ns#" term="osgi enterprise"/><category scheme="http://www.blogger.com/atom/ns#" term="release"/><title type='text'>JMX Management Model Implementation: Release 1.0.2</title><content type='html'>Hi,&lt;br /&gt;
&lt;br /&gt;
I&#39;d like to announce a new minor release of &lt;a href=&quot;http://code.google.com/p/osgilab/wiki/JMX&quot;&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=&quot;Xml&quot; name=&quot;code&quot;&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;</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'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3314286357054482328/posts/default/8785141635471020060'/><link rel='alternate' type='text/html' href='http://blog.knowhowlab.org/2010/07/jmx-management-model-implementation.html' title='JMX Management Model Implementation: Release 1.0.2'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/15456622107452083522</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><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><category scheme="http://www.blogger.com/atom/ns#" term="general"/><title type='text'>Blog update</title><content type='html'>Hello,&lt;br /&gt;
&lt;br /&gt;
I&#39;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</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'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3314286357054482328/posts/default/3850945676886535267'/><link rel='alternate' type='text/html' href='http://blog.knowhowlab.org/2010/07/blog-update.html' title='Blog update'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/15456622107452083522</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><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><category scheme="http://www.blogger.com/atom/ns#" term="equinox"/><category scheme="http://www.blogger.com/atom/ns#" term="felix"/><category scheme="http://www.blogger.com/atom/ns#" term="gogo"/><category scheme="http://www.blogger.com/atom/ns#" term="integration"/><category scheme="http://www.blogger.com/atom/ns#" term="maven"/><category scheme="http://www.blogger.com/atom/ns#" term="osgi"/><category scheme="http://www.blogger.com/atom/ns#" term="pax runner"/><category scheme="http://www.blogger.com/atom/ns#" term="shell"/><category scheme="http://www.blogger.com/atom/ns#" term="tools"/><title type='text'>How to replace standard Equinox shell with Apache Felix GoGo</title><content type='html'>Hello,&lt;br /&gt;
&lt;br /&gt;
I&#39;ve just spent some time to figure out how to integrate &lt;a href=&quot;http://felix.apache.org/site/apache-felix-gogo.html&quot;&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=&#39;more&#39;&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=&quot;&quot; list=&quot;&quot; of=&quot;&quot; separated=&quot;&quot; states=&quot;&quot;&gt;]  [&lt;segment bsn=&quot;&quot; of=&quot;&quot;&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=&quot;http://osgilab.googlecode.com/svn/trunk/org.knowhowlab.osgi.experiments/gogo/equinox/demo-pom.xml&quot;&gt;Maven project&lt;/a&gt; and &lt;a href=&quot;http://osgilab.googlecode.com/svn/trunk/org.knowhowlab.osgi.experiments/gogo/equinox/platform-equinox-3.6.0.xml&quot;&gt;platform definition&lt;/a&gt;. To start OSGi framework use command:
&lt;pre class=&quot;Xml&quot; name=&quot;code&quot;&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</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'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3314286357054482328/posts/default/8094067434266843016'/><link rel='alternate' type='text/html' href='http://blog.knowhowlab.org/2010/06/how-to-replace-standard-equinox-shell.html' title='How to replace standard Equinox shell with Apache Felix GoGo'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/15456622107452083522</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><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><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="osgi"/><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="release"/><category scheme="http://www.blogger.com/atom/ns#" term="specification"/><category scheme="http://www.blogger.com/atom/ns#" term="testing"/><category scheme="http://www.blogger.com/atom/ns#" term="tools"/><title type='text'>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&#39;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=&quot;http://osgilab.googlecode.com/svn/trunk/org.osgilab.tips/pax-platforms/platform-equinox-3.6.0.xml&quot;&gt;here&lt;/a&gt; or&amp;nbsp; you can use it directly from POM:&lt;br /&gt;
&lt;pre class=&quot;Xml&quot; name=&quot;code&quot;&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=&quot;Java&quot; name=&quot;code&quot;&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</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'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3314286357054482328/posts/default/2491549812855084320'/><link rel='alternate' type='text/html' href='http://blog.knowhowlab.org/2010/06/eclipse-equinox-helios-36-is-out.html' title='Eclipse Equinox Helios 3.6 is out!'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/15456622107452083522</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><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><category scheme="http://www.blogger.com/atom/ns#" term="junit"/><category scheme="http://www.blogger.com/atom/ns#" term="knopflerfish"/><category scheme="http://www.blogger.com/atom/ns#" term="maven"/><category scheme="http://www.blogger.com/atom/ns#" term="osgi"/><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="release"/><category scheme="http://www.blogger.com/atom/ns#" term="tools"/><title type='text'>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=&quot;http://www.knopflerfish.org/kf3_osgi_r4_v4.2.html&quot;&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&#39;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=&quot;http://osgilab.googlecode.com/svn/trunk/org.osgilab.tips/pax-platforms/platform-knopflerfish-3.0.0.xml&quot;&gt;here&lt;/a&gt; or&amp;nbsp; you can use it directly from POM:&lt;br /&gt;
&lt;pre class=&quot;Xml&quot; name=&quot;code&quot;&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=&quot;Java&quot; name=&quot;code&quot;&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</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='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3314286357054482328/posts/default/8584578664131840940'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3314286357054482328/posts/default/8584578664131840940'/><link rel='alternate' type='text/html' href='http://blog.knowhowlab.org/2010/06/knopflerfish-300-released.html' title='Knopflerfish 3.0.0 Released'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/15456622107452083522</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry></feed>