<?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="installing.greenpages">
  <title>Installing and Running @greenpages@</title>
    <titleabbrev>Installing and Running @greenpages@</titleabbrev>
  <section id="installing.greenpages.introduction">
    <title>Introduction</title>
    <para>@greenpages@ is a simple application that allows users to search an online email address directory. Each listing
    in the directory details the relevant email addresses and the name of the owner. @greenpages@ has only three screens:
    the search screen, the results screen and the listing detail screen.</para>
    <para>In the search screen, users can enter search criteria to be matched against the listings in the directory.
    The result screen displays any listings that match the criteria entered by the user. The listing detail screen
    shows all the data known about a given listing.</para>
    <para>Despite its simplicity, @greenpages@ is designed to demonstrate many different @webserv@ features and to
    act as a template from which other modular applications can be built. In particular, @greenpages@ demonstrates: 
    <itemizedlist mark="bullet">
      <listitem><para>bundle dependencies with <literal>Import-Package</literal>,</para></listitem>
      <listitem><para>load-time weaving with JPA and AspectJ,</para></listitem>
      <listitem><para>bundle classpath scanning, and</para></listitem>
      <listitem><para>service export, lookup and injection.</para></listitem>
    </itemizedlist></para>
    <para>In addition to demonstrating common @webserv@ features, @greenpages@ demonstrates integration with:
    <itemizedlist mark="bullet">
      <listitem><para>Spring Framework 3.0;</para></listitem>
      <listitem><para>FreeMarker 2.3;</para></listitem>
      <listitem><para>EclipseLink 1.0.0;</para></listitem>
      <listitem><para>H2 1.0.71; and</para></listitem>
      <listitem><para>Commons DBCP 1.2.2.</para></listitem>
    </itemizedlist>
    </para>
	<para>The @greenpages@ application is packaged as a PAR file containing four bundles.
       <mediaobject>
         <imageobject role="fo">
          <imagedata fileref="images/installing-greenpages/greenpages.png" format="PNG" align="center" width="11cm"/>
        </imageobject>
        <imageobject role="html">
          <imagedata fileref="images/installing-greenpages/greenpages.png" format="PNG" align="center" width="13cm"/>
        </imageobject>
       </mediaobject>
    </para>
    <para>
        The <literal>greenpages.db</literal> bundle provides access to an external database and publishes a
		<literal>javax.sql.DataSource</literal> service.
    </para>
    <para>
		The <literal>greenpages.app</literal> bundle exports a <literal>greenpages</literal> package containing
		<literal>Directory</literal> and <literal>Listing</literal> interfaces.
    </para>
    <para>
		The <literal>greenpages.jpa</literal> bundle imports the <literal>greenpages</literal> package and
		uses the <literal>javax.sql.DataSource</literal> service to
		access the external database and publishes its contents as a <literal>greenpages.Directory</literal> service.
    </para>
    <para>
		The <literal>greenpages.web</literal> web application bundle imports the <literal>greenpages</literal> package and uses the
		<literal>greenpages.Directory</literal> service to respond to web requests.
    </para>
  </section>
  
  <section id="installing.greenpages.obtaining">
    <title>Obtaining @greenpages@</title>
    <para>This document provides instructions for building the complete @greenpages@ application and running it in @webserv@. 
    </para>
<para>To get the completed @greenpages@ application, including tests and explanatory skeleton parts:
    <orderedlist>
      <listitem>
        <para>download the latest Zip file from <programlisting>@greenpages.download.url@</programlisting></para>
      </listitem>
      <listitem>
        <para>extract all the files from the Zip file to a convenient directory (preserving the directory structure).</para>
      </listitem>
    </orderedlist>
</para>
<para>To extract the files on Windows:
<programlisting>prompt> mkdir c:\springsource\samples
prompt> cd c:\springsource\samples
prompt> jar xf c:\path\to\@greenpages.zip.file@
prompt> set GREENPAGES_HOME=c:\springsource\samples\@greenpages.expanded.dir@</programlisting>
</para>
<para>To extract the files on Unix systems:
<programlisting>prompt$ mkdir -p /opt/springsource/samples 
prompt$ cd /opt/springsource/samples 
prompt$ unzip /path/to/@greenpages.zip.file@ 
prompt$ export GREENPAGES_HOME=/opt/springsource/samples/@greenpages.expanded.dir@
</programlisting>
</para>
<para>The environment variable <literal>GREENPAGES_HOME</literal> set here is not used by the projects, but is used as a shorthand
    in the instructions that follow.
