Calculator RMI Service Sample
=============================

This sample illustrates the use of Tuscany RMI Binding to expose component 
services as Java RMI Services. It also demonstrates how a simple Java RMI 
Client application invokes the SCA Application's services exposed as 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, navigate
to this sample directory and do:

ant run

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

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

and on *nix do

java -cp ../../features/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 the calculator-rmi-reference 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 service 
binding with an RMI binding. SO a java client can call the service exposed
by the SCA application using an RMI client.

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

calculator-rmi-service/
  src/
    main/
      java/
        calculator/
          CalculatorService.java  - as calculator sample
          CalculatorServiceImpl.java
          AddService.java         - as calculator sample
          AddServiceImpl.java
          SubtractService.java    - as calculator sample
          SubtractServiceImpl.java
          MultiplyService.java    - as calculator sample
          MultiplyServiceImpl.java
          DivideService.java      - as calculator sample
          DivideServiceImpl.java
          CalculatorClient.java   - (Not currently used) Uses the
                                    java naming service to
                                    look up the Calculator RMI service.
                                    It then calls add, subtract, multiple
                                    and divide methods on the service
          CalculatorServer.java   - starts the SCA Runtime and deploys 
                                    the CalculatorRMIServer.composite. 
                                    In doing this the SCA RMI binding
                                    acts to expose the CalculatorService
                                    over RMI.
      resources/
        CalculatorRMIServer.composite - the SCA assembly for this sample
    test/
      java/
        calculator/
          CalculatorRMIServerTestCase.java - JUnit test case
  calculator-rmi-service.png     - a pictorial representation of the 
                                    .composite file
  build.xml                       - the Ant build file for the server
  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. Two 
build files are used to support client and server functions. 

The server starts the SCA runtime and loads the SCA calculator application 
which exposes an RMI service. 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 locates the RMI service that the SCA runtime is exposing and calls each of 
the calculator operations. 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-service
mvn

You should see the following output from the test phase.

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

Results :

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

This shows that the Junit test cases have run successfully. 
