Hello World SOAP/JMS Service Sample
===================================
This sample demonstrates an SCA service that uses a web service binding using 
a SOAP/JMS protocol 

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 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-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

Now the server is started you can use the helloworld-ws-reference-jms sample to 
exercise it. 

Sample Overview
---------------
The sample provides a single component that is wired to a service with a 
web service binding.

helloworld-ws-service-jms/
  src/
    main/
      java/
        helloworld/
          HelloWorldService.java          - interface description for 
                                            HelloWorldServiceComponent
          HelloWorldImpl.java             - component implementation
          HelloWorldServer.java           - starts the SCA Runtime and 
                                            deploys the helloworldwsjms
                                            .composite and then waits for the
                                            service to be called via web services
      resources/
        wsdl/
          helloworld.wsdl                 - the service description that describes
                                            the exposed service
        helloworldwsjms.composite         - the SCA assembly for this sample
        helloworldwsjmspolicy.composite   - shows how the protocol can be 
                                            selected using policy. Not run
                                            by the sample
    test/
      java/
        helloworld/
          HelloWorldJMSServerTestCase.java- JUnit test case 
          HelloWorldJMSPolicyServerTestCase.java- JUnit test case 
  helloworld-ws-service.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 using the 
following commands

cd helloworld-ws-service-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] HelloWorld server started (press enter to shutdown)
     
As this point the SCA service is exposed as a web service by a web server 
started automatically by the SCA runtime. To stop the server just press 
enter.

To exercise the service run up the helloworld-ws-reference-jms sample. Take a look at 
the README in that sample and you will see you need the following commands

cd helloworld-ws-reference-jms
ant run

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-reference-jms sample as Maven includes a simple ping test to make sure that the
service is available

cd helloworld-ws-service-jms
mvn

You should see the following output from the test phase.

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running helloworld.HelloWorldJmsPolicyServerTestCase
08-Jan-2008 10:41:17 org.apache.tuscany.sca.binding.ws.axis2.Axis2ServiceProvide
r start
INFO: Axis2 JMS URL=jms:/HelloWorldServiceComponent?java.naming.factory.initial=
org.apache.activemq.jndi.ActiveMQInitialContextFactory&java.naming.provider.url=
tcp://localhost:61619&transport.jms.ConnectionFactoryJNDIName=QueueConnectionFac
tory
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 6.984 sec
Running helloworld.HelloWorldJmsServerTestCase
08-Jan-2008 10:41:22 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
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 5.266 sec

This shows that the Junit test cases have run successfully. 
