Composite Implementation Sample
===============================

This sample shows how composites can be used to implement components. 

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-implementation-composite.jar composite.CompositeClient

and on *nix do

java -cp ../../lib/tuscany-sca-manifest.jar:target/sample-implementation-composite.jar composite.CompositeClient


Sample Overview
---------------

The sample is comprised of three composites. Take a look at the composite file 
or the .svg/.png file which shows the composite file in pictorial form. The 
OuterComposite defines three components two of which are implemented using 
composites. The SourceComponent calls each TargetComponent in turn. There is a
callback which returns from each TargetComponent to the SourceComponent. 

implementation-composite/
  src/
    main/
      java/
        composite/
          Source.java             - interface for the source component
          SourceImpl.java         - implementation for the source component
          SourceCallback.java     - source component callback interface
          Target.java             - interface for the target component
          TargetImpl.java         - implementation for the target component
          CompositeClient.java    - starts the SCA Runtime and 
                                    deploys the OuterComposite.composite. 
                                    This in turn pulls in the two inner
                                    composites
      resources/
        META-INF/
          sca-contribution.xml    - specifies the composite to be deployed
        OuterComposite.composite  - the top level SCA assembly for this sample
        InnerComposite.composite  - included by OuterComposite.composite
        InnerComposite2.composite - included by OuterComposite.composite
    test/
      java/
        composite/
          CompositeTestCase.java  - JUnit test case
  implementation-composite.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-composite
ant compile
ant run

You should see the following output from the run target.

run:
      [java] Main thread Thread[main,5,main]
      [java] Source: Client.main -> Source.clientMethod
      [java] Source: Client.main => Source.clientMethod2
      [java] Sleeping ...
      [java] Target: Client.main -> Source.clientMethod
      [java] Work thread Thread[pool-1-thread-1,5,main]
      [java] Result: Client.main -> Source.clientMethod -> Target.someMethod
      [java] Target: Client.main => Source.clientMethod2
      [java] Work thread Thread[pool-1-thread-2,5,main]
      [java] Result: Client.main => Source.clientMethod2 -> Target.someMethod
      

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-composite
mvn

You should see the following output from the test phase.

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running composite.CompositeTestCase
Main thread Thread[main,5,main]
Source: Client.main -> Source.clientMethod
Source: Client.main => Source.clientMethod2
Sleeping ...
Target: Client.main => Source.clientMethod2
Work thread Thread[pool-1-thread-2,5,main]
Result: Client.main => Source.clientMethod2 -> Target.someMethod
Target: Client.main -> Source.clientMethod
Work thread Thread[pool-1-thread-1,5,main]
Result: Client.main -> Source.clientMethod -> Target.someMethod
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.973 sec

Results :

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

This shows that the Junit test cases have run successfully. 
