<?php require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php");	require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/nav.class.php"); 	require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/menu.class.php"); 	$App 	= new App();	$Nav	= new Nav();	$Menu 	= new Menu();		include($App->getProjectCommon());    # All on the same line to unclutter the user's desktop'
	# Begin: page-specific settings.  Change these. 
	$pageTitle 		= "Whitepaper: Component Oriented Development and Assembly with Equinox";
	$pageKeywords	= "Eclipse, equinox, CODA";
	$pageAuthor = "Equinox committers";
	$html = <<<EOHTML
	
<div id="midcolumn">
	<h2>$pageTitle</h2>

		<h3>Executive Summary (<a href="20080310_equinox.pdf">PDF</a>)</h3>
		
		<p>Eclipse Equinox simplifies the process of developing and deploying modern software solutions, a process we call Component
		Oriented Development and Assembly (CODA). Rather than carving down large, complex, feature-rich stacks to suit your needs,
		Equinox provides a lightweight, component-based method of building stacks tailored to your needs. More than just a framework
		and runtime, the Equinox community provides many core components such as data access, SOA tooling, and other server-side
		functions, along with rich desktop and Ajax UI facilities. In short, Equinox allows you to stop coercing monolithic,
		of-the-shelf stacks to fit your world and, start designing and assembling stacks to fit your project&#146;s needs. The result is
		a flexible and reusable component and programming model that spans your application&#146;s tiers and layers. This simplification
		gives you the power to more rapidly adapt your existing software assets, integrate them with other systems, and create new
		function to meet the demands of new markets and opportunities.</p>

		<p>Equinox and CODA is a proven component model that has been used by the Eclipse to simplify the integration and development
		of developer-oriented tools.  The Eclipse community is now extending the technology and concepts to allow software developers
		to use Equinox as the runtime platform for applications that run on different platform and tiers.</p>

		<h3><strong>The Thick Layer of Complexity</strong></h3>
		
		<p>The world of software development has evolved into a powerful but complex world of computing tiers, distinct deployment
		scenarios, specialized environments, and integration frameworks required to glue together these different layers into cohesive
		solutions. For example, Java on the desktop, mobile Java, and enterprise Java employ different development models despite all
		being based on the Java language. New applications types, such as Software as a Service, mobile, and Ajax, introduce new
		technologies to the list of consideration when delivering software.  Integrating these layers together from project inception,
		to development, to delivery, and maintenance has become the most difficult and expensive part of software development.</p>
		
		<p>At the same time, customers and partners are demanding faster responses to their requests. Software providers can no longer
		take the &#145;one size fits all&#146l approach &#150; more flexibility is required in software development and delivery.   Software developers
		need a model that delivers customized solutions to meet customers&#146; desires &#150; a &#145;customer of one&#146; approach that enables adding,
		updating, and tailoring features for specific situations.</p>
		
		<p>More than just being highly customizable, software applications must also integrate with third party technologies and
		services.  For instance, integrating CRM systems with different e-mail servers and services is standard in successful business
		deployments.  Value in the IT world comes from making this integration of diverse technologies more than just possible, but
		natural.  Unfortunately, there are often too many ways to integrate systems and services. Vendors define their own integration
		mechanisms specific to their solutions while industry standard solutions are often too general, requiring proprietary
		extensions and knowledge.  This leaves development teams and third parties with the responsibility of understanding the
		different integration schemes and correctly using them to accomplish their goals.</p>
		
		<h3><strong>Simplicity and Felxibility with Equinox</strong></h3>		

		<p>Today, the primary technical hurdle for software development is increased complexity.  Part of the problem is the lack of a
		common component model. Properly addressing these thick layers of complexity is key to accelerating the development and deployment
		of software modern systems.  The standardized, lightweight component model provided by Eclipse Equinox is a solution to this
		problem.</p>
		
		<p>Equinox enables a development process in which software is developed and delivered using a common component model and runtime.
		In the Equinox enabled process, software components can be developed by a wide variety of organizations. These components may then
		be further customized and assembled to create tailored end-user solutions.   We call this process Component Oriented Development
		and Assembly (CODA).  CODA is both enabled by Equinox and core to the Equinox philosophy.</p>
		<br/>
		<p align="center"><img src="/equinox-portal/images/splash.jpg"></p>
		<br/>
		<p>The basis for CODA is an industry standard, called OSGi, and the Eclipse runtime platform called Equinox. Over the past 5 years,
		Equinox, OSGi and the concepts of CODA have been used by the Eclipse community to simplify the integration and development of
		developer-oriented tools and end-user Rich-client applications.  Equinox is now bringing this simplicity and flexibility to the
		wider software development world to address the ever-growing collection of application tiers, deployment options, and integration
		challenges. Equinox provides one methodology that normalizes the decomposition of code into components and the collaboration
		between these components within, and across, tiers.  The result is a system that has the feel of a tier-less architecture.</p>
		
		<p>Equinox facilitates dividing your code-base into different bundles and provides a runtime for collaboration between those
		bundles. Bundles may be small and precise, or large and encompassing. How exactly you decide to decompose your code is determined
		by collaboration requirements, grouping of like or unique services, required dynamic deployment options, and other concerns such as
		clustering. The end result is an architecture that is well-factored, whose parts work together to deliver a unified whole.</p>
		
		<p>The idea of specifying units of like-functioning code exists in the Java language itself. Indeed, the language and associated
		Java standards provide many ways to group code: packages, access modifiers, and grouping mechanisms like JARs, WARs, and EARs. This
		wide array of options allows teams to decide how to mix and match the various packaging schemes. While a wide variety of
		architectural and design choices is handy it can result in every project choosing a different packaging method, resulting in
		proliferation of different practices that can be time consuming for development teams to keep up with.</p>
		
		<p>Equinox&#146;s scheme of dividing code into &#147;bundles&#148; provides a self-describing, highly expressive and manageable way of
		packaging code.  API&#146;s and dependencies are explicitly defined, enabling bundles to be shared with other projects internally and
		industry wide. In addition to packaging project components, Equinox facilitates inter-component collaboration through its service
		and extension point mechanisms. Finally, Equinox provides deployment tools and a runtime for execution. By providing a runtime,
		Equinox manages the full life-cycle of bundles and the resulting software by dynamically starting, stopping, updating and
		extending components without requiring an application reboot.</p>
		
		<h3><strong>Key Features of Equinox</strong></h3>
  
 		<p><i>Bundles</i><br>
 		The fundamental component of Equinox is the OSGi bundle. Bundles are self-describing, versioned components. Think of them as
 		JARs with dependency and API descriptors.  Bundles can include code and/or resources that can be installed, updated, and
 		uninstalled while the application is running.  Typically, a bundle supplies a discrete unit of function to be used by other
 		parts of the system.</p>

		<p>For example, the Equinox HTTP bundle provides an extensible web server component that implements the standard OSGi HTTP
		service specification.  With this bundle, applications can host servlets, JSPs and other web resources.</p>
		
		<p><i>Dependencies</i><br>
 		As mentioned earlier, bundles describe their API and dependencies.  Rather than leaving you to manually ensure that your
 		bundle&#146;s dependencies are satisfied, Equinox manages dependencies and the development environment for you.  The tooling for
 		Equinox also supports componentized builds and advanced provisioning features not available to native Java systems.  Put
 		simply, Equinox&#146;s component orientated tooling and runtime eliminates classpath and JAR-hell. </p>
 		 
		<p><i>Services and Extensions</i><br>
		The combination of OSGi&#146;s service and Equinox&#146;s extension facilitates the service-oriented collaboration between different
		bundles.  The service mechanism provides a familiar publish/subscribe model for services within a given runtime. Much like
		FireFox&#146;s plug-in architecture, Equinox extensions expose extensibility points allowing other bundles to contribute data or
		functionality. These mechanisms can be used separately or in concert.  For example, in the HTTP case mentioned earlier, the
		application bundles can collaborate with the HTTP bundle programmatically or declaratively to serve up web content.</p>

		<p>Either way, Equinox allows you to clearly and explicitly define and limit how your bundle collaborates with others.</p>

		<p><i>Runtime</i><br>
		At runtime, Equinox supports and enforces the CODA concepts described in this paper. The dependency resolution and classloading
		management that Equinox performs allows multiple versions of the same code and libraries to co-exist and execute. Equinox&#146;s
		runtime also allows you to hot-swap bundles, allowing you to add and remove bundles dynamically without restarting the
		application. A key characteristic of the Equinox approach is that the dependencies, lifecycles and modularity expressed in the
		bundles is enforced at runtime. Service access enforcement at runtime further strengthens the API boundary and, in turn, the
		abilities to re-use and compose groups of bundles.</p>
	
		<h3><strong>Flexible Deployment of Equinox into Existing Infrastructure</strong></h3>
		
		<p>Most organizations have substantial investment in their existing infrastructure and application code.   The good news about
		Equinox is that it&#146;s easily deployed into an existing IT infrastructure.</p>

		<p>Equinox can be deployed as a WAR file into a Java EE application server. Server-side applications can then be composed from
		a set of bundles running beside applications written as EJBs, servlets, or JSPs.  Systems can take advantage of the high
		availability and scalability features provided by the application server environment while benefiting from the flexibility
		and reuse that CODA and Equinox brings.</p>

		<p>Equinox can also be deployed as a stand-alone runtime directly on an operating system or device.  The same Server-side
		application bundles deployed to the Java EE application server can be deployed and run as bundles directly on the stand-alone
		Equinox runtime. This write-once, deploy anywhere functionality is another key benefit of Equinox.</p>

		<h3><strong>Who Is Using Equinox and OSGi?</strong></h3>

		<p>Equinox is proven technology and is deployed on millions of computers.   For the last 5 years, Equinox has been the heart of
		the Eclipse platform and has dramatically changed the way the software industry develops and deploys developer tools.</p>

		<p>The exciting opportunity is that organizations are now using a similar approach to modernize their software infrastructure
		technology.   For instance, the major application server vendors (IBM, BEA, RedHat JBoss, Oracle, and OW2) are enhancing their
		software with OSGi and Equinox.  New special purpose servers, such as the BEA Event Server, have been developed using Equinox
		to address the specialized needs of event driven applications.  IBM Lotus has adopted a platform strategy based on Equinox and
		Eclipse RCP for their Lotus Notes, Expeditor, Sametime and Symphony product lines.   Enterprise organizations like NASA and
		Deutsche Post are also using Equinox and OSGi to optimize how they deploy their client and server infrastructure.</p>
		
		<p>For more information about organizations using Equinonx and Eclipse RCP check out the following case studies:
		<ul>
			<li><a href="../case_studies/beafinal.pdf">BEA Uses Equinox to Revolutionize Event-Driven Application Development</a>
			<li><a href="../case_studies/nasafinal.pdf">Equinox helps NASA Improve Efficiency of Interplanetary Missions</a>
			<li><a href="http://www.eclipse.org/community/casestudies/jp_morgan_final.pdf">JPMorgan Raises the Bar for Banking Applications</a>
			<li><a href="http://www.eclipse.org/community/casestudies/cyranofinal.pdf">Eclipse Equinox Helps the US Army Sniff out Trouble</a>
			<li> More <a href="http://www.eclipse.org/community/rcp.php">RCP Case Studies</a> and <a href="http://www.eclipse.org/equinox-portal/discover.php">Equinox Case Studies</a>
		</ul>
		</p>
		<h3><strong>The Benefits of Using Equinox</strong></h3>		

		<p>The job of writing and maintaining software will never be easy, but it can be much easier. Equinox directly addresses today&#146;s
		core issues of complexity in software development: the lack of a standardized component model for code packaging and
		collaboration, and, the need for a runtime layer that can begin small and grow larger as needed. Because Equinox&#146;s CODA
		methodology is based on the mature OSGi standard, projects that use Equinox avoid proprietary, custom lock-in. Even better,
		Eclipse Equinox is itself open source, ensuring the stability, availability, and innovation an application&#146;s core architecture.</p>					

		<p>Applications using Equinox have both the flexibility to change and the ability to re-use components in new ways � that is,
		the capacity to address diverse and dynamic customer requirements quickly and without starting from scratch.  Because mistakes
		are easier to address and prototypes are faster to create the IT lifecycle becomes shorter.</p> 

		<p>Applied to business, these benefits allow you to use existing assets in new ways, improve developer productivity, and
		achieve faster entry into new markets. Equinox&#146;s common, CODA packaging and collaboration methodology opens up existing assets
		for use without having to write and maintain custom integration code. Development itself is more productive because of a range
		of time savings from having one, common architectural scheme, to faster build and deploy. The combination of increased re-use
		and faster development allows you to more quickly address new customer demands and markets as they emerge rather than having to
		go through the time consuming and frustrating experience of creating a new stack each time.</p>

		<h3><strong>Getting Started with the Equinox Community</strong></h3>		

		<p>The Eclipse Foundation has launched an initiative to help organizations adopt Equinox, OSGi, and CODA into their software
		infrastructure.  A new top-level project, called the Eclipse Runtime (RT) project has been created to help foster and grow this
		community.  Eclipse RT is a significant supplier of runtime oriented technology that organizations can use to build their
		unique software solutions.  Eclipse RT will include open source projects that provide Ajax support (<a href="http://www.eclipse.org/rap/">Eclipse RAP</a>), a SOA Runtime
		(<a href="http://www.eclipse.org/swordfish/">Swordfish</a>), a persistence service (<a href="http://www.eclipse.org/eclipselink/">EclipseLink</a>), technology to allow deployment to embedded devices (<a href="http://www.eclipse.org/ercp/">Embedded RCP</a>) and more to
		come in the future.  The wider Equinox and Eclipse community also includes runtime technology, based on Equinox, for
		enterprise reporting (<a href="http://www.eclipse.org/birt/">BIRT</a>), modeling (<a href="http://www.eclipse.org/emf/">EMF</a>), data access.</p>

		<p>To get started and better understand the concepts in this white paper, we suggest that you take advantages of the following
		resources:
		<ul>
			<li><a href="../tutorials/server-side/demo/">Demo of Equinox in Action</a></li>
			<li>Two Webinars: <a href="http://live.eclipse.org/node/407" target="blank">Getting Started with OSGi</a> and
			<a href="http://live.eclipse.org/node/387" target="blank">Introduction to Eclipse Equinox and OSGi</a></li>
			<li><a href="../tutorials/server-side/">Complete the Introduction to Equinox Tutorial</a></li>
		</ul></p>
		
</div>

EOHTML;
	generateRapPage( $App, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html );
?>
