Hello World Web Service References Sample
=========================================
This sample demonstrates an SCA reference that uses a web service binding running
over a JMS protocl. 

The README in the samples directory (the directory above this) provides 
general instructions about building and running samples. Take a look there 
first. 

If you just want to run it to see what happens you need to run the server first 
so open a command prompt, navigate to the helloworld-ws-service-jms sample directory 
and do 

ant run

OR if you don't have ant, on Windows do

java -cp ..\..\lib\tuscany-sca-manifest.jar;target\sample-helloworld-ws-service-jms.jar helloworld.HelloWorldServer

and on *nix do

java -cp ../../lib/tuscany-sca-manifest.jar:target/sample-helloworld-ws-service-jms.jar helloworld.HelloWorldServer


Once the server is running open a command prompt, navigate to this sample 
directory and do:

ant run

OR if you don't have ant, on Windows do

java -cp ..\..\lib\tuscany-sca-manifest.jar;target\sample-helloworld-ws-reference-jms.jar helloworld.HelloWorldJmsClient

and on *nix do

java -cp ../../lib/tuscany-sca-manifest.jar:target/sample-helloworld-ws-reference-jms.jar helloworld.HelloWorldJmsClient


Sample Overview
---------------
The sample provides two components that are have a reference with a 
web service binding. The binding refers to WSDL that identifies the service
exposed by the helloworld-ws-service-jms sample. 

helloworld-ws-reference-jms/
  src/
    main/
      java/
        helloworld/
          HelloWorldService.java          - interface description for 
                                            HelloWorldServiceComponent
          HelloWorldServiceComponent.java - component implementation
          HelloWorldJmsClient.java         - starts the SCA Runtime and 
                                            deploys the helloworldwsjmsclient
                                            .composite. It then calls the 
                                            HelloWorldServiceComponent
      resources/
        wsdl
          helloworld.wsdl                 - the service description that the 
                                            SCA reference uses to bind to 
        helloworldwsjmsclient.composite   - the SCA assembly for this sample
        helloworldwsjms.composite         - the SCA assembly for the server
                                            that is used by the JUnit tests
        logging.properties                - log4j configuration file
    test/
      java/
        helloworld/
          HelloWorldJMSClientTestCase.java - JUnit test case
  helloworld-ws-reference.png             - a pictorial representation of the 
                                            sample .composite file
  build.xml                               - the Ant build file
  pom.xml                                 - the Maven build file        

Building And Running The Sample Using Ant
-----------------------------------------
With the binary distribution the sample can be built and run using Ant. Before
you do this start up the service that the reference will talk to. To do this
run up the helloworld-ws-service-jms test. Take a look at the README in that sample
and you will see you need the following commands

cd helloworld-ws-service-jms
ant run

Once done you can now compile and run this sample using the following commands;

cd helloworld-ws-reference-jms
ant compile
ant run

You should see the following output from the run target.

run:
     [java] log4j:WARN No appenders could be found for logger (org.apache.axiom.
om.util.StAXUtils).
     [java] log4j:WARN Please initialize the log4j system properly.
     [java] Injected helloWorldService
     [java] Called getGreetings
     [java] Hello World

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. When using Maven you don't need to run the helloworld-
ws-service-jms sample first as the JUnit test does this for you. 

cd helloworld-ws-reference-jms
mvn

You should see the following output from the test phase.

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running helloworld.HelloWorldJmsClientTestCase
08-Jan-2008 10:40:15 org.apache.tuscany.sca.binding.ws.axis2.Axis2ServiceProvide
r start
INFO: Axis2 JMS URL=jms:/queue.sample?transport.jms.ConnectionFactoryJNDIName=Qu
eueConnectionFactory&java.naming.factory.initial=org.apache.activemq.jndi.Active
MQInitialContextFactory&java.naming.provider.url=tcp://localhost:61619
Injected helloWorldService
Called getGreetings
Injected helloWorldService
Called getGreetings
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 11.89 sec


This shows that the Junit test cases have run successfully. 
