apache-tuscany/branches/sca-java-1.3.1/samples/osgi-supplychain
2008-08-11 07:29:53 +00:00
..
src Start branch for 1.3.1, the only changes in this commit are for the version 2008-08-11 07:29:53 +00:00
build-bundles.xml Start branch for 1.3.1, the only changes in this commit are for the version 2008-08-11 07:29:53 +00:00
build.xml Start branch for 1.3.1, the only changes in this commit are for the version 2008-08-11 07:29:53 +00:00
osgi-supplychain.png Start branch for 1.3.1, the only changes in this commit are for the version 2008-08-11 07:29:53 +00:00
osgi-supplychain.svg Start branch for 1.3.1, the only changes in this commit are for the version 2008-08-11 07:29:53 +00:00
pom.xml Start branch for 1.3.1, the only changes in this commit are for the version 2008-08-11 07:29:53 +00:00
README Start branch for 1.3.1, the only changes in this commit are for the version 2008-08-11 07:29:53 +00:00

osgi-supplychain Sample
=======================

The Tuscany OSGi supply chain sample shows using the Tuscany SCA runtime in a J2SE environment executing the SCA asynchronous API with OSGi and Java implementation types.

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

In the directory samples\osgi-supplychain use the JDK 1.5 java command to run the class supplychain.SupplyChainClient 

Linux:   java -cp ../../lib/tuscany-sca-manifest.jar:target/sample-osgi-supplychain.jar supplychain.SupplyChainClient
Windows: java -cp ..\..\lib\tuscany-sca-manifest.jar;target\sample-osgi-supplychain.jar supplychain.SupplyChainClient

Results
----------
The sample when run should simply display on the standard output some startup messages followed by:

Work thread Thread[Thread-1,5,main] - Order, submitted, fulfilled, shipped


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

The sample provides a Customer service with a purchaseGoods operation
and a notifyShipment operation annotated with the SCA @OneWay annotation.
The SupplyChainClient exercises this interface by calling the
purchaseGoods operation. This results in messages passing to 
the Retailer, Warehouse, and Shipper components and the result returned
to the Customer service on a separate callback thread. The Customer
and Shipper components are implemented as OSGi bundles which use
implementation.osgi, while the Retailer and Warehouse components are
implemented using implementation.java.


src
+---main
    +---java
    ¦   +---supplychain
    ¦          OSGiBundleImpl.java
    ¦          SupplyChainClient.java
    ¦         +---customer
    ¦                Customer.java
    ¦                JavaCustomerComponentImpl.java
    ¦                OSGiCustomerComponentImpl.java
    ¦                OSGiCustomerImpl.java
    ¦         +---retailer
    ¦                Retailer.java
    ¦                JavaRetailerComponentImpl.java
    ¦                OSGiRetailerComponentImpl.java
    ¦                OSGiRetailerImpl.java
    ¦         +---shipper
    ¦                Shipper.java
    ¦                JavaShipperComponentImpl.java
    ¦                OSGiShipperComponentImpl.java
    ¦                OSGiShipperImpl.java
    ¦         +---warehouse
    ¦               Warehouse.java
    ¦               JavaWarehouseComponentImpl.java
    ¦               OSGiWarehouseComponentImpl.java
    ¦               OSGiWarehouseImpl.java
    ¦
    +---resources
    ¦   +---osgi
    ¦          Customer.mf
    ¦          Retailer.mf
    ¦          Shipper.mf
    ¦          Warehouse.mf
    ¦        +---ds
    ¦               Customer.mf
    ¦               Retailer.mf
    ¦               Shipper.mf
    ¦               Warehouse.mf
    ¦               Customer.xml
    ¦               Retailer.xml
    ¦               Shipper.xml
    ¦               Warehouse.xml
    ¦      Customer.componentType
    ¦      Retailer.componentType
    ¦      Shipper.componentType
    ¦      Warehouse.componentType
    ¦      supplychain.composite
    ¦--    supplychain.ds.composite
   

  build.xml                            - the Ant build file
  pom.xml                              - the Maven build file   

Understanding OSGI implementation files
---------------------------------------
Some of the files introduced by OSGI implementation are explained below.

OSG files related to customer. java are:
OSGiCustomerComponentImpl.java: OSGi Declarative Services Implementation of the SCA Customer component. 
OSGiCustomerImpl.java: OSGi Procedural Services Implementation of the SCA Customer component. 

You notice the same pattern for shipper.java, retailer.java, SupplyChainClient.java.

The rest of OSGI related files are:
OSGiBundleImpl.java: Common code for OSGi Procedural Services Implementation of the SCA components
 
resources/osgi/*.mf: Manifest files for OSGi bundles for OSGi procedural services implementation
 
resources/osgi/ds/*.m:f Manifest files for OSGi bundles for OSGi declarative services implementation 

resources/osgi/ds/*.xml: OSGi Declarative services component xml files
 
resources/*.componentType: Component types used by OSGi implementation provider for SCA
 
resources/supplychain.composite:  Composite file using OSGi and Java implementation types
 
resources/supplychain.ds.composite: Composite file using OSGi (declarative services) and Java implementation types 
 
Building And Running The Sample Using Ant
-----------------------------------------
cd osgi-supplychain
ant compile 
ant run

you should see: 
Buildfile: build.xml

run:
     [java] Main thread Thread[main,5,main]
     [java] Started OSGi bundle with activator OSGiCustomerImpl
     [java] Started OSGi bundle with activator OSGiShipperImpl
     [java] Main thread sleeping ...
     [java] Work thread Thread[pool-1-thread-1,5,main] - Order, submitted, fulfi
lled, shipped
     [java] Stop OSGi bundle with activator OSGiShipperImpl
     [java] Stop OSGi bundle with activator OSGiCustomerImpl


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 osgi-supplychain
mvn

You should see the following output from the test phase.

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running supplychain.SupplyChainClientTestCase
Started OSGi bundle with activator OSGiCustomerImpl
Started OSGi bundle with activator OSGiShipperImpl
Sleeping ...
Work thread Thread[pool-1-thread-1,5,main] - Order, submitted, fulfilled, shippe
d
Test complete
Stop OSGi bundle with activator OSGiShipperImpl
Stop OSGi bundle with activator OSGiCustomerImpl
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 7.062 sec

This shows that the Junit test cases have run successfully.