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 you web application server. 

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.


