Calculator RMI Reference Sample
===============================

This sample illustrates the use of Tuscany RMI Binding to call reference 
services that are hosted as Java RMI services.  

The README in the samples directory (the directory above this) provides 
general instructions about building and running samples. Take a look there 
first. 

If you just want to run it to see what happens open a command prompt, first 
navigate to the calculator-rmi-service sample and do:

ant run

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

java -cp ..\..\lib\tuscany-sca-manifest.jar;target\sample-calculator-rmi-service.jar calculator.CalculatorServer

and on *nix do

java -cp ../../lib/tuscany-sca-manifest.jar:target/sample-calculator-rmi-service.jar calculator.CalculatorServer

Now you have the server running you need to open another command prompt, navigate
to this sample directory and do:

ant run

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

java -cp ..\..\lib\tuscany-sca-manifest.jar;target\sample-calculator-rmi-reference.jar calculator.CalculatorClient

and on *nix do

java -cp ../../lib/tuscany-sca-manifest.jar:target/sample-calculator-rmi-reference.jar calculator.CalculatorClient

Sample Overview
---------------
This sample extends the calculator sample by replacing the local wired 
connections with RMI bindings. Instead of local add, subtract, multiply and 
divide components, an RMI service implementation now provides the
add, subtract, multiply and divide interfaces and is hosted as an RMI server. 
References specified in the .composite file include an RMI binding which targets
this RMI server.

This sample adds a number of classes to the basic calculator sample:

calculator-rmi-reference/
  src/
    main/
      java/
        calculator/
          CalculatorService.java  - as calculator sample
          AddService.java         - as calculator sample
          SubtractService.java    - as calculator sample
          MultipleService.java    - as calculator sample
          DivideService.java      - as calculator sample
          CalculatorClient.java   - as calculator sample
          CalculatorServiceImpl.java - calls the RMI service
                                    that provides the target for the 
                                    RMI bindings in the composite 
      resources/
        CalculatorRMIReference.composite - the SCA assembly for this sample
    test/
      java/
        calculator/
          CalculatorRMIReferenceTestCase.java - JUnit test case
          CalculatorRMIServiceImpl.java - test RMI service to call
  calculator-rmi-reference.png    - a pictorial representation of the 
                                    .composite file
  build.xml                       - the Ant build file for the client
  pom.xml                         - the Maven build file   
  
Note. As this test creates and uses local network connections you may need to 
configure your firewall, if you are running one, to allow the test to run
successfully.         

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

The server provides an RMI server that the acts as a target for the SCA RMI 
bindings. Start a new console and use the following commands.

cd calculator-rmi-service
ant compile
ant run

This will run up the server and display the following.

run:
     [java] Starting of the SCA Calculator Application exposed as RMI Services... 
     [java] ...Press Enter to Exit...
     
The client is very similar to the calculator sample. It starts the SCA runtime
and calls each of the calculator operations. In doing this the RMI bindings
make calls out to the RMI server you started in the previous step. Start
a new console and use the following commands. 

cd calculator-rmi-reference
ant compile
ant run

You should see the following output from the run target.

run:
     [java] 3 + 2=5.0
     [java] 3 - 2=1.0
     [java] 3 * 2=6.0
     [java] 3 / 2=1.5
     
If you now return to the console window running the server and press enter the 
server should stop.     

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 calculator-rmi-reference
mvn

You should see the following output from the test phase.

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running calculator.CalculatorRMIReferenceTestCase
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 5.308 sec

Results :

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

This shows that the Junit test cases have run successfully.