</para>
<para>The @greenpages@ Zip file contains several directories with names that start <literal>greenpages</literal>.
    They contain the completed application which can be built and tested (as described in the next section).
</para>
  </section>

  <section id="installing.greenpages.building">
    <title>Building and Installing @greenpages@</title>
    <section id="installing.greenpages.building.mvn">
      <title>Building with @maven.full@</title>
<para>@greenpages@ uses @maven.full@ as its primary build system. Each bundle of the application can be built
    separately and the entire application can built and assembled into a PAR file from a single location.
    To build the application and assemble it into a PAR
    file:
  <orderedlist>
    <listitem>
        <para>Make <code>$GREENPAGES_HOME/</code> the current directory.</para>
    </listitem>
    <listitem>
        <para>Run the command
        <code>mvn package</code>. The first time this is run several files will be downloaded
        from @maven@ repositories. Subsequent runs will not need to do this.
        </para>
    </listitem>
    <listitem>
        <para>Verify that the 
        <code>greenpages-@greenpages.version@.par</code> file exists in 
        <code>$GREENPAGES_HOME/greenpages/target</code>.
        </para>
    </listitem>
  </orderedlist>
</para>
</section>

<section id="installing.greenpages.building.par.provided">
      <title>Installing Dependencies into @webserv@</title>
      <para>
      Unlike traditional Java EE applications, @greenpages@ does not package all of its dependencies inside its
      deployment unit. Instead, it relies on the mechanisms of OSGi to locate its dependencies at runtime.
      When running an OSGi application on @webserv@, these dependencies can be loaded into memory as needed, but first they
      must be made available to @webserv@.
      </para>
      <para>The Maven build included with @greenpages@ uses the <code>dependency:copy-dependencies</code> plugin to gather 
            all the artifacts that @greenpages@ depends on that are not supplied by the @webserv@ runtime. These dependencies 
            can then be installed into the @webserv@ repository. Dependencies are gathered automatically during the
			<code>package</code> phase. These dependencies can be found in
			<literal>$GREENPAGES_HOME/greenpages/target/par-provided</literal>. To install dependencies
            simply copy all the <code>*.jar</code> files from this directory into <literal>$SERVER_HOME/repository/usr</literal>
			(where <literal>$SERVER_HOME</literal> is the @webserv@ installation directory).
      </para>

<para>Installing dependencies on Windows:
<programlisting>prompt> cd %GREENPAGES_HOME%\greenpages 
prompt> copy target\par-provided\* %SERVER_HOME%\repoorg.apache.commons.fileuploadsitory\usr
</programlisting>
</para>

