Hello World Web Service SDO WebApp Sample
=========================================
This sample demonstrates an SCA web service binding which works with
SDO and runs as a web application.  

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 is built and copied to your web app container. 
See the sections below for instructions on building the war.

Once the web app is deployed use your browser to visit the following URL;

   http://localhost:8080/sample-helloworld-ws-sdo-webapp

The port and hostname will of course vary depending on your local installation.

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 helloworld.wsdl file
and change the location attribute of the <wsdlsoap:address> element in the
HelloWorldSoapPort definition to use the correct port.

The resulting web page displayed should show:

   Hello John Smith, Jane Doe!
   
Sample Overview
---------------
The sample builds a war with a single JSP (HelloWorld.jsp). This JSP 
calls an SCA component with an SDO parameter. This in turn calls another
SCA component with the SDO parameter. The contents of the SDO are then 
returned as a simple string. This sample shows how SDO objects can 
be passed into and between services in the context of a web application. 


helloworld-jsonrpc-webapp/
  src/
    main/
      java/
        helloworld/ 
          HelloWorld.java             - service interface
          HelloWorldComponent.java    - first service implementation
          HelloWorldmpl.java          - second service implementation
      resources/
        wsdl/
          helloworld.wsdl             - the web services description
          helloworld.xsd              - the SDO description
        helloworldws.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
        HelloWorld.jsp                - the web application that calls the 
                                        SCA service passing in an SDO   
           
  helloworld-ws-sdo-webapp.png        - a pictorial representation of the 
                                        sample .composite file
  build.xml                           - the Ant build file 
  pom.xml                             - the Maven build file     

Building The Sample Using Ant
-----------------------------------------
With the binary distribution the sample can be built using Ant as 
follows

cd helloworld-ws-sdo-webapp
ant package

This should result in a war file (sample-helloworld-ws-sdo-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-ws-sdo-webapp

The port and hostname will of course vary depending on your local installation. 

Building The Sample Using Maven
-------------------------------
With either the binary or source distributions the sample can be built and run
using Maven as follows. When using Maven you don't need to run the helloworld-
ws-service sample first as Maven does this for you.

cd helloworld-ws-sdo-webapp
mvn

That should end with "BUILD SUCCESSFUL" and create the target/sample-helloworld-ws-sdo-webapp.war
which you can copy to your server.
