511879 - Migrate User Guide and Developer Guide to Asciidoc
diff --git a/.gitignore b/.gitignore
index be8893a..0f23b36 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,5 +1,9 @@
 target
+build/
 integration-repo
 ivy-cache
 spring-build/lib/findbugs
 spring-build/lib/docbook
+.gradle
+.idea/
+
diff --git a/build-documentation/build.xml b/build-documentation/build.xml
index 1721bb0..c0b1a7e 100644
--- a/build-documentation/build.xml
+++ b/build-documentation/build.xml
@@ -2,8 +2,6 @@
 <project name="build-documentation" default="doc-html">
 
 	<path id="bundles">
-		<pathelement location="${basedir}/../user-guide"/>
-		<pathelement location="${basedir}/../programmer-guide"/>
 		<pathelement location="${basedir}/../tooling-guide"/>
 	</path>
 
diff --git a/build.gradle b/build.gradle
new file mode 100644
index 0000000..02d776a
--- /dev/null
+++ b/build.gradle
@@ -0,0 +1,32 @@
+buildscript {
+	repositories {
+		mavenCentral()
+	    maven {
+	      url "https://plugins.gradle.org/m2/"
+	    }
+	}
+	dependencies {
+		classpath 'org.asciidoctor:asciidoctor-gradle-plugin:1.5.3'
+	}
+}
+
+ext.docProjects = [
+	project(':programmer-guide'),
+	project(':user-guide'),
+]
+
+configure(docProjects) {
+	apply plugin: 'org.asciidoctor.convert'
+
+	asciidoctor {
+		resources {
+			from('src/docs/asciidoc') {
+				include 'assets/images/**/*.png'
+			}
+		}
+	}
+}
+
+task wrapper(type: Wrapper) {
+    gradleVersion = '3.1'
+}
diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
new file mode 100644
index 0000000..6ffa237
--- /dev/null
+++ b/gradle/wrapper/gradle-wrapper.jar
Binary files differ
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000..88d6b62
--- /dev/null
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,6 @@
+#Sat Feb 04 18:08:13 CET 2017
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-3.1-bin.zip
diff --git a/gradlew b/gradlew
new file mode 100755
index 0000000..9aa616c
--- /dev/null
+++ b/gradlew
@@ -0,0 +1,169 @@
+#!/usr/bin/env bash
+
+##############################################################################
+##
+##  Gradle start up script for UN*X
+##
+##############################################################################
+
+# Attempt to set APP_HOME
+# Resolve links: $0 may be a link
+PRG="$0"
+# Need this for relative symlinks.
+while [ -h "$PRG" ] ; do
+    ls=`ls -ld "$PRG"`
+    link=`expr "$ls" : '.*-> \(.*\)$'`
+    if expr "$link" : '/.*' > /dev/null; then
+        PRG="$link"
+    else
+        PRG=`dirname "$PRG"`"/$link"
+    fi
+done
+SAVED="`pwd`"
+cd "`dirname \"$PRG\"`/" >/dev/null
+APP_HOME="`pwd -P`"
+cd "$SAVED" >/dev/null
+
+APP_NAME="Gradle"
+APP_BASE_NAME=`basename "$0"`
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS=""
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD="maximum"
+
+warn ( ) {
+    echo "$*"
+}
+
+die ( ) {
+    echo
+    echo "$*"
+    echo
+    exit 1
+}
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+nonstop=false
+case "`uname`" in
+  CYGWIN* )
+    cygwin=true
+    ;;
+  Darwin* )
+    darwin=true
+    ;;
+  MINGW* )
+    msys=true
+    ;;
+  NONSTOP* )
+    nonstop=true
+    ;;
+esac
+
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+        # IBM's JDK on AIX uses strange locations for the executables
+        JAVACMD="$JAVA_HOME/jre/sh/java"
+    else
+        JAVACMD="$JAVA_HOME/bin/java"
+    fi
+    if [ ! -x "$JAVACMD" ] ; then
+        die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+    fi
+else
+    JAVACMD="java"
+    which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+fi
+
+# Increase the maximum file descriptors if we can.
+if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
+    MAX_FD_LIMIT=`ulimit -H -n`
+    if [ $? -eq 0 ] ; then
+        if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
+            MAX_FD="$MAX_FD_LIMIT"
+        fi
+        ulimit -n $MAX_FD
+        if [ $? -ne 0 ] ; then
+            warn "Could not set maximum file descriptor limit: $MAX_FD"
+        fi
+    else
+        warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
+    fi
+fi
+
+# For Darwin, add options to specify how the application appears in the dock
+if $darwin; then
+    GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
+fi
+
+# For Cygwin, switch paths to Windows format before running java
+if $cygwin ; then
+    APP_HOME=`cygpath --path --mixed "$APP_HOME"`
+    CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
+    JAVACMD=`cygpath --unix "$JAVACMD"`
+
+    # We build the pattern for arguments to be converted via cygpath
+    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
+    SEP=""
+    for dir in $ROOTDIRSRAW ; do
+        ROOTDIRS="$ROOTDIRS$SEP$dir"
+        SEP="|"
+    done
+    OURCYGPATTERN="(^($ROOTDIRS))"
+    # Add a user-defined pattern to the cygpath arguments
+    if [ "$GRADLE_CYGPATTERN" != "" ] ; then
+        OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
+    fi
+    # Now convert the arguments - kludge to limit ourselves to /bin/sh
+    i=0
+    for arg in "$@" ; do
+        CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
+        CHECK2=`echo "$arg"|egrep -c "^-"`                                 ### Determine if an option
+
+        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition
+            eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
+        else
+            eval `echo args$i`="\"$arg\""
+        fi
+        i=$((i+1))
+    done
+    case $i in
+        (0) set -- ;;
+        (1) set -- "$args0" ;;
+        (2) set -- "$args0" "$args1" ;;
+        (3) set -- "$args0" "$args1" "$args2" ;;
+        (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
+        (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
+        (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
+        (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
+        (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
+        (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
+    esac
+fi
+
+# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
+function splitJvmOpts() {
+    JVM_OPTS=("$@")
+}
+eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
+JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
+
+# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
+if [[ "$(uname)" == "Darwin" ]] && [[ "$HOME" == "$PWD" ]]; then
+  cd "$(dirname "$0")"
+fi
+
+exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"
diff --git a/gradlew.bat b/gradlew.bat
new file mode 100644
index 0000000..e95643d
--- /dev/null
+++ b/gradlew.bat
@@ -0,0 +1,84 @@
+@if "%DEBUG%" == "" @echo off

+@rem ##########################################################################

+@rem

+@rem  Gradle startup script for Windows

+@rem

+@rem ##########################################################################

+

+@rem Set local scope for the variables with windows NT shell

+if "%OS%"=="Windows_NT" setlocal

+

+set DIRNAME=%~dp0

+if "%DIRNAME%" == "" set DIRNAME=.

+set APP_BASE_NAME=%~n0

+set APP_HOME=%DIRNAME%

+

+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.

+set DEFAULT_JVM_OPTS=

+

+@rem Find java.exe

+if defined JAVA_HOME goto findJavaFromJavaHome

+

+set JAVA_EXE=java.exe

+%JAVA_EXE% -version >NUL 2>&1

+if "%ERRORLEVEL%" == "0" goto init

+

+echo.

+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.

+echo.

+echo Please set the JAVA_HOME variable in your environment to match the

+echo location of your Java installation.

+

+goto fail

+

+:findJavaFromJavaHome

+set JAVA_HOME=%JAVA_HOME:"=%

+set JAVA_EXE=%JAVA_HOME%/bin/java.exe

+

+if exist "%JAVA_EXE%" goto init

+

+echo.

+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%

+echo.

+echo Please set the JAVA_HOME variable in your environment to match the

+echo location of your Java installation.

+

+goto fail

+

+:init

+@rem Get command-line arguments, handling Windows variants

+

+if not "%OS%" == "Windows_NT" goto win9xME_args

+

+:win9xME_args

+@rem Slurp the command line arguments.

+set CMD_LINE_ARGS=

+set _SKIP=2

+

+:win9xME_args_slurp

+if "x%~1" == "x" goto execute

+

+set CMD_LINE_ARGS=%*

+

+:execute

+@rem Setup the command line

+

+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar

+

+@rem Execute Gradle

+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%

+

+:end

+@rem End local scope for the variables with windows NT shell

+if "%ERRORLEVEL%"=="0" goto mainEnd

+

+:fail

+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of

+rem the _cmd.exe /c_ return code!

+if  not "" == "%GRADLE_EXIT_CONSOLE%" exit 1

+exit /b 1

+

+:mainEnd

+if "%OS%"=="Windows_NT" endlocal

+

+:omega

diff --git a/programmer-guide/build.xml b/programmer-guide/build.xml
deleted file mode 100644
index 7200327..0000000
--- a/programmer-guide/build.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project name="virgo-programmer-guide">
-	
-	<property file="${basedir}/../build.properties"/>
-	<property file="${basedir}/../build.versions"/>
-	<import file="${basedir}/../virgo-build/docbook/default.xml"/>
-
-	<filterset id="docbook.filters">
-		<filter token="bundle.version" value="${bundle.version}"/>
-		<filtersfile file="${basedir}/filters.properties"/>
-	</filterset>
-
-</project>
diff --git a/programmer-guide/ivy.xml b/programmer-guide/ivy.xml
deleted file mode 100644
index fecb32f..0000000
--- a/programmer-guide/ivy.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?xml-stylesheet type="text/xsl" href="http://ivyrep.jayasoft.org/ivy-doc.xsl"?>
-<ivy-module
-		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-		xsi:noNamespaceSchemaLocation="http://incubator.apache.org/ivy/schemas/ivy.xsd"
-		version="1.3">
-
-	<info organisation="${project.organisation}" module="${ant.project.name}"/>
-
-	<configurations>
-		<include file="${virgo.build.dir}/common/default-ivy-configurations.xml"/>
-		<conf name="doc" visibility="public" description="Documentation"/>
-	</configurations>
-
-	<publications>
-		<!-- <artifact name="${ant.project.name}" ext="pdf" type="pdf"/> -->
-		<artifact name="${ant.project.name}" ext="zip" type="zip"/>
-		<artifact name="${ant.project.name}-single" ext="zip" type="zip"/>
-	</publications>
-
-	<dependencies/>
-
-</ivy-module>
diff --git a/programmer-guide/src/architecture.xml b/programmer-guide/src/architecture.xml
deleted file mode 100644
index 3ba9c5a..0000000
--- a/programmer-guide/src/architecture.xml
+++ /dev/null
@@ -1,476 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
-		"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
-<chapter id="architecture">
-	<title>Deployment Architecture</title>
-	<para> The @tomcat.product.name@ offers several choices when it comes to deploying applications. Each
-		choice offers certain advantages, and it is important to understand those in order to make
-		the right choice for your application. In this chapter, we take a closer look at the choices
-		offered, compare them, and provide guidelines in choosing the right one based on your
-		specific needs. </para>
-	<para> The @tomcat.product.name.short@ supports standard self-contained WAR files thus allowing you to
-		use the @tomcat.product.name@ as an enhanced web server. The @tomcat.product.name.short@ also supports the
-			<emphasis>Shared Libraries</emphasis> WAR format which allows for slimmer WAR files that
-		depend on OSGi bundles instead of including JAR files inside the WAR. The <emphasis>Shared
-			Services</emphasis> WAR format allows developers to further reduce the complexity of
-		standard WARs by deploying services and infrastructure bundles alongside the WAR. A shared
-		services WAR will then consume the services published by those bundles. To complete the
-		picture, the @tomcat.product.name.short@ supports the new OSGi-standard <emphasis>Web Application
-		Bundle</emphasis> deployment format for web applications that builds on the benefits
-		provided by a shared services WAR. In addition to this, @tomcat.product.name.short@ provides
-		additional conveniences for developing and deploying Spring MVC-based web applications. </para>
-	<para>For applications consisting of multiple bundles and web applications, plans and the PAR
-		format are the primary deployment models that take advantage of OSGi capabilities. We will
-		explore all of these formats and their suitability later in this guide.</para>
-	<!-- ======================================================================= -->
-	<!-- ======================================================================= -->
-	<section id="architecture-deployment-formats">
-		<title>Supported Deployment Formats</title>
-		<para> The @tomcat.product.name@ supports applications packaged in the following formats: </para>
-		<orderedlist>
-			<listitem>
-				<para><link linkend="architecture-raw-osgi-bundles">Raw OSGi Bundles</link></para>
-			</listitem>
-			<listitem>
-				<para><link linkend="architecture-wars">Java EE WAR</link></para>
-			</listitem>
-			<listitem>
-				<para><link linkend="architecture-war-gemini">Web Application Bundles</link></para>
-			</listitem>
-			<listitem>
-				<para><link linkend="architecture-pars">PARs</link></para>
-			</listitem>
-			<listitem>
-				<para><link linkend="architecture-plans">Plans</link></para>
-			</listitem>
-			<listitem>
-				<para><link linkend="architecture-configurations">Configurations</link></para>
-			</listitem>
-		</orderedlist>
-		<para> When you deploy an application to the @tomcat.product.name.short@, each deployment artifact
-			(e.g., a single bundle, WAR, PAR, or plan) passes through a deployment pipeline. This
-			deployment pipeline is responsible for processing applications of certain types (i.e.,
-			application type). The @bundle.version@ release of the @tomcat.product.name.short@ natively
-			supports deployers analogous to each of the aforementioned packaging options. </para>
-		<para> Let&rsquo;s take a closer look now at each of the supported deployment and packaging
-			options to explore which one is best suited to your application.</para>
-		<section id="architecture-raw-osgi-bundles">
-			<title>Raw OSGi Bundles</title>
-			<para> At its core, the @tomcat.product.name@ is an OSGi container. Thus any OSGi-compliant
-				bundle can be deployed directly on the @tomcat.product.name.short@ unmodified. You&rsquo;ll
-				typically deploy an application as a single bundle or a set of stand-alone bundles
-				if you&rsquo;d like to publish or consume services globally within the container via
-				the OSGi Service Registry. </para>
-		</section>
-		<section id="architecture-wars">
-			<title>WAR Deployment Formats</title>
-			<para> For Web Application Archives (WAR), the @tomcat.product.name@ provides support for the
-				following three formats. </para>
-			<orderedlist>
-				<listitem>
-					<para><link linkend="architecture-standard-war">Standard WAR</link></para>
-				</listitem>
-				<listitem>
-					<para><link linkend="architecture-shared-libraries-war">Shared Libraries
-						WAR</link></para>
-				</listitem>
-				<listitem>
-					<para><link linkend="architecture-shared-services-war">Shared Services
-						WAR</link></para>
-				</listitem>
-			</orderedlist>
-			<para> Each of these formats plays a distinct role in the incremental migration path
-				from a standard Java EE WAR to an OSGi-ified web application.</para>
-			<section id="architecture-standard-war">
-				<title>Standard WAR</title>
-				<para> Standard WAR files are supported directly in the @tomcat.product.name.short@. At
-					deployment time, the WAR file is transformed into an OSGi bundle and installed
-					into Tomcat. All the standard WAR contracts are honoured, and your existing WAR
-					files should just drop in and deploy without change. Support for standard,
-					unmodified WAR files allows you to try out the @tomcat.product.name@ on your existing
-					web applications and then gradually migrate toward the <emphasis>Shared
-						Libraries WAR</emphasis> and <emphasis>Shared Services WAR</emphasis>
-					formats. </para>
-				<para> In addition to the standard support for WARs that you would expect from
-					Tomcat, the @tomcat.product.name.short@ also enables the following features:</para>
-				<orderedlist>
-					<listitem>
-						<para>Spring-driven load-time weaving (see Section 6.8.4, “Load-time weaving
-							with AspectJ in the Spring Framework").</para>
-					</listitem>
-					<listitem>
-						<para>Diagnostic information such as FFDC (first failure data
-						capture)</para>
-					</listitem>
-				</orderedlist>
-				<para> The main benefit of this application style is familiarity -- developers know
-					how to create a WAR file! You can take advantage of the
-					@tomcat.product.name.short@&rsquo;s added feature set without modifying the
-					application. The application can also be deployed on other Servlet containers or
-					Java EE application servers.</para>
-				<para> You may choose this application style if the application is fairly simple and
-					small. You may also prefer this style even for large and complex applications as
-					a starting point and migrate to the other styles over time as discussed in <xref
-						linkend="migrating-to-osgi"/> . </para>
-			</section>
-			<section id="architecture-shared-libraries-war">
-				<title>Shared Libraries WAR</title>
-				<para> If you have experience with developing and packaging web applications using
-					the standard WAR format, you&rsquo;re certainly familiar with the pains of
-					library bloat. So, unless you&rsquo;re installing shared libraries in a common
-					library folder for your Servlet container, you have to pack all JARs required by
-					your web application in <literal>/WEB-INF/lib</literal>. Prior to the release of
-					the @tomcat.product.name@, such library bloat has essentially been the norm for web
-					applications, but now there is a better solution! The Shared Libraries WAR
-					format reduces your application&rsquo;s deployment footprint and eradicates
-					library bloat by allowing you to declare dependencies on libraries via standard
-					OSGi manifest headers such as <literal>Import-Package</literal> and <literal
-						>Require-Bundle</literal> . The @tomcat.product.name.short@ provides additional
-					support for simplifying dependency management via the <literal
-					>Import-Library</literal> and <literal>Import-Bundle</literal> manifest headers
-					which are essentially macros that get expanded into OSGi-compliant <literal
-						>Import-Package</literal> statements. </para>
-				<tip>
-					<para> For detailed information on which libraries are already available, check
-						out the <ulink url="http://www.springsource.com/repository">@ebr@ </ulink> .
-					</para>
-				</tip>
-			</section>
-			<section id="architecture-shared-services-war">
-				<title>Shared Services WAR</title>
-				<para> Once you&rsquo;ve begun taking advantage of declarative dependency management
-					with a Shared Libraries WAR, you&rsquo;ll likely find yourself wanting to take
-					the next step toward reaping further benefits of an OSGi container: sharing
-					services between your OSGi-compliant bundles and your web applications. By
-					building on the power and simplicity of Spring-DM, the <emphasis>Shared Services
-						WAR</emphasis> format puts the OSGi Service Registry at your finger tips. As
-					a best practice you&rsquo;ll typically publish services from your domain,
-					service, and infrastructure bundles via <literal>&lt;osgi:service ...
-					/&gt;</literal> and then consume them in your web application&rsquo;s
-					ApplicationContext via <literal>&lt;osgi:reference ... /&gt;</literal>. Doing so
-					promotes programming to interfaces and allows you to completely decouple your
-					web-specific deployment artifacts from your domain model, service layer, etc.,
-					and that&rsquo;s certainly a step in the right direction. Of the three supported
-					WAR deployment formats, the Shared Services WAR is by far the most attractive in
-					terms of modularity and reduced overall footprint of your web applications.
-				</para>
-			</section>
-			<section id="architecture-war-gemini">
-				<title>WARs and the Gemini Web Container</title>
-				<para> 
-					@tomcat.product.name@ fully supports the OSGi Web Applications standard. Using the
-					reference implementation from Gemini Web that was developed by SpringSource from
-					an offshoot of the original @tomcat.product.name.short@ codebase. This RI is now fully
-					integrated in @tomcat.product.name.short@ as the basis of the support for web
-					application deployment. 
-				</para>
-				<para> 
-					The OSGi Web Applications specification introduces the concept of a <emphasis>Web
-					Application Bundle</emphasis>, which is a WAR that is also a bundle. The
-					specification defines how WAR files are transformed into bundles automatically
-					as needed. 
-				</para>
-				<para> 
-					You can find an introduction to the Web Container in blog entries written by
-					the @project.name@ team <ulink
-						url="http://blog.springsource.com/2009/05/27/introduction-to-the-osgi-web-container/"
-						>here</ulink> and <ulink
-						url="http://blog.springsource.com/2009/06/01/what-the-osgi-web-container-means-for-dm-server/"
-						>here</ulink>. </para>
-				<section id="architecture-war-gemini-extensions">
-					<title>Extensions to the Web Container</title>
-					<para> @tomcat.product.name@ provides a variety of extensions to the Web Container that
-						allow you to construct sophisticated applications. The table below 
-						summarises the extensions that are available or in development. </para>
-					<table colsep="1" rowsep="3">
-						<tgroup cols="2">
-							<colspec width="1*"/>
-							<colspec width="1*"/>
-							<thead>
-								<row>
-									<entry>Feature</entry>
-									<entry>Description</entry>
-								</row>
-							</thead>
-							<tbody>
-								<row>
-									<entry>Instrumentable ClassLoaders</entry>
-									<entry>All web bundle ClassLoaders are instrumentable by
-										Spring&rsquo;s load-time weaving infrastructure.</entry>
-								</row>
-								<row>
-									<entry>Support for exploded bundles/WARs</entry>
-									<entry>Bundles/WARs in directory form can be deployed as Web
-										Application Bundles
-									</entry>
-								</row>
-								<row>
-									<entry>Support for scanning TLDs in dependencies</entry>
-									<entry>As per the Web Application specification, all TLDs located
-										inside a web bundle are located using the rules defined in
-										the JSP 2.1 specification. In @tomcat.product.name.short@, the
-										dependencies of a Web Application Bundle are also scanned for TLDs
-										following the rules outlined in JSP 2.1
-									</entry>
-								</row>
-							</tbody>
-						</tgroup>
-					</table>
-				</section>
-			</section>
-		</section>
-		<section id="architecture-pars">
-			<title>PAR</title>
-			<para> A PAR is a standard JAR which contains all of the modules of your application
-				(e.g., service, domain, and infrastructure bundles as well as a WAR or web module
-				for web applications) in a single deployment unit. This allows you to deploy,
-				refresh, and undeploy your entire application as a single entity. If you are
-				familiar with Java EE, it is worth noting that a PAR can be considered a replacement
-				for an EAR (Enterprise Archive) within the context of an OSGi container. As an added
-				bonus, modules within a PAR can be refreshed independently and on-the-fly, for
-				example via the Virgo Eclipse IDE Tooling (see the Virgo Tools Guide). </para>
-			<para> Many of the benefits of the PAR format are due to the underlying OSGi
-				infrastructure, including: <itemizedlist>
-					<listitem>
-						<para> Fundamentally modularized applications: instead of relying on fuzzy
-							boundaries between logical modules in a monolithic application, this
-							style promotes physically separated modules in the form of OSGi bundles.
-							Then each module may be developed separately, promoting parallel
-							development and loose coupling.</para>
-					</listitem>
-					<listitem>
-						<para> Robust versioning of various modules: the versioning capability
-							offered by OSGi is much more comprehensive than alternatives. Each
-							module can specify a version range for each of its dependencies. Bundles
-							are isolated from each other in such a way that multiple versions of a
-							bundle may be used simultaneously in an application.</para>
-					</listitem>
-					<listitem>
-						<para> Improved manageability: each bundle may be deployed or undeployed in
-							a running application. This allows modifying the existing application to
-							fix bugs, improve performance, and even to add new features without
-							having to restart the application.</para>
-					</listitem>
-				</itemizedlist></para>
-			<para> Furthermore, PARs scope the bundles of your application within the
-				@tomcat.product.name.short@. Scoping provides both a physical and logical application
-				boundary, effectively shielding the internals of your application from other PARs
-				deployed within the @tomcat.product.name.short@. This means your application doesn&rsquo;t
-				have to worry about clashing with other running applications (e.g., in the OSGi
-				Service Registry). You get support for load-time weaving, classpath scanning,
-				context class loading, etc., and the @tomcat.product.name.short@ does the heavy lifting for
-				you to make all this work seamlessly in an OSGi environment. If you want to take
-				full advantage of all that the @tomcat.product.name@ and OSGi have to offer, packaging and
-				deploying your applications as a PAR is a good choice, although plans are an even
-				better one, as described in the next section.</para>
-			<tip>
-				<title>OSGi != multiple JARs</title>
-				<para> Note that while physically separated modules can, in theory, be implemented
-					simply using multiple JARs, complex versioning requirements often make this
-					impractical. For example, consider the situation depicted in the diagram below. <itemizedlist>
-						<listitem>
-							<para>Bundle A depends on version 1.0.0 of bundle B and version 2.0.0 of
-								bundle C.</para>
-						</listitem>
-						<listitem>
-							<para>Bundle B depends on version 1.0.0 of bundle C.</para>
-						</listitem>
-					</itemizedlist> Suppose that versions 1.0.0 and 2.0.0 of bundle C are neither
-					backward nor forward compatible. Traditional monolithic applications cannot
-					handle such situations: either bundle A or bundle B would need reworking which
-					undermines truly independent development. OSGi&rsquo;s versioning scheme enables
-					this scenario to be implemented in a robust manner. If it is desirable to rework
-					the application to share a single version of C, then this can be planned in and
-					is not forced. </para>
-				<mediaobject>
-					<imageobject><imagedata fileref="images/architecture-bundle-versioning.png"
-					/></imageobject>
-				</mediaobject>
-			</tip>
-		</section>
-		<section id="architecture-plans">
-			<title>Plans</title>
-			<para> A plan is similar to a PAR in that it encapsulates all of the artifacts of your
-				application in a single deployment unit. The main difference, however, is that a
-				plan is simply an XML file that lists the artifacts of your application; a PAR, by
-				contrast, is an actual JAR file that physically contains the artifacts. Just like a
-				PAR, you deploy, refresh, and undeploy a plan as a single entity. We highly
-				recommends the use of plans for creating applications. </para>
-			<para> When you create a plan, you can specify that the included bundles and services
-				are in a scope that isolates them from the rest of @tomcat.product.name@ and its
-				deployments. This scoping ensures that the bundles wire to each other and see each
-				other&rsquo;s services in preference to services from outside the scope. Scoping
-				also prevents application code from leaking into the global scope or scope of
-				another application. In addition, a plan can link the lifecycle of a group of
-				bundles together atomically, which ensures that start, stop, and uninstall
-				events on a single artifact in the plan are escalated to all artifacts in the plan.
-				You can, however, disable both of these features by simply setting an attribute in
-				the plan. </para>
-			<para> The general benefits of using plans are similar to those of using PARs; see <link
-					linkend="architecture-pars">PAR</link> for details. Plans offer added benefits,
-				however, such as the ability to control the deployment order of your application:
-				the order in which you list artifacts in the plan&rsquo;s XML file is the order in
-				which @tomcat.product.name.short@ deploys them. Additionally, because plans specify the
-				artifacts that make up an application by reference, it is easier to share artifacts
-				between plans as well as update individual parts of a plan without having to
-				physically repackage (re-JAR) it. </para>
-		</section>
-		<section id="architecture-configurations">
-			<title>Configurations</title>
-			<para>A Configuration is simply a Java properties file. When deployed it will be
-				recognised by the deployer and installed in to <emphasis>Configuration
-				Admin</emphasis> for later use by your applications. @tomcat.product.name.short@ supports
-				both singleton (ManagedService) and factory (ManagedServiceFactory) configurations.
-				(see section 104.6 in the Compendium Specification) </para>
-			<para>For a singleton configuration the name that it will be installed under is its filename 
-				minus the <code>.properties</code> extension. Factory Configuration is supported by 
-				specifying the <emphasis>service.factoryPid</emphasis> property. In this case the actual PID will
-				be created by <emphasis>Configuration Admin</emphasis> (see section 104.6 in the
-				Compendium Specification).</para>
-			<para>How to consume configuration data is discussed <link
-					linkend="developing-applications-configuration-artifacts">later</link>. </para>
-		</section>
-	</section>
-	<!-- ======================================================================= -->
-	<!-- ======================================================================= -->
-	<section id="architecture-dependency-types">
-		<title>Dependency Types</title>
-		<para> 
-			In an OSGi environment, there are two kinds of dependencies between various bundles:
-			<emphasis>type</emphasis> dependency and <emphasis>service</emphasis> dependency. 
-			<itemizedlist>
-				<listitem>
-					<para>
-						<emphasis role="bold">Type dependency</emphasis>: A bundle may depend on a
-						type exported by another bundle thus creating a type dependency. Type
-						dependencies are managed through <literal>Import-Package</literal> and
-						<literal>Export-Package</literal> directives in the OSGi manifest. This
-						kind of dependency is similar to a JAR file using types in other JAR files
-						from the classpath. However, as we&rsquo;ve seen earlier, there are
-						significant differences. 
-					</para>
-				</listitem>
-				<listitem>
-					<para>
-						<emphasis role="bold">Service dependency</emphasis>: A bundle may also
-						publish services (preferably using Spring-DM), and other bundles may consume
-						those services. If two bundles depend on the same service, both will be
-						communicating effectively to the same object. More specifically, any state
-						for that service will be shared between all the clients of that service.
-						This kind of arrangement is similar to the commonly seen client-server
-						interaction through mechanisms such as RMI or Web Services. 
-					</para>
-				</listitem>
-			</itemizedlist>
-		</para>
-	</section>
-	<!-- ======================================================================= -->
-	<!-- ======================================================================= -->
-	<section id="regions">
-		<title>Regions</title>
-		<para> 
-			Conceptually, the @umbrella.product.name@ can be divided into two separate subsystems, called Regions. This 
-			provides a way to keep the @kernel.product.name@ separate from user applications. Read more about Regions 
-			and the two in @project.name@ in the <ulink url="../../virgo-user-guide/html/index.html">User Guide</ulink> 
-			concepts section.
-		</para>
-	</section>
-	
-	<!-- ======================================================================= -->
-	<!-- ======================================================================= -->
-	<section id="architecture-forming-bundles">
-		<title>A Guide to Forming Bundles</title>
-		<para> 
-			So what makes an application suitable for deployment on the @tomcat.product.name@? Since
-			OSGi is at the heart of the @tomcat.product.name.short@, modular applications consisting of
-			bundles, which each represent distinct functionality and well-defined boundaries, can
-			take maximum advantage of the OSGi container&rsquo;s capabilities. The core ideas behind
-			forming bundles require following good software engineering practices: separation of
-			concerns, loose coupling, and communication through clear interfaces. In this section,
-			we look at a few approaches that you may use to create modular applications for
-			@tomcat.product.name@ deployment. Please consider the following discussion as guidelines and
-			not as rules. 
-		</para>
-		<para> 
-			Bundles can be formed along horizontal slices of layering and vertical slices of
-			function. The objective is to enable independent development of each bundle and minimize
-			the skills required to develop each bundle.
-		</para>
-		<para> For example, an application could have the following bundles:
-				<emphasis>infrastructure</emphasis>, <emphasis>domain</emphasis>,
-				<emphasis>repository</emphasis>, <emphasis>service</emphasis>, and
-			<emphasis>web</emphasis> as shown in the following diagram.</para>
-		<para><mediaobject>
-				<imageobject><imagedata fileref="images/bundle-dependencies-layers.png"
-				/></imageobject>
-			</mediaobject> Each bundle consists of types appropriate for that layer and exports
-			packages and services to be used by other layers. Let&rsquo;s examine each bundle in
-			more detail: <table id="architecture-forming-bundles-across-layers-table" colsep="1"
-				frame="all" rowsep="1">
-				<title>Bundles across layers</title>
-				<tgroup cols="5">
-					<colspec colwidth="1*"/>
-					<colspec colwidth="2*"/>
-					<colspec colwidth="1*"/>
-					<colspec colwidth="1*"/>
-					<colspec colwidth="1*"/>
-					<thead>
-						<row>
-							<entry>Bundles</entry>
-							<entry>Imported Packages</entry>
-							<entry>Exported Packages</entry>
-							<entry>Consumed Services</entry>
-							<entry>Published Services</entry>
-						</row>
-					</thead>
-					<tbody>
-						<row>
-							<entry>Infrastructure</entry>
-							<entry>Third-party libraries</entry>
-							<entry>Infrastructure interfaces</entry>
-							<entry>None</entry>
-							<entry>None</entry>
-						</row>
-						<row>
-							<entry>Domain</entry>
-							<entry>Depends: for example, if JPA is used to annotate persistent
-								types, then JPA packages.</entry>
-							<entry>Public domain types</entry>
-							<entry>None</entry>
-							<entry>None</entry>
-						</row>
-						<row>
-							<entry>Web</entry>
-							<entry>Domain, Service</entry>
-							<entry>None</entry>
-							<entry>Service beans</entry>
-							<entry>None</entry>
-						</row>
-						<row>
-							<entry>Service</entry>
-							<entry>Domain, Infrastructure, Repository</entry>
-							<entry>Service interfaces</entry>
-							<entry>Repository beans</entry>
-							<entry>Service beans</entry>
-						</row>
-						<row>
-							<entry>Repository</entry>
-							<entry>Domain, Third-party libraries, ORM bundles, etc.</entry>
-							<entry>Repository interfaces</entry>
-							<entry>DataSources, ORM session/entity managers, etc.</entry>
-							<entry>Repository beans</entry>
-						</row>
-					</tbody>
-				</tgroup>
-			</table></para>
-		<para> Within each layer, you may create bundles for each subsystem representing a vertical
-			slice of business functionality. For example, as shown in the following figure, the
-			service layer is divided into two bundles each representing separate business
-			functions. <mediaobject>
-				<imageobject><imagedata fileref="images/bundle-dependencies-verticals.png"
-				/></imageobject>
-			</mediaobject></para>
-		<para> You can similarly separate the repositories, domain classes, and web controllers
-			based on the business role they play.</para>
-	</section>
-</chapter>
diff --git a/programmer-guide/src/common-libraries.xml b/programmer-guide/src/common-libraries.xml
deleted file mode 100644
index cc5cbea..0000000
--- a/programmer-guide/src/common-libraries.xml
+++ /dev/null
@@ -1,82 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
-		"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
-<chapter id="common-libraries">
-	<title>Working with Common Enterprise Libraries</title>
-    <titleabbrev>Common Libraries</titleabbrev>
-	<section id="common-libraries-hibernate">
-		<title>Working with Hibernate</title>
-		<section id="common-libraries-hibernate-import">
-			<title>Importing Hibernate</title>
-			<para>
-				Hibernate uses CGLIB to dynamically create subclasses of your entity types at
-				runtime. To guarantee that Hibernate and CGLIB can correctly see the types,
-				you must add an <literal>Import-Library</literal> or <literal>Import-Bundle</literal> for the Hibernate library or bundle
-				into any bundle that uses Hibernate directly.
-			</para>
-			<para>
-			      	Additionally, if other bundles in your application contain types to be persisted by Hibernate, then be sure to specify the <code>import-scope</code> directive of the <literal>Import-Bundle</literal> header in the bundle that uses Hibernate directly.  The <literal>import-scope</literal> directive tells @tomcat.product.name@ to implicitly import the bundle into all other bundles that make up the application; this ensures that bundles that indirectly depend on the generated Hibernate classes have access to them, but you do not have to explicitly update their <code>Import-Bundle</code> header, ensuring modularity.  For example:
-			</para>
-	           <programlisting>
-Import-Bundle: com.springsource.org.hibernate;version="[3.2.6.ga,3.2.6.ga]";<emphasis role="bold">import-scope:=application</emphasis></programlisting>
-		<para>
-			The <code>import-scope</code> directive works only for the bundles in a scoped application (PARs or plans.)
-		</para>
-
-		</section>
-	</section>
-	<section id="common-libraries-datasources">
-		<title>Working with DataSources</title>
-		<para>
-			Many <literal>DataSource</literal> implementations use the <literal>DriverManager</literal>
-			class which is incompatible with typical OSGi class loading semantics. To get around this,
-			use a <literal>DataSource</literal> implementation that does not rely on
-			<literal>DriverManager</literal>. Versions of the following
-			<literal>DataSources</literal> that are known to work in an OSGi environment are available in the
-			<ulink url="http://www.springsource.com/repository">@ebr@</ulink>.
-		</para>
-		<itemizedlist>
-			<listitem>
-				<para>
-					<ulink url="http://www.springsource.com/repository/app/bundle/detail?name=com.springsource.org.apache.commons.dbcp">Apache Commons DBCP</ulink>
-				</para>
-			</listitem>
-			<listitem>
-				<para>SimpleDriverDataSource available in
-					<ulink url="http://www.springsource.com/repository/app/bundle/detail?name=org.springframework.jdbc">Spring JDBC</ulink>
-					2.5.5 and later
-				</para>
-			</listitem>
-		</itemizedlist>
-	</section>
-	<section id="common-libraries-weaving-instrumentation">
-		<title>Weaving and Instrumentation</title>
-		<para>
-			When using a library that performs bytecode weaving or instrumentation, such as AspectJ,
-			OpenJPA or EclipseLink, any types that are woven must be able to see the library doing
-			the weaving. This is accomplished by adding an <literal>Import-Library</literal> for the
-			weaving library into all bundles that are to be woven.
-		</para>
-		<para>
-			Weaving is often used by JPA implementations to transform persisted types. When using a
-			JPA provider that uses load-time weaving, an <literal>Import-Library</literal> for the
-			provider is needed in the bundles containing the persisted types.
-		</para>
-	</section>
-	<section id="common-libraries-tld">
-		<title>JSP Tag Libraries</title>
-		<para>
-			When using tag libraries within a WAR or WAB, be sure to include an <literal>Import-Bundle</literal> 
-			or <literal>Import-Library</literal> for the tag library bundle(s). This will ensure that your WAR or WAB 
-			can see the TLD definition and implementing types. For example, to use the Apache implementation of JSTL, 
-			add the following to your bundle&rsquo;s <literal>/META-INF/MANIFEST.MF</literal>:
-		</para>
-<programlisting>
-<emphasis role="bold">Import-Bundle</emphasis>: com.springsource.org.apache.taglibs.standard;version="1.1.2"
-</programlisting>
-		<para>
-			<literal>Import-Package</literal> can also be used but it is tedious to add all the imports as there are 
-			typically lots of tld definitions in a bundle providing them.
-		</para>
-	</section>
-</chapter>
diff --git a/programmer-guide/src/developing-applications.xml b/programmer-guide/src/developing-applications.xml
deleted file mode 100644
index 89c2fa1..0000000
--- a/programmer-guide/src/developing-applications.xml
+++ /dev/null
@@ -1,1115 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
-		"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
-<chapter id="developing-applications">
-	<title>Developing Applications</title>
-	<para>
-		Applications that take advantage of the OSGi capabilities of @project.name@
-		are typically comprised of multiple bundles. Each bundle may have dependencies on
-		other bundles. Furthermore, each bundle exposes only certain packages and
-		services. In this chapter, we look at how to create bundles, import and export
-		appropriate functionality, and create artifacts to deploy web applications on the @tomcat.product.name@. 
-	</para>
-	<section id="developing-applications-bundle">
-		<title>Anatomy of a Bundle</title>
-		<tip>
-			<para>
-				This is an abbreviated introduction to OSGi bundles. Please refer to the
-				<ulink url="http://static.springframework.org/osgi/docs/current/reference/html/"> 
-				Spring Dynamic Modules for OSGi documentation</ulink> for full details.
-			</para>
-		</tip>
-		<para>
-			An OSGi bundle is simply a jar file with metadata that describe
-			additional characteristics such as version and imported and exported packages.
-		</para>
-		<para>
-			A bundle exports types and publishes services to be used by other bundles:
-		</para>
-		<itemizedlist>
-			<listitem>
-				<para>
-					<emphasis role="bold">Types</emphasis>:
-					via the OSGi <code>Export-Package</code> directive,
-				</para>
-			</listitem>
-			<listitem>
-				<para>
-					<emphasis role="bold">Services</emphasis>:
-					via Spring-DM&rsquo;s <code>&lt;service ... /&gt;</code> XML namespace element.
-				</para>
-			</listitem>
-		</itemizedlist>
-
-		<para>
-			A bundle may import types and services exported by other bundles:
-		</para>
-		<itemizedlist>
-			<listitem>
-				<para><emphasis role="bold">Types</emphasis>:
-				via the OSGi <code>Import-Package</code> directive,</para>
-			</listitem>
-			<listitem>
-				<para><emphasis role="bold">Services</emphasis>:
-				via Spring-DM&rsquo;s <code>&lt;reference ... /&gt;</code> XML namespace element.</para>
-			</listitem>
-		</itemizedlist>
-
-		<para>
-			Let&rsquo;s see an example from the PetClinic sample application. The following listing shows the
-			<filename>MANIFEST.MF</filename> file for the <code>org.springframework.petclinic.infrastructure.hsqldb</code> bundle.
-		</para>
-		<programlisting>
-Manifest-Version: 1.0
-<emphasis role="bold">Bundle-ManifestVersion</emphasis>: 2
-<emphasis role="bold">Bundle-Name</emphasis>: PetClinic HSQL Database Infrastructure
-<emphasis role="bold">Bundle-SymbolicName</emphasis>: org.springframework.petclinic.infrastructure.hsqldb
-<emphasis role="bold">Bundle-Version</emphasis>: 1.0
-<emphasis role="bold">Import-Library</emphasis>: org.springframework.spring;version="[2.5,2.6]"
-<emphasis role="bold">Import-Bundle</emphasis>: com.springsource.org.apache.commons.dbcp;version="[1.2.2.osgi,1.2.2.osgi]",
- com.springsource.org.hsqldb;version="[1.8.0.9,1.8.0.9]"
-<emphasis role="bold">Import-Package</emphasis>: javax.sql
-<emphasis role="bold">Export-Package</emphasis>: org.springframework.petclinic.infrastructure
-		</programlisting>
-		<para>
-			The <code>org.springframework.petclinic.infrastructure.hsqldb</code> bundle expresses its dependencies on
-			the <code>javax.sql</code> package, the Commons DBCP and HSQLDB bundles, and the Spring library (we will examine
-			the details of the library artifact in <xref linkend="developing-applications-defining-libraries"/>). The Commons DBCP 
-			bundle is imported at a version of exactly 1.2.2.osgi and the HSQLDB bundle is imported at a version of exactly
-			1.8.0.9. The Spring library is imported at a version between 2.5 inclusive and 2.6 exclusive.
-		</para>
-		
-		<para>
-			Note that you do not specify the bundle that will provide the imported packages.
-			@project.name@ will examine the available bundles and satisfy the required dependencies. 
-		</para>
-		<para>
-			The following <filename>osgi-context.xml</filename> file from the PetClinic sample&rsquo;s
-			<code>org.springframework.petclinic.repository.jdbc</code> bundle declares a service published by the bundle and
-			references a service published by another bundle.
-		</para>
-		<programlisting language="xml"><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
-<beans:beans xmlns="http://www.springframework.org/schema/osgi"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xmlns:beans="http://www.springframework.org/schema/beans"
-    xsi:schemaLocation="http://www.springframework.org/schema/osgi  
-        http://www.springframework.org/schema/osgi/spring-osgi.xsd
-        http://www.springframework.org/schema/beans   
-        http://www.springframework.org/schema/beans/spring-beans.xsd">
-
-    <service id="osgiClinic" ref="clinic" interface="org.springframework.petclinic.repository.Clinic" />
-    <reference id="dataSource" interface="javax.sql.DataSource"/>
-
-</beans:beans>]]></programlisting>
-		<para>
-			The <code>service</code> element publishes the <code>clinic</code> bean
-			(a regular Spring bean declared in the <filename>module-context.xml</filename> file) and specifies
-			<code>org.springframework.petclinic.repository.Clinic</code> as the type
-			of the published service.
-		</para>
-		<para>The <code>reference</code> elements define a <code>dataSource</code> bean that references
-		    a service published by another bundle with a an interface type of <code>javax.sql.DataSource</code>.
-		</para>
-	</section>
-  
-	<section id="developing-applications-packaging">
-		<title>Creating PARs and Web Applications</title>
-		<para>
-			@project.name@ supports two OSGi-oriented ways of packaging applications: the PAR format 
-			and application bundles (including web bundles). The @tomcat.product.name.short@ also supports three
-			distinct WAR deployment and packaging formats: standard Java EE WAR, Shared Libraries WAR, Shared Services WAR.
-		</para>
-		<para>
-			@project.name@ also supports plans as a way to describe an application. This method is similar to a PAR 
-			in that it encapsulates all the artifacts of an application as a single unit, but differs in that a plan simply 
-			lists the bundles in an XML file rather than packaging all the bundles in a single JAR file.  The use of plans 
-			offers additional benefits to using PARs; for this reason, we recommend their use.  For details, see 
-			<link linkend="developing-applications-plans">Creating Plans</link>.
-		</para>
-		<section id="developing-applications-packaging-par">
-			<title>PARs</title>
-			<para>
-				An OSGi application is packaged as a JAR file, with extension <literal>.par</literal>. A PAR artifact offers several benefits:
-				<itemizedlist>
-					<listitem>A PAR file has an application name, version, symbolic name, and description.</listitem>
-					<listitem>The artifacts of a PAR file are scoped so that they cannot
-						be shared accidentally by other applications. The scope forms a boundary for automatic
-						propagation of load time weaving and bundle refresh.
-						See <link linkend="developing-applications-plans-scoping">Plans and Scoping</link> for more on scoping.
-					</listitem>
-					<listitem>Since a PAR is scoped, its artifacts have their exported packages imported by the
-						synthetic context bundle which is used for thread context class loading. So,
-						for example, hibernate will be able to load classes of any of the exported
-						packages of the bundles in a PAR file using the thread context class loader.</listitem>
-					<listitem>A PAR file is visible to management interfaces.</listitem>
-					<listitem>A PAR file can be undeployed and redeployed as a unit.</listitem>
-					<listitem>
-						A PAR file is <emphasis>atomic</emphasis> in that it ties together the lifecycle of its artifacts. If you start, stop, or uninstall 
-						one of a PAR's artifacts, @project.name@ escalates the operation to the whole PAR file.
-						So @project.name@ prevents artifacts of a PAR from being in inconsistent states.
-						For example, if one artifact should fail to start, then @project.name@ stops all artifacts in the PAR.
-					</listitem>
-				</itemizedlist>
-				See <link linkend="developing-applications-plans-scoping">Plans and Scoping</link> for more information on scoping.
-			</para>	
-			<para>
-				A PAR includes one or more application bundles and its manifest specifies the following
-				manifest headers:
-				<table id="developing-applications-packaging-par-headers-table" colsep="1" frame="all" rowsep="1">
-					<title>PAR file headers</title>
-					<tgroup cols="2">
-						<colspec colwidth="2*" />
-						<colspec colwidth="3*" />
-						<thead>
-							<row>
-								<entry>Header</entry>
-								<entry>Description</entry>
-							</row>
-						</thead>
-						<tbody>
-							<row>
-								<entry><literal>Application-SymbolicName</literal></entry>
-								<entry>Identifier for the application which, in combination with Application-Version, uniquely identifies an application</entry>
-							</row>
-							<row>
-								<entry><literal>Application-Name</literal></entry>					
-								<entry>Human readable name of the application</entry>
-							</row>
-							<row>
-								<entry><literal>Application-Version</literal></entry>
-								<entry>Version of the application</entry>
-							</row>
-							<row>
-								<entry><literal>Application-Description</literal></entry>
-								<entry>Short description of the application</entry>
-							</row>
-						</tbody>
-					</tgroup>
-				</table>
-			</para>	
-			<para>
-				The following code shows an example MANIFEST.MF in a PAR file:
-			<programlisting><emphasis role="bold">Application-SymbolicName</emphasis>: com.example.shop
-<emphasis role="bold">Application-Version</emphasis>: 1.0
-<emphasis role="bold">Application-Name</emphasis>: Online Shop
-<emphasis role="bold">Application-Description</emphasis>: Example.com&rsquo;s Online Shopping Application</programlisting>
-			</para>
-		</section>
-		<section id="developing-applications-web-application-bundles">
-			<title>Web Application Bundles</title>
-			<para>
-				@tomcat.product.name@ supports Web Application Bundles that are compliant with the OSGi Web Applications specification. 
-				The defining property of a Bundle that makes it a Web Application Bundle is a manifest header, <literal>Web-ContextPath</literal>. 
-				This defines the context path the web application will be registered under. 
-			</para>
-			<para>
-				See <link linkend="using-spring">Using Spring and Spring DM</link> for information on using Spring or Spring DM in a Web Application Bundle.
-			</para>
-		</section>
-
-    </section><!-- end packaging -->
-
-	<section id="developing-applications-plans">
-		<title>Creating Plans</title>
-		<para>
-			Plans are similar to PARs in that they encapsulate the artifacts of an application as a single unit.
-			However plans are XML files that refer to their artifacts, whereas PARs are JAR files that physically contain their artifacts.
-			Plans, known as <emphasis>parent</emphasis> plans may refer to other plans, known as <emphasis>child</emphasis> plans.
-		</para>
-		<para>
-			Plans share several benefits with PARs:
-			<itemizedlist>
-				<listitem>A plan has a (symbolic) name and a version.</listitem>
-				<listitem>A plan may be scoped, although this is optional.
-					See <link linkend="developing-applications-plans-scoping">Plans and Scoping</link> for more on scoping.
-				</listitem>
-				<listitem>A plan is visible to management interfaces.</listitem>
-				<listitem>A plan can be undeployed and redeployed as a unit.</listitem>
-				<listitem>A plan may be atomic, although this is optional.</listitem>
-			</itemizedlist>
-		</para>
-		<para>
-			Plans have the following additional benefits compared to PARs:
-			<itemizedlist>
-				<listitem>
-					@project.name@ deploys the artifacts in the plan in the order in which they are listed in the XML file, which gives you
-					complete control over deployment order.
-					With a PAR, the order of deployment of the included artifacts is not guaranteed.
-				</listitem>
-				<listitem>Since plans refer to their artifacts, it is easier to share content between plans as well as update individual
-					parts of a plan without having to physically repackage (re-JAR) it.
-				</listitem>
-				<listitem>
-					Plans may contain child plans, but PARs cannot contain other PARs.
-					</listitem>
-				<listitem>
-					You can make certain plans deploy faster by disabling the provisioning of bundles to satisfy missing dependencies,
-					but you cannot disable provisioning for PARs.
-				</listitem> 
-				<listitem>
-					You can specify whether a plan is scoped or unscoped and atomic or non-atomic; PARs are always scoped and atomic.
-				</listitem>
-		</itemizedlist>
-		</para>
-
-		<para>
-			The artifacts of a plan are usually stored in @project.name@'s repository.  This means, for example, that if you drop one of the plan&rsquo;s artifacts in the <code>pickup</code> directory rather than adding it to the repository, the plan will fail to deploy because it will not find the artifact.
-		</para>
-		<para>
-			The artifacts of a plan may also be stored outside @project.name@'s repository, somewhere else on the file system and referenced from the plan using URIs.
-			Such artifacts must be available on the file system when the plan is deployed and when @project.name@ restarts while the plan is deployed.
-			If you delete any of these artifacts, deployment of the plan may fail, either when it is initially deployed or when @project.name@ restarts.
-		</para>
-
-		<section id="developing-applications-plans-create">
-			<title>Creating the Plan XML File</title>
-			<para>
-				Plans are XML files that have a <code>.plan</code> file extension, such as <code>multi-artifact.plan</code>.  
-				The structure of the XML file is simple: 
-				the root element is <code>&lt;plan&gt;</code> with attributes specifying the name of the plan, the version, atomicity, and scoping. 
-				Then, for each artifact that makes up your application, 
-				you add a <code>&lt;artifact&gt;</code> element, using its attributes to specify the type of artifact and its name and version.  
-				The following is a simple example of a plan&rsquo;s XML file:
-			</para>
-			<programlisting language="xml"><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
-<plan name="multi-artifact.plan" version="1.0.0" scoped="true" atomic="true"
-        xmlns="http://www.eclipse.org/virgo/schema/plan"
-		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-		xsi:schemaLocation="
-		        http://www.eclipse.org/virgo/schema/plan
-		        http://www.eclipse.org/virgo/schema/plan/eclipse-virgo-plan.xsd">
-
-    <artifact type="configuration" name="app-properties" version="1.0.0"/>
-    <artifact type="bundle" name="com.springsource.exciting.app" version="[2.0.0, 3.1.0)"/>
-
-</plan>]]></programlisting>
-			<para>
-				In the preceding example, the name of the plan is <code>multi-artifact.plan</code> and its version is <code>1.0.0</code>.  
-				The plan is both scoped and atomic. The plan contains two artifacts: one is a bundle called <code>com.springsource.exciting.app</code> and the other is a configuration file called <code>app-properties</code>.  
-			</para>
-			<para>
-				The following table describes the attributes of the <code>&lt;plan&gt;</code> element.
-			</para>
-
-			<table id="developing-applications-plans-create-plan-attributes" colsep="1" frame="all" rowsep="1">
-				<title>Attributes of the &lt;plan&gt; Element</title>
-				<tgroup cols="3">
-					<colspec colwidth="1*" />
-					<colspec colwidth="3*" />
-					<colspec colwidth="1*" />
-					<thead>
-						<row>
-							<entry>Attribute</entry>
-							<entry>Description</entry>
-							<entry>Required?</entry>
-						</row>
-					</thead>
-					<tbody>
-						<row>
-							<entry><literal>name</literal></entry>
-							<entry>Specifies the name of this plan.  @project.name@ uses the name as one component of the unique identifier of this plan. </entry>
-							<entry>Yes.</entry>
-						</row>
-						<row>
-							<entry><literal>version</literal></entry>
-							<entry>Specifies the version of this plan.  You must use OSGi version specification syntax, such as <code>2.1.0</code>. @project.name@ uses the version as one component of the unique identifier of this plan. </entry>
-							<entry>Yes.</entry>
-						</row>
-						<row>
-							<entry><literal>scoped</literal></entry>
-							<entry>Specifies whether @project.name@ should install the artifacts into plan-specific scope so that only the application described by this plan has access to the artifacts. If you disable scoping, then @project.name@ installs the artifacts into the global scope, which means they are then available for access by all other deployed artifacts.  Set the attribute to <code>true</code> to enable scoping or <code>false</code> to disable it.</entry>
-							<entry>Yes.</entry>
-						</row>
-						<row>
-							<entry><literal>atomic</literal></entry>
-							<entry>Specifies whether you want to tie together the lifecycle of the artifacts in this plan.
-								Making a plan atomic means that if you start, stop, or uninstall a single artifact in the plan, @project.name@ escalates the operation to
-								the whole plan. Also @project.name@ prevents artifacts of an atomic plan from being in inconsistent states.
-								For example, if one artifact should fail to start, then @project.name@ stops all artifacts in the plan.
-								Set this attribute to <code>true</code> to enable atomicity or <code>false</code> to disable it. </entry>
-							<entry>Yes.</entry>
-						</row>
-						<row>
-							<entry><literal>provisioning</literal></entry>
-							<entry>
-								<para>
-									Specifies whether @project.name@ installs bundles from the repository to attempt to satisfy any missing dependencies in the plan.
-									Missing dependencies prevent one or more bundles in the plan from resolving.
-									For example, a bundle which imports a package cannot resolve if the package is missing, that is, not exported by another bundle.
-								</para>
-								<para>
-									A value of <code>auto</code> instructs @project.name@ to install bundles from the repository
-									to attempt to satisfy any missing dependencies in the plan. This is known as <emphasis>auto-provisioning</emphasis>.
-								</para>
-								<para>
-									A value of <code>disabled</code> prevents @project.name@ from installing bundles from the repository to attempt to
-									satisfy any missing	dependencies in the plan.
-									This value can make the plan deploy faster, although if there are missing dependencies, deployment will fail.
-								</para>
-								<para>
-									A value of <code>inherit</code>, which is the default if no value is specified, inherits the parent plan's provisioning behaviour.
-									If the plan does not have a parent, it inherits @project.name@'s auto-provisioning behaviour. 
-								</para>
-							</entry>
-							<entry>No. If not specified, defaults to <code>inherit</code>.</entry>
-						</row>
-					</tbody>
-				</tgroup>
-			</table>
-			<para>
-				The following table describes the attributes of the <code>&lt;artifact&gt;</code> element. Note that you must either specify <literal>type</literal>, <literal>name</literal>, and (optionally) <literal>version</literal>,
-				in which case @project.name@'s repository is searched for the artifact, or <literal>uri</literal> in which case the artifact is obtained directly from the file system.
-				If you specify <literal>uri</literal>, you must not specify <literal>type</literal>, <literal>name</literal>, or <literal>version</literal>.
-			</para>
-			<table id="developing-applications-plans-create-artifact-attributes" colsep="1" frame="all" rowsep="1">
-				<title>Attributes of the &lt;artifact&gt; Element</title>
-				<tgroup cols="3">
-					<colspec colwidth="1*" />
-					<colspec colwidth="3*" />
-					<colspec colwidth="1*" />
-					<thead>
-						<row>
-							<entry>Attribute</entry>
-							<entry>Description</entry>
-							<entry>Required?</entry>
-						</row>
-					</thead>
-					<tbody>
-						<row>
-							<entry><literal>type</literal></entry>
-							<entry>Specifies the type of the artifact.  Valid values are: 
-		<itemizedlist>
-		  <listitem><code>bundle</code>: Specifies an OSGi bundle.  Use this artifact type for WAR files and Web application bundles. </listitem>
-		  <listitem><code>configuration</code>: Specifies that the artifact is a configuration file.  Configuration files contain name/value pairs that set initial values for configuration properties of a bundle.  </listitem>
-		  <listitem><code>plan</code>: Specifies that the artifact is a plan. </listitem>
-		  <listitem><code>par</code>: Specifies that the artifact is a PAR. </listitem>
-		</itemizedlist>
-		</entry>
-
-							<entry>Yes, unless <literal>uri</literal> is specified in which case <literal>type</literal> must not be specified and is automatically determined from the artifact.</entry>
-						</row>
-						<row>
-							<entry><literal>name</literal></entry>
-							<entry>Specifies the name of the artifact. 
-								<para>See <link linkend="artifact-names">Artifact Names</link> for guidelines for determining the name of an artifact.</para>
-							</entry>
-							<entry>Yes, unless <literal>uri</literal> is specified in which case <literal>name</literal> must not be specified and is automatically determined from the artifact.</entry>
-						</row>
-						<row>
-							<entry><literal>version</literal></entry>
-							<entry>Specifies the range of versions of this artifact that @project.name@ should look up in its repositories and then install and deploy.
-								You must use OSGi version specification syntax, such as <code>[1.0.0, 2.0.0)</code>.
-								Note that a single version number represents the range from that version number upwards.
-								For example, <code>1.3</code> represents the range of versions greater than or equal to <code>1.3</code>.
-							</entry>
-							<entry>No. If <literal>uri</literal> is specified, <literal>version</literal> must not be specified.
-							If neither <literal>uri</literal> nor <literal>version</literal> are specified, <literal>version</literal> defaults to <code>0</code>, which in OSGi means 0 to infinity, or any version.</entry>
-						</row>
-						<row>
-							<entry><literal>uri</literal></entry>
-							<entry>
-								Specifies an optional, absolute URI string beginning with <code>file:</code> that refers to the artifact on the file system.
-								Such an artifact must be available on the file system when the plan is deployed and when @project.name@ restarts while the plan is deployed.
-								If you delete such an artifact, deployment of the plan may fail, either when it is initially deployed or when @project.name@ restarts.
-								This attribute is normally omitted so that the artifact is searched for in @project.name@'s repository.
-							</entry>
-							<entry>No. If not specified, @project.name@ searches for the artifact in its repository.</entry>
-						</row>
-					</tbody>
-				</tgroup>
-			</table>
-		</section>
-
-		<section id="names-of-artifacts">
-		  	<title>Artifact Names</title>
-
-			<para>When you create a plan, you use the <code>name</code> attribute of the <code>&lt;artifact&gt;</code> element to specify the name of all the plan&rsquo;s dependencies.  This section describes how to determine the name of an artifact, which is not always obvious.</para>
-			<para>Use the following guidelines to determine the name of an artifact:</para>
-		<itemizedlist>
-			<listitem><para><emphasis role="bold">Bundle</emphasis>: In this context, a <emphasis>bundle</emphasis> refers to a standard OSGi bundle as well as a Web Application Bundle and a WAR file.  The name of a bundle is the value of the <code>Bundle-SymbolicName</code> header in the <code>META-INF/MANIFEST.MF</code> file of the <code>*.jar</code>. 
-			If a WAR file has <code>Bundle-SymbolicName</code> header then it will be treated as a Web Application Bundle. The following <code>MANIFEST.MF</code> snippet shows a bundle with name <code>com.springsource.exciting.app</code>:</para>
-			<screen>Bundle-SymbolicName: org.eclispe.virgo.exciting.app</screen>
-			<para>If the bundle does not contain a <code>META-INF/MANIFEST.MF</code> file or the <literal>MANIFEST.MF</literal> doesn't contain a <code>Bundle-SymbolicName</code> header, then the name of the bundle is its filename minus the <code>.jar</code> or <code>.war</code> extension.</para>
- </listitem>
-			<listitem><para><emphasis role="bold">Configuration File</emphasis>: The name of a configuration or PID (Persistent Identity) is its filename minus the <code>.properties</code> extension. The PID can also be specified within the properties file with the 
-					<emphasis>service.pid</emphasis> property.
-					</para>
-			</listitem>
-		  <listitem><para><emphasis role="bold">Plan</emphasis>: The name of a plan is the value of the required <code>name</code> attribute of the <code>&lt;plan&gt;</code> element in the plan&rsquo;s XML file.  In the following XML snippet, the plan name is <code>multi-artifact.plan</code>:</para> 
-		<screen>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
-&lt;plan name="<emphasis role="bold">multi-artifact.plan</emphasis>" version="1.0.0" scoped="true" atomic="true"
-        xmlns="http://www.eclipse.org/virgo/schema/plan"
-...</screen>
-		  </listitem>
-		  <listitem><para><emphasis role="bold">PAR</emphasis>: The name of a PAR is the value of the <code>Application-SymbolicName</code> header in the <code>META-INF/MANIFEST.MF</code> file of the <code>*.par</code> file.   The following <code>MANIFEST.MF</code> snippet shows a PAR with name <code>com.springsource.my.par</code>:</para>
-		  <screen>Application-SymbolicName: org.eclipse.virgo.my.par</screen>
-		  <para>If the PAR does not contain a <code>META-INF/MANIFEST.MF</code> file, then the name of the PAR is its filename minus the <code>.par</code> extension.</para>
-		  </listitem>
-		</itemizedlist>
-		</section>
-		
-		<section id="passing-properties">
-			<title>Supplying Properties to Artifacts</title>
-			<para>
-				It is possible to pass properties to an artifact specified in a plan. An example of this can be seen in the Admin Console plan where the context path to be used in the Admin console is passed from the plan.
-			</para>
-			<programlisting>
-    &lt;artifact type="bundle" name="org.eclipse.virgo.apps.admin.web" version="[3.0, 4.0)"&gt;
-        &lt;property name="header:Web-ContextPath" value="/admin" /&gt;
-    &lt;/artifact&gt;
-			</programlisting>
-			<para>
-				The only supported property is <literal>header</literal> which will overwrite the given manifest header with the supplied value. This should be used with care!
-			</para>
-		</section>
-
-		<section id="developing-applications-plans-use">
-			<title>Using the Plan</title>
-			<para>
-				Because a plan is a list of artifacts, rather than a physical file that contains the artifacts, there are a few additional steps you must perform before you deploy it to @project.name@.  
-			</para>
-			<orderedlist>
-				<listitem><para>Copy the artifacts that make up the plan to the <code>usr</code> repository, which by default is the <code>$SERVER_HOME/repository/usr</code> directory, where <code>$SERVER_HOME</code> refers to the top-level installation directory of @project.name@.  Note that you might have configured the server differently; in which case, copy the artifacts to your custom repository directory.</para></listitem>
-				<listitem><para>Restart @project.name@ if the repository used is not a <emphasis>watched</emphasis> repository.</para></listitem>
-				<listitem><para>After the server has started, either use the Admin Console to deploy the plan, or manually deploy it by copying the plan&rsquo;s XML file into the <code>$SERVER_HOME/pickup</code> directory. </para>
-				<para>This results in @project.name@ deploying the plan.</para></listitem>
-				<listitem><para>To undeploy the plan, use the Admin Console, or simply delete it from the <code>$SERVER_HOME/pickup</code> directory.</para></listitem>
-			</orderedlist>
-		</section>
-
-		<section id="developing-applications-plans-scoping">
-		  <title>Plans and Scoping</title>
-		  <para>As described in previous sections, you can specify that a plan be <emphasis>scoped</emphasis>.  This means that @project.name@ installs the artifacts that make up the plan into a plan-specific scope so that only the application described by the plan has access to the artifacts. If you disable scoping, then @project.name@ installs the artifacts into the global scope, which means they are available for access by all other deployed artifacts. This section describes scoping in a bit more detail.  It also describes how you can change the default behavior of scoping, with respect to services, so that a service that is in a scope can be made globally available. </para>
-
-		   <para>If a bundle in a given scope imports a package and a bundle in the same scope exports the package, then the import may only be satisfied by the bundle in the scope, and not by any bundles outside the scope, including the global scope.   Similarly, package exports from bundles in a scope are not visible to bundles in the global scope.</para>
-
-		   <para>If a bundle in a scope uses Spring DM (or the blueprint service) to obtain a service reference and a bundle in the same scope uses Spring DM (or the blueprint service) to publish a matching service, then the service reference may only bind to the service published in the scope (and not to any services outside the scope).  Services published by bundles in a scope are not visible to bundles in the global scope. </para>
-
-		    <para>However, sometimes it is useful to make a service in a scope globally available to artifacts outside the scope.  To do this, publish the service with the <literal>org.eclipse.virgo.service.scope</literal> service property set to <literal>global</literal>.  Use the <literal>&lt;service-properties&gt;</literal> child element of <literal>&lt;service&gt;</literal>, as shown in the following example: </para>
-
-		     <programlisting>&lt;service id="publishIntoGlobal" interface="java.lang.CharSequence"&gt;
-  <emphasis role="bold">&lt;service-properties&gt;
-    &lt;beans:entry key="org.eclipse.virgo.service.scope" value="global" /&gt;
-  &lt;/service-properties&gt;</emphasis>
-  &lt;beans:bean class="java.lang.String"&gt;
-    &lt;beans:constructor-arg value="foo"/&gt;
-  &lt;/beans:bean&gt;
-&lt;/service&gt;</programlisting>
-
-			<para>
-				A scope forms a boundary for automatic propagation of load time weaving and bundle refresh.
-				Additionally, a synthetic context bundle is generated for each scope. This bundle imports all the packages exported by other bundles in the scope.
-				The class loader of the synthetic context bundle is used for thread context class loading. So,
-				for example, hibernate will be able to load classes of any of the exported
-				packages of the bundles in a scope using the thread context class loader.
-			</para>
-			<para>
-				To ensure predictable class loading behaviour and avoid other issues associated with <emphasis>split packages</emphasis> (packages whose classes
-				are split across more than one bundle), the synthetic context bundle has a restriction:
-				<emphasis role="bold">no package may be exported by more than one
-				bundle in the scope</emphasis>.
-				If this restriction is broken, the scoped application will fail to deploy.
-				This restriction can cause problems for <link linkend="scoping-and-substitutable-exports">substitutable exports</link>.
-			</para>
-			<section id="developing-applications-plans-scoping-webapps">
-		  		<title>Web Applications and Scoping</title>
-				<para>
-					A Web Application Bundle (WAB) or WAR has its bundle class loader set as the TCCL, even when the WAB or WAR belongs to
-					a PAR or scoped plan.
-					To enable the TCCL to load classes of other bundles in the same scope as a WAB or WAR, use a WAB which imports the necessary packages.
-				</para>
-				<para>
-					Also a WAB or WAR has its own per-application trace, independent of the per-application trace of any PAR or scoped plan to which the
-					WAB or WAR belongs.
-				</para>
-			</section>
-		</section>
-
-	</section><!-- end plans -->
-
-<!-- ======================================================================= -->
-<!-- ======================================================================= -->
-
-	<section id="developing-applications-configuration-artifacts">
-		<title>Creating and Using Configuration Artifacts</title>
-	<para>
-		Applications typically include some sort of configuration data
-		that might change depending on the environment in which the
-		application is deployed. For example, if an application connects to a
-		database server using JDBC, the configuration data would include the
-		JDBC URL of the database server, the JDBC drvier, and the username and
-		password that the application uses to connect to the database server.
-		This information often changes as the application is deployed to
-		different computers or the application moves from the testing phase to
-		the production phase.
-	</para>
-
-	<para>
-		@project.name@ provides a feature called
-		<emphasis>configuration artifacts</emphasis>
-		that makes it very easy for you to manage this configuration data. A
-		configuration artifact is simply a properties file that is made
-		available at runtime using the OSGi
-		<literal>ConfigurationAdmin</literal>
-		service. When you create this properties file, you set the values of
-		the properties for the specific environment in which you are going to
-		deploy your application, and then update the metadata of your Spring
-		application to use the properties file. You then deploy the
-		application and properties file together, typically as a
-		<link linkend="developing-applications-plans">plan</link>
-		. @project.name@ automatically creates a configuration artifact from
-		the properties file, and you can manage the lifecycle of this
-		configuration artifact in the same way you manage the lifecycle of
-		PARs, bundles, and plans, using the Admin
-		Console. Additionally, @project.name@ subscribes your
-		application for notification of any refresh of the configuration
-		artifact and the application can then adapt accordingly, which means
-		you can easily
-		<emphasis>change</emphasis>
-		the configuration of your application without redeploying it.
-	</para>
-	<para>In sum, configuration artifacts, especially when combined with
-		plans, provide an excellent mechanism for managing external
-		configuration data for your applications.</para>
-
-	<para>The following sections describe the format of the configuration
-		artifact, how to update the Spring application context file of your
-		application so that it knows about the configuration artifact, and
-		finally how to include it in a plan alongside your application.  </para>
-
-	<para>
-		As an example to illustrate the configuration artifact feature, assume
-		that you have a Spring bean called
-		<literal>PropertiesController</literal>
-		whose constructor requires that four property values be passed to it,
-		as shown in the following snippet of Java code:
-	</para>
-	  <programlisting>@Controller
-public class PropertiesController {
-
-    private final String driverClassName;
-    private final String url;
-    private final String username;
-    private final String password;
-
-    public PropertiesController(String driverClassName, String url, String username, String password) {
-        this.driverClassName = driverClassName;
-        this.url = url;
-        this.username = username;
-        this.password = password;
-}</programlisting>
-
-	  <para>In the preceding example, the <literal>PropertiesController</literal> constructor requires four property values: <literal>driverClassName</literal>, <literal>url</literal>, <literal>username</literal>, and <literal>password</literal>.  Note that the example shows just one way that a class might require property values; your application may code it another way.</para>
-
-	  <para>Additionally, assume that the following snippet of the associated Spring application context XML file shows how the <literal>PropertiesController</literal> bean is configured:</para>
-
-	   <programlisting>&lt;bean class="com.springsource.configuration.properties.PropertiesController"&gt;
-                &lt;constructor-arg value="${driverClassName}"/&gt;
-                &lt;constructor-arg value="${url}"/&gt;
-                &lt;constructor-arg value="${username}"/&gt;
-                &lt;constructor-arg value="${password}"/&gt;
-&lt;/bean&gt;</programlisting>
-
-	 <para>The rest of this section describes how the bean can get these property values using a configuration artifact.</para>
-
-	<section id="developing-applications-configuration-artifacts-propfile">
-	  <title>Creating the Properties File</title>
-
-	  <para>To create a properties file that in turn will become a configuration artifact when deployed to @project.name@ from which a Spring bean, such as the <literal>PropertiesController</literal> bean, will get the actual property values, follow these guidelines:</para>
-	  <itemizedlist>
-		<listitem><para>Create a text file in which each property is listed as a name/value pair, one pair per line.  Precede comments with a <literal>#</literal>.  For example:</para>
-		  <screen># Properties for the com.springsource.configuration.properties sample
-
-driverClassName   = org.w3.Driver
-url               = http://www.springsource.com
-username          = joe
-password          = secret</screen>
-		  <para>The example shows four properties whose name correspond to the constructor arguments of the <literal>PropertiesController</literal> Spring bean.</para></listitem>
-		<listitem><para>Name the file anything you want, as long as it has a <literal>.properties</literal> extension, such as <literal>app-properties.properties</literal>.</para></listitem>
-	  </itemizedlist>
-	</section>
-
-	<section id="developing-applications-configuration-artifacts-app">
-	  <title>Updating Your Application</title>
-	  <para>To update your application so that it "knows" about the configuration artifact, you update the application's Spring application context XML file, typically located in the <literal>WEB-INF</literal> or <literal>META-INF/spring</literal> directories (read <link linkend="using-spring">Using Spring and Spring DM</link>
-	to understand which directory to use).</para>
-
-	   <para>You use the <literal>&lt;context:property-placeholder&gt;</literal> element to specify that you want to use the @project.name@ mechanism for substituting values into bean properties.  The <literal>properties-ref</literal> attribute of this element points to a <literal>&lt;osgi-compendium:cm-properties&gt;</literal> element which you use to specify the configuration artifact that contains the property values.  You set the value of the <literal>persistent-id</literal> attribute of this element equal to the name of the configuration artifact, which is the name of the properties file <emphasis>minus</emphasis> the <literal>.properties</literal> extension. </para>
-	    <para>The following sample Spring application context XMl file shows everything wired together; only relevant parts of the file are shown:</para>
-
-	    <programlisting>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
-&lt;beans xmlns="http://www.springframework.org/schema/beans"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xmlns:context="http://www.springframework.org/schema/context"
-  xmlns:osgi-compendium="http://www.springframework.org/schema/osgi-compendium"
-  xsi:schemaLocation="http://www.springframework.org/schema/osgi 
-    http://www.springframework.org/schema/osgi/spring-osgi-1.2.xsd
-    http://www.springframework.org/schema/beans 
-    http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
-    http://www.springframework.org/schema/context 
-    http://www.springframework.org/schema/context/spring-context-2.5.xsd
-    http://www.springframework.org/schema/osgi-compendium 
-    http://www.springframework.org/schema/osgi-compendium/spring-osgi-compendium-1.2.xsd"&gt;
-
-...
-
-        &lt;bean class="com.springsource.configuration.properties.PropertiesController"&gt;
-                &lt;constructor-arg value="${driverClassName}"/&gt;
-                &lt;constructor-arg value="${url}"/&gt;
-                &lt;constructor-arg value="${username}"/&gt;
-                &lt;constructor-arg value="${password}"/&gt;
-        &lt;/bean&gt;
-
-        &lt;context:property-placeholder properties-ref="configAdminProperties"/&gt;
-
-        &lt;osgi-compendium:cm-properties id="configAdminProperties" persistent-id="app-properties"/&gt;
-
-...
-
-&lt;/beans&gt; </programlisting>
-
-	</section>
-
-	<para>The preceding example shows how the id <literal>configAdminProperites</literal> wires the <literal>&lt;context:property-placeholder&gt;</literal> and <literal>&lt;osgi-compendium:cm-properties&gt;</literal> elements together.  Based on the value of the <literal>persistent-id</literal> attribute, you must also deploy a properties file called <literal>app-properties.properties</literal> which @project.name@ installs as a configuration artifact.</para>
-
-	<section id="developing-applications-configuration-artifacts-plan">
-	  <title>Adding the Configuration Artifact to a Plan</title>
-	  <para>Although you can always deploy your application and associated configuration artifact using the <literal>pickup</literal> directory, we recommends that you group the two together in a plan, add the two artifacts to the repository, and then deploy the plan using the <literal>pickup</literal> directory.  The following sample plan includes the two artifacts:</para>
-	  <programlisting>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
-&lt;plan name="multi-artifact.plan" version="1.0.0" 
-         scoped="false" atomic="false"
-        xmlns="http://www.eclipse.org/virgo/schema/plan"
-		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-		xsi:schemaLocation="
-		        http://www.eclipse.org/virgo/schema/plan
-		        http://www.eclipse.org/virgo/schema/plan/eclipse-virgo-plan.xsd"&gt;
-
-    &lt;artifact type="configuration" name="app-properties" version="0"/&gt;
-    &lt;artifact type="bundle" name="org.eclipse.virgo.configuration.properties" version="1.0.0"/&gt;
-&lt;/plan&gt;</programlisting> 
-
-	  <para>For additional information about plans, see <link linkend="developing-applications-plans">Creating Plans</link>.</para>
-
-	</section>
-
-	</section> <!-- end of configuration artifacts -->
-
-<!-- ======================================================================= -->
-<!-- ======================================================================= -->
-
-	<section id="using-spring">
-		<title>Using Spring, Spring DM, and Blueprint</title>
-		<para>
-			@project.name@ supports the use of Spring framework and Spring DM (as supported by Gemini Blueprint) by application bundles.
-		</para>
-		<para>
-			Spring (and Spring DM) application context XML files should generally be placed in a bundle's <literal>META-INF/spring</literal> directory, but
-			for a web application, these files must be placed in the <literal>WEB-INF</literal> directory.
-		</para>
-		<tip>
-			<title>
-				A common mistake
-			</title>
-			<para>
-				Placing a web application's Spring application context XML files in the <literal>META-INF/spring</literal> directory produces
-				unpredictable results since	Spring DM will attempt to build an application context independently of, and asynchronously from,
-				the web application.
-			</para>
-		</tip>
-		<para>
-			To use Spring DM from a web application, the <literal>contextClass</literal> servlet parameter and the servlet context listener
-			should be configured (in <literal>WEB-INF/web.xml</literal>) like this:
-<programlisting language="xml"><![CDATA[
-	<context-param>
-		<param-name>contextClass</param-name>
-		<param-value>org.eclipse.virgo.web.dm.ServerOsgiBundleXmlWebApplicationContext</param-value>
-	</context-param>
-
-	<listener>
-		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
-	</listener>
-]]></programlisting>
-		</para>
-		<para>
-			@project.name@ has Gemini Blueprint built-in and thereby supports the OSGi Blueprint standard in addition to Spring DM.
-		</para>
-		<para>
-			For detailed information on Spring Framework, Spring DM, and Blueprint, please see <xref linkend="prerequisites-references"/>.
-		</para>
-	</section> <!-- end of using Spring and Spring DM -->
-	
-<!-- ======================================================================= -->
-<!-- ======================================================================= -->
-
-	<section id="developing-applications-programmatic-access">
-		<title>Programmatic Access to the Servlet Context</title>
-		<para>
-			This section describes how to programmatically access the servlet context to obtain the WebApplicationContext or the BundleContext. 
-		</para>
-		<section id="developing-applications-programmatic-access-web">
-			<title>Programmatic Access to Web Features</title>
-
-			<section id="developing-applications-programmatic-access-web-application-context">
-				<title>Programmatic Access to the WebApplicationContext</title>
-				<para>
-					The @tomcat.product.name@ automatically creates a <literal>WebApplicationContext</literal>
-					for Web Application Bundles and WAR files. When used in conjunction with an
-					an auto-configured Spring MVC <literal>DispatcherServlet</literal>,
-					there is generally no need to access the <literal>WebApplicationContext</literal>
-					programmatically, since all components of the web application are configured
-					within the scope of the <literal>WebApplicationContext</literal>
-					itself. However, if you wish to access the <literal>WebApplicationContext</literal>
-					you can do so via the web application&rsquo;s <literal>ServletContext</literal>.
-					@project.name@ stores the bundle&rsquo;s
-					<literal>WebApplicationContext</literal> in the ServletContext under
-					the attribute name "<literal>BSN-ApplicationContext</literal>", where
-					<literal>BSN</literal> is the <literal>Bundle-SymbolicName</literal>
-					of your WAR or Web Application Bundle.
-				</para>
-				<para>
-					Alternatively, since @project.name@ also stores the
-					<literal>WebApplicationContext</literal> under the attribute name
-					with the value of the <literal>WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE</literal>
-					constant, you may choose to use Spring MVC&rsquo;s WebApplicationContextUtils&rsquo;
-					<literal>getWebApplicationContext(servletContext)</literal>
-					or
-					<literal>getRequiredWebApplicationContext(servletContext)</literal>
-					methods to access the <literal>WebApplicationContext</literal> without providing
-					an explicit attribute name. 
-				</para>
-			</section>
-
-			<section id="developing-applications-programmatic-access-web-bundle-context">
-				<title>Programmatic Access to the BundleContext</title>
-				<para>
-					As required by the OSGi Web Applications specification, you can access the
-					<literal>BundleContext</literal> of your WAR or Web Application Bundle via the web application&rsquo;s
-					<literal>ServletContext</literal>. The bundle context is stored in the
-					<literal>ServletContext</literal> under the attribute name <literal>osgi-bundlecontext</literal>.
-				</para>
-			</section>
-
-		</section>
-	</section>
-
-
-	<section id="developing-applications-automatic-imports-web">
-		<title>Web Application Manifest Processing</title>
-		<para>
-			@tomcat.product.name@ generates automatic package imports (i.e., via the
-			<literal>Import-Package</literal> manifest header) for certain web applications.
-			This section lists which packages are automatically generated.
-		</para>
-		<para>
-			@tomcat.product.name.short@ supports Web Application Bundles (WABs) as defined by the OSGi Web Applications Specification and WAR files.
-			A WAR will typically not contain any OSGi defined manifest headers.
-			A WAB is distinguished from a WAR by the presence of one or more of the following OSGi defined headers:
-				<itemizedlist>
-					<listitem>
-						<literal>Bundle-SymbolicName</literal>
-					</listitem>
-					<listitem>
-						<literal>Bundle-Version</literal>
-					</listitem>
-					<listitem>	
-						<literal>Bundle-ManifestVersion</literal>
-					</listitem>
-					<listitem>	
-						<literal>Import-Package</literal>
-					</listitem>
-					<listitem>
-						<literal>Web-ContextPath</literal>
-					</listitem>
-				</itemizedlist>
-		</para>
-		<para>
-			As required by the OSGi Web Applications specification, the following defaults are applied to a WAR:
-			<itemizedlist>
-				<listitem>
-					<literal>Bundle-ManifestVersion</literal> is set to <literal>2</literal>
-				</listitem>
-				<listitem>
-					<literal>Bundle-SymbolicName</literal> is generated from the path from which the bundle was installed
-				</listitem>
-				<listitem>
-					<literal>Bundle-ClassPath</literal> is set to <literal>WEB-INF/classes</literal> followed by the JARs in
-					<literal>WEB-INF/lib</literal> in an unspecified order, followed by any transitive dependencies declared
-					by the JARs in <literal>WEB-INF/lib</literal>
-				</listitem>
-				<listitem>
-					<literal>Import-Package</literal> is extended in an implementation defined way, as described below
-				</listitem>
-			</itemizedlist>
-		</para>
-		<para>
-			The following packages are automatically imported into WARs:		
-		<itemizedlist>
-			<listitem>
-				<literal>javax.servlet;version="2.5"</literal>
-			</listitem>
-			<listitem>
-				<literal>javax.servlet.http;version="2.5"</literal>
-			</listitem>
-			<listitem>
-				<literal>javax.servlet.jsp;version="2.1"</literal>
-			</listitem>
-			<listitem>	
-				<literal>javax.servlet.jsp.el;version="2.1"</literal>
-			</listitem>
-			<listitem>	
-				<literal>javax.servlet.jsp.tagext;version="2.1"</literal>
-			</listitem>	
-			<listitem>	
-				<literal>javax.el;version="1.0"</literal>
-			</listitem>	
-		</itemizedlist>
-		</para>
-
-		<para>
-			In addition to the above-described imports, @tomcat.product.name.short@ will also
-			generate automatic imports for all of the packages that are exported by the system
-			bundle, unless an import for the package already exists in the WAR&rsquo;s manifest,
-			or the WAR contains the package, i.e. within <literal>WEB-INF/classes</literal>,
-			or in a jar file in <literal>WEB-INF/lib</literal>. When an import is generated, it
-			is versioned such that it exactly matches the version or versions of the package that
-			are exported from the system bundle. For example, a package that&rsquo;s exported only at
-			version <literal>1.0.0</literal> will generate an import with a version of
-			<literal>[1.0.0,1.0.0]</literal>, and a package that&rsquo;s exported at version
-			<literal>1.0.0</literal> and version <literal>2.0.0</literal> will generate an import 
-			with a version of <literal>[1.0.0,2.0.0]</literal>.
-		</para>
-		
-		<para>
-			Web Application Bundles are not subject to the above manifest processing.
-			This is a change of behaviour compared to Virgo Web Server 2.1.x.
-			See (see <link linkend="known-issues-web-bundle-default-headers">Default Web 
-			Application Bundle Headers</link>) if you need the old behaviour until you
-			have changed your WABs to match the new behaviour.
-		</para>
-		
-		<para>
-			@tomcat.product.name.short@ supports ROOT.war as a default web application. The <literal>Web-ContextPath</literal>
-			of the deployed ROOT.war is set to the default web context path - <literal>/</literal>. 
-		</para>
-		
-		<tip>
-			<title>System Bundle Package Exports</title>
-			<para>
-				For further details on which packages are exported by the
-				OSGi system bundle, consult the <filename>java6-server.profile</filename>
-				file located in the <literal>SERVER_HOME/lib</literal> directory.
-			</para>
-		</tip>
-
-	</section>
-
-	<section id="developing-applications-dependencies">
-		<title>Working with Dependencies</title>
-		<para>Complex enterprise frameworks such a Spring and Hibernate are typically divided into many, many different
-			packages. Traditionally, if an OSGi bundle wished to make extensive use of such a framework its manifest would
-			have to import a huge number of different packages. This can be an error-prone and tedious process. Furthermore,
-			application developers are used to thinking in terms of their application using a framework, such as Spring, as a
-			whole, rather than a long list of all the different packages that comprise the framework.
-		</para>
-		<para>The following figure provides a simple illustration of the complexity of only using <code>Import-Package</code>:
-		</para>
-		<para>
-			<imagedata fileref="images/import-package.png"/>
-		</para>			
-		<para>@project.name@ reduces the need for long lists of imported packages by introducing two new manifest
-			headers; <code>Import-Bundle</code> and <code>Import-Library</code>. The following figure provides an
-			illustration of the simplification that these new headers offer:
-	    </para>
-		<para>
-			<imagedata fileref="images/import-bundle_import-library.png"/>			
-		</para>
-		<para>
-			As you can see, use of <code>Import-Bundle</code> and <code>Import-Library</code> can lead to a dramatic reduction
-			in the number of imports that you need to include in an application bundle&rsquo;s manifest. Furthermore, <code>Import-Bundle</code>
-			and <code>Import-Library</code> are simply aliases for <code>Import-Package</code>; at deployment time <code>Import-Bundle</code>
-			and <code>Import-Library</code> header entries are automatically expanded into numerous <code>Import-Package</code> entries. This
-			means that you retain the exact same semantics of using <code>Import-Package</code>, without having to go through the labourious
-			process of doing so.
-		</para>
-		<section id="developing-applications-importing-libraries">
-		    <title>Importing Libraries</title>	
-			<para>A bundle in an application can declare a dependency on a library by using the
-				@umbrella.product.name@ specific <code>Import-Library</code> header. This header specifies a
-				comma-separated list of library symbolic names and version ranges that determine which libraries
-				are imported. By default a dependency on a library is mandatory but this can be
-				controlled through use of the resolution directive in exactly the same way as
-				it can with <code>Import-Package</code>.
-			</para>
-			<programlisting>
-<emphasis role="bold">Import-Library</emphasis>: org.springframework.spring;version="[2.5.4, 3.0)",
- org.aspectj;version="[1.6.0,1.6.0]";resolution:="optional"
-            </programlisting>
-            <para>
-                This example <code>Import-Library</code> header declares a mandatory dependency on the Spring
-                library at a version from 2.5.4 inclusive to 3.0 exclusive. It also declares an
-                optional dependency on the AspectJ library at exactly 1.6.0.
-            </para>
-       </section>
-       <section id="developing-applications-importing-bundles">
-	       <title>Importing Bundles</title>
-	       <para>A bundle in an application can declare a dependency on a bundle by using the
-		   @umbrella.product.name@ specific <code>Import-Bundle</code> header. The header specifies a comma-separated 
-		   list of bundle symbolic names, version ranges, and scope declarmations that determine which bundles are imported and the scope of their dependency. By default a dependency
-		   on a bundle is mandatory but this can be controlled through use of the resolution directive in exactly
-		   the same way as it can with <code>Import-Package</code>.
-		   </para>
-			<programlisting>
-<emphasis role="bold">Import-Bundle</emphasis>: com.springsource.org.apache.commons.dbcp;version="[1.2.2.osgi, 1.2.2.osgi]"
-           </programlisting>
-			<para>
-				This example <code>Import-Bundle</code> header declares a mandatory dependency on the Apache Commons
-				DBCP bundle at exactly 1.2.2.osgi.
-			</para>
-			<section id="developing-applications-importing-bundles-disadvantages">
-				<title>Disadvantages</title>
-				<para>
-					A disadvantage of using <code>Import-Bundle</code> or especially <code>Import-Library</code>, is that the application 
-					bundle has a greater apparent fan-out than it strictly needs. An Alternative is to use a tool such as bnd or Bundlor 
-					to generate the package imports of the bundle.
-				</para>
-			</section>
-	   </section>
-
-		<section id="developing-applications-scoping-libraries-bundles">
-			<title>Scoping Bundles in an Application</title>	
-			<para>
-				When working with a scoped application, such as a PAR file or a plan, you might run into a situation where one of the bundles in the application (call it <code>bundleA</code>) depends on another bundle (<code>bundleB</code>) that performs a runtime task (such as class generation) that a third bundle (<code>bundleC</code>) might need to know about, although <code>bundleC</code> does not explicitly depend on <code>bundleB</code>.  
-			</para>
-			<para>
-				For example, Hibernate uses CGLIB (code generation library) at runtime to generate proxies for persistent classes.  Assume that a domain bundle in your application uses Hibernate for its persistent objects, and thus its <code>Import-Bundle</code> manifest header includes the Hibernate bundle.  Further assume that a separate Web bundle uses reflection in its data-binding code, and thus needs to reflect on the persistent classes generated by Hibernate at runtime.  The Web bundle now has an indirect dependency on the Hibernate bundle because of these dynamically generated classes, although the Web bundle does not typically care about the details of how these classes are persisted.  One way to solve this dependency problem is to explicitly add the Hibernate bundle to the <code>Import-Bundle</code> header of the Web bundle; however, this type of explicit-specified dependency breaks the modularity of the application and is not a programming best practice.
-			</para>
-			<para>
-				A better way to solve this problem is to specify that @project.name@ itself dynamically import 
-				the bundle (Hibernate in the example above) to all bundles in the application at runtime.  
-				You do this by adding the <code>import-scope:=application</code> directive to the <code>Import-Bundle</code> header 
-				of the bundle that has the direct dependency (the domain bundle in our example).  At runtime, although the Web bundle 
-				does not explicitly import the Hibernate bundle, @project.name@ implicitly imports it and thus its classes are available 
-				to the Web bundle.  This mechanism allows you to declare the dependencies you need to make your application run,
-				without having to make changes to your application that might limit its flexibility. 
-			</para>
-			<para>
-				The following example shows how to use the <code>import-scope</code> directive with the <code>Import-Bundle</code> header:
-			</para>
-	   <programlisting>
-Import-Bundle: com.springsource.org.hibernate;version="[3.2.6.ga,3.2.6.ga]";<emphasis role="bold">import-scope:=application</emphasis></programlisting>
-	    <para>
-		You can also set the <code>import-scope</code> directive to the (default) value <code>bundle</code>; in this case, the scope of the bundle is just the bundle itself and thus @project.name@ does not perform any implicit importing into other bundles of the application.  
-	    </para>
-	    <para>
-		Note that use of the <code>import-scope:=application</code> directive of the <code>Import-Bundle</code> header only makes sense when the bundle is part of a scoped application (PAR or plan);  if the bundle is not part of a scoped application, then this directive has no effect.
-	    </para>
-	    <para>
-		Finally, because <code>import-scope:=application</code> implicitly adds a bundle import to each bundle of the PAR or plan, the impact of subsequently refreshing the imported bundle is, in general, broader than it would have been if you had not used <code>import-scope:=application</code>. This may well affect the performance of refresh.
-	    </para>
-	   </section>
-
-	   <section id="developing-applications-defining-libraries">
-		    <title>Defining Libraries</title>
-			<para>
-			    Libraries are defined in a simple text file, typically with a <code>.libd</code> suffix. This file identifies the
-			    library and lists all of its constituent bundles. For example, the following is the library definition for
-			    Spring 2.5.4:
-			    <programlisting><emphasis role="bold">Library-SymbolicName</emphasis>: org.springframework.spring
-<emphasis role="bold">Library-Version</emphasis>: 2.5.4
-<emphasis role="bold">Library-Name</emphasis>: Spring Framework
-<emphasis role="bold">Import-Bundle</emphasis>: org.springframework.core;version="[2.5.4,2.5.5)",
- org.springframework.beans;version="[2.5.4,2.5.5)",
- org.springframework.context;version="[2.5.4,2.5.5)",
- org.springframework.aop;version="[2.5.4,2.5.5)",
- org.springframework.web;version="[2.5.4,2.5.5)", 
- org.springframework.web.servlet;version="[2.5.4,2.5.5)",
- org.springframework.jdbc;version="[2.5.4,2.5.5)",
- org.springframework.orm;version="[2.5.4,2.5.5)",
- org.springframework.transaction;version="[2.5.4,2.5.5)",
- org.springframework.context.support;version="[2.5.4,2.5.5)",
- org.springframework.aspects;version="[2.5.4,2.5.5)",
- com.springsource.org.aopalliance;version="1.0"</programlisting>
-			</para>
-			<para>
-				The following table lists all of the headers that may be used in a library definition:
-			</para>
-			<table id="developing-applications-defining-libraries-library-headers-table" colsep="1" frame="all" rowsep="1">
-				<title>Library definition headers</title>
-				<tgroup cols="2">
-				   <colspec colwidth="2*" />
-		           <colspec colwidth="5*" />
-					<thead>
-						<row>
-							<entry>Header</entry>
-							<entry>Description</entry>
-						</row>
-					</thead>
-					<tbody>
-						<row>
-							<entry>Library-SymbolicName</entry>
-							<entry>Identifier for the library</entry>
-						</row>
-						<row>
-							<entry>Library-Version</entry>
-							<entry>Version number for the library</entry>
-						</row>
-						<row>
-							<entry>Import-Bundle</entry>
-							<entry>A comma separated list of bundle symbolic names. 
-							Each entry may optionally specify a version (using the <code>version=</code> directive) 
-							and the scope of the import (using the <code>import-scope</code> directive).</entry>
-						</row>
-						<row>
-							<entry>Library-Name</entry>
-							<entry>Optional. The human-readable name of the library</entry>
-						</row>
-						<row>
-							<entry>Library-Description</entry>
-							<entry>Optional. A human-readable description of the library</entry>
-						</row>
-					</tbody>
-				</tgroup>
-			</table>
-		</section>	
-		<section id="developing-applications-installing-dependencies">
-		    <title>Installing Dependencies</title>
-		    <para>
-			    Rather than encouraging the packaging of all an application&rsquo;s dependencies within the application itself, @project.name@
-			    uses a local provisioning repository of bundles and libraries upon which an application can depend. When the @project.name@
-			    encounters an application with a particular dependency, it will automatically provide, from its provisioning repository,
-			    the appropriate bundle or library.
-			</para>
-			<para>
-			    Making a dependency available for provisioning is simply a matter of copying it to the appropriate location in the
-			    @project.name@&rsquo;s local provisioning repository. By default this is
-			    <literal>SERVER_HOME/repository/usr</literal>. A more detailed discussion of the provisioning
-			    repository can be found in the <ulink url="../../virgo-user-guide/html/index.html">User Guide</ulink>.
-			</para>
-	    </section>
-	</section>
-	<section id="developing-applications-application-trace">
-		<title>Application Trace</title>
-	    <para>
-		    As described in the <ulink url="../../virgo-user-guide/html/index.html">User Guide</ulink> @project.name@ provides support for
-		    per-application trace for PARs, scoped Plans and WABs. @project.name@ provides SLF4J with Logback logging for Event Logging and Tracing. 
-		    Application trace is configured in the <literal>serviceability.xml</literal> file.
-		    See the <ulink url="../../virgo-user-guide/html/index.html">User Guide</ulink> for more details.
-		</para> 
-    </section> 
-       <section id="developing-applications-versioning">
-        <title>Application Versioning</title>
-        <para>
-	        In much the same way that individual OSGi bundles can be versioned, @project.name@ allows applications to be versioned. How exactly you do this depends on how you have packaged the application:  
-		<itemizedlist>
-	        	<listitem>If you package your application using a PAR, you version the application by using the <literal>Application-Version</literal> header in the <code>MANIFEST.MF</code> file of the PAR file.</listitem>
-			<listitem>If you use a plan to describe the artifacts that make up your application, you version it by using the <code>version</code> attribute of the <code>&lt;plan&gt;</code> root element of the plan&rsquo;s XML file.</listitem>
-	        	<listitem>If your application consists of a single bundle, you version it in the standard OSGi way: by using the <literal>Bundle-Version</literal> header of the <code>MANIFEST.MF</code> file of the bundle.</listitem>
-		</itemizedlist>
-        </para>
-        <para>@project.name@ uses an application&rsquo;s version to prevent clashes when multiple versions of the same application are deployed at
-	        the same time. For example, the application trace support described in <xref linkend="developing-applications-application-trace"/>,
-	        includes the application&rsquo;s name and version in the file path. This ensures that each version of the same application has its
-	        own trace or logging file.
-	    </para>
-	</section>
-</chapter>
diff --git a/programmer-guide/src/docs/asciidoc/architecture.adoc b/programmer-guide/src/docs/asciidoc/architecture.adoc
new file mode 100644
index 0000000..5ccfade
--- /dev/null
+++ b/programmer-guide/src/docs/asciidoc/architecture.adoc
@@ -0,0 +1,410 @@
+:virgo-name: Virgo
+:version: 3.7.0.RC01
+
+:umbrella-virgo-name: Eclipse Virgo
+:tomcat-product-name: Virgo for Apache Tomcat
+:tomcat-product-name-short: VTS
+:jetty-product-name: Virgo Jetty Server
+:jetty-product-name-short: VJS
+:kernel-product-name: Virgo Kernel
+:kernel-product-name-short: VK
+:nano-product-name: Virgo Nano
+:nano-product-name-short: VN
+:user-guide: http://www.eclipse.org/virgo/documentation/virgo-documentation-{version}/docs/virgo-user-guide/html/index.html[User Guide]
+:tooling-guide: http://www.eclipse.org/virgo/documentation/virgo-documentation-3.6.4.RELEASE/docs/virgo-tooling-guide/html/index.html[Tooling Guide]
+
+:gemini-blueprint-guide: https://www.eclipse.org/gemini/blueprint/documentation/reference/2.0.0.RELEASE/html/index.html[Eclipse Gemini Blueprint Reference Guide]
+
+:spring-framework-version: 4.2.9.RELEASE
+
+:homepage: https://www.eclipse.org/virgo
+:ebr: http://www.eclipse.org/ebr[EBR]
+
+:imagesdir: assets/images
+
+anchor:architecture[Deployment Architecture]
+
+== Deployment Architecture
+
+The {tomcat-product-name} offers several choices when it comes to deploying applications. Each
+choice offers certain advantages, and it is important to understand those in order to make
+the right choice for your application. In this chapter, we take a closer look at the choices
+offered, compare them, and provide guidelines in choosing the right one based on your
+specific needs.
+
+The {tomcat-product-name-short} supports standard self-contained WAR files thus allowing you to
+use the {tomcat-product-name} as an enhanced web server. The {tomcat-product-name-short} also supports the
+    *Shared Libraries* WAR format which allows for slimmer WAR files that
+depend on OSGi bundles instead of including JAR files inside the WAR. The *Shared
+    Services* WAR format allows developers to further reduce the complexity of
+standard WARs by deploying services and infrastructure bundles alongside the WAR. A shared
+services WAR will then consume the services published by those bundles. To complete the
+picture, the {tomcat-product-name-short} supports the new OSGi-standard *Web Application
+Bundle* deployment format for web applications that builds on the benefits
+provided by a shared services WAR. In addition to this, {tomcat-product-name-short} provides
+additional conveniences for developing and deploying Spring MVC-based web applications.
+
+For applications consisting of multiple bundles and web applications, plans and the PAR
+format are the primary deployment models that take advantage of OSGi capabilities. We will
+explore all of these formats and their suitability later in this guide.
+
+anchor:architecture-deployment-formats[]
+
+=== Supported Deployment Formats
+
+The {tomcat-product-name} supports applications packaged in the following formats:
+
+. xref:architecture-raw-osgi-bundles[Raw OSGi Bundles]
+. xref:architecture-wars[Java EE WAR]
+. xref:architecture-war-gemini[Web Application Bundles]
+. xref:architecture-pars[PARs]
+. xref:architecture-plans[Plans]
+. xref:architecture-configurations[Configurations]
+
+When you deploy an application to the {tomcat-product-name-short}, each deployment artifact
+(e.g., a single bundle, WAR, PAR, or plan) passes through a deployment pipeline. This
+deployment pipeline is responsible for processing applications of certain types (i.e.,
+application type). The {version} release of the {tomcat-product-name-short} natively
+supports deployers analogous to each of the aforementioned packaging options.
+
+Let's take a closer look now at each of the supported deployment and packaging
+options to explore which one is best suited to your application.
+
+anchor:architecture-raw-osgi-bundles[]
+
+==== Raw OSGi Bundles
+
+At its core, the {tomcat-product-name} is an OSGi container. Thus any OSGi-compliant
+bundle can be deployed directly on the {tomcat-product-name-short} unmodified. You'll
+typically deploy an application as a single bundle or a set of stand-alone bundles
+if you'd like to publish or consume services globally within the container via
+the OSGi Service Registry.
+
+anchor:architecture-wars[]
+
+==== WAR Deployment Formats
+
+For Web Application Archives (WAR), the {tomcat-product-name} provides support for the
+following three formats.
+
+. xref:architecture-standard-war[Standard WAR]
+. xref:architecture-shared-libraries-war[Shared Libraries WAR]
+. xref:architecture-shared-services-war[Shared Services WAR]
+
+Each of these formats plays a distinct role in the incremental migration path
+from a standard Java EE WAR to an OSGi-ified web application.
+
+anchor:architecture-standard-war[]
+
+==== Standard WAR
+
+Standard WAR files are supported directly in the {tomcat-product-name-short}. At
+deployment time, the WAR file is transformed into an OSGi bundle and installed
+into Tomcat. All the standard WAR contracts are honoured, and your existing WAR
+files should just drop in and deploy without change. Support for standard,
+unmodified WAR files allows you to try out the {tomcat-product-name} on your existing
+web applications and then gradually migrate toward the *Shared
+Libraries WAR* and *Shared Services WAR* formats.
+
+In addition to the standard support for WARs that you would expect from
+Tomcat, the {tomcat-product-name-short} also enables the following features:
+
+. Spring-driven load-time weaving (see Section 6.8.4, “Load-time weaving
+with AspectJ in the Spring Framework").
+Diagnostic information such as FFDC (first failure data capture)
+. The main benefit of this application style is familiarity -- developers know
+how to create a WAR file! You can take advantage of the
+{tomcat-product-name-short}'s added feature set without modifying the
+application. The application can also be deployed on other Servlet containers or
+Java EE application servers.
+
+You may choose this application style if the application is fairly simple and
+small. You may also prefer this style even for large and complex applications as
+a starting point and migrate to the other styles over time as discussed in xref:migrating-to-osgi[].
+
+anchor:architecture-shared-libraries-war[]
+
+==== Shared Libraries WAR
+
+If you have experience with developing and packaging web applications using
+the standard WAR format, you're certainly familiar with the pains of
+library bloat. So, unless you're installing shared libraries in a common
+library folder for your Servlet container, you have to pack all JARs required by
+your web application in `/WEB-INF/lib`. Prior to the release of
+the {tomcat-product-name}, such library bloat has essentially been the norm for web
+applications, but now there is a better solution! The Shared Libraries WAR
+format reduces your application's deployment footprint and eradicates
+library bloat by allowing you to declare dependencies on libraries via standard
+OSGi manifest headers such as `Import-Package` and `Require-Bundle` . The {tomcat-product-name-short} provides additional
+support for simplifying dependency management via the `Import-Library` and `Import-Bundle` manifest headers
+which are essentially macros that get expanded into OSGi-compliant `Import-Package` statements.
+
+[TIP]
+--
+For detailed information on which libraries are already available, check
+out the {ebr}.
+--
+
+anchor:architecture-shared-services-war[]
+
+==== Shared Services WAR
+
+Once you've begun taking advantage of declarative dependency management
+with a Shared Libraries WAR, you'll likely find yourself wanting to take
+the next step toward reaping further benefits of an OSGi container: sharing
+services between your OSGi-compliant bundles and your web applications. By
+building on the power and simplicity of Gemini Blueprint, the *Shared Services
+WAR* format puts the OSGi Service Registry at your finger tips. As
+a best practice you'll typically publish services from your domain,
+service, and infrastructure bundles via `<osgi:service ...>` and then consume them in your web application's
+ApplicationContext via `<osgi:reference ... >`. Doing so
+promotes programming to interfaces and allows you to completely decouple your
+web-specific deployment artifacts from your domain model, service layer, etc.,
+and that's certainly a step in the right direction. Of the three supported
+WAR deployment formats, the Shared Services WAR is by far the most attractive in
+terms of modularity and reduced overall footprint of your web applications.
+
+anchor:architecture-war-gemini[]
+
+==== WARs and the Gemini Web Container
+
+{tomcat-product-name} fully supports the OSGi Web Applications standard. Using the
+reference implementation from Gemini Web that was developed by SpringSource from
+an offshoot of the original {tomcat-product-name-short} codebase. This RI is now fully
+integrated in {tomcat-product-name-short} as the basis of the support for web
+application deployment.
+
+The OSGi Web Applications specification introduces the concept of a *Web
+Application Bundle*, which is a WAR that is also a bundle. The
+specification defines how WAR files are transformed into bundles automatically
+as needed.
+
+You can find an introduction to the Web Container in blog entries written by
+the {virgo-name} team http://blog.springsource.com/2009/05/27/introduction-to-the-osgi-web-container/[here]
+and http://blog.springsource.com/2009/06/01/what-the-osgi-web-container-means-for-dm-server/[here].
+
+anchor:architecture-war-gemini-extensions[]
+
+==== Extensions to the Web Container
+
+{tomcat-product-name} provides a variety of extensions to the Web Container that
+allow you to construct sophisticated applications. The table below
+summarises the extensions that are available or in development.
+
+[cols=",",options="header",]
+|=======================================================================
+| Feature                                   | Description
+| Instrumentable ClassLoaders               | All web bundle ClassLoaders are
+instrumentable by Spring's load-time weaving infrastructure.
+
+| Support for exploded bundles/WARs         | Bundles/WARs in directory form can
+be deployed as Web Application Bundles
+
+| Support for scanning TLDs in dependencies | As per the Web Application
+specification, all TLDs located inside a web bundle are located using
+the rules defined in the JSP 2.1 specification. In
+{tomcat-product-name-short}, the dependencies of a Web Application
+Bundle are also scanned for TLDs following the rules outlined in JSP 2.1
+|=======================================================================
+
+anchor:architecture-pars[]
+
+==== PAR
+
+A PAR is a standard JAR which contains all of the modules of your application
+(e.g., service, domain, and infrastructure bundles as well as a WAR or web module
+for web applications) in a single deployment unit. This allows you to deploy,
+refresh, and undeploy your entire application as a single entity. If you are
+familiar with Java EE, it is worth noting that a PAR can be considered a replacement
+for an EAR (Enterprise Archive) within the context of an OSGi container. As an added
+bonus, modules within a PAR can be refreshed independently and on-the-fly, for
+example via the Virgo Eclipse IDE Tooling (see the Virgo Tools Guide).
+
+Many of the benefits of the PAR format are due to the underlying OSGi
+infrastructure, including:
+
+* Fundamentally modularized applications: instead of relying on fuzzy
+boundaries between logical modules in a monolithic application, this
+style promotes physically separated modules in the form of OSGi bundles.
+Then each module may be developed separately, promoting parallel
+development and loose coupling.
+
+* Robust versioning of various modules: the versioning capability
+offered by OSGi is much more comprehensive than alternatives. Each
+module can specify a version range for each of its dependencies. Bundles
+are isolated from each other in such a way that multiple versions of a
+bundle may be used simultaneously in an application.
+
+* Improved manageability: each bundle may be deployed or undeployed in
+a running application. This allows modifying the existing application to
+fix bugs, improve performance, and even to add new features without
+having to restart the application.
+
+Furthermore, PARs scope the bundles of your application within the
+{tomcat-product-name-short}. Scoping provides both a physical and logical application
+boundary, effectively shielding the internals of your application from other PARs
+deployed within the {tomcat-product-name-short}. This means your application doesn't
+have to worry about clashing with other running applications (e.g., in the OSGi
+Service Registry). You get support for load-time weaving, classpath scanning,
+context class loading, etc., and the {tomcat-product-name-short} does the heavy lifting for
+you to make all this work seamlessly in an OSGi environment. If you want to take
+full advantage of all that the {tomcat-product-name} and OSGi have to offer, packaging and
+deploying your applications as a PAR is a good choice, although plans are an even
+better one, as described in the next section.
+
+.OSGi != multiple JARs
+[TIP]
+--
+Note that while physically separated modules can, in theory, be implemented
+simply using multiple JARs, complex versioning requirements often make this
+impractical. For example, consider the situation depicted in the diagram below.
+
+* Bundle A depends on version `1.0.0` of bundle `B` and version `2.0.0` of bundle `C`.
+* Bundle B depends on version `1.0.0` of bundle `C`.
+
+Suppose that versions `1.0.0` and `2.0.0` of bundle `C` are neither
+backward nor forward compatible. Traditional monolithic applications cannot
+handle such situations: either bundle `A` or bundle `B` would need reworking which
+undermines truly independent development. OSGi's versioning scheme enables
+this scenario to be implemented in a robust manner. If it is desirable to rework
+the application to share a single version of `C`, then this can be planned in and
+is not forced.
+
+image::architecture-bundle-versioning.png[]
+--
+
+anchor:architecture-plans[]
+
+==== Plans
+
+A plan is similar to a PAR in that it encapsulates all of the artifacts of your
+application in a single deployment unit. The main difference, however, is that a
+plan is simply an XML file that lists the artifacts of your application; a PAR, by
+contrast, is an actual JAR file that physically contains the artifacts. Just like a
+PAR, you deploy, refresh, and undeploy a plan as a single entity. We highly
+recommends the use of plans for creating applications.
+
+When you create a plan, you can specify that the included bundles and services
+are in a scope that isolates them from the rest of {tomcat-product-name} and its
+deployments. This scoping ensures that the bundles wire to each other and see each
+other's services in preference to services from outside the scope. Scoping
+also prevents application code from leaking into the global scope or scope of
+another application. In addition, a plan can link the lifecycle of a group of
+bundles together atomically, which ensures that start, stop, and uninstall
+events on a single artifact in the plan are escalated to all artifacts in the plan.
+You can, however, disable both of these features by simply setting an attribute in
+the plan.
+
+The general benefits of using plans are similar to those of using PARs; see xref:architecture-pars[PAR] for details. Plans offer added benefits,
+however, such as the ability to control the deployment order of your application:
+the order in which you list artifacts in the plan's XML file is the order in
+which {tomcat-product-name-short} deploys them. Additionally, because plans specify the
+artifacts that make up an application by reference, it is easier to share artifacts
+between plans as well as update individual parts of a plan without having to
+physically repackage (re-JAR) it.
+
+anchor:architecture-configurations[]
+
+==== Configurations
+
+A Configuration is simply a Java properties file. When deployed it will be
+recognised by the deployer and installed in to *Configuration
+Admin* for later use by your applications. {tomcat-product-name-short} supports
+both singleton (ManagedService) and factory (ManagedServiceFactory) configurations.
+(see section 104.6 in the Compendium Specification)
+
+For a singleton configuration the name that it will be installed under is its filename
+minus the `.properties` extension. Factory Configuration is supported by
+specifying the *service.factoryPid* property. In this case the actual PID will
+be created by *Configuration Admin* (see section 104.6 in the
+Compendium Specification).
+
+How to consume configuration data is discussed xref:developing-applications-configuration-artifacts[later].
+
+anchor:architecture-dependency-types[]
+
+=== Dependency Types
+
+In an OSGi environment, there are two kinds of dependencies between various bundles:
+*type* dependency and *service* dependency.
+
+* *Type dependency*: A bundle may depend on a
+type exported by another bundle thus creating a type dependency. Type
+dependencies are managed through `Import-Package` and
+`Export-Package` directives in the OSGi manifest. This
+kind of dependency is similar to a JAR file using types in other JAR files
+from the classpath. However, as we've seen earlier, there are
+significant differences.
+* *Service dependency*: A bundle may also
+publish services (preferably using Gemini Blueprint), and other bundles may consume
+those services. If two bundles depend on the same service, both will be
+communicating effectively to the same object. More specifically, any state
+for that service will be shared between all the clients of that service.
+This kind of arrangement is similar to the commonly seen client-server
+interaction through mechanisms such as RMI or Web Services.
+
+=== Regions
+
+Conceptually, the {umbrella-virgo-name} can be divided into two separate subsystems, called Regions. This
+provides a way to keep the {kernel-product-name} separate from user applications. Read more about Regions
+and the two in {virgo-name} in the {user-guide}
+concepts section.
+
+anchor:architecture-forming-bundles[A Guide to Forming Bundles]
+
+=== A Guide to Forming Bundles
+
+So what makes an application suitable for deployment on the {tomcat-product-name}? Since
+OSGi is at the heart of the {tomcat-product-name-short}, modular applications consisting of
+bundles, which each represent distinct functionality and well-defined boundaries, can
+take maximum advantage of the OSGi container's capabilities. The core ideas behind
+forming bundles require following good software engineering practices: separation of
+concerns, loose coupling, and communication through clear interfaces. In this section,
+we look at a few approaches that you may use to create modular applications for
+{tomcat-product-name} deployment. Please consider the following discussion as guidelines and
+not as rules.
+
+Bundles can be formed along horizontal slices of layering and vertical slices of
+function. The objective is to enable independent development of each bundle and minimize
+the skills required to develop each bundle.
+
+For example, an application could have the following bundles:
+*infrastructure*, *domain*,
+*repository*, *service*, and
+*web* as shown in the following diagram.
+
+image::bundle-dependencies-layers.png[]
+
+Each bundle consists of types appropriate for that layer and exports
+packages and services to be used by other layers. Let's examine each bundle in
+more detail:
+
+[options="header",cols="<,<,<,^,^"]
+.Bundles across layers
+|=======================================================================
+| Bundles        | Imported Packages     | Exported Packages         | Consumed Services | Published Services
+| Infrastructure | Third-party libraries | Infrastructure interfaces | None              | None
+| Domain         | Depends: for example,
+                   if JPA is used to
+                   annotate persistent
+                   types, then JPA
+                   packages.             | Public domain types       | None              | None
+| Web            | Domain, Service       | None                      | Service beans     | None
+| Service        | Domain,
+                   Infrastructure,
+                   Repository            | Service interfaces        | Repository beans  | Service beans
+| Repository     | Domain,
+                   Third-party libraries,
+                   ORM bundles, etc.     | Repository interfaces     | DataSources,
+                                                                       ORM session/entity managers,
+                                                                       etc.              | Repository beans
+|=======================================================================
+
+Within each layer, you may create bundles for each subsystem representing a vertical
+slice of business functionality. For example, as shown in the following figure, the
+service layer is divided into two bundles each representing separate business
+functions.
+image:bundle-dependencies-verticals.png[]
+
+You can similarly separate the repositories, domain classes, and web controllers
+based on the business role they play.
diff --git a/programmer-guide/images/architecture-bundle-versioning.graffle b/programmer-guide/src/docs/asciidoc/assets/images/architecture-bundle-versioning.graffle
similarity index 100%
rename from programmer-guide/images/architecture-bundle-versioning.graffle
rename to programmer-guide/src/docs/asciidoc/assets/images/architecture-bundle-versioning.graffle
Binary files differ
diff --git a/programmer-guide/images/architecture-bundle-versioning.png b/programmer-guide/src/docs/asciidoc/assets/images/architecture-bundle-versioning.png
similarity index 100%
rename from programmer-guide/images/architecture-bundle-versioning.png
rename to programmer-guide/src/docs/asciidoc/assets/images/architecture-bundle-versioning.png
Binary files differ
diff --git a/programmer-guide/images/bundle-dependencies-layers.graffle b/programmer-guide/src/docs/asciidoc/assets/images/bundle-dependencies-layers.graffle
similarity index 100%
rename from programmer-guide/images/bundle-dependencies-layers.graffle
rename to programmer-guide/src/docs/asciidoc/assets/images/bundle-dependencies-layers.graffle
Binary files differ
diff --git a/programmer-guide/images/bundle-dependencies-layers.png b/programmer-guide/src/docs/asciidoc/assets/images/bundle-dependencies-layers.png
similarity index 100%
rename from programmer-guide/images/bundle-dependencies-layers.png
rename to programmer-guide/src/docs/asciidoc/assets/images/bundle-dependencies-layers.png
Binary files differ
diff --git a/programmer-guide/images/bundle-dependencies-verticals.graffle b/programmer-guide/src/docs/asciidoc/assets/images/bundle-dependencies-verticals.graffle
similarity index 100%
rename from programmer-guide/images/bundle-dependencies-verticals.graffle
rename to programmer-guide/src/docs/asciidoc/assets/images/bundle-dependencies-verticals.graffle
Binary files differ
diff --git a/programmer-guide/images/bundle-dependencies-verticals.png b/programmer-guide/src/docs/asciidoc/assets/images/bundle-dependencies-verticals.png
similarity index 100%
rename from programmer-guide/images/bundle-dependencies-verticals.png
rename to programmer-guide/src/docs/asciidoc/assets/images/bundle-dependencies-verticals.png
Binary files differ
diff --git a/programmer-guide/images/bundle-references.png b/programmer-guide/src/docs/asciidoc/assets/images/bundle-references.png
similarity index 100%
rename from programmer-guide/images/bundle-references.png
rename to programmer-guide/src/docs/asciidoc/assets/images/bundle-references.png
Binary files differ
diff --git a/programmer-guide/images/create-new-par-complexDomain-skeleton-bundles.png b/programmer-guide/src/docs/asciidoc/assets/images/create-new-par-complexDomain-skeleton-bundles.png
similarity index 100%
rename from programmer-guide/images/create-new-par-complexDomain-skeleton-bundles.png
rename to programmer-guide/src/docs/asciidoc/assets/images/create-new-par-complexDomain-skeleton-bundles.png
Binary files differ
diff --git a/programmer-guide/images/create-new-par-complexDomain-web-page.png b/programmer-guide/src/docs/asciidoc/assets/images/create-new-par-complexDomain-web-page.png
similarity index 100%
rename from programmer-guide/images/create-new-par-complexDomain-web-page.png
rename to programmer-guide/src/docs/asciidoc/assets/images/create-new-par-complexDomain-web-page.png
Binary files differ
diff --git a/programmer-guide/images/create-new-par-dataSource-classNotFound-eclipse.png b/programmer-guide/src/docs/asciidoc/assets/images/create-new-par-dataSource-classNotFound-eclipse.png
similarity index 100%
rename from programmer-guide/images/create-new-par-dataSource-classNotFound-eclipse.png
rename to programmer-guide/src/docs/asciidoc/assets/images/create-new-par-dataSource-classNotFound-eclipse.png
Binary files differ
diff --git a/programmer-guide/images/create-new-par-infrastructure-add-infrastructure-to-par.png b/programmer-guide/src/docs/asciidoc/assets/images/create-new-par-infrastructure-add-infrastructure-to-par.png
similarity index 100%
rename from programmer-guide/images/create-new-par-infrastructure-add-infrastructure-to-par.png
rename to programmer-guide/src/docs/asciidoc/assets/images/create-new-par-infrastructure-add-infrastructure-to-par.png
Binary files differ
diff --git a/programmer-guide/images/create-new-par-infrastructure-created-eclipse.png b/programmer-guide/src/docs/asciidoc/assets/images/create-new-par-infrastructure-created-eclipse.png
similarity index 100%
rename from programmer-guide/images/create-new-par-infrastructure-created-eclipse.png
rename to programmer-guide/src/docs/asciidoc/assets/images/create-new-par-infrastructure-created-eclipse.png
Binary files differ
diff --git a/programmer-guide/images/create-new-par-infrastructure-databasepopulator-before-manifest.png b/programmer-guide/src/docs/asciidoc/assets/images/create-new-par-infrastructure-databasepopulator-before-manifest.png
similarity index 100%
rename from programmer-guide/images/create-new-par-infrastructure-databasepopulator-before-manifest.png
rename to programmer-guide/src/docs/asciidoc/assets/images/create-new-par-infrastructure-databasepopulator-before-manifest.png
Binary files differ
diff --git a/programmer-guide/images/create-new-par-infrastructure-dbcp-manifest.png b/programmer-guide/src/docs/asciidoc/assets/images/create-new-par-infrastructure-dbcp-manifest.png
similarity index 100%
rename from programmer-guide/images/create-new-par-infrastructure-dbcp-manifest.png
rename to programmer-guide/src/docs/asciidoc/assets/images/create-new-par-infrastructure-dbcp-manifest.png
Binary files differ
diff --git a/programmer-guide/images/create-new-par-infrastructure-empty-nested-bundles-eclipse.png b/programmer-guide/src/docs/asciidoc/assets/images/create-new-par-infrastructure-empty-nested-bundles-eclipse.png
similarity index 100%
rename from programmer-guide/images/create-new-par-infrastructure-empty-nested-bundles-eclipse.png
rename to programmer-guide/src/docs/asciidoc/assets/images/create-new-par-infrastructure-empty-nested-bundles-eclipse.png
Binary files differ
diff --git a/programmer-guide/images/create-new-par-infrastructure-server-with-par-project-deployed.png b/programmer-guide/src/docs/asciidoc/assets/images/create-new-par-infrastructure-server-with-par-project-deployed.png
similarity index 100%
rename from programmer-guide/images/create-new-par-infrastructure-server-with-par-project-deployed.png
rename to programmer-guide/src/docs/asciidoc/assets/images/create-new-par-infrastructure-server-with-par-project-deployed.png
Binary files differ
diff --git a/programmer-guide/images/create-new-par-infrastructure-wizard-step1.png b/programmer-guide/src/docs/asciidoc/assets/images/create-new-par-infrastructure-wizard-step1.png
similarity index 100%
rename from programmer-guide/images/create-new-par-infrastructure-wizard-step1.png
rename to programmer-guide/src/docs/asciidoc/assets/images/create-new-par-infrastructure-wizard-step1.png
Binary files differ
diff --git a/programmer-guide/images/create-new-par-infrastructure-wizard-step2.png b/programmer-guide/src/docs/asciidoc/assets/images/create-new-par-infrastructure-wizard-step2.png
similarity index 100%
rename from programmer-guide/images/create-new-par-infrastructure-wizard-step2.png
rename to programmer-guide/src/docs/asciidoc/assets/images/create-new-par-infrastructure-wizard-step2.png
Binary files differ
diff --git a/programmer-guide/images/create-new-par-par-created-eclipse.png b/programmer-guide/src/docs/asciidoc/assets/images/create-new-par-par-created-eclipse.png
similarity index 100%
rename from programmer-guide/images/create-new-par-par-created-eclipse.png
rename to programmer-guide/src/docs/asciidoc/assets/images/create-new-par-par-created-eclipse.png
Binary files differ
diff --git a/programmer-guide/images/create-new-par-par-wizard-step1.png b/programmer-guide/src/docs/asciidoc/assets/images/create-new-par-par-wizard-step1.png
similarity index 100%
rename from programmer-guide/images/create-new-par-par-wizard-step1.png
rename to programmer-guide/src/docs/asciidoc/assets/images/create-new-par-par-wizard-step1.png
Binary files differ
diff --git a/programmer-guide/images/create-new-par-par-wizard-step2.png b/programmer-guide/src/docs/asciidoc/assets/images/create-new-par-par-wizard-step2.png
similarity index 100%
rename from programmer-guide/images/create-new-par-par-wizard-step2.png
rename to programmer-guide/src/docs/asciidoc/assets/images/create-new-par-par-wizard-step2.png
Binary files differ
diff --git a/programmer-guide/images/create-new-par-repo-hsqldb-dependencies.png b/programmer-guide/src/docs/asciidoc/assets/images/create-new-par-repo-hsqldb-dependencies.png
similarity index 100%
rename from programmer-guide/images/create-new-par-repo-hsqldb-dependencies.png
rename to programmer-guide/src/docs/asciidoc/assets/images/create-new-par-repo-hsqldb-dependencies.png
Binary files differ
diff --git a/programmer-guide/images/create-new-par-repo-hsqldb-search-results.png b/programmer-guide/src/docs/asciidoc/assets/images/create-new-par-repo-hsqldb-search-results.png
similarity index 100%
rename from programmer-guide/images/create-new-par-repo-hsqldb-search-results.png
rename to programmer-guide/src/docs/asciidoc/assets/images/create-new-par-repo-hsqldb-search-results.png
Binary files differ
diff --git a/programmer-guide/images/create-new-par-repo-hsqldb-start.png b/programmer-guide/src/docs/asciidoc/assets/images/create-new-par-repo-hsqldb-start.png
similarity index 100%
rename from programmer-guide/images/create-new-par-repo-hsqldb-start.png
rename to programmer-guide/src/docs/asciidoc/assets/images/create-new-par-repo-hsqldb-start.png
Binary files differ
diff --git a/programmer-guide/images/create-new-par-repo-hsqldb.png b/programmer-guide/src/docs/asciidoc/assets/images/create-new-par-repo-hsqldb.png
similarity index 100%
rename from programmer-guide/images/create-new-par-repo-hsqldb.png
rename to programmer-guide/src/docs/asciidoc/assets/images/create-new-par-repo-hsqldb.png
Binary files differ
diff --git a/programmer-guide/images/create-new-par-simpleDomain-eclipse-full.png b/programmer-guide/src/docs/asciidoc/assets/images/create-new-par-simpleDomain-eclipse-full.png
similarity index 100%
rename from programmer-guide/images/create-new-par-simpleDomain-eclipse-full.png
rename to programmer-guide/src/docs/asciidoc/assets/images/create-new-par-simpleDomain-eclipse-full.png
Binary files differ
diff --git a/programmer-guide/images/create-new-par-simpleDomain-eclipse.png b/programmer-guide/src/docs/asciidoc/assets/images/create-new-par-simpleDomain-eclipse.png
similarity index 100%
rename from programmer-guide/images/create-new-par-simpleDomain-eclipse.png
rename to programmer-guide/src/docs/asciidoc/assets/images/create-new-par-simpleDomain-eclipse.png
Binary files differ
diff --git a/programmer-guide/images/create-new-par-simpleDomain-server.png b/programmer-guide/src/docs/asciidoc/assets/images/create-new-par-simpleDomain-server.png
similarity index 100%
rename from programmer-guide/images/create-new-par-simpleDomain-server.png
rename to programmer-guide/src/docs/asciidoc/assets/images/create-new-par-simpleDomain-server.png
Binary files differ
diff --git a/programmer-guide/images/create-new-par-simpleDomain-web-eclipse-complete.png b/programmer-guide/src/docs/asciidoc/assets/images/create-new-par-simpleDomain-web-eclipse-complete.png
similarity index 100%
rename from programmer-guide/images/create-new-par-simpleDomain-web-eclipse-complete.png
rename to programmer-guide/src/docs/asciidoc/assets/images/create-new-par-simpleDomain-web-eclipse-complete.png
Binary files differ
diff --git a/programmer-guide/images/create-new-par-simpleDomain-web-page.png b/programmer-guide/src/docs/asciidoc/assets/images/create-new-par-simpleDomain-web-page.png
similarity index 100%
rename from programmer-guide/images/create-new-par-simpleDomain-web-page.png
rename to programmer-guide/src/docs/asciidoc/assets/images/create-new-par-simpleDomain-web-page.png
Binary files differ
diff --git a/programmer-guide/images/create-new-par-user-repository.png b/programmer-guide/src/docs/asciidoc/assets/images/create-new-par-user-repository.png
similarity index 100%
rename from programmer-guide/images/create-new-par-user-repository.png
rename to programmer-guide/src/docs/asciidoc/assets/images/create-new-par-user-repository.png
Binary files differ
diff --git a/programmer-guide/images/create-par-project.png b/programmer-guide/src/docs/asciidoc/assets/images/create-par-project.png
similarity index 100%
rename from programmer-guide/images/create-par-project.png
rename to programmer-guide/src/docs/asciidoc/assets/images/create-par-project.png
Binary files differ
diff --git a/programmer-guide/images/developing-applications-web-module-format.png b/programmer-guide/src/docs/asciidoc/assets/images/developing-applications-web-module-format.png
similarity index 100%
rename from programmer-guide/images/developing-applications-web-module-format.png
rename to programmer-guide/src/docs/asciidoc/assets/images/developing-applications-web-module-format.png
Binary files differ
diff --git a/programmer-guide/images/formtags-case-study-exploded-war.png b/programmer-guide/src/docs/asciidoc/assets/images/formtags-case-study-exploded-war.png
similarity index 100%
rename from programmer-guide/images/formtags-case-study-exploded-war.png
rename to programmer-guide/src/docs/asciidoc/assets/images/formtags-case-study-exploded-war.png
Binary files differ
diff --git a/programmer-guide/images/formtags-case-study-par-exploded-web.png b/programmer-guide/src/docs/asciidoc/assets/images/formtags-case-study-par-exploded-web.png
similarity index 100%
rename from programmer-guide/images/formtags-case-study-par-exploded-web.png
rename to programmer-guide/src/docs/asciidoc/assets/images/formtags-case-study-par-exploded-web.png
Binary files differ
diff --git a/programmer-guide/images/formtags-case-study-par-exploded.png b/programmer-guide/src/docs/asciidoc/assets/images/formtags-case-study-par-exploded.png
similarity index 100%
rename from programmer-guide/images/formtags-case-study-par-exploded.png
rename to programmer-guide/src/docs/asciidoc/assets/images/formtags-case-study-par-exploded.png
Binary files differ
diff --git a/programmer-guide/images/formtags-case-study-par-sample.png b/programmer-guide/src/docs/asciidoc/assets/images/formtags-case-study-par-sample.png
similarity index 100%
rename from programmer-guide/images/formtags-case-study-par-sample.png
rename to programmer-guide/src/docs/asciidoc/assets/images/formtags-case-study-par-sample.png
Binary files differ
diff --git a/programmer-guide/images/formtags-case-study-sample-layout.png b/programmer-guide/src/docs/asciidoc/assets/images/formtags-case-study-sample-layout.png
similarity index 100%
rename from programmer-guide/images/formtags-case-study-sample-layout.png
rename to programmer-guide/src/docs/asciidoc/assets/images/formtags-case-study-sample-layout.png
Binary files differ
diff --git a/programmer-guide/images/formtags-case-study-shared-services-eclipse.png b/programmer-guide/src/docs/asciidoc/assets/images/formtags-case-study-shared-services-eclipse.png
similarity index 100%
rename from programmer-guide/images/formtags-case-study-shared-services-eclipse.png
rename to programmer-guide/src/docs/asciidoc/assets/images/formtags-case-study-shared-services-eclipse.png
Binary files differ
diff --git a/programmer-guide/images/formtags-case-study-shared-services-service-resources.png b/programmer-guide/src/docs/asciidoc/assets/images/formtags-case-study-shared-services-service-resources.png
similarity index 100%
rename from programmer-guide/images/formtags-case-study-shared-services-service-resources.png
rename to programmer-guide/src/docs/asciidoc/assets/images/formtags-case-study-shared-services-service-resources.png
Binary files differ
diff --git a/programmer-guide/images/formtags-case-study-shared-services-war-resources.png b/programmer-guide/src/docs/asciidoc/assets/images/formtags-case-study-shared-services-war-resources.png
similarity index 100%
rename from programmer-guide/images/formtags-case-study-shared-services-war-resources.png
rename to programmer-guide/src/docs/asciidoc/assets/images/formtags-case-study-shared-services-war-resources.png
Binary files differ
diff --git a/programmer-guide/images/formtags-case-study-war-webpage.png b/programmer-guide/src/docs/asciidoc/assets/images/formtags-case-study-war-webpage.png
similarity index 100%
rename from programmer-guide/images/formtags-case-study-war-webpage.png
rename to programmer-guide/src/docs/asciidoc/assets/images/formtags-case-study-war-webpage.png
Binary files differ
diff --git a/programmer-guide/images/import-bundle_import-library.graffle b/programmer-guide/src/docs/asciidoc/assets/images/import-bundle_import-library.graffle
similarity index 100%
rename from programmer-guide/images/import-bundle_import-library.graffle
rename to programmer-guide/src/docs/asciidoc/assets/images/import-bundle_import-library.graffle
Binary files differ
diff --git a/programmer-guide/images/import-bundle_import-library.png b/programmer-guide/src/docs/asciidoc/assets/images/import-bundle_import-library.png
similarity index 100%
rename from programmer-guide/images/import-bundle_import-library.png
rename to programmer-guide/src/docs/asciidoc/assets/images/import-bundle_import-library.png
Binary files differ
diff --git a/programmer-guide/images/import-package.graffle b/programmer-guide/src/docs/asciidoc/assets/images/import-package.graffle
similarity index 100%
rename from programmer-guide/images/import-package.graffle
rename to programmer-guide/src/docs/asciidoc/assets/images/import-package.graffle
Binary files differ
diff --git a/programmer-guide/images/import-package.png b/programmer-guide/src/docs/asciidoc/assets/images/import-package.png
similarity index 100%
rename from programmer-guide/images/import-package.png
rename to programmer-guide/src/docs/asciidoc/assets/images/import-package.png
Binary files differ
diff --git a/programmer-guide/images/introduction-architecture.graffle b/programmer-guide/src/docs/asciidoc/assets/images/introduction-architecture.graffle
similarity index 100%
rename from programmer-guide/images/introduction-architecture.graffle
rename to programmer-guide/src/docs/asciidoc/assets/images/introduction-architecture.graffle
Binary files differ
diff --git a/programmer-guide/images/introduction-architecture.png b/programmer-guide/src/docs/asciidoc/assets/images/introduction-architecture.png
similarity index 100%
rename from programmer-guide/images/introduction-architecture.png
rename to programmer-guide/src/docs/asciidoc/assets/images/introduction-architecture.png
Binary files differ
diff --git a/programmer-guide/images/migrating-to-osgi-par-structure.graffle b/programmer-guide/src/docs/asciidoc/assets/images/migrating-to-osgi-par-structure.graffle
similarity index 100%
rename from programmer-guide/images/migrating-to-osgi-par-structure.graffle
rename to programmer-guide/src/docs/asciidoc/assets/images/migrating-to-osgi-par-structure.graffle
Binary files differ
diff --git a/programmer-guide/images/migrating-to-osgi-par-structure.png b/programmer-guide/src/docs/asciidoc/assets/images/migrating-to-osgi-par-structure.png
similarity index 100%
rename from programmer-guide/images/migrating-to-osgi-par-structure.png
rename to programmer-guide/src/docs/asciidoc/assets/images/migrating-to-osgi-par-structure.png
Binary files differ
diff --git a/programmer-guide/images/migration-path-war-to-shsrv.graffle b/programmer-guide/src/docs/asciidoc/assets/images/migration-path-war-to-shsrv.graffle
similarity index 100%
rename from programmer-guide/images/migration-path-war-to-shsrv.graffle
rename to programmer-guide/src/docs/asciidoc/assets/images/migration-path-war-to-shsrv.graffle
Binary files differ
diff --git a/programmer-guide/images/migration-path-war-to-shsrv.png b/programmer-guide/src/docs/asciidoc/assets/images/migration-path-war-to-shsrv.png
similarity index 100%
rename from programmer-guide/images/migration-path-war-to-shsrv.png
rename to programmer-guide/src/docs/asciidoc/assets/images/migration-path-war-to-shsrv.png
Binary files differ
diff --git a/programmer-guide/images/new-par-project.png b/programmer-guide/src/docs/asciidoc/assets/images/new-par-project.png
similarity index 100%
rename from programmer-guide/images/new-par-project.png
rename to programmer-guide/src/docs/asciidoc/assets/images/new-par-project.png
Binary files differ
diff --git a/programmer-guide/images/par-content.png b/programmer-guide/src/docs/asciidoc/assets/images/par-content.png
similarity index 100%
rename from programmer-guide/images/par-content.png
rename to programmer-guide/src/docs/asciidoc/assets/images/par-content.png
Binary files differ
diff --git a/programmer-guide/images/s2-logo.png b/programmer-guide/src/docs/asciidoc/assets/images/s2-logo.png
similarity index 100%
rename from programmer-guide/images/s2-logo.png
rename to programmer-guide/src/docs/asciidoc/assets/images/s2-logo.png
Binary files differ
diff --git a/programmer-guide/images/start.png b/programmer-guide/src/docs/asciidoc/assets/images/start.png
similarity index 100%
rename from programmer-guide/images/start.png
rename to programmer-guide/src/docs/asciidoc/assets/images/start.png
Binary files differ
diff --git a/programmer-guide/images/virgo-logo-large.png b/programmer-guide/src/docs/asciidoc/assets/images/virgo-logo-large.png
similarity index 100%
rename from programmer-guide/images/virgo-logo-large.png
rename to programmer-guide/src/docs/asciidoc/assets/images/virgo-logo-large.png
Binary files differ
diff --git a/programmer-guide/images/virgo-logo-small.png b/programmer-guide/src/docs/asciidoc/assets/images/virgo-logo-small.png
similarity index 100%
rename from programmer-guide/images/virgo-logo-small.png
rename to programmer-guide/src/docs/asciidoc/assets/images/virgo-logo-small.png
Binary files differ
diff --git a/programmer-guide/images/welcome.png b/programmer-guide/src/docs/asciidoc/assets/images/welcome.png
similarity index 100%
rename from programmer-guide/images/welcome.png
rename to programmer-guide/src/docs/asciidoc/assets/images/welcome.png
Binary files differ
diff --git a/programmer-guide/src/docs/asciidoc/common-libraries.adoc b/programmer-guide/src/docs/asciidoc/common-libraries.adoc
new file mode 100644
index 0000000..ad7551c
--- /dev/null
+++ b/programmer-guide/src/docs/asciidoc/common-libraries.adoc
@@ -0,0 +1,95 @@
+:virgo-name: Virgo
+:version: 3.7.0.RC01
+
+:umbrella-virgo-name: Eclipse Virgo
+:tomcat-product-name: Virgo for Apache Tomcat
+:tomcat-product-name-short: VTS
+:jetty-product-name: Virgo Jetty Server
+:jetty-product-name-short: VJS
+:kernel-product-name: Virgo Kernel
+:kernel-product-name-short: VK
+:nano-product-name: Virgo Nano
+:nano-product-name-short: VN
+:user-guide: link:../../virgo-user-guide/html/index.html[User Guide]
+:tooling-guide: link:../../virgo-tooling-guide/html/index.html[Tooling Guide]
+
+:gemini-blueprint-guide: https://www.eclipse.org/gemini/blueprint/documentation/reference/2.0.0.RELEASE/html/index.html[Eclipse Gemini Blueprint Reference Guide]
+
+:spring-framework-version: 4.2.9.RELEASE
+
+:homepage: https://www.eclipse.org/virgo
+:ebr: http://www.eclipse.org/ebr[EBR]
+
+:imagesdir: assets/images
+
+anchor:common-libraries[]
+
+== Working with Common Enterprise Libraries
+
+Common Libraries
+
+anchor:common-libraries-hibernate[]
+
+=== Working with Hibernate
+
+anchor:common-libraries-hibernate-import[]
+
+==== Importing Hibernate
+
+Hibernate uses CGLIB to dynamically create subclasses of your entity types at
+runtime. To guarantee that Hibernate and CGLIB can correctly see the types,
+you must add an `Import-Library` or `Import-Bundle` for the Hibernate library or bundle
+into any bundle that uses Hibernate directly.
+
+Additionally, if other bundles in your application contain types to be persisted by Hibernate, then be sure to specify the `import-scope` directive of the `Import-Bundle` header in the bundle that uses Hibernate directly.  The `import-scope` directive tells {tomcat-product-name} to implicitly import the bundle into all other bundles that make up the application; this ensures that bundles that indirectly depend on the generated Hibernate classes have access to them, but you do not have to explicitly update their `Import-Bundle` header, ensuring modularity.  For example:
+
+[source,txt]
+----
+Import-Bundle: com.springsource.org.hibernate;version="[3.2.6.ga,3.2.6.ga]";import-scope:=application
+----
+
+The `import-scope` directive works only for the bundles in a scoped application (PARs or plans.)
+
+anchor:common-libraries-datasources[]
+
+=== Working with DataSources
+
+Many `DataSource` implementations use the `DriverManager`
+class which is incompatible with typical OSGi class loading semantics. To get around this,
+use a `DataSource` implementation that does not rely on
+`DriverManager`. Versions of the following
+`DataSources` that are known to work in an OSGi environment are available in the
+{ebr}.
+
+* http://build.eclipse.org/rt/virgo/ivy/bundles/release/org.eclipse.virgo.mirrored/org.apache.commons.dbcp/[Apache Commons DBCP]
+* SimpleDriverDataSource available in http://build.eclipse.org/rt/virgo/ivy/bundles/release/org.eclipse.virgo.mirrored/org.springframework.jdbc/[Spring JDBC] 2.5.5 and later
+
+anchor:common-libraries-weaving-instrumentation[]
+
+=== Weaving and Instrumentation
+
+When using a library that performs bytecode weaving or instrumentation, such as AspectJ,
+OpenJPA or EclipseLink, any types that are woven must be able to see the library doing
+the weaving. This is accomplished by adding an `Import-Library` for the
+weaving library into all bundles that are to be woven.
+
+Weaving is often used by JPA implementations to transform persisted types. When using a
+JPA provider that uses load-time weaving, an `Import-Library` for the
+provider is needed in the bundles containing the persisted types.
+
+anchor:common-libraries-tld[]
+
+=== JSP Tag Libraries
+
+When using tag libraries within a WAR or WAB, be sure to include an `Import-Bundle`
+or `Import-Library` for the tag library bundle(s). This will ensure that your WAR or WAB
+can see the TLD definition and implementing types. For example, to use the Apache implementation of JSTL,
+add the following to your bundle's `/META-INF/MANIFEST.MF`:
+
+[source,txt]
+----
+Import-Bundle: com.springsource.org.apache.taglibs.standard;version="1.1.2"
+----
+
+`Import-Package` can also be used but it is tedious to add all the imports as there are
+typically lots of tld definitions in a bundle providing them.
diff --git a/programmer-guide/src/docs/asciidoc/developing-applications.adoc b/programmer-guide/src/docs/asciidoc/developing-applications.adoc
new file mode 100644
index 0000000..e43e05d
--- /dev/null
+++ b/programmer-guide/src/docs/asciidoc/developing-applications.adoc
@@ -0,0 +1,966 @@
+:virgo-name: Virgo
+:version: 3.7.0.RC01
+
+:umbrella-virgo-name: Eclipse Virgo
+:tomcat-product-name: Virgo for Apache Tomcat
+:tomcat-product-name-short: VTS
+:jetty-product-name: Virgo Jetty Server
+:jetty-product-name-short: VJS
+:kernel-product-name: Virgo Kernel
+:kernel-product-name-short: VK
+:nano-product-name: Virgo Nano
+:nano-product-name-short: VN
+:user-guide: http://www.eclipse.org/virgo/documentation/virgo-documentation-{version}/docs/virgo-user-guide/html/index.html[User Guide]
+:tooling-guide: http://www.eclipse.org/virgo/documentation/virgo-documentation-3.6.4.RELEASE/docs/virgo-tooling-guide/html/index.html[Tooling Guide]
+
+:gemini-blueprint-guide: https://www.eclipse.org/gemini/blueprint/documentation/reference/2.0.0.RELEASE/html/index.html[Eclipse Gemini Blueprint Reference Guide]
+
+:spring-framework-version: 4.2.9.RELEASE
+
+:homepage: https://www.eclipse.org/virgo
+:ebr: http://www.eclipse.org/ebr[EBR]
+
+:imagesdir: assets/images
+
+anchor:developing-applications[Developing Applications]
+
+== Developing Applications
+
+Applications that take advantage of the OSGi capabilities of {virgo-name}
+are typically comprised of multiple bundles. Each bundle may have dependencies on
+other bundles. Furthermore, each bundle exposes only certain packages and
+services. In this chapter, we look at how to create bundles, import and export
+appropriate functionality, and create artifacts to deploy web applications on the {tomcat-product-name}.
+
+anchor:developing-applications-bundle[]
+
+=== Anatomy of a Bundle
+
+[TIP]
+--
+This is an abbreviated introduction to OSGi bundles. Please refer to the {gemini-blueprint-guide} for full details.
+--
+
+An OSGi bundle is simply a jar file with metadata that describe
+additional characteristics such as version and imported and exported packages.
+
+A bundle exports types and publishes services to be used by other bundles:
+
+* *Types*: via the OSGi `Export-Package` directive,
+* *Services*: via Gemini Blueprint's `<service ... >` XML namespace element.
+
+A bundle may import types and services exported by other bundles:
+
+* *Types*: via the OSGi `Import-Package` directive,
+* *Services*: via Gemini Blueprint's `<reference ... >` XML namespace element.
+
+Let's see an example from the PetClinic sample application. The following listing shows the
+`MANIFEST.MF` file for the `org.springframework.petclinic.infrastructure.hsqldb` bundle.
+
+.MANIFEST.MF
+[source,txt]
+----
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: PetClinic HSQL Database Infrastructure
+Bundle-SymbolicName: org.springframework.petclinic.infrastructure.hsqldb
+Bundle-Version: 1.0
+Import-Library: org.springframework.spring;version="[2.5,2.6]"
+Import-Bundle: com.springsource.org.apache.commons.dbcp;version="[1.2.2.osgi,1.2.2.osgi]",
+ com.springsource.org.hsqldb;version="[1.8.0.9,1.8.0.9]"
+Import-Package: javax.sql
+Export-Package: org.springframework.petclinic.infrastructure
+----
+
+The `org.springframework.petclinic.infrastructure.hsqldb` bundle expresses its dependencies on
+the `javax.sql` package, the Commons DBCP and HSQLDB bundles, and the Spring library (we will examine
+the details of the library artifact in xref:developing-applications-defining-libraries[]. The Commons DBCP
+bundle is imported at a version of exactly `1.2.2.osgi` and the HSQLDB bundle is imported at a version of exactly
+`1.8.0.9`. The Spring library is imported at a version between `2.5` inclusive and `2.6` exclusive.
+
+Note that you do not specify the bundle that will provide the imported packages.
+{virgo-name} will examine the available bundles and satisfy the required dependencies.
+
+The following `osgi-context.xml` file from the PetClinic sample's
+`org.springframework.petclinic.repository.jdbc` bundle declares a service published by the bundle and
+references a service published by another bundle.
+
+.osgi-context.xml
+[source,xml]
+----
+<?xml version="1.0" encoding="UTF-8"?>
+<beans:beans xmlns="http://www.springframework.org/schema/osgi"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns:beans="http://www.springframework.org/schema/beans"
+    xsi:schemaLocation="http://www.springframework.org/schema/osgi  
+        http://www.springframework.org/schema/osgi/spring-osgi.xsd
+        http://www.springframework.org/schema/beans   
+        http://www.springframework.org/schema/beans/spring-beans.xsd">
+
+    <service id="osgiClinic" ref="clinic" interface="org.springframework.petclinic.repository.Clinic" />
+    <reference id="dataSource" interface="javax.sql.DataSource"/>
+
+</beans:beans>
+----
+
+The `service` element publishes the `clinic` bean
+(a regular Spring bean declared in the `module-context.xml` file) and specifies
+`org.springframework.petclinic.repository.Clinic` as the type
+of the published service.
+
+The `reference` elements define a `dataSource` bean that references
+a service published by another bundle with a an interface type of `javax.sql.DataSource`.
+
+anchor:developing-applications-packaging[Creating PARs and Web Applications]
+
+=== Creating PARs and Web Applications
+
+{virgo-name} supports two OSGi-oriented ways of packaging applications: the PAR format
+and application bundles (including web bundles). The {tomcat-product-name-short} also supports three
+distinct WAR deployment and packaging formats: standard Java EE WAR, Shared Libraries WAR, Shared Services WAR.
+
+{virgo-name} also supports plans as a way to describe an application. This method is similar to a PAR
+in that it encapsulates all the artifacts of an application as a single unit, but differs in that a plan simply
+lists the bundles in an XML file rather than packaging all the bundles in a single JAR file.  The use of plans
+offers additional benefits to using PARs; for this reason, we recommend their use.  For details, see
+xref:developing-applications-plans[].
+
+anchor:developing-applications-packaging-par[]
+
+==== PARs
+
+An OSGi application is packaged as a JAR file, with extension `.par`. A PAR artifact offers several benefits:
+
+* A PAR file has an application name, version, symbolic name, and description.
+* The artifacts of a PAR file are scoped so that they cannot
+be shared accidentally by other applications. The scope forms a boundary for automatic
+propagation of load time weaving and bundle refresh.
+See xref:developing-applications-plans-scoping[Plans and Scoping] for more on scoping.
+* Since a PAR is scoped, its artifacts have their exported packages imported by the
+synthetic context bundle which is used for thread context class loading. So,
+for example, hibernate will be able to load classes of any of the exported
+packages of the bundles in a PAR file using the thread context class loader.
+* A PAR file is visible to management interfaces.
+* A PAR file can be undeployed and redeployed as a unit.
+* A PAR file is *atomic* in that it ties together the lifecycle of its artifacts. If you start, stop, or uninstall
+one of a PAR's artifacts, {virgo-name} escalates the operation to the whole PAR file.
+So {virgo-name} prevents artifacts of a PAR from being in inconsistent states.
+For example, if one artifact should fail to start, then {virgo-name} stops all artifacts in the PAR.
+
+See xref:developing-applications-plans-scoping[Plans and Scoping] for more information on scoping.
+
+A PAR includes one or more application bundles and its manifest specifies the following
+manifest headers:
+
+anchor:developing-applications-packaging-par-headers-table[]
+
+[options="header",cols=","]
+.PAR file headers
+|=======================================================================
+| Header                     | Description
+| `Application-SymbolicName` | Identifier for the application which, in combination with Application-Version, uniquely identifies an application
+| `Application-Name`         | Human readable name of the application
+| `Application-Version`      | Version of the application
+| `Application-Description`  | Short description of the application
+|=======================================================================
+
+The following code shows an example MANIFEST.MF in a PAR file:
+
+.MANIFEST.MF
+[source]
+----
+Application-SymbolicName: com.example.shop
+Application-Version: 1.0
+Application-Name: Online Shop
+Application-Description: Example.com's Online Shopping Application
+----
+
+anchor:developing-applications-web-application-bundles
+
+==== Web Application Bundles
+
+{tomcat-product-name} supports Web Application Bundles that are compliant with the OSGi Web Applications specification.
+The defining property of a Bundle that makes it a Web Application Bundle is a manifest header, `Web-ContextPath`.
+This defines the context path the web application will be registered under.
+
+See xref:using-spring[Using Spring and Gemini Blueprint] for information on using Spring or Gemini Blueprint in a Web Application Bundle.
+
+anchor:developing-applications-plans[Creating Plans]
+
+=== Creating Plans
+
+Plans are similar to PARs in that they encapsulate the artifacts of an application as a single unit.
+However plans are XML files that refer to their artifacts, whereas PARs are JAR files that physically contain their artifacts.
+Plans, known as *parent* plans may refer to other plans, known as *child* plans.
+
+Plans share several benefits with PARs:
+
+* A plan has a (symbolic) name and a version.
+* A plan may be *scoped*, although this is optional.
+See xref:developing-applications-plans-scoping[Plans and Scoping] for more on scoping.
+* A plan is visible to management interfaces.
+* A plan can be undeployed and redeployed as a unit.
+* A plan may be *atomic*, although this is optional.
+
+Plans have the following additional benefits compared to PARs:
+
+* {virgo-name} deploys the artifacts in the plan in the order in which they are listed in the XML file, which gives you
+complete control over deployment order.
+With a PAR, the order of deployment of the included artifacts is not guaranteed.
+* Since plans refer to their artifacts, it is easier to share content between plans as well as update individual
+parts of a plan without having to physically repackage (re-JAR) it.
+* Plans may contain child plans, but PARs cannot contain other PARs.
+* You can make certain plans deploy faster by disabling the provisioning of bundles to satisfy missing dependencies,
+but you cannot disable provisioning for PARs.
+* You can specify whether a plan is scoped or unscoped and atomic or non-atomic; PARs are always scoped and atomic.
+
+The artifacts of a plan are usually stored in {virgo-name}'s repository.  This means, for example, that if you drop one of the plan's artifacts in the `pickup` directory rather than adding it to the repository, the plan will fail to deploy because it will not find the artifact.
+
+The artifacts of a plan may also be stored outside {virgo-name}'s repository, somewhere else on the file system and referenced from the plan using URIs.
+Such artifacts must be available on the file system when the plan is deployed and when {virgo-name} restarts while the plan is deployed.
+If you delete any of these artifacts, deployment of the plan may fail, either when it is initially deployed or when {virgo-name} restarts.
+
+anchor:developing-applications-plans-create[]
+
+==== Creating the Plan XML File
+
+Plans are XML files that have a `.plan` file extension, such as `multi-artifact.plan`.
+The structure of the XML file is simple:
+the root element is `<plan>` with attributes specifying the name of the plan, the version, atomicity, and scoping.
+Then, for each artifact that makes up your application,
+you add a `<artifact>` element, using its attributes to specify the type of artifact and its name and version.
+The following is a simple example of a plan's XML file:
+
+[source,xml]
+----
+<?xml version="1.0" encoding="UTF-8"?>
+<plan name="multi-artifact.plan" version="1.0.0" scoped="true" atomic="true"
+        xmlns="http://www.eclipse.org/virgo/schema/plan"
+		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+		xsi:schemaLocation="
+		        http://www.eclipse.org/virgo/schema/plan
+		        http://www.eclipse.org/virgo/schema/plan/eclipse-virgo-plan.xsd">
+
+    <artifact type="configuration" name="app-properties" version="1.0.0"/>
+    <artifact type="bundle" name="com.springsource.exciting.app" version="[2.0.0, 3.1.0)"/>
+
+</plan>
+----
+
+In the preceding example, the name of the plan is `multi-artifact.plan` and its version is `1.0.0`.
+The plan is both scoped and atomic. The plan contains two artifacts: one is a bundle called `com.springsource.exciting.app` and the other is a configuration file called `app-properties`.
+
+The following table describes the attributes of the `<plan>` element.
+
+[options="header",cols="1,3,1"]
+.PAR file headers
+|=======================================================================
+| Attribute | Description                                          | Required?
+| `name`    | Specifies the name of this plan.
+              {virgo-name} uses the name as one component of the unique
+              identifier of this plan.                             | Yes.
+| `version` | Specifies the version of this plan.
+              You must use OSGi version specification syntax,
+              such as `2.1.0`.
+              {virgo-name} uses the version as one component of
+              the unique identifier of this plan.                  | Yes.
+| `scoped`  | Specifies whether {virgo-name} should install the
+              artifacts into plan-specific scope so that only the
+              application described by this plan has access to the artifacts.
+              If you disable scoping, then {virgo-name} installs
+              the artifacts into the global scope, which means they
+              are then available for access by all other deployed artifacts.
+              Set the attribute to `true` to enable scoping or
+              `false` to disable it.                               | Yes.
+| `atomic`  | Specifies whether you want to tie together the lifecycle
+              of the artifacts in this plan.
+              Making a plan atomic means that if you start, stop, or
+              uninstall a single artifact in the plan, {virgo-name}
+              escalates the operation to the whole plan.
+              Also {virgo-name} prevents artifacts of an atomic plan
+              from being in inconsistent states.
+              For example, if one artifact should fail to start,
+              then {virgo-name} stops all artifacts in the plan.
+              Set this attribute to `true` to enable atomicity or
+              `false` to disable it.                               | Yes.
+| `provisioning`
+            | Specifies whether {virgo-name} installs bundles from
+              the repository to attempt to satisfy any missing
+              dependencies in the plan.
+              Missing dependencies prevent one or more bundles in
+              the plan from resolving.
+              For example, a bundle which imports a package cannot
+              resolve if the package is missing, that is, not
+              exported by another bundle. A value of
+              `auto` instructs {virgo-name} to install bundles from the repository
+              to attempt to satisfy any missing dependencies in the plan.
+              This is known as *auto-provisioning*.
+              A value of `disabled` prevents {virgo-name} from
+              installing bundles from the repository to attempt to
+			  satisfy any missing	dependencies in the plan.
+			  This value can make the plan deploy faster, although if
+			  there are missing dependencies, deployment will fail.
+              A value of `inherit`, which is the default if no value is specified, inherits the parent plan's provisioning behaviour.
+              If the plan does not have a parent, it inherits {virgo-name}'s
+              auto-provisioning behaviour.                         |No. If not specified, defaults to `inherit`.
+|=======================================================================
+
+
+The following table describes the attributes of the `<artifact>` element. Note that you must either specify `type`, `name`, and (optionally) `version`,
+in which case {virgo-name}'s repository is searched for the artifact, or `uri` in which case the artifact is obtained directly from the file system.
+If you specify `uri`, you must not specify `type`, `name`, or `version`.
+
+anchor:developing-applications-plans-create-artifact-attributes[]
+
+[options="header",cols="1,3,1"]
+.PAR file headers
+|=======================================================================
+| Attribute | Description                                          | Required?
+| `type`    | Specifies the type of the artifact. Valid values are:
+
+`bundle`: Specifies an OSGi bundle.  Use this artifact type for WAR files and Web application bundles.
+`configuration`: Specifies that the artifact is a configuration file.  Configuration files contain name/value pairs that set initial values for configuration properties of a bundle.
+`plan`: Specifies that the artifact is a plan.
+`par`: Specifies that the artifact is a PAR.                       | Yes, unless `uri` is specified in which case `type` must not be specified and is automatically determined from the artifact.
+| `name`    | Specifies the name of the artifact.
+See xref:artifact-names[Artifact Names] for guidelines for determining
+the name of an artifact.                                           | Yes, unless `uri` is specified in which case `name` must not be specified and is automatically determined from the artifact.
+| `version` | Specifies the range of versions of this artifact that
+              {virgo-name} should look up in its repositories and
+              then install and deploy.
+              You must use OSGi version specification syntax,
+              such as `[1.0.0, 2.0.0)`.
+              Note that a single version number represents the range
+              from that version number upwards.
+              For example, `1.3` represents the range of versions
+              greater than or equal to `1.3`.                      | No. If `uri` is specified, `version` must not be specified.
+							If neither `uri` nor `version` are specified, `version` defaults to `0`, which in OSGi means 0 to infinity, or any version.
+| `uri`     | Specifies an optional, absolute URI string beginning
+              with `file:` that refers to the artifact on the file system.
+              Such an artifact must be available on the file system
+              when the plan is deployed and when {virgo-name} restarts
+              while the plan is deployed.
+              If you delete such an artifact, deployment of the plan may fail,
+              either when it is initially deployed or when {virgo-name} restarts.
+              This attribute is normally omitted so that the artifact
+              is searched for in {virgo-name}'s repository.      | No. If not specified, {virgo-name} searches for the artifact in its repository.
+|=======================================================================
+
+anchor:artifact-names[]
+
+==== Artifact Names
+
+When you create a plan, you use the `name` attribute of the `<artifact>` element to specify the name of all the plan's dependencies.  This section describes how to determine the name of an artifact, which is not always obvious.
+
+Use the following guidelines to determine the name of an artifact:
+
+* *Bundle*: In this context, a *bundle* refers to a standard OSGi bundle as well as a Web Application Bundle and a WAR file.  The name of a bundle is the value of the `Bundle-SymbolicName` header in the `META-INF/MANIFEST.MF` file of the `*.jar`.
+If a WAR file has `Bundle-SymbolicName` header then it will be treated as a Web Application Bundle. The following `MANIFEST.MF` snippet shows a bundle with name `com.springsource.exciting.app`:
+
+....
+Bundle-SymbolicName: org.eclispe.virgo.exciting.app
+....
+
+If the bundle does not contain a `META-INF/MANIFEST.MF` file or the `MANIFEST.MF` doesn't contain a `Bundle-SymbolicName` header, then the name of the bundle is its filename minus the `.jar` or `.war` extension.
+
+* *Configuration File*: The name of a configuration or PID (Persistent Identity) is its filename minus the `.properties` extension. The PID can also be specified within the properties file with the
+					*service.pid* property.
+* *Plan*: The name of a plan is the value of the required `name` attribute of the `<plan>` element in the plan's XML file.  In the following XML snippet, the plan name is `multi-artifact.plan`:
+
+....
+<?xml version="1.0" encoding="UTF-8"?>
+<plan name="multi-artifact.plan" version="1.0.0" scoped="true" atomic="true"
+        xmlns="http://www.eclipse.org/virgo/schema/plan">
+....
+* *PAR*: The name of a PAR is the value of the `Application-SymbolicName` header in the `META-INF/MANIFEST.MF` file of the `*.par` file.   The following `MANIFEST.MF` snippet shows a PAR with name `com.springsource.my.par`:
+
+....
+Application-SymbolicName: org.eclipse.virgo.my.par
+....
+
+If the PAR does not contain a `META-INF/MANIFEST.MF` file, then the name of the PAR is its filename minus the `.par` extension.
+
+anchor:passing-properties[]
+
+==== Supplying Properties to Artifacts
+
+It is possible to pass properties to an artifact specified in a plan. An example of this can be seen in the Admin Console plan where the context path to be used in the Admin console is passed from the plan.
+
+[source,xml]
+----
+<artifact type="bundle" name="org.eclipse.virgo.apps.admin.web" version="[3.0, 4.0)">
+    <property name="header:Web-ContextPath" value="/admin" />
+</artifact>
+----
+
+The only supported property is `header` which will overwrite the given manifest header with the supplied value. This should be used with care!
+
+anchor:developing-applications-plans-use[]
+
+==== Using the Plan
+
+Because a plan is a list of artifacts, rather than a physical file that contains the artifacts, there are a few additional steps you must perform before you deploy it to {virgo-name}.
+
+. Copy the artifacts that make up the plan to the `usr` repository, which by default is the `$SERVER_HOME/repository/usr` directory, where `$SERVER_HOME` refers to the top-level installation directory of {virgo-name}.  Note that you might have configured the server differently; in which case, copy the artifacts to your custom repository directory.
+. Restart {virgo-name} if the repository used is not a *watched* repository.
+. After the server has started, either use the Admin Console to deploy the plan, or manually deploy it by copying the plan's XML file into the `$SERVER_HOME/pickup` directory.
+. This results in {virgo-name} deploying the plan.
+. To undeploy the plan, use the Admin Console, or simply delete it from the `$SERVER_HOME/pickup` directory.
+
+anchor:developing-applications-plans-scoping[]
+
+==== Plans and Scoping
+
+As described in previous sections, you can specify that a plan be *scoped*.  This means that {virgo-name} installs the artifacts that make up the plan into a plan-specific scope so that only the application described by the plan has access to the artifacts. If you disable scoping, then {virgo-name} installs the artifacts into the global scope, which means they are available for access by all other deployed artifacts. This section describes scoping in a bit more detail.  It also describes how you can change the default behavior of scoping, with respect to services, so that a service that is in a scope can be made globally available.
+
+If a bundle in a given scope imports a package and a bundle in the same scope exports the package, then the import may only be satisfied by the bundle in the scope, and not by any bundles outside the scope, including the global scope.   Similarly, package exports from bundles in a scope are not visible to bundles in the global scope.
+
+If a bundle in a scope uses Spring DM (or the blueprint service) to obtain a service reference and a bundle in the same scope uses Spring DM (or the blueprint service) to publish a matching service, then the service reference may only bind to the service published in the scope (and not to any services outside the scope).  Services published by bundles in a scope are not visible to bundles in the global scope.
+
+However, sometimes it is useful to make a service in a scope globally available to artifacts outside the scope.  To do this, publish the service with the `org.eclipse.virgo.service.scope` service property set to `global`.  Use the `<service-properties>` child element of `<service>`, as shown in the following example:
+
+[source,xml]
+----
+<service id="publishIntoGlobal" interface="java.lang.CharSequence">
+  <service-properties>
+    <beans:entry key="org.eclipse.virgo.service.scope" value="global" />
+  </service-properties>
+  <beans:bean class="java.lang.String">
+    <beans:constructor-arg value="foo"/>
+  </beans:bean>
+</service>
+----
+
+A scope forms a boundary for automatic propagation of load time weaving and bundle refresh.
+Additionally, a synthetic context bundle is generated for each scope. This bundle imports all the packages exported by other bundles in the scope.
+The class loader of the synthetic context bundle is used for thread context class loading. So,
+for example, hibernate will be able to load classes of any of the exported
+packages of the bundles in a scope using the thread context class loader.
+
+To ensure predictable class loading behaviour and avoid other issues associated with *split packages* (packages whose classes
+are split across more than one bundle), the synthetic context bundle has a restriction:
+no package may be exported by more than one
+bundle in the scope*.
+If this restriction is broken, the scoped application will fail to deploy.
+This restriction can cause problems for xref:scoping-and-substitutable-exports[substitutable exports].
+
+anchor:developing-applications-plans-scoping-webapps[]
+
+==== Web Applications and Scoping
+
+A Web Application Bundle (WAB) or WAR has its bundle class loader set as the TCCL, even when the WAB or WAR belongs to
+a PAR or scoped plan.
+To enable the TCCL to load classes of other bundles in the same scope as a WAB or WAR, use a WAB which imports the necessary packages.
+
+Also a WAB or WAR has its own per-application trace, independent of the per-application trace of any PAR or scoped plan to which the
+WAB or WAR belongs.
+
+
+anchor:developing-applications-configuration-artifacts[]
+
+=== Creating and Using Configuration Artifacts
+
+Applications typically include some sort of configuration data
+that might change depending on the environment in which the
+application is deployed. For example, if an application connects to a
+database server using JDBC, the configuration data would include the
+JDBC URL of the database server, the JDBC drvier, and the username and
+password that the application uses to connect to the database server.
+This information often changes as the application is deployed to
+different computers or the application moves from the testing phase to
+the production phase.
+
+{virgo-name} provides a feature called
+*configuration artifacts*
+that makes it very easy for you to manage this configuration data. A
+configuration artifact is simply a properties file that is made
+available at runtime using the OSGi
+`ConfigurationAdmin`
+service. When you create this properties file, you set the values of
+the properties for the specific environment in which you are going to
+deploy your application, and then update the metadata of your Spring
+application to use the properties file. You then deploy the
+application and properties file together, typically as a
+xref:developing-applications-plans[plan]. {virgo-name} automatically creates a configuration artifact from
+the properties file, and you can manage the lifecycle of this
+configuration artifact in the same way you manage the lifecycle of
+PARs, bundles, and plans, using the Admin
+Console. Additionally, {virgo-name} subscribes your
+application for notification of any refresh of the configuration
+artifact and the application can then adapt accordingly, which means
+you can easily
+*change*
+the configuration of your application without redeploying it.
+
+In sum, configuration artifacts, especially when combined with
+plans, provide an excellent mechanism for managing external
+configuration data for your applications.
+
+The following sections describe the format of the configuration
+artifact, how to update the Spring application context file of your
+application so that it knows about the configuration artifact, and
+finally how to include it in a plan alongside your application.
+
+As an example to illustrate the configuration artifact feature, assume
+that you have a Spring bean called
+`PropertiesController`
+whose constructor requires that four property values be passed to it,
+as shown in the following snippet of Java code:
+
+[source,java]
+----
+@Controller
+public class PropertiesController {
+
+    private final String driverClassName;
+    private final String url;
+    private final String username;
+    private final String password;
+
+    public PropertiesController(String driverClassName, String url, String username, String password) {
+        this.driverClassName = driverClassName;
+        this.url = url;
+        this.username = username;
+        this.password = password;
+}
+----
+
+In the preceding example, the `PropertiesController` constructor requires four property values: `driverClassName`, `url`, `username`, and `password`.  Note that the example shows just one way that a class might require property values; your application may code it another way.
+
+Additionally, assume that the following snippet of the associated Spring application context XML file shows how the `PropertiesController` bean is configured:
+
+[source,xml]
+----
+<bean class="com.springsource.configuration.properties.PropertiesController">
+                <constructor-arg value="${driverClassName}"/>
+                <constructor-arg value="${url}"/>
+                <constructor-arg value="${username}"/>
+                <constructor-arg value="${password}"/>
+</bean>
+----
+
+The rest of this section describes how the bean can get these property values using a configuration artifact.
+
+anchor:developing-applications-configuration-artifacts-propfile[]
+
+==== Creating the Properties File
+
+To create a properties file that in turn will become a configuration artifact when deployed to {virgo-name} from which a Spring bean, such as the `PropertiesController` bean, will get the actual property values, follow these guidelines:
+
+* Create a text file in which each property is listed as a name/value pair, one pair per line.  Precede comments with a `#`.  For example:
+....
+# Properties for the com.springsource.configuration.properties sample
+
+driverClassName   = org.w3.Driver
+url               = http://www.springsource.com
+username          = joe
+password          = secret
+....
+
+The example shows four properties whose name correspond to the constructor arguments of the `PropertiesController` Spring bean.
+
+* Name the file anything you want, as long as it has a `.properties` extension, such as `app-properties.properties`.
+
+anchor:developing-applications-configuration-artifacts-app[]
+
+==== Updating Your Application
+
+To update your application so that it "knows" about the configuration artifact, you update the application's Spring application context XML file, typically located in the `WEB-INF` or `META-INF/spring` directories (read xref:using-spring[Using Spring and Gemini Blueprint]
+to understand which directory to use).
+
+You use the `<context:property-placeholder>` element to specify that you want to use the {virgo-name} mechanism for substituting values into bean properties.  The `properties-ref` attribute of this element points to a `<osgi-compendium:cm-properties>` element which you use to specify the configuration artifact that contains the property values.  You set the value of the `persistent-id` attribute of this element equal to the name of the configuration artifact, which is the name of the properties file *minus* the `.properties` extension.
+
+The following sample Spring application context XMl file shows everything wired together; only relevant parts of the file are shown:
+
+[source,xml]
+----
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xmlns:context="http://www.springframework.org/schema/context"
+  xmlns:osgi-compendium="http://www.springframework.org/schema/osgi-compendium"
+  xsi:schemaLocation="http://www.springframework.org/schema/osgi 
+    http://www.springframework.org/schema/osgi/spring-osgi-1.2.xsd
+    http://www.springframework.org/schema/beans 
+    http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
+    http://www.springframework.org/schema/context 
+    http://www.springframework.org/schema/context/spring-context-2.5.xsd
+    http://www.springframework.org/schema/osgi-compendium 
+    http://www.springframework.org/schema/osgi-compendium/spring-osgi-compendium-1.2.xsd">
+
+...
+
+        <bean class="com.springsource.configuration.properties.PropertiesController">
+                <constructor-arg value="${driverClassName}"/>
+                <constructor-arg value="${url}"/>
+                <constructor-arg value="${username}"/>
+                <constructor-arg value="${password}"/>
+        </bean>
+
+        <context:property-placeholder properties-ref="configAdminProperties"/>
+
+        <osgi-compendium:cm-properties id="configAdminProperties" persistent-id="app-properties"/>
+
+...
+
+</beans>
+----
+
+The preceding example shows how the id `configAdminProperites` wires the `<context:property-placeholder>` and `<osgi-compendium:cm-properties>` elements together.  Based on the value of the `persistent-id` attribute, you must also deploy a properties file called `app-properties.properties` which {virgo-name} installs as a configuration artifact.
+
+anchor:developing-applications-configuration-artifacts-plan[]
+
+==== Adding the Configuration Artifact to a Plan
+
+Although you can always deploy your application and associated configuration artifact using the `pickup` directory, we recommends that you group the two together in a plan, add the two artifacts to the repository, and then deploy the plan using the `pickup` directory.  The following sample plan includes the two artifacts:
+
+[source,xml]
+----
+<?xml version="1.0" encoding="UTF-8"?>
+<plan name="multi-artifact.plan" version="1.0.0"
+         scoped="false" atomic="false"
+        xmlns="http://www.eclipse.org/virgo/schema/plan"
+		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+		xsi:schemaLocation="
+		        http://www.eclipse.org/virgo/schema/plan
+		        http://www.eclipse.org/virgo/schema/plan/eclipse-virgo-plan.xsd">
+
+    <artifact type="configuration" name="app-properties" version="0"/>
+    <artifact type="bundle" name="org.eclipse.virgo.configuration.properties" version="1.0.0"/>
+</plan>
+----
+
+For additional information about plans, see xref:developing-applications-plans[Creating Plans].
+
+anchor:using-spring[]
+
+=== Using Spring and Gemini Blueprint
+
+{virgo-name} supports the use of Spring framework and Gemini Blueprint by application bundles.
+
+Spring (and Gemini Blueprint) application context XML files should generally be placed in a bundle's `META-INF/spring` directory, but
+for a web application, these files must be placed in the `WEB-INF` directory.
+
+
+.A common mistake
+[TIP]
+--
+Placing a web application's Spring application context XML files in the `META-INF/spring` directory produces
+unpredictable results since	Spring DM will attempt to build an application context independently of, and asynchronously from,
+the web application.
+--
+
+To use Gemini Blueprint from a web application, the `contextClass` servlet parameter and the servlet context listener
+should be configured (in `WEB-INF/web.xml`) like this:
+
+[source,xml]
+----
+<context-param>
+    <param-name>contextClass</param-name>
+    <param-value>org.eclipse.virgo.web.dm.ServerOsgiBundleXmlWebApplicationContext</param-value>
+</context-param>
+
+<listener>
+    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
+</listener>
+----
+
+{virgo-name} has Gemini Blueprint built-in and thereby supports the OSGi Blueprint standard in addition to Spring DM.
+
+For detailed information on Spring Framework and Blueprint, please see xref:prerequisites-references[].
+
+anchor:developing-applications-programmatic-access[]
+
+=== Programmatic Access to the Servlet Context
+
+This section describes how to programmatically access the servlet context to obtain the WebApplicationContext or the BundleContext.
+
+anchor:developing-applications-programmatic-access-web[]
+
+==== Programmatic Access to Web Features
+
+anchor:developing-applications-programmatic-access-web-application-context[]
+
+==== Programmatic Access to the WebApplicationContext
+
+The {tomcat-product-name} automatically creates a `WebApplicationContext`
+for Web Application Bundles and WAR files. When used in conjunction with an
+an auto-configured Spring MVC `DispatcherServlet`,
+there is generally no need to access the `WebApplicationContext`
+programmatically, since all components of the web application are configured
+within the scope of the `WebApplicationContext`
+itself. However, if you wish to access the `WebApplicationContext`
+you can do so via the web application's `ServletContext`.
+{virgo-name} stores the bundle's
+`WebApplicationContext` in the ServletContext under
+the attribute name "`BSN-ApplicationContext`", where
+`BSN` is the `Bundle-SymbolicName`
+of your WAR or Web Application Bundle.
+
+Alternatively, since {virgo-name} also stores the
+`WebApplicationContext` under the attribute name
+with the value of the `WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE`
+constant, you may choose to use Spring MVC's WebApplicationContextUtils'
+`getWebApplicationContext(servletContext)`
+or
+`getRequiredWebApplicationContext(servletContext)`
+methods to access the `WebApplicationContext` without providing
+an explicit attribute name.
+
+anchor:developing-applications-programmatic-access-web-bundle-context[]
+
+==== Programmatic Access to the BundleContext
+
+As required by the OSGi Web Applications specification, you can access the
+`BundleContext` of your WAR or Web Application Bundle via the web application's
+`ServletContext`. The bundle context is stored in the
+`ServletContext` under the attribute name `osgi-bundlecontext`.
+
+anchor:developing-applications-automatic-imports-web[]
+
+=== Web Application Manifest Processing
+{tomcat-product-name} generates automatic package imports (i.e., via the
+`Import-Package` manifest header) for certain web applications.
+This section lists which packages are automatically generated.
+
+{tomcat-product-name-short} supports Web Application Bundles (WABs) as defined by the OSGi Web Applications Specification and WAR files.
+A WAR will typically not contain any OSGi defined manifest headers.
+A WAB is distinguished from a WAR by the presence of one or more of the following OSGi defined headers:
+
+* `Bundle-SymbolicName`
+* `Bundle-Version`
+* `Bundle-ManifestVersion`
+* `Import-Package`
+* `Web-ContextPath`
+
+As required by the OSGi Web Applications specification, the following defaults are applied to a WAR:
+
+* `Bundle-ManifestVersion` is set to `2`
+* `Bundle-SymbolicName` is generated from the path from which the bundle was installed
+* `Bundle-ClassPath` is set to `WEB-INF/classes` followed by the JARs in
+`WEB-INF/lib` in an unspecified order, followed by any transitive dependencies declared
+by the JARs in `WEB-INF/lib`
+* `Import-Package` is extended in an implementation defined way, as described below
+
+The following packages are automatically imported into WARs:
+
+* `javax.servlet;version="2.5"`
+* `javax.servlet.http;version="2.5"`
+* `javax.servlet.jsp;version="2.1"`
+* `javax.servlet.jsp.el;version="2.1"`
+* `javax.servlet.jsp.tagext;version="2.1"`
+* `javax.el;version="1.0"`
+
+In addition to the above-described imports, {tomcat-product-name-short} will also
+generate automatic imports for all of the packages that are exported by the system
+bundle, unless an import for the package already exists in the WAR's manifest,
+or the WAR contains the package, i.e. within `WEB-INF/classes`,
+or in a jar file in `WEB-INF/lib`. When an import is generated, it
+is versioned such that it exactly matches the version or versions of the package that
+are exported from the system bundle. For example, a package that's exported only at
+version `1.0.0` will generate an import with a version of
+`[1.0.0,1.0.0]`, and a package that's exported at version
+`1.0.0` and version `2.0.0` will generate an import
+with a version of `[1.0.0,2.0.0]`.
+
+Web Application Bundles are not subject to the above manifest processing.
+This is a change of behaviour compared to Virgo Web Server 2.1.x.
+See (see xref:known-issues-web-bundle-default-headers[Default Web
+Application Bundle Headers]) if you need the old behaviour until you
+have changed your WABs to match the new behaviour.
+
+{tomcat-product-name-short} supports ROOT.war as a default web application. The `Web-ContextPath`
+of the deployed ROOT.war is set to the default web context path - `/`.
+
+.System Bundle Package Exports
+[TIP]
+--
+For further details on which packages are exported by the
+OSGi system bundle, consult the <filename>java-server.profile</filename>
+file located in the `SERVER_HOME/configuration` directory.
+--
+
+anchor:developing-applications-dependencies[]
+
+=== Working with Dependencies
+
+Complex enterprise frameworks such a Spring and Hibernate are typically divided into many, many different
+packages. Traditionally, if an OSGi bundle wished to make extensive use of such a framework its manifest would
+have to import a huge number of different packages. This can be an error-prone and tedious process. Furthermore,
+application developers are used to thinking in terms of their application using a framework, such as Spring, as a
+whole, rather than a long list of all the different packages that comprise the framework.
+
+The following figure provides a simple illustration of the complexity of only using `Import-Package`:
+
+image:import-package.png[]
+
+{virgo-name} reduces the need for long lists of imported packages by introducing two new manifest
+headers; `Import-Bundle` and `Import-Library`. The following figure provides an
+illustration of the simplification that these new headers offer:
+
+image:import-bundle_import-library.png[]
+
+As you can see, use of `Import-Bundle` and `Import-Library` can lead to a dramatic reduction
+in the number of imports that you need to include in an application bundle's manifest. Furthermore, `Import-Bundle`
+and `Import-Library` are simply aliases for `Import-Package`; at deployment time `Import-Bundle`
+and `Import-Library` header entries are automatically expanded into numerous `Import-Package` entries. This
+means that you retain the exact same semantics of using `Import-Package`, without having to go through the labourious
+process of doing so.
+
+anchor:developing-applications-importing-libraries[Importing Libraries]
+
+==== Importing Libraries
+
+A bundle in an application can declare a dependency on a library by using the
+{umbrella-virgo-name} specific `Import-Library` header. This header specifies a
+comma-separated list of library symbolic names and version ranges that determine which libraries
+are imported. By default a dependency on a library is mandatory but this can be
+controlled through use of the resolution directive in exactly the same way as
+it can with `Import-Package`.
+
+[source,txt]
+----
+Import-Library: org.springframework.spring;version="[2.5.4, 3.0)",
+ org.aspectj;version="[1.6.0,1.6.0]";resolution:="optional"
+----
+
+This example `Import-Library` header declares a mandatory dependency on the Spring
+library at a version from 2.5.4 inclusive to 3.0 exclusive. It also declares an
+optional dependency on the AspectJ library at exactly 1.6.0.
+
+anchor:developing-applications-importing-bundles
+
+==== Importing Bundles
+
+A bundle in an application can declare a dependency on a bundle by using the
+{umbrella-virgo-name} specific `Import-Bundle` header. The header specifies a comma-separated
+list of bundle symbolic names, version ranges, and scope declarmations that determine which bundles are imported and the scope of their dependency. By default a dependency
+on a bundle is mandatory but this can be controlled through use of the resolution directive in exactly
+the same way as it can with `Import-Package`.
+
+[source,txt]
+----
+Import-Bundle: com.springsource.org.apache.commons.dbcp;version="[1.2.2.osgi, 1.2.2.osgi]"
+----
+
+This example `Import-Bundle` header declares a mandatory dependency on the Apache Commons
+DBCP bundle at exactly 1.2.2.osgi.
+
+anchor:developing-applications-importing-bundles-disadvantages[]
+
+===== Disadvantages
+
+A disadvantage of using `Import-Bundle` or especially `Import-Library`, is that the application
+bundle has a greater apparent fan-out than it strictly needs. An Alternative is to use a tool such as bnd or Bundlor
+to generate the package imports of the bundle.
+
+anchor:developing-applications-scoping-libraries-bundles[]
+
+==== Scoping Bundles in an Application
+
+When working with a scoped application, such as a PAR file or a plan, you might run into a situation where one of the bundles in the application (call it `bundleA`) depends on another bundle (`bundleB`) that performs a runtime task (such as class generation) that a third bundle (`bundleC`) might need to know about, although `bundleC` does not explicitly depend on `bundleB`.
+
+For example, Hibernate uses CGLIB (code generation library) at runtime to generate proxies for persistent classes.  Assume that a domain bundle in your application uses Hibernate for its persistent objects, and thus its `Import-Bundle` manifest header includes the Hibernate bundle.  Further assume that a separate Web bundle uses reflection in its data-binding code, and thus needs to reflect on the persistent classes generated by Hibernate at runtime.  The Web bundle now has an indirect dependency on the Hibernate bundle because of these dynamically generated classes, although the Web bundle does not typically care about the details of how these classes are persisted.  One way to solve this dependency problem is to explicitly add the Hibernate bundle to the `Import-Bundle` header of the Web bundle; however, this type of explicit-specified dependency breaks the modularity of the application and is not a programming best practice.
+
+A better way to solve this problem is to specify that {virgo-name} itself dynamically import
+the bundle (Hibernate in the example above) to all bundles in the application at runtime.
+You do this by adding the `import-scope:=application` directive to the `Import-Bundle` header
+of the bundle that has the direct dependency (the domain bundle in our example).  At runtime, although the Web bundle
+does not explicitly import the Hibernate bundle, {virgo-name} implicitly imports it and thus its classes are available
+to the Web bundle.  This mechanism allows you to declare the dependencies you need to make your application run,
+without having to make changes to your application that might limit its flexibility.
+
+The following example shows how to use the `import-scope` directive with the `Import-Bundle` header:
+
+[source,txt]
+----
+Import-Bundle: com.springsource.org.hibernate;version="[3.2.6.ga,3.2.6.ga]";import-scope:=application
+----
+
+You can also set the `import-scope` directive to the (default) value `bundle`; in this case, the scope of the bundle is just the bundle itself and thus {virgo-name} does not perform any implicit importing into other bundles of the application.
+
+Note that use of the `import-scope:=application` directive of the `Import-Bundle` header only makes sense when the bundle is part of a scoped application (PAR or plan);  if the bundle is not part of a scoped application, then this directive has no effect.
+
+Finally, because `import-scope:=application` implicitly adds a bundle import to each bundle of the PAR or plan, the impact of subsequently refreshing the imported bundle is, in general, broader than it would have been if you had not used `import-scope:=application`. This may well affect the performance of refresh.
+
+anchor:developing-applications-defining-libraries[Defining Libraries]
+
+==== Defining Libraries
+
+Libraries are defined in a simple text file, typically with a `.libd` suffix. This file identifies the
+library and lists all of its constituent bundles. For example, the following is the library definition for
+Spring 2.5.4:
+
+[source,txt]
+----
+Library-SymbolicName: org.springframework.spring
+Library-Version: 2.5.4
+Library-Name: Spring Framework
+Import-Bundle: org.springframework.core;version="[2.5.4,2.5.5)",
+ org.springframework.beans;version="[2.5.4,2.5.5)",
+ org.springframework.context;version="[2.5.4,2.5.5)",
+ org.springframework.aop;version="[2.5.4,2.5.5)",
+ org.springframework.web;version="[2.5.4,2.5.5)", 
+ org.springframework.web.servlet;version="[2.5.4,2.5.5)",
+ org.springframework.jdbc;version="[2.5.4,2.5.5)",
+ org.springframework.orm;version="[2.5.4,2.5.5)",
+ org.springframework.transaction;version="[2.5.4,2.5.5)",
+ org.springframework.context.support;version="[2.5.4,2.5.5)",
+ org.springframework.aspects;version="[2.5.4,2.5.5)",
+ com.springsource.org.aopalliance;version="1.0"
+----
+
+The following table lists all of the headers that may be used in a library definition:
+
+anchor:developing-applications-defining-libraries-library-headers-table[]
+
+[options="header",cols="2,5"]
+.Library definition headers
+|=======================================================================
+| Header               | Description
+| Library-SymbolicName | Identifier for the library
+| Library-Version      | Version number for the library
+| Import-Bundle        | A comma separated list of bundle symbolic names.
+                         Each entry may optionally specify a version (using the `version=` directive)
+                         and the scope of the import (using the `import-scope` directive).
+| Library-Name         | Optional. The human-readable name of the library
+| Library-Description  | Optional. A human-readable description of the library
+|=======================================================================
+
+anchor:developing-applications-installing-dependencies[]
+
+==== Installing Dependencies
+
+Rather than encouraging the packaging of all an application's dependencies within the application itself, {virgo-name}
+uses a local provisioning repository of bundles and libraries upon which an application can depend. When the {virgo-name}
+encounters an application with a particular dependency, it will automatically provide, from its provisioning repository,
+the appropriate bundle or library.
+
+Making a dependency available for provisioning is simply a matter of copying it to the appropriate location in the
+{virgo-name}'s local provisioning repository. By default this is
+`SERVER_HOME/repository/usr`. A more detailed discussion of the provisioning
+repository can be found in the {user-guide}.
+
+anchor:developing-applications-application-trace[]
+
+=== Application Trace
+
+As described in the {user-guide} {virgo-name} provides support for
+per-application trace for PARs, scoped Plans and WABs. {virgo-name} provides SLF4J with Logback logging for Event Logging and Tracing.
+Application trace is configured in the `serviceability.xml` file.
+See the {user-guide} for more details.
+
+anchor:developing-applications-versioning[]
+
+=== Application Versioning
+
+In much the same way that individual OSGi bundles can be versioned, {virgo-name} allows applications to be versioned. How exactly you do this depends on how you have packaged the application:
+
+* If you package your application using a PAR, you version the application by using the `Application-Version` header in the `MANIFEST.MF` file of the PAR file.
+* If you use a plan to describe the artifacts that make up your application, you version it by using the `version` attribute of the `<plan>` root element of the plan's XML file.
+* If your application consists of a single bundle, you version it in the standard OSGi way: by using the `Bundle-Version` header of the `MANIFEST.MF` file of the bundle.
+
+{virgo-name} uses an application's version to prevent clashes when multiple versions of the same application are deployed at
+the same time. For example, the application trace support described in xref:developing-applications-application-trace[Application Trace],
+includes the application's name and version in the file path. This ensures that each version of the same application has its
+own trace or logging file.
diff --git a/programmer-guide/src/docs/asciidoc/formtags-case-study.adoc b/programmer-guide/src/docs/asciidoc/formtags-case-study.adoc
new file mode 100644
index 0000000..d3c02be
--- /dev/null
+++ b/programmer-guide/src/docs/asciidoc/formtags-case-study.adoc
@@ -0,0 +1,984 @@
+:virgo-name: Virgo
+:version: 3.7.0.RC01
+
+:umbrella-virgo-name: Eclipse Virgo
+:tomcat-product-name: Virgo for Apache Tomcat
+:tomcat-product-name-short: VTS
+:jetty-product-name: Virgo Jetty Server
+:jetty-product-name-short: VJS
+:kernel-product-name: Virgo Kernel
+:kernel-product-name-short: VK
+:nano-product-name: Virgo Nano
+:nano-product-name-short: VN
+:user-guide: link:../../virgo-user-guide/html/index.html[User Guide]
+:tooling-guide: link:../../virgo-tooling-guide/html/index.html[Tooling Guide]
+
+:gemini-blueprint-guide: https://www.eclipse.org/gemini/blueprint/documentation/reference/2.0.0.RELEASE/html/index.html[Eclipse Gemini Blueprint Reference Guide]
+
+:spring-framework-version: 4.2.9.RELEASE
+
+:homepage: https://www.eclipse.org/virgo
+:ebr: http://www.eclipse.org/ebr[EBR]
+
+:imagesdir: assets/images
+
+anchor:formtags-case-study[Case Study: Migrating the Form Tags Sample Application]
+
+== Case Study: Migrating the Form Tags Sample Application
+
+Migrating Form Tags
+
+In this chapter we will walk through the steps needed to migrate the
+Form Tags sample application from a standard Java EE WAR to a fully
+OSGi compliant *Shared Services WAR* within a PAR.
+The migration involves four packaging and deployment formats:
+
+. xref:formtags-case-study-war[Standard WAR]
+. xref:formtags-case-study-war-shared-libs[Shared Libraries WAR]
+. xref:formtags-case-study-war-shared-services[Shared Services WAR]
+. xref:formtags-case-study-par[PAR with a shared services WAR]
+
+Each of these migration steps will produce a web application
+that can be deployed and run on the {tomcat-product-name-short}.
+
+After summarising the process, an example `plan`
+is shown which is another way of packaging and deploying the application.
+
+The following image displays the directory structure you should have
+after installing the Form Tags sample. Note however that the release
+tag will typically resemble `3.0.0.RELEASE`.
+
+image:formtags-case-study-sample-layout.png[]
+
+The `dist` directory contains the distributables,
+and the `projects` directory contains the source code and build scripts.
+
+For simplicity, this chapter will focus on the distributables—which
+are built using Virgo-Build rather than on configuring a project in an IDE.
+
+[TIP]
+--
+Pre-packaged distributables are made available in the `dist` directory;
+however, if you would like to modify the samples or build
+them from scratch, you may do so using Virgo-Build. Take a look at
+the `README.TXT` file in each of the folders under the `projects`
+directory in the Form Tags sample for instructions.
+--
+
+anchor:formtags-case-study-introduction[]
+
+=== Overview of the Form Tags Sample Application
+
+The sample that we will be using is the Form Tags show case
+sample
+which was provided with Spring 2.0. The Form Tags application
+has
+been removed from the official Spring 2.5.x distributions;
+however,
+since it is relatively simple but still contains enough
+ingredients
+to demonstrate the various considerations required during
+a migration,
+we have chosen to use it for these examples.
+
+The purpose of the Form Tags show case sample was to demonstrate how
+the Spring specific
+`form:`
+tags, released
+in Spring 2.0, make view development with JSPs and tag
+libraries easier.
+The Form Tags application consists of a single
+`UserService`
+which returns a list
+of
+`Users`
+. Furthermore, the application demonstrates how to list, view,
+and
+edit
+`Users`
+in a simple Spring MVC based web application using JSP
+and JSTL.
+
+anchor:formtags-case-study-war[]
+
+=== Form Tags WAR
+
+We begin with a standard WAR deployment.
+
+[NOTE]
+--
+The {tomcat-product-name-short} supports the standard Java EE WAR
+packaging
+and deployment format as a first-class citizen, and there
+are many
+benefits to deploying a standard WAR file on the
+{tomcat-product-name-short} including,
+but not limited to: tooling
+support, runtime error diagnostics, FFDC
+(first failure data
+capture), etc.
+In addition, support for standard WAR deployment
+provides an easy on-ramp
+for trying out the
+{tomcat-product-name-short} with existing web applications.
+--
+
+The following screen shot displays the directory structure of the
+Form Tags application using the standard WAR format. As you can see,
+there is no deviation from the standard structure and layout, and as
+you would expect, all of the web application's third-party
+dependencies
+(for example: Spring, Commons Logging) are packaged as
+JARs in
+`WEB-INF/lib`
+.
+
+image:formtags-case-study-exploded-war.png[]
+
+To deploy this application, simply copy
+`dist/formtags-war-3.0.0.*.war`
+to
+the
+`SERVER_HOME/pickup`
+directory for hot deployment.
+
+You should then see the {tomcat-product-name-short} produce
+console output similar to the following:
+
+[NOTE]
+--
+The console output has been reformatted to fit this document.
+--
+
+[source,txt]
+----
+[2009-07-01 14:54:45.135] fs-watcher
+	<SPDE0048I> Processing 'CREATED' event for file 'formtags-war-3.0.0.RELEASE.war'.
+[2009-07-01 14:54:45.797] fs-watcher
+	<SPDE0010I> Deployment of 'formtags-war-3.0.0.RELEASE.war' version '0' completed.
+[2009-07-01 14:54:45.797] Thread-20
+	<SPWE0000I> Starting web bundle '/formtags-war-3.0.0.RELEASE'.
+[2009-07-01 14:54:46.380] Thread-20
+	<SPWE0001I> Started web bundle '/formtags-war-3.0.0.RELEASE'.
+----
+
+Navigate to
+`http://localhost:8080/`
+plus the web application context path,
+which in the above case is
+`formtags-war-3.0.0.RELEASE`
+. Thus navigating to
+`http://localhost:8080/formtags-war-3.0.0.RELEASE`
+should render the sample application's welcome page, as
+displayed in the screen
+shot below.
+
+[TIP]
+--
+For WARs, the default web context path is the name of the WAR file
+without the
+`.war`
+extension. You can optionally
+specify a context path using the
+`Web-ContextPath`
+bundle
+manifest header, which will be described in further detail
+later.
+--
+
+image:formtags-case-study-war-webpage.png[]
+
+anchor:formtags-case-study-war-shared-libs[]
+
+=== Form Tags Shared Libraries WAR
+
+As mentioned above, a standard WAR file typically packages of all its
+required
+dependencies in
+`WEB-INF/lib`
+. The servlet container will
+then add all of the JARs in
+`WEB-INF/lib`
+to the application's
+classpath.
+
+The first step of the migration towards benefiting from an OSGi
+container is to retrieve the dependencies from the
+{tomcat-product-name-short}'s bundle
+repository at runtime. This
+can significantly reduce the time it takes to build
+and deploy the
+application. It also enables the enforcement of policies
+regarding the
+use of third-party libraries.
+
+The way in which dependencies are declared in an OSGi environment is
+via manifest headers in a bundle's
+`/META-INF/MANIFEST.MF`
+.
+As mentioned in xref:developing-applications[], there are
+three ways of expressing dependencies:
+`Import-Package`,
+`Import-Bundle` and
+`Import-Library`.
+
+The Form Tags application uses JSTL standard tag libraries.
+Thus, you
+need to choose a JSTL provider, for example the
+Apache implementation
+which comes with the {tomcat-product-name-short}. To use the
+Apache
+implementation of JSTL, you need to express your dependency
+as
+outlined in the following manifest listing.
+Because it is a single
+bundle,
+`Import-Bundle`
+is
+the simplest and therefore preferred manifest header to use.
+
+The Form Tags application requires commons-logging and Spring.
+It
+would be very painful to have to list all the Spring packages one by
+one.
+Equally, considering the number of bundles that make up the
+Spring framework, it would be verbose to list each bundle. Therefore
+`Import-Library`
+is the preferred approach
+for expressing the dependency on the Spring
+framework.
+
+[TIP]
+--
+How do you determine the name of a library definition provided
+by the {tomcat-product-name}? Use the {ebr}.
+--
+
+Examine the
+`/META-INF/MANIFEST.MF`
+in
+`/dist/formtags-shared-libs-*.war`:
+
+[source,txt]
+----
+Manifest-Version: 1.0
+Ant-Version: Apache Ant 1.7.0
+Created-By: 1.5.0_13-119 (Apple Inc.)
+Bundle-ManifestVersion: 2
+Bundle-SymbolicName: org.springframework.showcase.formtags-shared-libs
+Import-Library: org.springframework.spring;version="[3.0.0,4.0.0)"
+Import-Bundle: com.springsource.org.apache.taglibs.standard;version="1
+ .1.2"
+----
+
+You can see the
+`Import-Library`
+and
+`Import-Bundle`
+directives that instruct the {tomcat-product-name-short} to add the
+appropriate package imports to the bundle
+classpath used by this WAR file.
+
+Deploying the shared libraries WAR onto the
+{tomcat-product-name-short} should result
+in console output similar to
+the following:
+
+[NOTE]
+--
+The console output has been reformatted to fit this document.
+--
+
+[source,txt]
+----
+[2009-07-01 15:00:14.953] fs-watcher
+	<SPDE0048I> Processing 'CREATED' event for file 'formtags-shared-libs-3.0.0.RELEASE.war'.
+[2009-07-01 15:00:15.363] fs-watcher
+	<SPDE0010I> Deployment of 'org.springframework.showcase.formtags_shared_libs' version '2' completed.
+[2009-07-01 15:00:15.364] Thread-20
+	<SPWE0000I> Starting web bundle '/formtags-shared-libs-3.0.0.RELEASE'.
+[2009-07-01 15:00:15.816] Thread-20
+	<SPWE0001I> Started web bundle '/formtags-shared-libs-3.0.0.RELEASE'.
+----
+
+Navigating to
+`http://localhost:8080/formtags-shared-libs-BUILDTAG
+`
+should render the welcome page. Note that for the pre-packaged
+distributable,
+the
+`BUILDTAG`
+should be similar to
+`3.0.0.RELEASE`
+;
+whereas, for a local build the
+`-BUILDTAG`
+may be completely
+omitted. Please consult the console output,
+web-based admin console, or log
+to determine the exact context path
+under which the web application has been deployed.
+
+anchor:formtags-case-study-war-shared-services[]
+
+=== Form Tags Shared Services WAR
+
+The next step in the migration is to deploy the services as a
+separate
+OSGi bundle which the WAR then references.
+The Form Tags
+sample has a single service
+`UserManager`.
+
+This scenario has two separate deployables, the
+`service`
+bundle and the WAR file.
+The following image shows the two separate
+source trees:
+
+image:formtags-case-study-shared-services-eclipse.png[]
+
+[NOTE]
+--
+Note that the WAR does not contain the
+`.domain`
+or
+`.service`
+packages as these will be imported from the separate service bundle.
+--
+
+anchor:formtags-case-study-war-shared-services-service[]
+
+==== The Service Bundle
+
+The responsibility of the first bundle (
+`formtags-shared-services-service`
+)
+is to provide the API of the formtags service. This includes both
+the
+domain and the service API. In the same way that imports are
+defined
+in the
+`/META-INF/MANIFEST.MF`
+, so are exports.
+The following is the
+`/META-INF/MANIFEST.MF`
+listing from the service bundle.
+
+[source,txt]
+----
+Manifest-Version: 1.0
+Ant-Version: Apache Ant 1.7.0
+Created-By: 1.5.0_13-119 (Apple Inc.)
+Bundle-ManifestVersion: 2
+Bundle-Name: FormTags Service (and implementation)
+Bundle-SymbolicName: org.springframework.showcase.formtags.service-shared-services
+Export-Package: org.springframework.showcase.formtags.service,org.spri
+ ngframework.showcase.formtags.domain
+Import-Library: org.springframework.spring;version="[3.0.0,4.0.0)"
+----
+
+The symbolic name of this bundle is
+`org.springframework.showcase.formtags.service-shared-services`.
+Note that the name of the bundle typically describes the package that the bundle primarily exports.
+If you take a look at the `repository/bundles/ext` in the {tomcat-product-name-short}
+directory, you'll see that
+names are almost always indicative of the contents of the bundle.
+For this example, however, we have also appended
+"`-shared-services`"
+in order to avoid possible clashes with other bundle symbolic
+names.
+You will see later that the PAR also contains a service
+bundle.
+
+[NOTE]
+--
+In OSGi, the combination of
+`Bundle-SymbolicName`
+and
+`Bundle-Version`
+is used to uniquely identify
+a bundle within the OSGi container.
+Furthermore, when you deploy
+a bundle to the {tomcat-product-name},
+for example via the
+`pickup`
+directory, a bundle's filename is also used to uniquely
+identify it for
+the purpose of supporting
+*hot deployment*
+via
+the file system.
+--
+
+As well as exporting types (i.e. the domain classes and service
+API), the service bundle also publishes an implementation of the
+`UserManager`
+. The actual implementation is
+`StubUserManager`
+; however, that should remain an
+implementation detail of this
+bundle.
+
+The fact that this bundle publishes a service is not captured in
+the
+`/META-INF/MANIFEST.MF`
+, as it is a Gemini Blueprint concept.
+The following image is of
+`src/main/resources/spring`.
+
+image:formtags-case-study-shared-services-service-resources.png[]
+
+As you can see there are two Spring configuration files:
+`module-context.xml`
+and
+`osgi-context.xml`.
+
+[TIP]
+--
+These names are abitrary; however, they follow an informal
+convention:
+`module-context.xml`
+typically bootstraps the Spring context
+(usually delegating to
+smaller fine grained context files inside another directory),
+whilst
+`osgi-context.xml`
+contains all the OSGi service exports and references.
+--
+
+The following is a listing of
+`module-context.xml`
+.
+
+[source,xml]
+----
+<?xml version="1.0" encoding="UTF-8"?>
+
+<beans xmlns="http://www.springframework.org/schema/beans"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="
+		http://www.springframework.org/schema/beans
+		http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
+
+	<bean id="userManager"
+		class="org.springframework.showcase.formtags.service.internal.StubUserManager"/>
+
+</beans>
+----
+
+As you can see, this simply defines a bean called
+`userManager`
+.
+The following is a listing of
+`osgi-context.xml`.
+
+[source,xml]
+----
+<?xml version="1.0" encoding="UTF-8"?>
+<beans:beans
+	xmlns="http://www.springframework.org/schema/osgi"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xmlns:beans="http://www.springframework.org/schema/beans"
+	xsi:schemaLocation="http://www.springframework.org/schema/osgi
+		http://www.springframework.org/schema/osgi/spring-osgi.xsd
+		http://www.springframework.org/schema/beans
+		http://www.springframework.org/schema/beans/spring-beans.xsd">
+
+	<service ref="userManager"
+		interface="org.springframework.showcase.formtags.service.UserManager"/>
+
+</beans:beans>
+----
+
+This single bean definition exports the
+`userManager`
+defined in
+`module-context.xml`
+to the
+OSGi service registry and makes it available under the public
+`org.springframework.showcase.formtags.service.UserManager
+`
+API.
+
+The service bundle should now be ready to deploy on the
+{tomcat-product-name-short}.
+So copy
+`/dist/formtags-shared-services-services*`
+to the
+`SERVER_HOME/pickup`
+directory.
+Output similar to the following should appear in the
+{tomcat-product-name-short}'s console:
+
+[NOTE]
+--
+The console output has been reformatted to fit this document.
+--
+
+[source,txt]
+----
+[2009-07-01 15:05:03.511] fs-watcher
+	<SPDE0048I> Processing 'CREATED' event for file 'formtags-shared-services-service-2.0.0.RELEASE.jar'.
+[2009-07-01 15:05:03.688] fs-watcher
+	<SPDE0010I> Deployment of 'org.springframework.showcase.formtags.service_shared_services' version '2.0.0.RELEASE' completed.
+----
+
+anchor:formtags-case-study-war-shared-services-war[]
+
+==== Accessing the Service and Types from the WAR
+
+The WAR file now needs to access the types and service exported
+by
+the service bundle. The following listing is the WAR's
+`/META-INF/MANIFEST.MF`
+which imports the types
+exported by the service bundle. The
+`Import-Bundle`
+statement has also been extended to import
+`org.springframework.osgi.core`
+,
+which is necessary in order to load an OSGi-enabled
+`WebApplicationContext`
+.
+
+[source,txt]
+----
+Manifest-Version: 1.0
+Ant-Version: Apache Ant 1.7.0
+Created-By: 1.5.0_13-119 (Apple Inc.)
+Bundle-ManifestVersion: 2
+Bundle-SymbolicName: org.springframework.showcase.formtags.web-shared-
+ services
+Import-Package: org.springframework.showcase.formtags.domain,org.sprin
+ gframework.showcase.formtags.service, org.eclipse.virgo.web.dm;version="[1.0,2.1)"
+Import-Library: org.springframework.spring;version="[2.5.4,3.1.0)"
+Import-Bundle: com.springsource.org.apache.taglibs.standard;version="1
+ .1.2",org.springframework.osgi.core
+----
+
+In addition to importing the exported types of the service bundle,
+the WAR must also obtain a reference to the
+`UserManager`
+published by the service bundle. The following image shows the
+directory
+structure of the Shared Services WAR.
+
+image:formtags-case-study-shared-services-war-resources.png[]
+
+As you can see in the above image, the Form Tags Shared Services
+WAR's
+`/WEB-INF/web.xml`
+directory contains a standard
+`web.xml`
+deployment descriptor,
+`applicationContext.xml`
+which defines the configuration
+for the
+*root*
+`WebApplicationContext`
+, and
+`formtags-servlet.xml`
+which defines the configuration specific to the
+configured
+*formtags*
+`DispatcherServlet`
+.
+
+As is typical for Spring MVC based web applications, you configure a
+`ContextLoaderListener`
+in
+`web.xml`
+to load your root
+`WebApplicationContext`
+; however, to enable your
+`WebApplicationContext`
+to be able to reference services from the OSGi Service Registry,
+you
+must explicitly set the
+`contextClass`
+Servlet context parameter to the fully qualified
+class name of a
+`ConfigurableWebApplicationContext`
+which is OSGi-enabled. When deploying
+Shared Services WARs to the
+{tomcat-product-name}, you should use
+`org.eclipse.virgo.web.dm.ServerOsgiBundleXmlWebApplicationContext`.
+This will then enable the use of Gemini Blueprint's `<reference ... />`
+within your root `WebApplicationContext` (i.e., in `applicationContext.xml`).
+The following listing is an excerpt from `/WEB-INF/web.xml`.
+
+[source,xml]
+----
+<context-param>
+    <param-name>contextClass</param-name>
+    <param-value>org.eclipse.virgo.web.dm.ServerOsgiBundleXmlWebApplicationContext</param-value>
+</context-param>
+
+<listener>
+    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
+</listener>
+----
+
+The Form Tags Shared Services WAR contains a
+`/WEB-INF/applicationContext.xml`
+file which is the default configuration location used to create the
+*root*
+`WebApplicationContext`
+for Spring MVC's
+`ContextLoaderListener`.
+
+[NOTE]
+--
+As already mentioned, in the OSGi world, bundle configuration
+takes
+place in the root
+`/META-INF/`
+directory.
+Typically Gemini Blueprint powered configuration files will live
+there as well (e.g., in
+`/META-INF/spring/*.xml`
+).
+In a WAR, however, the root
+`WebApplicationContext`
+loaded by
+`ContextLoaderListener`
+and the
+`DispatcherServlet's`
+application context typically live in
+`/WEB-INF/`.
+--
+
+The following is the listing of the WAR's
+`/WEB-INF/applicationContext.xml`.
+
+[source,xml]
+----
+<?xml version="1.0" encoding="UTF-8"?>
+<beans:beans
+   xmlns="http://www.springframework.org/schema/osgi"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xmlns:beans="http://www.springframework.org/schema/beans"
+   xsi:schemaLocation="http://www.springframework.org/schema/osgi
+	   http://www.springframework.org/schema/osgi/spring-osgi.xsd
+	   http://www.springframework.org/schema/beans
+	   http://www.springframework.org/schema/beans/spring-beans.xsd">
+
+	<reference id="userManager"
+		interface="org.springframework.showcase.formtags.service.UserManager"/>
+
+</beans:beans>
+----
+
+The single bean declaration is retrieving a service that implements
+the
+`org.springframework.showcase.formtags.service.UserManager
+`
+API from the OSGi Service Registry.
+
+[TIP]
+--
+You might have been expecting a reference to the service bundle,
+but that isn't how OSGi works. OSGi provides a service
+registry, and this bean definition is accessing a service in that
+registry that meets the specified restriction (i.e. implements
+the
+specified interface). This leads to a very loosely coupled
+programming model: the WAR really doesn't care where the
+implementation
+comes from.
+--
+
+[TIP]
+--
+What happens if there is no service at runtime?
+What if there are
+multiple services that match the criteria?
+Gemini Blueprint provides a lot
+of configuration options, including
+whether or not the reference is
+*mandatory*
+,
+how long to wait for a service reference, etc. Please consult the
+{gemini-blueprint-guide} for further information.
+--
+
+One of the benefits of programming to interfaces is that you
+are
+decoupled from the actual implementation; Gemini Blueprint provides a
+proxy. This
+has enormous benefits including the ability to
+dynamically refresh individual bundles without
+cascading that
+refresh to unrelated bundles.
+
+To deploy the WAR, copy
+`/dist/formtags-shared-services-war*`
+to the
+`SERVER_HOME/pickup`
+directory.
+You should then see console output similar to the
+following:
+
+[NOTE]
+--
+The console output has been reformatted to fit this document.
+--
+
+[source,txt]
+[2009-07-01 15:09:19.819] fs-watcher
+    <SPDE0048I> Processing 'CREATED' event for file 'formtags-shared-services-war-3.0.0.RELEASE.war'.
+[2009-07-01 15:09:20.167] fs-watcher
+    <SPDE0010I> Deployment of 'org.springframework.showcase.formtags.web_shared_services' version '3' completed.
+[2009-07-01 15:09:20.168] Thread-20
+    <SPWE0000I> Starting web bundle '/formtags-shared-services-war-3.0.0.RELEASE'.
+[2009-07-01 15:09:20.647] Thread-20
+    <SPWE0001I> Started web bundle '/formtags-shared-services-war-3.0.0.RELEASE'.
+----
+
+Navigating to the appropriate link should render the welcome page.
+
+anchor:formtags-case-study-par[]
+
+=== Form Tags PAR
+
+The final step in the migration is that of a full blown
+OSGi
+application with web support. The {tomcat-product-name} introduces a
+new packaging and deployment format: the PAR.
+
+A PAR is a standard JAR with a "`.par`"
+file extension which contains all of the modules of your
+application (e.g., service, domain, and infrastructure bundles
+as well
+as a WAR for web applications) in a single deployment unit.
+Moreover,
+a PAR defines both a physical and logical application boundary.
+
+The PAR sample is comprised of four directories, as shown below.
+
+image:formtags-case-study-par-sample.png[]
+
+
+The
+`formtags-par`
+directory is a build project that
+understands how to create the PAR
+from its constituent bundles.
+
+anchor:formtags-case-study-par-granularity[]
+
+==== Granularity of the PAR
+
+Achieving the appropriate level of granularity for your OSGi
+application is more of an art than a science. It helps to look
+at the
+different requirements:
+
+[options="header",cols="2,3"]
+.Granularity drivers
+|=======================================================================
+| Requirement               | Description
+| Domain/Technical Layering | Applications can be split either by domain (i.e.,
+                                by use case or
+                                *vertically*
+                                ) or
+                                by their technical layers (i.e.,
+                                *horizontally*
+                                ).
+                                Since the Form Tags application essentially has only
+                                a single
+                                use case, the bundles are split by technical layering
+                                (i.e.,
+                                domain, service, and web).
+| Refreshability            | A major benefit of OSGi is that of refreshability: if one
+                                bundle
+                                is changed, only bundles that have a dependency upon
+                                the
+                                exported types need to be refreshed. This has a high impact
+                                on
+                                development time costs as well as production
+                                costs. However,
+                                this can lead to lots of smaller, fine grained
+                                bundles. An
+                                example of this granularity would be to
+                                separate out the service
+                                API and implementation into two different
+                                bundles. This means
+                                that a change in the implementation
+                                wouldn't require any
+                                other bundles to be refreshed.
+|=======================================================================
+
+Ultimately the right level of granularity will depend upon your
+particular application and team.
+
+anchor:formtags-case-study-par-domain-and-service[]
+
+==== Domain and Service Bundles
+
+The service bundle is identical (except for the
+`Bundle-SymbolicName`
+) to that
+in the shared-services variation of the sample.
+The PAR has
+also separated out the domain classes into their own bundle.
+When
+layering by technical considerations, it is again
+somewhat of an
+unofficial convention to have a
+`.domain`
+bundle.
+
+anchor:formtags-case-study-par-par[]
+
+=== Constructing the PAR
+
+Finally we need to construct the PAR itself.
+The following are
+the contents of the exploded PAR.
+
+image:formtags-case-study-par-exploded.png[]
+
+You can see that the PAR itself doesn't contain any
+resources or
+Java classes: it simply packages together a related set
+of bundles
+as a single, logical unit.
+
+The PAR does however, contain its own
+`/META-INF/MANIFEST.MF`.
+
+[source,txt]
+----
+Manifest-Version: 1.0
+Application-SymbolicName: org.springframework.showcase.formtags-par
+Application-Version: 3.0.0
+Application-Name: FormTags Showcase Application (PAR)
+----
+
+For more information on the contents of the PAR's
+`/META-INF/MANIFEST.MF`
+, please consult xref:developing-applications[].
+
+You can now deploy the PAR on the {tomcat-product-name-short}, for
+example by copying
+`/dist/formtags-par*.par`
+to the {tomcat-product-name-short}'s
+`pickup`
+directory.
+You should then see console output similar to the
+following:
+
+[NOTE]
+--
+The console output has been reformatted to fit this document.
+--
+
+[source,txt]
+----
+[2009-07-01 15:13:43.306] fs-watcher
+	<SPDE0048I> Processing 'CREATED' event for file 'formtags-par-2.0.0.RELEASE.par'.
+[2009-07-01 15:13:44.060] fs-watcher
+	<SPDE0010I> Deployment of 'formtags-par' version '2.0.0.RELEASE' completed.
+[2009-07-01 15:13:44.068] Thread-20
+	<SPWE0000I> Starting web bundle '/formtags-par'.
+[2009-07-01 15:13:45.212] Thread-20
+	<SPWE0001I> Started web bundle '/formtags-par'.
+----
+
+Navigate to http://localhost:8080/formtags-par to see the welcome page.
+
+[TIP]
+--
+Note that the web application's context path is explicitly
+defined via the
+`Web-ContextPath`
+manifest header in
+`/META-INF/MANIFEST.MF`
+of the Web application bundle within the PAR.
+--
+
+anchor:formtags-case-study-summary[]
+
+=== Summary of the Form Tags Migration
+
+The {tomcat-product-name} provides out-of-the-box support for
+deploying
+standard Java EE WAR files. In addition support for
+*Shared Libraries*
+and
+*Shared Services*
+WAR formats provides a logical migration path away from standard,
+monolithic WARs toward OSGi-enable Web applications. The PAR
+packaging
+and deployment format enables truly fine-grained,
+loosely-coupled, and
+efficient application development. In general,
+the migration steps
+presented in this chapter are fairly
+straightforward, but developers
+should set aside time for some
+up-front design of the bundles themselves.
+
+It is recommended that you take another sample application or
+indeed your own small application and go through this migration
+process yourself. This will help you better understand the concepts
+and
+principles at work. In addition, it is highly recommended that you
+familiarize yourself with the extensive Eclipse IDE support provided
+by the Virgo Tools. See the Virgo Tools Guide for more on that.
+
+anchor:formtags-case-study-as-plan[]
+
+=== Form Tags as a Plan
+
+Plans (see xref:developing-applications-plans[])
+allow us to package and deploy the Form Tags application in a more
+flexible way.
+Instead of packaging all the bundles of the application
+into a single PAR file, each bundle can be placed in the repository
+and referred to in a *plan*.
+
+The bundles to be placed in a repository in the chain (for example,
+`repository/usr`) are:
+
+[source,txt]
+----
+org.springframework.showcase.formtags.domain-2.0.0.RELEASE.jar
+org.springframework.showcase.formtags.service-2.0.0.RELEASE.jar
+org.springframework.showcase.formtags.web-2.0.0.RELEASE.war
+----
+
+which are just those files which were part of the PAR.
+
+Here is the contents of a suitable plan file for the Form Tags
+example:
+
+[source,xml]
+----
+<?xml version="1.0" encoding="UTF-8"?>
+<plan name="formtags.plan" version="2.0.0" scoped="true" atomic="true"
+        xmlns="http://www.eclipse.org/virgo/schema/plan"
+		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+		xsi:schemaLocation="
+		        http://www.eclipse.org/virgo/schema/plan
+		        http://www.eclipse.org/virgo/schema/plan/eclipse-virgo-plan.xsd">
+
+	<artifact type="bundle" name="org.springframework.showcase.formtags.domain_par" version="[3.0,3.1)"/>
+	<artifact type="bundle" name="org.springframework.showcase.formtags.service_par" version="[3.0,3.1)"/>
+	<artifact type="bundle" name="org.springframework.showcase.formtags.web_par" version="[3.0,3.1)"/>
+
+</plan>
+----
+
+where we have chosen to use any of the artifacts in the version range [2.0,2.1).
+This plan (as a file called, for example, `formtags.plan`)
+can be deployed in any of the normal ways (for example, dropped in the `pickup` directory).
+
+When the plan is deployed, the artifacts it references are
+installed from the repository and deployed in the order given in the
+plan file.
+Because this plan is scoped and atomic, the collection is
+given an application scope and is started and stopped as a single
+unit.
diff --git a/programmer-guide/src/docs/asciidoc/introduction.adoc b/programmer-guide/src/docs/asciidoc/introduction.adoc
new file mode 100644
index 0000000..d3c96c0
--- /dev/null
+++ b/programmer-guide/src/docs/asciidoc/introduction.adoc
@@ -0,0 +1,198 @@
+:virgo-name: Virgo
+:version: 3.7.0.RC01
+
+:umbrella-virgo-name: Eclipse Virgo
+:tomcat-product-name: Virgo for Apache Tomcat
+:tomcat-product-name-short: VTS
+:jetty-product-name: Virgo Jetty Server
+:jetty-product-name-short: VJS
+:kernel-product-name: Virgo Kernel
+:kernel-product-name-short: VK
+:nano-product-name: Virgo Nano
+:nano-product-name-short: VN
+:user-guide: http://www.eclipse.org/virgo/documentation/virgo-documentation-${version}/docs/virgo-user-guide/html/index.html[User Guide]
+:tooling-guide: http://www.eclipse.org/virgo/documentation/virgo-documentation-3.6.4.RELEASE/docs/virgo-tooling-guide/html/index.html[Tooling Guide]
+
+:gemini-blueprint-guide: https://www.eclipse.org/gemini/blueprint/documentation/reference/2.0.0.RELEASE/html/index.html[Eclipse Gemini Blueprint Reference Guide]
+
+:spring-framework-version: 4.2.9.RELEASE
+
+:homepage: https://www.eclipse.org/virgo
+:ebr: http://www.eclipse.org/ebr[EBR]
+
+:imagesdir: assets/images
+
+== Introduction to the {tomcat-product-name}
+
+=== Overview
+
+In this chapter, we provide an overview of the {tomcat-product-name} focusing
+on what it is, what benefits it provides to developers and administrators,
+and why you should use it.
+
+anchor:introduction-what[]
+
+=== What is the {tomcat-product-name}?
+
+The {tomcat-product-name}, or {tomcat-product-name-short} for short, is the runtime portion of the {umbrella-virgo-name}.
+It is a lightweight, modular, OSGi-based runtime that provides a complete packaged solution for developing,
+deploying, and managing enterprise applications.
+By leveraging several best-of-breed technologies and improving upon
+them, the {tomcat-product-name-short} offers a compelling solution to develop and deploy
+enterprise applications.
+
+anchor:introduction-constituents[]
+
+==== What Makes up the {tomcat-product-name}?
+
+The {tomcat-product-name} is built on top of the following core technologies:
+
+* https://projects.spring.io/spring-framework/[Spring Framework], obviously!
+* http://tomcat.apache.org/[Tomcat] as the web container.
+* http://www.osgi.org/Specifications/HomePage[OSGi R4.3].
+* http://www.eclipse.org/equinox/[Equinox] as the OSGi implementation.
+* https://eclipse.org/gemini/blueprint/[Gemini Blueprint] for working with OSGi in a Spring application.
+* {tooling-guide} for developing applications.
+
+Note, however, that the {tomcat-product-name} isn't just a combination
+of these technologies. Rather, it integrates and extends these
+technologies to provide many features essential for developing,
+deploying, and managing today's enterprise Java applications.
+
+The following diagram presents a high-level overview of the {tomcat-product-name-short}'s architecture.
+
+image:introduction-architecture.png[]
+
+At the heart of the {tomcat-product-name} is the {kernel-product-name} or {kernel-product-name-short}.
+The {kernel-product-name-short} is an OSGi-based kernel that takes full advantage of the modularity
+and versioning of the OSGi platform. The {kernel-product-name-short} builds on a base version of {nano-product-name} or {nano-product-name-short} and extends its capabilities for
+provisioning and library management, as well as providing core functionality for the {tomcat-product-name-short}. The {nano-product-name-short} maintains a minimal
+runtime footprint and startup time. It builds on top of a pure Equinox, extending it with more sophisticated diagnostics and supportability functionality.
+The {nano-product-name-short} supports full p2 provisioning. This feature is not included in the Virgo Nano Base that the {kernel-product-name-short} is built on.
+
+To maintain a minimal runtime footprint, OSGi bundles are installed on demand by the
+{nano-product-name-short}. On subsequent restarts these core bundles are warm-started thus reducing the startup time. This allows for an application to be installed
+into a running {tomcat-product-name-short} and for its dependencies to be satisfied from an external repository. Not only
+does this remove the need to manually install all your application dependencies, which would be tedious, but it also keeps memory usage to a minimum.
+
+As shown in the figure, {kernel-product-name-short} runs on top of {nano-product-name-short} that extends Equinox within a standard Java
+Virtual Machine. Above the {kernel-product-name-short} further layers contribute functionality
+to the {tomcat-product-name-short}. Such as management and web application support.
+
+Version {version} of the {tomcat-product-name} supports *bundle*,
+*plan*, *PAR*, *configuration*,
+*Web Application Bundle (WAB)*, and *WAR* artifacts, which enable
+you to build sophisticated web applications. This includes support for
+standard Java EE WARs, "shared library" WARs, and "shared services" WARs, each of
+which will be covered in greater detail in xref:architecture[].
+
+[IMPORTANT]
+--
+The {nano-product-name} has a different provisioning system which isn't included in the Virgo Nano Base on which the
+{kernel-product-name-short} and the {tomcat-product-name-short} are built.
+--
+
+Version {version} of the {nano-product-name} supports *bundle*,
+*p2 feature*, *Web Application Bundle (WAB)*, and *WAR* artifacts, which enable
+you to build sophisticated web applications too, taking full advantage of p2's dependency resolution, automated download and fail-early mechanics.
+The {nano-product-name} does NOT support *plan*, *PAR* or *configuration* artifacts.
+New *features* are provisioned via *update sites* or *p2 repositories*.
+Brief overview of p2 and it's mechanics is available on http://bkapukaranov.wordpress.com/2011/07/12/rt-meets-p2/[this blog].
+The {nano-product-name-short}'s default web container implementation is Gemini Web.
+
+anchor:introduction-why[]
+
+=== Why the {tomcat-product-name}?
+
+You could deploy a web application in a stand-alone servlet engine or application server.
+Or you could even deploy directly in an OSGi container such as Equinox. However,
+deploying in the {tomcat-product-name} offers a number of key benefits that make it both more
+appealing and more suitable for enterprise application development.
+
+anchor:introduction-unified-deployment[]
+
+==== Deployment Options and Migration Paths
+
+While many applications deployed in the {tomcat-product-name} will take advantage
+of OSGi capabilities, not all applications need such sophistication.
+For example, development teams may initially choose to continue packaging
+existing web applications as standard WAR files and then gradually migrate
+toward a fully OSGi-based packaging and deployment model. The {tomcat-product-name}
+makes such migrations easy for developers by supporting multiple packaging
+and deployment formats. These formats and migration strategies are discussed
+in greater detail in xref:migrating-to-osgi[] and
+xref:formtags-case-study[].
+
+anchor:introduction-simplified-deployment[]
+
+==== Simplified Development and Deployment of OSGi-based Applications
+
+Prior to the release of the {tomcat-product-name}, developing and deploying OSGi
+applications involved inherent complexity such as:
+
+* *Obtaining OSGi bundles for popular Java libraries:*
+For optimal benefits, every technology you use in an OSGi application must
+be packaged as OSGi bundles. Sometimes, this involves manually converting
+JAR files into bundles and making sure that any libraries needed by those
+bundles are also available as OSGi bundles. The {ebr} is a good source of
+popular pre-bundled libraries.
+
+* *Package management complexity:*
+OSGi bundles use other bundles through `Import-Package` manifest headers.
+Many applications use a set of common technologies (e.g., an ORM solution,
+a web framework, etc.). Combining these two characteristics leads to duplicated
+configuration in the form of repeated and verbose `Import-Package` statements.
+
+* *Lack of application-level isolation:*
+In OSGi everything is a bundle, and all bundles share the same OSGi Service Registry.
+To highlight how conflicts can arise between applications and their services in this
+shared service registry, consider the following scenarios.
+
+** Application `A` is comprised of bundles `B` and `C`.
+In a standard OSGi environment, if you attempt to install two instances of the same
+version of application `A` (i.e., two sets of bundles `B` and
+`C`), a clash will occur, because you cannot deploy multiple bundles with
+the same `Bundle-SymbolicName` and `Bundle-Version` combination.
+
+** Application `A1` is comprised of bundles `B1` and `C1`.
+Similarly, application `A2` is comprised of bundles `B2` and `C2`.
+Each bundle has a unique combination of `Bundle-SymbolicName` and `Bundle-Version`.
+Bundles `B1` and `B2` both export service `S` which
+is imported by both `C1` and `C2`. In contrast to the previous
+example, there is no conflict resulting from duplicate
+`Bundle-SymbolicName`/`Bundle-Version` combinations; however,
+there is a clash for the exported service `S`.
+Which service `S` will bundles `C1` and `C2` end up
+using once they are installed?
+Assuming bundles `B1` and `C1` are intended to work together,
+you would not want bundle `C1` to get a reference to service `S`
+from bundle `B2`, because it is installed in a different logical application.
+On the contrary, you typically want bundle `C1` to get a reference to
+service `S` exported by bundle `B1`, but in a standard OSGi environment
+this may not be the case.
+
+Furthermore, since standard OSGi does not define a notion of an application as a set of bundles,
+you cannot deploy or undeploy an application and its constituent bundles as a single unit.
+
+The {tomcat-product-name} introduces a number of features to solve these issues:
+
+* A full set of OSGi bundles for many popular Java libraries to get you
+started quickly with creating OSGi applications.
+* An OSGi library concept that obviates the need to
+duplicate verbose `Import-Package` statements.
+* The PAR packaging format which offers
+application-level isolation and deployment.
+* The concept of a plan, which is an XML file that lists a collection of bundles that {tomcat-product-name} should load together as a single application.  Conceptually, plans are very like PARs, except that a plan describes the contents of the application rather than a PAR that actually contains them.
+
+anchor:introduction-diagnostics[]
+
+==== Enhanced Diagnostics During Deployment and in Production
+
+Identifying why an application won't deploy or which particular library
+dependencies are unsatisfied is the cause of many headaches!
+Similarly, production time errors that don't identify the root cause are
+all too familiar to Java developers. The {tomcat-product-name-short} was designed from the
+ground up to enable tracing and First Failure Data Capture (FFDC) that
+empower developers with precise information at the point of failure to
+fix the problem quickly.
+
diff --git a/programmer-guide/src/docs/asciidoc/known-issues.adoc b/programmer-guide/src/docs/asciidoc/known-issues.adoc
new file mode 100644
index 0000000..1a3603b
--- /dev/null
+++ b/programmer-guide/src/docs/asciidoc/known-issues.adoc
@@ -0,0 +1,138 @@
+:virgo-name: Virgo
+:version: 3.7.0.RC01
+
+:umbrella-virgo-name: Eclipse Virgo
+:tomcat-product-name: Virgo for Apache Tomcat
+:tomcat-product-name-short: VTS
+:jetty-product-name: Virgo Jetty Server
+:jetty-product-name-short: VJS
+:kernel-product-name: Virgo Kernel
+:kernel-product-name-short: VK
+:nano-product-name: Virgo Nano
+:nano-product-name-short: VN
+:user-guide: link:../../virgo-user-guide/html/index.html[User Guide]
+:tooling-guide: link:../../virgo-tooling-guide/html/index.html[Tooling Guide]
+
+:gemini-blueprint-guide: https://www.eclipse.org/gemini/blueprint/documentation/reference/2.0.0.RELEASE/html/index.html[Eclipse Gemini Blueprint Reference Guide]
+
+:spring-framework-version: 4.2.9.RELEASE
+
+:homepage: https://www.eclipse.org/virgo
+:ebr: http://www.eclipse.org/ebr[EBR]
+
+:imagesdir: assets/images
+
+anchor:known-issues[]
+
+== Known Issues
+
+anchor:known-issues-jpa[]
+
+=== JPA Entity Scanning
+
+Classpath scanning for JPA entities annotated with `@Entity` does
+not work. Describing entities with `@Entity` will work, but the
+entities need to be listed explicitly.
+
+anchor:known.issues.proxy[]
+
+=== `ClassNotFoundError` When Creating a Proxy
+
+When creating proxies at runtime, there are circumstances where `ClassNotFoundErrors`
+can be generated. These errors happen because the proxy creating bundle does not have visibility into every
+type on the interface of the proxy. You can either put in import statements for all the relevant types or
+add use a service (with visibility of all pertinent types) to create the proxy. Please see
+http://www.osgi.org/blog/2008/08/classy-solutions-to-tricky-proxies.html[this blog entry]
+for more details.
+
+anchor:known.issues.cglib[]
+
+=== Creating proxies with CGLIB for Package Protected Types
+
+In traditional Java EE applications user types are loaded by the same `ClassLoader` as
+CGLIB. This allows CGLIB to proxy package-protected types. In OSGi environments, user types and CGLIB will
+most likely be packaged in separate bundles. This results in the user types and CGLIB being loaded by
+different `ClassLoaders`. This prevents CGLIB from proxying any package-protected types.
+
+The workaround for this issue is to make all types that require proxying public.
+
+anchor:known-issues-jetty-restrictions[]
+
+=== {jetty-product-name} Restrictions
+
+The following Jetty features are not supported.
+
+* Tag Libraries other than the standard Apache Tag Library.
+
+anchor:known-issues-web-bundle-default-headers[]
+
+=== Default Web Application Bundle Headers
+
+The Gemini Web container conforms to the OSGi Web Applications specification and does not apply default values
+to the headers of a Web Application Bundle. However, SpringSource dm Server 2.0.x applies default values
+to certain headers (see xref:developing-applications-automatic-imports-web[Web Application Manifest
+Processing] for details) and so Virgo Web Server 2.1.x modified the behaviour of Gemini Web so that it applied default
+values consistently with dm Server 2.0.x.
+
+This behaviour is changed as of {tomcat-product-name} 3.0. {tomcat-product-name-short} now conforms strictly to the
+OSGi Web Applications specification.
+
+As a migration aid, *which may not be supported in a future release*, users may configure the {tomcat-product-name-short} Web Integration
+Layer to apply default values to the headers of a Web Application Bundle.
+See "Configuring the Web Integration Layer" in the {user-guide} for details.
+
+anchor:hibernate-resolution-issue[]
+
+=== Hibernate Resolution Issue
+
+Applications using Hibernate 3.4.0.GA need to upgrade the JBoss Hibernate Entity manager fragment bundle to version 3.4.0.GA-A.
+The symptoms are that the application will fail to resolve due to missing imports of packages such as `org.hibernate.ejb.transaction`
+and JBoss Hibernate Annotations `com.springsource.org.hibernate.annotations`.
+See https://bugs.eclipse.org/bugs/show_bug.cgi?id=335174[bug 335174] for details.
+
+The JBoss Hibernate Entity manager fragment bundle `com.springsource.org.hibernate.ejb` v3.4.0.GA in the
+http://ebr.springsource.com/repository/app/[SpringSource Enterprise Bundle Repository]
+depends on the package `org.slf4j` with a version range that excludes the version of the
+package provided with Virgo. The net effect is that Hibernate EJB fragment bundle fails to attach to its host
+`com.springsource.org.hibernate` and the host then does not export the packages the application
+may need, such as `org.hibernate.ejb.transaction`.
+
+An updated JBoss Hibernate Entity manager fragment and JBoss Hibernate Annotations with versions 3.4.0.GA-A which fixes this
+problem is available from the http://ebr.springsource.com/repository/app/[SpringSource Enterprise Bundle Repository].
+
+anchor:scoping-and-substitutable-exports[]
+
+=== Scoping and Substitutable Exports
+
+The restriction described in xref:developing-applications-plans-scoping[Plans and Scoping] that
+no package may be exported by more than one	bundle in a given scope can cause problems for bundles with
+*substitutable exports*. A substitutable export is a package which is exported and imported
+by the same bundle. The OSGi framework will discard either the import or the export of the package when the
+bundle is resolved.
+
+However, if more than one bundle in a scope has a substitutable export of the same package, then Virgo will fail
+to deploy the scoped application because the above restriction appears to be broken. Virgo could only spot that
+the restriction was not actually being broken by second guessing the resolution behaviour of the OSGi framework,
+something that Virgo generally avoids because of the fragility of that approach.
+
+It may be possible to work around this issue by omitting one of the bundles containing the substitutable export
+from the scoped application.
+
+It may also be possible to work around this issue by moving the bundles containing the substitutable exports outside the scope,
+although this will not give correct behaviour if the bundles' exported packages need to be available for thread
+context class loading.
+
+See https://bugs.eclipse.org/bugs/show_bug.cgi?id=330643[bug 330643] for an example of this issue.
+
+anchor:eclipselink-resolution-issue[]
+
+=== EclipseLink Resolution Issue
+
+Applications using EclipseLink may fail to resolve if the `osgi.enterprise` bundle is allowed to
+wire its `javax.persistence` package import to other than the EclipseLink `javax.persistence` bundle.
+
+To avoid this, install EclipseLink's `javax.persistence` bundle early. To install this bundle before
+any applications are deployed, list the bundle in the `initialArtifacts` property described in the
+{user-guide}.
+
+See https://bugs.eclipse.org/bugs/show_bug.cgi?id=337826[bug 337826] for details.
diff --git a/programmer-guide/src/docs/asciidoc/migrating-to-osgi.adoc b/programmer-guide/src/docs/asciidoc/migrating-to-osgi.adoc
new file mode 100644
index 0000000..cb943bd
--- /dev/null
+++ b/programmer-guide/src/docs/asciidoc/migrating-to-osgi.adoc
@@ -0,0 +1,145 @@
+:virgo-name: Virgo
+:version: 3.7.0.RC01
+
+:umbrella-virgo-name: Eclipse Virgo
+:tomcat-product-name: Virgo for Apache Tomcat
+:tomcat-product-name-short: VTS
+:jetty-product-name: Virgo Jetty Server
+:jetty-product-name-short: VJS
+:kernel-product-name: Virgo Kernel
+:kernel-product-name-short: VK
+:nano-product-name: Virgo Nano
+:nano-product-name-short: VN
+:user-guide: link:../../virgo-user-guide/html/index.html[User Guide]
+:tooling-guide: link:../../virgo-tooling-guide/html/index.html[Tooling Guide]
+
+:gemini-blueprint-guide: https://www.eclipse.org/gemini/blueprint/documentation/reference/2.0.0.RELEASE/html/index.html[Eclipse Gemini Blueprint Reference Guide]
+
+:spring-framework-version: 4.2.9.RELEASE
+
+:homepage: https://www.eclipse.org/virgo
+:ebr: http://www.eclipse.org/ebr[EBR]
+
+:imagesdir: assets/images
+
+anchor:migrating-to-osgi[Migrating to OSGi]
+
+== Migrating to OSGi
+
+Taking on a new technology such as OSGi may seem a bit daunting at first,
+but a proven set of migration steps can help ease the journey. Teams
+wishing to migrate existing applications to run on the {tomcat-product-name}
+will find that their applications typically fall into one of the following
+categories.
+
+* *Web Application*: for web applications,
+this chapter provides an overview of the steps required to migrate
+from a Standard WAR to a Shared Services WAR. Furthermore, the following
+chapter provides a detailed case study involving the migration
+of the Spring 3.0 Form Tags show case application.
+* *Anything else*: for any other type
+of application, you will typically either deploy your application
+as multiple individual bundles, as a single PAR file, or as a plan,
+which is the recommended approach for deploying applications on
+the {tomcat-product-name}. See xref:migrating-to-osgi-par-plan for details.
+
+anchor:migrating-to-osgi-web[]
+
+=== Migrating Web Applications
+
+Many applications may start with the standard WAR format for web applications and
+gradually migrate to a more OSGi-oriented architecture. Since the {tomcat-product-name}
+offers several benefits to all supported deployment formats, it provides a smooth
+migration path. Of course, depending on your application's complexity and your
+experience with OSGi, you may choose to start immediately with an OSGi-based
+architecture.
+
+
+anchor:migrating-to-osgi-web-standard-war[]
+
+==== Standard WAR
+
+If you are not yet familiar with OSGi or simply want to deploy an existing web application on the {tomcat-product-name},
+you can deploy a standard WAR and leverage the {tomcat-product-name-short} with a minimal learning curve. In fact reading the
+{user-guide}
+is pretty much all that you need to do to get started. Furthermore, you will gain
+familiarity with the {tomcat-product-name}, while preparing to take advantage of the other formats.
+
+anchor:migrating-to-osgi-web-shared-libraries-war[]
+
+==== Shared Libraries WAR
+
+The *Shared Libraries WAR*
+format is the first step to reaping the benefits of OSGi. In this phase, you dip your toes into OSGi-based dependency
+management by removing JAR files from the WAR and declaring dependencies on corresponding OSGi bundles.
+
+anchor:migrating-to-osgi-web-shared-services-war[]
+
+==== Shared Services WAR
+
+In this phase, you take the next step toward a fully OSGi-based architecture by separating your web artifacts
+(e.g., Servlets, Controllers, etc.) from the services they depend on.
+
+anchor:migrating-to-osgi-web-summary[]
+
+==== Web Migration Summary
+
+The following diagram graphically depicts the migration path from a Standard WAR to a Shared Services WAR.
+As you can see, the libraries (*libs*) move from within the deployment artifact
+to the Bundle Repository.
+Similarly, the services move from within the WAR to external bundles and are accessed via the
+OSGi Service Registry. In addition, the overall footprint of the deployment artifact decreases
+as you move towards a Shared Services WAR.
+image:migration-path-war-to-shsrv.png[]
+
+anchor:migrating-to-osgi-par-plan[]
+
+=== Migrating to a Plan or a PAR
+
+The first steps to migrating an existing application to a plan or a PAR are the same: deciding on the bundles that make up the application and ensuring that their `Import-Package`, `Import-Library`, and `Import-Bundle` manifest headers are correct.   Once you have the list of bundles that make up your application, you then decide whether you want to JAR them all into a single application file (PAR) or create a plan that simply lists the bundles by reference.  Creating a plan is the recommend way to create an application, although PARs also have benefits that might suit your needs better, as described in xref:migrating-to-osgi-parplan-decide[].
+
+anchor:migrating-to-osgi-parplan-bundles[]
+
+==== Creating the Application Bundles
+
+When migrating an existing application to the PAR packaging and deployment format or a plan,
+you consider modularity as the prime objective. Following the ideas discussed in
+xref:architecture-forming-bundles[], you refactor the application into multiple bundles.
+You may start conservatively with a small number of bundles and then further refactor those bundles.
+
+If the original code is crafted following good software practices such as separation of concerns and use of
+well-defined interfaces, migration may involve modifying only configuration and packaging. In other words,
+your Java sources will remain unchanged. Even configuration is likely to change only slightly.
+
+For example, the following diagram depicts a typical web application that has been refactored and
+packaged as a PAR. The blue elements within the *Application* box constitute
+the bundles of the application. Each of these bundles imports types from other bundles within
+the PAR using `Import-Package`. The green elements in the left column represent
+*libraries* installed on the {tomcat-product-name-short}. The PAR's bundles reference these
+libraries using `Import-Library`. The purple element in the left column
+represents a bundle within the {tomcat-product-name-short}'s bundle repository which is imported by the DAO
+bundle using `Import-Bundle`. In contrast to a traditional, monolithic
+WAR deployment, the PAR format provides both a logical and physical application boundary
+and simultaneously allows the application to benefit from both the OSGi container and the {tomcat-product-name}.
+image:migrating-to-osgi-par-structure.png[]
+
+anchor:migrating-to-osgi-parplan-decide[Plan or PAR?]
+
+==== Plan or PAR?
+
+Once you have refactored your existing application into separate OSGi bundles, you then must decide whether to package the bundles into a single PAR file or create a plan that lists the bundles by reference.  As described in more detail in preceding sections of this guides, PARs and plans have similar benefits, such as:
+
+* Scoping
+* Atomicity, or the ability to deploy and control the bundles as a single unit
+* Versioning
+* Improved serviceability
+
+Plans, the method most recommended by us to create your application, has the following added benefits:
+
+* Guaranteed order of deployment, based on the order in which they are listed in the plan's XML file
+* Ease of sharing content between plans and updating individual plans without having to physically repackage, due to the artifacts being listed by reference.
+* Ability to disable scoping and atomicity, if desired.
+
+The main benefit of PARS is that, because they physically contain all the required artifacts, you know exactly what bundles are deployed when you deploy the PAR file, in contrast to plans that allow content to be substituted or lost.
+
+For details about creating plans and PARs, see xref:developing-applications-plans[] and xref:developing-applications-packaging[], respectively.
diff --git a/programmer-guide/src/docs/asciidoc/preface.adoc b/programmer-guide/src/docs/asciidoc/preface.adoc
new file mode 100644
index 0000000..30996d1
--- /dev/null
+++ b/programmer-guide/src/docs/asciidoc/preface.adoc
@@ -0,0 +1,60 @@
+:virgo-name: Virgo
+:version: 3.7.0.RC01
+
+:umbrella-virgo-name: Eclipse Virgo
+:tomcat-product-name: Virgo for Apache Tomcat
+:tomcat-product-name-short: VTS
+:jetty-product-name: Virgo Jetty Server
+:jetty-product-name-short: VJS
+:kernel-product-name: Virgo Kernel
+:kernel-product-name-short: VK
+:nano-product-name: Virgo Nano
+:nano-product-name-short: VN
+:user-guide: http://www.eclipse.org/virgo/documentation/virgo-documentation-${version}/docs/virgo-user-guide/html/index.html[User Guide]
+:tooling-guide: http://www.eclipse.org/virgo/documentation/virgo-documentation-3.6.4.RELEASE/docs/virgo-tooling-guide/html/index.html[Tooling Guide]
+
+:gemini-blueprint-guide: https://www.eclipse.org/gemini/blueprint/documentation/reference/2.0.0.RELEASE/html/index.html[Eclipse Gemini Blueprint Reference Guide]
+
+:spring-framework-version: 4.2.9.RELEASE
+
+:homepage: https://www.eclipse.org/virgo
+:ebr: http://www.eclipse.org/ebr[EBR]
+
+:imagesdir: assets/images
+
+== Preface
+
+Increasing complexity in modern enterprise applications is a fact of life.
+Developers not only have to deal with complex business logic, but also a myriad
+of other concerns such as security, auditing, exposing business
+functionality to external applications, and managing the evolution of
+these concerns. The Spring Framework addresses these
+needs by offering a Plain-Old Java Object (POJO) based solution that
+lets you focus on your business logic.
+
+Complex applications pose problems that go beyond using the right set of
+technologies. You need to take into account other considerations such as
+a simplified development process, easy deployment, monitoring deployed
+applications, and managing changes in response to changing business needs.
+This is where the {umbrella-virgo-name} comes into play. It offers a simple yet
+comprehensive platform to develop, deploy, and service enterprise
+applications. In this Programmer Guide, we explore the runtime portions of the
+{umbrella-virgo-name}, the {tomcat-product-name}, {jetty-product-name} and the
+{kernel-product-name}, and learn how to develop applications to benefit from their
+capabilities.
+
+.For {kernel-product-name} Programmers
+[NOTE]
+--
+Although this guide is written primarily for {tomcat-product-name} programmers, much of it is also useful for
+{kernel-product-name} programmers who should simply ignore the web-related sections.
+--
+
+.For {nano-product-name} Programmers
+[NOTE]
+--
+This guide is written primarily for {tomcat-product-name} programmers. Although a base version of {nano-product-name}, without the new provisioning
+system, is used to build the {tomcat-product-name}, much of this guide does not apply to {nano-product-name}. The {nano-product-name-short} lacks regions support but has much
+improved runtime footprint and startup time and also provides support for p2 provisioning. The {nano-product-name} features are covered better in the
+{user-guide}.
+--
diff --git a/programmer-guide/src/docs/asciidoc/prerequisites.adoc b/programmer-guide/src/docs/asciidoc/prerequisites.adoc
new file mode 100644
index 0000000..b80094e
--- /dev/null
+++ b/programmer-guide/src/docs/asciidoc/prerequisites.adoc
@@ -0,0 +1,41 @@
+:virgo-name: Virgo
+:version: 3.7.0.RC01
+
+:umbrella-virgo-name: Eclipse Virgo
+:tomcat-product-name: Virgo for Apache Tomcat
+:tomcat-product-name-short: VTS
+:jetty-product-name: Virgo Jetty Server
+:jetty-product-name-short: VJS
+:kernel-product-name: Virgo Kernel
+:kernel-product-name-short: VK
+:nano-product-name: Virgo Nano
+:nano-product-name-short: VN
+:user-guide: http://www.eclipse.org/virgo/documentation/virgo-documentation-{version}/docs/virgo-user-guide/html/index.html[User Guide]
+:tooling-guide: http://www.eclipse.org/virgo/documentation/virgo-documentation-3.6.4.RELEASE/docs/virgo-tooling-guide/html/index.html[Tooling Guide]
+
+:gemini-blueprint-guide: https://www.eclipse.org/gemini/blueprint/documentation/reference/2.0.0.RELEASE/html/index.html[Eclipse Gemini Blueprint Reference Guide]
+
+:spring-framework-version: 4.2.9.RELEASE
+
+:homepage: https://www.eclipse.org/virgo
+:ebr: http://www.eclipse.org/ebr[EBR]
+
+:imagesdir: assets/images
+
+anchor:prerequisites-references[Prerequisites]
+
+== Prerequisites
+
+=== Runtime Environment
+{virgo-name} requires Java SE 7 or later to be installed. Java is available from
+http://www.oracle.com/technetwork/java/javase/downloads/index.html[Oracle] and elsewhere.
+
+=== References
+
+To make effective use of the {tomcat-product-name}, you should also refer to the following:
+
+* {user-guide}
+* {tooling-guide}
+* https://www.osgi.org/developer/specifications/[Blueprint Container Specification](in the OSGi 4.2 and 5.0 Enterprise Specifications)
+* https://docs.spring.io/spring/docs/{spring-framework-version}/spring-framework-reference/[Spring Framework {spring-framework-version} Reference Documentation]
+
diff --git a/programmer-guide/src/docs/asciidoc/virgo-programmer-guide.adoc b/programmer-guide/src/docs/asciidoc/virgo-programmer-guide.adoc
new file mode 100644
index 0000000..bcb6fae
--- /dev/null
+++ b/programmer-guide/src/docs/asciidoc/virgo-programmer-guide.adoc
@@ -0,0 +1,61 @@
+:virgo-name: Virgo
+:version: 3.7.0.RC01
+
+:umbrella-virgo-name: Eclipse Virgo
+:tomcat-product-name: Virgo for Apache Tomcat
+:tomcat-product-name-short: VTS
+:jetty-product-name: Virgo Jetty Server
+:jetty-product-name-short: VJS
+:kernel-product-name: Virgo Kernel
+:kernel-product-name-short: VK
+:nano-product-name: Virgo Nano
+:nano-product-name-short: VN
+:user-guide: http://www.eclipse.org/virgo/documentation/virgo-documentation-{version}/docs/virgo-user-guide/html/index.html[User Guide]
+:tooling-guide: http://www.eclipse.org/virgo/documentation/virgo-documentation-3.6.4.RELEASE/docs/virgo-tooling-guide/html/index.html[Tooling Guide]
+
+:gemini-blueprint-guide: https://www.eclipse.org/gemini/blueprint/documentation/reference/2.0.0.RELEASE/html/index.html[Eclipse Gemini Blueprint Reference Guide]
+
+:spring-framework-version: 4.2.9.RELEASE
+
+:homepage: https://www.eclipse.org/virgo
+:ebr: http://www.eclipse.org/ebr[EBR]
+
+:imagesdir: assets/images
+:experimental: true
+:toc-placement: manual
+:toc:
+
+= {virgo-name} Programmer Guide
+
+[%hardbreaks]
+Ramnivas Laddad
+Colin Yates
+Sam Brannen
+Rob Harrop
+Christian Dupuis
+Andy Wilkinson
+Glyn Normington
+Steve Powell
+Christopher Frost
+Florian Waibel
+
+image::virgo-logo-small.png[Eclipse Virgo,float="right"]
+
+[%hardbreaks]
+{umbrella-virgo-name}
+{version}
+Copyright (C) 2009, 2011 VMware Inc. and others
+
+'''
+
+toc::[]
+
+include::preface.adoc[]
+include::prerequisites.adoc[]
+include::introduction.adoc[]
+include::architecture.adoc[]
+include::developing-applications.adoc[]
+include::migrating-to-osgi.adoc[]
+include::formtags-case-study.adoc[]
+include::common-libraries.adoc[]
+include::known-issues.adoc[]
diff --git a/programmer-guide/src/formtags-case-study.xml b/programmer-guide/src/formtags-case-study.xml
deleted file mode 100644
index d387c69..0000000
--- a/programmer-guide/src/formtags-case-study.xml
+++ /dev/null
@@ -1,1069 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
-		"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
-<chapter id="formtags-case-study">
-	<title>Case Study: Migrating the Form Tags Sample Application</title>
-	<titleabbrev>Migrating Form Tags</titleabbrev>
-	<para>
-		In this chapter we will walk through the steps needed to migrate the
-		Form Tags sample application from a standard Java EE WAR to a fully
-		OSGi
-		compliant
-		<emphasis>Shared Services WAR</emphasis>
-		within a PAR.
-		The migration involves four packaging and deployment
-		formats:
-		<orderedlist>
-			<listitem>
-				<para>
-					<link linkend="formtags-case-study-war">Standard WAR</link>
-				</para>
-			</listitem>
-			<listitem>
-				<para>
-					<link linkend="formtags-case-study-war-shared-libs">Shared Libraries WAR</link>
-				</para>
-			</listitem>
-			<listitem>
-				<para>
-					<link linkend="formtags-case-study-war-shared-services">Shared Services WAR</link>
-				</para>
-			</listitem>
-			<listitem>
-				<para>
-					<link linkend="formtags-case-study-par">PAR with a shared services WAR</link>
-				</para>
-			</listitem>
-		</orderedlist>
-	</para>
-	<para>
-		Each of these migration steps will produce a web application
-		that
-		can be deployed and run on the @tomcat.product.name.short@.
-	</para>
-	<para>
-		After summarising the process, an example
-		<literal>plan</literal>
-		is shown which is another way of
-		packaging and deploying the application.
-	</para>
-	<para>
-		The following image displays the directory structure you should have
-		after installing the Form Tags sample. Note however that the release
-		tag
-		will typically resemble
-		<literal>3.0.0.RELEASE</literal>
-		.
-	</para>
-	<para>
-		<imagedata fileref="images/formtags-case-study-sample-layout.png"
-			format="PNG" />
-	</para>
-	<para>
-		The
-		<literal>dist</literal>
-		directory contains the distributables,
-		and the
-		<literal>projects</literal>
-		directory contains the source code
-		and build scripts.
-	</para>
-	<para>
-		For simplicity, this chapter will focus on the distributables—which
-		are built using Virgo-Build
-		rather than on configuring a project in an
-		IDE.
-		<tip>
-			Pre-packaged distributables are made available in the
-			<literal>dist</literal>
-			directory;
-			however, if you would like to modify the samples or build
-			them from scratch, you may
-			do so using Virgo-Build. Take a look at
-			the
-			<literal>README.TXT</literal>
-			file in each of the folders under
-			the
-			<literal>projects</literal>
-			directory in the
-			Form Tags sample for instructions.
-		</tip>
-	</para>
-	<section id="formtags-case-study-introduction">
-		<title>Overview of the Form Tags Sample Application</title>
-		<para>
-			The sample that we will be using is the Form Tags show case
-			sample
-			which was provided with Spring 2.0. The Form Tags application
-			has
-			been removed from the official Spring 2.5.x distributions;
-			however,
-			since it is relatively simple but still contains enough
-			ingredients
-			to demonstrate the various considerations required during
-			a migration,
-			we have chosen to use it for these examples.
-		</para>
-		<para>
-			The purpose of the Form Tags show case sample was to demonstrate how
-			the Spring specific
-			<literal>form:</literal>
-			tags, released
-			in Spring 2.0, make view development with JSPs and tag
-			libraries easier.
-			The Form Tags application consists of a single
-			<literal>UserService</literal>
-			which returns a list
-			of
-			<literal>Users</literal>
-			. Furthermore, the application demonstrates how to list, view,
-			and
-			edit
-			<literal>Users</literal>
-			in a simple Spring MVC based web application using JSP
-			and JSTL.
-		</para>
-	</section>
-
-	<section id="formtags-case-study-war">
-		<title>Form Tags WAR</title>
-		<para>
-			We begin with a standard WAR deployment.
-			<note>
-				The @tomcat.product.name.short@ supports the standard Java EE WAR
-				packaging
-				and deployment format as a first-class citizen, and there
-				are many
-				benefits to deploying a standard WAR file on the
-				@tomcat.product.name.short@ including,
-				but not limited to: tooling
-				support, runtime error diagnostics, FFDC
-				(first failure data
-				capture), etc.
-				In addition, support for standard WAR deployment
-				provides an easy on-ramp
-				for trying out the
-				@tomcat.product.name.short@ with existing web applications.
-			</note>
-		</para>
-		<para>
-			The following screen shot displays the directory structure of the
-			Form Tags application using the standard WAR format. As you can see,
-			there is no deviation from the standard structure and layout, and as
-			you would expect, all of the web application&rsquo;s third-party
-			dependencies
-			(for example: Spring, Commons Logging) are packaged as
-			JARs in
-			<literal>WEB-INF/lib</literal>
-			.
-		</para>
-		<para>
-			<imagedata fileref="images/formtags-case-study-exploded-war.png"
-				format="PNG" />
-		</para>
-		<para>
-			To deploy this application, simply copy
-			<literal>dist/formtags-war-3.0.0.*.war</literal>
-			to
-			the
-			<literal>SERVER_HOME/pickup</literal>
-			directory for hot deployment.
-		</para>
-		<para>
-			You should then see the @tomcat.product.name.short@ produce
-			console output similar to the following:
-		</para>
-		<note>
-			<para>The console output has been reformatted to fit this document.
-			</para>
-		</note>
-		<programlisting>
-[2009-07-01 14:54:45.135] fs-watcher
-	&lt;SPDE0048I&gt; Processing 'CREATED' event for file 'formtags-war-3.0.0.RELEASE.war'.
-[2009-07-01 14:54:45.797] fs-watcher
-	&lt;SPDE0010I&gt; Deployment of 'formtags-war-3.0.0.RELEASE.war' version '0' completed.
-[2009-07-01 14:54:45.797] Thread-20
-	&lt;SPWE0000I&gt; Starting web bundle '/formtags-war-3.0.0.RELEASE'.
-[2009-07-01 14:54:46.380] Thread-20
-	&lt;SPWE0001I&gt; Started web bundle '/formtags-war-3.0.0.RELEASE'.
-</programlisting>
-		<para>
-			Navigate to
-			<literal>http://localhost:8080/</literal>
-			plus the web application context path,
-			which in the above case is
-			<literal>formtags-war-3.0.0.RELEASE</literal>
-			. Thus navigating to
-			<literal>http://localhost:8080/formtags-war-3.0.0.RELEASE</literal>
-			should render the sample application&rsquo;s welcome page, as
-			displayed in the screen
-			shot below.
-			<tip>
-				For WARs, the default web context path is the name of the WAR file
-				without the
-				<literal>.war</literal>
-				extension. You can optionally
-				specify a context path using the
-				<literal>Web-ContextPath</literal>
-				bundle
-				manifest header, which will be described in further detail
-				later.
-			</tip>
-		</para>
-		<para>
-			<imagedata fileref="images/formtags-case-study-war-webpage.png"
-				format="PNG" />
-		</para>
-	</section>
-
-	<section id="formtags-case-study-war-shared-libs">
-		<title>Form Tags Shared Libraries WAR</title>
-		<para>
-			As mentioned above, a standard WAR file typically packages of all its
-			required
-			dependencies in
-			<literal>WEB-INF/lib</literal>
-			. The servlet container will
-			then add all of the JARs in
-			<literal>WEB-INF/lib</literal>
-			to the application&rsquo;s
-			classpath.
-		</para>
-		<para>
-			The first step of the migration towards benefiting from an OSGi
-			container is to retrieve the dependencies from the
-			@tomcat.product.name.short@&rsquo;s bundle
-			repository at runtime. This
-			can significantly reduce the time it takes to build
-			and deploy the
-			application. It also enables the enforcement of policies
-			regarding the
-			use of third-party libraries.
-		</para>
-		<para>
-			The way in which dependencies are declared in an OSGi environment is
-			via manifest headers in a bundle&rsquo;s
-			<literal>/META-INF/MANIFEST.MF</literal>
-			.
-			As mentioned in
-			<xref linkend="developing-applications" />
-			, there are
-			three ways of expressing dependencies:
-			<literal>Import-Package</literal>
-			,
-			<literal>Import-Bundle</literal>
-			and
-			<literal>Import-Library</literal>
-			.
-		</para>
-		<para>
-			The Form Tags application uses JSTL standard tag libraries.
-			Thus, you
-			need to choose a JSTL provider, for example the
-			Apache implementation
-			which comes with the @tomcat.product.name.short@. To use the
-			Apache
-			implementation of JSTL, you need to express your dependency
-			as
-			outlined in the following manifest listing.
-			Because it is a single
-			bundle,
-			<literal>Import-Bundle</literal>
-			is
-			the simplest and therefore preferred manifest header to use.
-		</para>
-		<para>
-			The Form Tags application requires commons-logging and Spring.
-			It
-			would be very painful to have to list all the Spring packages one by
-			one.
-			Equally, considering the number of bundles that make up the
-			Spring framework, it would be verbose to list each bundle. Therefore
-			<literal>Import-Library</literal>
-			is the preferred approach
-			for expressing the dependency on the Spring
-			framework.
-		</para>
-		<tip>
-			<para>
-				How do you determine the name of a library definition provided
-				by the
-				@tomcat.product.name@?
-				Use the
-				<ulink url="http://www.springsource.com/repository">@ebr@</ulink>
-				.
-			</para>
-		</tip>
-		<para>
-			Examine the
-			<literal>/META-INF/MANIFEST.MF</literal>
-			in
-			<literal>/dist/formtags-shared-libs-*.war</literal>
-			:
-			<programlisting>
-Manifest-Version: 1.0
-Ant-Version: Apache Ant 1.7.0
-Created-By: 1.5.0_13-119 (Apple Inc.)
-Bundle-ManifestVersion: 2
-Bundle-SymbolicName: org.springframework.showcase.formtags-shared-libs
-<emphasis role="bold">Import-Library</emphasis>: org.springframework.spring;version="[3.0.0,4.0.0)"
-<emphasis role="bold">Import-Bundle</emphasis>: com.springsource.org.apache.taglibs.standard;version="1
- .1.2"
-</programlisting>
-			You can see the
-			<literal>Import-Library</literal>
-			and
-			<literal>Import-Bundle</literal>
-			directives that instruct the @tomcat.product.name.short@ to add the
-			appropriate package imports to the bundle
-			classpath used by this WAR file.
-		</para>
-		<para>
-			Deploying the shared libraries WAR onto the
-			@tomcat.product.name.short@ should result
-			in console output similar to
-			the following:
-		</para>
-		<note>
-			<para>The console output has been reformatted to fit this document.
-			</para>
-		</note>
-		<programlisting>
-[2009-07-01 15:00:14.953] fs-watcher
-	&lt;SPDE0048I&gt; Processing 'CREATED' event for file 'formtags-shared-libs-3.0.0.RELEASE.war'.
-[2009-07-01 15:00:15.363] fs-watcher
-	&lt;SPDE0010I&gt; Deployment of 'org.springframework.showcase.formtags_shared_libs' version '2' completed.
-[2009-07-01 15:00:15.364] Thread-20
-	&lt;SPWE0000I&gt; Starting web bundle '/formtags-shared-libs-3.0.0.RELEASE'.
-[2009-07-01 15:00:15.816] Thread-20
-	&lt;SPWE0001I&gt; Started web bundle '/formtags-shared-libs-3.0.0.RELEASE'.
-</programlisting>
-		<para>
-			Navigating to
-			<literal>http://localhost:8080/formtags-shared-libs-BUILDTAG
-			</literal>
-			should render the welcome page. Note that for the pre-packaged
-			distributable,
-			the
-			<literal>BUILDTAG</literal>
-			should be similar to
-			<literal>3.0.0.RELEASE</literal>
-			;
-			whereas, for a local build the
-			<literal>-BUILDTAG</literal>
-			may be completely
-			omitted. Please consult the console output,
-			web-based admin console, or log
-			to determine the exact context path
-			under which the web application has been deployed.
-		</para>
-	</section>
-
-	<section id="formtags-case-study-war-shared-services">
-		<title>Form Tags Shared Services WAR</title>
-		<para>
-			The next step in the migration is to deploy the services as a
-			separate
-			OSGi bundle which the WAR then references.
-			The Form Tags
-			sample has a single service
-			<literal>UserManager</literal>
-			.
-		</para>
-		<para>
-			This scenario has two separate deployables, the
-			<literal>service</literal>
-			bundle and the WAR file.
-			The following image shows the two separate
-			source trees:
-		</para>
-		<para>
-			<imagedata fileref="images/formtags-case-study-shared-services-eclipse.png"
-				format="PNG" />
-			<note>
-				Note that the WAR does not contain the
-				<literal>.domain</literal>
-				or
-				<literal>.service</literal>
-				packages as these will be imported from the separate service bundle.
-			</note>
-		</para>
-		<section id="formtags-case-study-war-shared-services-service">
-			<title>The Service Bundle</title>
-			<para>
-				The responsibility of the first bundle (
-				<literal>formtags-shared-services-service</literal>
-				)
-				is to provide the API of the formtags service. This includes both
-				the
-				domain and the service API. In the same way that imports are
-				defined
-				in the
-				<literal>/META-INF/MANIFEST.MF</literal>
-				, so are exports.
-				The following is the
-				<literal>/META-INF/MANIFEST.MF</literal>
-				listing from the service bundle.
-				<programlisting>
-Manifest-Version: 1.0
-Ant-Version: Apache Ant 1.7.0
-Created-By: 1.5.0_13-119 (Apple Inc.)
-Bundle-ManifestVersion: 2
-Bundle-Name: FormTags Service (and implementation)
-Bundle-SymbolicName: org.springframework.showcase.formtags.service-shared-services
-<emphasis role="bold">Export-Package</emphasis>: org.springframework.showcase.formtags.service,org.spri
- ngframework.showcase.formtags.domain
-Import-Library: org.springframework.spring;version="[3.0.0,4.0.0)"
-</programlisting>
-			</para>
-			<para>
-				The symbolic name of this bundle is
-				<literal>org.springframework.showcase.formtags.service-shared-services
-				</literal>
-				.
-				Note that the name of the bundle typically describes the package
-				that the bundle primarily exports.
-				If you take a look at the
-				<literal>repository/bundles/ext</literal>
-				in the @tomcat.product.name.short@
-				directory, you&rsquo;ll see that
-				names are almost always indicative of the contents of the bundle.
-				For this example, however, we have also appended
-				&quot;
-				<literal>-shared-services</literal>
-				&quot;
-				in order to avoid possible clashes with other bundle symbolic
-				names.
-				You will see later that the PAR also contains a service
-				bundle.
-				<note>
-					In OSGi, the combination of
-					<literal>Bundle-SymbolicName</literal>
-					and
-					<literal>Bundle-Version</literal>
-					is used to uniquely identify
-					a bundle within the OSGi container.
-					Furthermore, when you deploy
-					a bundle to the @tomcat.product.name@,
-					for example via the
-					<literal>pickup</literal>
-					directory, a bundle&rsquo;s filename is also used to uniquely
-					identify it for
-					the purpose of supporting
-					<emphasis>hot deployment</emphasis>
-					via
-					the file system.
-				</note>
-			</para>
-			<para>
-				As well as exporting types (i.e. the domain classes and service
-				API), the service bundle also publishes an implementation of the
-				<literal>UserManager</literal>
-				. The actual implementation is
-				<literal>StubUserManager</literal>
-				; however, that should remain an
-				implementation detail of this
-				bundle.
-			</para>
-			<para>
-				The fact that this bundle publishes a service is not captured in
-				the
-				<literal>/META-INF/MANIFEST.MF</literal>
-				, as it is a Spring-DM concept.
-				The following image is of
-				<literal>src/main/resources/spring</literal>
-				.
-			</para>
-			<para>
-				<imagedata
-					fileref="images/formtags-case-study-shared-services-service-resources.png"
-					format="PNG" />
-			</para>
-			<para>
-				As you can see there are two Spring configuration files:
-				<literal>module-context.xml</literal>
-				and
-				<literal>osgi-context.xml</literal>
-				.
-				<tip>
-					These names are abitrary; however, they follow an informal
-					convention:
-					<literal>module-context.xml</literal>
-					typically bootstraps the Spring context
-					(usually delegating to
-					smaller fine grained context files inside another directory),
-					whilst
-					<literal>osgi-context.xml</literal>
-					contains all the OSGi service exports and references.
-				</tip>
-				The following is a listing of
-				<literal>module-context.xml</literal>
-				.
-				<programlisting language="xml">
-&lt;?xml version="1.0" encoding="UTF-8"?&gt;
-
-&lt;beans xmlns="http://www.springframework.org/schema/beans"
-	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-	xsi:schemaLocation="
-		http://www.springframework.org/schema/beans
-		http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"&gt;
-
-	&lt;bean id="userManager"
-		class="org.springframework.showcase.formtags.service.internal.StubUserManager"/&gt;
-
-&lt;/beans&gt; </programlisting>
-				As you can see, this simply defines a bean called
-				<literal>userManager</literal>
-				.
-				The following is a listing of
-				<literal>osgi-context.xml</literal>
-				.
-				<programlisting language="xml">
-&lt;?xml version="1.0" encoding="UTF-8"?&gt;
-&lt;beans:beans
-	xmlns="http://www.springframework.org/schema/osgi"
-	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-	xmlns:beans="http://www.springframework.org/schema/beans"
-	xsi:schemaLocation="http://www.springframework.org/schema/osgi
-		http://www.springframework.org/schema/osgi/spring-osgi.xsd
-		http://www.springframework.org/schema/beans
-		http://www.springframework.org/schema/beans/spring-beans.xsd"&gt;
-
-	&lt;service ref="userManager"
-		interface="org.springframework.showcase.formtags.service.UserManager"/&gt;
-
-&lt;/beans:beans&gt; </programlisting>
-				This single bean definition exports the
-				<literal>userManager</literal>
-				defined in
-				<literal>module-context.xml</literal>
-				to the
-				OSGi service registry and makes it available under the public
-				<literal>org.springframework.showcase.formtags.service.UserManager
-				</literal>
-				API.
-			</para>
-			<para>
-				The service bundle should now be ready to deploy on the
-				@tomcat.product.name.short@.
-				So copy
-				<literal>/dist/formtags-shared-services-services*</literal>
-				to the
-				<literal>SERVER_HOME/pickup</literal>
-				directory.
-				Output similar to the following should appear in the
-				@tomcat.product.name.short@&rsquo;s console:
-			</para>
-			<note>
-				<para>The console output has been reformatted to fit this document.
-				</para>
-			</note>
-			<programlisting>
-[2009-07-01 15:05:03.511] fs-watcher
-	&lt;SPDE0048I&gt; Processing 'CREATED' event for file 'formtags-shared-services-service-2.0.0.RELEASE.jar'.
-[2009-07-01 15:05:03.688] fs-watcher
-	&lt;SPDE0010I&gt; Deployment of 'org.springframework.showcase.formtags.service_shared_services' version '2.0.0.RELEASE' completed.
-</programlisting>
-		</section>
-		<section id="formtags-case-study-war-shared-services-war">
-			<title>Accessing the Service and Types from the WAR</title>
-			<para>
-				The WAR file now needs to access the types and service exported
-				by
-				the service bundle. The following listing is the WAR&rsquo;s
-				<literal>/META-INF/MANIFEST.MF</literal>
-				which imports the types
-				exported by the service bundle. The
-				<literal>Import-Bundle</literal>
-				statement has also been extended to import
-				<literal>org.springframework.osgi.core</literal>
-				,
-				which is necessary in order to load an OSGi-enabled
-				<literal>WebApplicationContext</literal>
-				.
-				<programlisting>
-Manifest-Version: 1.0
-Ant-Version: Apache Ant 1.7.0
-Created-By: 1.5.0_13-119 (Apple Inc.)
-Bundle-ManifestVersion: 2
-Bundle-SymbolicName: org.springframework.showcase.formtags.web-shared-
- services
-<emphasis role="bold">Import-Package</emphasis>: org.springframework.showcase.formtags.domain,org.sprin
- gframework.showcase.formtags.service, org.eclipse.virgo.web.dm;version="[1.0,2.1)"
-Import-Library: org.springframework.spring;version="[2.5.4,3.1.0)"
-Import-Bundle: com.springsource.org.apache.taglibs.standard;version="1
- .1.2",<emphasis role="bold">org.springframework.osgi.core</emphasis>
-</programlisting>
-			</para>
-			<para>
-				In addition to importing the exported types of the service bundle,
-				the WAR must also obtain a reference to the
-				<literal>UserManager</literal>
-				published by the service bundle. The following image shows the
-				directory
-				structure of the Shared Services WAR.
-			</para>
-			<para>
-				<imagedata
-					fileref="images/formtags-case-study-shared-services-war-resources.png"
-					format="PNG" />
-			</para>
-			<para>
-				As you can see in the above image, the Form Tags Shared Services
-				WAR&rsquo;s
-				<literal>/WEB-INF/web.xml</literal>
-				directory contains a standard
-				<literal>web.xml</literal>
-				deployment descriptor,
-				<literal>applicationContext.xml</literal>
-				which defines the configuration
-				for the
-				<emphasis>root</emphasis>
-				<literal>WebApplicationContext</literal>
-				, and
-				<literal>formtags-servlet.xml</literal>
-				which defines the configuration specific to the
-				configured
-				<emphasis>formtags</emphasis>
-				<literal>DispatcherServlet</literal>
-				.
-			</para>
-			<para>
-				As is typical for Spring MVC based web applications, you configure a
-				<literal>ContextLoaderListener</literal>
-				in
-				<literal>web.xml</literal>
-				to load your root
-				<literal>WebApplicationContext</literal>
-				; however, to enable your
-				<literal>WebApplicationContext</literal>
-				to be able to reference services from the OSGi Service Registry,
-				you
-				must explicitly set the
-				<literal>contextClass</literal>
-				Servlet context parameter to the fully qualified
-				class name of a
-				<literal>ConfigurableWebApplicationContext</literal>
-				which is OSGi-enabled. When deploying
-				Shared Services WARs to the
-				@tomcat.product.name@, you should use
-				<literal>org.eclipse.virgo.web.dm.ServerOsgiBundleXmlWebApplicationContext
-				</literal>.
-				This will
-				then enable the use of Spring-DM&rsquo;s
-				<literal>&lt;reference ... /&gt;</literal>
-				within your root
-				<literal>WebApplicationContext</literal>
-				(i.e., in
-				<literal>applicationContext.xml</literal>
-				).
-				The following listing is an excerpt from
-				<literal>/WEB-INF/web.xml</literal>
-				.
-			</para>
-			<programlisting language="xml"><![CDATA[
-	<context-param>
-		<param-name>contextClass</param-name>
-		<param-value>org.eclipse.virgo.web.dm.ServerOsgiBundleXmlWebApplicationContext</param-value>
-	</context-param>
-
-	<listener>
-		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
-	</listener>
-]]></programlisting>
-			<para>
-				The Form Tags Shared Services WAR contains a
-				<literal>/WEB-INF/applicationContext.xml</literal>
-				file which is the default configuration location used to create the
-				<emphasis>root</emphasis>
-				<literal>WebApplicationContext</literal>
-				for Spring MVC&rsquo;s
-				<literal>ContextLoaderListener</literal>
-				.
-				<note>
-					As already mentioned, in the OSGi world, bundle configuration
-					takes
-					place in the root
-					<literal>/META-INF/</literal>
-					directory.
-					Typically Spring-DM powered configuration files will live
-					there as well (e.g., in
-					<literal>/META-INF/spring/*.xml</literal>
-					).
-					In a WAR, however, the root
-					<literal>WebApplicationContext</literal>
-					loaded by
-					<literal>ContextLoaderListener</literal>
-					and the
-					<literal>DispatcherServlet&rsquo;s</literal>
-					application context typically live in
-					<literal>/WEB-INF/</literal>
-					.
-				</note>
-				The following is the listing of the WAR&rsquo;s
-				<literal>/WEB-INF/applicationContext.xml</literal>
-				.
-				<programlisting language="xml">
-&lt;?xml version="1.0" encoding="UTF-8"?&gt;
-&lt;beans:beans
-   xmlns="http://www.springframework.org/schema/osgi"
-   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-   xmlns:beans="http://www.springframework.org/schema/beans"
-   xsi:schemaLocation="http://www.springframework.org/schema/osgi
-	   http://www.springframework.org/schema/osgi/spring-osgi.xsd
-	   http://www.springframework.org/schema/beans
-	   http://www.springframework.org/schema/beans/spring-beans.xsd"&gt;
-
-	&lt;reference id="userManager"
-		interface="org.springframework.showcase.formtags.service.UserManager"/&gt;
-
-&lt;/beans:beans&gt; </programlisting>
-				The single bean declaration is retrieving a service that implements
-				the
-				<literal>org.springframework.showcase.formtags.service.UserManager
-				</literal>
-				API from the OSGi Service Registry.
-				<tip>
-					You might have been expecting a reference to the service bundle,
-					but that isn&rsquo;t how OSGi works. OSGi provides a service
-					registry, and this bean definition is accessing a service in that
-					registry that meets the specified restriction (i.e. implements
-					the
-					specified interface). This leads to a very loosely coupled
-					programming model: the WAR really doesn&rsquo;t care where the
-					implementation
-					comes from.
-				</tip>
-				<tip>
-					What happens if there is no service at runtime?
-					What if there are
-					multiple services that match the criteria?
-					Spring-DM provides a lot
-					of configuration options, including
-					whether or not the reference is
-					<emphasis>mandatory</emphasis>
-					,
-					how long to wait for a service reference, etc. Please consult the
-					<ulink url="http://www.springframework.org/osgi/">Spring Dynamic Modules for OSGi</ulink>
-					home page for further information.
-				</tip>
-				<para>
-					One of the benefits of programming to interfaces is that you
-					are
-					decoupled from the actual implementation; Spring-DM provides a
-					proxy. This
-					has enormous benefits including the ability to
-					dynamically refresh individual bundles without
-					cascading that
-					refresh to unrelated bundles.
-				</para>
-			</para>
-			<para>
-				To deploy the WAR, copy
-				<literal>/dist/formtags-shared-services-war*</literal>
-				to the
-				<literal>SERVER_HOME/pickup</literal>
-				directory.
-				You should then see console output similar to the
-				following:
-			</para>
-			<note>
-				<para>The console output has been reformatted to fit this document.
-				</para>
-			</note>
-			<programlisting>
-[2009-07-01 15:09:19.819] fs-watcher
-    &lt;SPDE0048I&gt; Processing 'CREATED' event for file 'formtags-shared-services-war-3.0.0.RELEASE.war'.
-[2009-07-01 15:09:20.167] fs-watcher
-    &lt;SPDE0010I&gt; Deployment of 'org.springframework.showcase.formtags.web_shared_services' version '3' completed.
-[2009-07-01 15:09:20.168] Thread-20
-    &lt;SPWE0000I&gt; Starting web bundle '/formtags-shared-services-war-3.0.0.RELEASE'.
-[2009-07-01 15:09:20.647] Thread-20
-    &lt;SPWE0001I&gt; Started web bundle '/formtags-shared-services-war-3.0.0.RELEASE'.
-</programlisting>
-			Navigating to the appropriate link should render the welcome page.
-		</section>
-	</section>
-
-	<section id="formtags-case-study-par">
-		<title>Form Tags PAR</title>
-		<para>
-			The final step in the migration is that of a full blown
-			OSGi
-			application with web support. The @tomcat.product.name@ introduces a
-			new packaging and deployment format: the PAR.
-
-			A PAR is a standard JAR
-			with a &quot;
-			<literal>.par</literal>
-			&quot;
-			file extension which contains all of the modules of your
-			application (e.g., service, domain, and infrastructure bundles
-			as well
-			as a WAR for web applications) in a single deployment unit.
-			Moreover,
-			a PAR defines both a physical and logical application boundary.
-		</para>
-		<para>
-			The PAR sample is comprised of four directories, as shown below.
-		</para>
-		<para>
-			<imagedata fileref="images/formtags-case-study-par-sample.png"
-				format="PNG" />
-		</para>
-		<para>
-			The
-			<literal>formtags-par</literal>
-			directory is a build project that
-			understands how to create the PAR
-			from its constituent bundles.
-		</para>
-		<section id="formtags-case-study-par-granularity">
-			<title>Granularity of the PAR</title>
-			<para>
-				Achieving the appropriate level of granularity for your OSGi
-				application is more of an art than a science. It helps to look
-				at the
-				different requirements:
-				<table id="formtags-case-study-par-granularity-drivers-table"
-					colsep="1" frame="all" rowsep="1">
-					<title>Granularity drivers</title>
-					<tgroup cols="2">
-						<colspec colwidth="2*" />
-						<colspec colwidth="3*" />
-						<thead>
-							<row>
-								<entry>Requirement</entry>
-								<entry>Description</entry>
-							</row>
-						</thead>
-						<tbody>
-							<row>
-								<entry>Domain/Technical Layering</entry>
-								<entry>
-									Applications can be split either by domain (i.e.,
-									by use case or
-									<emphasis>vertically</emphasis>
-									) or
-									by their technical layers (i.e.,
-									<emphasis>horizontally</emphasis>
-									).
-									Since the Form Tags application essentially has only
-									a single
-									use case, the bundles are split by technical layering
-									(i.e.,
-									domain, service, and web).
-								</entry>
-							</row>
-							<row>
-								<entry>Refreshability</entry>
-								<entry>
-									A major benefit of OSGi is that of refreshability: if one
-									bundle
-									is changed, only bundles that have a dependency upon
-									the
-									exported types need to be refreshed. This has a high impact
-									on
-									development time costs as well as production
-									costs. However,
-									this can lead to lots of smaller, fine grained
-									bundles. An
-									example of this granularity would be to
-									separate out the service
-									API and implementation into two different
-									bundles. This means
-									that a change in the implementation
-									wouldn&rsquo;t require any
-									other bundles to be refreshed.
-								</entry>
-							</row>
-						</tbody>
-					</tgroup>
-				</table>
-				Ultimately the right level of granularity will depend upon your
-				particular application and team.
-			</para>
-		</section>
-		<section id="formtags-case-study-par-domain-and-service">
-			<title>Domain and Service Bundles</title>
-			<para>
-				The service bundle is identical (except for the
-				<literal>Bundle-SymbolicName</literal>
-				) to that
-				in the shared-services variation of the sample.
-				The PAR has
-				also separated out the domain classes into their own bundle.
-				When
-				layering by technical considerations, it is again
-				somewhat of an
-				unofficial convention to have a
-				<literal>.domain</literal>
-				bundle.
-			</para>
-		</section>
-		<section id="formtags-case-study-par-par">
-			<title>Constructing the PAR</title>
-			<para>
-				Finally we need to construct the PAR itself.
-				The following are
-				the contents of the exploded PAR.
-			</para>
-			<para>
-				<imagedata fileref="images/formtags-case-study-par-exploded.png"
-					format="PNG" />
-			</para>
-			<para>
-				You can see that the PAR itself doesn&rsquo;t contain any
-				resources or
-				Java classes: it simply packages together a related set
-				of bundles
-				as a single, logical unit.
-			</para>
-			<para>
-				The PAR does however, contain its own
-				<literal>/META-INF/MANIFEST.MF</literal>
-				.
-				<programlisting>
-Manifest-Version: 1.0
-Application-SymbolicName: org.springframework.showcase.formtags-par
-Application-Version: 3.0.0
-Application-Name: FormTags Showcase Application (PAR)
-</programlisting>
-				For more information on the contents of the PAR&rsquo;s
-				<literal>/META-INF/MANIFEST.MF</literal>
-				, please consult
-				<xref linkend="developing-applications" />
-				.
-			</para>
-			<para>
-				You can now deploy the PAR on the @tomcat.product.name.short@, for
-				example by copying
-				<literal>/dist/formtags-par*.par</literal>
-				to the @tomcat.product.name.short@&rsquo;s
-				<literal>pickup</literal>
-				directory.
-				You should then see console output similar to the
-				following:
-			</para>
-			<note>
-				<para>The console output has been reformatted to fit this document.
-				</para>
-			</note>
-			<programlisting>
-[2009-07-01 15:13:43.306] fs-watcher
-	&lt;SPDE0048I&gt; Processing 'CREATED' event for file 'formtags-par-2.0.0.RELEASE.par'.
-[2009-07-01 15:13:44.060] fs-watcher
-	&lt;SPDE0010I&gt; Deployment of 'formtags-par' version '2.0.0.RELEASE' completed.
-[2009-07-01 15:13:44.068] Thread-20
-	&lt;SPWE0000I&gt; Starting web bundle '/formtags-par'.
-[2009-07-01 15:13:45.212] Thread-20
-	&lt;SPWE0001I&gt; Started web bundle '/formtags-par'.
-</programlisting>
-			<para>
-				Navigate to
-				<ulink url="http://localhost:8080/formtags-par" />
-				to see the welcome page.
-			</para>
-			<tip>
-				Note that the web application&rsquo;s context path is explicitly
-				defined via the
-				<literal>Web-ContextPath</literal>
-				manifest header in
-				<literal>/META-INF/MANIFEST.MF</literal>
-				of the Web application bundle within the PAR.
-			</tip>
-		</section>
-	</section>
-	<section id="formtags-case-study-summary">
-		<title>Summary of the Form Tags Migration</title>
-		<para>
-			The @tomcat.product.name@ provides out-of-the-box support for
-			deploying
-			standard Java EE WAR files. In addition support for
-			<emphasis>Shared Libraries</emphasis>
-			and
-			<emphasis>Shared Services</emphasis>
-			WAR formats provides a logical migration path away from standard,
-			monolithic WARs toward OSGi-enable Web applications. The PAR
-			packaging
-			and deployment format enables truly fine-grained,
-			loosely-coupled, and
-			efficient application development. In general,
-			the migration steps
-			presented in this chapter are fairly
-			straightforward, but developers
-			should set aside time for some
-			up-front design of the bundles themselves.
-		</para>
-		<para>
-			It is recommended that you take another sample application or
-			indeed your own small application and go through this migration
-			process yourself. This will help you better understand the concepts
-			and
-			principles at work. In addition, it is highly recommended that you
-			familiarize yourself with the extensive Eclipse IDE support provided
-			by the Virgo Tools. See the Virgo Tools Guide for more on that.
-		</para>
-	</section>
-
-	<section id="formtags-case-study-as-plan">
-		<title>Form Tags as a Plan</title>
-		<para>
-			Plans (see
-			<xref linkend="developing-applications-plans" />
-			)
-			allow us to package and deploy the Form Tags application in a more
-			flexible way.
-			Instead of packaging all the bundles of the application
-			into a single PAR file, each bundle can be placed in the repository
-			and referred to in a
-			<emphasis>plan</emphasis>
-			.
-		</para>
-		<para>
-			The bundles to be placed in a repository in the chain (for example,
-			<literal>repository/usr</literal>
-			) are:
-			<programlisting>org.springframework.showcase.formtags.domain-2.0.0.RELEASE.jar
-org.springframework.showcase.formtags.service-2.0.0.RELEASE.jar
-org.springframework.showcase.formtags.web-2.0.0.RELEASE.war
-</programlisting>
-			which are just those files which were part of the PAR.
-		</para>
-		<para>
-			Here is the contents of a suitable plan file for the Form Tags
-			example:
-			<programlisting language="xml"><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
-<plan name="formtags.plan" version="2.0.0" scoped="true" atomic="true"
-        xmlns="http://www.eclipse.org/virgo/schema/plan"
-		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-		xsi:schemaLocation="
-		        http://www.eclipse.org/virgo/schema/plan
-		        http://www.eclipse.org/virgo/schema/plan/eclipse-virgo-plan.xsd">
-
-	<artifact type="bundle" name="org.springframework.showcase.formtags.domain_par" version="[3.0,3.1)"/>
-	<artifact type="bundle" name="org.springframework.showcase.formtags.service_par" version="[3.0,3.1)"/>
-	<artifact type="bundle" name="org.springframework.showcase.formtags.web_par" version="[3.0,3.1)"/>
-
-</plan>]]></programlisting>
-			where we have chosen to use any of the artifacts in the version range
-			[2.0,2.1).
-			This plan (as a file called, for example,
-			<literal>formtags.plan</literal>
-			)
-			can be deployed in any of the normal ways (for example, dropped in
-			the
-			<literal>pickup</literal>
-			directory).
-		</para>
-		<para>
-			When the plan is deployed, the artifacts it references are
-			installed from the repository and deployed in the order given in the
-			plan file.
-			Because this plan is scoped and atomic, the collection is
-			given an application scope and is started and stopped as a single
-			unit.
-		</para>
-	</section>
-
-</chapter>
diff --git a/programmer-guide/src/introduction.xml b/programmer-guide/src/introduction.xml
deleted file mode 100644
index 747b60c..0000000
--- a/programmer-guide/src/introduction.xml
+++ /dev/null
@@ -1,214 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
-		"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
-<chapter id="introduction">
-	<title>Introduction to the @tomcat.product.name@</title>
-	<section id="introduction-preface">
-		<title>Overview</title>
-		<para>
-			In this chapter, we provide an overview of the @tomcat.product.name@ focusing
-			on what it is, what benefits it provides to developers and administrators,
-			and why you should use it. 
-		</para>
-	</section>
-	<section id="introduction-what">
-		<title>What is the @tomcat.product.name@?</title>
-		<para>
-	  	    The @tomcat.product.name@, or @tomcat.product.name.short@ for short, is the runtime portion of the @umbrella.product.name@.
-	        It is a lightweight, modular, OSGi-based runtime that provides a complete packaged solution for developing,
-	        deploying, and managing enterprise applications. 
-			By leveraging several best-of-breed technologies and improving upon
-			them, the @tomcat.product.name.short@ offers a compelling solution to develop and deploy
-			enterprise applications. 
-		</para>
-		<section id="introduction-constituents">
-			<title>What Makes up the @tomcat.product.name@?</title>
-			<para>
-				The @tomcat.product.name@ is built on top of the following core technologies: 
-			</para>
-			<itemizedlist>
-				<listitem><ulink url="http://www.springframework.org/">Spring Framework</ulink>, obviously!</listitem>
-				<listitem><ulink url="http://tomcat.apache.org/">Tomcat</ulink> as the web container.</listitem>
-				<listitem><ulink url="http://www.osgi.org/Specifications/HomePage">OSGi R4.3</ulink>.</listitem>
-				<listitem><ulink url="http://www.eclipse.org/equinox/">Equinox</ulink> as the OSGi implementation.</listitem>
-				<listitem><ulink url="http://www.springframework.org/osgi/">Spring Dynamic Modules for OSGi</ulink> for working with OSGi in a Spring application.</listitem>
-				<listitem><ulink url="http://www.springsource.com/products/sts">SpringSource Tool Suite</ulink> for developing applications.</listitem>
-			</itemizedlist>
-			<para>
-				Note, however, that the @tomcat.product.name@ isn&rsquo;t just a combination
-				of these technologies. Rather, it integrates and extends these
-				technologies to provide many features essential for developing,
-				deploying, and managing today&rsquo;s enterprise Java applications.
-			</para>
-		</section>
-		<para>
-			The following diagram presents a high-level overview of the @tomcat.product.name.short@&rsquo;s architecture. 
-		</para>
-		<para>
-			<imagedata fileref="images/introduction-architecture.png"/>
-		</para>
-		<para>
-			At the heart of the @tomcat.product.name@ is the @kernel.product.name@ or @kernel.product.name.short@. 
-			The @kernel.product.name.short@ is an OSGi-based kernel that takes full advantage of the modularity 
-			and versioning of the OSGi platform. The @kernel.product.name.short@ builds on a base version of @nano.product.name@ or @nano.product.name.short@ and extends its capabilities for
-			provisioning and library management, as well as providing core functionality for the @tomcat.product.name.short@. The @nano.product.name.short@ maintains a minimal 
-			runtime footprint and startup time. It builds on top of a pure Equinox, extending it with more sophisticated diagnostics and supportability functionality. 
-			The @nano.product.name.short@ supports full p2 provisioning. This feature is not included in the Virgo Nano Base that the @kernel.product.name.short@ is built on.
-		</para>
-		<para>
-			To maintain a minimal runtime footprint, OSGi bundles are installed on demand by the
-			@nano.product.name.short@. On subsequent restarts these core bundles are warm-started thus reducing the startup time. This allows for an application to be installed 
-			into a running @tomcat.product.name.short@ and for its dependencies to be satisfied from an external repository. Not only
-			does this remove the need to manually install all your application dependencies, which would be tedious, but it also keeps memory usage to a minimum.
-		</para>
-		<para>
-			As shown in the figure, @kernel.product.name.short@ runs on top of @nano.product.name.short@ that extends Equinox within a standard Java
-			Virtual Machine. Above the @kernel.product.name.short@ further layers contribute functionality
-			to the @tomcat.product.name.short@. Such as management and web application support.
-		</para>
-		<para>
-			Version @bundle.version@ of the @tomcat.product.name@ supports <emphasis>bundle</emphasis>, 
-			<emphasis>plan</emphasis>, <emphasis>PAR</emphasis>, <emphasis>configuration</emphasis>,
-			<emphasis>Web Application Bundle (WAB)</emphasis>, and <emphasis>WAR</emphasis> artifacts, which enable
-			you to build sophisticated web applications. This includes support for
-			standard Java EE WARs, "shared library" WARs, and "shared services" WARs, each of
-			which will be covered in greater detail in <xref linkend="architecture" />.
-		</para>
-		<important>
-		<para>
-			The @nano.product.name@ has a different provisioning system which isn't included in the Virgo Nano Base on which the 
-			@kernel.product.name.short@ and the @tomcat.product.name.short@ are built.
-		</para>
-		<para>
-			Version @bundle.version@ of the @nano.product.name@ supports <emphasis>bundle</emphasis>, 
-			<emphasis>p2 feature</emphasis>, <emphasis>Web Application Bundle (WAB)</emphasis>, and <emphasis>WAR</emphasis> artifacts, which enable
-			you to build sophisticated web applications too, taking full advantage of p2's dependency resolution, automated download and fail-early mechanics.
-			The @nano.product.name@ does NOT support <emphasis>plan</emphasis>, <emphasis>PAR</emphasis> or <emphasis>configuration</emphasis> artifacts.
-			New <emphasis>features</emphasis> are provisioned via <emphasis>update sites</emphasis> or <emphasis>p2 repositories</emphasis>.
-			Brief overview of p2 and it's mechanics is available on <ulink url="http://bkapukaranov.wordpress.com/2011/07/12/rt-meets-p2/">this blog</ulink>.
-			The @nano.product.name.short@'s default web container implementation is Gemini Web.
-		</para>
-		</important>
-	</section>
-
-	<section id="introduction-why">
-		<title>Why the @tomcat.product.name@?</title>
-		<para>
-			You could deploy a web application in a stand-alone servlet engine or application server.
-			Or you could even deploy directly in an OSGi container such as Equinox. However,
-			deploying in the @tomcat.product.name@ offers a number of key benefits that make it both more
-			appealing and more suitable for enterprise application development.
-		</para>
-
-		<section id="introduction-unified-deployment">
-			<title>Deployment Options and Migration Paths</title>
-			<para>
-				While many applications deployed in the @tomcat.product.name@ will take advantage
-				of OSGi capabilities, not all applications need such sophistication.
-				For example, development teams may initially choose to continue packaging
-				existing web applications as standard WAR files and then gradually migrate
-				toward a fully OSGi-based packaging and deployment model. The @tomcat.product.name@
-				makes such migrations easy for developers by supporting multiple packaging
-				and deployment formats. These formats and migration strategies are discussed
-				in greater detail in <xref linkend="migrating-to-osgi" /> and
-				<xref linkend="formtags-case-study" />. 
-			</para>
-		</section>
-
-		<section id="introduction-simplified-deployment">
-			<title>Simplified Development and Deployment of OSGi-based Applications</title> 
-			<para>
-				Prior to the release of the @tomcat.product.name@, developing and deploying OSGi
-				applications involved inherent complexity such as:
-			</para>
-			<itemizedlist>
-				<listitem>
-					<emphasis>Obtaining OSGi bundles for popular Java libraries:</emphasis>
-					For optimal benefits, every technology you use in an OSGi application must
-					be packaged as OSGi bundles. Currently, this involves manually converting
-					JAR files into bundles and making sure that any libraries needed by those
-					bundles are also available as OSGi bundles. The @ebr@ is a good source of
-					popular pre-bundled libraries.
-				</listitem>
-				<listitem>
-					<emphasis>Package management complexity:</emphasis>
-					OSGi bundles use other bundles through <code>Import-Package</code> manifest headers.
-					Many applications use a set of common technologies (e.g., an ORM solution,
-					a web framework, etc.). Combining these two characteristics leads to duplicated
-					configuration in the form of repeated and verbose <code>Import-Package</code> statements.
-				</listitem>
-				<listitem>
-					<emphasis>Lack of application-level isolation:</emphasis>
-					In OSGi everything is a bundle, and all bundles share the same OSGi Service Registry.
-					To highlight how conflicts can arise between applications and their services in this
-					shared service registry, consider the following scenarios.
-					<itemizedlist>
-						<listitem>
-							Application <code>A</code> is comprised of bundles <code>B</code> and <code>C</code>. 
-							In a standard OSGi environment, if you attempt to install two instances of the same
-							version of application <code>A</code> (i.e., two sets of bundles <code>B</code> and
-							<code>C</code>), a clash will occur, because you cannot deploy multiple bundles with
-							the same <code>Bundle-SymbolicName</code> and <code>Bundle-Version</code> combination.
-						</listitem>
-						<listitem>
-							Application <code>A1</code> is comprised of bundles <code>B1</code> and <code>C1</code>. 
-							Similarly, application <code>A2</code> is comprised of bundles <code>B2</code> and <code>C2</code>.
-							Each bundle has a unique combination of <code>Bundle-SymbolicName</code> and <code>Bundle-Version</code>.
-							Bundles <code>B1</code> and <code>B2</code> both export service <code>S</code> which
-							is imported by both <code>C1</code> and <code>C2</code>. In contrast to the previous
-							example, there is no conflict resulting from duplicate 
-							<code>Bundle-SymbolicName</code>/<code>Bundle-Version</code> combinations; however,
-							there is a clash for the exported service <code>S</code>. 
-							Which service <code>S</code> will bundles <code>C1</code> and <code>C2</code> end up
-							using once they are installed?
-							Assuming bundles <code>B1</code> and <code>C1</code> are intended to work together, 
-							you would not want bundle <code>C1</code> to get a reference to service <code>S</code>
-							from bundle <code>B2</code>, because it is installed in a different logical application.
-							On the contrary, you typically want bundle <code>C1</code> to get a reference to 
-							service <code>S</code> exported by bundle <code>B1</code>, but in a standard OSGi environment
-							this may not be the case.
-						</listitem>
-					</itemizedlist>
-				</listitem>
-			</itemizedlist>
-			<para>
-				Furthermore, since standard OSGi does not define a notion of an application as a set of bundles,
-				you cannot deploy or undeploy an application and its constituent bundles as a single unit.
-			</para>
-			<para>
-				The @tomcat.product.name@ introduces a number of features to solve these issues:
-			</para>
-			<itemizedlist>
-				<listitem>
-					A full set of OSGi bundles for many popular Java libraries to get you
-					started quickly with creating OSGi applications.
-				</listitem>
-				<listitem>
-					An OSGi library concept that obviates the need to
-					duplicate verbose <code>Import-Package</code> statements.
-				</listitem>
-				<listitem>
-					The PAR packaging format which offers
-					application-level isolation and deployment.
-				</listitem>
-				<listitem>
-					The concept of a plan, which is an XML file that lists a collection of bundles that @tomcat.product.name@ should load together as a single application.  Conceptually, plans are very like PARs, except that a plan describes the contents of the application rather than a PAR that actually contains them.
-				</listitem>
-			</itemizedlist>
-		</section>
-
-		<section id="introduction-diagnostics">
-			<title>Enhanced Diagnostics During Deployment and in Production</title>
-			<para>
-			    Identifying why an application won&rsquo;t deploy or which particular library
-			    dependencies are unsatisfied is the cause of many headaches!
-			    Similarly, production time errors that don&rsquo;t identify the root cause are
-			    all too familiar to Java developers. The @tomcat.product.name.short@ was designed from the
-			    ground up to enable tracing and First Failure Data Capture (FFDC) that
-			    empower developers with precise information at the point of failure to
-			    fix the problem quickly.
-			</para>
-		</section>
-
-	</section>
-</chapter>
diff --git a/programmer-guide/src/known-issues.xml b/programmer-guide/src/known-issues.xml
deleted file mode 100644
index 3919d4b..0000000
--- a/programmer-guide/src/known-issues.xml
+++ /dev/null
@@ -1,135 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
-		"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
-<chapter id="known-issues">
-	<title>Known Issues</title>
-	<section id="known-issues-jpa">
-		<title>JPA Entity Scanning</title>
-		<para>
-			Classpath scanning for JPA entities annotated with <literal>@Entity</literal> does
-			not work. Describing entities with <literal>@Entity</literal> will work, but the
-			entities need to be listed explicitly.
-		</para>
-	</section>
-	<section id="known.issues.proxy">
-		<title><classname>ClassNotFoundError</classname> When Creating a Proxy</title>
-		<para>
-			When creating proxies at runtime, there are circumstances where <classname>ClassNotFoundErrors</classname>
-			can be generated. These errors happen because the proxy creating bundle does not have visibility into every
-			type on the interface of the proxy. You can either put in import statements for all the relevant types or
-			add use a service (with visibility of all pertinent types) to create the proxy. Please see
-			<ulink url="http://www.osgi.org/blog/2008/08/classy-solutions-to-tricky-proxies.html">this blog entry</ulink>
-			for more details.
-		</para>
-	</section>
-	<section id="known.issues.cglib">
-		<title>Creating proxies with CGLIB for Package Protected Types</title>
-		<para>
-			In traditional Java EE applications user types are loaded by the same <classname>ClassLoader</classname> as
-			CGLIB. This allows CGLIB to proxy package-protected types. In OSGi environments, user types and CGLIB will
-			most likely be packaged in separate bundles. This results in the user types and CGLIB being loaded by 
-			different <classname>ClassLoaders</classname>. This prevents CGLIB from proxying any package-protected types.
-		</para>
-		<para>
-			The workaround for this issue is to make all types that require proxying public.
-		</para>
-	</section>
-	<section id="known-issues-jetty-restrictions">
-		<title>@jetty.product.name@ Restrictions</title>
-		<para>
-			The following Jetty features are not supported.
-			<itemizedlist>
-				<listitem>
-					Tag Libraries other than the standard Apache Tag Library.
-				</listitem>
-				<listitem>
-					Jetty 7 does not support the Servlet 3.0 spec. When Jetty 8.0 is released the Virgo Jetty Server will 
-					move up in a later release.
-				</listitem>
-			</itemizedlist>
-		</para>
-	</section>
-	<section id="known-issues-web-bundle-default-headers">
-		<title>Default Web Application Bundle Headers</title>
-		<para>
-			The Gemini Web container conforms to the OSGi Web Applications specification and does not apply default values
-			to the headers of a Web Application Bundle. However, SpringSource dm Server 2.0.x applies default values
-			to certain headers (see <link linkend="developing-applications-automatic-imports-web">Web Application Manifest
-			Processing</link> for details) and so Virgo Web Server 2.1.x modified the behaviour of Gemini Web so that it applied default
-			values consistently with dm Server 2.0.x.
-		</para>
-		<para>
-			This behaviour is changed as of @tomcat.product.name@ 3.0. @tomcat.product.name.short@ now conforms strictly to the
-			OSGi Web Applications specification.
-		</para>
-		<para>
-			As a migration aid, <emphasis>which may not be supported in a future release</emphasis>, users may configure the @tomcat.product.name.short@ Web Integration
-			Layer to apply default values to the headers of a Web Application Bundle.
-			See "Configuring the Web Integration Layer" in the <ulink url="../../virgo-user-guide/html/index.html">User Guide</ulink> for details.
-		</para>
-	</section>
-	<section id="hibernate-resolution-issue">
-		<title>Hibernate Resolution Issue</title>
-		<para>
-			Applications using Hibernate 3.4.0.GA need to upgrade the JBoss Hibernate Entity manager fragment bundle to version 3.4.0.GA-A.
-			The symptoms are that the application will fail to resolve due to missing imports of packages such as <literal>org.hibernate.ejb.transaction</literal> 
-			and JBoss Hibernate Annotations <literal>com.springsource.org.hibernate.annotations</literal>.
-			See <ulink url="https://bugs.eclipse.org/bugs/show_bug.cgi?id=335174">bug 335174</ulink> for details.
-		</para>
-		<para>
-			The JBoss Hibernate Entity manager fragment bundle <literal>com.springsource.org.hibernate.ejb</literal> v3.4.0.GA in the
-			<ulink url="http://ebr.springsource.com/repository/app/">SpringSource Enterprise Bundle Repository</ulink>
-			depends on the package <literal>org.slf4j</literal> with a version range that excludes the version of the
-			package provided with Virgo. The net effect is that Hibernate EJB fragment bundle fails to attach to its host
-			<literal>com.springsource.org.hibernate</literal> and the host then does not export the packages the application
-			may need, such as <literal>org.hibernate.ejb.transaction</literal>.
-		</para>
-		<para>
-			An updated JBoss Hibernate Entity manager fragment and JBoss Hibernate Annotations with versions 3.4.0.GA-A which fixes this 
-			problem is available from the <ulink url="http://ebr.springsource.com/repository/app/">SpringSource Enterprise Bundle Repository</ulink>.
-		</para>
-	</section>
-	<section id="scoping-and-substitutable-exports">
-		<title>Scoping and Substitutable Exports</title>
-		<para>
-			The restriction described in <link linkend="developing-applications-plans-scoping">Plans and Scoping</link> that
-			no package may be exported by more than one	bundle in a given scope can cause problems for bundles with
-			<emphasis>substitutable exports</emphasis>. A substitutable export is a package which is exported and imported
-			by the same bundle. The OSGi framework will discard either the import or the export of the package when the
-			bundle is resolved.
-		</para>
-		<para>
-			However, if more than one bundle in a scope has a substitutable export of the same package, then Virgo will fail
-			to deploy the scoped application because the above restriction appears to be broken. Virgo could only spot that
-			the restriction was not actually being broken by second guessing the resolution behaviour of the OSGi framework,
-			something that Virgo generally avoids because of the fragility of that approach.
-		</para>
-		<para>
-			It may be possible to work around this issue by omitting one of the bundles containing the substitutable export
-			from the scoped application.
-		</para>
-		<para>
-			It may also be possible to work around this issue by moving the bundles containing the substitutable exports outside the scope,
-			although this will not give correct behaviour if the bundles' exported packages need to be available for thread
-			context class loading. 
-		</para>
-		<para>
-			See <ulink url="https://bugs.eclipse.org/bugs/show_bug.cgi?id=330643">bug 330643</ulink> for an example of this issue.
-		</para>
-	</section>
-	<section id="eclipselink-resolution-issue">
-		<title>EclipseLink Resolution Issue</title>
-		<para>
-			Applications using EclipseLink may fail to resolve if the <literal>osgi.enterprise</literal> bundle is allowed to
-			wire its <literal>javax.persistence</literal> package import to other than the EclipseLink <literal>javax.persistence</literal> bundle.
-		</para>
-		<para>
-			To avoid this, install EclipseLink's <literal>javax.persistence</literal> bundle early. To install this bundle before
-			any applications are deployed, list the bundle in the <literal>initialArtifacts</literal> property described in the
-			<ulink url="../../virgo-user-guide/html/index.html">User Guide</ulink>.
-		</para>
-		<para>
-			See <ulink url="https://bugs.eclipse.org/bugs/show_bug.cgi?id=337826">bug 337826</ulink> for details.
-		</para>
-	</section>
-</chapter>
diff --git a/programmer-guide/src/migrating-to-osgi.xml b/programmer-guide/src/migrating-to-osgi.xml
deleted file mode 100644
index ed9601f..0000000
--- a/programmer-guide/src/migrating-to-osgi.xml
+++ /dev/null
@@ -1,149 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
-		"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
-<chapter id="migrating-to-osgi">
-	<title>Migrating to OSGi</title>
-	<para>
-		Taking on a new technology such as OSGi may seem a bit daunting at first,
-		but a proven set of migration steps can help ease the journey. Teams
-		wishing to migrate existing applications to run on the @tomcat.product.name@
-		will find that their applications typically fall into one of the following
-		categories.
-
-		<itemizedlist>
-			<listitem>
-				<para>
-					<emphasis role="bold">Web Application</emphasis>: for web applications,
-					this chapter provides an overview of the steps required to migrate
-					from a Standard WAR to a Shared Services WAR. Furthermore, the following
-					chapter provides a detailed case study involving the migration
-					of the Spring 3.0 Form Tags show case application.
-				</para>
-			</listitem>
-			<listitem>
-				<para>
-					<emphasis role="bold">Anything else</emphasis>: for any other type
-					of application, you will typically either deploy your application
-					as multiple individual bundles, as a single PAR file, or as a plan,
-					which is the recommended approach for deploying applications on
-					the @tomcat.product.name@. See <xref linkend="migrating-to-osgi-par-plan" /> for details.
-				</para>
-			</listitem>
-		</itemizedlist>
-		
-	</para>
-
-	<section id="migrating-to-osgi-web">
-		<title>Migrating Web Applications</title>
-		<para>
-			Many applications may start with the standard WAR format for web applications and
-			gradually migrate to a more OSGi-oriented architecture. Since the @tomcat.product.name@ 
-			offers several benefits to all supported deployment formats, it provides a smooth
-			migration path. Of course, depending on your application&rsquo;s complexity and your
-			experience with OSGi, you may choose to start immediately with an OSGi-based
-			architecture. 
-		</para>
-
-		<section id="migrating-to-osgi-web-standard-war">
-			<title>Standard WAR</title>
-			<para>
-				If you are not yet familiar with OSGi or simply want to deploy an existing web application on the @tomcat.product.name@,
-				you can deploy a standard WAR and leverage the @tomcat.product.name.short@ with a minimal learning curve. In fact reading the 
-				<ulink url="../../virgo-user-guide/html/index.html">@tomcat.product.name@ User Guide</ulink>
-				is pretty much all that you need to do to get started. Furthermore, you will gain
-				familiarity with the @tomcat.product.name@, while preparing to take advantage of the other formats. 
-			</para>
-		</section>
-		<section id="migrating-to-osgi-web-shared-libraries-war">
-			<title>Shared Libraries WAR</title>
-			<para>
-				The <emphasis>Shared Libraries WAR</emphasis>
-				format is the first step to reaping the benefits of OSGi. In this phase, you dip your toes into OSGi-based dependency
-				management by removing JAR files from the WAR and declaring dependencies on corresponding OSGi bundles.
-			</para>
-		</section>
-		<section id="migrating-to-osgi-web-shared-services-war">
-			<title>Shared Services WAR</title>
-			<para> In this phase, you take the next step toward a fully OSGi-based architecture by separating your web artifacts
-				(e.g., Servlets, Controllers, etc.) from the services they depend on.</para>
-		</section>
-		<section id="migrating-to-osgi-web-summary">
-			<title>Web Migration Summary</title>
-			<para>
-				The following diagram graphically depicts the migration path from a Standard WAR to a Shared Services WAR.
-				As you can see, the libraries (<emphasis>libs</emphasis>) move from within the deployment artifact
-				to the Bundle Repository.
-				Similarly, the services move from within the WAR to external bundles and are accessed via the
-				OSGi Service Registry. In addition, the overall footprint of the deployment artifact decreases
-				as you move towards a Shared Services WAR.
-				<mediaobject><imageobject><imagedata fileref="images/migration-path-war-to-shsrv.png" /></imageobject></mediaobject>
-			</para>
-		</section>
-
-	</section>
-
-<!-- ======================================================================= -->
-<!-- ======================================================================= -->
-
-	<section id="migrating-to-osgi-par-plan">
-		<title>Migrating to a Plan or a PAR</title>
-		<para>
-			The first steps to migrating an existing application to a plan or a PAR are the same: deciding on the bundles that make up the application and ensuring that their <code>Import-Package</code>, <code>Import-Library</code>, and <code>Import-Bundle</code> manifest headers are correct.   Once you have the list of bundles that make up your application, you then decide whether you want to JAR them all into a single application file (PAR) or create a plan that simply lists the bundles by reference.  Creating a plan is the recommend way to create an application, although PARs also have benefits that might suit your needs better, as described in <xref linkend="migrating-to-osgi-parplan-decide" />.
-		</para>
-
-		<section id="migrating-to-osgi-parplan-bundles">
-		<title>Creating the Application Bundles</title>
-		<para>
-			When migrating an existing application to the PAR packaging and deployment format or a plan,
-			you consider modularity as the prime objective. Following the ideas discussed in
-			<xref linkend="architecture-forming-bundles" />, you refactor the application into multiple bundles.
-			You may start conservatively with a small number of bundles and then further refactor those bundles.
-		</para>
-		<para>
-			If the original code is crafted following good software practices such as separation of concerns and use of
-			well-defined interfaces, migration may involve modifying only configuration and packaging. In other words,
-			your Java sources will remain unchanged. Even configuration is likely to change only slightly.			
-		</para>
-		<para>
-			For example, the following diagram depicts a typical web application that has been refactored and
-			packaged as a PAR. The blue elements within the <emphasis>Application</emphasis> box constitute
-			the bundles of the application. Each of these bundles imports types from other bundles within
-			the PAR using <literal>Import-Package</literal>. The green elements in the left column represent
-			<emphasis>libraries</emphasis> installed on the @tomcat.product.name.short@. The PAR&rsquo;s bundles reference these
-			libraries using <literal>Import-Library</literal>. The purple element in the left column
-			represents a bundle within the @tomcat.product.name.short@&rsquo;s bundle repository which is imported by the DAO
-			bundle using <literal>Import-Bundle</literal>. In contrast to a traditional, monolithic
-			WAR deployment, the PAR format provides both a logical and physical application boundary
-			and simultaneously allows the application to benefit from both the OSGi container and the @tomcat.product.name@.
-			<mediaobject><imageobject><imagedata fileref="images/migrating-to-osgi-par-structure.png" /></imageobject></mediaobject>
-		</para>
-		</section>
-
-		<section id="migrating-to-osgi-parplan-decide">
-		   <title>Plan or PAR?</title>
-		   <para>
-			   Once you have refactored your existing application into separate OSGi bundles, you then must decide whether to package the bundles into a single PAR file or create a plan that lists the bundles by reference.  As described in more detail in preceding sections of this guides, PARs and plans have similar benefits, such as:
-		   </para>
-		   <itemizedlist>
-			<listitem>Scoping</listitem>
-			<listitem>Atomicity, or the ability to deploy and control the bundles as a single unit</listitem>
-			<listitem>Versioning</listitem>
-			<listitem>Improved serviceability</listitem>
-		   </itemizedlist>
-		   <para>
-			Plans, the method most recommended by us to create your application, has the following added benefits:
-		   </para>
-		   <itemizedlist>
-			<listitem>Guaranteed order of deployment, based on the order in which they are listed in the plan&rsquo;s XML file</listitem>
-			<listitem>Ease of sharing content between plans and updating individual plans without having to physically repackage, due to the artifacts being listed by reference.</listitem>
-			<listitem>Ability to disable scoping and atomicity, if desired.</listitem>
-		   </itemizedlist>
-		   <para>
-			The main benefit of PARS is that, because they physically contain all the required artifacts, you know exactly what bundles are deployed when you deploy the PAR file, in contrast to plans that allow content to be substituted or lost.  
-		   </para>
-		   <para>
- 		   	For details about creating plans and PARs, see <xref linkend="developing-applications-plans" /> and <xref linkend="developing-applications-packaging" />, respectively.
-		   </para>
-		</section>
-	</section>
-</chapter>
diff --git a/programmer-guide/src/preface.xml b/programmer-guide/src/preface.xml
deleted file mode 100644
index 72a44af..0000000
--- a/programmer-guide/src/preface.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
-		"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
-<preface id="preface">
-	<title>Preface</title>
-	<para>
-		Increasing complexity in modern enterprise applications is a fact of life.
-		Developers not only have to deal with complex business logic, but also a myriad
-		of other concerns such as security, auditing, exposing business
-		functionality to external applications, and managing the evolution of
-		these concerns. The Spring Framework addresses these 
-		needs by offering a Plain-Old Java Object (POJO) based solution that 
-		lets you focus on your business logic.
-	</para>
-	<para>
-		Complex applications pose problems that go beyond using the right set of
-		technologies. You need to take into account other considerations such as
-		a simplified development process, easy deployment, monitoring deployed
-		applications, and managing changes in response to changing business needs.
-		This is where the @umbrella.product.name@ comes into play. It offers a simple yet
-		comprehensive platform to develop, deploy, and service enterprise
-		applications. In this Programmer Guide, we explore the runtime portions of the
-		@umbrella.product.name@, the @tomcat.product.name@, @jetty.product.name@ and the 
-		@kernel.product.name@, and learn how to develop applications to benefit from their 
-		capabilities.
-	</para>
-	<simplesect>
-		<title>A Note to @kernel.product.name@ Programmers</title>
-		<para>
-			Although this guide is written primarily for @tomcat.product.name@ programmers, much of it is also useful for
-			@kernel.product.name@ programmers who should simply ignore the web-related sections.
-		</para>
-	</simplesect>
-	<simplesect>
-		<title>A Note to @nano.product.name@ Programmers</title>
-		<para>
-			This guide is written primarily for @tomcat.product.name@ programmers. Although a base version of @nano.product.name@, without the new provisioning
-			system, is used to build the @tomcat.product.name@, much of this guide does not apply to @nano.product.name@. The @nano.product.name.short@ lacks regions support but has much
-			improved runtime footprint and startup time and also provides support for p2 provisioning. The @nano.product.name@ features are covered better in the 
-			<ulink url="../../virgo-user-guide/html/index.html">User Guide</ulink>.
-		</para>
-	</simplesect>
-</preface>
diff --git a/programmer-guide/src/prerequisites.xml b/programmer-guide/src/prerequisites.xml
deleted file mode 100644
index 05f8d42..0000000
--- a/programmer-guide/src/prerequisites.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
-		"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
-<chapter id="prerequisites">
-	<title>Prerequisites</title>
-
-	<section id="prerequisites-environment">
-		<title>Runtime Environment</title>
-		<para>
-			@project.name@ requires Java SE 6 or later to be installed. Java is available from
-			<ulink url="http://java.sun.com/javase/downloads/index.jsp">Sun</ulink> and elsewhere.
-		</para>
-	</section>
-
-	<section id="prerequisites-references">
-		<title>References</title>
-		<para>
-			To make effective use of the @tomcat.product.name@, you should also refer to the following:
-		</para>
-		<itemizedlist>
-			<listitem><ulink url="../../virgo-user-guide/html/index.html">@project.name@ User Guide</ulink></listitem>
-			<listitem><ulink url="../../virgo-tooling-guide/html/index.html">@project.name@ Tooling Guide</ulink></listitem>
-			<listitem><ulink url="http://static.springframework.org/osgi/docs/current/reference/html/">Spring Dynamic Modules Reference</ulink></listitem>
-			<listitem><ulink url="http://www.osgi.org/Specifications/HomePage">Blueprint Container Specification</ulink>
-			(in the OSGi 4.2 and 5.0 Enterprise Specifications)</listitem>
-			<listitem><ulink url="http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/index.html">Spring Framework Reference</ulink></listitem>
-		</itemizedlist>
-	</section>
-
-</chapter>
diff --git a/programmer-guide/src/virgo-programmer-guide.xml b/programmer-guide/src/virgo-programmer-guide.xml
deleted file mode 100644
index 5ce89c8..0000000
--- a/programmer-guide/src/virgo-programmer-guide.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" 
-		"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
-<book xmlns:xi="http://www.w3.org/2001/XInclude">
-	<bookinfo>
-		<title>@project.name@ Programmer Guide</title>
-		<titleabbrev>Programmer Guide</titleabbrev>
-		<productname>@project.name@</productname>
-		<releaseinfo>@bundle.version@</releaseinfo>
-
-		<mediaobject>
-			<imageobject role="fo">
-				<imagedata align="center" fileref="images/virgo-logo-small.png" format="PNG" />
-			</imageobject>
-			<imageobject role="html">
-				<imagedata align="right" fileref="images/virgo-logo-small.png" format="PNG" />
-			</imageobject>
-		</mediaobject>
-
-		<authorgroup>
-			<author>
-				<firstname>Ramnivas</firstname>
-				<surname>Laddad</surname>
-			</author>
-			<author>
-				<firstname>Colin</firstname>
-				<surname>Yates</surname>
-			</author>
-			<author>
-				<firstname>Sam</firstname>
-				<surname>Brannen</surname>
-			</author>
-			<author>
-				<firstname>Rob</firstname>
-				<surname>Harrop</surname>
-			</author>
-			<author>
-				<firstname>Christian</firstname>
-				<surname>Dupuis</surname>
-			</author>
-			<author>
-				<firstname>Andy</firstname>
-				<surname>Wilkinson</surname>
-			</author>
-			<author>
-				<firstname>Glyn</firstname>
-				<surname>Normington</surname>
-			</author>
-			<author>
-				<firstname>Steve</firstname>
-				<surname>Powell</surname>
-			</author>
-			<author>
-				<firstname>Christopher</firstname>
-				<surname>Frost</surname>
-			</author>
-		</authorgroup>
-
-		<legalnotice><para>Copyright &copy; 2011 VMware Inc.</para></legalnotice>
-	</bookinfo>
-
-	<toc />
-	<xi:include href="preface.xml"/>
-	<xi:include href="prerequisites.xml"/>
-	<xi:include href="introduction.xml"/>
-	<xi:include href="architecture.xml"/>
-	<xi:include href="developing-applications.xml"/>
-	<xi:include href="migrating-to-osgi.xml"/>
-	<xi:include href="formtags-case-study.xml"/>
-	<xi:include href="common-libraries.xml"/>
-	<xi:include href="known-issues.xml"/>
-
-</book>
diff --git a/settings.gradle b/settings.gradle
new file mode 100644
index 0000000..e581f23
--- /dev/null
+++ b/settings.gradle
@@ -0,0 +1,2 @@
+include 'programmer-guide'
+include 'user-guide'
diff --git a/user-guide/build.xml b/user-guide/build.xml
deleted file mode 100644
index 4a405c1..0000000
--- a/user-guide/build.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project name="virgo-user-guide">
-	
-	<property file="${basedir}/../build.properties"/>
-	<property file="${basedir}/../build.versions"/>
-	<import file="${basedir}/../virgo-build/docbook/default.xml"/>
-
-	<filterset id="docbook.filters">
-		<filter token="bundle.version" value="${bundle.version}"/>
-		<filtersfile file="${basedir}/filters.properties"/>
-	</filterset>
-
-</project>
diff --git a/user-guide/ivy.xml b/user-guide/ivy.xml
deleted file mode 100644
index 0db77be..0000000
--- a/user-guide/ivy.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?xml-stylesheet type="text/xsl" href="http://ivyrep.jayasoft.org/ivy-doc.xsl"?>
-<ivy-module
-		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-		xsi:noNamespaceSchemaLocation="http://incubator.apache.org/ivy/schemas/ivy.xsd"
-		version="1.3">
-
-	<info organisation="${project.organisation}" module="${ant.project.name}"/>
-
-	<configurations>
-		<include file="${virgo.build.dir}/common/default-ivy-configurations.xml"/>
-   	    <conf name="doc" visibility="public" description="Documentation"/>
-	</configurations>
-
-	<publications>
-		<!-- <artifact name="${ant.project.name}" ext="pdf" type="pdf"/> -->
-		<artifact name="${ant.project.name}" ext="zip" type="zip"/>
-		<artifact name="${ant.project.name}-single" ext="zip" type="zip"/>
-	</publications>
-
-	<dependencies/>
-
-</ivy-module>
diff --git a/user-guide/src/admin-console.xml b/user-guide/src/admin-console.xml
deleted file mode 100644
index a816dfc..0000000
--- a/user-guide/src/admin-console.xml
+++ /dev/null
@@ -1,248 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
-		"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
-<chapter id="admin-console">
-	<title>The Web Admin Console</title>
-	<titleabbrev>The Admin Console</titleabbrev>
-	<para>The Web Server Admin Console is a Web application for managing a single instance of @tomcat.product.name@ or @jetty.product.name@ 
-		(referred to, generically, as "Web Server" below).  Using the Admin Console, you can:</para>
-	<itemizedlist>
-		<listitem><para><link linkend="admin-console-login">View an overview of the Web Server properties</link>.</para></listitem>
-		<listitem><para><link linkend="admin-console-manage-artifacts">View and manage the lifecycle</link> of artifacts already deployed to the Web Server instance.  Artifacts include bundles, configuration files, PARs, and plans.  Lifecycle management tasks include starting, stopping, refreshing, and uninstalling the artifacts.</para></listitem>
-		<listitem><para><link linkend="admin-console-install-artifacts">Install new artifacts to Web Server</link>.</para></listitem>
-		<listitem><para><link linkend="admin-console-view-properties">View the properties of the configuration artifacts</link> deployed to Web Server.</para></listitem>
-	    <listitem><para><link linkend="admin-console-view-dumps">View details of dump files</link> that Web Server might have generated after encountering a problem.  This feature is particularly valuable if Web Server fails to install a new artifact due to resolution failures; the OSGi state inspector can help you discover the exact artifact causing the resolution failure.</para></listitem>
-		<listitem><para><link linkend="admin-console-view-osgi-state">View an overview and details of the OSGi State</link> of Web Server, or in other words, a list of all bundles currently installed in Web Server and their state.  You can then drill down into the details of each bundle, such as its symbolic name, packages it imports and exports, services it provides and consumes, and so on.  You can also view the bundles that were deployed when an exception that generated a dump occurred.</para></listitem>
-	</itemizedlist>
-	<note>
-		 This section is not applicable to @nano.product.name@.
-	</note>
-	<section id="admin-console-login">
-		<title>Invoking the Admin Console</title>
-		<para>
-			To use the Admin Console, start the
-			@tomcat.product.name@ and then enter the following URL in your 
-			browser of choice.
-		</para>
-		<screen>http://localhost:8080/admin</screen>
-		<para>
-			Replace <literal>localhost</literal> with the hostname of the computer on which the @tomcat.product.name@ is running if it is not the same as the computer on which you are running your browser.  </para>
-		<para>The Admin Console uses basic authentication, therefore you will need to enter the default administration ID and password.
-		</para>
-		<screen>ID: admin 
-Password: admin</screen>
-
-		<para>The following graphic shows the main page of the Admin Console.
-		<mediaobject>
-		<imageobject role="fo">
-			<imagedata align="center" valign="bottom" fileref="images/console-main-page.png" format="PNG"/>
-		</imageobject>
-		<imageobject role="html">
-			<imagedata align="right" valign="bottom" fileref="images/console-main-page.png" format="PNG"/>
-		</imageobject>
-		</mediaobject>
-		
-		</para>
-
-		<para>Use the links at the top of the console to perform various tasks, such as viewing and managing artifacts (<emphasis role="bold">Artifacts</emphasis>), viewing the properties of deployed configuration artifacts (<emphasis role="bold">Configuration</emphasis>), viewing details of dumps (<emphasis role="bold">Dump Inspector</emphasis>), and viewing the OSGi state of the Web Server instance (<emphasis role="bold">OSGi State</emphasis>).</para>
-
-		<para>You can always return to the main Admin Console page by clicking <emphasis role="bold">Information</emphasis> in the top right-hand corner.</para>
-
-	         <para>The <literal>Server Properties</literal> section provides information about Web Server itself, such as details about the Java Virtual Machine (JVM), the operating system on which Web Server is installed, the time zone configured for the computer, and the complete version of Web Server.</para>
-
-	    <section id="admin-console-auth">
-		<title>Changing the Admin User</title>
-		<para>
-			To change the ID and password for the Admin Console, update the <literal>SERVER_HOME/configuration/org.eclipse.virgo.kernel.users.properties</literal> file.  First specify the administration username by changing the value of the <literal>role.admin</literal> property.  Then set the password of this new user by adding a new property called <literal>user.<emphasis>username</emphasis></literal>, where <literal><emphasis>username</emphasis></literal> refers to the actual name of the user.  Finally, restart Web Server for the changes to take effect.</para>
-	 <para>For example, if you want change the administration username to <literal>juliet</literal> with password <literal>capulet</literal>, change the file as follows: 
-		</para>
-       		<programlisting>##################
-# User definitions
-##################
-user.juliet=capulet
-
-
-##################
-# Role definitions
-##################
-role.admin=juliet</programlisting>
-		<para>
-			The Admin Console always runs against the <literal>admin</literal> role.
-		</para>
-	    </section>
-	
-	</section>
-
-        <section id="admin-console-tasks">
-	    <title>Typical Admin Console Use Cases</title>
-	    <para>The following use cases describe the typical tasks that you can perform with the Admin Console:</para>
-	    <itemizedlist>
-	      <listitem><link linkend="admin-console-manage-artifacts">View and Manage the Lifecycle of Deployed Artifacts</link></listitem>
-	      <listitem><link linkend="admin-console-install-artifacts">Install a New Artifact</link></listitem>
-	      <listitem><link linkend="admin-console-view-properties">View the Properties of Deployed Configuration Artifacts</link></listitem>
-	      <listitem><link linkend="admin-console-view-dumps">View Details of Dump Files</link></listitem>
-	      <listitem><link linkend="admin-console-view-osgi-state">View Overview and Details of the OSGi State</link></listitem>
-	    </itemizedlist>
-	
-	    <section id="admin-console-manage-artifacts">
-		<title>Viewing and Managing the Lifecycle of Deployed Artifacts</title>
-		<para>The following procedure describes how to view the list of artifacts that are currently deployed in the user region of Web Server.  It then describes how to stop, start, refresh, and uninstall the deployed artifacts.</para>
-		<orderedlist numeration="arabic">
-		  <listitem>
-		    <para>From the main Admin Console page, click the <emphasis role="bold">Artifacts</emphasis> link at the top.</para>
-		     <para>In the lower part of the page, the console displays a tree structure that displays the four kinds of artifacts that you can deploy to the user region of Web Server: bundles, configuration files, PARs, and plans.  When you first install Web Server, there will already be a number of artifacts deployed related to the Admin console itself, the main splash screen, the repository, and so on.  </para>
-		    <para>The following graphic shows an expanded tree that displays a few of the deployed artifacts:</para>
-
-		    <para><imagedata fileref="images/console-artifacts.png" /></para>
-
-		  </listitem>
-
-		  <listitem>
-		    <para>To view details of a particular artifact, click the "+" to the left of the artifact to expand the tree.  The following graphic shows an expanded <literal>org.eclipse.virgo.apps.admin.web</literal> bundle:</para>
-
-		    <para><imagedata fileref="images/console-bundle-details.png" /></para>
-
-		    <para>The particular details that the Admin Console displays depends on the artifact.  For example, for all artifacts you can view their state and how it was installed (such as by a user using the Admin Console or programmatically).  The two most common states are Active (running and ready to be used) and Resolved (all dependencies resolved but you must start it before you can use it).  An artifact can also be in one of the transition states, such as Starting and Stopping.  </para>
-		   <para>As shown in the preceding graphic, the Admin Console provides a link for Web modules that you can click on to actually invoke the application (<literal>org.eclipse.virgo.web.contextPath:/admin</literal> in the example above).</para>
-		    <para>For PARs and plans, the Admin Console also displays whether the artifact is:</para>
-		    <itemizedlist>
-		       <listitem><emphasis role="bold">Scoped</emphasis>. Scoping specifies whether Web Server should deploy the members of the PAR/plan in their own scope; when scoping is disabled, Web Server deploys the artifacts into the global scope and they are accessible by all other artifacts.</listitem>
-		        <listitem><emphasis role="bold">Atomic</emphasis>. When a PAR/plan is atomic, Web Server manages the lifecycle of all its member artifacts as a single entity, which means if one artifact member is started, then Web Server starts all the PAR/plan artifacts. If one artifact fails to start, then Web Server stops all other artifacts in the PAR/plan.</listitem>
-		    </itemizedlist>
-		    <para>The following graphic shows details of a PAR, in particular that it is both scoped and atomic:</para>
-
-		    <para><imagedata fileref="images/console-par-details.png" /></para>
-
-		    <para>Finally, for bundles, PARs, and plans, you can see the list of bundles that they depend on; this typically means the bundles that export the packages that they import.</para>
-		  </listitem>
-		  <listitem>
-		    <para>To manage the lifecycle of an artifact, click on its name in the expanded tree to enable the lifecycle buttons.   Then, depending on the current state of the artifact, you can: </para>
-		    <itemizedlist>
-			<listitem>Start the artifact.  All dependencies of the artifact must have been resolved for you to start it.  After successfully starting the artifact, it is in the Active state and you can use the application associated with the artifact.</listitem>
-			<listitem>Stop the artifact.  This moves the artifact from an Active to Resolved state, and you cannot use the application associated with the artifact.  </listitem>
-			<listitem>Refresh the artifact.  This action updates the physical contents of the artifact; use this button when you have changed the artifact in some way and you want your changes to take effect.</listitem>
-			<listitem>Uninstall the artifact.  This action removes the artifact from Web Server and it does not show up in the Admin Console any more.  To use the application associated with this artifact, you must re-install the artifact.</listitem>
-		    </itemizedlist>
-		  </listitem>
-		</orderedlist>
-	    </section>
-
-	    <section id="admin-console-install-artifacts">
-		<title>Installing a New Artifact</title>
-		<para>The following procedure describes how to install a new artifact (bundle, PAR, plan, or configuration file.)  The procedure is similar for all types of artifacts; the procedure uses a WAR file as an example.</para>
-		<orderedlist>
-		  <listitem>
-		   <para>From the main Admin Console page, click the <emphasis role="bold">Artifacts</emphasis> link at the top.</para>
-		  </listitem>
-		  <listitem>
-		   <para>Click the <emphasis role="bold">Browse</emphasis> button to invoke the file loader application for your platform.  Note that the Browse button searches the computer that is running the browser in which you invoked the Admin Console and <emphasis>not</emphasis> the computer on which Web Server is running, in the case where they are different.</para>
-		    <para>Use the file loader to find the artifact.  This can be a WAR or JAR file bundle, a configuration artifact that contains properties, an XML file that corresponds to a plan, or a PAR file.</para>
-		  </listitem>
-		  <listitem>
-		   <para>Click <emphasis role="bold">Upload</emphasis> to actually upload the artifact to Web Server.  </para>
-		    <para>Web Server automatically attempts to resolve all dependencies, and then puts the artifact in an Active state if possible.  If all is successful, the message <literal>Artifact Deployed</literal> appears next to the <emphasis role="bold">Artifact Console</emphasis> header.    If there is an error, a message to that effect is displayed; to get more details about the error, see the terminal window from which you started Web Server.</para>
-		  </listitem>
-		  <listitem>
-		   <para>Expand the artifact tree to view your newly deployed artifact.  If Web Server installed it without errors, it should show up in the appropriate section and be in an Active state.</para>
-		  </listitem>
-		</orderedlist>
-	    </section>
-
-	    <section id="admin-console-view-properties">
-		<title>Viewing Properties of Deployed Configuration Artifacts</title>
-		<para>The following procedure describes how you can view the list of configuration artifacts that are currently deployed to Web Server, and then view the specific properties that are defined for a particular configuration artifact.  </para>
-		<orderedlist>
-		  <listitem>
-		   <para>From the main Admin Console page, click the <emphasis role="bold">Configuration</emphasis> link at the top.</para>
-		    <para>The Admin Console displays all the configuration artifacts that are currently deployed, as shown in the following graphic:</para>
-		
-		    <para><imagedata fileref="images/console-configuration-details.png" /></para>
-		  </listitem>
-		  <listitem>
-		    <para>To view the properties defined for a particular configuration artifact click the arrow to the left of its name. </para>
-		  </listitem>
-		</orderedlist>
-	    </section>
-
-	    <section id="admin-console-view-dumps">
-		<title>Viewing the Details of Dump Files</title>
-		<para>The following procedure describes how to view the details of any service dumps that have occurred in Web Server.   Each time a dump is triggered for Web Server, the server creates a directory in <literal>$SERVER_HOME/serviceability/dump</literal> with a name corresponding to the time the dump occurred, and then the server populates the directory with detailed information.  Using the Admin Console, you can easily view this information.</para>
-               <para> A service dump is triggered when there is either a failure in the Web Server code or Web Server detects a thread deadlock in either its own code or a user application.  The service dump contains a snapshot of all the important state from the running Web Server instance. <emphasis role="bold">NOTE:</emphasis> This snapshot is not intended for end user consumption but is useful for service personnel.</para>
-
-		<orderedlist>
-		  <listitem>
-		   <para>From the main Admin Console page, click the <emphasis role="bold">Dump Inspector</emphasis> link at the top.</para>
-		  </listitem>
-		  <listitem>
-		    <para>In the drop-down box on the left, select the dump you want to inspect based on its timestamp.</para>
-		  </listitem>
-		  <listitem>
-		    <para>Click <emphasis role="bold">Select Dump</emphasis>.</para>
-		  </listitem>
-		  <listitem>
-		    <para>In the right drop-down box, select the type of dump information you want to view.</para>
-		     <para>For example, <literal>summary.txt</literal> provides a short summary of why the dump might have occurred.  The <literal>thread.txt</literal> option provides information about the state of the Web Server threads at the time of the dump, including any that were deadlocked.  The <literal>repository</literal> options provide information about what was in the external and user repositories at the time of the dump. The <literal>configurationAdmin.properties</literal> option provides a snapshot of the complete configuration of Web Server, including the kernel and repositories.</para>
-		  </listitem>
-		  <listitem>
-		    <para>Click <emphasis role="bold">Select Entry</emphasis>.</para>
-		    <para>The Admin Console displays the information in the Dump Entry Viewer, as shown in the following graphic:</para>
-		    <para><imagedata fileref="images/console-dump-details.png" /></para>
-		  </listitem>
-		</orderedlist>
-		
-		<para>
-			Note that the dump entry <literal>osgi.zip</literal> is a binary OSGi state dump which should be viewed as described in
-			<link linkend="admin-console-view-osgi-state">Viewing Overview and Details of the OSGi State</link>.
-			Dumps may contain other binary entries which are not intended for viewing via the dump inspector.
-			For example, <literal>heap.out</literal> contains a dump of the Java heap and <literal>region.digraph</literal>
-			contains a dump of the sharing policy between kernel and use region (this is used by the OSGi state dump inspector).
-		</para>
-
-	    </section>
-
-	    <section id="admin-console-view-osgi-state">
-		<title>Viewing Overview and Details of the OSGi State</title>
-		<para>
-			The following procedure describes how you can view the OSGi state of the Web Server, either currently or at the time that a particular service dump
-			occurred.
-		</para>
-		<para>
-			The OSGi state is a list of bundles that are currently installed. When viewing the current state, additional information is available
-			such as whether each bundle is Spring powered and a list of services in the OSGi service registry. This additional information is not available
-			when viewing a state dump.
-		</para>
-		<orderedlist>
-		  <listitem>
-		   <para>From the main Admin Console page, click the <emphasis role="bold">OSGi State</emphasis> link at the top.</para>
-		   <para>By default, the Admin Console displays the complete list of bundles that are currently installed in Web Server.</para>
-		   <para>For each bundle, the console displays its internal ID, its symbolic name, its version, and its current state (usually either Active or Resolved.)</para>
-		  </listitem>
-		  <listitem>
-		    <para>To view the bundles that were installed at the time of a service dump, select the service dump based on its timestamp from the drop-down box on the
-			right and click <emphasis role="bold">Go</emphasis>. </para>
-		  </listitem>
-		  <listitem>
-		    <para>To view details about a particular bundle, click on its bundle ID. A full description of the bundle is displayed, as shown in the following graphic:</para>
-		    <para><imagedata fileref="images/console-osgi-state.png" /></para>
-		    <para>The console displays again the symbolic name, version, and internal ID of the bundle. It then displays whether the bundle is Spring powered and the exact physical location of the bundle JAR file on the computer that hosts Web Server.</para>
-		    <para>The console then displays the full list of packages that the bundle imports, as well as the bundles that in turn export these imported packages. The console also displays the packages that the current bundle exports, and then in turn the list of other installed bundles that are currently importing these exported packages. For each package, you can drill down and view details of the corresponding bundle.</para>
-		    <para>Similarly, the console displays the consumed and provided OSGi services.  </para>
-		    <para>Finally, the console also displays information about the Spring context, if the bundle is Spring powered.  </para>
-		  </listitem>
-		  <listitem>
-		    <para>To view the full list of OSGi services, click the <literal>Services Overview</literal> link from the main OSGi state page</para>
-		  </listitem>
-		  <listitem>
-		    <para>Typically, the list of bundles and services can be very long, making it difficult to find a particular bundle.  Use the <emphasis role="bold">Search</emphasis> box at the top right corner to narrow down the list of displayed bundles.</para>
-			<para>
-				Enter a package name with wildcards '<literal>*</literal>' representing part of a package name (excluding periods) and
-				'<literal>**</literal>' representing one or more components of a package name separated by periods.
-				For example, '<literal>**.virgo.**</literal>' displays @project.name@ packages.
-			</para>
-		  </listitem>
-		</orderedlist>
-	    </section>
-
-	</section>
-
-</chapter>
diff --git a/user-guide/src/admin-shell.xml b/user-guide/src/admin-shell.xml
deleted file mode 100644
index 434bca8..0000000
--- a/user-guide/src/admin-shell.xml
+++ /dev/null
@@ -1,1120 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
-        "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
-<chapter id="admin-shell">
-    <title>Equinox Console</title>
-
-    <section id="admin-shell-enable" xreftext="Enabling the Equinox Console">
-        <title>Enabling the Equinox Console</title>
-
-		<para>
-			Shells are provided for both user region and kernel, although they are disabled by default and need enabling before
-			they can be used.
-		</para>
-		<para>
-			The user region shell ports may be reconfigured by editing the file 		
-			<literal>osgi.console.properties</literal> in the <literal>repository/ext</literal> directory, and
-			then restarting Virgo. The telnet properties in the file are prefixed with <emphasis>telnet.</emphasis>, and the ssh properties are prefixed with <emphasis>ssh.</emphasis>.
-			The kernel shell ports may be reconfigured by editing the file <literal>osgi.console.properties</literal> in the <literal>configuration</literal> directory, and then restarting Virgo.
-        </para>
-        <para>
-			To enable any of these shell ports, change the <literal>enabled</literal> setting from <literal>false</literal> to <literal>true</literal>
-            <programlisting><![CDATA[enabled=true]]></programlisting>
-            in the corresponding properties files.
-        </para>
-        <para>
-			If you wish to change a port, any free port can be used, but the usual defaults are, for telnet, 2501 for the user region and 2401 for the kernel, and
-			for ssh, 2502 for the user region and 2402 for the kernel.
-        </para>
-        <para>			
-			Access is via ssh or telnet.
-			The simplest way to access the shell is via telnet to port 2501 or 2401 for user region or kernel, respectively.
-<programlisting><![CDATA[prompt$ telnet localhost 2501
-Trying ::1...
-Connected to localhost.
-Escape character is '^]'.
-
-osgi> ]]></programlisting>
-		</para>
-        <para>
-			Alternatively, you can ssh to port 2502 or 2402 for user region or kernel, respectively.
-			The users and passwords for ssh are configured in <literal>configuration/org.eclipse.virgo.kernel.users.properties</literal> as described
-			in <link linkend="configuring-authentication">Configuring Authentication</link>. The default user and password are <literal>admin</literal>
-			and <literal>admin</literal>.
-		</para>
-		
-		<note>
-			Currently the @nano.product.name@ Equinox Console is enabled by default. Telnet is accesible on <emphasis>2401</emphasis> and SSH on <emphasis>2402</emphasis>. In future these will be configurable.
-		</note>
-		
-		<para>
-		  <note>
-		    If you use the <literal>shutdown</literal> shell command to stop Virgo Server for Apache Tomcat, the shutdown messages appear in the shell terminal instead of in the terminal in which Virgo runs. This is due to the
-        mechanisms which the shell implementation uses to redirect standard output.
-      </note> 
-		</para>
-    </section>
-
-	<section id="admin-shell-using-vsh">
-		<title>Using Virgo Shell Commands</title>
-		<note>
-			 This section is not applicable to @nano.product.name@.
-		</note>
-        <para>Virgo provides shell commands
-		that allow you to examine artifacts
-        currently installed in a particular @kernel.product.name@ instance, manage the lifecycle of the installed artifacts, install new artifacts, and shut down
-        the @kernel.product.name@. You can install, examine, and manage the lifecycle of the following artifacts:
-        <itemizedlist>
-          <listitem><para>Bundles</para></listitem>
-          <listitem><para>Configuration Artifacts</para></listitem>
-          <listitem><para>PARs</para></listitem>
-          <listitem><para>Plans</para></listitem>
-        </itemizedlist>
-        </para>
-		<para>
-        and can examine:
-        <itemizedlist>
-          <listitem><para>Exported packages</para></listitem>
-          <listitem><para>Services in the OSGi service registry</para></listitem>
-        </itemizedlist>
-        </para>
-        <para>
-			Virgo also provides shell commands to list all bundles that contain, export, or load a particular class.
-        </para>
-        <para>
-			These commands are provided <emphasis>for the user region shells only</emphasis> and are grouped together in
-			the <literal>vsh</literal> <emphasis>scope</emphasis>.
-        </para>
-        <para>You invoke commands using the <literal>vsh:</literal> scope. For example:</para>
-		<programlisting><![CDATA[
-osgi> vsh:plan list
-
-Name                                           Version                            State
-org.eclipse.virgo.apps.admin.plan              2.1.0                             ACTIVE
-org.eclipse.virgo.kernel.userregion.springdm   2.1.0                             ACTIVE
-org.eclipse.virgo.web                          2.1.0                             ACTIVE
-
-osgi> ]]></programlisting>
-
-	    <section id="admin-shell-vsh-using-command-list">
-		<title>Virgo Shell Commands</title>
-
-		<para>The following table lists the Virgo shell commands; each command in turn has a variety of options that you can specify, depending on what you want to do, such as start a bundle or refresh a plan. The reference documentation about each command provides the full list of available options. </para>
-
-        	<table id="admin-shell-vsh-commands-table" colsep="1" frame="all" rowsep="1">
-            	  <title>Virgo Shell Commands</title>
-                    <tgroup cols="2">
-                      <thead>
-                        <row>
-                                <entry>Command </entry>
-                                <entry>Description</entry>
-                        </row>
-                      </thead>
-                      <tbody>
-                        <row>
-				<entry><link linkend="admin-shell-vsh-bundle-command">bundle</link></entry>
-                                <entry>Manages and displays information about bundle artifacts.</entry>
-                        </row>
-                        <row>
-                <entry><link linkend="admin-shell-cl-clhas">clhas</link></entry>
-                                <entry>Lists all bundles that <emphasis role="bold">contain</emphasis> a class or resource.</entry>
-                        </row>
-                        <row>
-                <entry><link linkend="admin-shell-cl-clexport">clexport</link></entry>
-                                <entry>Lists all bundles that <emphasis role="bold">export</emphasis> a class or package.</entry>
-                        </row>
-                        <row>
-                <entry><link linkend="admin-shell-cl-clload">clload</link></entry>
-                                <entry>Lists all bundles that can <emphasis role="bold">load</emphasis> a class.</entry>
-                        </row>
-                        <row>
-				<entry><link linkend="admin-shell-vsh-config-command">config</link></entry>
-                                <entry>Manages and displays information about configuration artifacts.</entry>
-                        </row>
-                        <row>
-				<entry><link linkend="admin-shell-vsh-package-command">packages</link></entry>
-                                <entry>Displays information about exported packages.</entry>
-                        </row>
-                        <row>
-				<entry><link linkend="admin-shell-vsh-par-command">par</link></entry>
-                                <entry>Manages and displays information about PAR artifacts.</entry>
-                        </row>
-                        <row>
-				<entry><link linkend="admin-shell-vsh-plan-command">plan</link></entry>
-                                <entry>Manages and displays information about plan artifacts.</entry>
-                        </row>
-                        <row>
-				<entry><link linkend="admin-shell-vsh-service-command">service</link></entry>
-                                <entry>Displays information about services in the OSGi service registry.</entry>
-                        </row>
-                        <row>
-				<entry><link linkend="admin-shell-vsh-install-command">install</link></entry>
-                                <entry>Installs an artifact to @kernel.product.name@. </entry>
-                        </row>
-                        <row>
-				<entry><link linkend="admin-shell-vsh-shutdown-command">shutdown</link></entry>
-                                <entry>Shuts down the @kernel.product.name@ instance to which the Equinox Console is connected.</entry>
-                        </row>
-		      </tbody>
-                    </tgroup>
-		</table>
-	     </section>
-
-	</section>
-
-	<section id="admin-shell-vsh-command-reference">
-	  <title>Virgo Shell Command Reference</title>
-
-	  <para>
-	  	This section contains reference information about the Virgo shell commands
-		<link linkend="admin-shell-vsh-bundle-command">bundle</link>,
-		<link linkend="admin-shell-cl-clhas">clhas</link>,
-        <link linkend="admin-shell-cl-clexport">clexport</link>,
-        <link linkend="admin-shell-cl-clload">clload</link>,
-		<link linkend="admin-shell-vsh-config-command">config</link>,
-		<link linkend="admin-shell-vsh-package-command">packages</link>,
-		<link linkend="admin-shell-vsh-par-command">par</link>,
-		<link linkend="admin-shell-vsh-plan-command">plan</link>,
-		<link linkend="admin-shell-vsh-service-command">service</link>,
-		<link linkend="admin-shell-vsh-install-command">install</link>,
-		<link linkend="admin-shell-vsh-shutdown-command">shutdown</link>,
-		<link linkend="admin-shell-vsh-help-command">help</link>, and
-		<link linkend="admin-shell-vsh-exit-command">exit</link>.
-	  </para>
-
-
-	  <section id="admin-shell-vsh-bundle-command">
-		<title>bundle Command</title>
-
-		<para>Use the <literal>bundle</literal> command to manage the lifecycle of bundles deployed in @kernel.product.name@ and to gather information about deployed bundles, such as diagnostic information, header information, and so on. </para>
-		<para>The following table lists the options you can specify for this command.</para>
-
-        	<table id="admin-shell-vsh-bundle-command-table" colsep="1" frame="all" rowsep="1">
-            	  <title>Options of the bundle Command</title>
-                    <tgroup cols="2">
-                      <thead>
-                        <row>
-                                <entry>Option </entry>
-                                <entry>Description</entry>
-                        </row>
-                      </thead>
-                      <tbody>
-                        <row>
-				<entry>list</entry>
-                                <entry>Displays the list of bundles that are currently installed in the current @kernel.product.name@ instance.  With the exception of a few kernel bundles and their services, which @kernel.product.name@ uses to administer the user region, none of the kernel is visible to user installed artifacts; rather, only the bundles installed in the user region are visible.
-				  <para>Each bundle is identified by an internal <literal>ID</literal> which you can then use with the other <literal>bundle</literal> commands that manage a particular bundle, such as <literal>start </literal><emphasis><literal>id</literal></emphasis>.   The <literal>list</literal> command also displays the version of the bundle, along with its state, which is one of the following standard OSGi lifecycle states:</para>
-			        <itemizedlist>
-				  <listitem><para><emphasis role="bold">Installed</emphasis>: The bundle is installed but its dependencies have not yet been resolved.</para></listitem>
-				  <listitem><para><emphasis role="bold">Resolved</emphasis>: The bundle is resolved and you can now start it.</para></listitem>
-				  <listitem><para><emphasis role="bold">Uninstalled</emphasis>: The bundle is uninstalled and you cannot use it.</para></listitem>
-				  <listitem><para><emphasis role="bold">Starting</emphasis>:  The bundle is in the process of starting.</para></listitem>
-				  <listitem><para><emphasis role="bold">Active</emphasis>: The bundle is running and you can now use it.</para></listitem>
-				  <listitem><para><emphasis role="bold">Stopping</emphasis>: The bundle is in the process of stopping.</para></listitem>
-			        </itemizedlist>
-			     <para>Use one of the other <literal>bundle</literal> commands to change the state of a bundle.  For example, use the <literal>bundle start </literal><emphasis><literal>id</literal></emphasis> command to change the state of a bundle from <literal>Installed</literal> to <literal>Active</literal>.</para>
-			   </entry>
-                        </row>
-                        <row>
-				<entry>examine <emphasis>id</emphasis></entry>
-                                <entry>Displays detailed information about the specified bundle.  Use the <literal>bundle list</literal> command to get the internal id of a particular bundle.
-			         <para>In addition to the information provided by the <literal>bundle list</literal> command (id, full name, version, and state), the <literal>examine</literal> command specifies whether the bundle includes a Spring application context (or is <emphasis>Spring Powered</emphasis>) and the exact physical location of the bundle JAR file.  </para>
-				<para>The <literal>examine</literal> also provides the full list of packages that the bundle imports, as well as the bundles that in turn export these imported packages.  Finally, the command displays the packages that the current bundle exports, and then in turn the list of other installed bundles that are currently importing these exported packages.  </para>
-			    </entry>
-                        </row>
-                        <row>
-				<entry>start <emphasis>id</emphasis></entry>
-                                <entry>Starts the specified bundle.  Use the <literal>bundle list</literal> command to get the internal id of a particular bundle.
-				<para>After @kernel.product.name@ successfully starts the bundle, it is listed in the <literal>Active</literal> state. </para>
-				</entry>
-                        </row>
-                        <row>
-				<entry>stop <emphasis>id</emphasis></entry>
-                                <entry>Stops the specified bundle.  Use the <literal>bundle list</literal> command to get the internal id of a particular bundle.
-				  <para>When you stop a bundle, it goes from the <literal>Active</literal> state to the <literal>Resolved</literal> state, and you must re-start it if you want to use the application that the bundle contains.</para> </entry>
-                        </row>
-                        <row>
-				<entry>refresh <emphasis>id</emphasis></entry>
-                                <entry>Updates the contents of the specified bundle. Use the <literal>bundle list</literal> command to get the internal id of a particular bundle.  Use this command if you have changed the contents of the bundle JAR file and you want to refresh the artifact as installed in the OSGi framework.
-				</entry>
-                        </row>
-                        <row>
-				<entry>uninstall <emphasis>id</emphasis></entry>
-                                <entry>Uninstalls the specified bundle from @kernel.product.name@.   Use the <literal>bundle list</literal> command to get the internal id of a particular bundle.
-				  <para>When the uninstall process is complete, the bundle does not show up in the list of bundles displayed by the <literal>bundle list</literal> command.  If you want to use the application in the bundle, you must re-install it using the <literal>install</literal> command.</para>
-				</entry>
-                        </row>
-                        <row>
-							<entry>diag <emphasis>id</emphasis></entry>
-                          	<entry>
-								<para>
-									Provides diagnostic information about the specified bundle.
-									In particular, this command displays information about the imported packages that @kernel.product.name@ could not resolve.
-									Use the <literal>bundle list</literal> command to get the internal id of a particular bundle.
-								</para>
-								<para>
-									Note that @project.name@ does not install unresolvable bundles.
-									Instead is takes a state dump (for offline analysis using the web administration console) and fails the deployment.
-									So bundles are only likely to become unresolvable in @project.name@ after an update operation.
-								</para>
-							</entry>
-                        </row>
-                        <row>
-				<entry>headers <emphasis>id</emphasis></entry>
-                                <entry>Displays the complete list of manifest headers of the specified bundle.  Use the <literal>bundle list</literal> command to get the internal id of a particular bundle.
-				  <para>The manifest headers include: <literal>Import-Package</literal>, <literal>Export-Package</literal>, <literal>Bundle-SymbolicName</literal>, and so on.  </para>
-				</entry>
-                        </row>
-		      </tbody>
-		   </tgroup>
-		</table>
-
-		<para>The following examples show how to use this command.</para>
-
-		<para>First, use the <literal>bundle list</literal> command to view all the installed bundles:</para>
-
-		<programlisting>osgi> vsh:bundle list
-
-Id   Name                                       Version                    State
-40   org.eclipse.virgo.kernel.userregionfactory 3.0.0.RELEASE             ACTIVE
-47   org.eclipse.equinox.cm                     1.0.300.v20101204         ACTIVE
-48   org.eclipse.virgo.kernel.userregion        3.0.0.RELEASE             ACTIVE
-49   org.eclipse.virgo.kernel.osgicommand       3.0.0.RELEASE             ACTIVE
-50   org.eclipse.osgi.services                  3.3.0.v20110110           ACTIVE
-51   com.springsource.org.apache.mina.core      2.0.2                     ACTIVE
-52   org.apache.felix.gogo.command              0.8.0.v201105062003       ACTIVE
-53   org.apache.felix.gogo.runtime              0.8.0.v201105062003       ACTIVE
-54   org.apache.felix.gogo.shell                0.8.0.v201107131313       ACTIVE
-55   org.eclipse.equinox.console.supportability 1.0.0.20110722-2          ACTIVE
-56   com.springsource.org.apache.sshd.core      0.5.0                     ACTIVE
-57   org.springframework.osgi.core              1.2.1                     ACTIVE
-58 S org.springframework.osgi.extender          1.2.1                     ACTIVE
-59   org.springframework.osgi.io                1.2.1                     ACTIVE
-60   org.eclipse.virgo.kernel.agent.dm          3.0.0.RELEASE             ACTIVE
-61 S org.eclipse.virgo.kernel.deployer.dm       3.0.0.RELEASE             ACTIVE
-62   org.eclipse.equinox.ds                     1.3.0.v20110124-0830      ACTIVE
-63   org.eclipse.equinox.util                   1.0.200.v20100503         ACTIVE
-64   com.springsource.org.aopalliance           1.0.0                     ACTIVE
-65   org.eclipse.virgo.kernel.dmfragment        3.0.0.RELEASE           RESOLVED
-66   org.springframework.aop                    3.0.5.RELEASE             ACTIVE
-67   org.springframework.asm                    3.0.5.RELEASE             ACTIVE
-68   org.springframework.beans                  3.0.5.RELEASE             ACTIVE
-69   org.springframework.context                3.0.5.RELEASE             ACTIVE
-70   org.springframework.core                   3.0.5.RELEASE             ACTIVE
-71   org.springframework.expression             3.0.5.RELEASE             ACTIVE
-osgi> </programlisting>
-
-		<para>The following example shows how to view the headers of the <literal>org.springframework.osgi.extender</literal> bundle (only the first few lines are shown):</para>
-
-		<programlisting>osgi> vsh:bundle examine 5
-
-Id:              5
-Name:            org.springframework.osgi.extender
-Version          1.2.1
-State:           ACTIVE
-Spring Powered:  true
-Bundle Location: file:&lt;... omitted ...&gt;/org.springframework.osgi.extender-1.2.1.jar/
-
-Imported Packages:
-    org.springframework.osgi.context [1.2.1, 1.2.1]
-        exported by org.springframework.osgi.core 1.2.1 [4]
-    &lt;... remainder omitted ...&gt;
-
-Exported Packages:
-    org.springframework.osgi.extender 1.2.1
-    &lt;... remainder omitted ...&gt;
-
-Published services:
-     58 org.springframework.beans.factory.xml.NamespaceHandlerResolver
-        consumed by org.springframework.osgi.extender 1.2.1 [5]
-        consumed by org.eclipse.virgo.kernel.deployer.dm 2.1.0.RELEASE [8]
-    &lt;... remainder omitted ...&gt;
-
-Consumed services:
-      1 org.osgi.service.packageadmin.PackageAdmin
-        published by org.eclipse.osgi 3.7.0.v20110224 [0]
-    &lt;... remainder omitted ...&gt;
-
-Fragments:
-    org.eclipse.virgo.kernel.dmfragment 2.1.0.RELEASE [10]
-
-osgi> </programlisting>
-
-	  </section>
-	  <section id="admin-shell-vsh-config-command">
-		<title>config Command</title>
-
-		<para>Use the <literal>config</literal> command to view and manage the configuration artifacts that have been installed in @kernel.product.name@.  A <emphasis>configuration artifact</emphasis> is simply a properties file that is associated with a user application that is contained in a bundle.  Using configuration artifacts, you can manage the configuration of a user application completely separately from the bundle that contains the application. </para>
-		<para>The following table lists the options you can specify for this command.</para>
-
-        	<table id="admin-shell-vsh-config-command-table" colsep="1" frame="all" rowsep="1">
-            	  <title>Options of the config Command</title>
-                    <tgroup cols="2">
-                      <thead>
-                        <row>
-                                <entry>Option </entry>
-                                <entry>Description</entry>
-                        </row>
-                      </thead>
-                      <tbody>
-                        <row>
-				<entry>list</entry>
-                                <entry>Lists the configuration artifacts that are currently installed in @kernel.product.name@.
-			          <para>The <literal>list</literal> option displays the full name of each installed configuration artifact, its version, and its current state.  Configuration artifacts have similar lifecycles to other artifacts, such as bundles, and so the list of states in which a configuration can be in is the same as those of bundles; see <link linkend="admin-shell-bundle-command">the bundle command</link> for the list of possible states. </para>
-			        </entry>
-                        </row>
-                        <row>
-				<entry>examine <emphasis>name [version]</emphasis></entry>
-                                <entry>Displays information about the specified configuration artifact.  Although you must specify the name of the configuration artifact, its version is optional unless you have multiple versions of the configuration artifact installed.  Use the <literal>config list</literal> command to view all configuration artifacts and versions currently installed in @kernel.product.name@.
-				<para>A configuration artifact must be active for you to examine it; if it is not currently active, use <literal>config start</literal> to start it and thus change its state to <literal>Active</literal>.</para>
-				<para>The command first displays the factory pid of the configuration artifact as well as the complete location of the bundle to which the configuration artifact is associated.   The command then lists all the properties that make up the configuration, as well as their current value. </para> </entry>
-                        </row>
-                        <row>
-							<entry>start <emphasis>name [version]</emphasis></entry>
-                            <entry>
-								<para>
-									Starts the specified configuration artifact and makes it visible to @kernel.product.name@.
-									Although you must specify the name of the configuration artifact, its version is optional unless you have multiple versions of the 
-									configuration artifact installed (which @project.name@ does not currently support).
-									Use the <literal>config list</literal> command to view all configuration artifacts and versions currently installed in @kernel.product.name@.
-								</para>
-								<para>
-									Starting the configuration sets its state to <literal>Active</literal>.
-								</para>
-							</entry>
-                        </row>
-                        <row>
-				<entry>stop <emphasis>name [version]</emphasis></entry>
-                                <entry>Stops the specified configuration artifact and makes it invisible to @kernel.product.name@.  Although you must specify the name of the configuration artifact, its version is optional unless you have multiple versions of the configuration artifact installed (which @project.name@ does not currently support).  Use the <literal>config list</literal> command to view all configuration artifacts and versions currently installed in @kernel.product.name@.
-
-				<para>Stopping the configuration sets its state to <literal>Resolved</literal>.</para></entry>
-                        </row>
-                        <row>
-				<entry>refresh <emphasis>name [version]</emphasis></entry>
-                                <entry>Updates the contents of the specified configuration artifact to @kernel.product.name@.  Although you must specify the name of the configuration artifact, its version is optional unless you have multiple versions of the configuration artifact installed (which @project.name@ does not currently support).  Use the <literal>config list</literal> command to view all configuration artifacts and versions currently installed in @kernel.product.name@.
-
-				<para>Use this command if you have changed the contents of the configuration artifact, and you want to make this information known to @kernel.product.name@ and the associated bundle. </para></entry>
-                        </row>
-                        <row>
-				<entry>uninstall <emphasis>name [version]</emphasis></entry>
-                                <entry>Uninstalls the specified configuration artifact and make it completely unavailable to @kernel.product.name@.  Although you must specify the name of the configuration artifact, its version is optional unless you have multiple versions of the configuration artifact installed (which @project.name@ does not currently support).  Use the <literal>config list</literal> command to view all configuration artifacts and versions currently installed in @kernel.product.name@.
-
-				<para>Stopping the configuration  removes it from @kernel.product.name@'s list of deployed artifacts and it will not show up when you perform a <literal>config list</literal>.</para></entry>
-                        </row>
-		      </tbody>
-		   </tgroup>
-		</table>
-
-		<para>The following example shows how to use this command to list the installed configuration artifacts.</para>
-		<programlisting>osgi> vsh:config list
-
-Name                                      Version                          State
-org.eclipse.virgo.kernel                  0.0.0                           ACTIVE
-org.eclipse.virgo.kernel.jmxremote.access 0.0.0                           ACTIVE
-org.eclipse.virgo.kernel.userregion       0.0.0                           ACTIVE
-org.eclipse.virgo.kernel.users            0.0.0                           ACTIVE
-org.eclipse.virgo.medic                   0.0.0                           ACTIVE
-org.eclipse.virgo.repository              0.0.0                           ACTIVE
-osgi.console.ssh                          0.0.0                           ACTIVE
-osgi.console.telnet                       0.0.0                           ACTIVE
-
-osgi> </programlisting>
-
-		<para>To view the properties of a configuration artifact, and their current values, use <literal>config examine</literal>:</para>
-
-		<programlisting>osgi> vsh:config examine org.eclipse.virgo.repository
-
-Factory pid:     
-Bundle Location: file:plugins/org.eclipse.virgo.kernel.services-@bundle.version@.jar
-
-Properties:
-    chain:
-        ext,usr
-    ext.searchPattern:
-        repository/ext/{artifact}
-    ext.type:
-        external
-    service.pid:
-        org.eclipse.virgo.repository
-    usr.type:
-        watched
-    usr.watchDirectory:
-        repository/usr
-osgi> </programlisting>
-
-	  </section>
-	  <section id="admin-shell-vsh-package-command">
-		<title>packages Command</title>
-
-		<para>Use the <literal>packages</literal> command to view the complete list of packages exported by all bundles installed in @kernel.product.name@, as well as examine a particular exported package in more detail.</para>
-
-		<para>The following table lists the options you can specify for this command.</para>
-
-        	<table id="admin-shell-vsh-package-command-table" colsep="1" frame="all" rowsep="1">
-            	  <title>Options of the packages Command</title>
-                    <tgroup cols="2">
-                      <thead>
-                        <row>
-                                <entry>Option </entry>
-                                <entry>Description</entry>
-                        </row>
-                      </thead>
-                      <tbody>
-                        <row>
-				<entry>list</entry>
-                                <entry>Displays all the exported packages for all bundles in the uer region of @kernel.product.name@.  In addition to the package name, the command displays the version of the exported package and the <literal>id</literal> of the bundle that contains the exported package.  You can examine the bundle by using the command <literal>bundle examine </literal><emphasis><literal>id</literal></emphasis>.</entry>
-                        </row>
-                        <row>
-				<entry>examine <emphasis>name version</emphasis></entry>
-                                <entry>Displays details about the exported package.  You must specify both the name of the exported package and its version; use <literal>packages list</literal> to view the exact names and version.
-				  <para>This command provides the following additional information about the exported package:</para>
-
-				  <itemizedlist>
-				    <listitem><para>The name and version of the bundle that exports the package.  This means that the package name is explicitly listed in the bundle's <literal>MANIFEST.MF</literal> file as part of the <literal>Export-Package</literal> header.</para></listitem>
-				    <listitem><para>Any attributes that are part of the <literal>Export-Package</literal>, in addition to <literal>version</literal>.</para></listitem>
-				    <listitem><para>The directives that are part of the <literal>Export-Package</literal> header.  A typical directive is <literal>uses</literal>, which declares up-front constraints on a number of other packages.</para></listitem>
-				    <listitem><para>The list of all bundles that import the package.</para></listitem>
-				  </itemizedlist>
-				</entry>
-                        </row>
-		      </tbody>
-		   </tgroup>
-		</table>
-
-		<para>The following example shows how to list all the exported packages for all bundles installed:</para>
-		<programlisting>osgi> vsh:packages list
-
-Name                                                        Version                    Providing Bundle
-javax.accessibility                                         0.0.0                      0
-javax.activation                                            0.0.0                      0
-javax.activation                                            1.1.1                      0
-&lt;... remainder omitted ...&gt;
-
-osgi> </programlisting>
-
-		<para>The following example shows how to examine a particular exported package:</para>
-		<programlisting>osgi> vsh:packages examine org.slf4j 1.6.1
-
-Exporter: org.eclipse.virgo.region.user 0.0.0 [1]
-
-Attributes:
-    None
-
-Directives:
-    uses:
-        org.slf4j.spi
-    x-equinox-ee:
-        -1
-    x-internal:
-        false
-
-Importer(s):
-    org.eclipse.virgo.kernel.agent.dm 2.1.0.RELEASE [7]
-        Import-Package attributes:
-            bundle-version:
-                0.0.0
-            version:
-                [1.6.1,2.0.0)
-        Import-Package directives:
-            resolution:
-                static
-    &lt;... remainder omitted ...&gt;
-
-osgi> </programlisting>
-
-
-	  </section>
-	  <section id="admin-shell-vsh-par-command">
-		<title>par Command</title>
-
-		<para>Use the <literal>par</literal> command to view all the PARs currently installed in @kernel.product.name@, view details about a particular PAR and manage its lifecycle, such as starting, stopping, refreshing, and uninstalling it.</para>
-		<para>The following table lists the options you can specify for this command.</para>
-
-        	<table id="admin-shell-vsh-par-command-table" colsep="1" frame="all" rowsep="1">
-            	  <title>Options of the par Command</title>
-                    <tgroup cols="2">
-                      <thead>
-                        <row>
-                                <entry>Option </entry>
-                                <entry>Description</entry>
-                        </row>
-                      </thead>
-                      <tbody>
-                        <row>
-				<entry>list</entry>
-                                <entry>Displays all the PARs that are currently installed in @kernel.product.name@.
-			          <para>The <literal>list</literal> option displays the full name of each installed PAR, its version, and its current state.  PARs have similar lifecycles to other artifacts, such as bundles, and so the list of states in which a PAR can be in is the same as those of bundles; see <link linkend="admin-shell-bundle-command">the bundle command</link> for the list of possible states. </para></entry>
-                        </row>
-                        <row>
-				<entry>examine <emphasis>name version</emphasis></entry>
-                                <entry>Displays information about the specified PAR; you are required to identify the PAR with both its name and its version.  Use the <literal>par list</literal> command to view all installed PAR files and their versions.  The command displays the following information:
-			         <itemizedlist>
-				    <listitem><para>The current state of the PAR (see <link linkend="admin-shell-vsh-bundle-command">the bundle command</link> for the full list of possible states).</para></listitem>
-				  <listitem><para>Whether the PAR is <emphasis>scoped</emphasis>.  Scoping specifies whether @kernel.product.name@ should deploy the members of the PAR in their own scope; when scoping is disabled, @kernel.product.name@ deploys the artifacts into the global scope and they are accessible for access by all other artifacts.</para></listitem>
-				  <listitem><para>Whether the PAR is <emphasis>atomic</emphasis>.  When a PAR is atomic, @kernel.product.name@ manages the lifecycle of all its member artifacts as a single entity, which means if one artifact member is started, then @kernel.product.name@ starts <emphasis>all</emphasis> the PAR artifacts. If one artifact fails to start, then @kernel.product.name@ stops all other artifacts in the PAR.</para></listitem>
-				  <listitem><para>The individual members, or children, of the PAR. These could be plans, bundles, configuration artifacts, and so on.</para></listitem>
-			         </itemizedlist>
-			   </entry>
-                        </row>
-                        <row>
-				<entry>start <emphasis>name version</emphasis></entry>
-                                <entry>Starts the specified PAR.  You must specify both the full name of the PAR as well as the version you want to start. Use the <literal>par list</literal> command to get the list of PARs currently installed in @kernel.product.name@.
-				<para>To start a PAR, it must have already been resolved by @kernel.product.name@, or in other words, be in the <literal>Resolved</literal> state.  After @kernel.product.name@ successfully starts the PAR, it is listed in the <literal>Active</literal> state. </para></entry>
-                        </row>
-                        <row>
-				<entry>stop <emphasis>name version</emphasis></entry>
-                                <entry>Stops the specified PAR.  You must specify both the full name of the PAR as well as the version you want to stop. Use the <literal>par list</literal> command to get the list of PARs currently installed in @kernel.product.name@.
-				  <para>When you stop a PAR, it goes from the <literal>Active</literal> state to the <literal>Resolved</literal> state, and you must re-start it if you want to use the application that the PAR contains.</para> </entry>
-                        </row>
-                        <row>
-				<entry>refresh <emphasis>name version</emphasis></entry>
-                                <entry>Updates the contents of the specified PAR. You must specify both the name and version of the PAR you want to refresh.  Use the <literal>par list</literal> command to this information.
-				<para>Use this command if you have changed the contents of the PAR file and you want to refresh the artifact as installed in the OSGi framework.</para></entry>
-                        </row>
-                        <row>
-				<entry>uninstall <emphasis>name version</emphasis></entry>
-                                <entry>Uninstalls the specified PAR. You must specify both the name and version of the PAR you want to refresh.  Use the <literal>par list</literal> command to this information.
-				  <para>When the uninstall process is complete, the PAR will not show up in the list of PARs displayed by the <literal>par list</literal> command.  If you want to use the application in the PAR, you must re-install it using the <literal>install</literal> command.</para></entry>
-                        </row>
-		      </tbody>
-		   </tgroup>
-		</table>
-
-		<para>The following example shows how to list the PARs that have been installed in @kernel.product.name@:</para>
-		<programlisting>osgi> vsh:par list
-
-Name                                         Version                      State
-
-org.eclipse.virgo.server.repository.hosted    2.1.0.RELEASE              ACTIVE
-
-osgi> </programlisting>
-
-		<para>The following example shows how to examine a particular PAR file:</para>
-		<programlisting>osgi> vsh:par examine org.eclipse.virgo.server.repository.hosted 2.1.0.RELEASE
-
-State:  ACTIVE
-Scoped: true
-Atomic: true
-
-Children:
-    bundle org.eclipse.virgo.server.repository.hosted.core 2.1.0.RELEASE
-    bundle org.eclipse.virgo.server.repository.hosted.web 2.1.0.RELEASE
-    bundle org.eclipse.virgo.server.repository.hosted-synthetic.context 2.1.0.RELEASE
-
-osgi> </programlisting>
-
-		<para>Finally, the following example shows how to refresh an installed PAR file:</para>
-		<programlisting>osgi> vsh:par refresh my.exciting.par 1.2.0
-
-par my.exciting.par 1.2.0 refreshed successfully
-
-osgi> </programlisting>
-
-	  </section>
-	  <section id="admin-shell-vsh-plan-command">
-		<title>plan Command</title>
-
-		<para>Use the <literal>plan</literal> command to view all the plans currently installed in @kernel.product.name@, view details about a particular plan and manage its lifecycle, such as starting, stopping, refreshing, and uninstalling it.</para>
-		<para>The following table lists the options you can specify for this command.</para>
-
-        	<table id="admin-shell-vsh-plan-command-table" colsep="1" frame="all" rowsep="1">
-            	  <title>Options of the plan Command</title>
-                    <tgroup cols="2">
-                      <thead>
-                        <row>
-                                <entry>Option </entry>
-                                <entry>Description</entry>
-                        </row>
-                      </thead>
-                      <tbody>
-                        <row>
-				<entry>list</entry>
-                                <entry>Displays all the plans that are currently installed in @kernel.product.name@.
-			          <para>The <literal>list</literal> option displays the full name of each installed plan, its version, and its current state.  Plans have similar lifecycles to other artifacts, such as bundles, and so the list of states in which a plan can be in is the same as those of bundles; see <link linkend="admin-shell-bundle-command">the bundle command</link> for the list of possible states. </para></entry>
-                        </row>
-                        <row>
-				<entry>examine <emphasis>name version</emphasis></entry>
-                                <entry>Displays information about the specified plan; you are required to identify the plan with both its name and its version.  Use the <literal>plan list</literal> command to view all installed plans and their versions.  The command displays the following information:
-			         <itemizedlist>
-						<listitem><para>The current state of the plan (see <link linkend="admin-shell-vsh-bundle-command">the bundle command</link> for the full list of possible states).</para></listitem>
-				    	<listitem><para>Whether the plan is <emphasis>scoped</emphasis>.  Scoping specifies whether @kernel.product.name@ should deploy the members of the plan in their own scope; when scoping is disabled, @kernel.product.name@ deploys the artifacts into the global scope and they are accessible for access by all other artifacts.</para></listitem>
-				    	<listitem><para>Whether the plan is <emphasis>atomic</emphasis>.  When a plan is atomic, @kernel.product.name@ manages the lifecycle of all its member artifacts as a single entity, which means if one artifact member is started, then @kernel.product.name@ starts <emphasis>all</emphasis> the plan artifacts. If one artifact fails to start, then @kernel.product.name@ stops all other artifacts in the plan.</para></listitem>
-				    	<listitem><para>The individual members, or children, of the plan.  These could be other plans, PARs, bundles, configuration artifacts, and so on.</para></listitem>
-			         </itemizedlist>
-			   </entry>
-                        </row>
-                        <row>
-				<entry>start <emphasis>name version</emphasis></entry>
-                                <entry>Starts the specified plan.  You must specify both the full name of the plan as well as the version you want to start. Use the <literal>plan list</literal> command to get the list of plans currently installed in @kernel.product.name@.
-				<para>To start a plan, it must have already been resolved by @kernel.product.name@, or in other words, be in the <literal>Resolved</literal> state.  After @kernel.product.name@ successfully starts the plan, it is listed in the <literal>Active</literal> state. </para></entry>
-                        </row>
-                        <row>
-				<entry>stop <emphasis>name version</emphasis></entry>
-                                <entry>Stops the specified plan.  You must specify both the full name of the plan as well as the version you want to stop. Use the <literal>plan list</literal> command to get the list of plans currently installed in @kernel.product.name@.
-				  <para>When you stop a plan, it goes from the <literal>Active</literal> state to the <literal>Resolved</literal> state, and you must re-start it if you want to use the application that the plan contains.</para> </entry>
-                        </row>
-                        <row>
-				<entry>refresh <emphasis>name version</emphasis></entry>
-                                <entry>Updates the contents of the specified plan. You must specify both the name and version of the plan you want to refresh.  Use the <literal>plan list</literal> command to this information.
-				<para>Use this command if you have changed the contents of the plan file and you want to refresh the artifact as installed in the OSGi framework.</para></entry>
-                        </row>
-                        <row>
-				<entry>uninstall <emphasis>name version</emphasis></entry>
-                                <entry>Uninstalls the specified plan. You must specify both the name and version of the plan you want to refresh.  Use the <literal>plan list</literal> command to this information.
-				  <para>When the uninstall process is complete, the plan will not show up in the list of plans displayed by the <literal>plan list</literal> command.  If you want to use the application in the plan, you must re-install it using the <literal>install</literal> command.</para></entry>
-                        </row>
-		      </tbody>
-		   </tgroup>
-		</table>
-
-		<para>The following example shows how to list the plans that have been installed in @kernel.product.name@:</para>
-		<programlisting><![CDATA[
-osgi> vsh:plan list
-
-Name                                           Version                            State
-org.eclipse.virgo.apps.admin.plan              2.1.0                             ACTIVE
-org.eclipse.virgo.kernel.userregion.springdm   2.1.0                             ACTIVE
-org.eclipse.virgo.web                          2.1.0                             ACTIVE
-
-osgi> ]]></programlisting>
-
-		<para>The following example shows how to examine a particular plan:</para>
-		<programlisting>osgi> vsh:plan examine org.eclipse.virgo.kernel.userregion.springdm 2.1.0
-
-State:  ACTIVE
-Scoped: false
-Atomic: false
-
-Children:
-    bundle org.eclipse.virgo.kernel.agent.dm 2.1.0.RELEASE
-    bundle org.springframework.osgi.io 1.2.1
-    bundle org.springframework.osgi.extender 1.2.1
-    bundle org.springframework.osgi.core 1.2.1
-    bundle org.eclipse.virgo.kernel.deployer.dm 2.1.0.RELEASE
-
-osgi> </programlisting>
-
-		<para>The following example shows how to stop a currently Active plan:</para>
-		<programlisting>osgi> vsh:plan stop org.eclipse.virgo.web 2.1.0
-
-plan org.eclipse.virgo.web:2.1.0 stopped successfully
-
-osgi> </programlisting>
-
-		<para>The following example shows how to start a plan:</para>
-
-		<programlisting>osgi> vsh:plan start org.eclipse.virgo.web 2.1.0
-
-plan org.eclipse.virgo.web:2.1.0 started successfully
-
-osgi> </programlisting>
-
-	  </section>
-	  <section id="admin-shell-vsh-service-command">
-		<title>service Command</title>
-
-		<para>Use the <literal>service</literal> command to view all the services that have been registered in the OSGi service registry of @kernel.product.name@. You can also examine a specific service to discover its properties, the bundle that publishes the service, and any bundles that consume the service.</para>
-		<para>The following table lists the options you can specify for this command.</para>
-
-        	<table id="admin-shell-vsh-service-command-table" colsep="1" frame="all" rowsep="1">
-            	  <title>Options of the service Command</title>
-                    <tgroup cols="2">
-                      <thead>
-                        <row>
-                                <entry>Option </entry>
-                                <entry>Description</entry>
-                        </row>
-                      </thead>
-                      <tbody>
-                        <row>
-				<entry>list</entry>
-                                <entry>Displays the list of services that are currently registered in the OSGi service registry of @kernel.product.name@.
-				  <para>Each service is identified by an internal <literal>ID</literal> which you can then use with the <literal>service examine</literal> command to view the details about a particular service. The <literal>list</literal> option also displays the object class that implements the service and the internal <literal>id</literal> of the bundle that provides the service. </para></entry>
-                        </row>
-                        <row>
-				<entry>examine <emphasis>id</emphasis></entry>
-                                <entry>Displays detailed information about the specified service.  Use the <literal>service list</literal> command to get the internal id of a particular service.
-				<para>This command displays the properties of the service, such as the object class that implements the service, the name of the bundle that publishes the service and any bundles that consume the service. </para></entry>
-                        </row>
-		      </tbody>
-		   </tgroup>
-		</table>
-
-		<para>The following example shows how to list the services currently registered in the OSGi service registry:</para>
-		<programlisting>osgi> vsh:service list
-
-Id  Object Class(es)                                            Providing Bundle
-
-1   org.osgi.service.packageadmin.PackageAdmin                                 0
-2   org.osgi.service.permissionadmin.PermissionAdmin, ...                      0
-3   org.osgi.service.startlevel.StartLevel                                     0
-4   org.eclipse.osgi.service.debug.DebugOptions                                0
-5   java.lang.ClassLoader                                                      0
-6   org.eclipse.osgi.framework.log.FrameworkLog                                0
-7   org.eclipse.osgi.framework.log.FrameworkLog                                0
-&lt;... remainder omitted ...&gt;
-
-72 org.eclipse.gemini.web.core.spi.ServletContainer                           38
-73 org.eclipse.gemini.web.core.WebContainer                                   37
-74 org.eclipse.virgo.web.core.WebApplicationRegistry                          39
-&lt;... remainder omitted ...&gt;
-
-osgi> </programlisting>
-
-		<para>The following example shows how to examine a particular service:</para>
-		<programlisting>osgi> vsh:service examine 73
-
-		Properties:
-		    objectClass:
-		        org.eclipse.gemini.web.core.WebContainer
-		    service.id:
-		        73
-
-		Publisher: org.eclipse.gemini.web.core 1.1.0.RELEASE [37]
-
-		Consumer(s):
-		    org.eclipse.virgo.web.core 2.1.0.RELEASE [39]
-
-		osgi> </programlisting>
-
-	  </section>
-	  <section id="admin-shell-vsh-install-command">
-		<title>install Command</title>
-
-		<para>Use the <literal>install</literal> command to deploy an artifact to @kernel.product.name@.  The artifact can be a bundle, PAR, plan, or configuration artifact.</para>
-
-		<para>The <literal>install</literal> command takes a single parameter: the URI of the artifact you want to deploy.  For example, to deploy a bundle on the local computer, use the <literal>file</literal> scheme:</para>
-
-		<programlisting>file://full-pathname-to-artifact</programlisting>
-
-		<para>After you execute the <literal>install</literal> command, @kernel.product.name@ attempts to resolve the artifact's dependencies, and if it is successful, puts it in the <literal>Resolved</literal> state.  At that point, you must start the artifact to be able to actually use it. </para>
-
-		<para>The following example shows how to install a bundle called <literal>swf-booking-mvc.war</literal> located in the <literal>/home/apps</literal> directory of the computer on which the Equinox Console Extension is being run:</para>
-
-		<programlisting>osgi> vsh:install file://home/apps/swf-booking-mvc.war
-...
-Artifact bundle swf-booking-mvc.war 0.0.0 installed</programlisting>
-
-		<para>
-			This command is particularly useful for installing an artifact from the @project.name@ repository, in which case use the <literal>repository:</literal> scheme:
-			<programlisting>repository:artifact-type/bundle-symbolic-name/bundle-version</programlisting>
-			For example:
-		</para>
-		<programlisting>osgi> vsh:install repository:bundle/my.bundle/1.0
-... 
-Artifact bundle my.bundle 1.0.0 installed
-osgi></programlisting>
-
-		<para>The following example shows how to use the <literal>bundle list</literal> command to ensure that the bundle was indeed installed in @kernel.product.name@; if you had installed a different kind of artifact, for example a plan, then you would use the appropriate command (such as <literal>plan list</literal>):</para>
-
-		<programlisting>osgi> vsh:bundle list
-
-Id   Name                             Version                   State
-
-0    org.eclipse.osgi                 3.6.1.R36x_v20100806     ACTIVE
-1    org.eclipse.virgo.region.user    0.0.0                    ACTIVE
-&lt;... remainder omitted ...&gt;
-
-59   org.eclipse.virgo.server.splash   2.1.0.RELEASE           ACTIVE
-60   swf-booking-mvc.war              0.0.0                  RESOLVED
-
-osgi> </programlisting>
-
-		<para>Note that the <literal>swf-booking-mvc.war</literal> file is in the <literal>Resolved</literal> state.   The following examples start the bundle, and then examine it to ensure that it is in the <literal>Active</literal> state:</para>
-		<programlisting>osgi> vsh:bundle start 60
-
-bundle swf-booking-mvc.war:0.0.0 started successfully
-
-
-osgi> vsh:bundle examine 60
-
-Id:              60
-Name:            swf-booking-mvc.war
-Version          0.0.0
-State:           ACTIVE
-Spring Powered:  true
-Bundle Location: file:&lt;... omitted ...&gt;/swf-booking-mvc.war/
-
-Imported Packages:
-    javax.crypto.interfaces [0.0.0, 0.0.0]
-        exported by org.eclipse.osgi 3.6.1.R36x_v20100806 [0]
-    org.omg.CosNaming.NamingContextPackage [0.0.0, 0.0.0]
-        exported by org.eclipse.osgi 3.6.1.R36x_v20100806 [0]
-    org.omg.DynamicAny.DynAnyFactoryPackage [0.0.0, 0.0.0]
-        exported by org.eclipse.osgi 3.6.1.R36x_v20100806 [0]
-    &lt;... remainder omitted ...&gt;
-
-osgi> </programlisting>
-
-	  </section>
-	  <section id="admin-shell-vsh-shutdown-command">
-		<title>shutdown Command</title>
-
-		<para>Use the <literal>shutdown</literal> command to shut down the @kernel.product.name@ instance to which you are connected. When @kernel.product.name@ is shut down, the shell returns you to the operating system prompt. </para>
-		<para>The <literal>shutdown</literal> command does not have any options.</para>
-
-		<para>The following example shows how to use this command.</para>
-
-		<programlisting>osgi> vsh:shutdown
-osgi> ... 
-Connection closed by foreign host.
-prompt$</programlisting>
-
-	  </section>
-       <section id="admin-shell-cl-clhas">
-            <title>clhas command</title>
-            <para>Use the <literal>clhas</literal> command to list the entries contained in the bundles deployed in @project.name@ and to solve class loading issues.</para>
-            <para>The command accepts as a parameter a search pattern in the form <emphasis>path/resource</emphasis>. The resource part of the pattern can contain wildcards.</para>
-            <para>The output contains all bundles that have resources or classes matching the pattern. Since wildcards are allowed, the matching entities are listed as well.</para>
-
-            <para>The following examples show how to use this command.</para>
-            <para>Use the <literal>clhas</literal> to view all bundles that contain <literal>Servlet</literal> class:</para>
-            <programlisting>osgi>clhas /javax/servlet/Servlet.class
-
-Bundles containing [/javax/servlet/Servlet.class]:
-  76    javax.servlet
-            /javax/servlet/Servlet.class</programlisting>
-
-            <para>Use the wildcard <literal>*</literal> with <literal>clhas</literal> to view all classes starting with <literal>Servlet</literal>:</para>
-            <programlisting>osgi> clhas /javax/servlet/Servlet*
-
-Bundles containing [/javax/servlet/Servlet*]:
-  76    javax.servlet
-            /javax/servlet/ServletRequestAttributeEvent.class
-            /javax/servlet/ServletRequest.class
-            &lt;... remainder omitted ...&gt;
-            /javax/servlet/Servlet.class
-            &lt;... remainder omitted ...&gt;</programlisting>
-
-            <para>The <literal>clhas</literal> command can also be used with class name instead of resource path:</para>
-            <programlisting>osgi> clhas javax.servlet.Servlet
-
-Bundles containing [javax/servlet/Servlet.class]:
-  76    javax.servlet
-            /javax/servlet/Servlet.class</programlisting>
-            <para>Please note that the command converts the class name to a path and appends <literal>class</literal> extension by default.</para>
-            <para>To search for a resource with an extension different than <literal>class</literal> you should use the resource path form:</para>
-            <programlisting>osgi> clhas /LocalStrings.properties
-
-Bundles containing [/LocalStrings.properties]:
-  96    com.springsource.org.apache.catalina
-            /org/apache/catalina/core/LocalStrings.properties
-            /org/apache/tomcat/util/http/mapper/LocalStrings.properties
-            /org/apache/catalina/loader/LocalStrings.properties
-            &lt;... remainder omitted ...&gt;</programlisting>
-
-            <para>The following example shows how to identify a possible <literal>ClassCastException</literal> due to wrong packaging:</para>
-            <programlisting>osgi>clhas /javax/servlet/Servlet.class
-
-Bundles containing [/javax/servlet/Servlet.class]:
-  76    javax.servlet
-            /javax/servlet/Servlet.class
-  107   myapp
-            /WEB-INF/classes/javax/servlet/Servlet.class</programlisting>
-            <para>It's obvious that the <literal>javax.servlet</literal> package should not be present in <literal>myapp</literal> application and its packaging has to be changed. This problem can often be seen in WAR or web bundles that package Servlet/JSP classes by accident.</para>
-        </section>
-        <section id="admin-shell-cl-clexport">
-            <title>clexport command</title>
-            <para>Use the <literal>clexport</literal> command to list the bundles that export a class or package.</para>
-            <para>The command accepts as a parameter the fully qualified class name (in the form <emphasis>package.class</emphasis>).</para>
-            <para>The command checks to see if the provided class is actually contained in a bundle. If the class is not found in a bundle but its package is exported, then a hint <literal>[class not found, package only]</literal> is displayed.</para>
-
-            <para>The following examples show how to use this command.</para>
-            <para>Use the <literal>clexport</literal> to view all bundles that contain <literal>Servlet</literal> class:</para>
-            <programlisting>osgi> clexport javax.servlet.Servlet
-
-Bundles exporting [javax.servlet.Servlet]:
-  14    com.springsource.javax.servlet</programlisting>
-
-            <para>If a bundle exports a package but does not contain the requested class, the output of the command will be similar to this:</para>
-            <programlisting>osgi> clexport javax.servlet.ServletX
-
-Bundles exporting [javax.servlet.ServletX]:
-  14    com.springsource.javax.servlet     [class not found, package only]</programlisting>
-        </section>
-        <section id="admin-shell-cl-clload">
-            <title>clload command</title>
-            <para>Use the <literal>clload</literal> command to list the bundles that can load a class or to check if a specific bundle can load a class.</para>
-            <para>The command accepts as parameters either:
-                <itemizedlist>
-                    <listitem><para>the fully qualified class name (in the form <emphasis>package.class</emphasis>)</para></listitem>
-                    <listitem><para>the fully qualified class name (in the form <emphasis>package.class</emphasis>) and the symbolic name or id of the bundle that is to be tested</para></listitem>
-                </itemizedlist>
-            </para>
-            <para>The command lists not only the bundle that successfully loaded the class, but also the one that actually provides the class. This is visualized with hints like <literal>[exported by 14 com.springsource.javax.servlet]</literal>.</para>
-
-            <para>The following examples show how to use this command.</para>
-            <para>You can use the <literal>clload</literal> to view all bundles that can load <literal>Servlet</literal> class:</para>
-            <programlisting>osgi> clload javax.servlet.Servlet
-
-Successfully loaded [javax.servlet.Servlet] from:
-  56    com.springsource.org.apache.taglibs.standard
-                [exported by 14 com.springsource.javax.servlet]
-  54    org.eclipse.virgo.apps.admin.web
-                [exported by 14 com.springsource.javax.servlet]
-  19    com.springsource.org.apache.commons.fileupload
-                [exported by 14 com.springsource.javax.servlet]
-  &lt;... remainder omitted ...&gt;</programlisting>
-
-            <para>If a bundle is to be tested, then its id can be used as a command parameter:</para>
-            <programlisting>osgi> clload javax.servlet.Servlet 19
-
-Successfully loaded [javax.servlet.Servlet] using class loader from:
-  19    com.springsource.org.apache.commons.fileupload
-                [exported by 14 com.springsource.javax.servlet]</programlisting>
-            <para>Or the same class load test can specify the symbolic name of the bundle:</para>
-            <programlisting>osgi> clload javax.servlet.Servlet com.springsource.org.apache.commons.fileupload
-
-Successfully loaded [javax.servlet.Servlet] using class loader from:
-  19    com.springsource.org.apache.commons.fileupload
-                [exported by 14 com.springsource.javax.servlet]</programlisting>
-        </section>
-
-
-    </section>
-    <section id="p2-commands">
-    <title>Using the p2 for extending your @project.name@ installation</title>
-    <section>
-    <title>Extending with the p2 director</title>
-    	<para>
-    		You can provision new features on top of your @project.name@ installation using the p2 director. It can be used both for initial provisioning and extending an existing installtion.
-    	</para>
-    	<para>For extending an existing installation you can use these director arguments:
-    	<screen>-repository http://download.eclipse.org/rt/ecf/3.5.3/site.p2
--installIU org.eclipse.ecf.remoteservice.feature.feature.group
--destination &lt;your @project.name@ installation folder&gt;</screen></para>
-	    <para>This installs the <emphasis role="bold">latest</emphasis> version of the specified p2 feature in your @project.name@ installation's p2 profile.</para>
-    </section>
-    <section>
-    <title>Extending via the p2 shell commands</title>
-    	<para>Another way to achieve the same results is to use the p2 commands. The commands are available only in @nano.product.name.short@ as it includes p2 by default. 
-    	<note>For the other distributions only the director is supported and the operation only extends their kernel region.</note>
-    	</para>
-    	<para>Here's a list of the most commonly used p2 commands:</para>
-    	<table id="p2-common-commands-table" colsep="1" frame="all" rowsep="1">
-		    <title>p2 Common Shell Commands</title>
-				<tgroup cols="2">
-			   		<thead>
-						<row>
-							<entry>Command</entry>
-							<entry>Help</entry>
-						</row>
-			  		</thead>
-			  		<tbody>
-			  			<row>
-							<entry><literal>provaddrepo &lt;repository URI&gt;</literal></entry>
-							<entry>
-								Add specified URI as metadata and artifact repository. Note that if you pass a wrong URL you'll get an error saying:
-								<literal>Repository not modifiable: http://wrongURL</literal>. The default behavior of this command is to create an empty repository at the
-								specified location if there isn't any. That won't work for remote locations so keep in mind that if you see this you probably passed a wrong URL.
-							</entry>
-						</row>
-						<row>
-							<entry><literal>provdelrepo &lt;repository URI&gt;</literal></entry>
-							<entry>
-								Remove specified metadata and artifact repository.
-							</entry>
-						</row>
-						<row>
-							<entry><literal>provinstall &lt;InstallableUnit&gt; &lt;version&gt; &lt;profileid&gt;</literal></entry>
-							<entry>
-								Install an IU to the profileid.  If no profileid is given, installs into default profile.
-							</entry>
-						</row>
-						<row>
-							<entry><literal>provremove &lt;InstallableUnit&gt; &lt;version&gt; &lt;profileid&gt;</literal></entry>
-							<entry>
-								Uninstall an IU from the profileid.  If no profileid is given, uninstalls form default profile.
-							</entry>
-						</row>
-						<row>
-							<entry><literal>provlg [&lt;repository URI&gt; &lt;iu id | *&gt; &lt;version range | *&gt;]</literal></entry>
-							<entry>
-								Lists all IUs with group capabilities in the given repo or in all repos if URI is omitted.
-							</entry>
-						</row>
-						<row>
-							<entry><literal>provliu [&lt;repository URI | *&gt; &lt;iu id | *&gt; &lt;version range | *&gt;]</literal></entry>
-							<entry>
-								Lists the IUs that match the pattern in the given repo.  * matches all.
-							</entry>
-						</row>
-						<row>
-							<entry><literal>confapply</literal></entry>
-							<entry>
-								This is a Simple Configurator command, not a p2 one. However it is relevant because it applies dynamically, at runtime, the installed p2 features.
-								What the command does is to apply to the running OSGi framework the current content in the bundles.info file. When using the provinstall command it takes care of updateing the bundles.info file.
-							</entry>
-						</row>
-			  		</tbody>
-				</tgroup>
-		  	</table>
-		  	<para>Here's an example showing how to install the ECF remote services but with the p2 commands this time:</para>
-		  	<screen>osgi&gt; provaddrepo http://download.eclipse.org/rt/ecf/3.5.3/site.p2
-
-osgi&gt; provlg
-
-org.eclipse.ecf.core.feature.group 3.5.3.v20111109-2142
-org.eclipse.ecf.core.featurepatch.feature.group 3.5.3.v20111109-2142
-org.eclipse.ecf.core.featurepatch.source.feature.group 3.5.3.v20111109-2142
-org.eclipse.ecf.core.source.feature.group 3.5.3.v20111109-2142
-org.eclipse.ecf.datashare.feature.feature.group 1.0.0.v20111109-2142
-org.eclipse.ecf.datashare.source.feature.feature.group 1.0.0.v20111109-2142
-org.eclipse.ecf.discovery.dnssd.feature.feature.group 1.0.0.v20111109-2142
-org.eclipse.ecf.discovery.dnssd.source.feature.feature.group 1.0.0.v20111109-2142
-org.eclipse.ecf.discovery.feature.feature.group 1.0.0.v20111109-2142
-org.eclipse.ecf.discovery.jmdns.feature.feature.group 1.0.0.v20111109-2142
-org.eclipse.ecf.discovery.jmdns.source.feature.feature.group 1.0.0.v20111109-2142
-org.eclipse.ecf.discovery.slp.feature.feature.group 1.0.0.v20111109-2142
-org.eclipse.ecf.discovery.slp.source.feature.feature.group 1.0.0.v20111109-2142
-org.eclipse.ecf.discovery.source.feature.feature.group 1.0.0.v20111109-2142
-org.eclipse.ecf.discovery.zookeeper.feature.feature.group 1.0.0.v20111109-2142
-org.eclipse.ecf.discovery.zookeeper.source.feature.feature.group 1.0.0.v20111109-2142
-org.eclipse.ecf.eventadmin.examples.feature.feature.group 1.0.0.v20111109-2142
-org.eclipse.ecf.eventadmin.examples.source.feature.feature.group 1.0.0.v20111109-2142
-org.eclipse.ecf.eventadmin.feature.feature.group 2.0.0.v20111109-2142
-org.eclipse.ecf.eventadmin.source.feature.feature.group 2.0.0.v20111109-2142
-org.eclipse.ecf.osgi.services.feature.feature.group 2.0.1.v20111109-2142
-org.eclipse.ecf.osgi.services.source.feature.feature.group 2.0.1.v20111109-2142
-org.eclipse.ecf.remoteservice.examples.feature.feature.group 1.1.0.v20111109-2142
-org.eclipse.ecf.remoteservice.examples.source.feature.feature.group 1.1.0.v20111109-2142
-org.eclipse.ecf.remoteservice.feature.feature.group 1.0.0.v20111109-2142
-org.eclipse.ecf.remoteservice.rest.feature.feature.group 1.0.0.v20111109-2142
-org.eclipse.ecf.remoteservice.rest.source.feature.feature.group 1.0.0.v20111109-2142
-org.eclipse.ecf.remoteservice.rosgi.feature.feature.group 1.0.0.v20111109-2142
-org.eclipse.ecf.remoteservice.rosgi.source.feature.feature.group 1.0.0.v20111109-2142
-org.eclipse.ecf.remoteservice.sdk.feature.feature.group 3.5.3.v20111109-2142
-org.eclipse.ecf.remoteservice.sdk.source.feature.feature.group 3.5.3.v20111109-2142
-org.eclipse.ecf.remoteservice.soap.feature.feature.group 1.0.0.v20111109-2142
-org.eclipse.ecf.remoteservice.soap.source.feature.feature.group 1.0.0.v20111109-2142
-org.eclipse.ecf.remoteservice.source.feature.feature.group 1.0.0.v20111109-2142
-org.eclipse.ecf.server.generic.feature.feature.group 1.0.0.v20111109-2142
-org.eclipse.ecf.server.generic.source.feature.feature.group 1.0.0.v20111109-2142
-org.eclipse.ecf.xmpp.feature.feature.group 1.0.0.v20111109-2142
-org.eclipse.ecf.xmpp.source.feature.feature.group 1.0.0.v20111109-2142
-
-osgi&gt; provinstall org.eclipse.ecf.remoteservice.feature.feature.group 1.0.0.v20111109-2142
-Installation complete for org.eclipse.ecf.remoteservice.feature.feature.group 1.0.0.v20111109-2142
-
-osgi&gt; confapply
-
-osgi&gt; ss
-
-"Framework is launched."
-
-
-id	State       Bundle
-0	ACTIVE      org.eclipse.osgi_3.7.1.R37x_v20110808-1106
-....
-92	RESOLVED    org.springframework.osgi.io_1.2.1
-93	RESOLVED    org.eclipse.ecf.console_1.0.0.v20111109-2142
-94	RESOLVED    org.eclipse.ecf.discovery_4.0.0.v20111109-2142
-95	RESOLVED    org.eclipse.ecf.provider_4.2.100.v20111109-2142
-96	RESOLVED    org.eclipse.ecf.provider.discovery_2.1.200.v20111109-2142
-97	RESOLVED    org.eclipse.ecf.provider.remoteservice_4.0.0.v20111109-2142
-98	RESOLVED    org.eclipse.ecf.remoteservice_6.0.200.v20111109-2142
-99	RESOLVED    org.eclipse.ecf.sharedobject_2.2.100.v20111109-2142
-100	RESOLVED    org.eclipse.equinox.concurrent_1.0.200.v20110502</screen>
-		<para>You can see that after applying the changes with <emphasis>confapply</emphasis> the remote services bundles and their dependencies are installed in @nano.product.name.short@.</para>
-    </section>   
-    </section>
-</chapter>
diff --git a/user-guide/src/applications.xml b/user-guide/src/applications.xml
deleted file mode 100644
index 0d31c73..0000000
--- a/user-guide/src/applications.xml
+++ /dev/null
@@ -1,228 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
-		"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
-<chapter id="deployment">
-	<title>Working with Applications</title>
-
-	<section id="deployment-deploying">
-		<title>Deploying Artifacts</title>
-		<para>
-			In the context of @tomcat.product.name@, <emphasis>deploying</emphasis> refers to installing an artifact to the server and then starting it to make it available to users.  Typically, when you install an artifact, @tomcat.product.name.short@ automatically starts it as long as the server is able to successfully resolve all its dependencies.  For this reason, the terms <emphasis>deploying</emphasis> and <emphasis>installing</emphasis> are often used interchangeably. 
-		</para>
-		<para>You deploy artifacts to @tomcat.product.name@ using either the hot-deploy directory on the file system or by using the Admin Console.  The artifacts that you can deploy to @tomcat.product.name.short@ are:
-		</para>
-		<itemizedlist>
-		  <listitem>Bundles, including Web Application Bundles</listitem>
-		  <listitem>WARs</listitem>
-		  <listitem>PARs</listitem>
-		  <listitem>Plans</listitem>
-		  <listitem>Configuration Files</listitem>
-		</itemizedlist>
-        <section id="deployment-deploying-nested-contexts">
-			<title>Deploying WARs with nested Web-ContextPaths</title>
-            <note>
-                This section currently is ONLY relevant for @nano.product.name@.
-            </note>
-			<para>
-				Virgo Nano Web supports deployment of WAR files which are transformed into Web Application Bundles. This process involves automatic creation of an OSGi manifest with all relevant OSGi header plus the very important Web-ContextPath header. Its value defines how the deployed WAR file can be requested. There is a limitation about this process that the automatic generation only creates a flat context path which equals the name of your WAR file. Virgo Nano Web supports generation of a nested one. 
-			</para>
-            
-			<para>In order to benefit from this flexibility all you need to do is just to add hashes '#' to your WAR file name in the places where you want to have slashes in your web context path. Here is an example:
-                <screen>myWarFile.war would result into "/myWarFile" web context path</screen>
-                <screen>my#War#File.war would result into "/my/War/File" web context path</screen>
-                The symbolic name of the resulting WAB file is the same as the WAR file name but the hashes '#' are replaced with dots '.'.
-            </para> 
-		</section>
-        <section id="initial-deployment-deploying-bulk">
-			<title>Initial Bulk Hot Deploy</title>
-            <note>
-                This section currently is ONLY relevant for @nano.product.name@.
-            </note>
-			<para>
-				To hot deploy an artifact initially in bulk mode, copy it into the pickup directory (by default <literal>$SERVER_HOME/pickup</literal>) and start up the server. Upon this startup all the artifacts in the <literal>pickup</literal> directory will get first installed and resolved and only then they will be started.
-			</para>
-            <para>
-                This solves the problem where artifacts depend on each other and when not in bulk mode the install order is not guaranteed therefore errors could occur.
-            </para>
-            <para>
-                This is only available as part of the initial scan of the <literal>pickup</literal> directory. Subsequently it goes back to the known mode of single file handled at a time.
-            </para>
-			<programlisting>prompt$ cd /home/applications
-prompt$ cp BundleA.jar $SERVER_HOME/pickup
-prompt$ cp BundleWithDependencyOnA.jar $SERVER_HOME/pickup
-prompt$ cd $SERVER_HOME/bin
-prompt$ ./startup.sh</programlisting>
-			<para>
-				When the server is started, artifacts are hot deployed and messages similar to the following appear in the log file:
-			</para>
-			<screen>[2009-12-10 06:41:01.021] fs-watcher          &lt;HD0001I&gt; Hot deployer processing 'INITIAL' event for file 'BundleA.jar; BundleWithDependencyOnA.jar; '.
-[2009-12-10 06:41:01.087] fs-watcher          &lt;DE0000I&gt; Installing bundle 'BundleA' version '0.0.0'.
-[2009-12-10 06:41:01.274] fs-watcher          &lt;DE0001I&gt; Installed bundle 'BundleA' version '0.0.0'.
-[2009-12-10 06:41:01.087] fs-watcher          &lt;DE0000I&gt; Installing bundle 'BundleWithDependencyOnA' version '0.0.0'.
-[2009-12-10 06:41:01.274] fs-watcher          &lt;DE0001I&gt; Installed bundle 'BundleWithDependencyOnA' version '0.0.0'.
-[2009-12-10 06:41:01.397] fs-watcher          &lt;DE0004I&gt; Starting bundle 'BundleA' version '0.0.0'.
-[2009-12-10 06:41:01.550] start-signalling-1  &lt;DE0005I&gt; Started bundle 'BundleA' version '0.0.0'.
-[2009-12-10 06:41:01.397] fs-watcher          &lt;DE0004I&gt; Starting bundle 'BundleWithDependencyOnA' version '0.0.0'.
-[2009-12-10 06:41:01.550] start-signalling-1  &lt;DE0005I&gt; Started bundle 'BundleWithDependencyOnA' version '0.0.0'.</screen>
-			<para>
-				If there is a problem with the deployment, such as the server being unable to resolve all dependencies, the console and log both show an error message to help you with troubleshooting.
-			</para>
-			<para>If there are no problems, @nano.product.name@ automatically starts the artifacts so that they are immediately available to users.
-			</para>
-            <para>Bulk deployment can be disabled and reverted back to the old one-file-at-a-time processing by removing this line from <literal>$SERVER_HOME/configuration/config.ini</literal>:
-            </para>
-            <programlisting>org.eclipse.virgo.fschecker.initialEventMode=bulk</programlisting>
-		</section>
-		<section id="deployment-deploying-hot">
-			<title>Hot Deploy</title>
-			<para>
-				To hot deploy an artifact, copy it into the pickup directory (by default <literal>$SERVER_HOME/pickup</literal>):
-			</para>
-			<programlisting>prompt$ cd /home/applications
-prompt$ cp helloWorld.war $SERVER_HOME/pickup</programlisting>
-			<para>
-				When the artifact is hot deployed, messages similar to the following appear in the log file:
-			</para>
-			<screen>[2009-12-10 06:41:01.021] fs-watcher          &lt;HD0001I&gt; Hot deployer processing 'CREATED' event for file 'helloWorld.war'.
-[2009-12-10 06:41:01.087] fs-watcher          &lt;DE0000I&gt; Installing bundle 'helloWorld' version '0.0.0'.
-[2009-12-10 06:41:01.274] fs-watcher          &lt;DE0001I&gt; Installed bundle 'helloWorld' version '0.0.0'.
-[2009-12-10 06:41:01.397] fs-watcher          &lt;DE0004I&gt; Starting bundle 'helloWorld' version '0.0.0'.
-[2009-12-10 06:41:01.414] Thread-3            &lt;WE0000I&gt; Starting web bundle 'helloWorld' version '0.0.0' with context path '/helloWorld'.
-[2009-12-10 06:41:01.537] Thread-3            &lt;WE0001I&gt; Started web bundle 'helloWorld' version '0.0.0' with context path '/helloWorld'.
-[2009-12-10 06:41:01.550] start-signalling-1  &lt;DE0005I&gt; Started bundle 'helloWorld' version '0.0.0'.</screen>
-			<para>
-				If there is a problem with the deployment, such as the server being unable to resolve all dependencies, the console and log both show an error message to help you with troubleshooting.
-			</para>
-			<para>If there are no problems, @tomcat.product.name.short@ automatically starts the artifact so that it is immediately available to users.
-			</para>
-		</section>
-		
-		<section id="deployment-redeploy-hot">
-		  <title>Hot Redeploy</title>
-		  <para>
-				To hot redeploy an artifact which is already hot deployed, copy the updated artifact into the pickup directory (by default <literal>$SERVER_HOME/pickup</literal>), 
-        just as for hot deploy. When the artifact is redeployed, messages similar to the following appear in the log file:
-			</para>
-			<screen>[2013-01-09 14:08:12.422] fs-watcher                   &lt;HD0001I&gt; Hot deployer processing 'MODIFIED' event for file 'helloWorld.war'.
-[2013-01-09 14:08:12.422] fs-watcher                   &lt;DE0007I&gt; Refreshing bundle 'helloWorld' version '0.0.0'.
-[2013-01-09 14:08:12.469] fs-watcher                   &lt;WE0002I&gt; Stopping web bundle 'helloWorld' version '0.0.0' with context path '/helloWorld'.
-[2013-01-09 14:08:13.094] fs-watcher                   &lt;WE0003I&gt; Stopped web bundle 'helloWorld' version '0.0.0' with context path '/helloWorld'.
-[2013-01-09 14:08:13.094] fs-watcher                   &lt;DE0010I&gt; Stopping bundle 'helloWorld' version '0.0.0'.
-[2013-01-09 14:08:13.110] fs-watcher                   &lt;DE0011I&gt; Stopped bundle 'helloWorld' version '0.0.0'.
-[2013-01-09 14:08:13.250] fs-watcher                   &lt;DE0004I&gt; Starting bundle 'helloWorld' version '0.0.0'.
-[2013-01-09 14:08:13.250] start-signalling-2           &lt;WE0000I&gt; Starting web bundle 'helloWorld' version '0.0.0' with context path '/helloWorld'.
-[2013-01-09 14:08:13.860] start-signalling-2           &lt;WE0001I&gt; Started web bundle 'helloWorld' version '0.0.0' with context path '/helloWorld'.
-[2013-01-09 14:08:13.860] start-signalling-2           &lt;DE0005I&gt; Started bundle 'helloWorld' version '0.0.0'.
-[2013-01-09 14:08:13.860] fs-watcher                   &lt;DE0008I&gt; Refreshed bundle 'helloWorld' version '0.0.0'.</screen>
-    <note>
-      The following paragraph is ONLY relevant for @nano.product.name@.
-    </note>
-    <para>
-      The redeploy waits for any previous operations on the artifact being redeployed to finish. The wait timeout could be configured through the following property in <literal>$SERVER_HOME/configuration/config.ini</literal>: 
-    </para>
-    <programlisting>org.eclipse.virgo.update.timeout</programlisting>
-		</section>
-
-		<section id="deployment-deploying-manual">
-			<title>Deploying Using the Admin Console</title>
-			<para>
-				The Admin Console allows you to upload a file, which will be deployed automatically, from your local file system to the @tomcat.product.name@. As soon as @tomcat.product.name@ deploys the artifact,  it appears in the list of artifacts in the Admin Console.  Note that the GUI for uploading varies according to the browser and operating system you use.
-			</para>
-
-			<para>See <link linkend="admin-console-install-artifacts">Installing a New Artifact</link> for details about using the Admin Console to install (deploy) an artifact.  See <link linkend="admin-console">The Web Admin Console</link> for general information about the Admin Console.</para> 
-		</section>
-
-		<section id="deployment-deploying-happens">
-			<title>What Happens When You Deploy</title>
-			<para>
-				When you deploy an artifact, either using hot-deployment or the Admin Console, Web Server copies the file to its work directory (<literal>SERVER_HOME/work</literal>) and registers it in its internal registry. 
-				The server then checks any dependencies the artifact might have to see if
-				deployment can go ahead, and if all dependencies are resolved, @tomcat.product.name@ starts the artifact.
-				Because of all these additional internal activities, you should NOT simply copy the artifact into the <literal>work</literal> directory and assume it will be deployed, because @tomcat.product.name@ will not do so.
-			</para>
-		</section>
-		<section id="deployment-deploying-ordering">
-			<title>Deployment Ordering</title>
-			<para>
-				When deploying bundles that have dependencies, it is important 
-				that you deploy them in the correct order. @tomcat.product.name@ 
-				honors this ordering when it redeploys the artifacts on startup. 
-			</para>
-			<para>
-				If you use hot deployment to deploy your artifacts, be sure to copy the corresponding files into the pickup
-				directory one-by-one. Copying the files in one group, for example by using a single <literal>cp</literal> command, provides no guarantee of ordering.
-			</para> 
-		</section>
-		<section id="deployment-deploying-shared">
-			<title>Deploying Shared Artifacts</title>
-			<para>
-				Artifacts may be shared by plans.
-				Sharing occurs when a plan is deployed which references an artifact that was previously deployed or is a child artifact
-				of a plan that was previously deployed.
-				Sharing also occurs when an artifact is deployed which is already a child of a deployed plan, but in this case the shared
-				artifact may <emphasis>not</emphasis> appear as a top-level artifact, for example, in the Admin Console, in the shell,
-				and in JMX.
-			</para>
-			<para>
-				Sharing is taken into account when artifacts are stopped.
-				A shared artifact is stopped only when all the artifacts referencing the shared artifact have been stopped
-				and, if the shared artifact was deployed in its own right, the artifact itself has been stopped.
-			</para>
-		</section>
-		<section id="deployment-deploying-restrictions">
-			<title>Restrictions</title>
-			<para>
-				@tomcat.product.name@ does not support deploying fragment bundles. Typically, fragment bundles should be placed in <literal>$SERVER_HOME/repository/ext</literal>
-				or <literal>$SERVER_HOME/repository/usr</literal> so that they will be installed automatically with their host bundles.
-			</para>
-		</section>
-	</section>
-
-	<section id="deployment-undeploy">
-		<title>Undeploying Artifacts</title>
-		<para>
-			You undeploy artifacts from @tomcat.product.name@ by using either the hot-deploy directory on the file system, or the Admin Console.
-		</para>
-		<para><emphasis role="bold">Note:</emphasis>  As with deploying, in this guide the terms <emphasis>undeploying</emphasis> and <emphasis>uninstalling</emphasis> are used interchangeably.</para>
-
-		<section id="deployment-undeploy-hot">
-			<title>Hot Undeploy</title>
-			<para>
-				To hot-undeploy an artifact, remove the corresponding file from the pickup directory (by default <literal>$SERVER_HOME/pickup</literal>):
-			</para>
-			<programlisting>prompt$ cd $SERVER_HOME/pickup
-prompt$ rm helloWorld.war</programlisting>
-			<para>
-				When @tomcat.product.name@ completes the undeployment of the artifact, messages similar to the following appear in the log:
-			</para>
-			<screen>[2009-12-10 06:46:33.254] fs-watcher   &lt;HD0001I&gt; Hot deployer processing 'DELETED' event for file 'helloWorld.war'.
-[2009-12-10 06:46:33.259] Thread-3     &lt;WE0002I&gt; Stopping web bundle 'helloWorld' version '0.0.0' with context path '/helloWorld'.
-[2009-12-10 06:46:33.285] Thread-3     &lt;WE0003I&gt; Stopped web bundle 'helloWorld' version '0.0.0' with context path '/helloWorld'.
-[2009-12-10 06:46:33.290] fs-watcher   &lt;DE0010I&gt; Stopping bundle 'helloWorld' version '0.0.0'.
-[2009-12-10 06:46:33.295] fs-watcher   &lt;DE0011I&gt; Stopped bundle 'helloWorld' version '0.0.0'.
-[2009-12-10 06:46:33.302] fs-watcher   &lt;DE0013I&gt; Uninstalling bundle 'helloWorld' version '0.0.0'.
-[2009-12-10 06:46:33.319] fs-watcher   &lt;DE0014I&gt; Uninstalled bundle 'helloWorld' version '0.0.0'.</screen>
-
-		</section>
-
-		<section id="deployment-undeploy-manual">
-			<title>Undeploying Using the Admin Console</title>
-			<para>
-				You can undeploy only whole artifacts from the Admin Console, or in other words, you cannot undeploy the separate modules or bundles that make up an artifact.</para>
-			<para>
-				The only artifact that you cannot undeploy from the Admin Console is the Admin Console itself. If you need to undeploy this application, you must remove it from the pickup directory (by default <literal>SERVER_HOME/pickup</literal>); the name of the artifact is
-				<literal>org.eclipse.virgo.server.admin-2.1.0.RELEASE.plan</literal>.
-			</para>
-			<para>See <link linkend="admin-console-manage-artifacts">Viewing and Managing the Lifecycle of Deployed Artifacts</link> for details about uninstalling (undeploying) an artifact using the Admin Console.  The high-level steps are to highlight the artifact in the artifact tree then click <literal>Uninstall</literal>. </para>
-		</section>
-		<section id="deployment-undeploying-shared">
-			<title>Undeploying Shared Artifacts</title>
-			<para>
-				Sharing is taken into account when artifacts are undeployed.
-				A shared artifact is undeployed only when all the artifacts referencing the shared artifact have been undeployed
-				and, if the shared artifact was deployed in its own right, the artifact itself has been undeployed.
-			</para>
-		</section>
-	</section>
-
-</chapter>
diff --git a/user-guide/src/concepts.xml b/user-guide/src/concepts.xml
deleted file mode 100644
index 51e234e..0000000
--- a/user-guide/src/concepts.xml
+++ /dev/null
@@ -1,674 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE chapter PUBLIC  "-//OASIS//DTD DocBook XML V4.5//EN"  
-    "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
-
-<!--========================================================================-->
-<chapter id="concepts">
-
-<title>Concepts</title>
-
-<para>This chapter introduces some basic concepts that will help you to use @project.name@.</para>
-
-<!--========================================================================-->	
-<section id="concepts.modular">
-	
-<title>Modular Runtimes and Applications</title>
-	
-<para>
-	@tomcat.product.name@, @jetty.product.name@, @kernel.product.name@ and @nano.product.name@ are Java runtimes each composed of
-	a collection of modules and supporting applications which are also composed of a
-	collection of modules.
-	Modules can be shared between applications and multiple versions of modules
-	can co-exist.
-</para>
-
-</section>
-
-<!--========================================================================-->	
-<section id="concepts.osgi">
-	
-<title>OSGi Concepts</title>
-
-<para>Modules in @project.name@ are represented using a standard Java
-module system known as <emphasis>OSGi</emphasis>.
-Modules in OSGi are known as <emphasis>bundles</emphasis>.
-Bundles consist of programs and resources organised by Java package together
-with metadata which declares imported and exported packages.
-A bundle <emphasis>exports</emphasis> a package to make the corresponding programs and resources
-available for use by other bundles.
-A bundle <emphasis>imports</emphasis> a package to use the corresponding programs and resources of
-another bundle.</para>
-
-<para>
-	Representing a program as a collection of bundles makes it easier for the
-	programmer to manage it and modify it and for teams of programmers to divide
-	responsibilities between themselves.
-	A bundle is similar to a Java class in this respect. Design principles similar to those for
-	organising data and programs into classes can be applied
-	to organising applications into bundles.
-</para>
-
-<para>
-	An industry consortium known as the
-	<emphasis>OSGi Alliance</emphasis> develops OSGi
-	specifications, reference implementations, and compliance tests.
-	@project.name@ is built on the Equinox OSGi framework which is also
-	the reference implementation for the OSGi framework specification.
-</para>
-
-<!--========================================================================-->
-<section>
-	
-<title>Bundles</title>
-
-<para>
-Each bundle is stored in a file which conforms to the JAR file format and
-can contain Java classes, a manifest (in <literal>META-INF/MANIFEST.MF</literal>),
-and further resource files.</para>
-
-<para>The OSGi framework enables bundles to be installed and run.</para>
-
-<para>OSGi identifies bundles <quote>by name</quote> and <quote>by identifier</quote> (id).</para>
-
-<para>The <emphasis>symbolic name</emphasis> and 
-<emphasis>version</emphasis> of a bundle are attributes of the bundle which identify the bundle.
-A bundle declares its <emphasis>symbolic name</emphasis> and <emphasis>version</emphasis>
-in its manifest (a file called <literal>MANIFEST.MF</literal>) like this:
-<programlisting>Bundle-SymbolicName: org.foo.bundle
-Bundle-Version: 1.2.3.BUILD-2009-06-04
-</programlisting>
-</para>
-
-<para>Additionally, the OSGi framework
-assigns a distinct number, known as a <emphasis>bundle id</emphasis>, to each bundle
-as it is installed. Bundles may be referred to <quote>by identifier</quote> using this number.
-The OSGi framework itself resides in a
-bundle with bundle id <literal>0</literal>.</para>
-
-<para>The
-dependencies between bundles are expressed statically in terms of packages and
-dynamically in terms of services. A package is familiar to Java programmers.
-For example, a Java program may depend on a class <literal>org.foo.X</literal>, 
-from package <literal>org.foo</literal>, and a bundle
-containing that program
-would either need to contain <literal>org.foo.X</literal> or depend on the
-package <literal>org.foo</literal>.
-Package dependencies are specified in the bundle manifest, for example:
-<programlisting>Import-Package: org.foo
-</programlisting>
-</para>
-
-<para>A bundle which provides a package for use by other bundles <emphasis>must</emphasis>
-export the package in its manifest. For example:
-<programlisting>Export-Package: org.foo
-</programlisting>
-</para>
-
-<para>The OSGi framework ensures that a given bundle&rsquo;s package dependencies
-can be <emphasis>satisfied</emphasis> before the bundle runs. This process is known as
-<emphasis>resolution</emphasis>.</para>
-
-<para>After a bundle is resolved, its classes and resources are available for
-loading.
-In OSGi, bundles and their packages do not appear on the application classpath.
-Instead, each bundle has a class loader which loads its own classes and loads classes belonging to each of its
-imported packages by deferring to the bundle class loader that exports the package.</para>
-
-</section>
-
-<!--========================================================================-->
-<section>
-	
-<title>Life Cycle</title>
-
-<para>The OSGi framework manages the <emphasis>life cycle</emphasis> of each bundle. A bundle is
-first of all <emphasis>install</emphasis>ed and will be in the INSTALLED state.
-If a request is made to <emphasis>start</emphasis> the bundle, the OSGi framework <emphasis>resolve</emphasis>s the bundle
-and, if resolution was successful, will subsequently move the bundle to the ACTIVE state.
-If a request is made to <emphasis>stop</emphasis> the bundle, the OSGi framework will move the
-bundle back to the RESOLVED state. A request may then be made to <emphasis>uninstall</emphasis>
-the bundle.</para>
-
-<para>While the bundle is INSTALLED, ACTIVE or RESOLVED, it may be <emphasis>updated</emphasis> to pick up
-some changes. These changes are not detected by bundles which were depending
-on the bundle before it was updated.
-A <quote>refresh packages</quote> operation may be performed to ripple the
-changes out to those bundles. (See <xref linkend="concepts.services"/>.)</para>
-<para>The life cycle of a bundle can be summarised by a state transition diagram.
-This diagram shows some more of the intermediate states of a bundle not described in the overview above:
-<figure>
-<title>Bundle life cycle</title>
-	<mediaobject>
-		<imageobject role="fo">
-    		<imagedata fileref="images/concepts/bundle-lifecycle.png" format="PNG" align="center" width="120mm"/>
-    	</imageobject>
-		<imageobject role="html">
-			<imagedata fileref="images/concepts/bundle-lifecycle.png" format="PNG" align="center"/>
-		</imageobject>
-	</mediaobject>
-</figure></para>
-
-</section>
-
-<!--========================================================================-->
-<section id="concepts.services" xreflabel="Services concepts">
-	
-<title>Services</title>
-
-<para>Bundles may publish Java objects, known as <emphasis>services</emphasis>, 
-to a registry managed by the OSGi framework. Other bundles running in
-the same OSGi framework can then find and use those services. Services
-are typically instances of some shared Java interface. A bundle which
-provides a service need not then export the package containing the
-<emphasis>implementation</emphasis>
-class of the service.
-</para>
-
-<para>For example, a bundle could export a package containing the interface
-<literal>org.bar.SomeInterface</literal>, thus:
-
-<programlisting>Export-Package: org.bar
-</programlisting>
-</para>
-
-<para>…implement the interface with a class <literal>SomeImpl</literal>:
-
-<programlisting>package org.bar.impl;
-
-class SomeImpl implements SomeInterface {
-	…
-}
-</programlisting>
-</para>
-
-<para>…create an instance of <literal>SomeImpl</literal> and 
-then publish this instance (as an instance of the interface <literal>SomeInterface</literal>).
-</para>
-
-<para>An OSGi framework publishes a number of standard services. For example, the 
-<emphasis>Package Admin</emphasis> service provides the <quote>refresh packages</quote> life cycle operation
-mentioned above.</para>
-
-<para>OSGi provides an <glossterm>API</glossterm> which can be used to publish and find services,
-but it is much simpler to use Spring DM or Blueprint to accomplish this. (See <xref linkend="concepts.springdm"/>.)</para>
-
-</section>
-
-<!--========================================================================-->
-<section>
-	
-<title>Versioning</title>
-
-<para>
-	OSGi allows different versions of bundles, packages, and several
-	other entities, to co-exist in the same framework
-	and provides some mechanisms for managing these versions.
-</para>
-
-<section>
-
-<title>Version Numbers</title>
-
-<para>An OSGi <emphasis>version number</emphasis> consists of up to three numeric components, 
-or exactly three
-numeric components followed by a string component. These components are
-separated by a period (<quote><literal>.</literal></quote>) and
-are called the <emphasis>major</emphasis>, <emphasis>minor</emphasis>, <emphasis>micro</emphasis>,
-and <emphasis>qualifier</emphasis> components, respectively.
-</para>
-<para>For example, the version <literal>2.4.1.ga</literal> has major component <literal>2</literal>, minor component
-<literal>4</literal>, micro component <literal>1</literal>,
-and a qualifier component <literal>ga</literal>. (There are restrictions on the characters that can appear in
-a qualifier. For example: letters, digits, underscores and hyphens are allowed; periods and commas are not.)</para>
-
-<para>Trailing components may be omitted along with their period (<literal>.</literal>). So, for example, the version
-numbers <literal>2</literal>, <literal>2.0</literal>, and <literal>2.0.0</literal>
-all denote the same version. This example demonstrates that <literal>0</literal> is assumed if a numeric component is omitted, 
-and the empty string is assumed for an omitted qualifier.</para>
-
-</section>
-
-<section>
-
-<title>Version Ranges</title>
-
-<para>Dependencies on bundles and packages have an associated <emphasis>version range</emphasis>
-which is specified using an interval notation: a square bracket
-<quote><literal>[</literal></quote> or <quote><literal>]</literal></quote> denotes
-an <emphasis>inclusive</emphasis> end of the range and a round bracket
-<quote><literal>(</literal></quote> or <quote><literal>)</literal></quote> denotes
-an <emphasis>exclusive</emphasis> end of the range. Where one end of the range is to be included and the other excluded, it is permitted to
-pair a round bracket with a square bracket.
-The examples below make this clear.</para>
-
-<para>If a single version number is used where a version <emphasis>range</emphasis> is
-required this does <emphasis>not</emphasis> indicate a single version, but the range <emphasis>starting</emphasis> from that version and 
-including all higher versions.</para>
-
-<para>There are three common cases:
-
-<itemizedlist>
-<listitem><para>A <quote>strict</quote> version range, such as <literal>[1.2,1.2]</literal>, which
-denotes that version and only that version.</para></listitem>
-<listitem><para>A <quote>half-open</quote> range, such as
-<literal>[1.2,2)</literal>, which has an inclusive lower limit
-and an exclusive upper limit, denoting version <literal>1.2.0</literal> and any version after this, up 
-to, <emphasis>but not including</emphasis>, version <literal>2.0.0</literal>.
-</para></listitem>
-<listitem><para>An <quote>unbounded</quote> version range, such as <literal>1.2</literal>, which
-denotes version <literal>1.2</literal> and <emphasis>all</emphasis> later versions.</para></listitem>
-</itemizedlist>
-
-</para>
-
-</section>
-
-<section>
-<title>Versioning Policies</title>
-<para>A <emphasis>versioning policy</emphasis> is a way of using version numbers to indicate compatible
-and incompatible changes.
-OSGi does not mandate a particular versioning policy.
-Instead, a specific versioning policy may be implemented using version ranges.</para>
-<para>Strict and half-open version ranges are most useful in representing versioning
-policies.
-Unbounded version ranges can lead to problems as they (unrealistically) assume that
-compatibility will be preserved indefinitely.</para>
-
-<para>For example, a conservative versioning policy might assume that any change, other than
-in the qualifier component of a version, implies an incompatible
-change to the object.
-Such a policy would employ version ranges such as <literal>[1.2.1.beta,1.2.2)</literal>
-which accept any version from <literal>1.2.1.beta</literal> (inclusive) up to but not including
-<literal>1.2.2</literal> (exclusive).
-</para>
-<para>Alternatively, a relaxed versioning policy might assume that only changes in the major component of
-a version denote an incompatible change.
-Such a policy would employ version ranges such as <literal>[1.2,2)</literal> to capture this.</para>
-
-<para>
-	The OSGi Alliance has published a <ulink url="http://www.osgi.org/wiki/uploads/Links/SemanticVersioning.pdf">Semantic
-	Versioning white paper</ulink> which provides some recommendations and guidance on versioning policies.
-</para>
-
-</section>
-
-<!--========================================================================-->
-<section>
-
-<title>Bundle Version</title>
-
-<para>Each bundle has a version.
-The bundle&rsquo;s version may be specified in the manifest using a
-<literal>Bundle-Version</literal> header:
-
-<informalexample>
-<programlisting>Bundle-Version: 1.4.3.BUILD-20090302
-</programlisting>
-</informalexample>
-If not specified the bundle version is assumed to be <literal>0</literal>.
-</para>
-
-</section>
-
-<!--========================================================================-->
-<section>
-
-<title>Package Version</title>
-
-<para>Each exported package has a version.
-The exported package&rsquo;s version may be specified on the Export-Package manifest header. For example
-
-<informalexample>
-<programlisting>Export-Package: org.foo;version="2.9",org.bar;version="1"
-</programlisting>
-</informalexample>
-
-exports two packages: <literal>org.foo</literal>, at version <literal>2.9.0</literal> and 
-<literal>org.bar</literal>, at version <literal>1.0.0</literal>.
-</para>
-
-<para>If the version attribute is omitted, the version is assumed to be <literal>0</literal>.</para>
-
-<para>Each package <emphasis>import</emphasis> has a version <emphasis>range</emphasis>.
-The package import version range may be specified on the <literal>Import-Package</literal> manifest header.
-If interval notation is used, the version range must be enclosed in double quotes, for example:
-<informalexample>
-<programlisting>Import-Package: org.foo;version="[2,3)",org.bar;version="[1,1]"</programlisting>
-</informalexample>
-seeks to import a package <literal>org.foo</literal> in the range <literal>[2.0.0,3.0.0)</literal> and a package
-<literal>org.bar</literal> with the (exact) version <literal>1.0.0</literal>.
-</para>
-
-<para>If a version range is not specified on an import, the range <literal>0</literal> is assumed, meaning that 
-any version of this package would satisfy the import.</para>
-
-</section>
-
-<!--========================================================================-->
-<section>
-
-<title>Bundle Manifest Version</title>
-
-<para>Bundle manifests have a version which is <literal>1</literal> by default,
-indicating OSGi Release 3 semantics.
-@project.name@ is based on OSGi Release 4 and therefore expects bundle manifests to be
-at version <literal>2</literal>, indicating OSGi Release 4 semantics.
-The bundle manifest&rsquo;s version should be specified on the Bundle-ManifestVersion manifest header, exactly as follows:
-<informalexample>
-<programlisting>Bundle-ManifestVersion: 2
-</programlisting>
-</informalexample>
-</para>
-
-</section>
-
-<!--========================================================================-->
-<section>
-
-<title>Manifest Version</title>
-
-<para>Manifests themselves also have a version which <emphasis>must</emphasis> be specified as <literal>1.0</literal>.
-This is not an OSGi definition but part of the 
-(<ulink url="http://java.sun.com/javase/6/docs/technotes/guides/jar/jar.html">JAR file specification</ulink>).
-
-<informalexample>
-<programlisting>Manifest-Version: 1.0
-</programlisting>
-</informalexample>
-
-</para>
-
-</section>
-
-</section>
-
-</section>
-
-<!--========================================================================-->
-<section id="concepts.springdm" xreflabel="Spring DM concepts">
-	
-<title>Spring DM and Blueprint Concepts</title>
-
-<para>Spring DM is a project which enables <emphasis>services</emphasis> to be published and consumed
-using descriptions written in XML.</para>
-
-<para>The XML descriptions reside in files with extension <literal>.xml</literal> in the
-bundle&rsquo;s <literal>META-INF/spring</literal> sub-directory.</para>
-
-<para>
-	To publish a service, an <literal>&lt;osgi:service&gt;</literal> tag is used, specifying the
-	implementation class of the service and the interface class to be used.
-	Spring DM constructs an instance of the implementation class and 
-	publishes that instance in the OSGi service registry under the interface when the bundle is started.
-</para>
-
-<para>To consume a service, an <literal>&lt;osgi:reference&gt;</literal> tag is used and the
-service may be passed into other Spring beans using Spring&rsquo;s dependency
-injection facilities.</para>
-
-<para>Spring DM automatically creates proxies for OSGi services so that the actual service
-object may come and go at runtime.
-If a service disappears, any proxies to the service will wait for the service to re-appear.
-This effect is known as <emphasis>damping</emphasis>.</para>
-
-<para>When a bundle is started, Spring DM builds the application contexts
-specified by the XML descriptions, creates proxies for the specified services, and publishes
-the specified services to the OSGi service registry.</para>
-
-<para>When a bundle is stopped, Spring DM retracts any services it published on behalf of the bundle
-and closes the bundle&rsquo;s application contexts.
-@project.name@ turns off damping of a service proxy while the proxy&rsquo;s application context
-is being closed.</para>
-
-<para>Spring DM was contributed to Eclipse as the <emphasis>Gemini Blueprint</emphasis> project.
-@project.name@ has Gemini Blueprint built-in.</para>
-
-<para>Gemini Blueprint supports both Spring DM and Blueprint programming models.
-Blueprint, known formally as the "OSGi Blueprint Container", provides some of the basic facilities of Spring DM,
-including all those just mentioned, but in an OSGi standard form.
-See <xref linkend="furtherreading"/> for the Blueprint specification.
-</para>
-
-</section>
-
-<!--========================================================================-->
-<section id="concepts.virgo">
-	
-<title>@project.name@ Concepts</title>
-<note>
-This section is not relevant for @nano.product.name@.
-</note>
-
-<!--========================================================================-->
-<section id="concepts.repositories">
-	
-<title>The Provisioning Repository</title>
-
-The @project.name@ provisioning repository contains artifacts and metadata indexed by the artifact type, name, and version. There are three kinds of repository: <emphasis>external</emphasis>, <emphasis>watched</emphasis>, and <emphasis>remote</emphasis>. Repositories are passive in the sense that changes to repository content do not cause artifacts to be deployed into @project.name@, refreshed, or undeployed.
-
-<section>
-
-<title>Artifact Types</title>
-
-In addition to the standard OSGi bundle, artifact types in @project.name@ include configuration (properties file), PAR, plan, and library.
-PARs, plans, and libraries are discussed in <xref linkend="concepts.grouping"/>. 
-
-</section>
-
-<section>
-
-<title>External Repositories</title>
-
-<para>
-	External repositories are created by scanning a directory which contains artifacts, possibly in nested directories. The repository configuration specifies a pattern which 
-	says which files should be treated as artifacts. After the repository is created, changes to the directory do not affect the repository content. 
-</para>
-<para>
-	@project.name@'s default repository configuration, in <literal>configuration/org.eclipse.virgo.repository.properties</literal>, specifies an external repository created from the 
-	<literal>repository/ext</literal> directory.
-</para>
-
-</section>
-
-<section>
-
-<title>Watched Repositories</title>
-
-<para>
-	Watched repositories are created by scanning a directory which contains artifacts but no nested directories. All files in the directory are treated as artifacts.
-	The directory is re-scanned periodically and the interval between re-scans is specified in the repository configuration.
-	The directory is also re-scanned when an artifact is deployed into @project.name@.
-	Changes detected by re-scanning are reflected in the repository content. Note that changing the content of a watched repository does not cause artifacts to be deployed 	
-	into @project.name@, refreshed, or undeployed. 
-</para>
-<para>
-	@project.name@'s default repository configuration specifies a watched repository based on the contents of the <literal>repository/usr</literal> directory. 
-</para>
-
-</section>
-
-<section>
-
-<title>Remote Repositories</title>
-
-<para>
-	A remote repository refers to a repository hosted by a @project.name@ instance sometimes known as a <emphasis>repository server</emphasis>.
-	The hosted repository is configured using the file <literal>configuration/org.eclipse.virgo.apps.repository.properties</literal> and may be either an external or a watched 	
-	repository.
-</para>
-<para>
-	The remote repository is accessed by a @project.name@ instance sometimes known as a <emphasis>repository client</emphasis>.
-	The repository client is normally a different instance of @project.name@ to the instance hosting the repository, but it can be the same instance (which is handy for 	
-	testing). The remote repository periodically downloads its index from the hosted repository. The period between downloads may be configured in the repository 	
-	configuration. The remote repository also caches artifacts which have secure hashes associated with them in the hosted repository. Only bundles currently have secure 	
-	hashes associated with them. The secure hash is used to determine when a cached artifact is stale and needs to be freshly downloaded.
-</para>
-
-</section>
-
-<section>
-
-<title>Repository Chains</title>
-
-<para>
-	The @project.name@ repository is configured as a <emphasis>chain</emphasis> of external, watched, and remote repositories.
-	The chain is a list which is searched in the configured order.
-	The effect of this search order is that an artifact with a given type, name, and version which appears in more than one repository in the chain is only accessed from the 	
-	first repository in the chain in which it appears. Abstractly, the repository chain behaves as a single repository, but its content may mutate in quite a different way to 
-	the content of an individual external, watched, or remote repository.
-</para>
-
-</section>
-
-<!--========================================================================-->
-<section id="concepts.grouping" xreflabel="Grouping Bundles">
-	
-<title>Grouping Bundles</title>
-
-<para>@project.name@ provides a way of grouping together a collection
-of OSGi bundles and other artifacts which comprise a single application.
-These artifacts are placed in a JAR file with extension <quote><literal>.par</literal></quote>. This is called a PAR file.</para>
-
-<para>All the bundles in a PAR file are resolved together and so mutual dependencies are permitted.</para>
-
-<para>At runtime a PAR file provides a <emphasis>scope</emphasis> in the sense that bundles
-inside the PAR file may depend on packages and services outside the PAR file,
-but bundles outside the PAR file may not depend on packages and services
-provided by the PAR file.</para>
-
-<para>@project.name@ also provides the plan artifact as another way of grouping bundles and other artifacts into an application.
-A <emphasis>plan</emphasis> is a file (in XML format) listing a collection of artifacts.
-The artifacts referred to by a plan reside in the @project.name@ provisioning repository.
-</para>
-
-<para>
-	In addition to PARs and plans, which are used for deploying groups of artifacts, @project.name@ provides libraries as a way of grouping together a collection
-	of bundles that	can then be imported into an application using the @project.name@-specific <literal>Import-Library</literal> manifes header.
-</para>
-
-</section>
-
-<!--========================================================================-->
-<section id="kernel.user.region">
-
-<title>Kernel and User Region</title>
-
-	<para>Conceptually, @tomcat.product.name.short@ can be divided into two separate subsystems, one of which actually encompases the other:</para>
-		<itemizedlist>
-		  <listitem>The <emphasis>kernel</emphasis>, which is the heart of @tomcat.product.name.short@.  It makes up most of @tomcat.product.name.short@, except for the part that supports Web applications.  In other words, the kernel provides full OSGi modular support for your applications, as long as they are not Web-based. 
-			<para>See <link linkend="kernel-overview">The @kernel.product.name@</link> for additional information.</para>
-		</listitem>
-		  <listitem>The <emphasis>user region</emphasis> is the subsystem that manages user applications. It deliberately isolates the kernel from both your applications and those of the @tomcat.product.name.short@ itself, such as the Admin Console, which protects the kernel from interference by applications. 
-			<para>See <link linkend="user-region-overview">The User Region</link> for additional information.</para>
-		  </listitem>
-		</itemizedlist>
-
-		<para>When you download and install @tomcat.product.name@ you get both the kernel and web server support (configured in the user region).  You can also <ulink url="http://www.eclipse.org/virgo/download/">download and use the kernel</ulink> on its own if you do not plan on deploying Web applications or using the
-		web-based Admin Console and you'll get the kernel and a minimal user region (with no web support).</para>
-		
-		<para>The following graphic shows how the kernel and user region make up @tomcat.product.name.short@:</para>
-		<imagedata fileref="images/kernel-user-region.png" width="885px" depth="805px" />
-
-	<section id="kernel-overview">
-		<title>The @kernel.product.name@</title>
-		<para>
-		The @kernel.product.name@ encapsulates almost all of @tomcat.product.name.short@ except for the deployment of Web applications.  In sum, the kernel provides the following @tomcat.product.name.short@ features:
-		</para>
-	<itemizedlist>
-		<listitem>
-			<para>
-			Deployment of non-Web artifacts, such as OSGi bundles, PARs, plans,
-			and configuration artifacts.
-			</para>
-		</listitem>
-		<listitem>
-			<para>
-			Local and hosted repositories
-			</para>
-		</listitem>
-		<listitem>
-			<para>
-			Scoping
-			</para>
-		</listitem>
-		<listitem>
-			<para>
-			Hot deployment
-			</para>
-		</listitem>
-		<listitem>
-			<para>
-			User region
-			</para>
-		</listitem>
-		<listitem>
-			<para>
-			Auto-provisioning
-			</para>
-		</listitem>
-		<listitem>
-			<para>
-			System and application tracing and dump support
-			</para>
-		</listitem>
-		<listitem>
-			<para>
-			Spring beans and Spring DM support
-			</para>
-		</listitem>
-	</itemizedlist>
-
-		<para>See <link linkend="configuring">Configuring @tomcat.product.name.short@</link> for details about configuring the kernel to better suit your environment. </para>
-	</section>
-
-	<section id="user-region-overview">
-		<title>The User Region</title>
-		<para>
-			The user region isolates the kernel from deployed applications,
-			including both your own user applications and the user-oriented
-			@tomcat.product.name.short@ applications such as the Admin Console. This means
-			that the kernel is mostly invisible to applications and to application
-			management. This is because most of the kernel bundles are not
-			installed in the user region (apart from a few needed for region
-			management). The necessary function to support the kernel runs in the
-			OSGi framework, but the user region applications cannot see it, except
-			for the services that are normally offered.
-		</para>
-	
-		<para>This isolation has many benefits. For example, it is not necessary for the kernel and user applications to use the same version of the Spring Framework. In fact the kernel installs only those parts of the Spring Framework that it needs.  If you update the kernel, it is far less likely that you will also need to upgrade or adjust the applications to accomodate a new version of the kernel. The kernel implementation is therefore much more stable and resilient and applications are much more likely to survive kernel upgrades between releases.  </para>
-		<para>When you install @tomcat.product.name.short@, the kernel creates a single user region.
-			The kernel and the user region are configured independently of each other; see <link linkend="configuring">Configuring @tomcat.product.name.short@</link> for details. 		
-		</para>
-
-		<para>Finally, the isolation provided by the user region together with scoped applications and plans solve common dependency problems that occur when using OSGi. </para>
-	</section>
-
-</section>
-
-</section>
-
-</section>
-
-<!--========================================================================-->
-<section id="concepts.p2">
-<title>p2 Concepts</title>
-<para>
-	At EclipseCon 2011 there was a great introductory presentation on p2. It gives a nice overview of the whole provisioning system.
-	You can find it recorded <ulink url="http://fosslc.org/drupal/content/gentle-introduction-p2">here(video).</ulink> 
-</para>
-<para>
-	<ulink url="http://bkapukaranov.wordpress.com/2011/07/12/rt-meets-p2/">This blog post</ulink> 
-	provides some background on why p2 was created as well as a brief overview of what p2 repositories 
-	are and how this relates to a runtime.
-</para>
-<para>
-	This <ulink url="http://www.slideshare.net/PascalRapicault/understanding-and-extending-p2-for-fun-and-profit">presentation(slides only)</ulink> 
-	sheds light on more advanced p2 features and turns our attention to its extension points. 
-</para>
-<para>
-	Finally, the <ulink url="http://wiki.eclipse.org/Equinox/p2">p2 wiki</ulink> 
-	also provides both getting started guides as well as information on more advanced features. 
-</para>
-</section>
-
-</chapter>
diff --git a/user-guide/src/configuring.xml b/user-guide/src/configuring.xml
deleted file mode 100644
index 802c5d3..0000000
--- a/user-guide/src/configuring.xml
+++ /dev/null
@@ -1,1840 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
-		"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
-<chapter id="configuring">
-    <title>Configuration</title>
-    <titleabbrev>Configuration</titleabbrev>
-
-	<para>You use configuration files in the <literal>$SERVER_HOME/configuration</literal> directory to configure @project.name@.  You can also configure the OSGi framework  using files the same <literal>$SERVER_HOME/configuration</literal> directory. This section divides the configuration of the server into the following high-level tasks:</para>
-
-	<itemizedlist> 
-		<listitem><para><link linkend="configuring-osgi-framework">Configuring the OSGi framework</link></para></listitem>
-		<listitem><para><link linkend="configuring-framework-extensions">Configuring framework extensions and fragments on the system bundle</link></para></listitem>
-		<listitem><para><link linkend="configuring-serviceability">Configuring serviceability</link></para></listitem>
-		<listitem><para><link linkend="configuring-provisioning-repository">Configuring the local provisioning repository</link></para></listitem>
-		<listitem><para><link linkend="configuring-hosted-repo">Configuring the hosted repository</link></para></listitem>
-		<listitem><para><link linkend="configuring-kernel">Configuring the kernel and User Region</link></para></listitem>
-		<listitem><para><link linkend="configuring-tomcat">Configuring the embedded Tomcat servlet container</link></para></listitem>
-		<listitem><para><link linkend="configuring-web">Configuring the web integration layer</link></para></listitem>
-		<listitem><para><link linkend="configuring-jetty">Configuring the embedded Jetty servlet container</link></para></listitem>
-	</itemizedlist> 
-	<note>
-		<title>Why is there both a config and a configuration directory?</title>
-		<para>The <emphasis>config</emphasis> directory has always contained @project.name@ configuration files. When @nano.product.name@ and its support for p2 provisioning was introduced in @project.name@ 3.5.0, a <emphasis>configuration</emphasis> directory replaced the old <emphasis>config</emphasis> one. Now all @project.name@ configurations are assembled in that directory providing a single point of configuration. The directory name <emphasis>configuration</emphasis> in the installation's root is used by default in p2 to configure the OSGi framework during provisioning.</para>
-		<para>This chapter makes it clear which configuration goes in each directory.</para>
-	</note>
-	<note>Sections 4-6 and 8-9 does not apply for @nano.product.name@.</note>
-	
-	<section id="configuring-osgi-framework" >
-	<title>Configuring the OSGi Framework</title>
-	
-		<para>
-			This section provides information about configuring the OSGi framework by updating the following files in the <literal>$SERVER_HOME/configuration</literal> directory:
-		</para>
-
-		<table id="configuring-osgi-framework-table" colsep="1" frame="all" rowsep="1">
-	    	<title>OSGi Framework Configuration Files </title>
-			<tgroup cols="3">
-		   		<thead>
-					<row>
-						<entry>Property File</entry>
-						<entry>Description</entry>
-						<entry>Location</entry>
-					</row>
-		  		</thead>
-		  		<tbody>
-					<row>
-						<entry><literal>config.ini</literal></entry>
-						<entry>Configures <link linkend="configuring-framework-properties">OSGi framework properties</link>.</entry>
-						<entry>$SERVER_HOME/configuration</entry>
-					</row>
-					<row>
-						<entry><literal>bundles.info</literal></entry>
-						<entry>Configures <link linkend="configuring-framework-bundles">OSGi framework bundles</link>.</entry>
-						<entry>$SERVER_HOME/configuration/org.eclipse.equinox.simpleconfigurator</entry>
-					</row>
-					<row>
-						<entry><literal>java6-server.profile</literal></entry>
-						<entry>Configures the <link linkend="configuring-framework-profile">OSGi framework profile</link>.</entry>
-						<entry>$SERVER_HOME/configuration</entry>
-					</row>
-		  		</tbody>
-			</tgroup>
-	  	</table>
-		
-		<section id="configuring-framework-properties">
-		<title>Configuring OSGi Framework Properties</title>
-	    
-			<para>
-				You specify the framework properties in the <literal>$SERVER_HOME/configuration/config.ini</literal> file. The
-				properties most relevant to users are described in the following table.
-			</para>
-			<para>
-				<emphasis role="bold">WARNING:</emphasis> We strongly recommend that you update only the
-				properties below; updating other properties could cause @project.name@
-				to fail.
-			</para>
-		
-			<table id="configuring-framework-properties-table" colsep="1" frame="all" rowsep="1">
-		    <title>Framework Properties</title>
-				<tgroup cols="2">
-			   		<thead>
-						<row>
-							<entry>Property</entry>
-							<entry>Description</entry>
-						</row>
-			  		</thead>
-			  		<tbody>
-						<row>
-							<entry><literal>org.eclipse.virgo.kernel.startup.wait.limit</literal></entry>
-							<entry>
-								Specifies the amount of time, in seconds, after which various operations time out out while trying to start the kernel.
-								The default value is 180.
-							</entry>
-						</row>
-						<row>
-							<entry><literal>org.eclipse.virgo.suppress.heap.dumps</literal></entry>
-							<entry>
-								Set to 'false' by default this property will prevent heap dumps being contributed to dumps taken during a
-								First Failure Data Capture (FFDC) event. When the heap dumps are produced they will be located along with
-								the other dump artifacts in the <literal>$SERVER_HOME/serviceability/dump/</literal> folder.
-							</entry>
-						</row>
-						<row>
-							<entry><literal>osgi.java.profile</literal></entry>
-							<entry>
-								Specifies the profile to use using a <literal>file:</literal> URI with default value
-								<literal>file:configuration/java6-server.profile</literal>.
-							</entry>
-						</row>
-						<row>
-							<entry><literal>osgi.bundlefile.limit</literal></entry>
-							<entry>
-								Specifies a limit on the number of jar files the framework will keep open. 
-								The minimum value allowed is 10. Any value less than 10 will disable the bundle file limit, making the the number of jar files the framework keeps open unlimited. 
-								By default the value is 100.
-								Increase the default value if you have many jar files in the bundle class path, expect a lot of file system operations etc.
-							</entry>
-						</row>
-			  		</tbody>
-				</tgroup>
-		  	</table>
-		</section>
-		
-		<section id="configuring-framework-bundles">
-		<title>Configuring OSGi Framework Bundles</title>
-	    
-			<para>
-				You specify the framework bundles in the <literal>$SERVER_HOME/configuration/org.eclipse.equinox.simpleconfigurator/bundles.info</literal> file. The syntax
-				that is accepted for listing bundles there is:
-				<screen>&lt;bsn&gt;,&lt;version&gt;,&lt;jar-location&gt;,&lt;start-level&gt;,&lt;toStart?&gt;
-bsn - the bundle's symbolic name string
-version - the bundle's version string
-jar-location - relative or absolute path to the jar file
-start-level - a digit indicating the bundle's start level
-toStart? - true or false value indicating whether a bundle should be started or not</screen>
-			<para>Here's an example:</para>
-			<screen>org.eclipse.virgo.util.osgi,3.1.0.BUILD-20111031165127,plugins/org.eclipse.virgo.util.osgi_3.1.0.BUILD-20111031165127.jar,4,true</screen>
-			</para>
-			<para>
-				<emphasis role="bold">WARNING:</emphasis> We strongly recommend that you don't remove bundles already present in your bundles.info file as that may break your server. Add bundles here only if absolutely necessary.
-			</para>
-		</section>
-
-		<section id="configuring-framework-profile">
-		<title>Configuring OSGi Framework Profile</title>
-	    
-			<para>
-				You specify the framework profile in the <literal>$SERVER_HOME/configuration/java6-server.profile</literal> file. The
-				properties most relevant to users are described in the following table.
-			</para>
-			<para>
-				<emphasis role="bold">WARNING:</emphasis> We advise you not to change the framework profile unless you are sure you know exactly what
-				you are doing; updating the profile could cause @project.name@ to fail.
-			</para>
-		
-			<table id="configuring-framework-profile-table" colsep="1" frame="all" rowsep="1">
-		    <title>Framework Profile Properties</title>
-				<tgroup cols="2">
-			   		<thead>
-						<row>
-							<entry>Property</entry>
-							<entry>Description</entry>
-						</row>
-			  		</thead>
-			  		<tbody>
-						<row>
-							<entry><literal>org.osgi.framework.bootdelegation</literal></entry>
-							<entry>
-								<para>
-									This property specifies the packages which are loaded by delegation to the application class loader.
-									Bundles can load classes belonging to these packages without importing the packages.
-									The <literal>.*</literal> wildcard matches any package suffix. <literal>java.*</literal> is always
-									boot delegated and must not be specified in this property.
-								</para>
-								<para>
-									A common reason for adding packages to this property is to run @project.name@ under a performance profiler.
-								</para>
-							</entry>
-						</row>
-						<row>
-							<entry><literal>org.osgi.framework.system.packages</literal></entry>
-							<entry>
-								<para>
-									This property specifies the packages which are exported by the system bundle.
-								</para>
-								<para>
-									Although the system bundle is typically imported into the User Region, any additional packages will not be
-									visible in the User Region unless you also import them using the <literal>packagedImports</literal> property.
-									See <link linkend="configuring-user-region">Configuring the User Region</link> for instructions.
-								</para>
-								<para>
-									It is very occasionally necessary to extend the set, for example when configuring email logging appenders since the
-									implementation of <literal>javax.mail</literal>	is intimately related to the implementation of
-									<literal>javax.activation</literal>.
-								</para>
-								<para>
-									To make the corresponding classes available for loading, the relevant JAR file(s) should be placed in
-									<literal>$SERVER_HOME/lib</literal> so that they will be added to the application class path.
-								</para>
-							</entry>
-						</row>
-			  		</tbody>
-				</tgroup>
-		  	</table>
-		</section>
-	</section>
-	
-	<section id="configuring-framework-extensions" >
-	<title>Configuring Framework Extensions and Fragments on the System Bundle</title>
-	
-		<para>
-			This section provides information about configuring framework extensions and fragments on the system bundle. Deployment of such bundles is not allowed in 		
-			@project.name@. This is because by refreshing or uninstalling them the system.bundle is also refreshed, which causes @project.name@ to crash.
-		</para>
-		<para>
-			<emphasis role="bold">NOTE:</emphasis> This only applies for fragments on the system bundle. All other fragment bundles have no deployment restrictions.
-		</para>
-		<para>
-			Generally it's best to avoid usage of such fragment bundles as they are a common OSGi framework issue and often require restarting the framework.
-			However sometimes there are no other options and one has to use framework extensions or fragments on the system bundle.
-		</para>
-		<para>
-			You can configure framework extensions and system bundle fragments as follows:
-		</para>
-		<para>
-			<emphasis role="bold">1.</emphasis> Place your fragment bundle in the <literal>/plugins</literal> directory of your @project.name@ installation.
-			<para>
-				Lets say we have bundle with
-			</para>
-			<programlisting>
-symbolic name: <emphasis>testFragment</emphasis>, version: <emphasis>1.0.0</emphasis> and filename: <emphasis>testFragmentBinary_1.0.0.jar</emphasis>
-			</programlisting>
-		</para>
-		<para>
-			<emphasis role="bold">2.</emphasis> Configure the <literal>bundles.info</literal> file in <literal>/configuration/org.eclipse.equinox.simpleconfigurator</literal> to include the 
-			just copied fragment or framework extension bundle.
-			<para>
-				Add a line at the end of the <literal>bundles.info</literal> file similar to this one:		
-			</para>
-			<programlisting>
-<emphasis>testFragment,1.0.0,plugins/testFragmentBinary_1.0.0.jar,4,false</emphasis>
-			</programlisting>
-		</para>
-		<para>
-			<emphasis role="bold">3.</emphasis> Configure the <literal>org.eclipse.virgo.kernel.userregion.properties</literal> file in <literal>/configuration</literal> folder to import the fragment bundle or framework extension in the User Region.
-			<para>
-				Add to the <literal>bundleImports</literal> property a new line describing the fragment bundle using its symbolic name and version.
-			</para>
-			<programlisting>
-bundleImports = org.eclipse.osgi;bundle-version="0",<emphasis role="bold">testFragment;bundle-version="0"</emphasis>
-			</programlisting>
-		</para>
-	</section>
-	
-	<section id="configuring-serviceability">
-      <title>Configuring Serviceability and Diagnostics</title>
-
-	<para>The serviceability features of @project.name@ allow you to gather and view data and information that you can then use to diagnose problems and failures.  Serviceability data includes:</para>
-	<itemizedlist>
-		<listitem><para>
-		Service dumps: Contain a snapshot of all the important state from the running @project.name@ instance when an internal failure or thread deadlock is detected.
-		</para>
-  	             <para>You configure service dumps for @project.name@ using the <link linkend="configuring-serviceability-medic">org.eclipse.virgo.medic.properties</link> file in the <literal>$SERVER_HOME/configuration</literal> directory.  This file also includes some additional logging configuration.</para>
-		</listitem>
-		<listitem><para>
-		Event logs and server/application (trace) logging: Logging support in @project.name@ is based on <ulink url="http://logback.qos.ch/">Logback</ulink>.  This means that you have complete control over the format of log output and have the complete range of Logback's appenders available for your use.
-		</para>
-  	             <para>You configure logging for @project.name@ using the <link linkend="configuring-serviceability-logback">serviceability.xml</link> file in the <literal>$SERVER_HOME/configuration</literal> directory.  This file is essentially the Logback <literal>logback.xml</literal> (or <literal>logback-test.xml</literal>) configuration file but renamed for @project.name@. </para>
-		</listitem>
-	</itemizedlist>
-
-	<para>For additional conceptual information about the serviceability subsystem, see <xref linkend="serviceability" />. </para>
-
-	<section id="configuring-serviceability-medic">
-	  <title>The org.eclipse.virgo.medic.properties File</title>
-
-	  <para>The <literal>$SERVER_HOME/configuration/org.eclipse.virgo.medic.properties</literal> file configures @project.name@ service dumps and whether you want to capture <literal>System.out</literal> and <literal>System.err</literal> output to your application's trace file. </para>
-  	  <para>The following table describes the properties you can include in the <literal>$SERVER_HOME/configuration/org.eclipse.virgo.medic.properties</literal> file. This file configures serviceability properties that @project.name@ includes in addition to those supplied by the Logback, configured in the <literal>serviceability.xml</literal> file.</para>
-
-          <table id="medic-properties-table" colsep="1" frame="all" rowsep="1">
-            <title>Serviceability Properties</title>
-	    <tgroup cols="2">
-	      <thead>
-	        <row>
-	  	<entry>Property</entry>
-	  	<entry>Description</entry>
-	        </row>
-	      </thead>
-	      <tbody>
-  
-  	        <row>
-  	  	  <entry><literal>dump.root.directory</literal></entry>
-  	  	  <entry>Specifies the directory to which @project.name@ writes the service dumps.  The directory name is relative to <literal>$SERVER_HOME</literal>.  </entry>
-	        </row>
-
-	        <row>
-		  <entry><literal>log.wrapSysOut</literal></entry>
-		  <entry>Specifies whether you want to capture <literal>System.out</literal> output from your applications to the application trace file.  The output is logged by @project.name@'s root logger, which captures <literal>INFO</literal> level and above. 
-			<para>Valid values for this property are <literal>true</literal> to capture <literal>System.out</literal> output, or <literal>false</literal> to disable the capture.</para>
-			<para>For more information, see <link linkend="sysout-and-syserr">System.out and System.err</link>.</para>
-		  </entry>
-	        </row>
-
-	        <row>
-		  <entry><literal>log.wrapSysErr</literal></entry>
-		  <entry>Specifies whether you want to capture <literal>System.err</literal> output from your applications to the application trace file.  The output is logged by @project.name@'s root logger, which captures <literal>INFO</literal> level and above. 
-			<para>Valid values for this property are <literal>true</literal> to capture <literal>System.err</literal> output, or <literal>false</literal> to disable the capture.</para>
-			<para>For more information, see <link linkend="sysout-and-syserr">System.out and System.err</link>.</para>
-		  </entry>
-	        </row>
-
-              <row>
-                  <entry><literal>log.jul.consoleHandler</literal></entry>
-                  <entry>Specifies whether you want to use the <literal>ConsoleHandler</literal> of Java Util Logging. The default JVM configuration uses the handler to write logs to <literal>System.err</literal>.
-                      <para>Valid values for this property are <literal>true</literal> to enable <literal>ConsoleHandler</literal> output, or <literal>false</literal> to disable it. The default value is <literal>false</literal>.</para>
-                      <para>For more information, see <ulink url="http://download.oracle.com/javase/6/docs/technotes/guides/logging/overview.html">Java Logging Overview</ulink>.</para>
-                  </entry>
-              </row>
-
-          </tbody>
-	    </tgroup>
-	  </table>
-
-	</section>
-	<section id="configuring-serviceability-logback">
-	  <title>The serviceability.xml File</title>
-		<para>Logging support in @project.name@ is based on <ulink url="http://logback.qos.ch/">Logback</ulink>, which is a successor of the log4j project. The Logback logging framework is faster, more reliable, and easier to use than log4j and certain other logging systems.</para>
-  	        <para>You configure logging for @project.name@ using the <literal>$SERVER_HOME/configuration/serviceability.xml</literal> file.  This file is the standard Logback <literal>logback.xml</literal> or <literal>logback-test.xml</literal> configuration file, but renamed for @project.name@. </para>
-		<para>The following listing shows the default <literal>serviceability.xml</literal> file in a freshly-installed @project.name@; see the text after the listing for a brief overview of the file:</para>
-		<programlisting language="xml"><![CDATA[<configuration>
-
-	<jmxConfigurator />
-
-	<contextListener class="ch.qos.logback.classic.jul.LevelChangePropagator"/>
-
-	<appender name="SIFTED_LOG_FILE" class="ch.qos.logback.classic.sift.SiftingAppender">
-		<discriminator>
-			<Key>applicationName</Key>
-			<DefaultValue>virgo-server</DefaultValue>
-		</discriminator>
-		<sift>
-			<appender name="${applicationName}_LOG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
-				<file>serviceability/logs/${applicationName}/log.log</file>
-				<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
-					<FileNamePattern>serviceability/logs/${applicationName}/log_%i.log</FileNamePattern>
-					<MinIndex>1</MinIndex>
-					<MaxIndex>4</MaxIndex>
-				</rollingPolicy>
-				<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
-					<MaxFileSize>10MB</MaxFileSize>
-				</triggeringPolicy>
-				<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
-					<Pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] %-5level %-28.28thread %-64.64logger{64} %X{medic.eventCode} %msg %ex%n</Pattern>
-				</encoder>
-			</appender>
-		</sift>
-	</appender>
-
-	<appender name="LOG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
-		<file>serviceability/logs/log.log</file>
-		<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
-			<FileNamePattern>serviceability/logs/log_%i.log</FileNamePattern>
-			<MinIndex>1</MinIndex>
-			<MaxIndex>4</MaxIndex>
-		</rollingPolicy>
-		<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
-			<MaxFileSize>10MB</MaxFileSize>
-		</triggeringPolicy>
-		<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
-			<Pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] %-5level %-28.28thread %-64.64logger{64} %X{medic.eventCode} %msg %ex%n</Pattern>
-		</encoder>
-	</appender>
-
-	<appender name="EVENT_LOG_STDOUT" class="org.eclipse.virgo.medic.log.logback.ReroutingAwareConsoleAppender">
-		<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
-			<Pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] %-28.28thread &lt;%X{medic.eventCode}&gt; %msg %ex%n</Pattern>
-		</encoder>
-	</appender>
-
-	<appender name="EVENT_LOG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
-		<file>serviceability/eventlogs/eventlog.log</file>
-		<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
-			<FileNamePattern>serviceability/eventlogs/eventlog_%i.log</FileNamePattern>
-			<MinIndex>1</MinIndex>
-			<MaxIndex>4</MaxIndex>
-		</rollingPolicy>
-		<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
-			<MaxFileSize>10MB</MaxFileSize>
-		</triggeringPolicy>
-		<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
-			<Pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] %-28.28thread &lt;%X{medic.eventCode}&gt; %msg %ex%n</Pattern>
-		</encoder>
-	</appender>
-
-	<logger level="INFO" additivity="false" name="org.eclipse.virgo.medic.eventlog.localized">
-		<appender-ref ref="EVENT_LOG_STDOUT" />
-		<appender-ref ref="EVENT_LOG_FILE" />
-	</logger>
-
-	<logger level="INFO" additivity="false" name="org.eclipse.virgo.medic.eventlog.default">
-		<appender-ref ref="SIFTED_LOG_FILE" />
-		<appender-ref ref="LOG_FILE" />
-	</logger>
-
-	<root level="INFO">
-		<appender-ref ref="SIFTED_LOG_FILE" />
-		<appender-ref ref="LOG_FILE" />
-	</root>
-
-</configuration>]]></programlisting>
-
-	<para>Logback allows @project.name@ to use logger, appender, and encoder (layout) objects to log messages according to message type and level and to format these messages and define where they are written.  The default <literal>serviceability.xml</literal> file shown above includes four appenders and three loggers (two user and one root.)</para>
-
-	<para>The main information to get from this file is that @project.name@ writes log messages to four different locations that map to the four appenders:</para>
-	<itemizedlist>
-		<listitem><para>The <literal>jmxConfigurator</literal> provides a possibility to configure logback via JMX. For more information see <ulink url="http://logback.qos.ch/manual/jmxConfig.html">JMX Configurator</ulink> documentation.</para></listitem>
-		<listitem><para>The <literal>contextListener</literal> propagates the changes made to the levels of logback loggers to Java Util Logging (JUL). For more information see <ulink url="http://logback.qos.ch/manual/configuration.html#LevelChangePropagator">LevelChangePropagator</ulink> documentation.</para> </listitem>
-		<listitem><para>The <literal>SIFTED_LOG_FILE</literal> appender logs both global and application-specific messages to the <literal>$SERVER_HOME/serviceability/logs/</literal><emphasis><literal>applicationName</literal></emphasis><literal>/log.log</literal> file, where <emphasis><literal>applicationName</literal></emphasis> refers to the name of the application.   The log messages for @project.name@ itself are logged to the <literal>$SERVER_HOME/serviceability/logs/virgo-server/log.log</literal> file. Because this appender creates different log files for each application, it is called a <emphasis>sifting appender</emphasis>.   </para>
-		<para>
-			The default behaviour of these trace files is that, once <literal>log.log</literal> reaches a 10Mb limit, it rolls into a series of files named
-			<literal>log_</literal><emphasis>i</emphasis><literal>.log</literal> where <emphasis>i</emphasis> ranges from 1 to 4, and logging continues in
-			a new <literal>log.log</literal> file. This is called its <emphasis>rolling policy</emphasis>.
-		</para>
-		<para>The <literal>&lt;Pattern&gt;</literal> element defines the format of each log message;  messages include the timestamp, the thread that generated the log message, the context-specific event code, and a stack trace of the exception, if any.  For example:</para>
-		 <para><literal>[2008-05-15 09:09:46.940] server-dm-2 org.apache.coyote.http11.Http11Protocol I Initializing Coyote HTTP/1.1 on http-48080</literal></para>
-		</listitem>
-		<listitem><para>The <literal>LOG_FILE</literal> appender is very similar to the first one, but it logs <emphasis>all</emphasis> log messages to the <literal>$SERVER_HOME/serviceability/log/log.log</literal> file rather than sifting application-specific messages to their own log file.  The rolling policy and message format for this appender is similar to that of the <literal>SIFTED_LOG_FILE</literal> appender.</para></listitem>
-		<listitem><para>The <literal>EVENT_LOG_STDOUT</literal> appender does not log messages to a file, but rather to the console window from which you started @project.name@. For example:</para>
-		 <para><literal>[2010-10-25 16:20:49.367] Thread-3   &lt;WE0000I&gt; Starting web bundle 'org.eclipse.virgo.apps.admin.web' version '2.1.0.RELEASE' with context path '/admin'.</literal></para>
-		</listitem>
-
-		<listitem><para>The <literal>EVENT_LOG_FILE</literal> appender logs only important events to the <literal>$SERVER_HOME/serviceability/eventlogs/eventlog.log</literal> file, and thus the volume of information is much lower than with the first two appenders. The rolling policy for the event log is the same as with the first two appenders, but the format of the messages is similar to that of the <literal>EVENT_LOG_STDOUT</literal> appender. </para> </listitem>
-	</itemizedlist>
-
-	<para>The loggers and root logger specify the level of log that is written for each of the referenced appenders.</para>
-
-	<para>Typically, the default logging configuration as specified by the <literal>serviceability.xml</literal> file is adequate for all @project.name@ environments.  However, if you want to customize logging further, you can edit this file as well as the <literal>org.eclipse.virgo.medic.properties</literal>.  See the <ulink url="http://logback.qos.ch/manual/index.html">logback documentation</ulink> for detailed information about the architecture and the configuration of Logback.</para>
-	</section>
-
-    </section>
-
-	<section id="configuring-provisioning-repository">
-		<title>Configuring the Local Provisioning Repository</title>
-		<para>
-		    You configure the locations that @project.name@ includes in its provisioning repository
-		    by editing the <literal>org.eclipse.virgo.repository.properties</literal> file in the <literal>$SERVER_HOME/configuration</literal> directory.
-		    </para>
-		<para>When you specify a property in the file, use the format <literal>repository-name.property=value</literal>, where:
-		<itemizedlist>
-		 	<listitem><para><literal>repository-name</literal> refers to the name of the local repository.</para></listitem>
-    		<listitem><para><literal>property</literal> refers to the name of a particular property.</para></listitem>
-    		<listitem><para><literal>value</literal> refers to the value of the property.</para></listitem>
-		</itemizedlist>
-		</para>
-
-		<para>For example, <literal>ext.type=external</literal> specifies that the <literal>type</literal> property of the repository
-		with name <literal>ext</literal> is <literal>external</literal>.
-        </para>
-		<para>
-			The <literal>chain</literal> property specifies the order in which @project.name@ searches the individual repositories
-			when it looks for dependencies.
-			The <literal>chain</literal> property uses the names of the individual repositories as specified in the individual repository properties;
-			for example, in the property <literal>ext.type=external</literal>, the name of the repository is <literal>ext</literal>.
-		</para>
-		<para>
-			The default repository configuration for a newly installed @project.name@ instance is as follows:
-			<programlisting><![CDATA[ext.type=external
-ext.searchPattern=repository/ext/{artifact}
-
-usr.type=watched
-usr.watchDirectory=repository/usr
-
-chain=ext,usr]]></programlisting>
-		</para>
-
-        
-        <para>
-		The default configuration shown above has two searchpaths corresponding to the two default sub-directories of the <literal>$SERVER_HOME/repository</literal> directory created when you first install @project.name@: <literal>ext</literal> and <literal>usr</literal>. @project.name@ searches each of these individual repositories when locating entries for inclusion in the repository.  </para>
-	 <para>
-	        The <literal>chain</literal> property shows the order in which @project.name@ searches the individual repositories: first <literal>ext</literal> and then <literal>usr</literal>. 
-	</para>
-	<para>
-		The following table lists all the available properties that you can use to configure an individual repository.
-		Individual repositories as well as the repository search chain  are configured in the file
-		<literal>$SERVER_HOME/configuration/org.eclipse.virgo.repository.properties</literal>.
-		<table id="repository-options-table" colsep="1" frame="all" rowsep="1">
-		<title>Repository Properties</title>
-		  <tgroup cols="3">
- 		  	<thead>
-		      <row>
-				<entry>
-					Property
-				</entry>
-				<entry>
-					Description
-				</entry>
-				<entry>
-					Default Value
-				</entry>
-		      </row>
-		    </thead>
-		    <tbody>
-		      <row>
-				<entry>
-					<emphasis><literal>repository-name</literal></emphasis><literal>.type</literal>
-				</entry>
-				<entry> 
-                	<para>
-                    	Specifies the type of path.  You can set this property to one of the following three valid values:
-			    		<itemizedlist>
-							<listitem>
-								<para>
-									<literal>external</literal>: Specifies that this path points to a number of directories that satisfy a given search pattern 
-									and are local to the current @project.name@ instance. 
-									Use the <literal>searchPattern</literal> property to specify the directory search pattern.
-								</para>
-							</listitem>
-							<listitem>
-								<para>
-									<literal>watched</literal>: Specifies that this path points to a single directory, local to the current @project.name@ instance.  
-									@project.name@ regularly scans watched repositories so it automatically picks up any changes to the artifacts in the directory at runtime.
-									@project.name@ also scans its local watched repositories when deploying any artifact. 
-									Use the <literal>watchDirectory</literal> property to specify the watched directory 
-									and the <literal>watchInterval</literal> property to specify how often @project.name@ checks the directory.
-								</para>
-							</listitem>
-							<listitem>
-								<para>
-									<literal>remote</literal>: Specifies that the path points to a remotely-hosted repository, 
-									hosted by a remote instance of @tomcat.product.name@.  
-									Use the <literal>uri</literal> property to specify the full URI of the remote repository.  
-									You can also specify the optional <literal>indexRefreshInterval</literal> property. 
-								</para>
-							</listitem>
-			    		</itemizedlist>
-              		</para> 
-
-			  		<para>
-						See <link linkend="configuring-repository-watched-versus-external">Watched or External Repository?</link> 
-			  			for additional information about when to configure watched or external repositories for your particular environment.
-			  		</para>
-				</entry>
-				<entry>
-					<emphasis>no default</emphasis>
-				</entry>
-		      </row>
-		      <row>
-				<entry>
-					<emphasis><literal>repository-name</literal></emphasis><literal>.searchPattern</literal>
-				</entry>
-				<entry>
-					<para>
-						Specifies the pattern that an external repository uses when deciding which local directories it should search 
-						when identifying artifacts.  Use this property together with <emphasis><literal>repository-name</literal></emphasis><literal>.type=external</literal>. 
-						See <link linkend="configuring-provisioning-repository-search-paths" >Search Paths: Additional Information</link> 
-						for detailed information about specifying a search pattern.  
-					</para>
-				</entry>
-				<entry>
-					<emphasis>no default</emphasis>
-				</entry>
-		      </row>
-		      <row>
-				<entry>
-					<emphasis><literal>repository-name</literal></emphasis><literal>.watchDirectory</literal>
-				</entry>
-				<entry>
-					<para>
-						Specifies the single directory of a watched repository. 
-						You can specify either an absolute or relative pathname for the directory.  
-						If you specify a relative pathname, it is relative  to the root of the @project.name@ installation (<literal>$SERVER_HOME</literal>).  
-						Use this property together with <emphasis><literal>repository-name</literal></emphasis><literal>.type=watched</literal>.
-					</para>
-				</entry>
-				<entry>
-					<emphasis>no default</emphasis>
-				</entry>
-		      </row>
-		      <row>
-				<entry>
-					<emphasis><literal>repository-name</literal></emphasis><literal>.watchInterval</literal>
-				</entry>
-				<entry>
-					<para>
-						Specifies the interval in seconds between checks of a watched directory by a watched repository.  
-						Use this property together with <emphasis><literal>repository-name</literal></emphasis><literal>.type=watched</literal>. 
-					</para>
-				</entry>
-				<entry>
-					<literal>5</literal>
-				</entry>
-		      </row>
-		      <row>
-				<entry>
-					<emphasis><literal>repository-name</literal></emphasis><literal>.uri</literal>
-				</entry>
-				<entry>
-					<para>
-						Specifies the URI of the hosted repository to which a remote repository connects.  
-						The value of this property takes the following format:
-					</para>
-					<para>						<literal>http://</literal><emphasis><literal>host</literal></emphasis><literal>:</literal><emphasis><literal>port</literal></emphasis><literal>/org.eclipse.virgo.apps.repository/</literal><emphasis><literal>remote-repository-name</literal></emphasis>
-					</para>
-                    <para>
-						where:
-						<itemizedlist>
-							<listitem>
-								<para>
-									<emphasis><literal>host</literal></emphasis> refers to the computer on which the remote @tomcat.product.name.short@
-									instance hosts the remote repository.
-								</para>
-							</listitem>
-							<listitem>
-								<para>
-									<emphasis><literal>port</literal></emphasis> refers to a Tomcat listener port of the remote @tomcat.product.name.short@
-									instance which hosts the remote repository.
-								</para>
-							</listitem>
-							<listitem>
-								<para>
-									<emphasis><literal>remote-repository-name</literal></emphasis> refers to the name of the remote repository, 
-									as specified in the <literal>org.eclipse.virgo.apps.repository.properties</literal> file of the remote @tomcat.product.name.short@ instance.
-								</para>
-							</listitem>
-						</itemizedlist>
-               		</para>
-                    <para>
-						Use this property together with <emphasis><literal>repository-name</literal></emphasis><literal>.type=remote</literal>.
-                    </para>
-				</entry>
-				<entry>
-					<emphasis>no default</emphasis>
-				</entry>
-		      </row>
-		      <row>
-				<entry>
-					<emphasis><literal>repository-name</literal></emphasis><literal>.indexRefreshInterval</literal>
-				</entry>
-				<entry>
-					<para>
-						Specifies the interval in seconds between checks by a remote repository that 
-						its local copy of the hosted repository index is up-to-date 
-						(a remote repository acts as a proxy for a hosted repository and thus it holds a local copy of the hosted repository&rsquo;s index). 
-					</para> 
-					<para>
-						Use this property together with <emphasis><literal>repository-name</literal></emphasis><literal>.type=remote</literal>.
-					</para>
-				</entry>
-				<entry>
-					<literal>5</literal>
-				</entry>
-		      </row>
-		    </tbody>
-		  </tgroup>
-		</table>
-	</para>
-	<section id="configuring-repository-watched-versus-external">
-		<title>Should I Configure a Watched or External Repository?</title>
-		<para>The main difference between a watched and an external repository is that @project.name@ regularly scans watched directories 
-		and automatically picks up any changed artifacts, 
-		while @project.name@ scans external directories only at startup, and then only if there is no cached index available.  
-		This means that @project.name@ always performs a scan of an external repository when you start the server 
-		with the <literal>-clean</literal> (as this deletes the index) and only scans during a normal startup if the index isn&rsquo;t there because, 
-		for example, this is the first time you start the server. 
-		</para>
-		<para>There is a performance cost associated with using a watched repository due to @project.name@ using resources 
-		to scan the directory at the configured interval.  
-		The cost is small if the watched repository contains just a few artifacts; however, 
-		the performance cost increases as the number of artifacts increases.
-		Note that @project.name@ re-scans its local watched repositories when deploying any artifact, so the scanning interval
-		can be configured to be relatively long.
-		</para>
-		<para> For this reason, we recommend that you put most of your dependencies in external repositories, 
-		even when in development mode. 
-		If you make any changes to the artifacts in the external repositories, 
-		remember to restart @project.name@ with the <literal>-clean</literal> option so that the server picks up any changes.  
-		Use watched directories for artifacts that you are prototyping, actively updating, or when adding new dependencies 
-		so that @project.name@ quickly and easily picks them up.  
-		To increase performance even during development, however, you can use an external repository for most of your dependencies, 
-		in particular the ones that are fairly static. 
-		</para>
-
-		<para>In production environments, where dependencies should not change, 
-		we recommend that you use <emphasis>only</emphasis> external repositories.
-		</para>
-	</section>
-
-        <section id="configuring-provisioning-repository-search-paths">
-            <title>Search Paths: Additional Information</title>
-            <para>
-	            The <emphasis><literal>repository-name</literal></emphasis><literal>.searchPattern</literal> and 
-	            <emphasis><literal>repository-name</literal></emphasis><literal>.watchDirectory</literal> properties specify search paths 
-	            for external and watched repositories, respectively, 
-	            that define a physical location that @project.name@ searches when looking for a library or bundle dependency. 
-	            If a search path is relative, its location is relative to the root of the installation, 
-	            in other words, the <literal>$SERVER_HOME</literal> directory.
-   	        </para>
-            <section id="configuring-provisioning-repository-search-paths-wildcards">
-	            <title>Using Wildcards</title>
-            	<para>
-		            Search paths specified with the <emphasis><literal>repository-name</literal></emphasis><literal>.searchPattern</literal> property 
-		            provide support for wildcards. 
-		            In the entries above, the path segments surrounded by curly braces, 
-		            for example <literal>{bundle}</literal> and <literal>{library}</literal>, 
-		            are wildcards entries for a directory with any name. 
-		            Allowing wildcards to be named in this way is intended to improve the readability of search path configuration.
-		        </para>
-		        <para>
-			        In addition to supporting the above-described form of wildcards, @project.name@ also supports Ant-style paths, 
-			        that is <literal>*</literal> and <literal>**</literal> can be used to represent any directory and 
-			        any series of directories, respectively. 
-			        For example, <literal>repository/usr/{bundle}</literal> and <literal>repository/usr/*</literal> 
-			        are equivalent.
-			    </para>
-			    <para>
-				    A common usage of the <literal>**</literal> wildcard is to allow dependencies stored in a directory structure of varying depth, 
-				    such as a local Maven repository, to be provisioned by the @project.name@.
-				</para>
-			</section>
-		</section>
-        <section id="configuring-provisioning-repository-using-system-properties">
-			<title>Using System Properties</title>
-			<para>
-				You can use system properties when specifying the values of the <emphasis><literal>repository-name</literal></emphasis><literal>.searchPattern</literal>, 
-				<emphasis><literal>repository-name</literal></emphasis><literal>.watchDirectory</literal>,
-				<emphasis><literal>repository-name</literal></emphasis><literal>.watchInterval</literal>,
-				<emphasis><literal>repository-name</literal></emphasis><literal>.uri</literal>, 
-				and <emphasis><literal>repository-name</literal></emphasis><literal>.indexRefreshInterval</literal>
-				properties. 
-				You reference system properties as <literal>${system.property.name}</literal>; 
-				for example, a search path of <literal>${user.home}/repository/bundles</literal> references the
-				<literal>repository/bundles</literal> directory in the user&rsquo;s home directory.
-			</para>
-		</section>		                 
-        <section id="configuring-provisioning-repository-examples">
-	        <title>Example Repository Configurations</title>
-	        <para>
-		        The following examples provide sample configuration that could be used for some common use cases.
-		    </para>
-		    <section id="configuring-provisioning-repository-examples-ivy">
-		        <title>Add an Ivy cache repository</title>
-			<para>The following example shows how to add an external repository whose location is actually an Ivy cache.</para>
-			<para><emphasis>Note that Ivy repositories can contain bundles which will conflict with the normal operation of Virgo, so care should
-				be exercised when adding such an external repository.</emphasis></para>
-			<programlisting><![CDATA[ext.type=external
-ext.searchPattern=repository/ext/{artifact}
-
-usr.type=watched
-usr.watchDirectory=repository/usr
-
-ivy-repo.type=external
-ivy-repo.searchPattern=${user.home}/.ivy2/cache/{org}/{name}/{version}/{bundle}.jar
-
-chain=ext,usr,ivy-repo]]></programlisting>
-
-            </section>
-            <section id="configuring-provisioning-repository-examples-maven">		    
-		        <title>Add a Maven local repository</title>
-			<para>The following example shows how to add an external repository whose location is actually a Maven repository.</para>
-			<para><emphasis>Note that Maven repositories can contain bundles which will conflict with the normal operation of Virgo, so care should
-				be exercised when adding such an external repository.</emphasis></para>
-			<programlisting><![CDATA[ext.type=external
-ext.searchPattern=repository/ext/{artifact}
-
-usr.type=watched
-usr.watchDirectory=repository/usr
-
-maven-repo.type=external
-maven-repo.searchPattern=${user.home}/.m2/repository/**/{bundle}.jar
-
-chain=ext,usr,maven-repo]]></programlisting>
-
-            </section>
-	    <section id="configuring-repository-examples-remote-watched">
-	        <title>Add remote and watched repositories</title>
-		<para>The following example shows the default <literal>org.eclipse.virgo.repository.properties</literal> file 
-		from a freshly-installed @project.name@ instance, but then updated to include new remote and watched repositories.  
-		Both of these repositories are part of the repository chain. 
-		</para>
-		<para>The remote repository is called <literal>remote-repo</literal>.  
-		The URI of the hosted repository from which <literal>remote-repo</literal> gets its artifacts is 
-		<literal>http://my-host:8080/org.eclipse.virgo.apps.repository/my-hosted-repo</literal>;
-		this means that there is a @tomcat.product.name.short@ instance running on host <literal>my-host</literal> 
-		whose Tomcat server listens at the default port, <literal>8080</literal>, 
-		and this server instance hosts a repository called <literal>my-hosted-repo</literal>, 
-		configured in the <literal>org.eclipse.virgo.apps.repository.properties</literal> file of the remote server instance.  
-		The remote repository checks for changes in the hosted repository every 30 seconds.
-		</para>
-		<para>The watched repository is called <literal>watched-repo</literal> and the directory that holds the artifacts 
-		is <literal>repository/watched</literal>, 
-		relative to the installation directory of the @tomcat.product.name.short@ instance.  
-		The server checks for changes in this watched repository every 5 seconds.
-		</para>
-		<programlisting><![CDATA[ext.type=external
-ext.searchPattern=repository/ext/{artifact}
-
-usr.type=watched
-usr.watchDirectory=repository/usr
-
-remote-repo.type=remote
-remote-repo.uri=http://my-host:8080/org.eclipse.virgo.apps.repository/my-hosted-repo
-remote-repo.indexRefreshInterval=30
-
-watched-repo.type=watched
-watched-repo.watchedDirectory=repository/watched
-watched-repo.watchedInterval=5
-
-chain=ext,usr,remote-repo,watched-repo]]></programlisting>
-            </section>
-	</section>
-   </section>
-
-	<section id="configuring-hosted-repo">
-		<title>Configuring a Hosted Repository</title>
-		<para>You configure a @tomcat.product.name.short@ instance to host a repository 
-		by editing the <literal>$SERVER_HOME/configuration/org.eclipse.virgo.apps.repository.properties</literal> file; 
-		remote clients can then access the artifacts in this hosted repository and use them locally.
-		</para>
-              <para>When you specify a property in the file, use the format <literal>repository-name.property=value</literal>, where:
-             <itemizedlist> 
-		<listitem><para><literal>repository-name</literal> refers to the name of the hosted repository.</para></listitem>
-		<listitem><para><literal>property</literal> refers to the name of a particular property.</para></listitem>
-		<listitem><para><literal>value</literal> refers to the value of the property.</para></listitem>
-             </itemizedlist> 
-              </para>
-             <para>For example, <literal>my-hosted-repo.type=external</literal> specifies that the <literal>type</literal> property 
-             of the <literal>my-hosted-repo</literal> repository is <literal>external</literal>.
-             </para>
-		<para>The following table lists the properties that you can include in the <literal>org.eclipse.virgo.apps.repository.properties</literal> file. 
-		</para>
-	        <table id="hosted-repository-properties-table" colsep="1" frame="all" rowsep="1">
-	          <title>Hosted Repository Properties</title>
-		  <tgroup cols="2">
-		   <thead>
-			<row>
-				<entry>Property</entry>
-				<entry>Description</entry>
-			</row>
-		  </thead>
-		  <tbody>
-			<row>
-				<entry><emphasis><literal>repository-name</literal></emphasis><literal>.type</literal></entry>
-				<entry>Specifies the type of path of the hosted repository.  
-				All paths are local to the current @tomcat.product.name.short@ instance. 
-				You can set this property to one of the following valid values:
-	<itemizedlist>
-
-    	<listitem>
-    	<para>
-    	<literal>external</literal>: Specifies that this path points to a number of directories that satisfy a given search pattern. 
-    	Use the <literal>searchPattern</literal> property to specify the directory search pattern.
-    	</para>
-    	</listitem>
-	<listitem>
-	<para>
-	<literal>watched</literal>: Specifies that this path points to a single directory. 
-	@project.name@ regularly scans watched repositories so it automatically picks up any changes to the artifacts in the directory at runtime. 
-	Use the <literal>watchDirectory</literal> property to specify the actual watched directory and the <literal>watchInterval</literal> property 
-	to specify how often @tomcat.product.name.short@ checks the directory.
-	</para>
-	</listitem>
-	</itemizedlist>
-			  <para>See <link linkend="configuring-repository-watched-versus-external">Watched or External Repository?</link> 
-			  for additional information about when to configure watched or external repositories for your particular environment.
-			  </para>
-				</entry>
-			</row>
-			<row>
-				<entry><emphasis><literal>repository-name</literal></emphasis><literal>.searchPattern</literal></entry>
-			<entry> <para>Specifies the pattern that an external hosted repository uses when deciding which 
-			local directories it should search when identifying artifacts.  
-			Use this property when <literal>repository-name.type=external</literal>. 
-			See <link linkend="configuring-provisioning-repository-search-paths" >Search Paths: Additional Information</link> 
-			for detailed information about specifying a search pattern.  
-			</para> </entry>
-			</row>
-			<row>
-				<entry><emphasis><literal>repository-name</literal></emphasis><literal>.watchDirectory</literal></entry>
-			<entry> <para>Specifies the single directory of a watched hosted repository. 
-			You can specify either an absolute or relative pathname for the directory.  
-			If you specify a relative pathname, it is relative to the root of the @tomcat.product.name.short@ installation (<literal>$SERVER_HOME</literal>).  
-			Use this property when <literal>repository-name.type=watched</literal>.
-			</para></entry>
-			</row>
-			<row>
-				<entry><emphasis><literal>repository-name</literal></emphasis><literal>.watchInterval</literal></entry>
-			<entry> <para>Specifies the interval in seconds between checks of a watched directory by a watched hosted repository.  
-			This property is optional.  Use this property when <literal>repository-name.type=watched</literal>. 
-			</para> </entry>
-			</row>
-		   </tbody>
-		  </tgroup>
-		</table>
-		<para>The following sample shows a <literal>org.eclipse.virgo.apps.repository.properties</literal> file with a single external repository 
-		called <literal>my-hosted-repo</literal> with search pattern <literal>$SERVER_HOME/repository/hosted/*</literal>.
-		<programlisting><![CDATA[my-hosted-repo.type=external
-my-hosted-repo.searchPattern=repository/hosted/*]]></programlisting>
-		</para>
-
-	<para>See <link linkend="configuring-repository-examples-remote-watched">Example of watched and remote repositories</link> 
-	for details on how a local repository can remotely access the artifacts in this hosted repository.
-	</para>
-	</section>
-	
-    <section id="configuring-kernel" >
-        <title>Configuring the Kernel and User Region</title>
-        <para>This section provides information about configuring the @project.name@ kernel and the User Region.</para>
-
-        <section id="configuring-kernel-properties">
-            <title>Configuring the Kernel</title>
-
-            <para>To change any of the kernel properties, provide the new value to the startup script. The following table describes all properties.</para>
-            <table id="configuring-kernel-table" colsep="1" frame="all" rowsep="1">
-                <title>Kernel Configuration Properties</title>
-                <tgroup cols="3">
-                    <thead>
-                        <row>
-                            <entry>
-								Property (prefixed by <literal>org.eclipse.virgo</literal>)
-							</entry>
-                            <entry>
-								Description
-							</entry>
-							<entry>
-								Default Value
-							</entry>
-                        </row>
-                    </thead>
-                    <tbody>
-                        <row>
-                            <entry>
-								<literal>.kernel.home</literal>
-							</entry>
-                            <entry>
-								Specifies the location of the @kernel.product.name@.
-							</entry>
-							<entry>
-								<literal>$SERVER_HOME</literal>
-							</entry>
-                        </row>
-                        <row>
-                            <entry>
-								<literal>.kernel.config</literal>
-							</entry>
-                            <entry>
-								Specifies the location of the @kernel.product.name@ and User Region <link linkend="configuring-kernel-files">configuration files</link>. 		
-								The location of the configuration files can also be specified using
-								<link linkend="starting-stopping-configuration-directory"><literal>-configDir</literal> startup parameter</link>.
-							</entry>
-							<entry>
-								<literal>$SERVER_HOME/configuration</literal>
-							</entry>
-                        </row>
-                        <row>
-                            <entry>
-								<literal>.kernel.domain</literal>
-							</entry>
-                            <entry>
-								Specifies the <ulink url="http://download.oracle.com/javase/6/docs/api/javax/management/ObjectName.html">JMX domain</ulink> that should be
-								used by the @kernel.product.name@.
-							</entry>
-							<entry>
-								<literal>org.eclipse.virgo.kernel</literal>
-							</entry>
-                        </row>
-                        <row>
-                            <entry>
-								<literal>.kernel.startup.wait.limit</literal>
-							</entry>
-                            <entry>
-								Specifies the amount of time, in seconds, after which various operations time out out while trying to start the kernel.
-								See <link linkend="configuring-framework-properties">Configuring OSGi Framework Properties</link> for the recommended way
-								to configure this parameter.
-							</entry>
-							<entry><literal>180</literal>
-							</entry>
-                        </row>
-                    </tbody>
-                </tgroup>
-            </table>
-        </section>
-
-        <section id="configuring-kernel-files">
-            <title>Configuration Files</title>
-            <para>The configuration of the @kernel.product.name@ and User Region by default is located in the <literal>$SERVER_HOME/configuration</literal> directory:</para>
-            <table id="configuring-kernel-files-table" colsep="1" frame="all" rowsep="1">
-                <title>Kernel Configuration Files </title>
-                <tgroup cols="2">
-                    <thead>
-                        <row>
-                            <entry>Property File</entry>
-                            <entry>Description</entry>
-                        </row>
-                    </thead>
-                    <tbody>
-                        <row>
-                            <entry><literal>org.eclipse.virgo.kernel.properties</literal></entry>
-                            <entry>Configures <link linkend="configuring-deployment">deployment</link>. </entry>
-                        </row>
-                        <row>
-                            <entry><literal>org.eclipse.virgo.kernel.userregion.properties</literal></entry>
-                            <entry>Configures the <link linkend="configuring-user-region">User Region</link> of @project.name@.</entry>
-                        </row>
-                        <row>
-                            <entry><literal>org.eclipse.virgo.kernel.users.properties</literal></entry>
-                            <entry>Configures the <link linkend="configuring-authentication">users that are allowed to access</link> the Admin Console, and roles to which they map. </entry>
-                        </row>
-                        <row>
-                            <entry><literal>org.eclipse.virgo.kernel.jmxremote.access.properties</literal></entry>
-                            <entry>Configures the <link linkend="configuring-authentication">permissions for users</link> that are allowed to access the Admin Console. </entry>
-                        </row>
-                        <row>
-                            <entry><literal>org.eclipse.virgo.kernel.authentication.config</literal></entry>
-                            <entry>Configures the <link linkend="configuring-authentication">Java Authentication and Authorization Service (JAAS)</link> for the Tomcat server users.</entry>
-                        </row>
-						<row>
-                            <entry><literal>osgi.console.ssh.properties</literal></entry>
-                            <entry>Configures the kernel SSH console. See <xref linkend="admin-shell-enable"/>.</entry>
-                        </row>
-						<row>
-                            <entry><literal>osgi.console.telnet.properties</literal></entry>
-                            <entry>Configures the kernel telnet console. See <xref linkend="admin-shell-enable"/>.</entry>
-                        </row>
-                    </tbody>
-                </tgroup>
-            </table>
-        </section>
-
-        <section id="configuring-deployment">
-        <title>Configuring Deployment</title>
-
-        <para>
-			You can configure various properties of deployment: the pickup directory into which you copy applications for hot-deployment, the deployment timeout,
-			and whether or not bundles are unpacked during deployment.
-		</para>
-        <para>To change any of these properties, edit the <literal>deployer.XXX</literal> properties of the <literal>$SERVER_HOME/configuration/org.eclipse.virgo.kernel.properties</literal> file.  The following table describes these properties.  </para>
-        <table id="configuring-deployment-table" colsep="1" frame="all" rowsep="1">
-                  <title>Deployment Configuration Properties</title>
-              <tgroup cols="3">
-                <thead>
-                <row>
-                    <entry>
-						Property
-					</entry>
-                    <entry>
-						Description
-					</entry>
-					<entry>
-						Default Value
-					</entry>
-                </row>
-                 </thead>
-                 <tbody>
-                <row>
-                    <entry>
-						<literal>deployer.pickupDirectory</literal>
-					</entry>
-                    <entry>
-						Specifies the absolute or relative path to the pickup directory to which you copy applications for hot-deployment.
-						Relative paths are relative to <literal>$SERVER_HOME</literal>.
-					</entry>
-					<entry>
-						<literal>./pickup</literal>
-					</entry>
-                </row>
-                <row>
-                    <entry>
-						<literal>deployer.timeout</literal>
-					</entry>
-                    <entry>
-						Specifies the amount of time, in seconds, after which @project.name@ times out while trying to deploy an artifact.
-						If you want to disable deployment timeout, specify <literal>0</literal>.
-					</entry>
-					<entry>
-						  <literal>300</literal>  
-					</entry>
-                </row>
-                <row>
-                    <entry>
-						<literal>deployer.scanIntervalMillis</literal>
-					</entry>
-                    <entry>
-						Specifies the scan interval, in milliseconds, used to survey the pickup directory.
-					</entry>
-					<entry>
-						  <literal>1000</literal>
-					</entry>
-                </row>
-                <row>
-                    <entry>
-						<literal>deployer.unpackBundles</literal>
-					</entry>
-                    <entry>
-						Determines whether or not bundles (with file extension <literal>.jar</literal> or <literal>.war</literal>) are unpacked
-						during deployment. The value must be either <literal>true</literal> or <literal>false</literal>.
-						<para>
-							If you want to deploy bundles packed, specify <literal>false</literal>.
-							This option can help alleviate a known issue with <link linkend="long-work-paths">long work directory paths under Windows</link>.
-						</para>
-						<para>
-							Note that web applications may behave differently depending on whether they are deployed packed or unpacked.
-							Certain servlet API methods return <literal>null</literal> when a web application is deployed packed.
-						</para>
-					</entry>
-					<entry>
-						  <literal>true</literal>  
-					</entry>
-                </row>
-                <row>
-                    <entry>
-						<literal>WABHeaders</literal>
-					</entry>
-                    <entry>
-                    	<para>
-                    		This kernel property is only relevant for @nanoweb.product.name@. For the corresponding property in @tomcat.product.name@, see <link linkend="configuring-web">Configuring the Web Integration Layer</link>.
-                    	</para>
-						<para>
-							Specifies how Web Application Bundle manifest headers are processed.
-							See "Web Application Manifest Processing" in the
-							<ulink url="../../virgo-programmer-guide/html/index.html">Programmer Guide</ulink> for details.
-						</para>
-						<para>
-							A value of <literal>strict</literal> causes @nanoweb.product.name@ to interpret certain headers in strict compliance with
-							the OSGi Web Applications specification if they are not specified.
-						</para>
-						<para>
-							A value of <literal>defaulted</literal> causes @nanoweb.product.name@ to set certain headers to default values if they are not specified.
-							<emphasis>This value is provided as a migration aid and may not be supported in future releases.</emphasis>
-						</para>
-					</entry>
-					<entry>
-						<literal>strict</literal>
-					</entry>
-                </row>
-                </tbody>
-             </tgroup>
-            </table>
-
-                     <para>The following listing displays the default configuration distributed with @project.name@; only relevant sections of the <literal>org.eclipse.virgo.kernel.properties</literal> file are shown. </para>
-
-            <programlisting><![CDATA[deployer.timeout=300
-deployer.pickupDirectory=pickup
-deployer.scanIntervalMillis=1000]]></programlisting>
-
-            <para>So the default deployment timeout is 300 seconds, the default pickup directory is <literal>$SERVER_HOME/pickup</literal> and the default scan interval is <literal>1000</literal>.
-            </para>
-        </section>
-
-	<section id="configuring-user-region">
-		<title>Configuring the User Region</title>
-		<para>
-			The User Region is the subsystem of @project.name@ that
-			supports deployed applications, both your own user applications and
-			those of the server itself, such as the Admin Console. The User Region
-			is deliberately isolated from the kernel, which protects the kernel from interference by applications.
-		</para>
-		<para>
-			You configure the User Region by updating properties in the
-			<literal>$SERVER_HOME/configuration/org.eclipse.virgo.kernel.userregion.properties</literal>
-			file; these properties are described in the following table.  
-		</para>
-		<para>
-			<emphasis role="bold">WARNING:</emphasis>
-			We strongly recommend that you update only the
-			<literal>initialArtifacts</literal>
-			property; updating other properties could cause
-			@project.name@ to fail. These properties are documented for your
-			information.
-		</para>
-
-	 	<table id="configuring-user-region-table" colsep="1" frame="all" rowsep="1">
-	    	  <title>User Region Configuration Properties</title>
-		  <tgroup cols="2">
-		    <thead>
-			<row>
-				<entry>Property</entry>
-				<entry>Description</entry>
-			</row>
-		     </thead>
-		     <tbody>
-			<row>
-				<entry><literal>baseBundles</literal></entry>
-				<entry>Specifies the hard-coded list of bundles that @project.name@ installs directly into the User Region.
-					@project.name@ does not perform any automatic dependency satisfaction for these bundles; in other words, you only get the bundles
-					in the list and nothing more. </entry>
-			</row>
-			<row>
-				<entry><literal>bundleImports</literal></entry>
-				<entry>
-					<para>
-						Specifies the bundles in the kernel that @project.name@ imports into the User Region so that they are visible to bundles in the User Region.
-						This property supports an optional <literal>bundle-version</literal> attribute which specifies a version range.
-						By default only the system bundle is imported.
-					</para>
-					<para>
-						Note that packages exported by these bundles are <emphasis>not</emphasis> automatically made available in the User Region: these must be specified using the
-						<literal>packageImports</literal> property.
-					</para>
-				</entry>
-			</row>
-			<row>
-				<entry><literal>packageImports</literal></entry>
-				<entry>
-					<para>
-						Specifies the packages in the kernel that @project.name@ imports into the User Region so that they are in turn available to be
-						imported by bundles in the User Region.
-						This property supports a <literal>.*</literal> wildcard which is expanded based on the packages available in the kernel
-						when the User Region is created.
-						For example, <literal>org.eclipse.virgo.util.*</literal> will import all packages that start with
-						<literal>org.eclipse.virgo.util.</literal> (but <emphasis>not</emphasis> the package <literal>org.eclipse.virgo.util</literal>
-						which would need to be specified separately to be imported).
-					</para>
-					<para>
-						The property also supports matching attributes such as <literal>version</literal>, <literal>bundle-symbolic-name</literal>,
-				 		<literal>bundle-version</literal>, and user-defined attributes. This can be used to import all the packages of a bundle imported using the
-						<literal>bundleImports</literal> property.
-						For example the following imports all the packages of the system bundle:
-						<programlisting><![CDATA[packageImports=*;bundle-symbolic-name="org.eclipse.osgi",\
- ...]]></programlisting>
-						Note that if a package is specified more than once in <literal>packageImports</literal>, the last occurrence is used and the earlier
-						occurrences are ignored.
-						For this reason, it is recommended that imports specifying matching attributes are placed earlier in the list than other imports so that
-						if an import is	specified with and without matching attributes, the form without the matching attributes is used.
-					</para>
-				</entry>
-			</row>
-			<row>
-				<entry><literal>serviceImports</literal></entry>
-				<entry>Specifies the services in the kernel that are imported into the User Region so they are available to bundles in the User Region.  </entry>
-			</row>
-			<row>
-				<entry><literal>serviceExports</literal></entry>
-				<entry>Specifies the services in the User Region that are exported to the kernel so they are available to bundles in the kernel.  </entry>
-			</row>
-			<row>
-				<entry><literal>initialArtifacts</literal></entry>
-				<entry>
-					<para>
-						Specifies the artifacts that @project.name@ deploys into the User Region when the server starts.
-						@project.name@ performs dependency satisfaction when it deploys these artifacts.
-						This means that you only need to list the top-level artifacts that you care about; @project.name@ automatically installs,
-						from the repository, any other artifacts upon which they depend.
-					</para>
-					<para>
-						The artifacts are specified as a comma separated list of URI strings of the form:
-						<programlisting><![CDATA[repository:type/name[/version]]]></programlisting>
-						where <literal>type</literal> is the artifact type (e.g. "plan", "par", "bundle",
-						"configuration"), <literal>name</literal> is the (symbolic) name of the artifact, and, optionally,
-						<literal>version</literal> is the version of the artifact.
-						If <literal>version</literal> is omitted and there is at least one artifact in the repository with the given type and name, then the
-						artifact with the highest version is selected.
-						So, for example, the following entries are valid:
-						<programlisting><![CDATA[initialArtifacts=...,\
- repository:plan/APlan,\
- repository:bundle/ABundle/1.0]]></programlisting>
-					</para>
-				</entry>
-			</row>
-		    </tbody>
-		  </tgroup>
-		</table>
-		
-		<section id="configuring-user-region-consoles">
-            <title>Configurating User Region Consoles</title>
-            <para>The configuration of the User Region consoles is located by default in the <literal>$SERVER_HOME/repository/ext</literal> directory:</para>
-            <table id="configuring-user-region-consoles-table" colsep="1" frame="all" rowsep="1">
-                <title>User Region Console Configuration Files </title>
-                <tgroup cols="2">
-                    <thead>
-                        <row>
-                            <entry>Property File</entry>
-                            <entry>Description</entry>
-                        </row>
-                    </thead>
-                    <tbody>
-						<row>
-                            <entry><literal>osgi.console.ssh.properties</literal></entry>
-                            <entry>Configures the User Region SSH console. See <xref linkend="admin-shell-enable"/>.</entry>
-                        </row>
-						<row>
-                            <entry><literal>osgi.console.telnet.properties</literal></entry>
-                            <entry>Configures the User Region telnet console. See <xref linkend="admin-shell-enable"/>.</entry>
-                        </row>
-                    </tbody>
-                </tgroup>
-            </table>
-        </section>
-
-	</section>
-
-	<section id="configuring-authentication">
-		<title>Configuring Authentication</title>
-	<para>
-		@project.name@ uses the
-		<ulink
-			url="http://java.sun.com/javase/6/docs/technotes/guides/security/jaas/JAASRefGuide.html">Java Authentication and Authorization Service (JAAS)</ulink>
-		framework to authenticate the administration user that connects to Web
-		Servers using the Admin Console. This section describes
-		how the authentication mechanism is configured by default, and the
-		files that you need to update if you want to change the administration
-		user, change their password, and so on.
-	</para>
-		<para>The <literal>$SERVER_HOME/configuration/org.eclipse.virgo.kernel.authentication.config</literal> file configures the underlying authentication technology for @project.name@.  The short file consists of the following entries:</para>
-
-		<programlisting>virgo-kernel {
-        org.eclipse.virgo.kernel.authentication.KernelLoginModule REQUIRED;
-};
-equinox_console {
-	org.eclipse.virgo.kernel.authentication.KernelLoginModule REQUIRED;
-};</programlisting>
-
-		<para>The entry named <literal>virgo-kernel</literal> corresponds to the <literal>&lt;Realm&gt;</literal> element in the <literal>$SERVER_HOME/configuration/tomcat-server.xml</literal> file that configures the JAAS authentication mechanism for the <literal>Catalina</literal> service of the <link linkend="configuring-tomcat">Tomcat servlet container</link>.  The <literal>virgo-kernel</literal> entry specifies that the JAAS LoginModule that @project.name@ uses to authenticate users is <literal>org.eclipse.virgo.kernel.authentication.KernelLoginModule</literal> and that this <literal>KernelLoginModule</literal> is required to "succeed" in order for authentication to be considered successful. The <literal>KernelLoginModule</literal> succeeds only if the name and password supplied by the user are the ones it expects.  The default administration username/password pair for @tomcat.product.name.short@ is <literal>admin/springsource</literal>. </para>
-		<para>
-			The entry named <literal>equinox_console</literal> controls ssh authentication for the Virgo shell. It also uses the <literal>KernelLoginModule</literal>.
-		</para>
-
-	       <para>You configure the administration user in the <literal>org.eclipse.virgo.kernel.users.properties</literal> file.  The default file for a freshly installed @project.name@ is as follows:</para>
-
-		<programlisting>##################
-# User definitions
-##################
-user.admin=springsource
-
-##################
-# Role definitions
-##################
-role.admin=admin</programlisting>
-
-	<para>
-		The administration user that connect to the Admin Console must have the
-		<literal>admin</literal>
-		role. The preceding file shows how, by default, the
-		<literal>admin</literal>
-		role is assigned the
-		<literal>admin</literal>
-		user with password
-		<literal>springsource</literal>.
-	</para>
-
-		<para>If you want to change the administration user, update the <literal>org.eclipse.virgo.kernel.users.properties</literal> file.  For example, if you want the <literal>juliet</literal> user, with password <literal>supersecret</literal>, to be the new adminstration user, update the file as shown:</para>
-
-
-		<programlisting>##################
-# User definitions
-##################
-user.juliet=supersecret
-
-##################
-# Role definitions
-##################
-role.admin=juliet</programlisting>
-	
-		<para>Be sure to restart @project.name@ after you make this change for it to take effect.</para>
-
-		<para>The final file involved in @project.name@ authentication is <literal>$SERVER_HOME/configuration/org.eclipse.virgo.kernel.jmxremote.access.properties</literal>.  This file specifies the JMX access privileges that the administration user has; by default they are read and write, as shown in the following listing:</para>
-		<programlisting>admin=readwrite</programlisting>
-	<para>
-		The only other value you can enter is
-		<literal>readonly</literal>, which means that the adminstration user would only be able to <emphasis>view</emphasis>
-		information using the Admin Console.
-	</para>
-	</section>
-
-
-    </section>
-
-	<section id="configuring-tomcat">
-		<title>Configuring the Embedded Tomcat Servlet Container</title>
-		<note>@nano.product.name@ uses the default Gemini Web configuration. The details described below may still apply.</note>
-		<para>
-			@project.name@
-			embeds an OSGi-enhanced version of the <ulink url="http://tomcat.apache.org/">Tomcat Servlet Container</ulink>
-			in order to provide support for deploying Java EE WARs and OSGi <emphasis>Web Application Bundles</emphasis>. 
-			You configure the embedded Servlet container using the standard Apache Tomcat configuration.   The main difference is that the configuration file is called <filename>tomcat-server.xml</filename> rather than <literal>server.xml</literal>.  As with the other @project.name@ configuration files, the <literal>tomcat-server.xml</literal> file is located in the <literal>$SERVER_HOME/configuration</literal> directory.
-			Another difference is that not all standard Apache Tomcat configuration is supported in @tomcat.product.name@: the restrictions are described in the
-			remainder of this section.
-		</para>
-		<para>Here's an extract of the default configuration distributed with the @tomcat.product.name.short@.
-		</para>
-		<programlisting language="xml"><![CDATA[<?xml version='1.0' encoding='utf-8'?>
-<Server port="8005" shutdown="SHUTDOWN">
-
-	<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
-	<Listener className="org.apache.catalina.core.JasperListener" />
-	<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
-
-	<Listener className="org.eclipse.virgo.web.tomcat.ServerLifecycleLoggingListener"/>
-
-	<Service name="Catalina">
-		<Connector port="8080" protocol="HTTP/1.1"
-			connectionTimeout="20000"
-			redirectPort="8443" />
-
-		<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
-			maxThreads="150" scheme="https" secure="true"
-			clientAuth="false" sslProtocol="TLS"
-			keystoreFile="configuration/keystore"
-			keystorePass="changeit"/>
-
-		<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
-
-		<Engine name="Catalina" defaultHost="localhost">
-			<Realm className="org.apache.catalina.realm.JAASRealm" appName="virgo-kernel"
-					userClassNames="org.eclipse.virgo.kernel.authentication.User"
-					roleClassNames="org.eclipse.virgo.kernel.authentication.Role"/>
-
-			<Host name="localhost"  appBase="webapps"
-					unpackWARs="false" autoDeploy="false"
-					deployOnStartup="false" createDirs="false">
-
-				<Valve className="org.apache.catalina.valves.AccessLogValve" directory="serviceability/logs/access"
-					prefix="localhost_access_log." suffix=".txt" pattern="common" resolveHosts="false"/>
-
-				<Valve className="org.eclipse.virgo.web.tomcat.ApplicationNameTrackingValve"/>
-			</Host>
-		</Engine>
-	</Service>
-</Server>]]></programlisting>
-
-	<section id="overview-tomcat-servlet-container">
-	  <title>Description of the Default Apache Tomcat Configuration</title>
-		<para>
-		  The following bullets describe the main elements and attributes in the default <literal>tomcat-server.xml</literal> file; for details about updating this file to further configure the embedded Apache Tomcat server, see the <ulink url="http://tomcat.apache.org/tomcat-7.0-doc/config/index.html">Apache Tomcat Configuration Reference</ulink>.
-		</para>
-
-		<tip>
-		  <title>Relative paths</title>
-		  <para>If the configured path to a directory or file does not represent an absolute path, @project.name@ typically interprets it as a path relative to the <filename>$SERVER_HOME</filename> directory.</para>
-		</tip>
-
-		<itemizedlist>
-		  <listitem><para>The root element of the <literal>tomcat-server.xml</literal> file is <literal>&lt;Server&gt;</literal>. The attributes of this element represent the characteristics of the entire embedded Tomcat servlet container. The <literal>shutdown</literal> attribute specifies the command string that the shutdown port number receives via a TCP/IP connection in order to shut down the servlet container. The <literal>port</literal> attribute specifies the TCP/IP port number that listens for a shutdown message.</para></listitem>
-
-      		  <listitem><para>The <literal>&lt;Listener&gt;</literal> XML elements specify the list of lifecycle listeners that monitor and manage the embedded Tomcat servlet container. Each listener class is a Java Management Extensions (JMX) MBean that listens to a specific component of the servlet container and has been programmed to do something at certain lifecycle events of the component, such as before starting up, after stopping, and so on.</para>
-			<para> The first four <literal>&lt;Listener&gt;</literal> elements configure standard Tomcat lifecycle listeners. The listener implemented by the <literal>org.eclipse.virgo.web.tomcat.ServerLifecycleLoggingListener</literal> class is specific to @tomcat.product.name@ and manages server lifecycle logging.
-		</para> </listitem>
-
-		<listitem><para>The <literal>&lt;Service&gt;</literal> XML element groups together one or more connectors and a single engine. Connectors define a transport mechanism, such as HTTP, that clients use to to send and receive messages to and from the associated service. There are many transports that a client can use, which is why a <literal>&lt;Service&gt;</literal> element can have many <literal>&lt;Connector&gt;</literal> elements. The engine then defines how these requests and responses that the connector receives and sends are in turn handled by the servlet container; you can define only a single <literal>&lt;Engine&gt;</literal> element for any given <literal>&lt;Service&gt;</literal> element.</para>
-
-		<para> The sample <literal>tomcat-server.xml</literal> file above includes three <literal>&lt;Connector&gt;</literal> elements: one for the HTTP transport, one for the HTTPS transport, and one for the AJP transport. The file also includes a single <literal>&lt;Engine&gt;</literal> element, as required.
-		</para></listitem>
-
-		<listitem><para>The first connector listens for HTTP requests at the <literal>8080</literal> TCP/IP port. The connector, after accepting a connection from a client, waits for a maximum of 20000 milliseconds for a request URI; if it does not receive one from the client by then, the connector times out. If this connector receives a request from the client that requires the SSL transport, the servlet container automatically redirects the request to port <literal>8443</literal>. </para>
-		</listitem>
-
-		<listitem><para>The second connector is for HTTPS requests.  The TCP/IP port that users specify as the secure connection port is <literal>8443</literal>. Be sure that you set the value of the <literal>redirectPort</literal> attribute of your non-SSL connectors to this value to ensure that users that require a secure connection are redirected to the secure port, even if they initially start at the non-secure port.  The <literal>SSLEnabled</literal> attribute specifies that SSL is enabled for this connector.  The <literal>secure</literal> attribute ensures that a call to <literal>request.isSecure()</literal> from the connecting client always returns <literal>true</literal>. The <literal>scheme</literal> attribute ensures that a call to <literal>request.getScheme()</literal> from the connecting client always returns <literal>https</literal> when clients use this connector. </para>
-		<para>The <literal>maxThreads</literal> attribute specifies that the servlet container creates a maximum of 150 request processing threads, 
-		which determines the maximum number of simultaneous requests that can be handled. 
-		The <literal>clientAuth</literal> attribute specifies that the servlet container does not require a certificate chain 
-		unless the client requests a resource protected by a security constraint that uses CLIENT-CERT authentication.  
-		</para>
-                <para>The <literal>keystoreFile</literal> attribute specifies the name of the file that contains the servlet container&rsquo;s 
-                private key and public certificate used in the SSL handshake, encryption, and decryption. 
-                You use an alias and password to access this information. 
-                In the example, this file is <literal>$SERVER_HOME/configuration/keystore</literal>.  
-                The <literal>keystorePass</literal> attributes specify the password used to access the keystore. 
-                </para></listitem>
-
-		<listitem><para>The third AJP Connector element represents a Connector component that communicates with a web connector via the AJP protocol. 
-		</para></listitem>
-		<listitem><para>The engine has a logical name of <literal>Catalina</literal>; 
-		this is the name used in all log and error messages so you can easily identify problems. 
-		The value of the <literal>defaultHost</literal> attribute refers to the name of a <literal>&lt;Host&gt;</literal> 
-		child element of <literal>&lt;Engine&gt;</literal>; 
-		this host processes requests directed to host names on this servlet container.
-		</para>
-		</listitem>
-
-		<listitem> <para>The <literal>&lt;Realm&gt;</literal> child element of <literal>&lt;Engine&gt;</literal> represents a database of 
-		users, passwords, and mapped roles used for authentication in this service.  Virgo Web Server uses an implementation of the Tomcat 6 Realm interface that authenticates users through the Java Authentication and Authorization Service (JAAS) framework which is provided as part of the standard J2SE API.</para>
-		   <para>With the JAASRealm, you can combine practically any conceivable security realm with Tomcat's container managed authentication.  For details, see <ulink url="http://tomcat.apache.org/tomcat-7.0-doc/realm-howto.html">Realm Configuration</ulink>.</para>
-
-		</listitem>
-		<listitem><para>The <literal>&lt;Host&gt;</literal> child element represents a virtual host, 
-		which is an association of a network name for a server (such as <literal>www.mycompany.com</literal>) with the particular 
-		server on which Catalina is running.  
-		The servlet container unpacks Web applications into a directory hierarchy if they are deployed as WAR files. 
-		</para>
-		<para>
-			Note that multiple <literal>&lt;Host&gt;</literal> elements are not supported in @tomcat.product.name@.
-		</para>
-		</listitem>
-
-		<listitem><para>Finally, the <literal>org.apache.catalina.valves.AccessLogValve</literal> valve creates log files 
-		in the same format as those created by standard web servers.   
-		The servlet container creates the log files in the <literal>$SERVER_HOME/serviceability/logs/access</literal> directory.  
-		The log files are prefixed with the string <literal>localhost_access_log.</literal>, have a suffix of <literal>.txt</literal>, 
-		use a standard format for identifying what should be logged, and do not include DNS lookups of the IP address of the remote host.
-		</para> </listitem>
-
-		</itemizedlist>
-	</section>
-
-		<section id="configuring-tomcat-connectors">
-			<title>Connector Configuration</title>
-			<para> The @tomcat.product.name@ supports the configuration of any connector supported by Apache Tomcat. 
-			See the default configuration above for syntax examples, and for further details of the configuration properties 
-			supported for various <literal>&lt;Connector&gt;</literal> implementations, 
-			consult the official <ulink url="http://tomcat.apache.org/tomcat-7.0-doc/config/http.html">Tomcat HTTP Connector</ulink> documentation.
-			</para>
-			<tip>
-				<title>Configuring SSL for Tomcat</title>
-				<para> The @tomcat.product.name@ distribution includes a preconfigured <filename>$SERVER_HOME/configuration/keystore</filename> 
-				file that contains a single self-signed SSL Certificate. 
-				The password for this <filename>keystore</filename> file is <literal>changeit</literal>.  
-				This <filename>keystore</filename> file is intended for testing purposes only. 
-				For detailed instructions on how to configure Tomcat&rsquo;s SSL support, 
-				consult the official <ulink url="http://tomcat.apache.org/tomcat-7.0-doc/ssl-howto.html">Tomcat SSL Configuration HOW-TO</ulink>.
-				</para>
-			</tip>
-		</section>
-
-		<section id="configuring-tomcat-clustering">
-			<title>Cluster Configuration</title>
-			<para>
-				@tomcat.product.name@ supports standard Apache Tomcat cluster configuration.
-				By default, clustering of the embedded servlet container is disabled, 
-				and the default configuration does not include any clustering information.  
-				See  <ulink url="http://tomcat.apache.org/tomcat-7.0-doc/cluster-howto.html">Tomcat Clustering/Session Replication HOW-TO</ulink> 
-				for detailed information about enabling and configuring clustering.
-			</para>
-		</section>
-
-		<section id="configuring-default-web-xml">
-			<title>Default web.xml Configuration</title>
-			<para>
-				Java Servlet specification enables web applications to provide deployment descriptor (<literal>web.xml</literal>) in the <literal>WEB-INF</literal> directory.
-				Apache Tomcat introduces a default <literal>web.xml</literal> which is similar to web application's <literal>web.xml</literal>, but provides configurations that are applied to all web applications.
-				When deploying a web application, Apache Tomcat uses the default <literal>web.xml</literal> file as a base configuration. 
-				If the web application provides its own configurations via <literal>web.xml</literal> (the one located in the web application's <literal>WEB-INF</literal>) or annotations, they overwrite the default ones.
-				In @tomcat.product.name@ you can also provide default configurations for all web applications.
-				If you want to change/extend the default configurations, you can provide the default <literal>web.xml</literal> file located in the <literal>@tomcat.product.name.short@_HOME/configuration</literal> directory. 
-			</para>
-			<para>
-				<tip>Be careful when changing/extending the default <literal>web.xml</literal> as this will affect all web applications.</tip>
-			</para>
-			<para>
-				Here's an extract of the default configuration distributed with the @tomcat.product.name.short@.
-			</para>
-			<programlisting language="xml"><![CDATA[<?xml version="1.0" encoding="ISO-8859-1"?>
-<web-app xmlns="http://java.sun.com/xml/ns/javaee"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
-    version="3.0">
-
-    <servlet>
-        <servlet-name>default</servlet-name>
-        <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
-        <init-param>
-            <param-name>debug</param-name>
-            <param-value>0</param-value>
-        </init-param>
-        <init-param>
-            <param-name>listings</param-name>
-            <param-value>false</param-value>
-        </init-param>
-        <load-on-startup>1</load-on-startup>
-    </servlet>
-
-    <servlet>
-        <servlet-name>jsp</servlet-name>
-        <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
-        <init-param>
-            <param-name>fork</param-name>
-            <param-value>false</param-value>
-        </init-param>
-        <init-param>
-            <param-name>xpoweredBy</param-name>
-            <param-value>false</param-value>
-        </init-param>
-        <load-on-startup>3</load-on-startup>
-    </servlet>
-
-    <servlet-mapping>
-        <servlet-name>default</servlet-name>
-        <url-pattern>/</url-pattern>
-    </servlet-mapping>
-
-    <servlet-mapping>
-        <servlet-name>jsp</servlet-name>
-        <url-pattern>*.jsp</url-pattern>
-    </servlet-mapping>
-
-    <servlet-mapping>
-        <servlet-name>jsp</servlet-name>
-        <url-pattern>*.jspx</url-pattern>
-    </servlet-mapping>
-
-    <session-config>
-        <session-timeout>30</session-timeout>
-    </session-config>
-
-    <mime-mapping>
-        <extension>abs</extension>
-        <mime-type>audio/x-mpeg</mime-type>
-    </mime-mapping>
-    ......
-    <mime-mapping>
-        <extension>ppt</extension>
-        <mime-type>application/vnd.ms-powerpoint</mime-type>
-    </mime-mapping>
-
-    <welcome-file-list>
-        <welcome-file>index.html</welcome-file>
-        <welcome-file>index.htm</welcome-file>
-        <welcome-file>index.jsp</welcome-file>
-    </welcome-file-list>
-
-</web-app>
-]]></programlisting>
-			<para>
-				The following bullets describe the main elements in the default <literal>web.xml</literal> file.
-				<itemizedlist>
-					<listitem>
-						<para>The <literal>&lt;Servlet&gt;</literal> XML element declares a given servlet and its configurations. The sample <literal>web.xml</literal> file above includes two &lt;Servlet&gt; elements.</para>
-						<itemizedlist>
-							<listitem>
-								<para>
-									The default servlet serves static resources and processes the requests that are not mapped to any servlet.
-									For details about default servlet configuration, see the <ulink url="http://tomcat.apache.org/tomcat-7.0-doc/default-servlet.html">Apache Tomcat Default Servlet Reference.</ulink>.
-								</para>
-							</listitem>
-							<listitem>
-								<para>
-									The jsp servlet serves the requests to JavaServer Pages. It is mapped to the URL pattern "*.jsp" and "*.jspx".
-									For details about jsp servlet configuration, see the <ulink url="http://tomcat.apache.org/tomcat-7.0-doc/jasper-howto.html">Apache Tomcat Jasper 2 JSP Engine.</ulink>.
-								</para>
-							</listitem>
-						</itemizedlist>
-					</listitem>
-					<listitem>
-						<para>The <literal>&lt;servlet-mapping&gt;</literal> XML element specifies the mapping between the servlet and URL pattern.</para>
-					</listitem>
-					<listitem>
-						<para>
-							The <literal>&lt;session-config&gt;</literal> XML element defines the session configuration for one web application. 
-							The sample <literal>web.xml</literal> file above specifies that the session timeout for all web applications will be 30 minutes by default.
-						</para>
-					</listitem>
-					<listitem>
-						<para>
-							The <literal>&lt;mime-mapping&gt;</literal> XML element defines a mapping between a filename extension and a mime type. 
-							When serving static resources, a "Content-Type" header will be generated based on these mappings.
-						</para>
-					</listitem>
-					<listitem>
-						<para>
-							The <literal>&lt;welcome-file-list&gt;</literal> XML element specifies a list of welcome files. 
-							When a request URI refers to a directory, the default servlet looks for a "welcome file" within that directory.
-							If the "welcome file" exists it will be served, otherwise 404 status or directory listing will be returned, depending on the default servlet configuration.
-						</para>
-					</listitem>
-				</itemizedlist>
-			</para>
-		</section>
-		
-			<section id="configuring-tomcat-contexts">
-				<title>Context Configuration</title>