Spring Bigbank Sample
=====================
This sample is different from the simple-bigbank sample in that it is made of 4 separate modules that represent the different aspects of a fictitious banking application.

simple-bigbank-spring (this module)
spring-bigbank-calculator
spring-bigbank-checkaccount
spring-bigbank-stockquote

To run the simple-bigbank-spring sample you need to first run the spring-bigbank-calculator, spring-bigbank-checkaccount and
spring-bigbank-stockquote samples. This will start the three applications on separate copies of the Tuscany runtime and make
the applications available as services. The simple-bigbank-spring sample is dependent on these services.

Start spring-bigbank-calculator sample
--------------------------------------

The spring-bigbank-calculator sample runs the Calculator composite which handles add, subtract, multiply and divide operations.
Each of these operations is implemented in a different language, including JavaScript, Groovy, Ruby and Python.

To run the Calculator composite and make it available as an RMI service for this sample do the following:

cd spring-bigbank-calculator
ant run

OR if you don't have ant, on Windows do

java -cp ..\..\lib\tuscany-sca-manifest.jar;target\sample-spring-bigbank-calculator.jar bigbank.calculator.server.CalculatorServer

and on *nix do

java -cp ../../lib/tuscany-sca-manifest.jar:target/sample-spring-bigbank-calculator.jar bigbank.calculator.server.CalculatorServer

.. Leave the server running

Start spring-bigbank-checkaccount sample
----------------------------------------

This contains all artifacts that deal with the account management within the bigbank.  The JMS service offered by the spring-bigbank-checkaccount sample
is used by the simple-bigbank-spring sample.

cd spring-bigbank-checkaccount
ant run

OR if you don't have ant, on Windows do

java -cp ..\..\lib\tuscany-sca-manifest.jar;target\sample-spring-bigbank-checkaccount.jar bigbank.account.checking.server.CheckingAccountServer

and on *nix do

java -cp ../../lib/tuscany-sca-manifest.jar:target/sample-spring-bigbank-checkaccount.jar bigbank.account.checking.server.CheckingAccountServer

.. Leave the server running

Start spring-bigbank-stockquote sample
--------------------------------------

This is a very simple web services based stock quote application which returns random stock quotes on request. Please note that the stockquote service
is not live and is implemented instead to allow for this application to always run without depending on the availability of a web service.

cd spring-bigbank-stockquote
ant run

OR if you don't have ant, on Windows do

java -cp ..\..\lib\tuscany-sca-manifest.jar;target\sample-spring-bigbank-stockquote.jar bigbank.stockquote.server.StockQuoteServer

and on *nix do

java -cp ../../lib/tuscany-sca-manifest.jar:target/sample-spring-bigbank-stockquote.jar bigbank.stockquote.server.StockQuoteServer

.. Leave the server running

Start simple-bigbank-spring sample
----------------------------------

This contains all artifacts that make up the bigbank application.  This is the application that the end user interacts with.

Start simple-bigbank-spring in the following way:

cd simple-bigbank-spring                  
ant run

OR if you don't have ant, on Windows do

java -cp ..\..\lib\tuscany-sca-manifest.jar;target\sample-simple-bigbank-spring.jar bigbank.client.BigBankClient

and on *nix do

java -cp ../../lib/tuscany-sca-manifest.jar:target/sample-simple-bigbank-spring.jar bigbank.client.BigBankClient


Sample Overview
---------------
This sample demonstrates a simple bank summary transaction using Spring for one of the components.
 
A request to the AccountComponent results in a request to the AccountDataComponent to get account data
which is based on a random stock quote price. Therefore results for this sample will vary on each run.


simple-bigbank-spring/
  src/
    main/
      java/
        bigbank/
          account/                - AccountComponent implementation using Spring
          accountdata/            - AccountDataComponent implementation using Spring
          sockquote/              - stockquote implementation using Java
          client/                 - starts the SCA Runtime and 
                                    deploys the BigBank.composite. 
                                    It then calls the deployed AccountService 
      resources/
        Account.composite         - SCA assembly for this sample
        BigBank.composite         - SCA assembly for this sample
        StockQuote.composite      - SCA assembly for this sample
    test/
      java/
        bigbank/
          BigBankTestCase.java    - JUnit test case 
  simple-bigbank-spring.png       - a pictorial representation of the sample 
                                    .composite file
  build.xml                       - the Ant build file
  pom.xml                         - the Maven build file        


Building And Running The Sample Using Ant
-----------------------------------------
With the binary distribution the sample can be built and run using Ant as follows:

cd spring-bigbank-calculator
ant compile
ant run

cd spring-bigbank-checkaccount
ant compile
ant run

cd spring-bigbank-stockquote
ant compile
ant run

cd simple-bigbank-spring
ant compile
ant run

You should see the following output. 
** Please note that balance amount will vary depending on the random stock value.

run:
     [java] Checking account: CHA_Customer_01, balance:1000.0
     [java] Savings account: SVA_Customer_01, balance:1000.0
     [java] Stock account: STA_Customer_01, symbol:IBM, quantity:100
     [java] Stock price for IBM: 104.64
     [java] Converted to EURO: 73.24799999999999
     [java] Account summary: currency: EURO, [CHA_Customer_01, balance:1000.0, S
VA_Customer_01, balance:1000.0, STA_Customer_01, symbol:IBM, quantity:100, STA_C
ustomer_01, symbol:IBM, quantity:100]


Building And Running The Sample Using Maven 
-------------------------------------------
With either the binary or source distributions the sample can be built and run 
using Maven as follows. 

cd simple-bigbank-spring
mvn

You should see the following output from the test phase.
** Please note that balance amount will vary depending on the random stock value.

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running bigbank.BigBankTestCase
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.502 sec

Results :

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0

This shows that the Junit test cases have run successfully. 
