Hello World JMS References Sample
=================================
This sample demonstrates an SCA reference that uses a JMS binding 

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-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-service-jms.jar helloworld.HelloWorldServer

and on *nix do

java -cp ../../lib/tuscany-sca-manifest.jar:target/sample-helloworld-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-reference-jms.jar helloworld.HelloWorldJmsClient

and on *nix do

java -cp ../../lib/tuscany-sca-manifest.jar:target/sample-helloworld-reference-jms.jar helloworld.HelloWorldJmsClient


Sample Overview
---------------
The sample provides a component that has a reference with a JMS binding. 
The binding refers to JMS queue and communicates with a service
exposed by the helloworld-service-jms sample. 

helloworld-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/
        helloworldjmsclient.composite     - the SCA assembly for this sample
        helloworldjms.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-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-service-jms test. Take a look at the README in that sample
and you will see you need the following commands

cd helloworld-service-jms
ant run

Once done you can now compile and run this sample using the following commands;

cd helloworld-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-
service-jms sample first as the JUnit test does this for you. 

cd helloworld-reference-jms
mvn

You should see the following output from the test phase.

run:
     [java] Injected helloWorldService
     [java] Called getGreetings
     [java] javax.naming.NameNotFoundException: RequestQueue
     ...
     [java] Hello World

This shows that the Junit test cases have run successfully. 
