Implementation CRUD Sample Client
=================================
This sample demonstrates how to use the new implementation extension, 
implementation-crud-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;..\implementation-crud-extension\target\sample-implementation-crud-extension.jar;target\sample-implementation-crud.jar crud.client.CRUDClient

and on *nix do

java -cp ../../lib/tuscany-sca-manifest.jar:../implementation-crud-extension/target/sample-implementation-crud-extension.jar:target/sample-implementation-crud.jar crud.client.CRUDClient

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-implementation-crud-extension.jar - the new crud implementation
                                           extension 
sample-implementation-crud.jar           - the application that uses the crud
                                           implementation  

Sample Overview
---------------
This sample contains a client application for a CRUD implementation type that
shows how to create new implementation types. See the README for the
mplementation-crud-extension sample for details of this implementation type.

implementation-crud/
  src/
    main/
      java/
        crud/
          client/
            CRUDClient.java    - sample client
      resources/
        crud.composite         - the SCA assembly used by this sample
          
    test/
      java/
        crud/
          client/
            CRUDTestCase.java  - sample JUnit test case for the sample client
          
  implementation-crud.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 as 
follows

cd implementation-crud
ant compile
ant run

You should see the following output from the run target.

run:
     [java] Starting CRUDServiceComponent
     [java] create(ABC) in tmp
     [java] retrieve(0)
     [java] Result from create: ABC
     [java] update(0)
     [java] retrieve(0)
     [java] Result from update: EFG
     [java] delete(0)
     [java] retrieve(0)
     [java] Result from delete: null
     [java] Stopping CRUDServiceComponent


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 implementation-crud
mvn

You should see the following output from the test phase.

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running crud.client.CRUDTestCase
Starting CRUDServiceComponent
create(ABC) in tmp
retrieve(0)
update(0)
retrieve(0)
delete(0)
retrieve(0)
Stopping CRUDServiceComponent
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.641 sec

Results :

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

This shows that the Junit test cases have run successfully. 
