<?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>
