| <?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()); | 
 | 	 | 
 | /******************************************************************************* | 
 |  * Copyright (c) 2010 VMware Inc. | 
 |  * All rights reserved. This program and the accompanying materials | 
 |  * are made available under the terms of the Eclipse Public License v1.0 | 
 |  * which accompanies this distribution, and is available at | 
 |  * http://www.eclipse.org/legal/epl-v10.html | 
 |  * | 
 |  * Contributors: Glyn Normington | 
 |  *     | 
 |  *******************************************************************************/ | 
 |  | 
 | 	# Begin: page-specific settings.  Change these.  | 
 | 	$pageTitle 		= "Virgo: the Ideal OSGi Server Runtime?"; | 
 | 	$pageKeywords	= "Eclipse, EclipseRT, Virgo, OSGi, benefits, ideal"; | 
 | 	$pageAuthor		= "Glyn Normington"; | 
 | 		 | 
 | 	ob_start(); | 
 | ?> | 
 | 	 | 
 | 	<div id="midcolumn"> | 
 | 		<h2>Virgo: the Ideal OSGi Server Runtime?</h2> | 
 | 		<p> | 
 | 			Virgo is an ideal OSGi server runtime, possibly <i>the</i> ideal OSGi server runtime, from several perspectives. | 
 | 		</p> | 
 | 		 | 
 | 		<h3>Standard OSGi</h3> | 
 | 		<p> | 
 | 			Virgo supports all the standard features of OSGi; encapsulated modules or <i>bundles</i>, a powerful service | 
 | 			registry, versioning, class space isolation, sharing of dependencies, dynamic refreshing and updating, and much more.  | 
 | 		</p> | 
 | 		 | 
 | 		<h3>Bundles all the way down</h3> | 
 | 		<p> | 
 | 			Virgo was designed from the ground up as OSGi bundles so it's extremely modular and extensible. | 
 | 		</p> | 
 | 		<p> | 
 | 			For example, the core of the runtime is the Virgo kernel which is built on the relatively tiny Virgo Nano runtime. | 
 | 			Virgo Server for Apache Tomcat is constructed by configuring a web layer, an admin console, and some other utilities on top of the kernel. | 
 | 			Similarly the Virgo Jetty Server is constructed by configuring a collection of Jetty bundles, the admin console, and other utilities on top of the kernel. | 
 | 		</p> | 
 | 		<p> | 
 | 			The kernel protects itself from interference from such additions, and from applications, by running them in a separate user region. | 
 | 			The kernel and user region are isolated from each other using standard OSGi defined hooks with sharing controlled by a user region configuration file. | 
 | 			This separation enables applications to use a different version of the Spring framework to that used by the kernel. | 
 | 		</p> | 
 | 		<p> | 
 | 			All the major Java EE application servers are now built on top of OSGi, but only Virgo | 
 | 			was <i>designed</i> for OSGi and didn't need OSGi to be retrofitted. | 
 | 		</p> | 
 | 		 | 
 | 		<h3>Extra features</h3> | 
 | 		<p> | 
 | 			Virgo provides a multi-bundle application model to simplify the deployment and management of non-trivial | 
 | 			applications. | 
 | 		</p> | 
 | 		<p> | 
 | 			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. | 
 | 		</p> | 
 | 		<p> | 
 | 			The major Java EE application servers are beginning to follow suit in exposing an application model, so Virgo committers | 
 | 			are working with others in the OSGi Alliance to produce a standard multi-bundle application construct. | 
 | 		</p> | 
 | 		 | 
 | 		<h3>Existing Java libraries</h3> | 
 | 		<p> | 
 | 			Virgo enables existing Java libraries to run successfully | 
 | 			in an OSGi environment. Ok, you have to convert them to bundles first, but then 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. | 
 | 		</p> | 
 | 		<p> | 
 | 			Essentially, we observed the commonly-occurring problems when people attempted to migrate to OSGi and | 
 | 			implemented general solutions to those problems early on. | 
 | 		</p> | 
 |  | 
 | 		<h3>Container integration</h3> | 
 | 		<p> | 
 | 			Virgo integrates OSGi with Spring and a servlet container. | 
 | 		</p> | 
 | 		<p> | 
 | 			Virgo uses <a href="http://www.eclipse.org/gemini/blueprint/">Gemini Blueprint</a> (formerly Spring DM) to wire application contexts to the OSGi service registry. | 
 | 			Beans can be published as OSGi services and can consume OSGi services, both with minimal effort. | 
 | 		</p> | 
 | 		<p> | 
 | 			The embedded form of Apache Tomcat is used as a servlet engine in Virgo Server for Apache Tomcat web support and is configured and managed just like standard Apache Tomcat. | 
 | 			Similarly, Jetty is the servlet engine in Virgo Jetty Server. | 
 | 		</p> | 
 |  | 
 | 		<h3>Diagnostics++</h3> | 
 | 		<p> | 
 | 			Virgo has extensive diagnostics: | 
 | 			<ul> | 
 | 				<li> | 
 | 					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. | 
 | 				</li> | 
 | 				 | 
 | 				<li> | 
 | 					Virgo provides multiple types of diagnostics: event logging aimed at administrators, diagnostics logging | 
 | 					aimed at developers, as well as various types of diagnostic dumps. | 
 | 				</li> | 
 | 				 | 
 | 				<li> | 
 | 					Virgo builds on <a href="http://logback.qos.ch/">Logback</a> to support highly configurable and efficient logging. | 
 | 				</li> | 
 | 				 | 
 | 				<li> | 
 | 					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. | 
 | 				</li> | 
 |  | 
 | 				<li> | 
 | 					If a resolution failure occurs, Virgo also analyses the resolver error, including the root causes of any | 
 | 					<a href="http://blog.springsource.com/2008/10/20/understanding-the-osgi-uses-directive/">uses constraint</a> | 
 | 					violation, and extracts a meaningful message to include in an exception which is then thrown. | 
 | 				</li> | 
 |  | 
 | 				<li> | 
 | 					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. | 
 | 				</li> | 
 |  | 
 | 				<li> | 
 | 					Virgo automatically detects deadlocks and generates a thread stack dump. | 
 | 				</li> | 
 | 			</ul> | 
 | 		</p> | 
 | 		 | 
 | 		<h3>Advanced tooling</h3> | 
 | 		<p> | 
 | 			Virgo tooling support is provided in the | 
 | 			<a href="http://www.springsource.com/developer/sts">SpringSource Tool Suite</a> or in standard Eclipse via an | 
 | 			<a href="http://www.springsource.org/dmservertools">update site</a>. 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. | 
 | 		</p> | 
 | 		 | 
 | 		<h3>Future proof</h3> | 
 | 		<p> | 
 | 			Virgo is an open source Eclipse project with a liberal license and | 
 | 			active participation from multiple vendors, which positions it ideally for the future. | 
 | 		</p> | 
 |  | 
 | 	</div> | 
 |  | 
 | <? | 
 | 	$html = ob_get_clean(); | 
 | 	# Generate the web page | 
 | 	$App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html); | 
 | ?> |