Binding Echo Sample Application
===============================
This sample demonstrates how to use the new binding extension 
binding-echo-extension.

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;..\binding-echo-extension\target\sample-binding-echo-extension.jar;target\sample-binding-echo.jar echo.EchoBindingClient

and on *nix do

java -cp ../../lib/tuscany-sca-manifest.jar:../binding-echo-extension/target/sample-binding-echo-extension.jar:target/sample-binding-echo.jar echo.EchoBindingClient

This looks like a long command. The three things we add to the classpath are

tuscany-sca-manifest.jar           - all of the standard Tuscany SCA runtime and 
                                     extension classes
sample-binding-echo-extension.jar  - the new echo binding extension implementation
sample-binding-echo                - the application that uses the echo binding                         


Sample Overview
---------------
This sample contains an application (client and server code) that uses
an SCA binding that simply echoes back any messages that are sent to it. 

binding-echo/
  src/
    main/
      java/
        echo/
          Echo.java                     - interface definition for the sample  
                                          reference and service
          EchoComponentImpl.java        - sample component implementation with 
                                          echo binding reference
          EchoBindingClient.java        - sample client
      resources/
        EchoBinding.composite           - the SCA assembly for this sample
    test/
      java/ 
        echo
          EchoBindingTestCase.java      - sample JUnit test case for the sample 
                                          client
  binding-echo.png                      - 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 as 
follows.

cd binding-echo
ant compile
ant run

You should see the following output from the run target.

run:
     [java] Passing thro invoker...
     [java] Returned message: foo
     [java] Echo reference = foo
     [java] Passing thro invoker...
     [java] Returned message: bar
     [java] Echo service = bar


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 binding-echo
mvn

You should see the following output from the test phase.

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running echo.EchoBindingTestCase
Passing thro invoker...
Returned message: foo
Passing thro invoker...
Returned message: bar
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.811 sec

Results :

Tests run: 2, Failures: 0, Errors: 0, Skipped: 0 

This shows that the Junit test cases have run successfully. 
