Hello World JSONRPC Sample
==========================
This sample demostrates the JSONRPC binding using a simple web app that
talks JSONRPC to an SCA 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-helloworld-jsonrpc-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-helloworld-jsonrpc-webapp

The port and hostname will of course vary depending on your local installation. 

Sample Overview
---------------
The sample provides a single service with an operation that reflects
a greeting back to the caller. The service is exposed using the JSONRPC
binding. The web app provided shows how the SCA-provided JSON client can be 
used to invoke the SCA service. 

helloworld-jsonrpc-webapp/
  src/
    main/
      java/
        helloworldjsonrpc/
          HelloWorldService.java      - service interface
          HelloWorldServiceImpl.java  - service implementation
      resources/
        jsonrpc.composite             - the SCA assembly for this sample
      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
        HelloWorldJSONRPC.html        - the web application that calls the 
                                        SCA service via JSONRPC
        style.css                     - style sheet     
           
  helloworld-jsonrpc-webapp.png              - a pictorial representation of the 
                                        sample .composite file
  build.xml                           - the Ant build file that unpacks the
                                        dojo installation
  pom.xml                             - the Maven build file  

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

cd helloworld-jsonrpc-webapp
ant package

This should result in a war file (sample-helloworld-jsonrpc-webapp.war) in the target 
directory. Copy this war file to your web app deployment directory in your
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-helloworld-jsonrpc-webapp

The port and hostname will of course vary depending on your local installation. 

You should see a web page that allows you to send messages, via JSONRPC, to the 
application running in the Tuscany SCA Runtime

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 helloworld-jsonrpc-webapp 
mvn

Again this should result in a war file (sample-helloworld-jsonrpc-webapp.war) in the target 
directory. Follow the steps described in the previous section for running the web 
app and for the expected results.


