Customer Dojo RPC Sample
===========================

Note. This sample is currently not working correctly on WebSphere - see TUSCANY-1990

This sample demostrates the SCA JSONRPC binding using a simple web app that
uses the RPC support of the Dojo Toolkit 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-dojo-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-dojo-webapp

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

See also the similar helloworld-jsonrpc-webapp sample which also uses the SCA JSONRPC binding
but uses SCA scaDomain.js script on the client instead of the Dojo Toolkit. 

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 Dojo Toolkit JSON-RPC support can be 
used to invoke the SCA service. 

The web app provided shows how the service can be called by using the DOJO toolkit. 

helloworld-dojo-webapp/
  build-dojo.xml                      - This file is an Ant script used by the 
                                        sample build process to download the Dojo Toolkit 
                                        and get it included in the WAR file 
                                        for use by the sample.
  src/
    main/
      java/
        helloworldjsonrpc/
          HelloWorldService.java      - service interface
          HelloWorldServiceImpl.java  - service implementation
      resources/
        jsonrpc.composite             - the SCA assembly for this sample
      webapp
        dojo/                         - the Dojo toolkit (this directory is created only 
                                        when you build the samples from the source distribution)
        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-dojo-webapp
ant package

This should result in a war file (sample-helloworld-dojo-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-dojo-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-dojo-webapp 
mvn

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


