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 ..\..\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 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. 
