blob: 11fecf2ae8fcee2c2ab456e3f11177560681cb1c [file] [log] [blame]
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.