<?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: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-34692233</id><updated>2012-01-24T15:38:01.140Z</updated><category term='Hotspot'/><category term='p2'/><category term='subsystems'/><category term='sunbug'/><category term='plans'/><category term='Dolphin'/><category term='design patterns'/><category term='Libra'/><category term='EclipseRT'/><category term='SourceTree'/><category term='BigDecimal'/><category term='cloning'/><category term='CORBA'/><category term='Newton'/><category term='maven'/><category term='Java 7'/><category term='CICS'/><category term='interfaces'/><category term='CaseInsensitiveMap'/><category term='Oracle'/><category term='Karaf'/><category term='SOA'/><category term='WebLogic'/><category term='Aries'/><category term='Harmony'/><category term='Felix'/><category term='EBR'/><category term='dm Server'/><category term='RAP'/><category term='Scala'/><category term='Jetty'/><category term='git'/><category term='survey'/><category term='Equinox'/><category term='JDK 7'/><category term='Free Burma'/><category term='Structure101'/><category term='Grails'/><category term='services'/><category term='Java 8'/><category term='jps'/><category term='Spring'/><category term='Apache'/><category term='SpringSource'/><category term='Geronimo'/><category term='RFC 66'/><category term='Interface21'/><category term='JSR 277'/><category term='Mule'/><category term='JBoss'/><category term='JVM'/><category term='snaps'/><category term='OSGi'/><category term='eclipsecon'/><category term='nano'/><category term='example'/><category term='tutorial'/><category term='GlassFish'/><category term='SCA'/><category term='JSIG'/><category term='Jigsaw'/><category term='EEG'/><category term='software design'/><category term='Osxa'/><category term='cloud'/><category term='web services'/><category term='Java'/><category term='Gemini'/><category term='WebSphere'/><category term='Refactoring'/><category term='Virgo'/><category term='SOAP'/><category term='JSR 294'/><category term='IIOP'/><category term='JCP'/><category term='Enterprise'/><category term='CloudFoundry'/><category term='Gradle'/><category term='SpringSource Application Platform OSGi'/><category term='Ruby'/><category term='JSR 291'/><category term='kernel'/><category term='Eclipse'/><category term='design'/><category term='release'/><category term='jconsole'/><category term='gitx'/><category term='deadlock'/><category term='OpenJDK'/><category term='interoperation'/><category term='Pax Exam'/><title type='text'>Mind the Gap</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default?start-index=101&amp;max-results=100'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>197</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-34692233.post-7817081806753296992</id><published>2012-01-19T16:57:00.000Z</published><updated>2012-01-20T07:57:08.749Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSGi'/><category scheme='http://www.blogger.com/atom/ns#' term='Virgo'/><title type='text'>CME Group and Virgo</title><content type='html'>Today &lt;a href="http://www.cmegroup.com/"&gt;CME Group&lt;/a&gt; released an official statement about their use of Virgo. This is posted under the "Virgo Powered" section of the &lt;a href="http://www.eclipse.org/virgo/"&gt;Virgo home&lt;/a&gt; page, but the full text is also reproduced below.&lt;br /&gt;&lt;br /&gt;I'm delighted both that CME Group are using Virgo and that such a large player in the finance area was happy to go public.&lt;br /&gt;&lt;br /&gt;CME Group, formerly known as            Chicago Mercantile Exchange Holdings Inc., was founded in 1898 and   operates the CME, CBOT, NYMEX, and COMEX regulatory exchanges   worldwide. It is the world’s leading derivatives marketplace with 2570   full time employees and a market capitalisation of over $15B.  &lt;br /&gt;&lt;br /&gt;CME Group kindly released the following information in January 2012.  &lt;br /&gt;&lt;br /&gt;At CME Group, the goals for our project were to use and create a platform        that would be easy to maintain, expand and reuse. Our applications are of        various sizes and complexities, but there are certain aspects that are        common, which was the reason to find a very modular solution. In        particular, our current efforts are in Surveillance tools which allow        monitoring the state of the exchange and the market.  &lt;br /&gt;&lt;br /&gt;We started using Virgo 2.0.1 during a “proof of concept” in November of        2010 and spent 2011 working closely with them to build the application.        Today we use version 3.0.1. with 48 service bundles and 20 web bundles.        These services range from simple DAO type services, through authorization        and authentication, web services, and even distributed caching. All web        bundles use snaps and customized apache tiles views.   &lt;br /&gt;&lt;br /&gt;What Virgo and OSGi provides for us is complete modularity and        plug-and-play capability. This enables us to work more intelligently with        other teams who need to build bundles independently of us where the strong        isolation of services and APIs allows for a clear separation of control.        We have created a core set of services that will be a platform for future        projects across CME Group and are already actively building two projects        on top of that platform. Having Virgo bundled with Apache’s Tomcat also        helped in deciding which container to use as our projects are mostly web        applications.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-7817081806753296992?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/7817081806753296992/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=7817081806753296992' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/7817081806753296992'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/7817081806753296992'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2012/01/cme-group-and-virgo.html' title='CME Group and Virgo'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-7359375249833079264</id><published>2012-01-05T16:49:00.001Z</published><updated>2012-01-05T16:50:34.788Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='p2'/><category scheme='http://www.blogger.com/atom/ns#' term='Pax Exam'/><category scheme='http://www.blogger.com/atom/ns#' term='OSGi'/><category scheme='http://www.blogger.com/atom/ns#' term='Virgo'/><category scheme='http://www.blogger.com/atom/ns#' term='nano'/><category scheme='http://www.blogger.com/atom/ns#' term='kernel'/><title type='text'>Virgo Nano Technology</title><content type='html'>The first milestone of Virgo 3.5.0 is&amp;nbsp;&lt;a href="http://www.eclipse.org/virgo/download/milestones.php"&gt;available&lt;/a&gt;. It introduces two significant new features: p2 support (covered &lt;a href="http://underlap.blogspot.com/2011/07/exploiting-p2-in-eclipsert-projects.html"&gt;previously&lt;/a&gt;) and a new Virgo distribution known as &lt;i&gt;nano&lt;/i&gt;. (Apologies for the pun in the blog title - it was too hard to resist.)&lt;br /&gt;&lt;br /&gt;Nano is essentially a cut-down version of Virgo which starts up really fast and has a single (kernel) &lt;a href="http://underlap.blogspot.com/2011/02/stumbling-towards-better-design.html"&gt;region&lt;/a&gt;. It is intended for simpler scenarios where you don't need to isolate applications from each other or from the kernel.&lt;br /&gt;&lt;br /&gt;The current nano distribution includes Gemini Web and so is a fully-functional OSGi web server which starts in about 3 seconds (compared to Virgo Tomcat/Jetty Server which take about 9-10 seconds). However, we &lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=367829"&gt;plan&lt;/a&gt; to factor out Gemini Web so that nano becomes a small/fast subset of the Virgo kernel. We will then provide a separate distribution which adds Gemini Web to nano, as in the first milestone.&lt;br /&gt;&lt;br /&gt;As well as introducing nano, the milestone re-bases the kernel and the Tomcat/Jetty servers on nano. Initial provisioning via p2, with full instructions in the user guide, is provided for all distributions in addition to the familiar ZIP file installs (the ZIP contents are now constructed using p2 at build time). All distributions use a regular Equinox directory layout and launcher which will simplify third party tooling integration (e.g. &lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=367918"&gt;Pax Exam&lt;/a&gt;). A short-term downside is that we need to &lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=364573"&gt;update&lt;/a&gt; the Virgo IDE tooling to work with Virgo 3.5.0.&lt;br /&gt;&lt;br /&gt;The current nano distribution can also dynamically provision content via p2 which is particularly useful for automated or cloud deployments. (We tried to implement this for the multi-region kernel and Tomcat/Jetty servers, but that was beyond the scope of the current p2 design, so we've put it on hold.)&lt;br /&gt;&lt;br /&gt;There is also a nice engineering side-effect of the introduction of nano: we are starting to refactor the kernel — by far the most complex Virgo component — and move the more general, region-agnostic features down into nano.&lt;br /&gt;&lt;br /&gt;The following picture summarises the distributions we anticipate in Virgo 3.5.0:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-cv26UBz0-78/TwXTQsFolDI/AAAAAAAAAPE/FHURWThUm-w/s1600/nano-tech.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="377" src="http://2.bp.blogspot.com/-cv26UBz0-78/TwXTQsFolDI/AAAAAAAAAPE/FHURWThUm-w/s640/nano-tech.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;As well as being the fruit of several months of effort, this first milestone kicks off Virgo development in 2012 in a very exciting way.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-7359375249833079264?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/7359375249833079264/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=7359375249833079264' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/7359375249833079264'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/7359375249833079264'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2012/01/virgo-nano-technology.html' title='Virgo Nano Technology'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-cv26UBz0-78/TwXTQsFolDI/AAAAAAAAAPE/FHURWThUm-w/s72-c/nano-tech.jpg' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-5856680614014660535</id><published>2011-12-08T16:13:00.001Z</published><updated>2011-12-09T10:53:50.157Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Pax Exam'/><category scheme='http://www.blogger.com/atom/ns#' term='OSGi'/><category scheme='http://www.blogger.com/atom/ns#' term='Gradle'/><title type='text'>OSGi testing with Gradle and Pax Exam</title><content type='html'>I've recently been working on a Spring &lt;a href="https://jira.springsource.org/browse/SPR-8791"&gt;issue&lt;/a&gt; which involved writing a &lt;a href="http://www.gradle.org/"&gt;Gradle&lt;/a&gt;-built test to ensure that the Spring framework 3.1.x bundles successfully resolve in an OSGi container.&lt;br /&gt;&lt;br /&gt;The Gradle side of this was a very simple and pleasant experience, as the following extract of the file &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;build.gradle&lt;/span&gt; shows:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;apply plugin: 'java'&lt;br /&gt;apply plugin: 'eclipse'&lt;br /&gt;&lt;br /&gt;repositories {&lt;br /&gt;    mavenCentral()&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;dependencies {&lt;br /&gt;    ...                &lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;There were minor usability issues&lt;sup&gt;1&lt;/sup&gt; with the Gradle Eclipse plugin, but I gather these will soon be resolved.&lt;br /&gt;&lt;br /&gt;I decided to use &lt;a href="http://team.ops4j.org/wiki/display/paxexam/Pax+Exam"&gt;Pax Exam&lt;/a&gt; to launch the testcase inside &lt;a href="http://eclipse.org/equinox/"&gt;Equinox&lt;/a&gt;, and this require specifying some dependencies in &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;build.gradle&lt;/span&gt;:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;dependencies {&lt;br /&gt;    paxExamVersion = '2.3.0.M1'&lt;br /&gt;    equinoxVersion = '3.6.0.v20100517'&lt;br /&gt;    &lt;br /&gt;    testCompile "junit:junit:4.+",&lt;br /&gt;                "org.ops4j.pax.exam:pax-exam-junit4:$paxExamVersion",&lt;br /&gt;                "org.eclipse.osgi:org.eclipse.osgi:$equinoxVersion",&lt;br /&gt;                "javax.inject:javax.inject:1"&lt;br /&gt;                &lt;br /&gt;    testRuntime "org.ops4j.pax.exam:pax-exam-container-native:$paxExamVersion",&lt;br /&gt;                "org.ops4j.pax.exam:pax-exam-link-mvn:$paxExamVersion",&lt;br /&gt;                "org.ops4j.pax.url:pax-url-aether:1.3.5"&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Let's go through the dependencies in turn:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.junit.org/"&gt;JUnit 4&lt;/a&gt; is the test framework.&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="s1"&gt;@RunWith&lt;/span&gt;(JUnit4TestRunner.&lt;span class="s2"&gt;class&lt;/span&gt;)&lt;/span&gt; marks the test for launching under Pax Exam.&lt;/li&gt;&lt;li&gt;Equinox provides OSGi types at compile time and an OSGi container at runtime.&lt;/li&gt;&lt;li&gt;A bundle context is injected into the test using &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;@javax.inject.Inject&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;The test uses the &lt;i&gt;native&lt;/i&gt; Pax Exam container - all the tests run in a single JVM.&lt;/li&gt;&lt;li&gt;The test uses Pax Exam to install Spring bundles directly from Maven repositories.&lt;sup&gt;2&lt;/sup&gt;&lt;/li&gt;&lt;li&gt;The test caches bundles from the SpringSource Enterprise Bundle Repository using the Pax URL &lt;a href="http://team.ops4j.org/wiki/display/paxurl/Mvn+Protocol"&gt;Mvn protocol&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;The Pax Exam developers kindly helped me sort a basic setup issue which wasn't too obvious from the documentation. Thanks Harald and Toni!&amp;nbsp;I needed to explicitly install a JUnit bundle, by calling&amp;nbsp;&lt;a href="http://team.ops4j.org/wiki/display/paxexam/Configuration+Options#ConfigurationOptions-junitBundles"&gt;junitBundles&lt;/a&gt;&amp;nbsp;from the configuration method:&lt;/div&gt;&lt;br /&gt;&lt;pre&gt;    @Configuration&lt;br /&gt;    public static Option[] configuration() throws Exception {&lt;br /&gt;        return options(//&lt;br /&gt;            provisionSpringBundle("spring-core"), //&lt;br /&gt;            provisionSpringBundle("spring-beans"), //&lt;br /&gt;            // etc.&lt;br /&gt;            &lt;b&gt;junitBundles()&lt;/b&gt;);&lt;br /&gt;    }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The &lt;a href="https://github.com/glyn/testspringbundleresolution"&gt;full source&lt;/a&gt; of the project is available on github (under the Apache 2.0 license) for anyone who wants to give it a spin or use it for their own purposes. If you'd prefer to write your tests in Groovy, take a look at Hamlet D'Arcy's &lt;a href="http://hamletdarcy.blogspot.com/2009/08/testing-osgi-bundles-with-pax-exam.html"&gt;blog&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Footnote:&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;1: The generated .classpath contains absolute paths rather than paths relative to the project and so is not suitable for committing and sharing with others. Also re-running gradle eclipse without first deleting .classpath can result in it containing duplicate paths. Luke Daley tells me that both these problems will soon be fixed, the latter fix appearing in gradle 1.0 milestone 7.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;2:&amp;nbsp;If the testcase was intended a a stand-alone test of published versions of Spring, it would cache Spring bundles in the local Maven repository for efficiency.&amp;nbsp;But we plan to integrate the testcase into the Spring build in due course and so we'll want to grab the latest built version each time to cope with re-spins, so cacheing isn't helpful.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-5856680614014660535?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/5856680614014660535/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=5856680614014660535' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/5856680614014660535'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/5856680614014660535'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2011/12/osgi-testing-with-gradle-and-pax-exam.html' title='OSGi testing with Gradle and Pax Exam'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-4531079383651645902</id><published>2011-11-29T15:32:00.001Z</published><updated>2011-11-29T15:33:38.644Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSGi'/><category scheme='http://www.blogger.com/atom/ns#' term='Virgo'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><title type='text'>Virgo 3.0.2 released</title><content type='html'>Virgo 3.0.2 is available for &lt;a href="http://www.eclipse.org/virgo/download/"&gt;download&lt;/a&gt;. Please see the &lt;a href="http://www.eclipse.org/virgo/download/release-notes/3.0.2.RELEASE.php"&gt;release notes&lt;/a&gt; for details of this bug fix release.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-4531079383651645902?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/4531079383651645902/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=4531079383651645902' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/4531079383651645902'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/4531079383651645902'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2011/11/virgo-302-released.html' title='Virgo 3.0.2 released'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-5891139949014187256</id><published>2011-11-18T15:33:00.001Z</published><updated>2011-11-18T15:40:51.621Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='SourceTree'/><category scheme='http://www.blogger.com/atom/ns#' term='git'/><category scheme='http://www.blogger.com/atom/ns#' term='gitx'/><title type='text'>Opening SourceTree from the command line</title><content type='html'>I've recently started using &lt;a href="http://www.sourcetreeapp.com/"&gt;SourceTree&lt;/a&gt; to visualise and manage my git repos. It's very impressive.&lt;br /&gt;&lt;br /&gt;The one thing I missed from &lt;a href="http://gitx.frim.nl/"&gt;gitx&lt;/a&gt; was the ability to launch SourceTree from the command line, in any directory of the repo. One solution is to set a git alias:&lt;br /&gt;&lt;br /&gt;git config --global --add alias.sourcetree '!open -a SourceTree .'&lt;br /&gt;&lt;br /&gt;and add an alias in the shell profile:&lt;br /&gt;&lt;br /&gt;alias st='git sourcetree'&lt;br /&gt;&lt;br /&gt;Now I can issue "st" from the command line and the relevant SourceTree window opens up.&lt;br /&gt;&lt;br /&gt;(Thanks to Chris Frost for providing part of this solution.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-5891139949014187256?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/5891139949014187256/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=5891139949014187256' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/5891139949014187256'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/5891139949014187256'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2011/11/opening-sourcetree-from-command-line.html' title='Opening SourceTree from the command line'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-2264971929392209265</id><published>2011-11-14T11:11:00.001Z</published><updated>2011-11-14T11:24:06.231Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSGi'/><category scheme='http://www.blogger.com/atom/ns#' term='Virgo'/><title type='text'>What did we learn in 100 sprints?</title><content type='html'>This week marks the 100th Sprint on Eclipse Virgo! That includes the precursor project,&amp;nbsp;&lt;span style="background-color: transparent;"&gt;SpringSource dm Server.&amp;nbsp;&lt;/span&gt;&lt;span style="background-color: transparent;"&gt;What have we learned about scrum? Well, obviously, it's pretty good otherwise we would have ditched it long ago (and believe me I've been tempted a couple of times). But specifically...&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent;"&gt;Firstly, that one week sprints are by far the easiest to manage, both in terms of planning effort, but also psychologically. Even in a two week sprint, it's easy to put off unpleasant tasks until it's too late.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent;"&gt;Secondly, that the main value of scrum is to keep the team focussed on specific tasks during a sprint and enable progress to be shared easily at daily stand-up meetings.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent;"&gt;Thirdly, that story points are more effort than they are worth, so it's more effective to go with gut feel.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent;"&gt;Fourthly, that you have to take a relaxed attitude towards planning design work as it's almost impossible to predict the effort up front. Spikes are ok for small items, but sometimes you just need plenty of time to get your head round a large area.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-2264971929392209265?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/2264971929392209265/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=2264971929392209265' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/2264971929392209265'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/2264971929392209265'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2011/11/what-did-we-learn-in-100-sprints.html' title='What did we learn in 100 sprints?'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-8293131574501213684</id><published>2011-10-27T10:23:00.002+01:00</published><updated>2011-10-27T10:23:25.467+01:00</updated><title type='text'>Enterprise Bundle Repository Samples</title><content type='html'>After &lt;a href="http://underlap.blogspot.com/2011/05/opening-up-enterprise-bundle-repository.html"&gt;opening up&lt;/a&gt; the Enterprise Bundle Repository build system, I've added more sample&amp;nbsp;&lt;a href="https://github.com/glyn/bundlerepo/tree/master/templates"&gt;bundlor templates&lt;/a&gt; along with Ant/Ivy build files to github.&lt;br /&gt;&lt;br /&gt;So while we are trying to come up with a community-based successor to the EBR, if you need to get a new version of one of the bundles in the EBR, you may be able to find a bundlor template to use as a starting point.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-8293131574501213684?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/8293131574501213684/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=8293131574501213684' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/8293131574501213684'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/8293131574501213684'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2011/10/enterprise-bundle-repository-samples.html' title='Enterprise Bundle Repository Samples'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-4947791037396120248</id><published>2011-10-12T11:18:00.001+01:00</published><updated>2011-10-12T11:33:38.493+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSGi'/><title type='text'>Latest draft subsystems spec</title><content type='html'>The OSGi Alliance has made an &lt;a href="http://www.osgi.org/download/osgi-early-draft-2011-09.pdf"&gt;early draft&lt;/a&gt; of some RFCs available. This includes the subsystems RFC 152 I blogged about&amp;nbsp;&lt;a href="http://underlap.blogspot.com/2011/09/osgi-subsystems-in-virgo.html"&gt;earlier&lt;/a&gt;: see pages 72-144 of the PDF.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-4947791037396120248?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/4947791037396120248/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=4947791037396120248' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/4947791037396120248'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/4947791037396120248'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2011/10/latest-draft-subsystems-spec.html' title='Latest draft subsystems spec'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-529203459926510997</id><published>2011-10-05T16:00:00.001+01:00</published><updated>2011-10-06T10:40:31.745+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSGi'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><title type='text'>Eclipse Dance Steps</title><content type='html'>&lt;br /&gt;&lt;div style="background-color: white; font-family: Arial, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 17px; margin-bottom: 10px; margin-top: 10px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left;"&gt;Sometime Eclipse fails to work as expected. The following 'dances', in increasing order of desperation, may help. Remember to maintain a fixed grin throughout and try not to tread on your own toes.&lt;/div&gt;&lt;h2 style="background-color: white; border-bottom-color: rgb(102, 153, 0); color: #006600; font-family: Arial, Helvetica, FreeSans, sans-serif; font-size: 18pt; margin-bottom: 4px; margin-left: 0px; margin-right: 0px; margin-top: 32px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left;"&gt;&lt;a href="http://www2.blogger.com/blogger.g?blogID=34692233" name="EclipseDances-Refreshandcleanallprojects%28%22Quickstep%22%29"&gt;&lt;/a&gt;Refresh and clean all projects ("Quickstep")&lt;/h2&gt;&lt;div style="background-color: white; font-family: Arial, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 17px; margin-bottom: 10px; margin-top: 10px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left;"&gt;Click on a project in the Package Explorer. Hit Apple-A (or Ctrl-A) to select all projects. Hit F5 to refresh. Select Project-&amp;gt;Clean..., select "Clean all projects", and click Ok.&lt;/div&gt;&lt;h2 style="background-color: white; border-bottom-color: rgb(102, 153, 0); color: #006600; font-family: Arial, Helvetica, FreeSans, sans-serif; font-size: 18pt; margin-bottom: 4px; margin-left: 0px; margin-right: 0px; margin-top: 32px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left;"&gt;&lt;a href="http://www2.blogger.com/blogger.g?blogID=34692233" name="EclipseDances-Openandcloseallprojects%28%22Foxtrot%22%29"&gt;&lt;/a&gt;Open and close all projects ("Foxtrot")&lt;/h2&gt;&lt;div style="background-color: white; font-family: Arial, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 17px; margin-bottom: 10px; margin-top: 10px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left;"&gt;Click on a project in the Package Explorer. Hit Apple-A (or Ctrl-A) to select all projects. Right click the projects and select "Close Project". Right click the projects again and select "Open Project".&lt;/div&gt;&lt;h2 style="background-color: white; border-bottom-color: rgb(102, 153, 0); color: #006600; font-family: Arial, Helvetica, FreeSans, sans-serif; font-size: 18pt; margin-bottom: 4px; margin-left: 0px; margin-right: 0px; margin-top: 32px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left;"&gt;&lt;a href="http://www2.blogger.com/blogger.g?blogID=34692233" name="EclipseDances-OpenandcloseallprojectsrestartingEclipseinbetween%28%22Tango%22%29"&gt;&lt;/a&gt;Open and close all projects restarting Eclipse in between ("Tango")&lt;/h2&gt;&lt;div style="background-color: white; font-family: Arial, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 17px; margin-bottom: 10px; margin-top: 10px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left;"&gt;Click on a project in the Package Explorer. Hit Apple-A (or Ctrl-A) to select all projects. Right click the projects and select "Close Project". Restart Eclipse. Click on a project in the Package Explorer. Hit Apple-A (or Ctrl-A) to select all projects. Right click the projects again and select "Open Project".&lt;/div&gt;&lt;h2 style="background-color: white; border-bottom-color: rgb(102, 153, 0); color: #006600; font-family: Arial, Helvetica, FreeSans, sans-serif; font-size: 18pt; margin-bottom: 4px; margin-left: 0px; margin-right: 0px; margin-top: 32px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left;"&gt;&lt;a href="http://www2.blogger.com/blogger.g?blogID=34692233" name="EclipseDances-Deleteandreimportallprojects%28%22PasoDoble%22%29"&gt;&lt;/a&gt;Delete and re-import all projects ("Paso Doble")&lt;/h2&gt;&lt;div style="background-color: white; font-family: Arial, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 17px; margin-bottom: 10px; margin-top: 10px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left;"&gt;Click on a project in the Package Explorer. Hit Apple-A (or Ctrl-A) to select all projects. Press the delete key, select "Do not delete contents", and click Ok. Right click in the Package Explorer and select Import..., then choose General and "Existing Projects into Workspace" and click Next. Browse to select the platform checkout directory and click Choose. Select all the projects for import. Click Finish.&lt;/div&gt;&lt;h2 style="background-color: white; border-bottom-color: rgb(102, 153, 0); color: #006600; font-family: Arial, Helvetica, FreeSans, sans-serif; font-size: 18pt; margin-bottom: 4px; margin-left: 0px; margin-right: 0px; margin-top: 32px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left;"&gt;&lt;a href="http://www2.blogger.com/blogger.g?blogID=34692233" name="EclipseDances-Rebuildthesearchindices%28%22SlowWaltz%22%29"&gt;&lt;/a&gt;Rebuild the search indices ("Slow Waltz")&lt;/h2&gt;&lt;div style="background-color: white; font-family: Arial, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 17px; margin-bottom: 10px; margin-top: 10px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left;"&gt;Exit the workbench and delete the Java search index:&lt;/div&gt;&lt;ul style="background-color: white; font-family: Arial, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 17px; text-align: left;"&gt;&lt;li style="font-size: 10pt; line-height: 13pt; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;go into &lt;workspacedir&gt;\plugins\.metadata\.plugins\org.eclipse.jdt.core&lt;/workspacedir&gt;&lt;/li&gt;&lt;li style="font-size: 10pt; line-height: 13pt; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;delete 'savedIndexNames.txt'&lt;/li&gt;&lt;li style="font-size: 10pt; line-height: 13pt; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;delete all *.index&lt;br /&gt;Restart&lt;/li&gt;&lt;/ul&gt;&lt;h2 style="background-color: white; border-bottom-color: rgb(102, 153, 0); color: #006600; font-family: Arial, Helvetica, FreeSans, sans-serif; font-size: 18pt; margin-bottom: 4px; margin-left: 0px; margin-right: 0px; margin-top: 32px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left;"&gt;&lt;a href="http://www2.blogger.com/blogger.g?blogID=34692233" name="EclipseDances-Ifallelsefails"&gt;&lt;/a&gt;If all else fails&lt;/h2&gt;&lt;div style="background-color: white; font-family: Arial, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 17px; margin-bottom: 10px; margin-top: 10px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left;"&gt;If you're still stuck, try the "Hokey Cokey" by repeating all of the above until you've had enough.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-529203459926510997?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/529203459926510997/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=529203459926510997' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/529203459926510997'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/529203459926510997'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2011/10/eclipse-dance-steps.html' title='Eclipse Dance Steps'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-3877475029266610138</id><published>2011-10-03T11:10:00.001+01:00</published><updated>2011-10-03T15:27:37.739+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSGi'/><category scheme='http://www.blogger.com/atom/ns#' term='Virgo'/><title type='text'>How Infor ION Uses Virgo</title><content type='html'>Infor have kindly made available a &lt;a href="http://www.eclipse.org/virgo/references/How_Infor_ION_uses_Virgo.pdf"&gt;presentation&lt;/a&gt; on how their &lt;a href="http://www.infor.com/content/brochures/infor-ion.pdf/"&gt;ION&lt;/a&gt; integration product is based on the Virgo kernel.&amp;nbsp;They migrated from Equinox 3.5 to Virgo 2.1, added a lightweight web server (in preference to using&amp;nbsp;the pre-built Virgo Tomcat or Jetty servers) and a service wrapper, added Spring integration, upgraded Spring framework, added a watched repository, and then added various enterprise service bundles.&amp;nbsp;This is a perfect example of a Virgo kernel application, a so-called OSGi &lt;a href="http://www.redmonk.com/jgovernor/2008/02/05/osgi-and-the-rise-of-the-stackless-stack-just-in-time/"&gt;stackless stack&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The Infor team also helpfully pointed out some enhancements they'd like to see, some of which are already supported or planned for Virgo 3.5.&lt;br /&gt;&lt;br /&gt;According to their &lt;a href="http://www.infor.com/company/"&gt;website&lt;/a&gt;&amp;nbsp;Infor&amp;nbsp;is the world's third largest provider of enterprise applications and services, so it's nice to see another large company adopt Virgo.&lt;br /&gt;&lt;br /&gt;Thanks to Ian Skerrett for bringing this user to my attention. See his blog for &lt;a href="http://ianskerrett.wordpress.com/2011/10/03/case-study-eclipse-virgo-for-enterprise-integration/"&gt;more&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-3877475029266610138?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/3877475029266610138/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=3877475029266610138' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/3877475029266610138'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/3877475029266610138'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2011/10/how-infor-ion-uses-virgo.html' title='How Infor ION Uses Virgo'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-1541577751765964152</id><published>2011-09-30T09:40:00.000+01:00</published><updated>2011-09-30T15:07:23.956+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSGi'/><title type='text'>Extenders: Pattern or Anti-Pattern?</title><content type='html'>The &lt;a href="http://www.osgi.org/blog/2007/02/osgi-extender-model.html"&gt;extender pattern&lt;/a&gt; has become popular in recent years and has even been utilised in OSGi standards such as the Blueprint service and the Web Applications specification. In Virgo, we've been working with extenders from the start, but in spite of their advantages, they have some significant downsides. Since the OSGi Alliance is considering using extenders in other specifications, I agreed to document some of the issues.&lt;br /&gt;&lt;br /&gt;The first difficulty is knowing when an extender has finished processing a bundle. For example, a bundle containing a blueprint XML file will transition to ACTIVE state as soon as any bundle activator has been driven. But that's not the whole story. Administrators are interested in when the bundle is ready for use and so the management code in Virgo tracks the progress of the extender and presents an amalgamated state for the &lt;i&gt;install artefact&lt;/i&gt; representing the bundle. The install artefact stays in STARTING state until the application context has been published, at which point it transitions to ACTIVE. Without such additional infrastructure, administrator cannot tell when a bundle processed by an extender really is ready for business.&lt;br /&gt;&lt;br /&gt;That's the successful case, but there are complications in error cases too. The first complication is that since an extender runs in a separate thread to that which installed the bundle, if the extender throws an exception, this is not propagated to the code which installed the bundle. So the installer needs somehow to check for errors. Therefore Virgo has infrastructure to detect such errors and propagate them back to the thread which initiated deployment of the bundle: the deployment operation fails with a stack trace indicating what went wrong.&lt;br /&gt;&lt;br /&gt;The other error complication is where there is a (possibly indefinite) delay in an extender processing a bundle. For this kind of error Virgo tracks the progress of extender processing and issues warnings to the event log (intended for the administrator's eyes) saying which pieces of processing have been delayed and in some common situations, for example when a blueprint is waiting for a dependency, what is causing the delay.&lt;br /&gt;&lt;br /&gt;Extenders suffer from needing to be able to see bundle lifecycle events and so for systems that partition the framework, it is necessary to install each extender into multiple partitions. On the flip side it is crucial to prevent multiple instances of an extender from ever seeing the same bundle event otherwise they will both attempt to extend the bundle.&lt;br /&gt;&lt;br /&gt;Another issue with extenders is the need to keep them running and healthy as there is little indication that an extender is down or sickly other than bundles not being processed by the extender. Virgo takes care to ensure its extenders are correctly started and its infrastructure for detecting delays helps to diagnose extender crashes or sickness (both of which are extremely rare situations).&lt;br /&gt;&lt;br /&gt;There is also an issue in passing parameters to an extender to affect its behaviour. This is typically done by embedding extender configuration in the bundles being processed or by attaching a fragment containing configuration to the extender bundle. But since the extender is not driven by an API, the normal approach of passing parameters on a call is not available. Essentially, an extender model implies that the programming model for deployment is restricted to&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;BundleContext.installBundle&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;With considerable investment in additional infrastructure,&amp;nbsp;Virgo has managed to support the Blueprint and Spring DM extenders reasonably well. But in the case of the Web Applications extender, Virgo couldn't make this sufficiently robust and so it drives the underlying web componentry directly from the Virgo deployment pipeline to avoid the above issues.&lt;br /&gt;&lt;br /&gt;I understand at least one other server runtime project has encountered similar issues with extenders, so Virgo is not alone. There is a trade-off between loosely coupling the installer from the resource-specific processing, the main strength of the extender pattern (but far from unique to that pattern), and providing a robust programming model and usable management view -- crucial features of a server runtime -- which is far more straightforward without extenders.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-1541577751765964152?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/1541577751765964152/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=1541577751765964152' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/1541577751765964152'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/1541577751765964152'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2011/09/extenders-pattern-or-anti-pattern.html' title='Extenders: Pattern or Anti-Pattern?'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-4537057597038830372</id><published>2011-09-22T14:30:00.000+01:00</published><updated>2011-09-23T09:55:37.656+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSGi'/><category scheme='http://www.blogger.com/atom/ns#' term='Virgo'/><category scheme='http://www.blogger.com/atom/ns#' term='subsystems'/><category scheme='http://www.blogger.com/atom/ns#' term='plans'/><category scheme='http://www.blogger.com/atom/ns#' term='kernel'/><title type='text'>OSGi Subsystems in Virgo</title><content type='html'>A public draft(*) of the OSGi subsystems RFC (152) should soon emerge from the OSGi Alliance. A subsystem is a multi-bundle application, not dissimilar to a PAR or plan in Virgo. IBM is leading the spec work and a number of other vendors, including SpringSource/VMware, are contributing. Quite a few projects have multi-bundle application constructs, so it makes sense to agree a standard form.&lt;br /&gt;&lt;br /&gt;After going through the RFC again with my implementer's hat on, I listed the &lt;a href="https://bugs.eclipse.org/bugs/buglist.cgi?query_format=advanced;short_desc=[subsystems];short_desc_type=allwordssubstr"&gt;features&lt;/a&gt; necessary to support subsystems in Virgo. Most of the changes are in the Virgo kernel, although I hope to structure the support into non-subsystem specific generalisations of the kernel plus subsystem-specific code running in the user region.&lt;br /&gt;&lt;br /&gt;Currently, it is not possible to deploy a plan which contain artefacts that are already deployed. This will need generalising so that we can support subsystems using a common data structure of deployed artefacts: a directed acyclic graph (DAG) rather than the current collection of trees.&lt;br /&gt;&lt;br /&gt;The switch to a DAG has interesting implications for lifecycle management of shared subgraphs. With today's tree, when a node is stopped, started, or uninstalled, any subtrees are also stopped, started, or uninstalled, respectively. With a DAG, shared subgraphs need to be sensitive to all their parents.&amp;nbsp;This boils down to keeping each shared subgraph at the &lt;i&gt;maximum&lt;/i&gt; state required by any of its parents. States are ordered: ACTIVE &amp;gt; RESOLVED &amp;gt; UNINSTALLED.&lt;br /&gt;&lt;br /&gt;Lifecycle management will also get interesting when a shared subgraph belongs to one or more atomic subgraphs as then lifecycle changes in the common subgraph will propagate to all the containing atomic subgraphs. I think that will just "work", but users might need to be careful in their use of atomic plans if they want to avoid management operations on one application affecting other applications.&lt;br /&gt;&lt;br /&gt;I'm also considering using &lt;a href="http://en.wikipedia.org/wiki/Garbage_collection_(computer_science)"&gt;garbage collection&lt;/a&gt; as a means of uninstalling artefacts which are no longer needed. Given the number of types of dependency that are possible, this is likely to be more reliable than the alternative of maintaining reference counts.&lt;br /&gt;&lt;br /&gt;I'm a little concerned about a possible race between garbage collection detecting an artefact as dead and a new dependency being created on the artefact just before garbage collection goes ahead and uninstalls the artefact, but there would be a similar concern for reference counting. The basic issue in this race is that a dead artefact may be found&amp;nbsp;by a live bundle&amp;nbsp;and a new dependency created before the dead artefact can be uninstalled. For instance, a dead bundle may be found by using the OSGi API to list all bundles. It may be possible to use some technique such as a special region in the region digraph to isolate dead bundles, although this issue is probably something to discuss among those working on the RFC.&lt;br /&gt;&lt;br /&gt;Anyway, there's plenty of work to be getting on with. I haven't done detailed estimates of the features identified so far, but I guess there's a person year or so of effort needed, so I'm initially targeting Virgo 4.0. If you feel like lending a hand, please get in touch on &lt;a href="https://dev.eclipse.org/mailman/listinfo/virgo-dev"&gt;virgo-dev&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;* - RFC 152 has changed quite a bit since the version in the &lt;a href="http://www.osgi.org/download/osgi-early-draft-2011-05.pdf"&gt;Enterprise spec early access draft&lt;/a&gt; dated 16 May 2011. A new draft is being prepared.&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-4537057597038830372?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/4537057597038830372/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=4537057597038830372' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/4537057597038830372'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/4537057597038830372'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2011/09/osgi-subsystems-in-virgo.html' title='OSGi Subsystems in Virgo'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-322290190007010585</id><published>2011-08-25T10:46:00.000+01:00</published><updated>2012-01-09T11:56:31.016Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSGi'/><category scheme='http://www.blogger.com/atom/ns#' term='Virgo'/><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='Jetty'/><category scheme='http://www.blogger.com/atom/ns#' term='Gemini'/><title type='text'>New Releases: Virgo 3.0 and Gemini Web 2.0</title><content type='html'>Virgo 3.0 and Gemini Web 2.0, collectively known as the &lt;a href="http://wiki.eclipse.org/Virgo/Future#Release_Branding"&gt;Maya&lt;/a&gt; release, are available for &lt;a href="http://www.eclipse.org/virgo/download/"&gt;download&lt;/a&gt; and &lt;a href="http://www.eclipse.org/gemini/web/download/"&gt;download&lt;/a&gt;, respectively.&lt;br /&gt;&lt;br /&gt;The team of committers has expanded considerably and, although the team is now distributed geographically, we have a great working relationship. I'm delighted that these projects are now community collaborations rather than the work of a single vendor.&lt;br /&gt;&lt;br /&gt;The theme of Virgo 3.0 is better integration with EclipseRT technologies. To that end, we have created a Jetty variant of the Virgo web server and have switched from Felix to Equinox implementations of some OSGi services. &lt;a href="http://underlap.blogspot.com/2011/07/exploiting-p2-in-eclipsert-projects.html"&gt;Integration with p2&lt;/a&gt; is proving a tough nut to crack and is deferred to the Bondi (3.5) release, although we expect to issue a milestone soon to get some feedback from the user community.&lt;br /&gt;&lt;br /&gt;Gemini Web and the Tomcat variant of the Virgo web server have been upgraded to Tomcat 7 and Servlet 3.0.&lt;br /&gt;&lt;br /&gt;Gemini Web 2.0 passes the OSGi Web Applications compliance tests and will replace the SpringSource OSGi Web Container as the&amp;nbsp;OSGi Web Applications reference implementation.&lt;br /&gt;&lt;br /&gt;The &lt;i&gt;snaps&lt;/i&gt; framework for modular web applications is also released as part of Maya. This started life as the SpringSource &lt;i&gt;slices&lt;/i&gt; prototype.&lt;br /&gt;&lt;br /&gt;Virgo kernel 3.0 has a new shell based on Apache Felix &lt;a href="http://felix.apache.org/site/apache-felix-gogo.html"&gt;Gogo&lt;/a&gt; for both the kernel and user region and accessible via telnet or ssh.&lt;br /&gt;&lt;br /&gt;The 3.0 kernel also uses a new implementation of regions, the&amp;nbsp;&lt;a href="http://underlap.blogspot.com/2011/05/equinox-digraph-ready-for-use.html"&gt;region digraph&lt;/a&gt;,&amp;nbsp;based on OSGi standard framework hooks. The digraph should position Virgo well for implementing the OSGi Subsystems specification in a future release. (The specification is still under development, but we expect a public draft from the OSGi Alliance before long.)&amp;nbsp;The digraph has moved from Virgo to Equinox to enable it to be used by other projects, especially those that are aiming to implement the Subsystems spec.&lt;br /&gt;&lt;br /&gt;Highlights:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;New Virgo Jetty Server&lt;/li&gt;&lt;li&gt;Virgo Tomcat Server and Gemini Web upgraded to Tomcat 7 and Servlet 3.0&lt;/li&gt;&lt;li&gt;New Snaps framework for modular web applications with&amp;nbsp;&lt;a href="http://www.eclipse.org/virgo/documentation/virgo-documentation-3.0.0.RELEASE/docs/snaps-guide/htmlsingle/virgo-snaps-guide.html"&gt;new guide&lt;/a&gt;&lt;/li&gt;&lt;li&gt;New Gogo shell&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.eclipse.org/gemini/web/documentation/gemini-web-documentation-2.0.1.RELEASE/gemini-web-user-guide/htmlsingle/gemini-web-user-guide.html"&gt;New user guide&lt;/a&gt;&amp;nbsp;for Gemini Web&lt;/li&gt;&lt;li&gt;Updated &lt;a href="http://www.eclipse.org/virgo/samples/"&gt;GreenPages sample&lt;/a&gt; with &lt;a href="http://www.eclipse.org/virgo/documentation/greenpages-documentation-2.4.0.RELEASE/docs/htmlsingle/greenpages-guide.html"&gt;new guide&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;See the release notes for details.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-322290190007010585?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/322290190007010585/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=322290190007010585' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/322290190007010585'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/322290190007010585'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2011/08/new-releases-virgo-30-and-gemini-web-20.html' title='New Releases: Virgo 3.0 and Gemini Web 2.0'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-7696703975471400353</id><published>2011-08-03T15:44:00.000+01:00</published><updated>2011-08-03T15:44:02.546+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSGi'/><category scheme='http://www.blogger.com/atom/ns#' term='Virgo'/><category scheme='http://www.blogger.com/atom/ns#' term='cloud'/><category scheme='http://www.blogger.com/atom/ns#' term='CloudFoundry'/><title type='text'>OSGi Running in the Cloud: Virgo in CloudFoundry</title><content type='html'>I'm just been tryout out Hristo Iliev's support for Virgo in CloudFoundry, described on his &lt;a href="http://hsiliev.blogspot.com/2011/07/virgo-and-cloud.html"&gt;blog&lt;/a&gt;. The VM took a few hours to download and a few minutes to unzip, but then starting CloudFoundry and deploying an application to a Virgo instance worked first time.&lt;br /&gt;&lt;br /&gt;CloudFoundry takes a little while to get started:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-YAU5rUKfQU0/TjlYZuB0xWI/AAAAAAAAAMU/mUjmUG_1o1Q/s1600/Screen%2BShot%2B2011-08-03%2Bat%2B15.11.08.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="506" src="http://2.bp.blogspot.com/-YAU5rUKfQU0/TjlYZuB0xWI/AAAAAAAAAMU/mUjmUG_1o1Q/s640/Screen%2BShot%2B2011-08-03%2Bat%2B15.11.08.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-AIwCZVCNMZM/TjlY3Jykd-I/AAAAAAAAAMc/QRLo6xrxlEs/s1600/Screen%2BShot%2B2011-08-03%2Bat%2B15.17.16.png" imageanchor="1" style="clear: left; display: inline !important; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="-webkit-text-decorations-in-effect: none; color: black;"&gt;But then it's trivial to deploy an application to a Virgo instance:&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-AIwCZVCNMZM/TjlY3Jykd-I/AAAAAAAAAMc/QRLo6xrxlEs/s1600/Screen%2BShot%2B2011-08-03%2Bat%2B15.17.16.png" imageanchor="1" style="clear: left; display: inline !important; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="282" src="http://4.bp.blogspot.com/-AIwCZVCNMZM/TjlY3Jykd-I/AAAAAAAAAMc/QRLo6xrxlEs/s640/Screen%2BShot%2B2011-08-03%2Bat%2B15.17.16.png" width="640" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;after which the application, in this case the Virgo web admin console, runs as expected at the application URL http://virgo.vcap.me:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-EZMxrnygx4s/TjlZqrVj62I/AAAAAAAAAMk/z-p0BsdtB5s/s1600/Screen%2BShot%2B2011-08-03%2Bat%2B15.20.43.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="360" src="http://1.bp.blogspot.com/-EZMxrnygx4s/TjlZqrVj62I/AAAAAAAAAMk/z-p0BsdtB5s/s640/Screen%2BShot%2B2011-08-03%2Bat%2B15.20.43.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;and jconsole shows where the Virgo instance has been created:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-KtGLMOSktMM/Tjla2p-ibkI/AAAAAAAAAMs/-ySpWGC0wws/s1600/Screen%2BShot%2B2011-08-03%2Bat%2B15.25.49.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="232" src="http://4.bp.blogspot.com/-KtGLMOSktMM/Tjla2p-ibkI/AAAAAAAAAMs/-ySpWGC0wws/s640/Screen%2BShot%2B2011-08-03%2Bat%2B15.25.49.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The cloud nature of this setup becomes more apparent when another application is deployed. Since I'm lazy, I deployed the same application under a different name:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-yjer-H9_HQ8/TjlcHfx-TPI/AAAAAAAAAM0/r33CWyNWyn0/s1600/Screen%2BShot%2B2011-08-03%2Bat%2B15.31.28.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="318" src="http://3.bp.blogspot.com/-yjer-H9_HQ8/TjlcHfx-TPI/AAAAAAAAAM0/r33CWyNWyn0/s640/Screen%2BShot%2B2011-08-03%2Bat%2B15.31.28.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The application is then available at http://virgo2.vcap.me and jconsole shows there are now two Virgo instances running:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-IjRL99kWUlU/TjlcpFmeL-I/AAAAAAAAAM8/tY8poe-Jvgo/s1600/Screen%2BShot%2B2011-08-03%2Bat%2B15.33.44.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="326" src="http://2.bp.blogspot.com/-IjRL99kWUlU/TjlcpFmeL-I/AAAAAAAAAM8/tY8poe-Jvgo/s640/Screen%2BShot%2B2011-08-03%2Bat%2B15.33.44.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I'm looking forward to Hristo's pull requests become merged into the CloudFoundry base and maybe eventually Virgo showing up in some clouds near you.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-7696703975471400353?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/7696703975471400353/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=7696703975471400353' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/7696703975471400353'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/7696703975471400353'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2011/08/osgi-running-in-cloud-virgo-in.html' title='OSGi Running in the Cloud: Virgo in CloudFoundry'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-YAU5rUKfQU0/TjlYZuB0xWI/AAAAAAAAAMU/mUjmUG_1o1Q/s72-c/Screen%2BShot%2B2011-08-03%2Bat%2B15.11.08.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-3785579340011712810</id><published>2011-07-26T10:09:00.001+01:00</published><updated>2011-07-26T10:13:04.747+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSGi'/><category scheme='http://www.blogger.com/atom/ns#' term='Virgo'/><category scheme='http://www.blogger.com/atom/ns#' term='snaps'/><title type='text'>Virgo 3.0 (Maya) Release Candidate 1</title><content type='html'>The first Release Candidate of Virgo 3.0 (Maya) is available for &lt;a href="http://www.eclipse.org/virgo/download/"&gt;download&lt;/a&gt;. See the &lt;a href="http://www.eclipse.org/virgo/download/release-notes/3.0.0.RC1.php"&gt;release notes&lt;/a&gt; for details.&lt;br /&gt;&lt;br /&gt;RC1 finally brings the snaps framework for modular web applications&amp;nbsp;out of prototype status. The separate snaps download includes a completely new &lt;a href="http://www.eclipse.org/virgo/documentation/virgo-documentation-3.0.0.x/docs/snaps-guide/htmlsingle/virgo-snaps-guide.html"&gt;Virgo Snaps User Guide&lt;/a&gt;&amp;nbsp;and a comprehensive sample application. The User Guide describes how to install snaps on top of Virgo Tomcat Server and uses the sample application to verify the installation and step through all the major features of snaps.&lt;br /&gt;&lt;br /&gt;RC1 of Virgo Tomcat Server embeds Gemini Web 2.0 RC1 which now comes with new documentation in the form of  a &lt;a href="http://www.eclipse.org/gemini/web/documentation/gemini-web-documentation-2.0.0.x/gemini-web-user-guide/htmlsingle/gemini-web-user-guide.html"&gt;User Guide&lt;/a&gt;&amp;nbsp;plus a minimal&amp;nbsp;&lt;a href="http://www.eclipse.org/gemini/web/documentation/gemini-web-documentation-2.0.0.x/gemini-web-programmer-guide/htmlsingle/gemini-web-programmer-guide.html"&gt;Programmer Guide&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;We encourage users to take RC1 for a spin and provide feedback via bugzilla or the Virgo forum. Unless critical bugs are found, we'll be focussing on the documentation until 3.0 is released, probably towards the end of August.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-3785579340011712810?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/3785579340011712810/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=3785579340011712810' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/3785579340011712810'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/3785579340011712810'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2011/07/virgo-30-maya-release-candidate-1.html' title='Virgo 3.0 (Maya) Release Candidate 1'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-4563414572669166823</id><published>2011-07-14T15:13:00.000+01:00</published><updated>2011-07-14T15:13:45.069+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='p2'/><category scheme='http://www.blogger.com/atom/ns#' term='EclipseRT'/><category scheme='http://www.blogger.com/atom/ns#' term='OSGi'/><category scheme='http://www.blogger.com/atom/ns#' term='Virgo'/><title type='text'>Exploiting p2 in EclipseRT projects</title><content type='html'>Virgo committer Borislav Kapukaranov has written an interesting blog entitled &lt;a href="http://bkapukaranov.wordpress.com/2011/07/12/rt-meets-p2/"&gt;"RT meets p2"&lt;/a&gt;. Here he gives some of the background behind the work to integrate p2 into Virgo (&lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=343543"&gt;bug 343543&lt;/a&gt;) which is targetting the Azure (3.5) release of Virgo.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-4563414572669166823?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/4563414572669166823/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=4563414572669166823' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/4563414572669166823'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/4563414572669166823'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2011/07/exploiting-p2-in-eclipsert-projects.html' title='Exploiting p2 in EclipseRT projects'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-2421302829174629690</id><published>2011-07-05T16:01:00.000+01:00</published><updated>2011-07-05T16:01:41.642+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSGi'/><category scheme='http://www.blogger.com/atom/ns#' term='Virgo'/><title type='text'>Virgo Maya (3.0) feature freeze at milestone 6</title><content type='html'>Milestone 6 of the Virgo &lt;a href="http://wiki.eclipse.org/Virgo/Future#Release_Branding"&gt;Maya&lt;/a&gt; (3.0) release is available for &lt;a href="http://www.eclipse.org/virgo/download/"&gt;download&lt;/a&gt;. This milestone marks the feature freeze of Maya, so we'll be working on bugs and documentation from now on. We plan to ship the release in August.&lt;br /&gt;&lt;br /&gt;The milestone includes the new shell based on &lt;a href="http://felix.apache.org/site/apache-felix-gogo.html"&gt;Apache Felix GoGo&lt;/a&gt;, accessible via telnet or ssh as described in the&lt;a href="http://www.eclipse.org/virgo/download/release-notes/3.0.0.M06.php"&gt; release notes&lt;/a&gt;.&amp;nbsp;There are a few &lt;a href="https://bugs.eclipse.org/bugs/buglist.cgi?query_format=advanced;short_desc=%5BGoGo%5D;short_desc_type=allwordssubstr;version=3.0.0.M06;component=runtime;classification=RT;product=Virgo"&gt;bugs&lt;/a&gt; in this support which need fixing, but apart from that the new function is in good shape for trying out.&lt;br /&gt;&lt;br /&gt;This milestone also includes snaps for the first time. Snaps is a framework supporting modular OSGi web applications. We are bringing snaps out of prototype status in Maya, primarily by documenting its function and limitations in the next few weeks. Several groups are using snaps, so this should give them a more stable base. Including snaps in the release process will ensure it stays in step with Virgo Tomcat Server as the two evolve.&lt;br /&gt;&lt;br /&gt;Finally, this milestone moves Virgo Jetty Server out of prototype status as the User and Programmer Guides now include appropriate documentation.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-2421302829174629690?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/2421302829174629690/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=2421302829174629690' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/2421302829174629690'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/2421302829174629690'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2011/07/virgo-maya-30-feature-freeze-at.html' title='Virgo Maya (3.0) feature freeze at milestone 6'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-456817008508001804</id><published>2011-06-27T15:35:00.001+01:00</published><updated>2011-06-27T15:35:25.893+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSGi'/><category scheme='http://www.blogger.com/atom/ns#' term='Virgo'/><title type='text'>First milestone of Virgo tooling</title><content type='html'>The first milestone of the Virgo IDE tooling is available. See the wiki for &lt;a href="http://wiki.eclipse.org/Virgo/Tooling"&gt;instructions&lt;/a&gt;. It should provide approximately the same level of function as the Virgo tooling that was provided as part of SpringSource Tool Suite (STS). It works nicely on Eclipse Indigo and Helios SR2, for example.&lt;br /&gt;&lt;br /&gt;The basic functions allow you to develop OSGi bundles, including Web Application Bundles, and PARs and deploy them to an instance of Virgo Tomcat Server (or Virgo Web Server if you prefer to run v2.1 rather than a 3.0 milestone) running under the control of the tooling. It is also possible to develop plans, but this needs documenting better as it's not immediately obvious how to do it. See an &lt;a href="http://underlap.blogspot.com/2010/11/how-to-develop-with-virgo-kernel-in.html"&gt;earlier blog post&lt;/a&gt; if you need to run the Virgo kernel instead of Virgo Tomcat Server.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-o4JTQJc0wIU/TgiTzVvrOQI/AAAAAAAAAKs/JqxNcVVwGiA/s1600/Screen%2Bshot%2B2011-06-27%2Bat%2B15.07.53.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-o4JTQJc0wIU/TgiTzVvrOQI/AAAAAAAAAKs/JqxNcVVwGiA/s1600/Screen%2Bshot%2B2011-06-27%2Bat%2B15.07.53.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Please direct discussion to the &lt;a href="http://www.eclipse.org/forums/index.php?t=thread&amp;amp;frm_id=159"&gt;Virgo forum&lt;/a&gt; and raise bugs on&amp;nbsp;&lt;a href="https://bugs.eclipse.org/bugs/buglist.cgi?query_format=advanced;component=tooling;product=Virgo;classification=RT"&gt;bugzilla&lt;/a&gt;&amp;nbsp;(thanks Daniël van 't Ooster for the bugs you raised while I was writing this blog!).&amp;nbsp;The&amp;nbsp;&lt;a href="http://wiki.eclipse.org/Virgo/Source"&gt;source&lt;/a&gt;&amp;nbsp;is available in Eclipse git for anyone who wants to make changes and/or send in patches. We are keen to encourage new contributors to Virgo in general and the Virgo tooling in particular.&lt;br /&gt;&lt;br /&gt;What next? Well, the most urgent feature, &lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=341910"&gt;bug 341910&lt;/a&gt;&amp;nbsp;which is a pre-req to the first release,&amp;nbsp;is to remove the dependency on Spring IDE.&lt;br /&gt;&lt;br /&gt;Then, over time, we expect to align the Virgo tooling with the Eclipse Libra project. Libra provides tooling for OSGi standards, so we aim to move the OSGi standard features of the Virgo tooling to Libra and end up with the Virgo tooling being a Virgo-specific extension of Libra.&lt;br /&gt;&lt;br /&gt;Congratulations to Martin Lippert who started with the STS code and single-handedly achieved this milestone! You can see him in last week's &lt;a href="http://skillsmatter.com/podcast/java-jee/osgi-development-tooling-panel-2320/js-2154"&gt;OSGi Development Tooling Panel&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-456817008508001804?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/456817008508001804/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=456817008508001804' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/456817008508001804'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/456817008508001804'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2011/06/file-milestone-of-virgo-tooling.html' title='First milestone of Virgo tooling'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-o4JTQJc0wIU/TgiTzVvrOQI/AAAAAAAAAKs/JqxNcVVwGiA/s72-c/Screen%2Bshot%2B2011-06-27%2Bat%2B15.07.53.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-4175182454023319234</id><published>2011-06-27T14:47:00.000+01:00</published><updated>2011-06-27T14:47:22.739+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSGi'/><category scheme='http://www.blogger.com/atom/ns#' term='Java 8'/><category scheme='http://www.blogger.com/atom/ns#' term='Jigsaw'/><title type='text'>Jigsaw déjà vu</title><content type='html'>I recently &lt;a href="http://mail.openjdk.java.net/pipermail/jigsaw-dev/2011-June/001331.html"&gt;questioned&lt;/a&gt; one of the Jigsaw requirements on the &lt;a href="http://mail.openjdk.java.net/mailman/listinfo/jigsaw-dev"&gt;jigsaw-dev&lt;/a&gt; mailing list. I agree with the general direction for interoperability with OSGi, but I wanted to suggest an improvement:&lt;br /&gt;&lt;br /&gt;&lt;pre style="white-space: pre-wrap;"&gt;Hi Mark&lt;br /&gt;&lt;br /&gt;I'm pleased to see the explicit acknowledgement of some basic OSGi interoperation requirements in the requirements document ([1]).&lt;br /&gt;&lt;br /&gt;I agree with David Bosschaert ([2]), that it would make sense for OSGi to support the Java SE 8 module format and, for modules which can serve equally well as OSGi bundles, I'd like to avoid dual-maintenance of module metadata and OSGi manifest. I'd like to be able to "decorate" the standard metadata.&lt;br /&gt;&lt;br /&gt;However, the requirement "The syntax must place all extended metadata after all standard metadata, with a clear delineation between them." precludes inline decorations. The result would be duplication and clunkiness.&lt;br /&gt;&lt;br /&gt;I propose that this requirement be changed so that standard metadata could be decorated inline (the decorations would be ignored by the Java SE module system).&lt;br /&gt;&lt;br /&gt;What do you think?&lt;br /&gt;&lt;br /&gt;Regards,&lt;br /&gt;Glyn&lt;br /&gt;[1] &lt;a href="http://openjdk.java.net/projects/jigsaw/doc/draft-java-module-system-requirements-12"&gt;http://openjdk.java.net/projects/jigsaw/doc/draft-java-module-system-requirements-12&lt;/a&gt;&lt;br /&gt;[2] &lt;a href="http://osgithoughts.blogspot.com/2011/05/java-se-8-modularity-requirements.html"&gt;http://osgithoughts.blogspot.com/2011/05/java-se-8-modularity-requirements.html&lt;/a&gt;&lt;/pre&gt;&lt;br /&gt;The response: zilch!&lt;br /&gt;&lt;br /&gt;After a &lt;a href="http://mail.openjdk.java.net/pipermail/jigsaw-dev/2011-June/001354.html"&gt;follow-up&lt;/a&gt;, I got a single supportive &lt;a href="http://mail.openjdk.java.net/pipermail/jigsaw-dev/2011-June/001355.html"&gt;response&lt;/a&gt;, but that was from OSGi aficionado Peter Kriens.&lt;br /&gt;&lt;br /&gt;I would have preferred some defence of the current requirement rather than silence. This is awfully like the days of JSRs 277 and 294. Plus ça change, plus c'est la même chose...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-4175182454023319234?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/4175182454023319234/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=4175182454023319234' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/4175182454023319234'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/4175182454023319234'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2011/06/jigsaw-deja-vu.html' title='Jigsaw déjà vu'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-8808949908948493790</id><published>2011-06-14T14:43:00.000+01:00</published><updated>2011-06-14T14:43:07.475+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Virgo'/><title type='text'>Virgo 3.0 plan update</title><content type='html'>The feature to provision Virgo using p2 is taking a while to finalise. Also, it changes the directory layout of Virgo and so will need some changes to the tooling. So we've decided to defer the feature to a later release, possibly 3.5 to indicate the relatively big jump from 3.0.&lt;br /&gt;&lt;br /&gt;This means the 3.0 release content is pretty much complete, so we &lt;i&gt;just&lt;/i&gt; have to fix a few remaining bugs and polish the documentation before releasing, probably in July or August 2011.&lt;br /&gt;&lt;br /&gt;See the &lt;a href="http://wiki.eclipse.org/Virgo/Future#Virgo_Plan"&gt;plan&lt;/a&gt; on the Virgo wiki for details.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-8808949908948493790?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/8808949908948493790/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=8808949908948493790' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/8808949908948493790'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/8808949908948493790'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2011/06/virgo-30-plan-update.html' title='Virgo 3.0 plan update'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-7471780107104069653</id><published>2011-06-01T16:59:00.001+01:00</published><updated>2011-06-01T17:00:43.305+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSGi'/><category scheme='http://www.blogger.com/atom/ns#' term='Virgo'/><title type='text'>Eclipse Virgo 3.0.0 Milestone 5</title><content type='html'>Milestone 5 of Virgo 3.0.0 is available for&amp;nbsp;&lt;a href="http://www.eclipse.org/virgo/download/milestones.php" style="color: #3c61b2; text-decoration: none;"&gt;download&lt;/a&gt;. This is an important milestone which adds significant functional enhancements, upgrades several dependencies to their latest levels including Spring 3.0.5, Tomcat 7.0.12, and Servlet 3.0, and fixes a number of bugs. Full details are available in the&amp;nbsp;&lt;a href="http://www.eclipse.org/virgo/download/release-notes/3.0.0.M05.php" style="color: #3c61b2; text-decoration: none;"&gt;release notes&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-7471780107104069653?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/7471780107104069653/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=7471780107104069653' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/7471780107104069653'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/7471780107104069653'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2011/06/eclipse-virgo-300-milestone-5.html' title='Eclipse Virgo 3.0.0 Milestone 5'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-1896542618512557787</id><published>2011-05-09T16:12:00.000+01:00</published><updated>2011-05-09T16:12:32.990+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSGi'/><category scheme='http://www.blogger.com/atom/ns#' term='Virgo'/><category scheme='http://www.blogger.com/atom/ns#' term='Equinox'/><title type='text'>Equinox digraph ready for use</title><content type='html'>&lt;a href="http://underlap.blogspot.com/2011/02/stumbling-towards-better-design.html"&gt;Previously&lt;/a&gt; I described how Virgo used OSGi framework hooks to implement a directed graph, or &lt;i&gt;digraph&lt;/i&gt;, of isolated groups of bundles known as &lt;i&gt;regions&lt;/i&gt;. The region digraph has now moved to Equinox and I'm modifying Virgo to use the Equinox region digraph in place of Virgo's own (see &lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=343364"&gt;bug 343364&lt;/a&gt; for details).&lt;br /&gt;&lt;br /&gt;I always prefer making such changes in an incremental way, so the first step was to add the Equinox &lt;a href="http://download.eclipse.org/equinox/drops/I20110507-0800/download.php?dropFile=org.eclipse.equinox.region_1.0.0.v20110503.jar"&gt;region digraph bundle&lt;/a&gt; to the Virgo kernel without exploiting it. The Virgo kernel runs fine with the Equinox region digraph in situ. This is because the Equinox digraph adds all bundles to its kernel region and so provides no isolation between those bundles. Later, Virgo's region digraph partitions the bundles in Virgo kernel and Virgo user regions with appropriate isolation and things continue to work as normal.&lt;br /&gt;&lt;br /&gt;This is interesting, but not particularly useful. The whole point of the region digraph abstraction was to make it easy for multiple parties wishing to provide isolation via the OSGi framework hooks to be able to collaborate together by sharing and manipulating a single region digraph. It was never intended that multiple digraphs should co-exist.&lt;br /&gt;&lt;br /&gt;But there is a useful point here. If you have an Equinox-based system, of which there are many, you can introduce the Equinox digraph with &lt;u&gt;zero&lt;/u&gt; functional impact. All your bundles, including those installed before and after the Equinox region bundle, go in the Equinox kernel region and there is no isolation between those bundles.&lt;br /&gt;&lt;br /&gt;When you want to start exploiting the digraph, you can use the &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;RegionDigraph&lt;/span&gt; service to create a new region, attach it with appropriate filters, if any, to and from the kernel region, and then install a bundle into the new region using the &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Region.installBundle&lt;/span&gt; operation. After starting this bundle, you will then have a bundle context that can be used to install further bundles into the new region using the OSGi standard &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;BundleContext&lt;/span&gt; API.&lt;br /&gt;&lt;br /&gt;I hope this will inspire you to have a go at using the Equinox region digraph if you are an Equinox user and need to isolate groups of bundles.&lt;br /&gt;&lt;br /&gt;Meanwhile, the standardisation of multi-bundle applications, including isolation, continues in the OSGi Alliance and a public draft of this spec should be available in the not too distant future. I hope the Equinox region digraph will be used more widely and this will help to provide feedback on the spec work.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-1896542618512557787?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/1896542618512557787/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=1896542618512557787' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/1896542618512557787'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/1896542618512557787'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2011/05/equinox-digraph-ready-for-use.html' title='Equinox digraph ready for use'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-5070653686719571787</id><published>2011-05-09T12:13:00.000+01:00</published><updated>2011-05-09T12:13:00.960+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSGi'/><category scheme='http://www.blogger.com/atom/ns#' term='EBR'/><title type='text'>Opening up the Enterprise Bundle Repository</title><content type='html'>We'd like to enable the SpringSource Enterprise Bundle Repository to turn into a shared community resource.&lt;br /&gt;&lt;br /&gt;As a first, small step in that direction, I've made available the EBR build system (a few Ant/Ivy scripts) and some sample bundle projects on &lt;a href="https://github.com/glyn/bundlerepo"&gt;github&lt;/a&gt;. If you want to try it out, clone the repository and refer to doc/README.txt.&lt;br /&gt;&lt;br /&gt;The idea is that the community will be able to add bundles to this repository and then the content can be hosted in some cloud storage similar to the way the SpringSource EBR is hosted in Amazon S3.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-5070653686719571787?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/5070653686719571787/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=5070653686719571787' title='15 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/5070653686719571787'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/5070653686719571787'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2011/05/opening-up-enterprise-bundle-repository.html' title='Opening up the Enterprise Bundle Repository'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><thr:total>15</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-124194642537090530</id><published>2011-05-03T11:39:00.004+01:00</published><updated>2011-05-04T09:05:04.312+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSGi'/><category scheme='http://www.blogger.com/atom/ns#' term='dm Server'/><category scheme='http://www.blogger.com/atom/ns#' term='Virgo'/><category scheme='http://www.blogger.com/atom/ns#' term='survey'/><title type='text'>Virgo survey results</title><content type='html'>Thanks to everyone who responded to the recent Eclipse Virgo and SpringSource dm Server survey. The results make interesting reading.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Close to one quarter of respondents report they are "in production".&lt;/b&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-somhUBlpZrs/Tb_PCxwim-I/AAAAAAAAAJk/JPX7ux3Uc94/s1600/Screen+shot+2011-05-03+at+10.45.16.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-somhUBlpZrs/Tb_PCxwim-I/AAAAAAAAAJk/JPX7ux3Uc94/s1600/Screen+shot+2011-05-03+at+10.45.16.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;The transfer to Eclipse.org is a success.&lt;/b&gt; It is 6 months since the first Virgo release and 84% of respondents are now using Virgo exclusively with only 13% using dm Server exclusively.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-FtaHZLSGVYI/Tb_P_dYiQkI/AAAAAAAAAJs/3JgWNzLBl8c/s1600/Screen+shot+2011-05-03+at+10.49.58.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="220" src="http://1.bp.blogspot.com/-FtaHZLSGVYI/Tb_P_dYiQkI/AAAAAAAAAJs/3JgWNzLBl8c/s320/Screen+shot+2011-05-03+at+10.49.58.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Virgo is popular with early adopters.&lt;/b&gt; Of the 84% using Virgo exclusively, 59% are using 2.1.x or 3.0 milestones and 25% are on 3.0 milestones only (some of these already in production!).&amp;nbsp;Please note that Virgo has versions 2.1.0 and greater whereas dm Server covers versions 1.x and 2.0.x.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-J6LR55re4mY/Tb_PYxDRgoI/AAAAAAAAAJo/Cgf2LqUdwkI/s1600/Screen+shot+2011-05-03+at+10.47.28.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="250" src="http://2.bp.blogspot.com/-J6LR55re4mY/Tb_PYxDRgoI/AAAAAAAAAJo/Cgf2LqUdwkI/s320/Screen+shot+2011-05-03+at+10.47.28.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;The Virgo kernel is seeing significant usage.&lt;/b&gt; The kernel underpins the Virgo Web Server and provides Virgo's advanced deployment, provisioning, isolation, scoping, and diagnostic capabilities. The kernel has no web-specific code and so can be used to build messaging and other non-HTTP servers and to act as a container for non-server applications. 16% of respondents are using the kernel exclusively; 5% are in production.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-3dpaHezydNo/Tb_SdTFD6UI/AAAAAAAAAJw/tO77ryK5Cj8/s1600/Screen+shot+2011-05-03+at+11.00.33.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="230" src="http://3.bp.blogspot.com/-3dpaHezydNo/Tb_SdTFD6UI/AAAAAAAAAJw/tO77ryK5Cj8/s320/Screen+shot+2011-05-03+at+11.00.33.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Documentation&lt;/b&gt; and &lt;b&gt;blogs&lt;/b&gt; were the most useful information sources closely followed by the Virgo forum, Virgo wiki, and Virgo development mailing list (1= not at all useful, 5 = very useful).&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-SJdz8qT6EWU/Tb_Syw49O9I/AAAAAAAAAJ0/sGdoKxziK6U/s1600/Screen+shot+2011-05-03+at+11.02.05.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="222" src="http://3.bp.blogspot.com/-SJdz8qT6EWU/Tb_Syw49O9I/AAAAAAAAAJ0/sGdoKxziK6U/s320/Screen+shot+2011-05-03+at+11.02.05.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;The survey was advertised on Twitter, the Virgo forum, the Virgo development mailing list, at www.springsource.org, and in this blog. 166 people responded. If you are interested, the &lt;a href="https://spreadsheets.google.com/ccc?key=0Au5PTdadjmlndEp0dGszMDZMX0Y0WXFybEhRMkEzT0E&amp;amp;hl=en"&gt;raw results&lt;/a&gt; of the survey are available online or a &lt;a href="http://www.eclipse.org/virgo/project-info/Survey-2011.pdf"&gt;summary&lt;/a&gt; can be downloaded.&lt;br /&gt;&lt;br /&gt;Finally, I'd like to thank Chris Frost for coming up with the idea for the survey and then delivering the goods.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-124194642537090530?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/124194642537090530/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=124194642537090530' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/124194642537090530'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/124194642537090530'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2011/05/virgo-survey-results.html' title='Virgo survey results'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-somhUBlpZrs/Tb_PCxwim-I/AAAAAAAAAJk/JPX7ux3Uc94/s72-c/Screen+shot+2011-05-03+at+10.45.16.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-4705915901995930276</id><published>2011-04-05T20:38:00.000+01:00</published><updated>2011-04-05T20:38:26.528+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CICS'/><category scheme='http://www.blogger.com/atom/ns#' term='OSGi'/><title type='text'>OSGi comes of age?</title><content type='html'>Early in my career at SpringSource, my colleagues presented me a T-shirt with "CICS does that!" printed on the front. However, nobody anticipated what that statement might eventually include.&lt;br /&gt;&lt;br /&gt;IBM has just&amp;nbsp;&lt;a href="http://www-01.ibm.com/common/ssi/cgi-bin/ssialias?subtype=ca&amp;amp;infotype=an&amp;amp;appname=iSource&amp;amp;supplier=897&amp;amp;letternum=ENUS211-080"&gt;announced&lt;/a&gt; that the latest version of the&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/CICS"&gt;CICS&lt;/a&gt;&amp;nbsp;transaction monitor includes support for applications packaged as OSGi bundles. From the announcement letter:&lt;br /&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: Arial, sans-serif; font-size: 12px;"&gt;The JVM server infrastructure with integrated OSGi support and tooling provides a new industry standard Java runtime environment in CICS.&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;[...]&amp;nbsp;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: Arial, sans-serif; font-size: 12px;"&gt;The JVM server environment supports the development and deployment of Java applications through the use of industry standard OSGi bundles. This will require Java applications to be packaged into an OSGi bundle, and then deployed as a CICS BUNDLE resource with reference to the OSGi bundle and its version, removing the need to load Java applications from a statically defined class path. This function will significantly improve the system management of Java applications in CICS through the provision of application isolation and versioning, cross-package prerequisite checking, and simplified package redeployment.&lt;/span&gt;&lt;/blockquote&gt;This is heart-warming news to me, both as an OSGi proponent and as a former member of the CICS development team. I'm guessing CICS is using Equinox as its OSGi framework, but I'm looking forward to reading the documentation for the details.&lt;br /&gt;&lt;blockquote&gt;&amp;nbsp;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-4705915901995930276?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/4705915901995930276/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=4705915901995930276' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/4705915901995930276'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/4705915901995930276'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2011/04/osgi-comes-of-age.html' title='OSGi comes of age?'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-7237576795893932133</id><published>2011-03-31T16:37:00.002+01:00</published><updated>2011-04-01T08:47:03.400+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Virgo'/><category scheme='http://www.blogger.com/atom/ns#' term='jps'/><category scheme='http://www.blogger.com/atom/ns#' term='jconsole'/><title type='text'>Java update breaks jps, jconsole, etc</title><content type='html'>The latest update of Java broke jps and jconsole when Java is launched specifying "-Djava.io.tmpdir" with a value of anything other than $TMPDIR. This affects Virgo and Tomcat.&lt;br /&gt;&lt;br /&gt;The problem was introduced in Java 6 update 21 and is fixed by bug &lt;a href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7009828"&gt;sunbug 7009828&lt;/a&gt; in Java 6 update 25.&lt;br /&gt;&lt;br /&gt;A workaround for Virgo is as follows. On Mac and Linux to delete the following line in dmk.sh:&lt;br /&gt;&lt;pre&gt;-Djava.io.tmpdir=$TMP_DIR \&lt;br /&gt;&lt;/pre&gt;and on Windows to delete the following line in dmk.bat:&lt;br /&gt;&lt;pre&gt;set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Djava.io.tmpdir="%TMP_DIR%" &lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-7237576795893932133?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/7237576795893932133/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=7237576795893932133' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/7237576795893932133'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/7237576795893932133'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2011/03/java-update-breaks-jps-jconsole-etc.html' title='Java update breaks jps, jconsole, etc'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-2769472567455536681</id><published>2011-03-31T11:54:00.002+01:00</published><updated>2011-05-09T11:50:02.543+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSGi'/><category scheme='http://www.blogger.com/atom/ns#' term='Virgo'/><category scheme='http://www.blogger.com/atom/ns#' term='Felix'/><title type='text'>Eclipse Virgo diagnostics for "uses" conflicts</title><content type='html'>Congratulations to Felix on producing some really nice diagnostics for &lt;a href="http://blog.springsource.com/2008/10/20/understanding-the-osgi-uses-directive/"&gt;uses conflicts&lt;/a&gt;, and thanks to Neil Bartlett for his &lt;a href="http://njbartlett.name/2011/03/31/uses-constraints-in-felix.html"&gt;blog&lt;/a&gt; on the subject.&lt;br /&gt;&lt;br /&gt;I thought I'd try a similar example in Virgo for comparison. Here are Virgo's diagnostics:&lt;br /&gt;&lt;pre&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Unable to satisfy dependencies of bundle 'org.example.foo.xydata' at version '0.0.0': Cannot resolve: org.example.foo.xydata&lt;br /&gt;    Resolver report:&lt;br /&gt;        Uses violation: ⟨Import-Package: org.example.foo.bar.datastore; version="0.0.0"⟩ in bundle ⟨org.example.foo.xydata_0.0.0[1301563814803]⟩&lt;br /&gt;            Found conflicts:&lt;br /&gt;                package        'org.example.foo.util.verify_1.0.0' in bundle 'org.example.foo.platform.util_0.0.0[1301563814806]' used by 'org.example.foo.bar.datastore_0.0.0' in bundle 'org.example.foo.bar.datastore_0.0.0[1301563814805]'&lt;br /&gt;                conflicts with 'org.example.foo.util.verify_2.0.0' in bundle 'org.example.foo.framework_0.0.0[1301563814804]' imported by bundle 'org.example.foo.xydata_0.0.0[1301563814803]'&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;(The numbers in square brackets are bundle ids - they are enormous because Virgo is attempting resolution in a "side state". Bundles with enormous ids have either been deployed directly or auto-installed from the Virgo repository and are in the process of being resolved. They are committed to the OSGi framework only if the directly deployed bundle(s) can be resolved successfully.)&lt;br /&gt;&lt;br /&gt;The Virgo formatting isn't quite as pretty as Felix's, but it looks reasonable on a wide terminal window. However, there are some subtle differences:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Felix dumps out the dependency chains whereas Virgo does not attempt that. We had in mind examples where the dependency chains are unmanageably long, i.e. those where good diagnostics really are essential. But having seen Felix's diagnostics, we would like to dump out the chains in simple cases. On the other hand, that area of code is pretty complex, so this is not something we'll be rushing to do.&lt;/li&gt;&lt;li&gt;Felix depicts wirings from import to export which could be especially useful for newcomers to OSGi.&lt;/li&gt;&lt;li&gt;The Felix diagnostics are built in to the framework whereas non-Virgo users of Equinox do not get the Virgo diagnostics.&lt;/li&gt;&lt;li&gt;The Virgo diagnostics highlight the fact that there is a uses violation whereas Felix leaves the user to infer that from the rest of the message. It would be nice if Felix was more explicit because there are other reasons a bundle cannot be resolved.&lt;/li&gt;&lt;li&gt;Felix highlights the duplicated package whereas Virgo highlights the import that encountered the uses constraint. Virgo is designed to cope well when there are multiple duplicated packages. It's not clear what the Felix diagnostics would look like in such cases.&lt;/li&gt;&lt;/ul&gt;Note: on a resolution failure Virgo dumps the "side state" to disk for offline analysis. With this example, the offline analysis produced poorer diagnostics than were printed to the console, so I raised &lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=341460"&gt;bug 341460&lt;/a&gt; to investigate. The beauty of offline analysis is it lets you explore the details of the bundles. For example, the following screenshots shows the details of the duplicated package, including the import version ranges which result in the attempt to use the distinct versions of the duplicated package:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-5V9WUipSLpM/TZRXrblmxRI/AAAAAAAAAJc/rMzk1T5gTos/s1600/Screen%2Bshot%2B2011-03-31%2Bat%2B11.28.27.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-5V9WUipSLpM/TZRXrblmxRI/AAAAAAAAAJc/rMzk1T5gTos/s1600/Screen%2Bshot%2B2011-03-31%2Bat%2B11.28.27.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Anyway, I'm really pleased that we are starting to see some stiff competition on diagnostics. This will help OSGi users enormously.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Postscript&lt;/b&gt;&lt;br /&gt;Bug 341460 is fixed in the Virgo 3.0 line. The admin console now displays the same diagnostics that were printed to the console.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-2769472567455536681?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/2769472567455536681/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=2769472567455536681' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/2769472567455536681'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/2769472567455536681'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2011/03/eclipse-virgo-diagnostics-for-uses.html' title='Eclipse Virgo diagnostics for &quot;uses&quot; conflicts'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-5V9WUipSLpM/TZRXrblmxRI/AAAAAAAAAJc/rMzk1T5gTos/s72-c/Screen%2Bshot%2B2011-03-31%2Bat%2B11.28.27.png' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-7012168830545787619</id><published>2011-03-30T12:10:00.000+01:00</published><updated>2011-03-30T12:10:36.905+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GlassFish'/><category scheme='http://www.blogger.com/atom/ns#' term='Karaf'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipsecon'/><category scheme='http://www.blogger.com/atom/ns#' term='Virgo'/><category scheme='http://www.blogger.com/atom/ns#' term='Aries'/><title type='text'>Enterprise OSGi Runtimes and Tooling</title><content type='html'>It was great to see several enterprise OSGi runtimes in action at EclipseCon.&lt;br /&gt;&lt;br /&gt;Readers of this blog will be familiar with &lt;a href="http://www.eclipse.org/virgo/"&gt;Eclipse Virgo&lt;/a&gt;, so suffice to say that tutorials covered developing &amp;nbsp;applications using &lt;a href="http://www.eclipse.org/gemini/"&gt;Eclipse Gemini&lt;/a&gt; components (reference implementations of several OSGi Enterprise standards) in Virgo and configuring and managing web applications in Virgo.&lt;br /&gt;&lt;br /&gt;Several of the tutorials developed &lt;i&gt;Web Application Bundles&lt;/i&gt;, or WABs,&lt;i&gt;&amp;nbsp;&lt;/i&gt;which are part of the OSGi Enterprise standard.&amp;nbsp;&amp;nbsp;A Web Application Bundle is like a WAR file which specifies the web context path in its manifest and which obtains its dependencies using OSGi instead of having to include them all in&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;WEB-INF/lib&lt;/span&gt;. The tutorials also implemented persistence using the OSGi Enterprise standard mapping of Java Persistence API (JPA).&lt;br /&gt;&lt;br /&gt;&lt;a href="http://aries.apache.org/"&gt;Apache Aries&lt;/a&gt; provides a collection of components including implementations of several Enterprise OSGi standards and an application model similar to Virgo's. The EclipseCon tutorial had us creating a blogging application&amp;nbsp;using the free IBM® Rational® tooling. The application&amp;nbsp;consisted of an Aries application containing a plain OSGi bundle, a bundle utilising JPA persistence, and a WAB. The JPA bundle used Aries extensions to the standard blueprint service.&amp;nbsp;The WAB used JNDI to look up the service published by the persistence bundle - the same approach that was taken in the Gemini and Virgo tutorial.&amp;nbsp;We then deployed the application to a target platform which included Aries bundles.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://karaf.apache.org/"&gt;Apache Karaf&lt;/a&gt; is similar in concept to the Virgo kernel. Karaf has several functions that Virgo lacks, some of which are good candidates to add to Virgo. &lt;a href="http://geronimo.apache.org/"&gt;Apache Geronimo&lt;/a&gt;&amp;nbsp;is based on Karaf.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://glassfish.java.net/"&gt;GlassFish&lt;/a&gt; now has good support for OSGi. The EclipseCon tutorial started with us developing a basic client bundle calling a service published by a back-end bundle. We then replaced the client bundle with a WAB and the back-end bundle by a JPA persistence bundle which published a service in the form of an EJB. The WAB used custom annotations to inject the service into the WAB's servlet. The EJB was used to demarcate transactions and security. The M2Eclipse "core" and "extras" plugins provided a basic Eclipse development environment, although the bundles were deployed via the command line. Kudos to the GlassFish team, including Arun Gupta and Sanjeeb Sahoo who led the tutorial, for possibly the most polished hands-on tutorial I've experienced.&lt;br /&gt;&lt;br /&gt;I was also very pleased to see the &lt;a href="http://www.eclipse.org/libra/"&gt;Eclipse Libra&lt;/a&gt; project making progress. The version destined for inclusion in this year's Eclipse release train can be used to develop WABs. Runtime launching support is in the pipeline. We also hope to migrate standards based features from the Virgo tooling into Libra.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-7012168830545787619?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/7012168830545787619/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=7012168830545787619' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/7012168830545787619'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/7012168830545787619'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2011/03/enterprise-osgi-runtimes-and-tooling.html' title='Enterprise OSGi Runtimes and Tooling'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-3948923639769524461</id><published>2011-03-30T10:20:00.001+01:00</published><updated>2011-03-30T10:21:01.294+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='git'/><title type='text'>git tip: listing or editing the commits on a branch</title><content type='html'>Sometimes I need to list all the commits on a branch. I found the following command does the trick, even after I have merged from master into the branch one or more times:&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;b&gt;git rev-list my-branch ^master&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This lists all the commits reachable from my-branch but not reachable from master.&lt;br /&gt;&lt;br /&gt;You can also change the committer or author info of commits on a branch by specifying&amp;nbsp;&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;b&gt;my-branch ^master &lt;/b&gt;&lt;/span&gt;as the &lt;rev-list options=""&gt; on git filter-branch (see git help filter-branch).&amp;nbsp;&lt;/rev-list&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-3948923639769524461?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/3948923639769524461/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=3948923639769524461' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/3948923639769524461'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/3948923639769524461'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2011/03/git-tip-listing-commits-on-branch.html' title='git tip: listing or editing the commits on a branch'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-2575143821945342699</id><published>2011-03-29T17:26:00.000+01:00</published><updated>2011-03-29T17:26:06.682+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='dm Server'/><category scheme='http://www.blogger.com/atom/ns#' term='Virgo'/><title type='text'>Quick survey of Virgo and SpringSource dm Server usage</title><content type='html'>&lt;span class="Apple-style-span" style="color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px;"&gt;I would be grateful if users of Virgo and SpringSource dm Server would take a short, anonymous&amp;nbsp;&lt;a href="http://bit.ly/eXvnUW" style="color: #3c61b2; text-decoration: none;"&gt;survey&lt;/a&gt;&amp;nbsp;to help us in our planning. Should take no more than 2 minutes to complete.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-2575143821945342699?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/2575143821945342699/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=2575143821945342699' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/2575143821945342699'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/2575143821945342699'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2011/03/quick-survey-of-virgo-and-springsource.html' title='Quick survey of Virgo and SpringSource dm Server usage'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-985680164898486381</id><published>2011-03-29T10:18:00.000+01:00</published><updated>2011-03-29T10:18:13.573+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Virgo'/><category scheme='http://www.blogger.com/atom/ns#' term='Oracle'/><title type='text'>Correction: Oracle do not contribute to Virgo</title><content type='html'>A recent &lt;a href="http://blogs.oracle.com/java/2011/03/eclipsecon_2011_oracle_java_and_open-source.html"&gt;Oracle blog&lt;/a&gt; stated:&lt;br /&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: Arial; font-size: 15px; line-height: 22px;"&gt;Also presented were Eclipse projects, that Oracle engineers are contributing to: Gemini, Virgo, Sapphire and Web Tool Platform.&lt;/span&gt;&lt;/blockquote&gt;I submitted a comment on the blog pointing out that Oracle engineers contribute to Gemini but not Virgo. Unfortunately, the comment was not published and the blog was not corrected so perhaps this blog will help to set the record straight.&lt;br /&gt;&lt;br /&gt;That said, Virgo would welcome contributions from Oracle (and others). We've enjoyed collaborating with Oracle in the Gemini project and we really appreciate having Virgo committers from three different companies and a few more would be even better.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-985680164898486381?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/985680164898486381/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=985680164898486381' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/985680164898486381'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/985680164898486381'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2011/03/correction-oracle-do-not-contribute-to.html' title='Correction: Oracle do not contribute to Virgo'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-137116817455633907</id><published>2011-03-21T12:07:00.001Z</published><updated>2011-03-22T15:58:46.672Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Libra'/><category scheme='http://www.blogger.com/atom/ns#' term='OSGi'/><category scheme='http://www.blogger.com/atom/ns#' term='Virgo'/><category scheme='http://www.blogger.com/atom/ns#' term='Enterprise'/><category scheme='http://www.blogger.com/atom/ns#' term='Gemini'/><title type='text'>Incremental OSGi with Virgo, Gemini, and Libra</title><content type='html'>As I anticipate the start of EclipseCon 2011 later today, I'm reflecting on the current state of the Eclipse Virgo, Gemini, and Libra projects.&lt;br /&gt;&lt;br /&gt;As I'll be discussing on &lt;a href="http://www.eclipsecon.org/2011/sessions/?page=sessions&amp;amp;id=2082"&gt;Tuesday&lt;/a&gt;, Virgo evolved out of a relatively mature project whose aim was to make it easy for enterprise applications and enterprise application developers to adopt OSGi. The goal was to make the transition to OSGi incremental. Essentially you can start with a standard WAR file and deploy it to Virgo as-is. Then you can incrementally refactor the WAR file into an application comprising multiple OSGi bundles while continuing to use familiar technologies such as Spring, Hibernate, JPA, etc. We based Virgo on Tomcat suitably embedded into OSGi, again to provide familiarity for enterprise developers as well as systems administrators.&lt;br /&gt;&lt;br /&gt;In parallel with the evolution of Virgo, the OSGi Alliance Enterprise Expert Group, being discussed on &lt;a href="http://www.eclipsecon.org/2011/sessions/?page=sessions&amp;amp;id=1983"&gt;Tuesday&lt;/a&gt;, produced a series of enterprise specifications again with the goal of enabling enterprise applications to be migrate straightforwardly to OSGi. The reference implementations of these specifications became today's Eclipse Gemini project:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Gemini Blueprint - an OSGi standard dependency injection container which also supports the popular Spring and Spring DM namespaces&lt;/li&gt;&lt;li&gt;Gemini Web - support for servlets in the form of OSGi standard Web Application Bundles (WABs) or standard WAR files&lt;/li&gt;&lt;li&gt;Gemini JPA - support for JPA persistence in OSGi&lt;/li&gt;&lt;li&gt;Gemini DBAccess - modularised JDBC drivers for use in OSGi&lt;/li&gt;&lt;li&gt;Gemini Management - JMX management for OSGi&lt;/li&gt;&lt;li&gt;Gemini Naming - support for JNDI naming in OSGi&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Until recently, integrating the Gemini projects into Virgo has been a fairly specialised skill. As we'll see in a &lt;a href="http://www.eclipsecon.org/2011/sessions/?page=sessions&amp;amp;id=2337"&gt;workshop&lt;/a&gt; on Thursday, things are now really starting to come together and Gemini Blueprint, Gemini Web, and various other Gemini components can now be deployed and used in Virgo. We'll also be touching on how to manage and configure WABs in Virgo as part of a &lt;a href="http://www.eclipsecon.org/2011/sessions/?page=sessions&amp;amp;id=1999"&gt;workshop&lt;/a&gt; later this morning.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So much for the past. What about the future? The primary goal of Virgo 3.0 is better integration with other EclipseRT technologies such as Equinox, Jetty, and p2. This will provide richer function and greater choice for enterprise applications as they migrate to OSGi. We'll be hearing about how Virgo and EclipseRT technologies work together on &lt;a href="http://www.eclipsecon.org/2011/sessions/?page=sessions&amp;amp;id=2086"&gt;Wednesday&lt;/a&gt;. The recently released third milestone of this release shows the progress towards the goal of better integration with EclipseRT:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Virgo now uses Equinox Configuration Admin and Event Admin services instead of their Apache equivalents.&lt;/li&gt;&lt;li&gt;Virgo has &lt;a href="http://underlap.blogspot.com/2011/02/stumbling-towards-better-design.html"&gt;moved&lt;/a&gt; to the new framework hooks model for isolation in Equinox which is part of the OSGi 4.3 standard soon to be issued for public review.&lt;/li&gt;&lt;li&gt;Virgo now provides two web servers: Virgo Tomcat Server, which continues to be based on Gemini Web, and Virgo Jetty Server. Some exciting technology for modularising the view portion of web applications is also emerging into the Virgo mainstream as we'll hear on &lt;a href="http://www.eclipsecon.org/2011/sessions/?page=sessions&amp;amp;id=2085"&gt;Wednesday&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;p2 support in Virgo is also making good progress although this is currently in prototype form.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Development tooling is also entering an exciting new phase which will greatly help applications migrate to enterprise OSGi:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;The Libra project, which will be presented on &lt;a href="http://www.eclipsecon.org/2011/sessions/?page=sessions&amp;amp;id=2131"&gt;Wednesday&lt;/a&gt;, is providing development tooling for building WABs and will ship in the Eclipse Indigo release train later this year.&lt;/li&gt;&lt;li&gt;The Virgo development tooling has entered the Eclipse IP process and will soon emerge in the Virgo project.&amp;nbsp;Over time, the standards-based features of the Virgo tooling will be factored out and migrated into Libra.&lt;/li&gt;&lt;li&gt;OSGi runtime launchers are also being contributed to Libra. I would hope to see a Virgo launcher for Libra emerge so that Libra can start to take over from the Virgo tooling for many aspects of enterprise OSGi application development.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;If you're attending EclipesCon, come and hear the talks, join in the workshops and BoFs and help to shape incremental OSGi in the Virgo, Gemini, and Libra projects.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-137116817455633907?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/137116817455633907/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=137116817455633907' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/137116817455633907'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/137116817455633907'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2011/03/incremental-osgi-with-virgo-gemini-and.html' title='Incremental OSGi with Virgo, Gemini, and Libra'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-5444141281258961838</id><published>2011-03-18T16:30:00.002Z</published><updated>2011-06-07T09:42:47.337+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSGi'/><category scheme='http://www.blogger.com/atom/ns#' term='Virgo'/><title type='text'>Importing packages into a 3rd party bundle</title><content type='html'>I regularly come across the situation where someone needs to import additional packages into a 3rd party OSGi bundle. Sometimes this is because the bundle manifest is incorrect, but more often it's because the bundle uses&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;a href="http://download.oracle.com/javase/6/docs/api/java/lang/Class.html#forName(java.lang.String)"&gt;Class.forName&lt;/a&gt;&lt;/span&gt; or similar to load classes that are somehow configured at runtime.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Unless the bundle is signed, it's possible to edit the manifest to add the import, but this is a really bad idea. If the original bundle needs upgrading, you have to remember to re-edit the manifest. Also, it's easy to mess something up in the process. Finally, it's bad practice to change the contents of a bundle without modifying the bundle version.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Thankfully, there is a simple way to add imports to a bundle without resorting to such invasive surgery: use a fragment bundle. Fragment bundles can extend the manifest of their host in various ways. In particular, they can add package imports. The fragment bundle need only contain a manifest, for example:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;style type="text/css"&gt;p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color: #941100}p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco}span.s1 {color: #000000}span.s2 {color: #941100}span.s3 {color: #929000}&lt;/style&gt;   &lt;br /&gt;&lt;div class="p1"&gt;&lt;span class="Apple-style-span" style="color: #941100; font-family: 'Courier New', Courier, monospace;"&gt;Manifest-Version&lt;span class="s1"&gt;: 1.0&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="p1"&gt;&lt;span class="s1"&gt;&lt;span class="Apple-style-span" style="color: #941100; font-family: 'Courier New', Courier, monospace;"&gt;Bundle-ManifestVersion&lt;span class="s1" style="color: black;"&gt;: 2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="p1"&gt;&lt;span class="s1"&gt;&lt;span class="Apple-style-span" style="color: #941100;"&gt;&lt;span class="s1" style="color: black; font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="s2" style="color: #941100;"&gt;Bundle-SymbolicName&lt;/span&gt;: my.fragment&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="p1"&gt;&lt;span class="s1"&gt;&lt;span class="Apple-style-span" style="color: #941100;"&gt;&lt;span class="s1" style="color: black;"&gt;&lt;span class="Apple-style-span" style="color: #941100; font-family: 'Courier New', Courier, monospace;"&gt;Bundle-Version&lt;span class="s1" style="color: black;"&gt;: 1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="p1"&gt;&lt;span class="s1"&gt;&lt;span class="Apple-style-span" style="color: #941100;"&gt;&lt;span class="s1" style="color: black;"&gt;&lt;span class="Apple-style-span" style="color: #941100;"&gt;&lt;span class="s1" style="color: black; font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="s2" style="color: #941100;"&gt;Bundle-Name&lt;/span&gt;: My Fragment&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="p2"&gt;&lt;span class="Apple-style-span" style="color: #941100; font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="s2"&gt;Fragment-Host&lt;/span&gt;: host.symbolic.name;&lt;span class="s3" style="color: #929000;"&gt;bundle-version&lt;/span&gt;="[2.4,2.5)"&lt;/span&gt;&lt;/div&gt;&lt;div class="p2"&gt;&lt;span class="Apple-style-span" style="color: #941100; font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="s2"&gt;Import-Package&lt;/span&gt;: extra.package;&lt;span class="s3"&gt;version&lt;/span&gt;="[1.1,1.2)"&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;More than one fragment bundle can attach to a given host bundle, so this technique can be used when unrelated groups of packages need to be imported: a separate fragment can be used for each group.&lt;br /&gt;&lt;br /&gt;Each fragment bundle needs to be installed before its host is resolved at which point the fragment's manifest is merged into the host's and the resultant Bundle instance imports the packages added by the fragment. On Virgo, this can be achieved by placing the fragment bundles in &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;repository/usr&lt;/span&gt;. When the host is deployed, the fragments are automatically installed along with the host.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Note: make sure you use the "bundle-version" attribute of Fragment-Host. "version" is not a standard attribute of Fragment-Host and if you use it accidentally in place of "bundle-version", chances are your fragment will not attach to its host.&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-5444141281258961838?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/5444141281258961838/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=5444141281258961838' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/5444141281258961838'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/5444141281258961838'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2011/03/importing-packages-into-3rd-party.html' title='Importing packages into a 3rd party bundle'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-6349401557733759854</id><published>2011-03-17T17:04:00.000Z</published><updated>2011-03-17T17:04:54.904Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='eclipsecon'/><category scheme='http://www.blogger.com/atom/ns#' term='Virgo'/><title type='text'>Virgo 3.0.0.M03 and EclipseCon</title><content type='html'>Milestone 3 of Virgo 3.0 is available for &lt;a href="http://www.eclipse.org/virgo/download/milestones.php"&gt;download&lt;/a&gt;.&amp;nbsp;Apart from several bug fixes, this milestone includes a contribution from Tom Watson who is collaborating with the Virgo team to prepare the&amp;nbsp;&lt;a href="http://underlap.blogspot.com/2011/02/stumbling-towards-better-design.html"&gt;region digraph&lt;/a&gt;&amp;nbsp;for its move to Equinox so that it is available to all Equinox users rather than just Virgo users.&lt;br /&gt;&lt;br /&gt;We will be using milestone3 in tutorials at next week's &lt;a href="http://www.eclipsecon.org/2011/"&gt;EclipseCon&lt;/a&gt;. If you're attending, watch out for Virgo committers delivering the following sessions:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.eclipsecon.org/2011/sessions/?page=sessions&amp;amp;id=1999"&gt;Building web applications with EclipseRT&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.eclipsecon.org/2011/sessions/?page=sessions&amp;amp;id=2082"&gt;Donating a mature project to Eclipse&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.eclipsecon.org/2011/sessions/?page=sessions&amp;amp;id=2085"&gt;Snaps, modular &amp;amp; dynamic web applications with Virgo&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.eclipsecon.org/2011/sessions/?page=sessions&amp;amp;id=2086"&gt;Virgo and RT playing together&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.eclipsecon.org/2011/sessions/?page=sessions&amp;amp;id=2337"&gt;Hands on with Gemini and Virgo--The new Stars of the Eclipse RT project!&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Virgo BoF -- to be arranged, keep a look out!&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Hope to see you there!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-6349401557733759854?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/6349401557733759854/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=6349401557733759854' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/6349401557733759854'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/6349401557733759854'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2011/03/virgo-300m03-and-eclipsecon.html' title='Virgo 3.0.0.M03 and EclipseCon'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-5229352953379788336</id><published>2011-02-28T17:12:00.000Z</published><updated>2011-02-28T17:12:14.097Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSGi'/><category scheme='http://www.blogger.com/atom/ns#' term='Virgo'/><title type='text'>Thread Context Class Loading in Virgo</title><content type='html'>A number of popular open source libraries, particularly persistence providers, use thread context class loading to load application types. This is an issue in OSGi once an application is divided into more than one bundle. Each bundle has its own class loader and no particular one of these bundle class loaders is necessarily suitable for loading all the application classes that libraries need to load.&lt;br /&gt;&lt;br /&gt;Virgo overcomes this problem with its notion of a &lt;i&gt;scoped&lt;/i&gt; application. A scoped application consists of either a PAR archive file containing the application artefacts (bundles, property files, plans, etc.) or a scoped plan referring to the application &amp;nbsp;artefacts. The scope limits the visibility of application packages and services so that scoped applications do not interfere with each another. But Virgo also creates an additional &lt;i&gt;synthetic context bundle&lt;/i&gt; for each scope and it's this bundle's class loader which is used for thread context class loading when the application calls out to libraries.&lt;br /&gt;&lt;br /&gt;The synthetic context bundle is very simple. It's a bundle which uses Virgo's &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;import-bundle&lt;/span&gt; manifest header to import each of the bundles in the scope. Thus all the packages exported by the application are available for thread context class loading by libraries. There is a minor restriction implied by this approach: no two bundles in a scoped application may export the same package, which would be pretty unusual.&lt;br /&gt;&lt;br /&gt;The following example should help make things clear:&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="https://lh6.googleusercontent.com/-3Exb04lkPy4/TWvV-4jHx0I/AAAAAAAAAJI/timY8ObGbxs/s1600/synthetic-context-example.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="276" src="https://lh6.googleusercontent.com/-3Exb04lkPy4/TWvV-4jHx0I/AAAAAAAAAJI/timY8ObGbxs/s320/synthetic-context-example.png" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;An Example Scoped Application&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;Here a scoped application contains two bundles A and B. A calls B which calls out to a library bundle L. If L uses the thread context class loader to load application types, it will have access to all the packages exported by bundles A and B. The synthetic context bundle, which imports bundles A and B, provides the thread context class loader for the scoped application.&lt;br /&gt;&lt;br /&gt;This simple solution enables a variety of existing open source libraries, once converted to OSGi bundles, to function correctly in their use of thread context class loading.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-5229352953379788336?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/5229352953379788336/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=5229352953379788336' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/5229352953379788336'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/5229352953379788336'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2011/02/thread-context-class-loading-in-virgo.html' title='Thread Context Class Loading in Virgo'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='https://lh6.googleusercontent.com/-3Exb04lkPy4/TWvV-4jHx0I/AAAAAAAAAJI/timY8ObGbxs/s72-c/synthetic-context-example.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-1007666505363160189</id><published>2011-02-10T14:11:00.015Z</published><updated>2011-03-30T16:26:19.247+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSGi'/><category scheme='http://www.blogger.com/atom/ns#' term='Virgo'/><category scheme='http://www.blogger.com/atom/ns#' term='Equinox'/><title type='text'>Stumbling towards a better design</title><content type='html'>Some programs have a clear design and coding new features is quick and easy. Other programs are a patchwork quilt of barely comprehensible fragments, bug fixes, and glue. If you have to code new features for such programs, you're often better off rewriting them.&lt;br /&gt;&lt;br /&gt;However there is a middle ground that I suspect is pretty common in these days of clean code and automated test suites: you have a good program with a clear design, but as you start to implement a new feature, you realise it's a force fit and you're not sure why. What to do?&lt;br /&gt;&lt;br /&gt;I've recently being implementing a feature in Eclipse Virgo which raised this question and I hope sheds some light on how to proceed. Let's take a look.&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: 19px; font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: 19px; font-weight: bold;"&gt;The New Feature&lt;/span&gt;&lt;br /&gt;I've been changing the way the Virgo kernel isolates itself from applications. Previously, Equinox supported nested OSGi frameworks and it was easy to isolate the kernel from applications by putting the applications in a nested framework (a "user region") and sharing selected packages and services with the kernel. However, the nested framework support is being withdrawn in favour of an OSGi standard set of framework hooks. These hooks let you control, or at least limit, the visibility of bundles, packages, and services -- all in a single framework.&lt;br /&gt;&lt;br /&gt;So I set about re-basing Virgo on the framework hooks. The future looked good: eventually the hooks could be used to implement multiple user regions and even to rework the way application scoping is implemented in Virgo.&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: 19px; font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: 19px; font-weight: bold;"&gt;An Initial Implementation&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: 19px; font-weight: bold;"&gt;&lt;/span&gt;One bundle in the Virgo kernel is responsible for region support, so I set about reworking it to use the framework hooks. After a couple of weeks the kernel and all its tests were running ok. However, the vision of using the hooks to implement multiple user regions and redo application scoping had receded into the distance given the rather basic way I had written the framework hooks. I had the option of ignoring this and calling "YAGNI!" (You Ain't Gonna Need It!). But I was certain that once I merged my branch into master, the necessary generalisation would drop down the list of priorities. Also, if I ever did prioritise the generalisation work, I would have forgotten much of what was then buzzing around my head.&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: 19px; font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: 19px; font-weight: bold;"&gt;Stepping Back&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: 19px; font-weight: bold;"&gt;&lt;/span&gt;So the first step was to come up with a suitable abstract model. I had some ideas when we were discussing nested frameworks in the OSGi Alliance a couple of years ago: to partition the framework into groups of bundles and then to connect these groups together with one-way connections which would allow certain packages and services to be visible from one group to another.&lt;br /&gt;&lt;br /&gt;Using Virgo terminology, I set about defining how I could partition the framework into regions and then connect the regions together using package, service, and bundle filters. At first it was tempting to avoid cycles in the graph, but it soon became clear that cycles are harmless and indeed necessary for modelling Virgo's existing kernel and user region, which need to be connected to each other with appropriate filters.&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: 19px; font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: 19px; font-weight: bold;"&gt;A Clean Abstraction&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: 19px; font-weight: bold;"&gt;&lt;/span&gt;Soon I had a reasonably good idea of the kind of graph with filters that was necessary, so it was tempting to get coding and then refactor the thing into a reasonable shape. But I had very little idea of how the filtering of bundles and packages would interact. In the past I've found that refactoring from such a starting point can waste a lot of time, especially when tests have been written and need reworking. Code has inertia to being changed, so its often better to defer coding until I get a better understanding.&lt;br /&gt;&lt;br /&gt;To get a clean abstraction and a clear understanding, while avoiding "analysis paralysis", I wrote a &lt;a href="http://git.eclipse.org/c/virgo/org.eclipse.virgo.documentation.git/plain/design-docs/regions/regions.pdf"&gt;formal specification&lt;/a&gt; of these connected regions. This is essentially a mathematical model of the state of the graph and the operations on it. This kind of model enables properties of the system to be discovered before it is implemented in code. My friend and colleague, Steve Powell, was keen to review the spec and suggest several simplifications and before long, we had a formal spec with some rather nice algebraic properties for filtering and combining regions.&lt;br /&gt;&lt;br /&gt;To give you a feel for how these properties look, take this example which says that "combining" two regions (used when describing the combined appearance of two regions) and then filtering is equivalent to filtering the two regions first and then combining the result:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-50NeSPVWkRc/TVP4pXn7NqI/AAAAAAAAAIA/35l5jrynyfM/s1600/Screen+shot+2011-02-10+at+14.39.08.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="74" src="http://3.bp.blogspot.com/-50NeSPVWkRc/TVP4pXn7NqI/AAAAAAAAAIA/35l5jrynyfM/s320/Screen+shot+2011-02-10+at+14.39.08.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;Being a visual thinker and to make the formal spec more useful to non-mathematicians, I also drew plenty of pictures along the way. Here's an example graph of regions:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-SbEsNM2INLc/TVP17EP72yI/AAAAAAAAAH4/5-6-9DhGbyk/s1600/connected-regions.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="282" src="http://4.bp.blogspot.com/-SbEsNM2INLc/TVP17EP72yI/AAAAAAAAAH4/5-6-9DhGbyk/s320/connected-regions.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: 19px; font-weight: bold;"&gt;A New Implementation&lt;/span&gt;&lt;br /&gt;I defined a RegionDigraph ("digraph" is short for "directed graph") interface, implemented it, and defined a suit of unit tests to give good code coverage. I then implemented a fresh collection of framework hooks in terms of the region digraph and then ripped out the old framework hooks and code supporting what in retrospect was a poorly formed notion of region membership and replaced this with the new framework hooks underpinned by the&amp;nbsp;region digraph.&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: 19px; font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: 19px; font-weight: bold;"&gt;I Really Did Need It (IRDNI?)&lt;/span&gt;&lt;br /&gt;It took a while to get all the kernel integration tests running again, mainly because the user region needs to be configured so that packages from the system bundle (which belongs in the kernel region) are imported along with some new services such as the&amp;nbsp;region digraph&amp;nbsp;service.&lt;br /&gt;&lt;br /&gt;As problems occurred, I could step back and think in terms of the underlying graph. By writing appropriate toString methods on Region and RegionDigraph implementation classes, the model became easier to visualise in the debugger. This gives me hope that if and when other issues arise, I will have a better chance of debugging them because I can understand the underlying model.&lt;br /&gt;&lt;br /&gt;A couple of significant issues turned up along the way, both related to the use of "side states" when Virgo deploys applications.&lt;br /&gt;&lt;br /&gt;The first is the need to temporarily add bundle descriptions to the user region. &lt;see coregions="" email="" in="" re="" text=""&gt;&lt;/see&gt;&lt;br /&gt;&lt;br /&gt;The second is the need to respect the&amp;nbsp;region digraph&amp;nbsp;when diagnosing resolver errors. This is relatively straightforward when deploying and diagnosing failures. It is less straightforward when dumping resolution failure states for offline analysis: the&amp;nbsp;region digraph&amp;nbsp;also needs to be dumped so it can also be used in the offline analysis.&lt;br /&gt;&lt;br /&gt;These issues would have been much harder to address in the initial framework hooks implementation. The first issue would have involved some fairly arbitrary code to record and remove bundle descriptions from the user region. The second would have been much trickier as there was a poorly defined and overly static notion of region membership which wouldn't have lent itself to including in a state dump without looking like a gross hack. But with the region digraph it was easy to create a temporary "coregion" to contain the temporary bundle descriptions and it should be straightforward to capture the digraph alongside the state dump.&lt;br /&gt;&lt;br /&gt;Ok, so I'm convinced that the&amp;nbsp;region digraph&amp;nbsp;is pulling its weight and isn't a bunch of YAGNI. But someone challenged me the other day by asking "Why do the framework hooks have to be so complex?".&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: 19px; font-weight: bold;"&gt;Unnecessary Complexity?&lt;/span&gt;&lt;br /&gt;Well, firstly the&amp;nbsp;region digraph&amp;nbsp;ensures consistent behaviour across the five framework hooks (bundle find, bundle event, service find, service event, and resolver hooks), especially regarding filtering behaviour, treatment of the system bundle, and transitive dependencies (i.e. across more than one region connection). This consistency should lead to fewer bugs, more consistent documentation, and ease of understanding for users.&lt;br /&gt;&lt;br /&gt;Secondly, the&amp;nbsp;region digraph&amp;nbsp;is much more flexible than hooks based on a static notion of region membership: bundles may be added to the kernel &lt;i&gt;after&lt;/i&gt; the user region has been created, application scoping should be relatively straightforward to rework in terms of regions thus giving scoping and regions consistent semantics (fewer bugs, better documentation etc), and multiple user regions should be &amp;nbsp;relatively tractable to implement.&lt;br /&gt;&lt;br /&gt;Thirdly, the&amp;nbsp;region digraph&amp;nbsp;should be an excellent basis for implementing the notion of a multi-bundle application. In the OSGi Alliance, we are currently discussing how to standardise the multi-bundle application constructs in Virgo, Apache Aries, the Paremus Service Fabric, and elsewhere. Indeed I regard it as a proof of concept that the framework hooks can be used to implement certain basic kinds of multi-bundle application. As a nice spin-off, the development of the&amp;nbsp;region digraph&amp;nbsp;has resulted in several Equinox bugs being fixed and some clarifications being made to the framework hooks specification.&lt;br /&gt;&lt;spell out="" them=""&gt;&lt;/spell&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: 19px; font-weight: bold;"&gt;Next Steps&lt;/span&gt;&lt;br /&gt;I am writing this while the region digraph is "rippling" through the Virgo repositories on its way into the 3.0 line. But this item is starting to have a broader impact. Last week I gave a &lt;a href="http://git.eclipse.org/c/virgo/org.eclipse.virgo.documentation.git/plain/design-docs/regions/pres/VirgoRegions.pdf"&gt;presentation&lt;/a&gt; on the region digraph to the OSGi Alliance's Enterprise Expert Group. There was a lot of interest and subsequently there has even been discussion of whether the feature should be implemented in Equinox so that it can be reused by other projects outside Virgo.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: 19px;"&gt;Postscript (30 March 2010)&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;The region digraph is working out well in Virgo. We had to rework the function underlying the admin console because there is no longer a "surrogate" bundle representing the kernel packages and services in the user region. To better represent the connections from the user region to the kernel, the runtime artefact model inside Virgo needs to be upgraded to understand regions directly. This is work in progress in the 3.0 line.&lt;br /&gt;&lt;br /&gt;Meanwhile, Tom Watson, an Equinox committer, is working with me to move the region digraph code to Equinox. The rationale is to ensure that multiple users of the framework hooks can co-exist (by using the region digraph API instead of directly using the framework hooks).&lt;br /&gt;&lt;br /&gt;Tom contributed several significant changes to the digraph code in Virgo including persistence support. When Virgo &amp;nbsp;dumps a resolution failure state, it also dumps the region digraph. The dumped digraph is read back in later and used to provide a resolution hook for analysing the dumped state, which ensures consistency between the live resolver and the dumped state analysis.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-1007666505363160189?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/1007666505363160189/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=1007666505363160189' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/1007666505363160189'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/1007666505363160189'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2011/02/stumbling-towards-better-design.html' title='Stumbling towards a better design'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-50NeSPVWkRc/TVP4pXn7NqI/AAAAAAAAAIA/35l5jrynyfM/s72-c/Screen+shot+2011-02-10+at+14.39.08.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-6566346770098304521</id><published>2010-11-25T11:50:00.000Z</published><updated>2010-11-25T11:50:49.862Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Virgo'/><category scheme='http://www.blogger.com/atom/ns#' term='kernel'/><title type='text'>How to develop with the Virgo Kernel in Eclipse</title><content type='html'>A number of groups are discovering that the Virgo Kernel is a really useful OSGi runtime. For instance the Rich Ajax Platform project have &lt;a href="http://wiki.eclipse.org/RAP/Running_RAP_on_virgo"&gt;documented&lt;/a&gt; how to run RAP on the kernel.&lt;br /&gt;&lt;br /&gt;Others have steered clear of the kernel because the Eclipse-based Virgo tooling does not support the kernel directly (see &lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=331101"&gt;bug 331101&lt;/a&gt;). However, it's really easy to get the tooling working with the kernel. Here's how...&lt;br /&gt;&lt;br /&gt;First, set up the Virgo tooling in Eclipse as described in the &lt;a href="http://www.eclipse.org/virgo/documentation/virgo-documentation-2.1.0.RELEASE/docs/virgo-programmer-guide/htmlsingle/virgo-programmer-guide.html#tooling"&gt;Tooling&lt;/a&gt; chapter of the Virgo Programmer Guide.&lt;br /&gt;&lt;br /&gt;However, when you create a new Virgo Web Server server runtime environment and point at a Virgo kernel installation, you'll see the following error:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_RRoi_WAgixw/TO5H0CQnqGI/AAAAAAAAAHs/2Fd7V78lu4s/s1600/Screen+shot+2010-11-25+at+11.25.08.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img alt=".version file in lib directory is missing key 'virgo.server.version'. Makesure to point to a Virgo Server installation." border="0" height="297" src="http://3.bp.blogspot.com/_RRoi_WAgixw/TO5H0CQnqGI/AAAAAAAAAHs/2Fd7V78lu4s/s400/Screen+shot+2010-11-25+at+11.25.08.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Edit &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;lib/.version&lt;/span&gt; in the kernel installation to contain the key 'virgo.server.version' instead&amp;nbsp;of 'virgo.kernel.version'. Then the above error goes away and you can continue to set up the runtime environment and server as per the instructions in the Programmer Guide.&lt;br /&gt;&lt;br /&gt;You can then use the Virgo tooling to do all the usual things: start and stop the kernel, create and deploy bundles, PARs and plans, examine bundles, and explore package and service wirings.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-6566346770098304521?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/6566346770098304521/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=6566346770098304521' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/6566346770098304521'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/6566346770098304521'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2010/11/how-to-develop-with-virgo-kernel-in.html' title='How to develop with the Virgo Kernel in Eclipse'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_RRoi_WAgixw/TO5H0CQnqGI/AAAAAAAAAHs/2Fd7V78lu4s/s72-c/Screen+shot+2010-11-25+at+11.25.08.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-5072884334701883433</id><published>2010-11-11T20:02:00.001Z</published><updated>2010-11-16T11:13:22.805Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSGi'/><category scheme='http://www.blogger.com/atom/ns#' term='dm Server'/><category scheme='http://www.blogger.com/atom/ns#' term='Virgo'/><category scheme='http://www.blogger.com/atom/ns#' term='Mule'/><title type='text'>OSGi Adoption Experience</title><content type='html'>The Mule team have &lt;a href="http://blogs.mulesoft.org/osgi-no-thanks/"&gt;blogged&lt;/a&gt; about their decision not to adopt OSGi. The decision seems reasonable: OSGi isn't a panacea and I guess the benefits didn't outweigh the costs in their case.&lt;br /&gt;&lt;br /&gt;One of their number, Ross Mason, correctly identifies some of the costs of adopting OSGi. He would like OSGi to be almost completely invisible to the developer, leaving him or her free to define an application in terms of modules without dealing directly with manifests, bundles, and build systems. The somewhat messy details of developing and building modular applications with OSGi are partly what led SpringSource to donate the dm Server project to Eclipse as Virgo. The aim is to grow the user community and smooth out the wrinkles in the developer experience.&lt;br /&gt;&lt;br /&gt;Adoption is going pretty well. Virgo recently shipped its first release. SAP are adopting Virgo in a strategic way. VMware products in development are using dm Server/Virgo to obtain the benefits of modular application code. Others are using dm Server/Virgo to host substantial applications in sectors including investment banking, networking, healthcare, online gaming, and academic research.&lt;br /&gt;&lt;br /&gt;As we prepare to donate the Virgo tooling to Eclipse and collaborate in the &lt;a href="http://www.eclipse.org/proposals/osgi-enterprise-tools/"&gt;OSGi Enterprise Tools project&lt;/a&gt; inside Eclipse with the likes of SAP, EclipseSource, and Eteration, I'm optimistic about improving the developer experience.&lt;br /&gt;&lt;br /&gt;Dissenting voices such as those of the Mule team are a good reality check. Efforts, such as Mule, to try to find intermediate modularity solutions with some of the benefits of OSGi but with smaller costs should also help by providing data points for comparison with full blown OSGi adoption.&lt;br /&gt;&lt;br /&gt;I'm looking forward to more experience reports from application development groups that have adopted OSGi or technologies like Mule so others can make a more informed decision about the technology to adopt. Certainly OSGi users are starting to publish their experience. Perhaps users of Mule will soon do the same.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-5072884334701883433?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/5072884334701883433/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=5072884334701883433' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/5072884334701883433'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/5072884334701883433'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2010/11/osgi-adoption-experience.html' title='OSGi Adoption Experience'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-4189491646511022683</id><published>2010-11-01T12:23:00.000Z</published><updated>2010-11-01T12:23:17.824Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSGi'/><category scheme='http://www.blogger.com/atom/ns#' term='Virgo'/><category scheme='http://www.blogger.com/atom/ns#' term='release'/><title type='text'>Eclipse Virgo 2.1.0 Release</title><content type='html'>&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/jurvetson/3967667399/" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;" title="Jump to Hyperspace by jurvetson, on Flickr"&gt;&lt;img alt="Jump to Hyperspace" height="500" src="http://farm3.static.flickr.com/2449/3967667399_a9c6179e0c.jpg" width="333" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Jump to Hyperspace, courtesy of Steve Jurvetson&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;Eclipse &lt;a href="http://www.eclipse.org/virgo/"&gt;Virgo&lt;/a&gt; has shipped its first release after several months of work to contribute it to Eclipse.&lt;br /&gt;&lt;br /&gt;The majority of the effort was to make the contribution acceptable from an Eclipse legal perspective. There were some close shaves, like when a file (mime.types) in the Spring Framework turned out to have a restrictive license. The file&amp;nbsp;would have been virtually impossible to recreate from scratch.&amp;nbsp;I am very grateful to the original author, Ian Graham, for solving this problem by making the content available under an Apache license. I would also like to thank Barb Cochrane and Sharon Corbett of the Eclipse legal team who cheerfully and efficiently handled over 200 "contribution questionnaires" covering the code donated to Virgo and its dependencies. &lt;br /&gt;&lt;br /&gt;Apart from that, we have repackaged the code in the org.eclipse namespace, speeded up the startup considerably, upgraded several dependencies, fixed a few bugs, and made several enhancements.&lt;br /&gt;&lt;br /&gt;The response from the community was particularly encouraging with thousands of downloads of the milestones and numerous forum posts and mailing list discussions. We are particularly grateful to the code contributors, listed in the &lt;a href="http://www.eclipse.org/virgo/download/release-notes/2.1.0.RELEASE.php"&gt;release notes&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The main objective of contributing Virgo was to grow the community and thereby make the technology more easily consumed by application developers. The project seems to be meeting the community objective and we are now preparing to donate the Virgo tooling to Eclipse which will enable the community to help us make the developer experience smoother, especially for newcomers to modularity and OSGi.&lt;br /&gt;&lt;br /&gt;Finally, I'd like to thank the other Virgo committers, Chris Frost and Steve Powell, for their persistence and thoroughness. I'm glad we can now move on to more interesting items for the next release. Thanks too to everyone else in SpringSource who supported the Virgo project in various ways. We couldn't have done it without you.&lt;br /&gt;&lt;br /&gt;The future looks promising, starting with a &lt;a href="http://wiki.eclipse.org/Virgo/Community/F2F#Virgo_F2F_November_2010"&gt;Virgo face to face&lt;/a&gt; meeting at the end of this month. It's not too late to express your interest (on &lt;a href="https://dev.eclipse.org/mailman/listinfo/virgo-dev"&gt;virgo-dev&lt;/a&gt;) if you would like to attend.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-4189491646511022683?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/4189491646511022683/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=4189491646511022683' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/4189491646511022683'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/4189491646511022683'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2010/11/eclipse-virgo-210-release.html' title='Eclipse Virgo 2.1.0 Release'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm3.static.flickr.com/2449/3967667399_a9c6179e0c_t.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-6205006153176823274</id><published>2010-10-12T18:49:00.007+01:00</published><updated>2010-10-20T08:46:28.881+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSGi'/><category scheme='http://www.blogger.com/atom/ns#' term='Virgo'/><title type='text'>Eclipse Virgo: the ideal OSGi server runtime</title><content type='html'>Since the Eclipse Virgo web site is seeing more new visitors than ever, it seemed like a good time to summarise the benefits of Virgo.&lt;br /&gt;&lt;br /&gt;Essentially Virgo is the culmination of 3 years of work in developing an application server based entirely on &lt;a href="http://www.osgi.org/"&gt;OSGi&lt;/a&gt; and exposing OSGi for use by applications. Virgo started inside SpringSource as the &lt;a href="http://www.springsource.org/dmserver"&gt;dm Server project&lt;/a&gt; which was licensed under the GNU Public License and shipped two major versions. About a year ago we started donating the codebase to Eclipse as the Virgo project licensed under the much more liberal Eclipse Public License. The transfer of the runtime code to Eclipse is now complete, we have satisfied the rather stringent IP checks required of all Eclipse projects, and Virgo is nearing its first formal release by the end of October.&lt;br /&gt;&lt;br /&gt;Virgo is an ideal OSGi server runtime, possibly &lt;i&gt;the&lt;/i&gt; ideal OSGi server runtime, from several perspectives. Firstly, it was &lt;b&gt;designed from the ground up as OSGi bundles&lt;/b&gt; so it's extremely modular and extensible. For example, the core of the runtime is the Virgo kernel and the Virgo web server is constructed by configuring a web layer, an admin console, and some other utilities on top of the kernel. The kernel protects itself from interference from such additions, and applications, by running them in a nested framework. This nested framework approach also enables applications to use new versions of the Spring framework (regardless of the fact the kernel depends on Spring 3.0.0). All the major Java EE application servers are now built on top of OSGi, but only Virgo was &lt;i&gt;designed&lt;/i&gt; for OSGi and didn't need OSGi to be retrofitted.&lt;br /&gt;&lt;br /&gt;Secondly, Virgo is an ideal OSGi server runtime because it &lt;b&gt;exposes OSGi in a usable way to applications&lt;/b&gt;. In addition to all the standard features of OSGi &amp;mdash; encapsulated modules or &lt;i&gt;bundles&lt;/i&gt;, a powerful service registry, versioning, class space isolation, sharing of dependencies, dynamic refreshing and updating, and much more &amp;mdash; Virgo provides a multi-bundle application model to simplify the deployment and management of non-trivial applications. Virgo also provides a repository which can store dependencies such as OSGi bundles which are "faulted in" when needed. This results in cleaner definitions of applications and a small footprint compared to traditional Java EE servers which pre-load many features just in case an application needs them. The major Java EE application servers are beginning to follow suit in exposing an application model, so SpringSource is working with other vendors in the OSGi Alliance to produce a standard multi-bundle application construct.&lt;br /&gt;&lt;br /&gt;Thirdly, Virgo is an ideal OSGi server runtime because it &lt;b&gt;enables existing Java libraries to run successfully in an OSGi environment&lt;/b&gt;. The Virgo kernel supports thread context class loading, load time weaving, classpath scanning, and a number of other features which are commonly used by persistence providers and other common Java utilities. Essentially, we observed the commonly-occurring problems when people attempted to migrate to OSGi and implemented general solutions to those problems early on.&lt;br /&gt;&lt;br /&gt;Fourthly, Virgo is an ideal OSGi server runtime because it &lt;b&gt;integrates OSGi with Spring and Tomcat&lt;/b&gt;. Virgo uses &lt;a href="http://www.springsource.org/osgi"&gt;Spring DM&lt;/a&gt; to wire application contexts to the OSGi service registry. Spring beans can be published as OSGi services and can consume OSGi services, both with minimal effort. The embedded form of Tomcat is used as a servlet engine in Virgo's web support and is configured and managed just like standard Tomcat.&lt;br /&gt;&lt;br /&gt;Fifthly, Virgo is an ideal OSGi server runtime because of its &lt;b&gt;excellent diagnostics&lt;/b&gt;:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;An admin console lets you examine the state of all artifacts deployed in Virgo as well as explore the state of bundles in the OSGi framework.&lt;/li&gt;&lt;li&gt;Virgo provides multiple types of diagnostics: event logging aimed at administrators, diagnostics logging aimed at developers, as well as various types of diagnostic dumps.&lt;/li&gt;&lt;li&gt;Virgo builds on &lt;a href="http://logback.qos.ch/"&gt;Logback&lt;/a&gt; to support highly configurable and efficient logging.&lt;/li&gt;&lt;li&gt;When an application is deployed, Virgo first resolves the application in a "side state" and, if resolution fails, no changes are committed to the OSGi framework and the side state is dumped to disk so that it can be analysed using the OSGi state inspector in the admin console.&lt;/li&gt;&lt;li&gt;If a resolution failure occurs, Virgo also analyses the resolver error, including the root causes of any &lt;a href="http://blog.springsource.com/2008/10/20/understanding-the-osgi-uses-directive/"&gt;uses constraint&lt;/a&gt; violation, and extracts a meaningful message to include in an exception which is then thrown.&lt;/li&gt;&lt;li&gt;Virgo adds advanced diagnostics to Spring DM to track the starting of bundles and their application contexts and issue error messages on failure and warnings when dependencies are delayed.&lt;/li&gt;&lt;li&gt;Virgo automatically detects deadlocks and generates a thread stack dump.&lt;/li&gt;&lt;/ul&gt;Finally, Virgo is an ideal OSGi server runtime because it has &lt;b&gt;advanced tooling support&lt;/b&gt; in the &lt;a href="http://www.springsource.com/developer/sts"&gt;SpringSource Tool Suite&lt;/a&gt; or in standard Eclipse via an &lt;a href="http://www.springsource.org/dmservertools"&gt;update site&lt;/a&gt;. This enables a Virgo server to run under the control of the tooling, applications to be deployed, debugged, and updated by the tooling, and package and service dependencies between bundles to be analysed. The Virgo tooling will also be donated to Eclipse in due course.  Oh, I almost forgot to mention the obvious: Virgo is an &lt;b&gt;open source&lt;/b&gt; project with a &lt;b&gt;liberal license&lt;/b&gt; and &lt;b&gt;active participation from multiple vendors&lt;/b&gt;, which positions it ideally for the future.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Footnote: The bulk of this article was originally posted to springsource.org. Reproducing here for the benefit of Planet Eclipse and others.&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-6205006153176823274?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/6205006153176823274/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=6205006153176823274' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/6205006153176823274'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/6205006153176823274'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2010/10/eclipse-virgo-ideal-osgi-server-runtime.html' title='Eclipse Virgo: the ideal OSGi server runtime'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-6929273140683433319</id><published>2010-09-30T12:39:00.001+01:00</published><updated>2010-10-01T09:23:39.833+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSGi'/><category scheme='http://www.blogger.com/atom/ns#' term='Virgo'/><title type='text'>I Love OSGi, Now Please Change It!</title><content type='html'>I'm sitting in the OSGi DevCon where a panel are discussing what needs to change in OSGi. Several points are coming up that are relevant to OSGi standards and also to what we have been doing in Virgo.&lt;br /&gt;&lt;br /&gt;One excellent question was posed by a panel member, IBM Distinguished Engineer Ian Robinson, who asked whether OSGi needs to distinguish better between APIs intended for applications and APIs intended for middleware implementers and how this squares with the OSGi tendency for all bundles to be created equal.&lt;br /&gt;&lt;br /&gt;I believe the answer here is to use composite bundles or nested frameworks to provide a unit of modularity larger than an individual bundle. I don't think OSGi needs to prescribe which APIs fall into each category, but it should provide mechanisms for hiding APIs in a given environment which are not intended for application use.&lt;br /&gt;&lt;br /&gt;Virgo uses an early prototype of nested frameworks to achieve this kind of isolation between the Virgo kernel and the &lt;i&gt;user region&lt;/i&gt;, which is a nested framework in which applications run. Users are free to deploy bundles in the user region and can even install additional bundles into the kernel and configure the packages and services shared between the kernel and the user region.&lt;br /&gt;&lt;br /&gt;Fortunately, the notion of composite bundles and nested frameworks is being actively developed in the OSGi standards work and so their mechanisms should become more broadly available in a standard form in due course.&lt;br /&gt;&lt;br /&gt;There is also OSGi standards work going on to expose these mechanisms in a usable way to applications. Virgo provides plans and plan archives as a way of grouping together artefacts for deployment and management. Apache Aries has also been implementing some similar grouping mechanisms with their application model. Paremus and others have similar constructs. So the standardisation activity has plenty of implementation experience and exposure to users to inform it. Virgo has also introduced a scoping mechanism as a way of isolating groups of application bundles from other groups of application bundles. This will also feed into the standards work.&lt;br /&gt;&lt;br /&gt;Another great question from another panel member, the OSGi consultant Neil Bartlett, was how much OSGi should accommodate and support legacy code and how much it should require legacy code to be restructured to be more modular.&lt;br /&gt;&lt;br /&gt;The direction of the Enterprise Expert Group in recent years has been to accommodate porting Java EE applications to an OSGi environment and then modularising them.&lt;br /&gt;&lt;br /&gt;Virgo has had support for legacy code as one of the main design points from its inception. The Virgo kernel implements solutions to several knotty problems which crop up regularly when using non-OSGi libraries in an OSGi environment. These are assumptions about thread context class loading, load time weaving, class path scanning, and implicit package use.&lt;br /&gt;&lt;br /&gt;So using implementations of OSGi Enterprise specifications is one part of the answer as is providing the kind of support for legacy libraries like that available in Virgo.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-6929273140683433319?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/6929273140683433319/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=6929273140683433319' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/6929273140683433319'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/6929273140683433319'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2010/09/i-love-osgi-now-please-change-it.html' title='I Love OSGi, Now Please Change It!'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-2312806563658174311</id><published>2010-09-26T09:48:00.001+01:00</published><updated>2010-09-27T09:22:17.430+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSGi'/><category scheme='http://www.blogger.com/atom/ns#' term='Virgo'/><title type='text'>Virgo and Ocean Observatories Initiative</title><content type='html'>Virgo seems to be finding its way into the scientific community. A research hospital and a networking research group already use Virgo heavily. It seems that an oceanography group are also &lt;a href="http://www.oceanobservatories.org/spaces/display/CIDev/Establish+suitable+runtime+container+for+ioncore-java"&gt;considering&lt;/a&gt; Virgo for their "ioncore-java" runtime.&lt;br /&gt;&lt;br /&gt;They are at the stage of comparing various application servers. The front-runners, at least in terms of their feature comparison table, are Virgo and WSO2. Fortunately, I believe the architecture and design of these products are quite different, so this should make the decision easier.&lt;br /&gt;&lt;br /&gt;Virgo was built from the ground up as OSGi bundles and offers first class support for OSGi applications. The Virgo kernel is independent of any particular communications protocol. Tomcat is added as part of the Virgo web server which sits on top of the kernel. The whole of Virgo runs inside an OSGi container. Web services can be supported on Virgo, but it's not something Virgo has majored on as this is just one of the features available in the Spring portfolio running on Virgo.&lt;br /&gt;&lt;br /&gt;WSO2 on the other hand is focussed on - and the clue's in the name here - web services. It is constructed as an interoperating network of web services components. WSO2 does support OSGi, but it &lt;a href="http://wso2.org/forum/thread/4785"&gt;hosts an OSGi container inside Tomcat&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Let's see what the Ocean Observatories Initiative regard as the key requirements for their component model. If it's OSGi components with primarily local communication (i.e. Java method call), then I reckon Virgo would be ideal. If on the other hand they want a primarily distributed component model (and it's a big if) with web services as the communication protocol, then WSO2 may be a good choice.&lt;br /&gt;&lt;br /&gt;One last word. I felt a bit sorry for Glassfish as it didn't get a tick in the J2EE box even though it's the J2EE reference implementation. Also Tomcat is the servlet engine used by Virgo, so it deserves just as much of a J2EE tick in the box as Virgo. Similarly JBoss should get the J2EE tick.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-2312806563658174311?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/2312806563658174311/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=2312806563658174311' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/2312806563658174311'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/2312806563658174311'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2010/09/virgo-and-ocean-observatories.html' title='Virgo and Ocean Observatories Initiative'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-4818135387728518786</id><published>2010-07-12T08:36:00.000+01:00</published><updated>2010-07-12T08:36:08.783+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Virgo'/><category scheme='http://www.blogger.com/atom/ns#' term='Grails'/><title type='text'>Grails on Virgo</title><content type='html'>&lt;span class="Apple-style-span" style="font-family: verdana, arial, sans-serif; font-size: 14px;"&gt;Wolfgang Schell recently released an &lt;a href="http://blog.jetztgrad.net/2010/07/grails-on-osgi-released-grails-osgi-plugin-0-2/"&gt;OSGi plugin for Grails&lt;/a&gt;. This runs on Virgo but apparently uses Spring DM's web extender rather than Virgo's web support. This makes me wonder if it would be better run on the Virgo kernel to avoid loading Virgo's web support. Perhaps he'll go into more detail when he has experimented more with Virgo.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-4818135387728518786?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/4818135387728518786/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=4818135387728518786' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/4818135387728518786'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/4818135387728518786'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2010/07/grails-on-virgo.html' title='Grails on Virgo'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-2539755263450710133</id><published>2010-07-11T10:57:00.001+01:00</published><updated>2010-11-25T13:28:12.816Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Virgo'/><category scheme='http://www.blogger.com/atom/ns#' term='RAP'/><title type='text'>RAP on Virgo</title><content type='html'>Owen Ou &lt;a href="http://owenou.com/blog/tag/rap/"&gt;blogged&lt;/a&gt; about deploying &lt;a href="http://www.eclipse.org/rap/"&gt;RAP&lt;/a&gt; (Eclipse Rich Ajax Platform) on an OSGi based server like Virgo. He says it's extremely easy, which is good to hear, but I'd love to see a bit more detail. For instance, assuming he's actually doing it on Virgo, is the RAP infrastructure launched as a plan in the initial list of artifacts for the user region? How are RAP applications then deployed? Fascinating stuff...&lt;br /&gt;&lt;br /&gt;[The link to Owen's blog broke. I guess he deleted the blog. Anyway, Florian Waibel has also &lt;a href="http://eclipsesource.com/blogs/2010/10/28/running-rap-on-virgo/"&gt;blogged&lt;/a&gt; about RAP on Virgo.]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-2539755263450710133?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/2539755263450710133/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=2539755263450710133' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/2539755263450710133'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/2539755263450710133'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2010/07/rap-on-virgo.html' title='RAP on Virgo'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-4674344975603695032</id><published>2010-06-29T08:09:00.000+01:00</published><updated>2010-06-29T08:09:05.887+01:00</updated><title type='text'>Virgo one of the best and brightest Eclipse projects</title><content type='html'>&lt;div class="separator" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em; text-align: center;"&gt;&lt;img border="0" height="286" src="http://4.bp.blogspot.com/_RRoi_WAgixw/TCmbJSHP_4I/AAAAAAAAAHc/WjlFgxLVhhg/s400/Taft25.png" width="400" /&gt;&lt;/div&gt;&lt;br /&gt;from &lt;a href="http://www.eweek.com/c/a/Application-Development/25-Best-and-Brightest-Eclipse-Development-Projects-448324/"&gt;eWeek&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-4674344975603695032?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/4674344975603695032/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=4674344975603695032' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/4674344975603695032'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/4674344975603695032'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2010/06/virgo-one-of-best-and-brightest-eclipse.html' title='Virgo one of the best and brightest Eclipse projects'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_RRoi_WAgixw/TCmbJSHP_4I/AAAAAAAAAHc/WjlFgxLVhhg/s72-c/Taft25.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-8669006505744720242</id><published>2010-05-11T14:58:00.003+01:00</published><updated>2010-05-11T15:01:30.264+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Virgo'/><title type='text'>Virgo kernel checked in and ready for use</title><content type='html'>The Virgo kernel was &lt;a href="http://dev.eclipse.org/mhonarc/lists/virgo-dev/msg00023.html"&gt;checked in&lt;/a&gt; to Eclipse git earlier today and is ready for you to &lt;a href="http://wiki.eclipse.org/Virgo"&gt;take it for a spin&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_RRoi_WAgixw/S-lh4OMb7VI/AAAAAAAAAHU/aw6Lhtk74Ag/s1600/drive.jpeg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/_RRoi_WAgixw/S-lh4OMb7VI/AAAAAAAAAHU/aw6Lhtk74Ag/s320/drive.jpeg" width="254" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;No, this isn't the Virgo kernel - it's a 5 Mb hard disk from 1956 which weighed over a ton. The Virgo kernel zip file would have needed a couple of tons of hard disk for storage. Thank goodness times have moved on.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-8669006505744720242?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/8669006505744720242/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=8669006505744720242' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/8669006505744720242'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/8669006505744720242'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2010/05/virgo-kernel-checked-in-and-ready-for.html' title='Virgo kernel checked in and ready for use'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_RRoi_WAgixw/S-lh4OMb7VI/AAAAAAAAAHU/aw6Lhtk74Ag/s72-c/drive.jpeg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-3712041685052412045</id><published>2010-05-05T08:29:00.000+01:00</published><updated>2010-05-05T08:29:11.577+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='dm Server'/><category scheme='http://www.blogger.com/atom/ns#' term='Virgo'/><title type='text'>IntelliJ IDEA Support for dm Server</title><content type='html'>IntelliJ just &lt;a href="http://blogs.jetbrains.com/idea/2010/05/spring-dmserver-support-for-intellij-idea/"&gt;announced&lt;/a&gt; support for dm Server. Although I haven't tried using the support, it appears to be at a reasonable level of function and only a little behind the SpringSource Tools Suite (as far as dm Server support is concerned) with plans to fill the gap. IntelliJ haven't mentioned Virgo yet, but I'm hopeful that the Eclipse (RT) branding won't put them off.&lt;br /&gt;&lt;br /&gt;This, in my opinion, is a sign of a healthy runtime: multiple vendors competing on tooling. I'd like to see the same on management tooling which could be implemented relatively easily layer to dm Server's JMX interface.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-3712041685052412045?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/3712041685052412045/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=3712041685052412045' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/3712041685052412045'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/3712041685052412045'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2010/05/intellij-idea-support-for-dm-server.html' title='IntelliJ IDEA Support for dm Server'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-2600444463027457581</id><published>2010-04-23T19:32:00.002+01:00</published><updated>2010-04-23T19:32:41.836+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Virgo'/><title type='text'>First Virgo components available for development</title><content type='html'>See &lt;a href="http://dev.eclipse.org/mhonarc/lists/virgo-dev/msg00005.html"&gt;this&lt;/a&gt; if you are interested in doing some Virgo development.&lt;br /&gt;&lt;br /&gt;Special thanks go to the Eclipse IP team, especially Barb and Sharon, for making this possible at this stage.&lt;br /&gt;&lt;br /&gt;Also thanks to Chris Frost for his help in raising CQs.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-2600444463027457581?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/2600444463027457581/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=2600444463027457581' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/2600444463027457581'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/2600444463027457581'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2010/04/first-virgo-components-available-for.html' title='First Virgo components available for development'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-5755940940122910997</id><published>2010-04-01T16:46:00.000+01:00</published><updated>2010-04-01T16:46:33.416+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Virgo'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><title type='text'>Virgo contribution underway</title><content type='html'>I just finished entering the main CQs (Contribution Questionnaires) for Virgo. The corresponding tracking bugs, which are visible to everyone, are at the bottom of the list &lt;a href="https://bugs.eclipse.org/bugs/buglist.cgi?type1-0-0=substring;query_format=advanced;field0-0-0=flagtypes.name;value1-0-0=virgo;type0-0-0=substring;value0-0-0=iplog;field1-0-0=product"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;There are now two gating factors before we can commit the code: the workload of the small but committed Eclipse legal team and my team's ability to field any issues they raise...&lt;br /&gt;&lt;br /&gt;&lt;img style="border:none;" src="http://www.andertoons.com/img/cartoons/4249.jpg"/&gt;&lt;br /&gt;&lt;br /&gt;Once we've gotten the code committed, it will be possible to others to clone the git repositories, build, test, develop improvements, and submit patches. Essentially we'll be in business as far as contributors and build-it-yourself users are concerned.&lt;br /&gt;&lt;br /&gt;Later, when we've also gotten the 3rd party dependencies through the legal process, we'll be able to start doing releases out of eclipse.org.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-5755940940122910997?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/5755940940122910997/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=5755940940122910997' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/5755940940122910997'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/5755940940122910997'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2010/04/virgo-contribution-underway.html' title='Virgo contribution underway'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-8269108614964986019</id><published>2010-03-26T19:31:00.000Z</published><updated>2010-03-26T19:31:51.478Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSGi'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipsecon'/><category scheme='http://www.blogger.com/atom/ns#' term='dm Server'/><category scheme='http://www.blogger.com/atom/ns#' term='Virgo'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><title type='text'>EclipseCon 2010 Virgo Presentation</title><content type='html'>&lt;div style="width:425px" id="__ss_3565923"&gt;&lt;strong style="display:block;margin:12px 0 4px"&gt;&lt;a href="http://www.slideshare.net/glynnormington/eclipse-virgo-3565923" title="Eclipse Virgo"&gt;Eclipse Virgo&lt;/a&gt;&lt;/strong&gt;&lt;object width="425" height="355"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=eclipsevirgo-100326142333-phpapp01&amp;stripped_title=eclipse-virgo-3565923" /&gt;&lt;param name="allowFullScreen" value="true"/&gt;&lt;param name="allowScriptAccess" value="always"/&gt;&lt;embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=eclipsevirgo-100326142333-phpapp01&amp;stripped_title=eclipse-virgo-3565923" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div style="padding:5px 0 12px"&gt;View more &lt;a href="http://www.slideshare.net/"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/glynnormington"&gt;glynnormington&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-8269108614964986019?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/8269108614964986019/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=8269108614964986019' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/8269108614964986019'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/8269108614964986019'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2010/03/eclipsecon-2010-virgo-presentation.html' title='EclipseCon 2010 Virgo Presentation'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-352563130129672156</id><published>2010-03-26T05:24:00.000Z</published><updated>2010-03-26T05:24:20.779Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Virgo'/><title type='text'>Reflections on EclipseCon</title><content type='html'>EclipseCon has been a great conference - on a par with the Spring conferences for enthusiasm and quality of talks etc. There was an enthusiastic welcome to the Virgo project which made my attendance really worthwhile. Several people discussed possible contributions to the Virgo project and there were a number of useful chats with potential consumers of Virgo as well as committers on other EclipseRT components who are keen to see Virgo fully integrate with the rest of RT.&lt;br /&gt;&lt;br /&gt;For me, the highlight was the Virgo BoF with a room full of people really interested in learning more about Virgo. I was able to give a bit more detail about the internals of Virgo, clarify the separation of the various components, and start to explain the concepts underpinning the kernel.&lt;br /&gt;&lt;br /&gt;I'd like to congratulate the organisers for putting on such a great conference and I look forward with anticipation to future EclipseCons.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-352563130129672156?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/352563130129672156/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=352563130129672156' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/352563130129672156'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/352563130129672156'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2010/03/reflections-on-eclipsecon.html' title='Reflections on EclipseCon'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-7542634015299622611</id><published>2010-03-20T09:30:00.000Z</published><updated>2010-03-20T09:30:48.934Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSGi'/><category scheme='http://www.blogger.com/atom/ns#' term='Virgo'/><title type='text'>Eclipse Virgo home page</title><content type='html'>&lt;a href="http://www.eclipse.org/virgo/"&gt;Eclipse Virgo&lt;/a&gt;. What more can I say, other than "Thanks Chris"?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-7542634015299622611?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/7542634015299622611/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=7542634015299622611' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/7542634015299622611'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/7542634015299622611'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2010/03/eclipse-virgo-home-page.html' title='Eclipse Virgo home page'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-6799199155886755525</id><published>2010-03-17T10:54:00.000Z</published><updated>2010-03-17T10:54:33.835Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='eclipsecon'/><category scheme='http://www.blogger.com/atom/ns#' term='Virgo'/><title type='text'>EclipseCon Sessions</title><content type='html'>&lt;a href="http://www.eclipsecon.org/2010/"&gt;EclipseCon&lt;/a&gt; starts in next week and there are plenty of sessions relevant to &lt;a href="http://www.eclipse.org/virgo/"&gt;Virgo&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I'm doing the main &lt;a href="https://www.eclipsecon.org/submissions/2010/view_talk.php?id=1238"&gt;Virgo talk&lt;/a&gt; and there's a &lt;a href="https://www.eclipsecon.org/submissions/2010/view_talk.php?id=1586"&gt;Virgo launch&lt;/a&gt; BoF session (and a proposed BoF on &lt;a href="https://www.eclipsecon.org/submissions/2010/view_talk.php?id=1641"&gt;Virgo tooling&lt;/a&gt;). I'm on panels on &lt;a href="http://www.eclipsecon.org/2010/sessions/?page=sessions&amp;amp;id=1572"&gt;Gemini&lt;/a&gt; and the &lt;a href="https://www.eclipsecon.org/submissions/2010/view_talk.php?id=1559"&gt;future of application servers&lt;/a&gt; and co-leading a BoF on &lt;a href="https://www.eclipsecon.org/submissions/2010/view_talk.php?id=1585"&gt;application models for OSGi&lt;/a&gt;. I'm also giving a brief update on Virgo at the Eclipse Membership Meeting.&lt;br /&gt;&lt;br /&gt;Then there's the main&amp;nbsp;&lt;a href="http://www.eclipsecon.org/2010/sessions/?page=sessions&amp;amp;id=1125"&gt;Gemini talk&lt;/a&gt;, an &lt;a href="http://www.eclipsecon.org/2010/sessions/?page=sessions&amp;amp;id=1623"&gt;EclipseRT&lt;/a&gt; BoF, and other sessions on &lt;a href="http://www.eclipsecon.org/2010/sessions/?page=sessions&amp;amp;id=1140"&gt;OSGi&lt;/a&gt;, &lt;a href="http://www.eclipsecon.org/2010/sessions/?page=sessions&amp;amp;id=1290"&gt;Apache Aries&lt;/a&gt;, &lt;a href="http://www.eclipsecon.org/2010/sessions/?page=sessions&amp;amp;id=1458"&gt;Maven and OSGi&lt;/a&gt;, and&amp;nbsp;&lt;a href="http://www.eclipsecon.org/2010/sessions/?page=sessions&amp;amp;id=1316"&gt;JPA and OSGi&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-6799199155886755525?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/6799199155886755525/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=6799199155886755525' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/6799199155886755525'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/6799199155886755525'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2010/03/eclipsecon-sessions.html' title='EclipseCon Sessions'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-9042569348758416682</id><published>2010-02-03T18:57:00.000Z</published><updated>2010-02-03T18:57:05.719Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSGi'/><category scheme='http://www.blogger.com/atom/ns#' term='Equinox'/><title type='text'>"Strong" optionality</title><content type='html'>Richard Hall tells me Felix interprets optional imports as "strong", to use my&amp;nbsp;&lt;a href="http://underlap.blogspot.com/2010/02/osgi-resolution-is-np-complete-so-what.html"&gt;earlier&lt;/a&gt;&amp;nbsp;term. I believe there is enough latitude in the OSGi spec to permit this. Equinox takes the opposite interpretation and can discard optional imports of available packages in order to overcome uses constraints which would otherwise prevent resolution.&lt;br /&gt;&lt;br /&gt;Regardless of that, I think that strong optionality is more likely to be what the user wants.&lt;br /&gt;&lt;br /&gt;Without strong optionality, if the user provides a bundle which can satisfy some optional imports, they are not likely to be pleased if the resolver discards corresponding optional imports as the functions provided by the bundle will then be unavailable. Better to fail fast with diagnostics that allow the user to sort out the uses constraints.&lt;br /&gt;&lt;br /&gt;Even worse, without strong optionality resolution may fail after a protracted attempt to discard combinations of optional imports in order to get a valid wiring. All the optional imports could be discarded before embarking upon a protracted search to ensure that the search is not in vain. Perhaps Equinox already does this, but I'm doubtful it as it could be criticised as optimising for the failure case.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-9042569348758416682?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/9042569348758416682/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=9042569348758416682' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/9042569348758416682'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/9042569348758416682'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2010/02/strong-optionality.html' title='&quot;Strong&quot; optionality'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-3368687105175389450</id><published>2010-02-03T06:31:00.010Z</published><updated>2010-02-03T08:40:51.058Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSGi'/><category scheme='http://www.blogger.com/atom/ns#' term='Equinox'/><title type='text'>OSGi resolution is NP-Complete. So what?</title><content type='html'>At last we have a &lt;a href="http://stackoverflow.com/questions/2085106/is-the-resolution-problem-in-osgi-np-complete"&gt;proof&lt;/a&gt;, thanks to Robert Dunne, that the OSGi R4 resolution problem is &lt;a href="http://en.wikipedia.org/wiki/NP-complete"&gt;NP-Complete&lt;/a&gt;. He showed that it is possible to represent a solution to the NP-Complete boolean satisfaction problem &lt;a href="http://en.wikipedia.org/wiki/3-SAT#3-satisfiability"&gt;3-SAT&lt;/a&gt; as a wiring of a carefully constructed set of OSGi bundles. After the idea arose of using a SAT solver to construct an OSGi resolver, some of us have been discussing the possibility of a SAT-based proof. The hard step was how to represent a boolean OR in terms of resolution, which Robert has now provided.&lt;br /&gt;&lt;br /&gt;NP-Completeness tallies with the experience of those who have written an OSGi R4 resolver: it takes about a fortnight of intensive hacking, combined with sleepless nights, to crack the problem followed by a much longer period of bug fixing and optimisation. Now we know why: NP-Complete problems are hard to solve efficiently.&lt;br /&gt;&lt;br /&gt;I'm partly to blame as I led the spec work on OSGi RFC 79 which added considerable function, and with it complexity, to the resolution algorithm. I &lt;a href="http://www.google.co.uk/url?q=http://www.osgi.org/wiki/uploads/Congress2004/14GNormington.pdf&amp;amp;ei=9QNpS4r-FKKy0gT407GwCA&amp;amp;sa=X&amp;amp;oi=nshc&amp;amp;resnum=1&amp;amp;ct=result&amp;amp;cd=1&amp;amp;ved=0CAsQzgQoAA&amp;amp;usg=AFQjCNEF_h29X71_RhNzHKkUMnQATmOLkw"&gt;presented&lt;/a&gt; some of the background at the 2004 OSGi Congress. The RFC 79 spec was one of the more interesting that the OSGi Core Platform Expert Group has worked on. There was a tension between addressing the basic use cases and creating something that was too hard to implement.&lt;br /&gt;&lt;br /&gt;Fortunately, we developed a prototype resolver in the &lt;a href="http://www.eclipse.org/equinox/"&gt;Equinox&lt;/a&gt; incubator. This provided useful feedback to the spec work, particularly when features were dropped from the spec which made the implementation more tractable.&amp;nbsp;The team which created the prototype included Simon Burns, Steve Poole, and Tom Watson. Simon wrote the initial R4 resolver. Steve created a rigorous model-based test based on a slow, but functionally corrrect, resolver of his own. Tom provided much advice on the R3 resolver and eventually integrated the new resolver into Equinox and has been improving it ever since.&lt;br /&gt;&lt;br /&gt;So what features emerged from this process that made the resolver NP-Complete? Well, crucial to the proof are the &lt;a href="http://blog.springsource.com/2008/10/20/understanding-the-osgi-uses-directive/"&gt;uses constraint&lt;/a&gt; and, its evil twin, optional imports. Steve Powell observes that the proof does &lt;i&gt;not&lt;/i&gt; depend on the transitivity of the uses constraint. (Other,&amp;nbsp;arguably much more evil,&amp;nbsp;features in R4, require-bundle and fragments, also did not contribute to the resolver's intrinsic complexity.)&lt;br /&gt;&lt;br /&gt;This suggests some practical ways round the problem. &lt;a href="http://issues.apache.org/jira/browse/FELIX-961"&gt;Examples&lt;/a&gt;&amp;nbsp;occasionally crop up when the time to resolve a set of bundles becomes unacceptable. How can we work around such issues if we are willing to put in the effort?&lt;br /&gt;&lt;br /&gt;Firstly, uses constraints can be avoided by preventing types from one package leaking out through the interface of another package. This is an application of the &lt;a href="http://en.wikipedia.org/wiki/Law_of_Demeter"&gt;Law of Demeter&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Secondly, in some cases it may be possible to remove, or at least cut down, optional imports by using mandatory imports instead and splitting the function which has those dependencies across bundles so that the user's dependencies determine which bundles are needed.&lt;br /&gt;&lt;br /&gt;These approaches are feasible only for new code. Bundles generated from popular Java libraries tend to exhibit both uses constraints and optional imports.&lt;br /&gt;&lt;br /&gt;Another possibility we've been considering is a "strong" form of optionality in which the optional import cannot be discarded if it is locally satisfiable, i.e. before uses constraints are applied. Certainly the current definition of optional import is critical to Robert's proof. The challenge is to convince ourselves that R4 resolution with strong optionality in place of the current definition is no longer NP-Complete or, conversely, to prove the opposite.&lt;br /&gt;&lt;br /&gt;I'm undecided. Strong optionality drastically reduces the search space in some cases. On the other hand, I feel there &lt;i&gt;may&lt;/i&gt; be a proof based on 3-SAT in which multiple bundles import, but do not export, packages.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-3368687105175389450?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/3368687105175389450/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=3368687105175389450' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/3368687105175389450'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/3368687105175389450'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2010/02/osgi-resolution-is-np-complete-so-what.html' title='OSGi resolution is NP-Complete. So what?'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-6268952797342712563</id><published>2010-01-27T09:01:00.006Z</published><updated>2010-01-27T09:35:14.687Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSGi'/><category scheme='http://www.blogger.com/atom/ns#' term='Virgo'/><category scheme='http://www.blogger.com/atom/ns#' term='WebSphere'/><title type='text'>OSGi standards and adoption</title><content type='html'>The &lt;a href="http://www.theserverside.com/news/thread.tss?thread_id=59183"&gt;TSS thread&lt;/a&gt; on Virgo and whether or not OSGi is ready for mainstream enterprise application development contains some misconceptions.&lt;br /&gt;&lt;br /&gt;Firstly, that SpringSource is somehow not involved in the OSGi standards process.&lt;br /&gt;&lt;br /&gt;That couldn't be further from the truth. Recently we've led the standardisation of Spring DM into the blueprint service specification and reference implementation while IBM provided the compliance tests. We are developing the reference implementation of the OSGi web container while IBM wrote the specification and are providing the compliance tests. Then, as we look to the future, we are leading two, and involved in other, new specifications targeted at R4.3.&lt;br /&gt;&lt;br /&gt;Secondly, it is easy to get the impression that other vendors, such as IBM and Oracle, are about to solve the adoption problem.&lt;br /&gt;&lt;br /&gt;I certainly hope they do, but, at least in the case of IBM's WebSphere Application Server OSGi alpha, their programming models seem very similar to that of dm Server and their development and build tools, where the real adoption issues seem to be, do not seem to be particularly advanced.&lt;br /&gt;&lt;br /&gt;Perhaps IBM's large customer base and marketing machine will encourage developers to jump the necessary hurdles. But the tricky thing about a product like WAS is that, after the alpha code has been rolled into the main product, it will be very hard to measure real usage. The only real evidence will be customer testimonials and APAR (i.e. external defect) rates against the OSGi features, which IBM typically do not publish.&lt;br /&gt;&lt;br /&gt;Let's see how Virgo gets on. At least the adoption should be easier to measure as users will almost certainly be using it for its OSGi features.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-6268952797342712563?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/6268952797342712563/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=6268952797342712563' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/6268952797342712563'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/6268952797342712563'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2010/01/osgi-standards-and-adoption.html' title='OSGi standards and adoption'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-2326142577979059939</id><published>2010-01-15T09:35:00.003Z</published><updated>2010-01-15T09:57:16.475Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSGi'/><category scheme='http://www.blogger.com/atom/ns#' term='Virgo'/><title type='text'>Building OSGi applications</title><content type='html'>The recent SD Times &lt;a href="http://www.sdtimes.com/link/34059"&gt;article&lt;/a&gt; on Virgo paints an overly bleak picture of the problems of building an OSGi application.&lt;br /&gt;&lt;br /&gt;Build certainly complicates adopting OSGi, but many users are willing to overcome that problem in order to get the benefits of modularity and the service registry.&lt;br /&gt;&lt;br /&gt;Also various tools are available to help. We developed the &lt;a href="http://www.springsource.org/bundlor"&gt;bundlor&lt;/a&gt; tool for automatically generating bundle manifests from the code in a bundle. Peter Kriens's &lt;a href="http://www.aqute.biz/Code/Bnd"&gt;bnd&lt;/a&gt; tool provides similar function.&lt;br /&gt;&lt;br /&gt;People have successfully developed Maven and Ant builds for OSGi projects and various helper plugins. for instance &lt;a href="http://wiki.ops4j.org/display/paxconstruct/Pax+Construct"&gt;PAX Construct&lt;/a&gt;, are starting to emerge.&lt;br /&gt;&lt;br /&gt;Also, SD Times fails to mention the &lt;a href="http://www.springsource.com/repository/app/"&gt;Enterprise Bundle Repository&lt;/a&gt; which already makes available (directly or via other repository front ends) about a thousand of the most popular open source Java components packaged as OSGi bundles with carefully constructed bundle manifests.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-2326142577979059939?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/2326142577979059939/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=2326142577979059939' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/2326142577979059939'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/2326142577979059939'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2010/01/building-osgi-applications.html' title='Building OSGi applications'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-7563408716067023671</id><published>2010-01-12T11:12:00.002Z</published><updated>2010-01-12T11:18:14.088Z</updated><title type='text'>Eclipse Virgo project</title><content type='html'>The news just broke. SpringSource are donating the dm Server code base to eclipse.org as part of the EclipseRT umbrella project. This should be just the server runtime that EclipseRT has been looking for. The &lt;a href="http://www.eclipse.org/proposals/virgo/"&gt;Virgo project proposal&lt;/a&gt; is available and more details are on the &lt;a href="http://blog.springsource.com/2010/01/12/dm-server-project-moves-to-eclipse-org/"&gt;SpringSource blog&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-7563408716067023671?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/7563408716067023671/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=7563408716067023671' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/7563408716067023671'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/7563408716067023671'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2010/01/eclipse-virgo-project.html' title='Eclipse Virgo project'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-7718574466614272448</id><published>2009-12-08T09:29:00.003Z</published><updated>2009-12-08T10:08:44.873Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSGi'/><category scheme='http://www.blogger.com/atom/ns#' term='WebSphere'/><category scheme='http://www.blogger.com/atom/ns#' term='Aries'/><title type='text'>WebSphere OSGi Application Model</title><content type='html'>As &lt;a href="http://underlap.blogspot.com/2009/12/springsource-dm-server-catching-on.html"&gt;noted&lt;/a&gt; previously, WebSphere Application Server's alpha support for OSGi applications is similar to that of SpringSource dm Server. Now IBM's open source server, Geronimo, has taken its &lt;a href="http://markmail.org/message/s3gytk6kxe7vkzur"&gt;first steps&lt;/a&gt; to join the party.&lt;br /&gt;&lt;br /&gt;Apparently Geronimo 3.0 is now based on OSGi, like all other modern Java app servers. (I wonder what vestigial traces of its GBean/XBean heritage remain?)&lt;br /&gt;&lt;br /&gt;Geronimo's OSGi application model is provided by the &lt;a href="http://incubator.apache.org/aries/"&gt;Aries&lt;/a&gt; incubator, so I wonder if that is also the base of the WAS alpha, since Geronimo is essentially &lt;a href="http://www-01.ibm.com/software/webservers/appserv/community/"&gt;WAS CE&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Maybe the answer is that the closed source WAS is also based on Aries, but I didn't dare accept the license agreement on the download to find out.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-7718574466614272448?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/7718574466614272448/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=7718574466614272448' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/7718574466614272448'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/7718574466614272448'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2009/12/websphere-osgi-application-model.html' title='WebSphere OSGi Application Model'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-712674284165383273</id><published>2009-12-07T05:27:00.004Z</published><updated>2009-12-07T05:52:18.077Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='WebLogic'/><category scheme='http://www.blogger.com/atom/ns#' term='GlassFish'/><category scheme='http://www.blogger.com/atom/ns#' term='OSGi'/><category scheme='http://www.blogger.com/atom/ns#' term='dm Server'/><category scheme='http://www.blogger.com/atom/ns#' term='WebSphere'/><category scheme='http://www.blogger.com/atom/ns#' term='SpringSource'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss'/><title type='text'>SpringSource dm Server catching on</title><content type='html'>The recently &lt;a href="https://www14.software.ibm.com/iwm/web/cc/earlyprograms/websphere/iwsasosgia/index.shtml"&gt;announced&lt;/a&gt; alpha driver of IBM WebSphere Application Server v7 support for OSGi applications is covered in a brief dzone &lt;a href="http://java.dzone.com/news/ibm-bringing-osgi-enterprise"&gt;interview&lt;/a&gt; with Kirk Knoernschild of the Burton Group.&lt;br /&gt;&lt;br /&gt;As Kirk notes in his blog, &lt;a href="http://www.springsource.org/dmserver"&gt;SpringSource dm Server&lt;/a&gt; has already brought OSGi to the enterprise. dm Server v1.0 shipped in September 2008 and v2.0 will enter RC1 in the next few weeks.&lt;br /&gt;&lt;br /&gt;The WAS alpha has some features in common with dm Server, notably repositories and applications along similar lines to plans and PARs. Immitation is the sincerest form of flattery or, putting it another way, IBM has validated dm Server's approach.&lt;br /&gt;&lt;br /&gt;I'm still waiting for technical details of &lt;a href="http://www.eisele.net/blog/2009/10/preview-weblogic-dm-server-weblogic.html"&gt;WebLogic DM Server&lt;/a&gt;, but since it is microkernel based (unlike WAS) and with a name like that, it's likely to validate dm Server further.&lt;br /&gt;&lt;br /&gt;Meanwhile GlassFish and JBoss support for OSGi is coming along nicely, so it'll be fascinating to see what kind of OSGi application models these projects end up providing.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-712674284165383273?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/712674284165383273/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=712674284165383273' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/712674284165383273'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/712674284165383273'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2009/12/springsource-dm-server-catching-on.html' title='SpringSource dm Server catching on'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-8182167732162702785</id><published>2009-06-16T20:17:00.002+01:00</published><updated>2009-06-16T20:29:43.756+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Harmony'/><category scheme='http://www.blogger.com/atom/ns#' term='OSGi'/><category scheme='http://www.blogger.com/atom/ns#' term='Jigsaw'/><category scheme='http://www.blogger.com/atom/ns#' term='JSR 294'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenJDK'/><title type='text'>Jigsaw/JSR 294 on JavaPosse</title><content type='html'>I listened to most of the JavaPosse interview with Mark Reinhold and Alex Buckley about Project Jigsaw and JSR 294. It's nice to see some technical details emerging and I can start to see why OpenJDK would prefer a different design for modularity to that of Apache Harmony.&lt;br /&gt;&lt;br /&gt;I was moderately surprised to find that the design point is to load multiple Jigsaw modules with "local" dependencies into the same class loader. I wonder how many class loaders the JRE will end up having? There was even talk of putting all the bootstrap classes in a single class loader. So maybe the answer is most of the JRE code will be loaded by in the bootstrap class loader and subdivided using JSR 294 constructs. Time will no doubt tell.&lt;br /&gt;&lt;br /&gt;For the record, I hope I've never claimed that Apache Harmony has shipped runtime modularity. The Harmony class libraries are divided into bundles with OSGi metadata. A prototype that enforced those class loader boundaries in the JVM was built, but never shipped. It had a rather different design for bootstrap class loading to that being proposed for OpenJDK, but I suppose Harmony had the benefit of having modularity in mind from the start.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-8182167732162702785?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/8182167732162702785/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=8182167732162702785' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/8182167732162702785'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/8182167732162702785'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2009/06/jigsawjsr-294-on-javaposse.html' title='Jigsaw/JSR 294 on JavaPosse'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-7173924814745870927</id><published>2009-06-13T05:41:00.005+01:00</published><updated>2009-06-13T08:02:30.013+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Scala'/><category scheme='http://www.blogger.com/atom/ns#' term='OSGi'/><category scheme='http://www.blogger.com/atom/ns#' term='git'/><category scheme='http://www.blogger.com/atom/ns#' term='maven'/><title type='text'>OSGi, Scala, maven, and git</title><content type='html'>I've noticed a few people are integrating OSGi and Scala. In particular &lt;a href="http://heikoseeberger.blogspot.com/"&gt;Heiko Seeberger&lt;/a&gt; is building OSGi bundles for the Scala language plus various utility modules and DSLs. Then he's using maven for build and git for version control.&lt;br /&gt;&lt;br /&gt;I am, of course, a fan of OSGi. I'm rapidly warming to git. But I'm not sure Scala and maven really solve more problems than they introduce. I don't want to dwell on maven as I'm not sure other build systems are really much better, but Scala does raise lots of question in my mind.&lt;br /&gt;&lt;br /&gt;Many years ago, I was keen to adopt new technology and some combinations worked really well while others just seemed to multiply the overall complexity. One particular combination was the use of Z specification language embedded using literate programming in a subset of our target programming language with proof rules. It was possible to create proof trees of simple specifications refined to the target language. The main problem was that there were very few people who could acquire the skills necessary to master the combined technology.&lt;br /&gt;&lt;br /&gt;Well, perhaps that was an extreme example and maybe it was doomed from the start, but I have a niggling doubt about the size of the Scala language.&lt;br /&gt;&lt;br /&gt;So I'd be delighted to understand what features of OSGi and Scala work well together (and what features are simply best not used as part of this combination). In particular, are there any particular problems which are significantly simplified by combining OSGi and Scala which cannot be attacked very well using OSGi (and Java) or Scala alone?&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Postscript&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This &lt;a href="http://cloud.github.com/downloads/hseeberger/scalamodules/scalamodules-reference-1.0.1.pdf"&gt;document&lt;/a&gt; partially answers my questions. Scala makes it easy to write a DSL for handling OSGi services simply.&lt;br /&gt;&lt;br /&gt;This is similar to the kind of function provided by Spring DM (or, equivalently, the OSGi Blueprint service).&lt;br /&gt;&lt;br /&gt;The main difference is that there is still some minimal clutter in the Scala program whereas with Spring DM POJOs are configured in XML to provide and use OSGi services. I suppose the Scala approach favours sophisticated use of OSGi services, but this is not the norm in typical enterprise applications.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-7173924814745870927?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/7173924814745870927/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=7173924814745870927' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/7173924814745870927'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/7173924814745870927'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2009/06/osgi-scala-maven-and-git.html' title='OSGi, Scala, maven, and git'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-3783227608336686607</id><published>2009-06-12T18:32:00.008+01:00</published><updated>2009-06-12T19:26:05.809+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSGi'/><category scheme='http://www.blogger.com/atom/ns#' term='dm Server'/><title type='text'>Coding and hill-walking</title><content type='html'>I've recently been re-organising the internals of the SpringSource dm Kernel so that it can be extended to provide structured install artefacts known as "plans". The current code has been extended to provide a plan equivalent to the existing PAR files, but other variants of plans, unscoped and non-atomic, cannot be implemented without the necessary data structures being put in place.&lt;br /&gt;&lt;br /&gt;From early in the development of dm Server 1.0, the team was using several terms which summarised the behaviour of the kernel, but which were not easily identified in the code. Terms such as "scope" and "deployment pipeline". As we started thinking about 2.0, we identified "plan", "install tree", and "install environment" as basic concepts, even if the latter was pretty fluffy.&lt;br /&gt;&lt;br /&gt;Scopes were implemented as first class types quite a while ago now and were crucial to being able to make cloning work. One of the trickiest areas was performing operations on types which could be cloned or non-cloned. Explicit scopes enabled these operations to be coded to a non-cloned interface type and re-dispatched as necessary to the appropriate cloned type.&lt;br /&gt;&lt;br /&gt;Recently, I've been turning deployment pipeline, install tree, and install environment into first class types. I really love this kind of work. It's rather like walking through a range of hills where the higher peaks are only visible when some of the lower summits are behind you.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_RRoi_WAgixw/SjKb8hYrHdI/AAAAAAAAAGc/cCaH1X5nmvs/s1600-h/P8200088.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://2.bp.blogspot.com/_RRoi_WAgixw/SjKb8hYrHdI/AAAAAAAAAGc/cCaH1X5nmvs/s400/P8200088.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5346507171698515410" /&gt;&lt;/a&gt;&lt;br /&gt;Sometimes however things get much more strenuous. It's like the terrain is getting much steeper and there no obvious path to follow.&lt;br /&gt;&lt;br /&gt;This afternoon I was struggling to structure the code to handle the starting of bundles. There's an interesting coordination and state management issue because starting a bundle has a synchronous phase defined by OSGi and often an asynchronous phase defined by Spring DM or the OSGi Blueprint Service. I made some progress, but I'm still not happy with the current code and it certainly isn't easily unit tested which is a good measure of code quality.&lt;br /&gt;&lt;br /&gt;At this point, the only option is to take a break and come back to the problem with a clear head. I tried consulting colleagues and that helped quite a bit, but there are hopefully some really good abstractions waiting to be discovered.&lt;br /&gt;&lt;br /&gt;I think the root cause of the complexity of this small area is that it is fairly low level and we're lacking some really good ways of thinking about the asynchronous processes involved. Occasionally, modelling processes in CSP and exploring the properties of the model using a model checker such as FDR has helped. But more often than not, the best approach seems to be iteratively cleaning up a bunch of code until a good structure starts to emerge.&lt;br /&gt;&lt;br /&gt;In the worst case, I'll make the code as clean as possible and add it to the list of areas where future discoveries will hopefully make things cleaner. But I'm hoping for a much better outcome.&lt;br /&gt;&lt;br /&gt;Well, that's enough for now. I put this blog together as I expect other people have similar experiences when working in complex areas of software and it's good to learn from each other. I'd be interested in your perspective and how you approach these kinds of activities.&lt;br /&gt;&lt;br /&gt;I'll leave you with a hill-walking illustration of my current position: standing on one peak trying to make out the next one in the mist.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_RRoi_WAgixw/SjKbhkCZhwI/AAAAAAAAAGU/PJtHHZoCr1w/s1600-h/P8210103.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://4.bp.blogspot.com/_RRoi_WAgixw/SjKbhkCZhwI/AAAAAAAAAGU/PJtHHZoCr1w/s400/P8210103.JPG" alt="" id="BLOGGER_PHOTO_ID_5346506708553926402" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-3783227608336686607?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/3783227608336686607/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=3783227608336686607' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/3783227608336686607'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/3783227608336686607'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2009/06/coding-and-hill-walking.html' title='Coding and hill-walking'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_RRoi_WAgixw/SjKb8hYrHdI/AAAAAAAAAGc/cCaH1X5nmvs/s72-c/P8200088.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-456533669901227962</id><published>2009-04-28T14:17:00.004+01:00</published><updated>2011-08-06T14:29:05.343+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CaseInsensitiveMap'/><title type='text'>CaseInsensitiveMap&lt;V&gt;</title><content type='html'>I recently wrote some utility code which we'll be using to process bundle manifests, typically to map header names to typed values. It was surprising that this code was neither available elsewhere nor completely trivial to implement.&lt;br /&gt;&lt;br /&gt;So what was it? A map with String keys which is insensitive to the case of the keys and which &lt;span style="font-style: italic;"&gt;preserves&lt;/span&gt; the case of the keys. Apache Commons has a &lt;a href="http://commons.apache.org/collections/apidocs/org/apache/commons/collections/map/CaseInsensitiveMap.html"&gt;CaseInsensitiveMap&lt;/a&gt; which whacks the keys to lower case on input. I was tempted to use that code, but in our environment, it's important to preserve the case of keys.&lt;br /&gt;&lt;br /&gt;For example, the &lt;a href="http://www.springsource.org/bundlor"&gt;bundlor&lt;/a&gt; tool will eventually use this code to create bundle manifests from templates. If the user carefully spells headers in the template with mixed case, e.g. "Export-Package", they would probably be disappointed to see the headers converted to lower case in the generated manifest.&lt;br /&gt;&lt;br /&gt;Implementing an (Apache licensed)  case-preserving &lt;a href="http://git.eclipse.org/c/virgo/org.eclipse.virgo.util.git/tree/org.eclipse.virgo.util.common/src/main/java/org/eclipse/virgo/util/common/CaseInsensitiveMap.java"&gt;CaseInsensitiveMap&lt;/a&gt; was an interesting exercise. I saved some time by extending AbstractMap and AbstractSet (for the key and entry sets). I used an instance of ConcurrentHashMap to maintain the state. I exposed one internal type to be package visible so I could get 100% &lt;a href="http://git.eclipse.org/c/virgo/org.eclipse.virgo.util.git/tree/org.eclipse.virgo.util.common/src/test/java/org/eclipse/virgo/util/common/CaseInsensitiveMapTests.java"&gt;unit test&lt;/a&gt; coverage and made some inner classes static to stop findbugs complaining.&lt;br /&gt;&lt;br /&gt;Why blog about this? Simply to increase your chances of finding the class if you need it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-456533669901227962?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/456533669901227962/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=456533669901227962' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/456533669901227962'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/456533669901227962'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2009/04/caseinsensitivemapv.html' title='CaseInsensitiveMap&amp;lt;V&amp;gt;'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-1020889815649556054</id><published>2009-04-09T09:28:00.003+01:00</published><updated>2009-04-09T10:00:56.528+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='RFC 66'/><category scheme='http://www.blogger.com/atom/ns#' term='dm Server'/><category scheme='http://www.blogger.com/atom/ns#' term='cloning'/><title type='text'>SpringSource dm Server 2.0 M1</title><content type='html'>As in Rob's &lt;a href="http://blog.springsource.com/2009/04/02/announcing-dm-server-20-m1/"&gt;blog&lt;/a&gt;, we recently shipped the first milestone of dm Server v2.0. Apart from some new function, this marks an opening up of the dm Server development process with publicly accessible subversion repositories and issue tracker.&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://blog.springsource.com/2009/04/01/springsource-dm-server-roadmap/"&gt;2.0 roadmap&lt;/a&gt; is pretty exciting, and includes constructing a Reference Implementation for RFC 66 ("web container for OSGi") from the existing web components of dm Server.&lt;br /&gt;&lt;br /&gt;I'm spending most of my time down in the &lt;a href="https://anonsvn.springsource.org/svn/dm-server-kernel"&gt;dm Kernel&lt;/a&gt; implementing "cloning" which, roughly speaking,  enables a bundle to be wired more than one way, which is not normally possible in OSGi. Cloning copies bundles into an application's scope. This enables the OSGi resolver to have another go at wiring the dependencies of the cloned bundles in a way which suits the application. More information on cloning is included in the above blog entries.&lt;br /&gt;&lt;br /&gt;Application scopes can be thought of as an alternative to "nested" OSGi frameworks, which are being specified in the OSGi Alliance and implemented in Equinox. The contents of an application scope can "see" all the contents of the global scope which are not "shadowed" in the application scope. The contents of a nested framework can, by default,  not see any of the content of the parent framework(s) unless the nested framework is explicitly defined to see some of the parents' contents.&lt;br /&gt;&lt;br /&gt;Much of what we're learning about cloning into application scopes, such as how to calculate what needs cloning and how to manage cloned extenders, will also apply to cloning into nested frameworks if and when that becomes necessary.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-1020889815649556054?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/1020889815649556054/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=1020889815649556054' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/1020889815649556054'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/1020889815649556054'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2009/04/springsource-dm-server-20-m1.html' title='SpringSource dm Server 2.0 M1'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-5647089292261366780</id><published>2009-04-08T14:27:00.003+01:00</published><updated>2009-04-08T14:46:45.984+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Harmony'/><category scheme='http://www.blogger.com/atom/ns#' term='Java 7'/><category scheme='http://www.blogger.com/atom/ns#' term='JDK 7'/><title type='text'>Is JDK 7 Java?</title><content type='html'>I wonder if the JCP rules allow &lt;a href="http://blogs.sun.com/theplanetarium/entry/jdk_7_checking_in"&gt;JDK 7&lt;/a&gt; to be called "Java"? Sun appears to think so since the &lt;a href="https://jdk7.dev.java.net/"&gt;JDK 7 page&lt;/a&gt; is entitled "jdk7: Java SE 7". Apache Harmony meanwhile will presumably avoid calling itself "Java" until it can obtain and pass the JCK. Does this make Harmony the true guardian of Java? ;-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-5647089292261366780?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/5647089292261366780/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=5647089292261366780' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/5647089292261366780'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/5647089292261366780'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2009/04/is-jdk-7-java.html' title='Is JDK 7 Java?'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-1751352676505713491</id><published>2009-03-26T08:36:00.003Z</published><updated>2009-03-26T08:43:16.252Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSGi'/><category scheme='http://www.blogger.com/atom/ns#' term='JSR 294'/><title type='text'>Progress on JSR 294</title><content type='html'>JSR 294 seems to be underway again. BJ Hargrave &lt;a href="http://blog.bjhargrave.com/2009/03/i-am-visible-but-am-i-accessible.html"&gt;describes&lt;/a&gt; an EG discussion of &lt;a href="http://java.sun.com/docs/books/jls/second_edition/html/packages.doc.html#40031"&gt;visibility&lt;/a&gt; and &lt;a href="http://java.sun.com/docs/books/jls/second_edition/html/names.doc.html#104285"&gt;access control&lt;/a&gt; which I found enlightening.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-1751352676505713491?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/1751352676505713491/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=1751352676505713491' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/1751352676505713491'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/1751352676505713491'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2009/03/progress-on-jsr-294.html' title='Progress on JSR 294'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-6148669414466033422</id><published>2008-12-09T15:05:00.003Z</published><updated>2008-12-09T20:26:30.074Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='JSR 277'/><title type='text'>Project Jigsaw</title><content type='html'>Mark Reinhold recently announced &lt;a href="http://blogs.sun.com/mr/entry/jigsaw"&gt;Project Jigsaw&lt;/a&gt; for modularising the JDK. Could this be a step towards the &lt;a href="http://underlap.blogspot.com/2007/07/java-modularity-where-do-we-go-from.html"&gt;dream solution&lt;/a&gt;? I can hope.&lt;br /&gt;&lt;br /&gt;Meanwhile JSR 277 is deferred beyond Java 7. Joy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-6148669414466033422?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/6148669414466033422/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=6148669414466033422' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/6148669414466033422'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/6148669414466033422'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2008/12/project-jigsaw.html' title='Project Jigsaw'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-1767666599014445185</id><published>2008-11-06T09:05:00.003Z</published><updated>2008-11-06T09:34:36.958Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Refactoring'/><category scheme='http://www.blogger.com/atom/ns#' term='Structure101'/><title type='text'>Refactoring and Structure101</title><content type='html'>I'm in the middle of a fairly broad refactoring of the internals of the &lt;a href="http://www.springsource.com/products/suite/dmserver"&gt;SpringSource dm Server&lt;/a&gt; to introduce an interface to some of the subcomponents and ensure that the rest of the code accesses those subcomponents via the interface rather than directly.&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://www.headwaysoftware.com/products/structure101/index.php"&gt;Structure101&lt;/a&gt; tool has proved invaluable in this process. It has excellent support for analysing the dependencies between components and identifying anomalous dependencies such as those from lower layers of the code to higher layers. But it also supports transformations and visibility settings which turn out to be extremely useful for refactoring.&lt;br /&gt;&lt;br /&gt;I created transformations to collect together packages which I want to treat as a unit from the point of view of the current refactoring. This would not be possible using standard refactoring techniques as the packages in question cannot actually be renamed, for reasons I won't go into here. The transformations were of the form:&lt;br /&gt;&lt;br /&gt;org.foo.* -&gt; myunit.org.foo.*&lt;br /&gt;org.bar.* -&gt; myunit.org.bar.*&lt;br /&gt;&lt;br /&gt;The transformations apply only in Structure101's model of the system and do not affect the actual code. The net is that I can then analyse dependencies on the myunit package hierarchy using Structure101's default mechanisms.&lt;br /&gt;&lt;br /&gt;Visibility settings come in useful in identifying the pieces of code I need to refactor. By modifying the Structure101 model so that myunit is a private subcomponent of the new interface component, all dependencies on myunit from outside of the interface component show up as anomalies.&lt;br /&gt;&lt;br /&gt;I can then use these anomalies as a 'to do' list for my refactoring. Clicking on one of them shows the precise code dependency which I can refactor by extending the interface component, if necessary, and then changing the using code to depend on the interface component. Refreshing the Structure101 model takes a few seconds after which there is one less anomaly showing on the diagram.&lt;br /&gt;&lt;br /&gt;I've really appreciated the support from the Structure101 developers who have helped me get the best out of the tool. It sure beats some combination of grep, a cross-referencing tool like OpenGrok, plus a ton of yellow stickies...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-1767666599014445185?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/1767666599014445185/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=1767666599014445185' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/1767666599014445185'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/1767666599014445185'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2008/11/refactoring-and-structure101.html' title='Refactoring and Structure101'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-2021714596949929680</id><published>2008-06-09T17:23:00.004+01:00</published><updated>2008-06-09T17:27:43.058+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SpringSource Application Platform OSGi'/><title type='text'>100% bloat free</title><content type='html'>Here's the image from the T-shirts that were given away at JavaOne. Click the image to enlarge it.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_RRoi_WAgixw/SE1ZZSWJWSI/AAAAAAAAAD4/qGcWIdSb_Q8/s1600-h/springsource-ap-background_v2_1440x900.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_RRoi_WAgixw/SE1ZZSWJWSI/AAAAAAAAAD4/qGcWIdSb_Q8/s400/springsource-ap-background_v2_1440x900.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5209918634893859106" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-2021714596949929680?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/2021714596949929680/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=2021714596949929680' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/2021714596949929680'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/2021714596949929680'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2008/06/100-bloat-free.html' title='100% bloat free'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_RRoi_WAgixw/SE1ZZSWJWSI/AAAAAAAAAD4/qGcWIdSb_Q8/s72-c/springsource-ap-background_v2_1440x900.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-3710937325681090580</id><published>2008-04-30T04:38:00.013+01:00</published><updated>2008-05-01T11:03:11.876+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SpringSource Application Platform OSGi'/><title type='text'>SpringSource Application Platform ships</title><content type='html'>Today the &lt;font style="font-style: italic;"&gt;SpringSource Application Platform&lt;/font&gt; shipped its first beta release. Version 1.0 is essentially a combination of Spring, OSGi and Tomcat engineered into a stand-alone runtime.&lt;br /&gt;&lt;br /&gt;The programming model is Spring with OSGi and the option of a new packaging format: the &lt;font style="font-style: italic;"&gt;platform archive&lt;/font&gt; or PAR file. A PAR file comprises multiple OSGi bundles. This brings OSGi modularity and versioning to enterprise applications.&lt;br /&gt;&lt;br /&gt;The diagram below gives a high level view of the structure of the platform.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_RRoi_WAgixw/SBdtiulXPII/AAAAAAAAADw/--wZ1aFf4nE/s1600-h/platform-arch.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_RRoi_WAgixw/SBdtiulXPII/AAAAAAAAADw/--wZ1aFf4nE/s400/platform-arch.jpg" alt="" id="BLOGGER_PHOTO_ID_5194741138582879362" border="0"&gt;&lt;/a&gt;So what does the platform deliver over and above a standard OSGi container? Well, apart from the servlet function, integrated Spring support, the modular kernel-based runtime, and the full support for diagnostics and first failure data capture, there are quite a few features that are of interest to an OSGi audience:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The platform has a repository which automatically provisions dependencies as bundles are installed into OSGi. This repository stores the platform's own bundles as well as application and third party bundles.&lt;/li&gt;&lt;li&gt;In addition to the PAR mentioned above, there is a new concept of a &lt;font style="font-style: italic;"&gt;library&lt;/font&gt; which is a named, versioned collection of OSGi bundles installed in the repository typically for use by applications. This is accessed via a new manifest header, import-library, which imports all the packages  exported by the bundles of a library.&lt;/li&gt;&lt;li&gt;Another new manifest header, import-bundle, imports all the packages exported by a single bundle. This avoids the need to wrap components consisting of a single bundle in a library.&lt;/li&gt;&lt;li&gt;There is also some novel diagnostic help when a bundle cannot be resolved. The platform's &lt;font style="font-style: italic;"&gt;resolution failure detective&lt;/font&gt; attempts to extract a concise summary of the problem and the most likely root causes.&lt;/li&gt;&lt;li&gt;Associated with the platform is a carefully constructed repository of commonly used bundles: the &lt;a href="http://www.springsource.com/repository/app/"&gt;SpringSource Enterprise Bundle Repository&lt;/a&gt; known informally as the "bundle repository in the sky", or "BRITS". The bundles have validated OSGi manifests and the whole repository has been checked to make sure that its bundles can be used together.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Finally, I can't resist saying a bit about the architecture of the platform. In the past, I've been involved in restructuring projects - adding in modularity after the fact. The platform was built in a modular fashion from day 1.&lt;br /&gt;&lt;br /&gt;The whole platform consists of &lt;font style="font-style: italic;"&gt;subsystems&lt;/font&gt; which are similar in concept to libraries but which are managed specially by the kernel.  Each subsystem is a named, versioned collection of bundles. The kernel manages the installation and starting of subsystems as the platform initialises. The kernel manages the lifecycle of each subsystem and its bundles, even reacting to unsolicited lifecycle events of the bundles of a subsystem to keep the state of the subsystem consistent.&lt;br /&gt;&lt;br /&gt;Subsystems are used to control the function of the platform. Some subsystems are always present, but others are optional and are configured in a profile. This mechanism allows the precise function of the platform to be configured without rebuilding. For instance, the shipped &lt;font size="2"&gt;&lt;font face="courier new"&gt;profile.config&lt;/font&gt;&lt;/font&gt; file (in the &lt;font size="2"&gt;&lt;font face="courier new"&gt;config&lt;/font&gt;&lt;/font&gt; directory) looks like this:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;/*&lt;br /&gt; * SpringSource Application Platform profile manager default&lt;br /&gt; * configuration file.&lt;br /&gt; */&lt;br /&gt;{&lt;br /&gt; "profile": {&lt;br /&gt;   "version" : 1.0,&lt;br /&gt;   "name" : "web",&lt;br /&gt;   "subsystems" : ["com.springsource.platform.servlet",            &lt;br /&gt;                   "com.springsource.platform.web"]&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;which shows the servlet container and web personality subsystems.&lt;br /&gt;&lt;br /&gt;My colleague Rob Harrop just &lt;a href="http://blog.springsource.com/main/2008/04/30/introducing-the-springsource-application-platform/"&gt;blogged&lt;/a&gt; about the platform if you want to know more. Why not &lt;a href="http://www.springsource.com/beta/s2ap/membershipform.php"&gt;register&lt;/a&gt;, download the binary, have a play, and tell us what you think.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-3710937325681090580?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/3710937325681090580/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=3710937325681090580' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/3710937325681090580'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/3710937325681090580'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2008/04/springsource-application-platform-ships.html' title='SpringSource Application Platform ships'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_RRoi_WAgixw/SBdtiulXPII/AAAAAAAAADw/--wZ1aFf4nE/s72-c/platform-arch.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-8728484106425218795</id><published>2008-04-15T08:36:00.006+01:00</published><updated>2008-04-15T08:51:49.445+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSGi'/><category scheme='http://www.blogger.com/atom/ns#' term='JSR 294'/><category scheme='http://www.blogger.com/atom/ns#' term='JSR 277'/><title type='text'>OSGi could be great for JSR 277</title><content type='html'>Bryan Atsatt describes a plausible &lt;a href="http://atsatt.blogspot.com/2008/04/jsr-277-could-be-great-for-osgi.html"&gt;way forward&lt;/a&gt; for JSR 277. I agree with his reasoning, although OSGi is not only the de facto standard for Java modularity, it's a proper standard too.&lt;br /&gt;&lt;br /&gt;Bryan was one of the key movers in the Expert Group when I was involved. In fact, he proposed a solution to JSR 294 ages ago which is close, if not identical, to &lt;a href="http://blogs.sun.com/abuckley/en_US/entry/module_membership_declarations"&gt;the approach&lt;/a&gt; Alex Buckley is now considering.&lt;br /&gt;&lt;br /&gt;Welcome to the blogosphere, Bryan!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-8728484106425218795?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/8728484106425218795/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=8728484106425218795' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/8728484106425218795'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/8728484106425218795'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2008/04/osgi-could-be-great-for-jsr-277.html' title='OSGi could be great for JSR 277'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-8236360638163487632</id><published>2008-03-01T09:19:00.003Z</published><updated>2008-03-01T09:35:34.563Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSGi'/><category scheme='http://www.blogger.com/atom/ns#' term='interoperation'/><category scheme='http://www.blogger.com/atom/ns#' term='JSR 291'/><category scheme='http://www.blogger.com/atom/ns#' term='JSR 277'/><title type='text'>Popular RFE</title><content type='html'>My favourite sunbug is now on the list of the &lt;a href="http://bugs.sun.com/top25_rfes.do"&gt;Top 25 RFEs&lt;/a&gt; (Requests for Enhancement).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-8236360638163487632?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/8236360638163487632/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=8236360638163487632' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/8236360638163487632'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/8236360638163487632'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2008/03/popular-rfe.html' title='Popular RFE'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-3884287739762519957</id><published>2008-02-13T22:58:00.006Z</published><updated>2008-02-13T23:11:52.219Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSGi'/><category scheme='http://www.blogger.com/atom/ns#' term='interoperation'/><category scheme='http://www.blogger.com/atom/ns#' term='JSR 291'/><category scheme='http://www.blogger.com/atom/ns#' term='JSR 277'/><title type='text'>The 11th most popular sunbug?</title><content type='html'>&lt;a href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6650394"&gt;Sunbug 6650394&lt;/a&gt; is coming along nicely - both in terms of votes and supportive comments. At the time of writing, it has 99 votes, so thank you if you took the trouble to vote! If you care and you haven't yet voted or commented, please consider doing so.&lt;br /&gt;&lt;br /&gt;I was hoping the bug would make it into Sun's &lt;a href="http://bugs.sun.com/top25_bugs.do"&gt;Top 25 Bugs&lt;/a&gt; list since it has more votes than most of the bugs in that list, but for some reason it's not yet included. If the list was accurate, which it clearly isn't, then 6650394 would be the 11th most popular sunbug.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-3884287739762519957?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/3884287739762519957/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=3884287739762519957' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/3884287739762519957'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/3884287739762519957'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2008/02/osgi-interop-11th-most-popular-sunbug.html' title='The 11th most popular sunbug?'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-2508796231786536397</id><published>2008-01-31T09:07:00.000Z</published><updated>2008-01-31T09:12:25.389Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSGi'/><category scheme='http://www.blogger.com/atom/ns#' term='interoperation'/><category scheme='http://www.blogger.com/atom/ns#' term='JSR 291'/><category scheme='http://www.blogger.com/atom/ns#' term='JSR 277'/><title type='text'>Sunbug for JSR 277 module system interoperation</title><content type='html'>Sun has kindly raised &lt;a href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6650394"&gt;sunbug 6650394&lt;/a&gt; on my behalf to track the module system interoperation issue for JSR 277.&lt;br /&gt;&lt;br /&gt;Please consider voting for this bug if you would like JSR 277 to interoperate with JSR 291 (OSGi). Add yourself to the watch list if you want to track the bug.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-2508796231786536397?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/2508796231786536397/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=2508796231786536397' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/2508796231786536397'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/2508796231786536397'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2008/01/sunbug-for-jsr-277-module-system.html' title='Sunbug for JSR 277 module system interoperation'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-4123711059942248119</id><published>2008-01-01T12:16:00.000Z</published><updated>2008-01-01T12:23:53.291Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='JSR 294'/><title type='text'>JSR 294 Early Draft</title><content type='html'>The Early Draft Review of JSR 294 is now complete. Little seems to have changed since when I left the Expert Group. The main weakness from my perspective is that a class file must name its superpackage in order for the class to be a member of the superpackage. This means that you can't easily produce a program which runs on existing versions of Java but which will take advantage of superpackages when it runs on Java 7 and beyond.&lt;br /&gt;&lt;br /&gt;Practically speaking, this means that superpackages will only be used in applications that are willing to restrict themselves to Java 7 and beyond. So I suspect that superpackages will not come into popular usage within the next few years.&lt;br /&gt;&lt;br /&gt;Of course, this can be gotten round by using a custom class loader with some bytecode rewriting magic, but one of the reasons that JSR 277, and its progeny JSR 294, were introduced was to avoid application developers from having to create custom class loaders.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-4123711059942248119?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/4123711059942248119/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=4123711059942248119' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/4123711059942248119'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/4123711059942248119'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2008/01/jsr-294-early-draft.html' title='JSR 294 Early Draft'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-5131096418212680921</id><published>2007-11-21T01:54:00.000Z</published><updated>2007-11-21T02:25:20.303Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='SpringSource'/><title type='text'>SpringSource</title><content type='html'>A couple of weeks in the new job and I work for a different company! Well almost - Interface21 has been renamed to SpringSource to strengthen the association with the Spring portfolio of products.&lt;br /&gt;&lt;a href="http://www.springsource.com/"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://www.springsource.com/sping-theme/images/common/springsource_logo.png" alt="" border="0" /&gt;&lt;/a&gt;New &lt;a href="http://www.springsource.com/"&gt;web site&lt;/a&gt;, new email addresses, new logo, new business cards, etc. On the other hand the job is unchanged, as is the green corporate colour scheme...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-5131096418212680921?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/5131096418212680921/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=5131096418212680921' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/5131096418212680921'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/5131096418212680921'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2007/11/springsource.html' title='SpringSource'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-7064986534154886540</id><published>2007-11-14T10:44:00.000Z</published><updated>2007-11-17T12:33:39.406Z</updated><title type='text'>Life in a small company</title><content type='html'>I'm gradually noticing  what's different about working in a small company. For one thing,  there are very few processes, other than for software development where there are one or two.&lt;br /&gt;&lt;br /&gt;For instance, I just took this photo. of the room I work in. Damilola (on the left) and Chris (on the right) noticed the idiot lifting his macbook into mid-air, but Nancie (in the distance) apparently didn't.  I wonder how many levels of sign-off would have been needed  to publish such a photo. in my previous company?&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_RRoi_WAgixw/Rz7fcGFDQsI/AAAAAAAAADk/UVfjVmYae3g/s1600-h/Photo+6.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_RRoi_WAgixw/Rz7fcGFDQsI/AAAAAAAAADk/UVfjVmYae3g/s320/Photo+6.jpg" alt="" id="BLOGGER_PHOTO_ID_5133786299010073282" border="0" /&gt;&lt;/a&gt;A more telling example of the minimal processes was that it recently took about an hour to obtain licenses for a piece of commercial software we decided to use. This included getting financial sign-off from someone on a business trip on the West Coast, submitting the order, and getting the license keys ready to use.&lt;br /&gt;&lt;br /&gt;This is a pleasant change for me. Processes are sometimes essential, but it's so easy to make them too heavy. The emphasis in a small company seems to be talking to other people and trusting them to do the right thing.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-7064986534154886540?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/7064986534154886540/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=7064986534154886540' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/7064986534154886540'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/7064986534154886540'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2007/11/life-in-small-company.html' title='Life in a small company'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_RRoi_WAgixw/Rz7fcGFDQsI/AAAAAAAAADk/UVfjVmYae3g/s72-c/Photo+6.jpg' height='72' width='72'/><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-7143140536273762713</id><published>2007-11-06T07:27:00.000Z</published><updated>2007-11-06T07:32:32.156Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Interface21'/><title type='text'>Joining Interface21</title><content type='html'>Today I start work for &lt;a href="http://www.interface21.com/"&gt;Interface21&lt;/a&gt; in Southampton. After more than a month of gardening leave, or more accurately decorating leave, I can't wait!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-7143140536273762713?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/7143140536273762713/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=7143140536273762713' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/7143140536273762713'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/7143140536273762713'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2007/11/joining-interface21.html' title='Joining Interface21'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-1716580776692345761</id><published>2007-10-17T13:51:00.000+01:00</published><updated>2007-10-17T14:09:22.304+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSGi'/><title type='text'>OSGi, type-safety, and the 'uses' directive</title><content type='html'>Java preserves type-safety when loading classes, even if there are buggy or malicious custom class loaders present. This is important as without type-safety, Java would not be secure.&lt;br /&gt;&lt;br /&gt;For example, it would be possible to access an object's private data using a spoofed version of a class with the private data declared public. Vijay Saraswat found just such a &lt;a href="http://www.cis.upenn.edu/%7Ebcpierce/courses/629/papers/Saraswat-javabug.html"&gt;type-safety bug&lt;/a&gt; in an early version of Java which was fixed by the introduction of '&lt;a href="http://www.cs.utah.edu/classes/cs5520/java/ClassLoader/liang-bracha.pdf"&gt;loading constraints&lt;/a&gt;'.&lt;br /&gt;&lt;br /&gt;So now that Java is type-safe, why need OSGi be concerned? Well, although OSGi can't break Java's type-safety, its support for versioning increases the risk that exceptions, such as &lt;a href="http://java.sun.com/javase/6/docs/api/java/lang/ClassCastException.html"&gt;ClassCastException&lt;/a&gt;, will be thrown to preserve type-safety. This usually occurs where two loaded versions of a particular class come into 'contact'.&lt;br /&gt;&lt;br /&gt;The most common case is where an attempt is made to cast an object of one version of a class to another version of the same class. There isn't necessarily anything malicious going on - it's simply that two legitimate versions of a class loaded in the same JVM have accidentally come into contact.&lt;br /&gt;&lt;br /&gt;OSGi increases the risk of such exceptions because it supports versioning of bundles and their contents: two (or more) versions of a given bundle can run in a JVM at the same time. These bundles will typically export similar classes. Since each OSGi bundle has its own class loader and a class is uniquely identified at runtime by the combination of its fully qualified class name and the class loader instance that defined the class, there can be two versions of each exported class present in the JVM at the same time.&lt;br /&gt;&lt;br /&gt;So, to minimise these problems, OSGi works hard to wire together bundles so that they will consistently use a particular version of each class. At a basic level, when OSGi is resolving the dependencies of a bundle, it uses resolved bundles to satisfy those dependencies in preference to unresolved bundles. This avoids gratuitously introducing two or more versions of a given bundle, together with its exported classes, into the system.&lt;br /&gt;&lt;br /&gt;But sometimes multiple versions of a class can, and indeed must, legitimately coexist. This can occur when assembling a large system from pieces which have been developed independently. The separate pieces can pre-req. distinct versions of common bundles. If these common bundles don't 'leak out' of the pieces of the system that use them, there is no problem.&lt;br /&gt;&lt;br /&gt;But if they do leak out, OSGi's 'uses' directive enables the bundles importing from the common bundles to specify the amount of 'leakage'. For example, the following method signature exposes a common type &lt;tt&gt;PType&lt;/tt&gt;:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;package org.bar.q;&lt;br /&gt;...&lt;br /&gt;public org.foo.common.p.PType someMethod() {...}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;and the following manifest statements record the leakage:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;import-package: org.foo.common.p&lt;br /&gt;export-package: org.bar.q,uses:="org.foo.common.p"&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;OSGi always resolves bundle dependencies so as to respect the 'uses' constraints. There's even support in Peter Kriens' bundle manifest creation tool, &lt;a href="http://www.aqute.biz/Blog/2007-05-21"&gt;bnd&lt;/a&gt;, which spots the most straightforward leakages, like the example above, and create the corresponding 'uses' clauses automatically.&lt;br /&gt;&lt;br /&gt;More subtle leakages need to be handled by the bundle programmer, but usually it is fairly obvious that something tricky is going on. For example, the following method take a parameter and casts it to the common type &lt;tt&gt;PType&lt;/tt&gt;:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;package org.bar.q;&lt;br /&gt;...&lt;br /&gt;public void anotherMethod(Object o) {&lt;br /&gt;... (org.foo.common.p.PType)o ...&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;To avoid class cast exceptions due to &lt;tt&gt;o&lt;/tt&gt; being an instance of the wrong version of &lt;tt&gt;PType&lt;/tt&gt;, the same manifest statements as in the first example above should be specified, although these could not be inferred automatically by bnd.&lt;br /&gt;&lt;br /&gt;So with appropriate 'uses' clauses, OSGi is able to manage multiple versions of bundles and minimise type-safety exceptions.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-1716580776692345761?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/1716580776692345761/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=1716580776692345761' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/1716580776692345761'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/1716580776692345761'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2007/10/osgi-type-safety-and-uses-directive.html' title='OSGi, type-safety, and the &apos;uses&apos; directive'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-2209231967965517279</id><published>2007-10-13T09:17:00.000+01:00</published><updated>2007-10-13T09:26:44.344+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software design'/><title type='text'>Writing good code</title><content type='html'>James Governor &lt;a href="http://www.redmonk.com/jgovernor/2007/10/12/links-for-2007-10-12/"&gt;drew&lt;/a&gt; my attention to Laura Thomson's &lt;a href="http://laurat.blogs.com/talks/premiumphp.pdf"&gt;summary&lt;/a&gt; of good coding practice - like a memory jogger for &lt;a href="http://www.cc2e.com/"&gt;Code Complete&lt;/a&gt;. Don't worry about the title if, like me, you have little interest in PHP.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-2209231967965517279?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/2209231967965517279/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=2209231967965517279' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/2209231967965517279'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/2209231967965517279'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2007/10/writing-good-code.html' title='Writing good code'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-7824977710453609080</id><published>2007-10-05T17:28:00.001+01:00</published><updated>2007-10-06T08:14:59.449+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSGi'/><category scheme='http://www.blogger.com/atom/ns#' term='Equinox'/><title type='text'>Upcoming 'webinar' on Equinox OSGi</title><content type='html'>Tom Watson and Simon Kaegi are giving an &lt;a href="http://live.eclipse.org/node/387"&gt;introduction&lt;/a&gt; to Eclipse Equinox and OSGi at noon EST on November 27th. &lt;a href="mailto:webinar-equinox@eclipse.org?subject=Register%20me%20for%20the%20Equinox%20webinar"&gt;Register&lt;/a&gt; if you're interested.&lt;br /&gt;&lt;br /&gt;I hadn't come across &lt;a href="http://live.eclipse.org/"&gt;Eclipse live&lt;/a&gt; before, but the archive has some &lt;a href="http://live.eclipse.org/archived?filter0%5B%5D=20&amp;amp;filter1%5B%5D=132&amp;amp;filter2%5B%5D=**ALL**&amp;amp;filter3="&gt;OSGi podcasts&lt;/a&gt; which may be of interest. I guess Tom and Simon's talk will appear there in due course.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-7824977710453609080?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/7824977710453609080/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=7824977710453609080' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/7824977710453609080'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/7824977710453609080'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2007/10/upcoming-webinar-on-equinox-osgi.html' title='Upcoming &apos;webinar&apos; on Equinox OSGi'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-5809497346682461479</id><published>2007-10-04T06:59:00.000+01:00</published><updated>2007-10-04T07:00:24.125+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Free Burma'/><title type='text'>Free Burma!</title><content type='html'>&lt;!-- Free Burma! Image --&gt;&lt;br /&gt;&lt;a href="http://www.free-burma.org/" target="_blank"&gt;&lt;img src="http://freeburma.s3.amazonaws.com/free_burma_01.gif" alt="Free Burma!" border="0" height="165" width="434"&gt;&lt;/a&gt;&lt;br /&gt;&lt;!-- End Free Burma! Image --&gt;&lt;br /&gt;&lt;br /&gt;An estimated 200 people have been killed by the ruling military junta during the recent peaceful demonstrations in Burma. Although the country currently has a high profile in the news, Burma has a &lt;a href="http://hrw.org/englishwr2k7/docs/2007/01/11/burma14865.htm"&gt;history&lt;/a&gt; of human rights abuses. More background may be found in the BBC's &lt;a href="http://news.bbc.co.uk/1/hi/world/asia-pacific/country_profiles/1300003.stm"&gt;profile&lt;/a&gt; of Burma.&lt;br /&gt;&lt;br /&gt;Today, October 4th 2007, thousands of bloggers worldwide are making a single post to raise awareness of the situation and press for change. If you have a blog, why not &lt;a href="http://www2.free-burma.org/index.php#attend"&gt;join in&lt;/a&gt;?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-5809497346682461479?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/5809497346682461479/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=5809497346682461479' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/5809497346682461479'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/5809497346682461479'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2007/10/free-burma.html' title='Free Burma!'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-3699982821770139454</id><published>2007-09-26T16:59:00.000+01:00</published><updated>2007-09-26T17:01:17.597+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSGi'/><category scheme='http://www.blogger.com/atom/ns#' term='JSR 294'/><category scheme='http://www.blogger.com/atom/ns#' term='JSR 277'/><title type='text'>Leaving IBM</title><content type='html'>Today I handed in my resignation and will be leaving IBM on November 5. I've had a very enjoyable 26 years here in Hursley working on a variety of projects from workstation graphics algorithms to high-end transaction servers. A year ago I expected to work in IBM until retirement, but I had no idea what an interesting opportunity was about to open up a few miles down the road.&lt;br /&gt;&lt;br /&gt;Although I'll still be involved with OSGi, I'll be handing over the job of representing IBM on the JSR 277 and 294 Expert Groups to someone else. I'll be lucky to find anything else quite so contentious to blog about, although I'll still be very interested in the outcome and may find something to say.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-3699982821770139454?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/3699982821770139454/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=3699982821770139454' title='16 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/3699982821770139454'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/3699982821770139454'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2007/09/leaving-ibm.html' title='Leaving IBM'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><thr:total>16</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-6587203712701276155</id><published>2007-09-14T13:18:00.000+01:00</published><updated>2007-09-14T14:07:17.463+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='interoperation'/><category scheme='http://www.blogger.com/atom/ns#' term='JSR 291'/><category scheme='http://www.blogger.com/atom/ns#' term='JSR 277'/><title type='text'>Hope for interoperation between JSR 277 and JSR 291</title><content type='html'>&lt;a href="http://www.infoq.com/news/2007/09/jsr-277-strawman"&gt;Infoq&lt;/a&gt; and &lt;a href="http://tech.puredanger.com/2007/09/14/jsr277/"&gt;Alex Miller&lt;/a&gt; picked up on my recent &lt;a href="http://underlap.blogspot.com/2007/09/how-to-run-jsr-expert-group.html"&gt;comments&lt;/a&gt; about the somewhat closed approach being adopted by JSR 277. Since the whole concept of interoperation between JSR 277 and JSR 291 seems to be doubted, I thought I'd better provide some reassurance.&lt;br /&gt;&lt;br /&gt;The saving grace of both these JSRs is that they ultimately boil down to delegation networks between module class loaders. So there is a lingua franca lurking not very far under the surface. Granted the views presented to the module developer are quite different in detail.&lt;br /&gt;&lt;br /&gt;Quite a while ago, I wrote a &lt;a href="http://underlap.blogspot.com/2007/02/jsr-277-and-jsr-291-interoperation.html"&gt;prototype&lt;/a&gt; module system interoperation framework, described in more detail &lt;a href="http://underlap.blogspot.com/2007/06/module-system-interoperation-kernel.html"&gt;here&lt;/a&gt;, to start to flesh out how these JSRs could interoperate. I regard it more of an existence proof that a reasonable solution may exist. However, it requires 'cutting' into the module systems at a deeper level than I &lt;span style="font-style: italic;"&gt;think&lt;/span&gt; is currently being considered by the JSR 277 spec. lead and colleagues.&lt;br /&gt;&lt;br /&gt;We discussed some of the &lt;a href="http://underlap.blogspot.com/2007/05/designing-module-system-interoperation.html"&gt;options&lt;/a&gt; in an informal Expert Group meeting at JavaOne, but all we really concluded was that there was a lot of work ahead to get interoperation working smoothly. I think there is also a consensus among the interested parties that reasonable interoperation is essential to the success of JSR 277. So the sooner we can get more eyes, and brains, on the current proposal, the better.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-6587203712701276155?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/6587203712701276155/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=6587203712701276155' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/6587203712701276155'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/6587203712701276155'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2007/09/hope-for-interoperation-between-jsr-277.html' title='Hope for interoperation between JSR 277 and JSR 291'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-5493947607872457076</id><published>2007-09-11T15:40:00.000+01:00</published><updated>2007-09-11T15:48:50.275+01:00</updated><title type='text'>FeatherCast</title><content type='html'>&lt;a href="http://feathercast.org/"&gt;FeatherCast&lt;/a&gt; occasionally has interesting short podcasts about goings on in Apache.&lt;br /&gt;&lt;br /&gt;Today I noticed a Google advert on the site for humane poultry slaughter tools, presumably targetting open source, free range chicken farmers.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-5493947607872457076?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/5493947607872457076/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=5493947607872457076' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/5493947607872457076'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/5493947607872457076'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2007/09/feathercast.html' title='FeatherCast'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-8695131413165918672</id><published>2007-09-07T09:16:00.000+01:00</published><updated>2007-09-07T09:41:35.409+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JSR 291'/><category scheme='http://www.blogger.com/atom/ns#' term='JSR 277'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenJDK'/><title type='text'>How to run a JSR Expert Group</title><content type='html'>The modus operandum of the JSR 277 Expert Group is fascinating.&lt;br /&gt;&lt;br /&gt;Strawman proposals are developed in private by the spec. lead, colleagues from Sun, and occasionally one or two others from elsewhere. These are then presented to the Expert Group for comment. After more or less debate, the spec. lead asserts the consensus and the strawman goes forward for inclusion in the draft spec. Typically, there can be a change of position when something small is clearly broken, but significant design changes and smaller tweaks tend to be resisted.&lt;br /&gt;&lt;br /&gt;On the whole, the real JSR 277 contributors are working in private and the so-called Expert Group acts as a sounding board without any significant influence on the outcome. Some would call this rubber-stamping.&lt;br /&gt;&lt;br /&gt;I'm trying to change this on one crucial front - that of interoperation between JSR 277 and JSR 291. But progress is dreadfully slow.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://mail.openjdk.java.net/pipermail/jsr277-eg-observer/2007-September/000207.html"&gt;Apparently&lt;/a&gt;, interoperation prototypes are being developed and thinking is going on, but none of this is visible to the Expert Group or the broader community. This is a bit odd as a modules project has been set up on OpenJDK, so I would have expected that kind of prototyping to go on in a branch or subdirectory for early feedback from others.&lt;br /&gt;&lt;br /&gt;It's worrying because the OSGi experts, Richard Hall and myself, in the JSR 277 Expert Group and the others in the JSR 291 Expert Group are not currently able to help. By the time we see a strawman, it may be too late to make any significant changes.&lt;br /&gt;&lt;br /&gt;Clearly my experience of Apache and Eclipse is no guide to the way things happen in OpenJDK. Similarly, my experience of other standards bodies is also no guide to how a JSR Expert Group is necessarily run.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-8695131413165918672?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/8695131413165918672/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=8695131413165918672' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/8695131413165918672'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/8695131413165918672'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2007/09/how-to-run-jsr-expert-group.html' title='How to run a JSR Expert Group'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-2924937174917338516</id><published>2007-08-30T13:02:00.000+01:00</published><updated>2007-08-30T13:46:44.563+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='BigDecimal'/><category scheme='http://www.blogger.com/atom/ns#' term='Java 7'/><title type='text'>Decimal syntax</title><content type='html'>On this &lt;a href="http://underlap.blogspot.com/2007/02/decimal-syntax-and-operator-overloading.html"&gt;topic&lt;/a&gt;, Danny Coward recently &lt;a href="http://java.sun.com/developer/technicalArticles/JavaLP/jpl_proposals.html#OperatorOverloading"&gt;referred to&lt;/a&gt; a limited form of operator overloading specifically for BigDecimal. Good to know this is still in Sun's thinking.&lt;br /&gt;&lt;br /&gt;I'm continuing to look for users and companies who are willing to back the requirement for decimal syntax in Java, regardless of whether this is via limited operator overloading or decimal-specific support, so if anyone is interested, I'm all ears.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-2924937174917338516?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/2924937174917338516/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=2924937174917338516' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/2924937174917338516'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/2924937174917338516'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2007/08/decimal-syntax.html' title='Decimal syntax'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-1591003199627142339</id><published>2007-08-29T15:11:00.000+01:00</published><updated>2007-08-29T15:25:53.759+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSGi'/><title type='text'>Is enjoyable standards work a contradiction in terms?</title><content type='html'>Eric Newcomer says he's &lt;a href="http://blogs.iona.com/newcomer/archives/000520.html"&gt;enjoyed&lt;/a&gt; working in the OSGi Enterprise Expert Group. From my experience of the OSGi Core Platform Expert Group, which has a significant overlap with the EEG, I'd certainly agree.&lt;br /&gt;&lt;br /&gt;The defining characteristic of the OSGi Alliance seems to be that the members are there with a fairly clear common purpose. Other standards groups I've been involved in - and I'm not just talking about the JCP - have tended to suffer from divergent objectives among the members.&lt;br /&gt;&lt;br /&gt;Maybe the key is that OSGi provides a dynamic component model which is broadly applicable across small devices, PCs, and large servers and that it has strong &lt;a href="http://en.wikipedia.org/wiki/The_Mythical_Man-Month"&gt;conceptual integrity&lt;/a&gt; making it easy to learn and apply.&lt;br /&gt;&lt;br /&gt;I also found Eric's recent InfoQ &lt;a href="http://www.infoq.com/articles/osgi-futures"&gt;interview&lt;/a&gt; on OSGi futures interesting - take a look.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-1591003199627142339?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/1591003199627142339/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=1591003199627142339' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/1591003199627142339'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/1591003199627142339'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2007/08/is-enjoyable-standards-work.html' title='Is enjoyable standards work a contradiction in terms?'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-4056272119814072991</id><published>2007-08-16T11:01:00.000+01:00</published><updated>2007-08-16T11:08:59.348+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JSR 291'/><title type='text'>JSR 291 goes Final Release</title><content type='html'>The last administrative hurdle for JSR 291 has been cleared and the spec., RI, and TCK are now available, either via the &lt;a href="http://jcp.org/aboutJava/communityprocess/final/jsr291/"&gt;JCP site&lt;/a&gt; or directly and, somewhat more simply, from the &lt;a href="http://www2.osgi.org/JSR291/HomePage"&gt;OSGi site&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The Expert Group however &lt;a href="http://www2.osgi.org/pipermail/jsr-291-eg/2007-August/000255.html"&gt;lives on&lt;/a&gt;...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-4056272119814072991?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/4056272119814072991/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=4056272119814072991' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/4056272119814072991'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/4056272119814072991'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2007/08/jsr-291-goes-final-release.html' title='JSR 291 goes Final Release'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-434698141741364040</id><published>2007-07-23T09:09:00.000+01:00</published><updated>2007-07-23T13:23:04.596+01:00</updated><title type='text'>JCP Awards</title><content type='html'>The JCP awards brightened up a wet Monday morning.&lt;br /&gt;&lt;br /&gt;The Apache Software Foundation got the "Member of the Year" (!) award for its &lt;a href="http://www.apache.org/jcp/sunopenletter.html"&gt;contributions&lt;/a&gt; and &lt;a href="http://jcp.org/en/jsr/results?id=4306"&gt;active participation&lt;/a&gt; in 2007.&lt;br /&gt;&lt;br /&gt;JSR 308 was hailed as the most innovative JSR for Java SE/EE, although the other two contenders haven't issued a draft spec. yet either. A sign of things to come?&lt;br /&gt;&lt;br /&gt;Not sure which JSR beat 291 in the "most contentious" category, but it could have been the abortive JSR 313.&lt;br /&gt;&lt;br /&gt;But seriously, congratulations to "Participant of the Year" Wayne Carr who was a welcome voice of reason in the early days of JSR 277.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-434698141741364040?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/434698141741364040/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=434698141741364040' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/434698141741364040'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/434698141741364040'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2007/07/jcp-awards.html' title='JCP Awards'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-4401425033114611481</id><published>2007-07-16T10:05:00.000+01:00</published><updated>2007-07-16T10:06:05.869+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSGi'/><category scheme='http://www.blogger.com/atom/ns#' term='JSR 291'/><category scheme='http://www.blogger.com/atom/ns#' term='JSR 294'/><category scheme='http://www.blogger.com/atom/ns#' term='JSR 277'/><title type='text'>Java modularity: where do we go from here?</title><content type='html'>Things have moved on somewhat since &lt;a href="http://underlap.blogspot.com/2007/03/state-of-java-modularity.html"&gt;March&lt;/a&gt;, so I thought an update would be helpful. Let's recap first.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://jcp.org/en/jsr/detail?id=277"&gt;JSR 277&lt;/a&gt; is trying to create a static module system for Java. Its offshoot, &lt;a href="http://jcp.org/en/jsr/detail?id=232"&gt;JSR 294&lt;/a&gt;, is focused on the VM and language support for modularity. Both these JSRs are targeting Java 7.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://jcp.org/en/jsr/detail?id=291"&gt;JSR 291&lt;/a&gt;, which recently passed the Final Approval Ballot, references and extends the &lt;a href="http://www.osgi.org/"&gt;OSGi&lt;/a&gt; dynamic component system. JSR 291 is compatible with the Java ME &lt;a href="http://jcp.org/en/jsr/detail?id=232"&gt;JSR 232&lt;/a&gt;, which also references OSGi.&lt;br /&gt;&lt;br /&gt;OSGi is a mature technology, having been developed in four releases over the last eight years. There are three independent open source implementations (&lt;a href="http://www.eclipse.org/equinox/"&gt;Equinox&lt;/a&gt;, &lt;a href="http://felix.apache.org/"&gt;Felix&lt;/a&gt;, and &lt;a href="http://www.knopflerfish.org/"&gt;Knopflerfish&lt;/a&gt;), a &lt;a href="http://www2.osgi.org/JSR291/Spec"&gt;specification&lt;/a&gt;, &lt;a href="http://www2.osgi.org/Download/File?url=/download/jsr291-ri-final.zip"&gt;reference implementation&lt;/a&gt;, and &lt;a href="http://www2.osgi.org/JSR291/TCK"&gt;TCK&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I am an active member of the JSR 277 and JSR 294 Expert Groups and am the spec. lead of JSR 291.&lt;br /&gt;&lt;br /&gt;&lt;font style="font-weight: bold;"&gt;Design goals&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;Crucially, the goals of these JSRs are rather different, although the underlying concepts are &lt;a href="http://underlap.blogspot.com/2007/06/comparison-of-jsr-277-and-jsr-291.html"&gt;similar&lt;/a&gt;. JSRs 277 and 294 are building basic support &lt;font style="font-style: italic;"&gt;into&lt;/font&gt; the Java SE platform whereas JSR 291 is pure Java built &lt;font style="font-style: italic;"&gt;on top of &lt;/font&gt;the Java platform.&lt;br /&gt;&lt;br /&gt;Look at it another way. JSRs 277 and 294 are attempting to produce an evolution of &lt;tt&gt;java.lang.ClassLoader&lt;/tt&gt; with a new distribution and packaging format, a new repository, and new language features supported by the VM. JSR 291 on the other hand is implemented in pure Java &lt;font style="font-style: italic;"&gt;on top of&lt;/font&gt; &lt;tt&gt;java.lang.ClassLoader&lt;/tt&gt; and uses standard &lt;a href="http://java.sun.com/j2se/1.3/docs/guide/jar/jar.html"&gt;JAR&lt;/a&gt; files with standard manifests as a distribution and packaging format.&lt;br /&gt;&lt;br /&gt;The design point of OSGi has always been to support a broad set of Java ME environments, such as profiles based on the Connected Device Configuration, and Java SE versions, from Java 1.2 onwards, in a compatible way. It has achieved this by building on commonly available Java concepts, notably class loaders.&lt;br /&gt;&lt;br /&gt;I think of OSGi as being the pinnacle of custom class loader systems. The way it manages to install, uninstall, start, stop, and update modules without restarting the VM is quite an achievement - not my achievement, I should add, as the dynamic features were mostly complete before I got involved. Of course, other systems have provided some of this capability, but not in such a generally reusable way.&lt;br /&gt;&lt;br /&gt;So you can package OSGi with your application, or list it as a prerequisite, and then run on a wide range of Java platforms.&lt;br /&gt;&lt;br /&gt;On the other hand, JSRs 277 and 294 have the advantage that if you are happy to pre-req. Java 7 or later, then those JSRs will be built in to the platform.&lt;br /&gt;&lt;br /&gt;&lt;font style="font-weight: bold;"&gt;Why doesn't JSR 277 reuse OSGi?&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;So why can't the JCP simply adopt JSR 291 as a standard module system for the Java platform? That's what many of the critics of JSR 277 are calling for.&lt;br /&gt;&lt;br /&gt;A crucial issue is one of control. I hope the OSGi Alliance would allow OSGi to be included in the Java platform so long as they retained control of the technology. But I suspect Sun would be nervous about the core module system of the Java platform not being under their direct control. Such nervousness would be understandable if it was not in the interests of the OSGi Alliance to maintain the value of Java, but the reality is just opposite: the success of the OSGi Alliance depends to a large extent on the success of Java.&lt;br /&gt;&lt;br /&gt;In my earlier blog, I made the point about the OSGi technology still evolving. But I think that problem is soluble. There would need to be a way of overriding the built-in module system with a later, backward compatible version.&lt;br /&gt;&lt;br /&gt;&lt;font style="font-weight: bold;"&gt;Why not scrap JSR 277?&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;A radical option, favoured by some, of simply scrapping JSR 277 is less than ideal. It would temporarily remove the confusion that competing module systems inevitably create. But before long, the requirements for a module system built in to the Java platform would surface again.&lt;br /&gt;&lt;br /&gt;The consumer JRE work has shown there is a real need to modularise the JRE itself and this requires a built-in module system. However, the consumer JRE doesn't seem to be proposing a properly architecture module system. It's a 'quick fix' which can be delivered in Java 6 update releases.&lt;br /&gt;&lt;br /&gt;So if JSR 277 was scrapped, then whatever mechanisms evolve out of the consumer JRE work could become the defacto module system for the Java platform. The Java platform would still lack a properly architected built-in module system.&lt;br /&gt;&lt;br /&gt;JSR 277 also has a stated objective of interoperating with JSR 291, which means JSR 277 modules will be able to make effective use of OSGi modules and vice versa with minimal restrictions. If this objective is achieved, it will protect the significant investment in OSGi modules in the Java community. Scrapping JSR 277 would jeopardise this investment if a non-interoperating module system grew up in place of JSR 277.&lt;br /&gt;&lt;br /&gt;&lt;font style="font-weight: bold;"&gt;The road ahead&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;So, given the momentum behind JSR 277 and the emphasis placed on it by Sun at this year's JavaOne, what lies ahead?&lt;br /&gt;&lt;br /&gt;Of course, JSR 291 should ideally benefit from the features introduced by JSR 277 and JSR 294. But the immediate requirement is that JSR 277 and JSR 291 interoperate well so that modules written in terms of one JSR are able to make effective use of modules written in terms of the other JSR.&lt;br /&gt;&lt;br /&gt;To achieve this, the Expert Groups of JSR 277 and JSR 291 will need to work together. The JSR 277 Expert Group are responsible for producing an interoperation proposal which the JSR 291 Expert Group will review. At the time of writing, the interoperation proposal is still being &lt;a href="http://www.mail-archive.com/jsr277-eg-observer@openjdk.java.net/msg00137.html"&gt;worked&lt;/a&gt; on by the JSR 277 spec. lead.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;font style="font-weight: bold;"&gt;The dream solution&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;The dream solution is clear: JSR 277 should adopt JSR 291, underpinned by language and VM support in JSR 294, and add the JSR 277 repository architecture. This would accelerate the progress of JSR 277 by several years and guarantee perfect interoperation between JSR 277 and JSR 291.&lt;br /&gt;&lt;br /&gt;But it would take a complete about turn by Sun to turn this dream into reality. Maybe, just maybe, Sun are sufficiently committed to the success of Java that they will eventually decide to do just that. Maybe, just maybe, the Java community will be able to look back later and paraphrase Winston Churchill: "Sun could always be counted on to do the right thing, after having exhausted all the alternatives".&lt;br /&gt;&lt;br /&gt;&lt;font style="font-weight: bold;"&gt;Further information&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;The JSR 291 Expert Group &lt;a href="http://www2.osgi.org/mailman/listinfo/jsr-291-eg"&gt;mailing list&lt;/a&gt; and the JSR 294 &lt;a href="http://cs.oswego.edu/mailman/listinfo/jsr294-modularity-observer"&gt;list&lt;/a&gt; have been openly readable since their Expert Groups started. JSR 277 ran in private for many months, but has now opened up its &lt;a href="http://mail.openjdk.java.net/mailman/listinfo/jsr277-eg-observer"&gt;list&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;font style="font-weight: bold;"&gt;Disclaimer&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;I'm biassed.&lt;br /&gt;&lt;br /&gt;I have been involved in the OSGi Core Platform Expert Group for a couple of years during which time I co-authored some of the modularity improvements for OSGi R4 with Richard Hall (the leader of the Apache &lt;a href="http://cwiki.apache.org/FELIX/index.html"&gt;Felix&lt;/a&gt; OSGi project).&lt;br /&gt;&lt;br /&gt;I work for IBM which belongs to the OSGi Alliance and which has based some of its products on OSGi. IBM and Sun co-operate on Java, but compete in related areas such as Java EE, not to mention UNIX-style operating systems and hardware. So IBM and Sun don't necessarily agree on everything that happens in Java. In fact, I think it would be pretty unhealthy if that were the case.&lt;br /&gt;&lt;br /&gt;I should also re-iterate that my opinions are not necessarily shared by IBM.&lt;br /&gt;&lt;br /&gt;That said, I hope this blog objectively lays out the situation.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-4401425033114611481?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/4401425033114611481/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=4401425033114611481' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/4401425033114611481'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/4401425033114611481'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2007/07/java-modularity-where-do-we-go-from.html' title='Java modularity: where do we go from here?'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-6124900331814243894</id><published>2007-07-02T11:40:00.000+01:00</published><updated>2007-07-03T12:18:06.104+01:00</updated><title type='text'>New development models for IBM</title><content type='html'>IBM launched &lt;a href="http://www.projectzero.org/wiki/bin/view/"&gt;Project Zero&lt;/a&gt; on Friday. The aim is to provide simpler ways to build web applications using an approach termed &lt;em&gt;Community-Driven Commercial Development&lt;/em&gt;.&lt;br /&gt;&lt;br /&gt;The whole idea is to engage with the community of potential users to provide something that they want to use: similar to an open source project, but with a commercial license. There is a big emphasis on 'consumability' these days in IBM and this is an example of IBM changing its ways to produce more usable software.&lt;br /&gt;&lt;br /&gt;Another new initiative, &lt;a href="http://jazz.net/"&gt;Jazz&lt;/a&gt;, is in contrast only accessible to IBM Rational's customers and partners plus invited others. I heard about it on a DeveloperWorks &lt;a href="http://www.ibm.com/developerworks/podcast/rsdc/ericgamma-061307.mp3"&gt;interview&lt;/a&gt; with Erich Gamma, of design patterns and Eclipse fame, but haven't had time to watch the videos. Anything Erich is endorsing is bound to be pretty interesting. If anyone has a link to a white paper or some such, please let me know.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-6124900331814243894?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/6124900331814243894/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=6124900331814243894' title='19 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/6124900331814243894'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/6124900331814243894'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2007/07/new-development-models-for-ibm.html' title='New development models for IBM'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><thr:total>19</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-4500461311381590359</id><published>2007-06-29T16:43:00.000+01:00</published><updated>2007-06-29T16:46:54.397+01:00</updated><title type='text'>JSR 291 but not as we know it</title><content type='html'>Google sometimes coughs up unexpected stuff, like &lt;a href="http://legalminds.lp.findlaw.com/list/dispute-res/frm01982.html"&gt;this&lt;/a&gt; which could almost be talking about JSR 291 and JSR 277. :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-4500461311381590359?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/4500461311381590359/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=4500461311381590359' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/4500461311381590359'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/4500461311381590359'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2007/06/jsr-291-but-not-as-we-know-it.html' title='JSR 291 but not as we know it'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-2365120792183582584</id><published>2007-06-28T15:45:00.000+01:00</published><updated>2007-06-28T15:48:58.465+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSGi'/><category scheme='http://www.blogger.com/atom/ns#' term='JSR 291'/><category scheme='http://www.blogger.com/atom/ns#' term='JSR 277'/><title type='text'>Eclipse Europa</title><content type='html'>Coté's &lt;a href="http://www.redmonk.com/cote/2007/06/27/eclipse-europa/"&gt;coverage&lt;/a&gt; of &lt;a href="http://www.eclipse.org/europa/"&gt;Eclipse Europa&lt;/a&gt; expresses a view on OSGi and JSR 277.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-2365120792183582584?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/2365120792183582584/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=2365120792183582584' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/2365120792183582584'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/2365120792183582584'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2007/06/eclipse-europa.html' title='Eclipse Europa'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-7716352642854413647</id><published>2007-06-22T17:03:00.001+01:00</published><updated>2007-06-22T17:03:43.534+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSGi'/><category scheme='http://www.blogger.com/atom/ns#' term='JSR 291'/><category scheme='http://www.blogger.com/atom/ns#' term='JSR 277'/><title type='text'>Representations of module dependencies</title><content type='html'>One of the key differences between JSR 291 and JSR 277 is the way in which module dependencies are represented, satisfied, and managed. Both module systems express dependencies using import declarations with version ranges and so, in general, there can be multiple ways of satisfying any particular dependency.&lt;br /&gt;&lt;br /&gt;Using an electronics analogy, there can be multiple different ways of wiring a module's dependencies to other modules. Without further constraints, the choice of wiring is essentially non-deterministic, which would make the module system hard to understand and unpredictable in behaviour. The non-determinism needs to be removed.&lt;br /&gt;&lt;br /&gt;JSR 291 removes the non-determinism by specifying rules for how dependencies should be satisfied in the presence of a given collection of modules, some of which are already resolved (or 'wired') and others which are unresolved (not yet 'wired').&lt;br /&gt;&lt;br /&gt;JSR 277 also specifies some rules to remove the non-determinism, but it allows a module to implement an &lt;span style="font-style: italic;"&gt;import policy&lt;/span&gt; if the module wants to override these rules. The hope is that, in many simple cases, the import policy will not be needed. But, in general, JSR 277 removes the non-determinism using a combination of rules in the specification and user-written import policies.&lt;br /&gt;&lt;br /&gt;Why is this difference important? Well, an import policy is a piece of Java code running inside the module whose dependencies need to be satisfied. So the import policy is in the unusual position of not being able to use the modules upon which its module depends. This is a potential source of errors.&lt;br /&gt;&lt;br /&gt;But a more important difference relates to the need to be able predict the behaviour of a collection of modules. This is crucial when managing the dependencies of modules. With JSR 291, an external management system is able to read the dependency declarations in each module and apply the rules in the specification to determine how these modules will be wired up, whether there are any missing dependencies, and, if there are, how such dependencies could be satisfied.&lt;br /&gt;&lt;br /&gt;With JSR 277 the position is quite different when import policies are used. The only way to determine the behaviour of an import policy is to execute it. But even then, there is no guarantee that the import policy will give the same result each time it runs. Also, if there are missing dependencies, it is not feasible to examine the import policy to determine how the missing dependencies could be satisfied.&lt;br /&gt;&lt;br /&gt;(For further reading, I recommend Peter Kriens' &lt;a href="http://www.osgi.org/blog/2006/10/jsr-277-review.html"&gt;JSR 277 review&lt;/a&gt; from last October.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-7716352642854413647?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/7716352642854413647/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=7716352642854413647' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/7716352642854413647'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/7716352642854413647'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2007/06/representations-of-module-dependencies.html' title='Representations of module dependencies'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-8677063883967622064</id><published>2007-06-22T16:29:00.001+01:00</published><updated>2007-06-22T16:29:50.032+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSGi'/><category scheme='http://www.blogger.com/atom/ns#' term='JSR 291'/><category scheme='http://www.blogger.com/atom/ns#' term='JSR 277'/><title type='text'>Module-superpackage relationship</title><content type='html'>In the &lt;a href="http://underlap.blogspot.com/2007/06/comparison-of-jsr-277-and-jsr-291.html"&gt;comparison&lt;/a&gt; of JSR 277 and JSR 291 features, I alluded to the fact that the module-superpackage relationship is a difference, but &lt;a href="http://underlap.blogspot.com/2007/06/comparison-of-jsr-277-and-jsr-291.html#comment-5512237140410755084"&gt;Andreas&lt;/a&gt; pointed out another way in which the relationship differs.&lt;br /&gt;&lt;br /&gt;My original observation was that the cardinality of the relationship is different. JSR 277 specifies modules which build directly on superpackages: there is a one-one relationship between deployment modules and superpackages.&lt;br /&gt;&lt;br /&gt;JSR 291, on the other hand, makes no explicit reference to superpackages as these are yet to find their way officially into Java. But, if JSR 294 continues in its current direction, it will be possible to include one or more superpackages inside a JSR 291 module. So the relationship between JSR 291 modules and superpackages will have 1:0..n cardinality.&lt;br /&gt;&lt;br /&gt;Andreas' point was that JSR 277 is integrated with JSR 294 in that a JSR 277 module's metadata consists of a superpackage and its annotations.&lt;br /&gt;&lt;br /&gt;JSR 291, in contrast, is currently agnostic about superpackages and their names, members, exports, and annotations. JSR 291 maintains its own metadata in a separate manifest file and so is not integrated with JSR 294.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-8677063883967622064?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/8677063883967622064/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=8677063883967622064' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/8677063883967622064'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/8677063883967622064'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2007/06/module-superpackage-relationship_22.html' title='Module-superpackage relationship'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-9057565491730596471</id><published>2007-06-22T10:21:00.000+01:00</published><updated>2007-06-22T10:55:50.693+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSGi'/><category scheme='http://www.blogger.com/atom/ns#' term='JSR 277'/><title type='text'>Sun VP 'gets' OSGi</title><content type='html'>I just ran across a &lt;a href="http://www.podtech.net/home/3076/jeet-kaul-on-a-more-inclusive-java-world"&gt;video&lt;/a&gt; where James Governor interviews Jeet Kaul, the VP of developer products and programmes for Sun Microsystems. If you don't have much time, fast forward to three minutes from the start and listen to the next minute and a half on OSGi.&lt;br /&gt;&lt;br /&gt;Some soundbytes plucked slightly out of context for maximum effect:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;JG: "I'm looking at OSGi ... and I think it's possibly the most important standard in the industry right now." &lt;/span&gt;&lt;span&gt;(What a nice man.)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;JK: "... so much has been done already that it would be insane to ignore that ..."&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;and later&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;JK: "... in Java SE 7 where we are trying to build the standard which will incorporate supporting OSGi bundles - it's the right approach."&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="on down" style="display: block;" id="formatbar_CreateLink" title="Link" onmouseover="ButtonHoverOn(this);" onmouseout="ButtonHoverOff(this);" onmouseup="" onmousedown="CheckFormatting(event);FormatbarButton('richeditorframe', this, 8);ButtonMouseDown(this);"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-9057565491730596471?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/9057565491730596471/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=9057565491730596471' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/9057565491730596471'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/9057565491730596471'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2007/06/sun-vp-gets-osgi.html' title='Sun VP &apos;gets&apos; OSGi'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-8003745800238362749</id><published>2007-06-20T13:27:00.000+01:00</published><updated>2007-06-20T13:55:35.284+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSGi'/><category scheme='http://www.blogger.com/atom/ns#' term='JSR 291'/><category scheme='http://www.blogger.com/atom/ns#' term='JSR 277'/><title type='text'>Default export granularity</title><content type='html'>In the &lt;a href="http://underlap.blogspot.com/2007/06/comparison-of-jsr-277-and-jsr-291.html"&gt;comparison&lt;/a&gt; of JSR 277 and JSR 291 features, I caused some &lt;a href="http://underlap.blogspot.com/2007/06/comparison-of-jsr-277-and-jsr-291.html#comment-7616632880482965496"&gt;confusion&lt;/a&gt; by saying the default export granularity was 'class' for JSR 277 and 'package' for JSR 291. I'll try to explain.&lt;br /&gt;&lt;br /&gt;The primitive unit of export in JSR 277 is the class. You can use a wildcard to export all of a module's classes in a specified package, but that's just syntactic sugar. The wildcard will be expanded to a list of classes in the binary file representing the module's superpackage. There is no runtime notion of an exported package.&lt;br /&gt;&lt;br /&gt;The primitive unit of export in JSR 291, on the other hand, is the package. You can filter the set of classes available to importers, but the runtime deals in exported packages rather than classes.&lt;br /&gt;&lt;br /&gt;I hope that's a bit clearer. Also, try not to confuse default &lt;span style="font-style: italic;"&gt;export&lt;/span&gt; granularity with &lt;span style="font-style: italic;"&gt;import&lt;/span&gt; semantics. JSR 277 supports only module import whereas JSR 291 supports package and module imports.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-8003745800238362749?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/8003745800238362749/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=8003745800238362749' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/8003745800238362749'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/8003745800238362749'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2007/06/default-export-granularity.html' title='Default export granularity'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34692233.post-7003140961686063653</id><published>2007-06-18T10:10:00.000+01:00</published><updated>2007-06-22T17:04:30.046+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSGi'/><category scheme='http://www.blogger.com/atom/ns#' term='JSR 291'/><category scheme='http://www.blogger.com/atom/ns#' term='JSR 277'/><title type='text'>Comparison of JSR 277 and JSR 291 features</title><content type='html'>A number of people have expressed an interest in the similaries and differences between these JSRs, so this post compares the features of the &lt;a href="http://jcp.org/aboutJava/communityprocess/edr/jsr277/index.html"&gt;Early Draft Review specification&lt;/a&gt; of JSR 277 and the &lt;a href="http://www2.osgi.org/Download/JSR291Spec"&gt;Final Specification&lt;/a&gt; of JSR 291, although you'll have to read the specifications to understand the differences in detail.&lt;br /&gt;&lt;br /&gt;This a functional comparison and doesn't attempt to draw out advantages and disadvantages of various features or other aspects of the JSRs. For ease of comparison, I've referred to JSR 291 &lt;span style="font-style: italic;"&gt;bundles&lt;/span&gt; as &lt;span style="font-style: italic;"&gt;modules&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Equivalent features:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Module name&lt;/li&gt;&lt;li&gt;Module version&lt;/li&gt;&lt;li&gt;Module attributes&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Module import&lt;/li&gt;&lt;li&gt;Module re-export&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Version range&lt;/li&gt;&lt;li&gt;Optional import&lt;/li&gt;&lt;li&gt;Executable modules&lt;/li&gt;&lt;li&gt;One class loader per module&lt;/li&gt;&lt;li&gt;Platform dependencies&lt;/li&gt;&lt;li&gt;Modules may contain classes, native libraries, resources, and extensible metadata&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Module signing&lt;/li&gt;&lt;li&gt;JAR distribution format&lt;/li&gt;&lt;li&gt;Reflective API&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Differences (order: JSR 277 vs JSR 291):&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Programmatic import policy vs declarative import constraints (&lt;a href="http://underlap.blogspot.com/2007/06/representations-of-module-dependencies.html"&gt;details&lt;/a&gt;)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Class space consistency: validation vs constraint solving&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Default export granularity: class vs package (&lt;a href="http://underlap.blogspot.com/2007/06/default-export-granularity.html"&gt;details&lt;/a&gt;)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Module-superpackage relationship (&lt;a href="http://underlap.blogspot.com/2007/06/module-superpackage-relationship_22.html"&gt;details&lt;/a&gt;)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Unique to JSR 277:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Standard repository:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;organised hierarchically with parental delegation&lt;/li&gt;&lt;li&gt;multiple standard implementations for local or networked deployment&lt;/li&gt;&lt;li&gt;support for plugging in 3rd party repository implementations&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;JAM distribution format&lt;/li&gt;&lt;li&gt;Import override policy&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Part of the Java SE platform (planned for Java 7)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Unique to JSR 291:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Dynamic lifecycle support both for module lifecycle and service lifecycle&lt;/li&gt;&lt;li&gt;Service support (above and beyond the basic service provider support in Java SE)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Package import&lt;/li&gt;&lt;li&gt;Dynamic package import&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Package attributes&lt;/li&gt;&lt;li&gt;Mandatory attributes&lt;/li&gt;&lt;li&gt;Split package support&lt;/li&gt;&lt;li&gt;Module classpath&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Fragment modules&lt;/li&gt;&lt;li&gt;Extension modules&lt;/li&gt;&lt;li&gt;Pure Java implemented on top of Java SE&lt;/li&gt;&lt;li&gt;Compatible with Java ME (JSR 232)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34692233-7003140961686063653?l=underlap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://underlap.blogspot.com/feeds/7003140961686063653/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34692233&amp;postID=7003140961686063653' title='12 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/7003140961686063653'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34692233/posts/default/7003140961686063653'/><link rel='alternate' type='text/html' href='http://underlap.blogspot.com/2007/06/comparison-of-jsr-277-and-jsr-291.html' title='Comparison of JSR 277 and JSR 291 features'/><author><name>Glyn</name><uri>http://www.blogger.com/profile/08741529390385812080</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-AkAHK7lTnow/TniT9HxvzBI/AAAAAAAAAN4/NKd0w_PWlwQ/s220/glyn%2Bcopy.jpg'/></author><thr:total>12</thr:total></entry></feed>
