= The AriesTrader Sample

== Prereqs

NOTE::
These instructions are for the 1.0.0 release of Aries.
Instructions for older releases can be found link:archiveinstructions.html[here] . In the 0.2-incubating release the AriesTrader sample was changed such that it is no longer required for you to install Derby independently.
The Derby version included in the sample is fully leveraged internally in the sample and therefore no additional Derby installation is required.
However, there are steps required to initialize the Database from within the sample itself (see instructions below).

=== Creating the OSGi platform (equinox-test-harness) for AriesTrader

Download and unzip the source zip for the link:aries:downloads.html[latest release]  of Aries Samples and build the equinox-test-harness module under ariestrader:

 cd samples-1.0.0-incubating/ariestrader/assemblies/equinox-test-harness
 mvn install

This procedure will pull in the binaries from the latest release and its dependencies.

=== Alternative build using Apache Aries trunk.

As an alternative to using the released version you can also choose to work with the latest, unreleased code.
This will require the use of subversion to checkout the code followed by building the entire Apache Aries project.
Directions are provided here:  link:aries:buildingaries.html[Building Aries instructions] .

=== Starting the Equinox Test Harness to run the AriesTrader sample

AriesTrader needs a test harness to run in.
For this purpose we are using an Equinox assembly that pulls in all of the necessary dependencies.

The first task is to start the Apache Aries modules in an OSGi framework using the Eclipse Equinox test harness

 cd samples-1.0.0-incubating/ariestrader/assemblies/equinox-test-harness/target
 java -jar osgi-3.5.0.v20090520.jar -console

The OSGi console should start up, the 'ss' command should show the active bundles but the AriesTrader application is not yet installed (with the exception of the ariestrader derby datasource which is started with the test harness for convenience).

=== Installing AriesTrader in the Equinox Test Harness

To install the AriesTrader application simply copy the eba for AriesTrader into the target/load directory, you will need to create this directory first.
+ For convenience the AriesTraders EBAs are copied into the target directory as part of creating the OSGi Equinox test harness.

When using the "JDBC" only AriesTrader configuration which supports only jdbc persistence:

 cp org.apache.aries.samples.ariestrader.jdbc-*.eba load/

When using the "All" AriesTrader configuration which supports all currently available persistence modes:

 cp org.apache.aries.samples.ariestrader.all-*.eba load/

Now the 'ss' command should show all of the AriesTrader bundles in state 'ACTIVE'.

If you subsequently delete org.apache.aries.samples.ariestrader.jdbc-_.eba or org.apache.aries.samples.ariestrader.all-_.eba from the target/load directory the application will be uninstalled.

=== Accessing and using the AriesTrader sample

Point your browser at http://localhost:8080/ariestrader/

Select the "Configuration" tab and the "Configure AriesTrader run-time parameters" choice.
Then select from among the available runtime modes (defauls to JDBC).
Be sure to click "update config" to save your selection.

At the moment the following persistence modes are available when using the "all" EBA:

* JDBC persistence
* JPA application managed entity manager persistence
* JPA container managed entity managers using declarative transaction support

By default, the sample starts with JDBC persistence.
To select another persistence mechanism see the directions under "Accessing and using the AriesTrader sample.

After selecting the persistence mode you must create the AriesTrader Database tables and indexs.
Select the "Configuration" tab and the "(Re)-create AriesTrader Tables and Indexes".

Next, you must seed the database with test content.
Once again go to the "Configuration" tab but this time select "(Re)-populate AriesTrader Database" from the available choices to seed the database with a default set of users and stock quotes.
You will see a number of quotes (default is 400) and users (default is 200) created.

Select the "Trading & Portfolios" tab to use the mock trade application or the "Primitives" tab to run some of the web primitive tests (PingJSPEL is not currently working).
You can also run the "Test AriesTrader Scenario" from the "Configuration" tab which will launch a new browser window and step through a trading scenario with each reload of the page.

=== About the AriesTrader Sample

The AriesTrader sample is a modified version of the Apache Geronimo DayTrader sample.
It has been somewhat simplified and reorganized to support the Apache Aries programming model.

The AriesTrader sample bundles are organized like this:

image::downloads/archived/0.1-incubating/ariesTraderOverview2.png[at2]