<para>Installing dependencies on UNIX:
<programlisting>prompt$ cd $GREENPAGES_HOME/org.apache.commons.fileuploadgreenpages 
prompt$ cp target/par-provided/* $SERVER_HOME/repository/usr
</programlisting>
</para>
<para>
  Notice that @webserv@ will not necessarily see these dependencies unless its repository indexes are rebuilt.
  Different repositories behave differently in this respect; some are passive (their indexes are built only once upon startup)
  and some are active (they can detect new files or files being removed dynamically).
  The <literal>usr</literal> repository is active so there is no
  need to restart @webserv@ when copying these files.
  The next time @webserv@ is started the <literal>-clean</literal> option will cause @webserv@ to re-scan the repository directories in any case.
  It is always safe to start @webserv@ with the <literal>-clean</literal> option.
</para>
</section>

<section id="installing.greenpages.building.db">
      <title>Starting and Configuring the Database</title>
<para>@greenpages@ uses the H2 database to store all its data. Before starting the application, start the database server and populate the database with data.</para>
          <orderedlist>
              <listitem><para>Change to the <code>$GREENPAGES_HOME/db</code> current directory.  On Unix:</para>
		<programlisting>prompt$ cd $GREENPAGES_HOME/db</programlisting>
		<para>On Windows:</para>
		<programlisting>prompt> cd %GREENPAGES_HOME%\db</programlisting>
              </listitem>
              <listitem><para>Run the database startup script appropriate to the operating system.  For Unix, this is <literal>run.sh</literal>, run in the background:</para>
		<programlisting>prompt$ sh run.sh &amp;</programlisting>
		<para>Press Return to continue.</para>
		<para>On Windows, run the <literal>run.bat</literal> command:</para>
		<programlisting>prompt> run</programlisting>
		<para>For both platforms, the command might invoke a browser window offering a connection to the database; close this window.</para>
              </listitem>
              <listitem><para>Run the data population script appropriate to the operating system.  For Unix, this is <literal>data.sh</literal>:</para>
		<programlisting>prompt$ sh data.sh</programlisting>
		<para>On Windows, run the <literal>data.bat</literal> command:</para>
		<programlisting>prompt> data</programlisting>
              </listitem>
          </orderedlist>

<para>
Run these commands once to start a database server for H2; the server will continue to run in the background. 
</para>
</section>

<section id="installing.greenpages.building.par">
      <title>Installing and Starting @greenpages@ PAR</title>

<para>To install the @greenpages@ PAR into @webserv@ and start it:
          <orderedlist>
              <listitem><para>Copy the @greenpages@ PAR  to the <code>$SERVER_HOME/pickup</code> directory.  On Unix:</para>
		<programlisting>prompt$ cd $SERVER_HOME
prompt$ cp $GREENPAGES_HOME/greenpages/target/greenpages-@greenpages.version@.par pickup/</programlisting>
		<para>On Windows:</para>
		<programlisting>prompt> cd %SERVER_HOME%
prompt> copy %GREENPAGES_HOME%\greenpages\target\greenpages-@greenpages.version@.par pickup\</programlisting>
              </listitem>
              <listitem><para>Start @webserv@ with the <literal>-clean</literal> option.  On Unix:</para>
              <programlisting>prompt$ $SERVER_HOME/bin/startup.sh -clean</programlisting> 
	      <para>On Windows:</para>
              <programlisting>prompt> "%SERVER_HOME%"\bin\startup.bat -clean</programlisting> 
              </listitem>
              <listitem>
<para>Verify that @greenpages@ starts correctly by checking in the @webserv@ output for the log message:
<programlisting>&lt;DE0005I&gt; Started par 'greenpages' version '@greenpages.version@'. </programlisting>
</para>
              </listitem>
          </orderedlist>
</para>

</section>

</section>

<section id="installing.greenpages.browsing">
      <title>Browsing the @greenpages@ Application</title>
      <para>
          Once installed and started, the @greenpages@ 
          application can be accessed with a web browser using the address 
          <ulink url="http://localhost:8080/greenpages">http://localhost:8080/greenpages</ulink>.
      </para>
<para>
    From the home page, a search query can be entered into the search box:
    <mediaobject>
        <imageobject role="fo">
            <imagedata fileref="images/installing-greenpages/browse-1.png" format="PNG" align="center" width="12cm"/>
        </imageobject>
        <imageobject role="html">
            <imagedata fileref="images/installing-greenpages/browse-1.png" format="PNG" align="center"/>
        </imageobject>
    </mediaobject>
</para>

<para>
    After entering a query into the search box, the results page shows all the matches from the 
    directory:
    <mediaobject>
        <imageobject role="fo">
            <imagedata fileref="images/installing-greenpages/browse-2.png" format="PNG" align="center" width="12cm"/>
        </imageobject>
        <imageobject role="html">
            <imagedata fileref="images/installing-greenpages/browse-2.png" format="PNG" align="center"/>
        </imageobject>
    </mediaobject>
</para>

<para>
    Clicking on <emphasis>view</emphasis>, next to an entry in the search listing, displays the full details for that 
    listing entry:
    <mediaobject>
        <imageobject role="fo">
            <imagedata fileref="images/installing-greenpages/browse-3.png" format="PNG" align="center" width="12cm"/>
        </imageobject>
        <imageobject role="html">
            <imagedata fileref="images/installing-greenpages/browse-3.png" format="PNG" align="center"/>
        </imageobject>
    </mediaobject>
</para>
</section>

<section id="installing.greenpages.tools">
    <title>Running @greenpages@ from Eclipse</title>
    <para>Using Eclipse and the @webserv@ tools, it is possible to run applications directly from the IDE. 
      As changes are made to the application in the IDE,
      they can be automatically applied to the running application allowing for rapid feedback of changes in function.
    </para>

    <section id="installing.greenpages.tools.importing">
        <title>Importing the @greenpages@ Projects into Eclipse</title>
        <para>
            Before starting the @greenpages@ application from Eclipse, import the projects:
            <orderedlist>
                <listitem>
<para>Open the Import Wizard using 
    <menuchoice><guimenu>File</guimenu><guimenuitem>Import</guimenuitem></menuchoice>.
</para>
                  </listitem>
                  <listitem>
<para>From the Import Wizard select 
    <menuchoice><guimenu>General</guimenu><guimenuitem>Existing Projects into Workspace</guimenuitem></menuchoice>
and click <emphasis>Next</emphasis>:
    <mediaobject>
        <imageobject role="fo">
            <imagedata fileref="images/installing-greenpages/import-projects2.png" format="PNG" align="center" width="8cm"/>
        </imageobject>
        <imageobject role="html">
            <imagedata fileref="images/installing-greenpages/import-projects2.png" format="PNG" align="center"/>
        </imageobject>
    </mediaobject>
</para>
</listitem>
                  <listitem>
<para>Click <guibutton>Browse…</guibutton> and select <code>$GREENPAGES_HOME/</code> as the root directory.</para>
                  </listitem>
                  <listitem>
<para>In the <emphasis>Import Projects</emphasis> window, select all the projects which include <literal>greenpages</literal> in their name and click <emphasis>Finish</emphasis>:
    <mediaobject>
        <imageobject role="fo">
            <imagedata fileref="images/installing-greenpages/import-projects3.png" format="PNG" align="center" width="15cm"/>
        </imageobject>
        <imageobject role="html">
            <imagedata fileref="images/installing-greenpages/import-projects3.png" format="PNG" align="center"/>
        </imageobject>
    </mediaobject>
</para>
                  </listitem>
                  <listitem>
<para>Validate that the imported projects appear in Package Explorer:

    <mediaobject>
        <imageobject role="fo">
            <imagedata fileref="images/installing-greenpages/import-projects4.png" format="PNG" align="center" width="5cm"/>
        </imageobject>
        <imageobject role="html">
            <imagedata fileref="images/installing-greenpages/import-projects4.png" format="PNG" align="center"/>
        </imageobject>
    </mediaobject>
    
There may be compilation errors at this stage.
</para>
                  </listitem>
              </orderedlist>
          </para>
      </section>
      
      <section id="installing.greenpages.tools.configuring">
          <title>Configuring @webserv@ Target Runtime</title>
          <para>
              Projects for @webserv@ are associated with a @virgo@ @webserv@ runtime environment in Eclipse. This is to allow
              launching and testing from within Eclipse, and also to allow classpath construction in Eclipse to
              mirror the dynamic classpath in the @webserv@ runtime.
          </para>
          <para>
            Compilation errors in the previous step will be resolved here.
          </para>
          <para>
              To configure a @webserv@ runtime environment:
          </para>
          <orderedlist>
              <listitem>
                  <para>Open <menuchoice><guimenu>Window</guimenu><guisubmenu>Show View</guisubmenu><guimenuitem>Other…</guimenuitem></menuchoice>.</para>
              </listitem> 
              <listitem>
<para>In the <emphasis>Show View</emphasis> dialog choose 
<menuchoice><guimenu>Server</guimenu><guimenuitem>Servers</guimenuitem></menuchoice> to make the servers view visible:
    <mediaobject>
        <imageobject role="fo">
            <imagedata fileref="images/installing-greenpages/servers.png" format="PNG" align="center" width="6cm"/>
        </imageobject>
        <imageobject role="html">
            <imagedata fileref="images/installing-greenpages/servers.png" format="PNG" align="center"/>
        </imageobject>
    </mediaobject>
</para>
              </listitem>
              <listitem>
<para>Right-click in the <emphasis>Servers</emphasis> (which may not be empty) view and select 
    <menuchoice><guimenu>New</guimenu><guimenuitem>Server</guimenuitem></menuchoice>.
</para>
              </listitem>
              <listitem>
<para>In the <emphasis>New Server</emphasis> dialog, choose 
<menuchoice><guimenu>EclipseRT</guimenu><guimenuitem>Virgo Web Server</guimenuitem></menuchoice> 
    and click <emphasis>Next</emphasis>.
</para>
              </listitem>
              <listitem>
<para>Click <guibutton>Browse</guibutton> and select the <code>$SERVER_HOME</code> directory. Ensure that a JRE is selected
supporting Java 1.6 or above.
Click <guibutton>Finish</guibutton> to complete creation of the server:
    <mediaobject>
        <imageobject role="fo">
            <imagedata fileref="images/installing-greenpages/new-server.png" format="PNG" align="center" width="9cm"/>
        </imageobject>
        <imageobject role="html">
            <imagedata fileref="images/installing-greenpages/new-server.png" format="PNG" align="center"/>
        </imageobject>
    </mediaobject>
</para>
              </listitem>
              <listitem>
<para>Select all projects (except <emphasis>Servers</emphasis>) in <emphasis>Package Explorer</emphasis>.
Right-click on the projects and choose <guimenuitem>Close Project</guimenuitem> 
and then <guimenuitem>Open Project</guimenuitem>.
</para>
              </listitem>
          </orderedlist>

<para>
It is possible that there remain spurious build errors from Eclipse (see the <emphasis>Problems</emphasis> view), in which case
a project clean build may clear the problems. Select <menuchoice><guimenu>Project</guimenu><guimenuitem>Clean…</guimenuitem></menuchoice>
from the main menu, and choose to <emphasis>Clean all projects</emphasis>.
It may be necessary to repeat this on a few projects.
(This process is sometimes known as the <quote>Eclipse dance</quote>.)
</para>
<para>
Despite the dance steps outlined, there will remain some <emphasis>Warnings/Errors</emphasis> like this:
<mediaobject>
    <imageobject role="fo">
        <imagedata fileref="images/installing-greenpages/problem-warning.png" format="PNG" align="center" width="14cm"/>
    </imageobject>
    <imageobject role="html">
        <imagedata fileref="images/installing-greenpages/problem-warning.png" format="PNG" align="center"/>
    </imageobject>
</mediaobject>
It is safe to ignore these.
</para>
<para>
	When the @virgo@ Tooling starts the @webserv@ it uses a &lsquo;warm start&rsquo; by default.
	It is useful to set the <literal>-clean</literal> option so that every server start is a clean one.
	This is done by an option on the @webserv@ Overview window, which is obtained by opening the @webserv@ entry in the Servers window. 
	(Double-click, or right-click and choose Open.)	
	The check box is labelled &lsquo;Start server with -clean option&rsquo;.
	Close the window before proceeding.
</para>
</section>

<section id="installing.greenpages.tools.run">
          <title>Running @greenpages@ from Within Eclipse</title>
          <para>
              Now that @greenpages@ is successfully imported into Eclipse, run the project directly from within the IDE.</para>
           <para>If the @greenpages@ PAR file was previously copied to the <literal>pickup</literal> directory, be sure it is now removed so that
				it does not conflict with the deployment of the Eclipse project.  On Unix:</para>
	  <programlisting>prompt$ cd $SERVER_HOME/pickup
prompt$ rm greenpages-@greenpages.version@.par</programlisting>
	
	  <para>On Windows:</para>
	  <programlisting>prompt> cd %SERVER_HOME%\pickup
prompt> del greenpages-@greenpages.version@.par</programlisting>

	  <para>Also, to prevent conflicts with the server configured in Eclipse, stop a currently-running @webserv@ by typing <literal>Control-C</literal> in the console window.</para>

          <para>
              To run @greenpages@ from within Eclipse:
              <orderedlist>
                  <listitem>
                      <para>
                      Right click on the @webserv@ instance in the <emphasis>Servers</emphasis> view and select the <menuchoice><guimenu>Add and Remove…</guimenu></menuchoice>
                      menu item.
     <mediaobject>
        <imageobject role="fo">
            <imagedata fileref="images/installing-greenpages/addedtoserver.png" format="PNG" align="center" width="10cm"/>
        </imageobject>
        <imageobject role="html">
            <imagedata fileref="images/installing-greenpages/addedtoserver.png" format="PNG" align="center"/>
        </imageobject>
    </mediaobject>
    </para>
    </listitem>
    <listitem><para>
     Add <emphasis>greenpages</emphasis> (which is the containing project or PAR) to the server and finish.
    </para></listitem>                     
                  <listitem>
                      <para>To start @webserv@ from within Eclipse right-click on the @webserv@ node in the Servers window and choose <guimenuitem>Start</guimenuitem>.
                      The <emphasis>Servers</emphasis> view should now show the server and the added project:
    <mediaobject>
        <imageobject role="fo">
            <imagedata fileref="images/installing-greenpages/installed.png" format="PNG" align="center" width="14cm"/>
        </imageobject>
        <imageobject role="html">
            <imagedata fileref="images/installing-greenpages/installed.png" format="PNG" align="center"/>
        </imageobject>
    </mediaobject>
                      </para>
                  </listitem>
                  <listitem>
                      <para>
							Verify that @greenpages@ is started correctly by checking for:
<programlisting>&lt;DE0005I&gt; Started par 'greenpages' version '@greenpages.version@'.
</programlisting>
							in the Console window.
                      </para>
                  </listitem>
              </orderedlist>
          </para>
          <para>
          (<emphasis>If errors are shown implying that @greenpages@ failed to be installed, this may be because some dependencies were not
          copied to @webserv@, as described in <xref linkend="installing.greenpages.building.par.provided"/>. Check this.</emphasis>)
          </para>
          
          <para>Once installed and started @greenpages@ is again available from a web browser at the address 
              <ulink url="http://localhost:8080/greenpages">http://localhost:8080/greenpages</ulink>.
          </para>
      </section>
  </section>

</chapter>
