<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>cwash into software &#187; modularity</title>
	<atom:link href="http://cwash.org/tag/modularity/feed/" rel="self" type="application/rss+xml" />
	<link>http://cwash.org</link>
	<description>+= construction + craftsmanship;</description>
	<lastBuildDate>Thu, 29 Sep 2011 04:23:16 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.2</generator>
		<item>
		<title>OSGi-ggity-Giggity</title>
		<link>http://cwash.org/2009/04/15/osgi-ggity-giggity/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=osgi-ggity-giggity</link>
		<comments>http://cwash.org/2009/04/15/osgi-ggity-giggity/#comments</comments>
		<pubDate>Wed, 15 Apr 2009 21:40:01 +0000</pubDate>
		<dc:creator>Chris Wash</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Software Engineering]]></category>
		<category><![CDATA[CapTech]]></category>
		<category><![CDATA[introduction]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[modularity]]></category>
		<category><![CDATA[osgi]]></category>
		<category><![CDATA[software development]]></category>

		<guid isPermaLink="false">http://cwash.org/?p=205</guid>
		<description><![CDATA[Thoughts on the OSGi service platform for modularity.]]></description>
			<content:encoded><![CDATA[<script type="text/javascript">dzone_url = "http://cwash.org/2009/04/15/osgi-ggity-giggity/";</script><script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script><p><strong>Update:</strong> A great article on OSGi popped up on Javalobby today.  <a href="http://java.dzone.com/articles/dozen-osgi-myths-and">Check it out</a>.</p>
<p>I haven&#8217;t yet written any thoughts about OSGi but it&#8217;s something that&#8217;s increasingly found its way on to my radar over the past year and a half or so.  I&#8217;ve been doing a little bit of reading and research on it lately, (a quick introduction can be found via <a href="http://www.infoq.com/interviews/osgi-adrian-colyer">Adrian Colyer&#8217;s talks on InfoQ</a> about it).  Needless to say it&#8217;s got me excited.  Really excited &#8211; to the point where I&#8217;m catching myself geeking out uncontrollably like Quagmire from Family Guy.  What&#8217;s got me all giggity? <span id="more-205"></span> Let&#8217;s take a step back first.</p>
<p>With Java there has always been a focus on modularity, but it&#8217;s come up in different intermediate forms.  Any typical Java developer can go on for hours about the importance for layering and properly isolating, decoupling and packaging components and subsystems.  Java has the idea of a package, and the idea of JARs came about fairly early on in the process.  But what became difficult was that often each layer had to have its own supporting infrastructure in place to be built independently, and someone needed to know how all of those JAR dependencies mapped out at build time and runtime.  This was a necessary evil so that we could have individually deployable modules or subsystems.  Once you got there, it was all worth it.</p>
<p>The problem was that while you may have been diligent and rigorous in your approach to applying how your projects were laid out and built, quite often the framework space solved this problem over and over again in many different ways.  Going to upgrade a library was not an easy task, because you had to typically upgrade it across each of your layers, and what&#8217;s more, there was no consistent approach to manage transitive dependencies amongst the modules each library used.  Library selection and dependency management was the work of a greybeard within your project and it took a while to change a library or upgrade.  Not to mention a near certainty that you&#8217;d need to execute your entire suite of regression tests to make sure nothing broke.</p>
<p>After seeing many Java frameworks being cajoled into a Maven build in order to manage builds and transitive dependencies, there has been increased awareness on the part of the vendor (be it commercial or open source) space on modularity.  But we&#8217;ve only focused on the problem of solving modularity from a build-centric view.  In other words, &#8220;How can I package and manage these build artifacts in such a way that consumers can easily integrate them into their project in a consistent and automated way?&#8221;  This was the pie-in-the-sky idea behind Maven as I see it, and they pretty much made it happen.  You&#8217;d be hard pressed to find a framework today that doesn&#8217;t support it in some fashion.</p>
<p>But there&#8217;s a whole separate piece of modularity that takes place at <em>runtime</em>.  In the context of my historical explanation of modularity within Java, you can look at OSGi&#8217;s ability to manage dependencies dynamically at runtime (via a header in your JAR MANIFEST file) as a &#8220;modularity win&#8221; and icing on the cake.  But OSGi indeed goes farther than that.  OSGi gives you the ability to install/uninstall, start and stop bundles dynamically (think Eclipse plugins) via its lifecycle, and that just plain gives me the &#8220;giggities.&#8221;  To account for truly dynamic modularity OSGi also gives you requires and provides semantics (also declared via headers) akin to the requires and provides semantics you see in dynamic languages like Ruby and some Javascript packaging/dependency management frameworks.  While this may seem like its strength is only in making a clear separation between APIs you use and export, its real strength is that this allows you to truly isolate your modules at runtime from trickery that can (and has) happened on a classloader level.  &#8220;That couldn&#8217;t possibly work on an App server,&#8221; you say?  I was skeptical, too, but not so fast&#8230;</p>
<p>If you&#8217;re the type that keeps up with the JCP space, you probably know there is a JSR &#8220;trinity&#8221; (equally as mysterious as its holy counterpart to the outside viewer) to provide a more robust modularization mechanism in varying degrees.  That &#8220;quagmire&#8221; withstanding, OSGi has been mounting a considerable lead as <em>the</em> modularization system of choice in the JavaSE and EE/App server space.  (It was already a formidable player in the embedded/mobile space, where it evolved from.)  Nearly all major App server vendors have integrated the OSGi model into their core, which means they&#8217;ve probably cleaned up any classloader nastiness they&#8217;ve resorted to in the past.  And now you&#8217;re seeing some of the leading frameworks like Spring and Web Beans/Seam 3 (and subsequently have signed up to publish themselves as OSGi bundles.)  Not to mention the success that Eclipse has seen since refactoring itself to work off its OSGi implementation, Equinox.</p>
<p>If OSGi can continue to make inroads in the framework space,  I think its prospects to the &#8220;in the trenches&#8221; Java developer are very exciting indeed.  Expect me to babble on more about this in the future&#8230;</p>
<div class="codecolorer-container text twitlight" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp;</div></div>
<div class="codecolorer-container text twitlight" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp;</div></div>


<div class="shr-bookmarks shr-bookmarks-expand shr-bookmarks-center">
<ul class="socials">
		<li class="shr-comfeed">
			<a href="http://cwash.org/2009/04/15/osgi-ggity-giggity/feed" rel="nofollow" class="external" title="Subscribe to the comments for this post?">Subscribe to the comments for this post?</a>
		</li>
		<li class="shr-delicious">
			<a href="http://www.shareaholic.com/api/share/?title=OSGi-ggity-Giggity&amp;link=http://cwash.org/2009/04/15/osgi-ggity-giggity/&amp;notes=Thoughts%20on%20the%20OSGi%20service%20platform%20for%20modularity.&amp;short_link=http://bit.ly/99Hc01&amp;v=1&amp;apitype=1&amp;apikey=&amp;source=Shareaholic&amp;template=&amp;service=2&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Share this on del.icio.us">Share this on del.icio.us</a>
		</li>
		<li class="shr-digg">
			<a href="http://www.shareaholic.com/api/share/?title=OSGi-ggity-Giggity&amp;link=http://cwash.org/2009/04/15/osgi-ggity-giggity/&amp;notes=Thoughts%20on%20the%20OSGi%20service%20platform%20for%20modularity.&amp;short_link=http://bit.ly/99Hc01&amp;v=1&amp;apitype=1&amp;apikey=&amp;source=Shareaholic&amp;template=&amp;service=3&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Digg this!">Digg this!</a>
		</li>
		<li class="shr-diigo">
			<a href="http://www.shareaholic.com/api/share/?title=OSGi-ggity-Giggity&amp;link=http://cwash.org/2009/04/15/osgi-ggity-giggity/&amp;notes=Thoughts%20on%20the%20OSGi%20service%20platform%20for%20modularity.&amp;short_link=http://bit.ly/99Hc01&amp;v=1&amp;apitype=1&amp;apikey=&amp;source=Shareaholic&amp;template=&amp;service=24&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Post this on Diigo">Post this on Diigo</a>
		</li>
		<li class="shr-dzone">
			<a href="http://www.shareaholic.com/api/share/?title=OSGi-ggity-Giggity&amp;link=http://cwash.org/2009/04/15/osgi-ggity-giggity/&amp;notes=Thoughts%20on%20the%20OSGi%20service%20platform%20for%20modularity.&amp;short_link=http://bit.ly/99Hc01&amp;v=1&amp;apitype=1&amp;apikey=&amp;source=Shareaholic&amp;template=&amp;service=102&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Add this to DZone">Add this to DZone</a>
		</li>
		<li class="shr-gmail">
			<a href="http://www.shareaholic.com/api/share/?title=OSGi-ggity-Giggity&amp;link=http://cwash.org/2009/04/15/osgi-ggity-giggity/&amp;notes=Thoughts%20on%20the%20OSGi%20service%20platform%20for%20modularity.&amp;short_link=http://bit.ly/99Hc01&amp;v=1&amp;apitype=1&amp;apikey=&amp;source=Shareaholic&amp;template=&amp;service=52&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Email this via Gmail">Email this via Gmail</a>
		</li>
		<li class="shr-googlebookmarks">
			<a href="http://www.shareaholic.com/api/share/?title=OSGi-ggity-Giggity&amp;link=http://cwash.org/2009/04/15/osgi-ggity-giggity/&amp;notes=Thoughts%20on%20the%20OSGi%20service%20platform%20for%20modularity.&amp;short_link=http://bit.ly/99Hc01&amp;v=1&amp;apitype=1&amp;apikey=&amp;source=Shareaholic&amp;template=&amp;service=74&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Add this to Google Bookmarks">Add this to Google Bookmarks</a>
		</li>
		<li class="shr-googlebuzz">
			<a href="http://www.shareaholic.com/api/share/?title=OSGi-ggity-Giggity&amp;link=http://cwash.org/2009/04/15/osgi-ggity-giggity/&amp;notes=Thoughts%20on%20the%20OSGi%20service%20platform%20for%20modularity.&amp;short_link=http://bit.ly/99Hc01&amp;v=1&amp;apitype=1&amp;apikey=&amp;source=Shareaholic&amp;template=&amp;service=257&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Post on Google Buzz">Post on Google Buzz</a>
		</li>
		<li class="shr-googlereader">
			<a href="http://www.shareaholic.com/api/share/?title=OSGi-ggity-Giggity&amp;link=http://cwash.org/2009/04/15/osgi-ggity-giggity/&amp;notes=Thoughts%20on%20the%20OSGi%20service%20platform%20for%20modularity.&amp;short_link=http://bit.ly/99Hc01&amp;v=1&amp;apitype=1&amp;apikey=&amp;source=Shareaholic&amp;template=&amp;service=207&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Add this to Google Reader">Add this to Google Reader</a>
		</li>
		<li class="shr-linkedin">
			<a href="http://www.shareaholic.com/api/share/?title=OSGi-ggity-Giggity&amp;link=http://cwash.org/2009/04/15/osgi-ggity-giggity/&amp;notes=Thoughts%20on%20the%20OSGi%20service%20platform%20for%20modularity.&amp;short_link=http://bit.ly/99Hc01&amp;v=1&amp;apitype=1&amp;apikey=&amp;source=Shareaholic&amp;template=&amp;service=88&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Share this on LinkedIn">Share this on LinkedIn</a>
		</li>
		<li class="shr-misterwong">
			<a href="http://www.shareaholic.com/api/share/?title=OSGi-ggity-Giggity&amp;link=http://cwash.org/2009/04/15/osgi-ggity-giggity/&amp;notes=Thoughts%20on%20the%20OSGi%20service%20platform%20for%20modularity.&amp;short_link=http://bit.ly/99Hc01&amp;v=1&amp;apitype=1&amp;apikey=&amp;source=Shareaholic&amp;template=&amp;service=6&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Add this to Mister Wong">Add this to Mister Wong</a>
		</li>
		<li class="shr-mixx">
			<a href="http://www.shareaholic.com/api/share/?title=OSGi-ggity-Giggity&amp;link=http://cwash.org/2009/04/15/osgi-ggity-giggity/&amp;notes=Thoughts%20on%20the%20OSGi%20service%20platform%20for%20modularity.&amp;short_link=http://bit.ly/99Hc01&amp;v=1&amp;apitype=1&amp;apikey=&amp;source=Shareaholic&amp;template=&amp;service=4&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Share this on Mixx">Share this on Mixx</a>
		</li>
		<li class="shr-reddit">
			<a href="http://www.shareaholic.com/api/share/?title=OSGi-ggity-Giggity&amp;link=http://cwash.org/2009/04/15/osgi-ggity-giggity/&amp;notes=Thoughts%20on%20the%20OSGi%20service%20platform%20for%20modularity.&amp;short_link=http://bit.ly/99Hc01&amp;v=1&amp;apitype=1&amp;apikey=&amp;source=Shareaholic&amp;template=&amp;service=40&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Share this on Reddit">Share this on Reddit</a>
		</li>
		<li class="shr-stumbleupon">
			<a href="http://www.shareaholic.com/api/share/?title=OSGi-ggity-Giggity&amp;link=http://cwash.org/2009/04/15/osgi-ggity-giggity/&amp;notes=Thoughts%20on%20the%20OSGi%20service%20platform%20for%20modularity.&amp;short_link=http://bit.ly/99Hc01&amp;v=1&amp;apitype=1&amp;apikey=&amp;source=Shareaholic&amp;template=&amp;service=38&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Stumble upon something good? Share it on StumbleUpon">Stumble upon something good? Share it on StumbleUpon</a>
		</li>
		<li class="shr-technorati">
			<a href="http://www.shareaholic.com/api/share/?title=OSGi-ggity-Giggity&amp;link=http://cwash.org/2009/04/15/osgi-ggity-giggity/&amp;notes=Thoughts%20on%20the%20OSGi%20service%20platform%20for%20modularity.&amp;short_link=http://bit.ly/99Hc01&amp;v=1&amp;apitype=1&amp;apikey=&amp;source=Shareaholic&amp;template=&amp;service=10&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Share this on Technorati">Share this on Technorati</a>
		</li>
		<li class="shr-twitter">
			<a href="http://www.shareaholic.com/api/share/?title=OSGi-ggity-Giggity&amp;link=http://cwash.org/2009/04/15/osgi-ggity-giggity/&amp;notes=Thoughts%20on%20the%20OSGi%20service%20platform%20for%20modularity.&amp;short_link=http://bit.ly/99Hc01&amp;v=1&amp;apitype=1&amp;apikey=&amp;source=Shareaholic&amp;template=%24%7Btitle%7D+-+%24%7Bshort_link%7D&amp;service=7&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Tweet This!">Tweet This!</a>
		</li>
</ul><div style="clear: both;"></div></div>

<h3  class="related_post_title">More Related Content</h3><ul class="related_post"><li>July 24, 2009 -- <a href="http://cwash.org/2009/07/24/the-elements-of-reusable-code/" title="The Elements of Reusable Code">The Elements of Reusable Code</a> (0)</li><li>June 3, 2009 -- <a href="http://cwash.org/2009/06/03/what-is-hamcrest/" title="What is Hamcrest?">What is Hamcrest?</a> (0)</li><li>November 28, 2008 -- <a href="http://cwash.org/2008/11/28/must-havesreferences-for-modern-java-ee-developers/" title="Must Haves/References For Modern Java EE Developers">Must Haves/References For Modern Java EE Developers</a> (1)</li><li>November 19, 2008 -- <a href="http://cwash.org/2008/11/19/java-6-and-maven-209-on-leopard/" title="Java 6 and Maven 2.0.9 on Leopard">Java 6 and Maven 2.0.9 on Leopard</a> (7)</li><li>March 19, 2008 -- <a href="http://cwash.org/2008/03/19/new-wave-logging/" title="New Wave Logging">New Wave Logging</a> (0)</li><li>July 8, 2010 -- <a href="http://cwash.org/2010/07/08/transactions-part-1/" title="Transactions, Part 1">Transactions, Part 1</a> (0)</li><li>January 7, 2010 -- <a href="http://cwash.org/2010/01/07/eliminate-branching-if-statements-to-produce-better-code/" title="Eliminate Branching (IF Statements) to Produce Better Code">Eliminate Branching (IF Statements) to Produce Better Code</a> (0)</li><li>July 29, 2009 -- <a href="http://cwash.org/2009/07/29/what-id-tell-myself-about-design-if-i-were-just-beginning/" title="What I&#8217;d Tell Myself About Design If I Were Just Beginning">What I&#8217;d Tell Myself About Design If I Were Just Beginning</a> (5)</li><li>June 9, 2009 -- <a href="http://cwash.org/2009/06/09/mocking-with-jmockit/" title="Mocking with JMockit">Mocking with JMockit</a> (5)</li><li>January 31, 2009 -- <a href="http://cwash.org/2009/01/31/in-response-to-stackoverflow-38quality-doesnt-matter-that-much-jeff-and-joel/" title="In response to Stackoverflow #38/&#8221;Quality Doesn&#8217;t Matter That Much&#8221; &#8212; Jeff and Joel ">In response to Stackoverflow #38/&#8221;Quality Doesn&#8217;t Matter That Much&#8221; &#8212; Jeff and Joel </a> (3)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://cwash.org/2009/04/15/osgi-ggity-giggity/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

