Calculator Sample Exposing Web Services In A WebApp
===================================================
This sample uses the same code as the calculator sample, it deploys the
sample wrapped in a web app and exposes the AddService as a web service. 

The README in the samples directory (the directory above this) provides 
general instructions about building and running samples. Take a look there 
first. 

As this sample provides a web app there is a manual step where the WAR file
that contains the sample is copied to your web app container. If you just want 
to give this sample a go, deploy the WAR file (target/sample-calculator-ws-webapp.war)
to your web application server.

To save space, the WAR file isn't included in the binary distribution. You can
build it by following the instructions below in "Building And Running The Sample
Using Ant" or "Building And Running The Sample Using Maven". 
  
Once the web app is deployed use your browser to visit the following URL;

http://localhost:8080/sample-calculator-ws-webapp

The sample is configured to use a service on port 8080. If your servlet container
is using a port other than 8080 then you will need to edit the Calculator.composite
and change the uri attribute of the <binding.ws> used by the CalculatorServiceComponent
to use the correct port.

Sample Overview
---------------
The sample provides a single calculator service with a default SCA (java) 
binding. The CalculatorClient exercises this interface by calling add, 
subtract, multiply and divide operations. This results in messages passing to 
the appropriate components in the composite.

calculator-webapp/
  src/
    main/
      java/
        calculator/
          AddService.java         - As calculator sample
          AddServiceImpl.java
          CalculatorClient.java   - As calculator sample
          CalculatorService.java  - As calculator sample
          CalculatorServiceImpl.java
          DivideService.java      - As calculator sample
          DivideServiceImpl.java
          MultiplyService.java    - As calculator sample
          MultiplyServiceImpl.java
          SubtractService.java    - As calculator sample
          SubtractServiceImpl.java
      resources/
        Calculator.composite      - As calculator sample except that the 
                                    connection between the CalculatorService
                                    and the AddService is web services
      webapp
        META-INF/
          sca-contribution.xml    - specifies the composite to be deployed
        WEB-INF/
          web.xml                 - defines the listener that starts up the 
                                    Tuscany SCA runtime and maps service
                                    calls to the TuscanyServlet
        calc.jsp                  - the web application that makes use of the
                                    SCA application 
           
  calculator.png - a pictorial representation of the sample .composite file
  build.xml      - the Ant build file
  pom.xml        - the Maven build file
  README         - this file  

Building And Running The Sample Using Ant
-----------------------------------------
With the binary distribution the sample can be built using Ant as 
follows

cd calculator-ws-webapp
ant package

This should result in a war file (sample-calculator-ws-webapp.war) in the target 
directory. Copy this war file to your web app deployment directory in you
web app container. 

The process for getting the web app running will depend on which web app container
you are using. For example, if you are using Tomcat then it is simply a matter
of copying the WAR file to the webapps directory. 

Once the web app is deployed use your browser to visit the following URL;

http://localhost:8080/sample-calculator-ws-webapp

The port and hostname will of course vary depending on your local installation. 

You should see the following output.

Expression	Result
2 + 3	5.0
3 - 2	1.0
3 * 2	6.0
3 / 2	1.5

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-ws-webapp 
mvn

Again this should result in a war file (sample-calculator-ws-webapp.war) in the target 
directory. Follow the steps described in the previous section for running the web 
app and for the expected results.


