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                         

Note: this sample currently is not working on Linux

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. 
