summaryrefslogtreecommitdiffstats
path: root/branches/sca-java-1.5.2/tutorials/store
diff options
context:
space:
mode:
Diffstat (limited to 'branches/sca-java-1.5.2/tutorials/store')
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/README272
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/Tutorial.odpbin0 -> 151399 bytes
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/Tutorial.pdfbin0 -> 164157 bytes
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/assets/META-INF/sca-contribution.xml27
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/assets/pom.xml92
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/assets/services/Cart.java28
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/assets/services/Catalog.java27
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/assets/services/CurrencyConverter.java29
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/assets/services/CurrencyConverterImpl.java38
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/assets/services/FruitsCatalogImpl.java52
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/assets/services/Item.java66
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/assets/services/Order.java40
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/assets/services/ShoppingCartImpl.java129
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/assets/services/Total.java30
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/assets/services/VegetablesCatalogImpl.java42
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/assets/services/Warehouse.java28
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/assets/services/db/ShoppingCartTableImpl.java175
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/assets/services/db/cart.sql27
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/assets/services/map/FruitsCatalogImpl.java56
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/assets/services/market/MarketCatalogImpl.java66
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/assets/services/merger/MergedCatalogImpl.java66
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/assets/tutorial.html37
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/assets/uiservices/store.html183
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/catalog-ejb/pom.xml107
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/catalog-ejb/src/main/java/services/ejb/CatalogEJBHome.java28
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/catalog-ejb/src/main/java/services/ejb/CatalogEJBRemote.java28
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/catalog-ejb/src/main/java/services/ejb/Vegetable.java54
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/catalog-ejb/src/main/java/services/ejb/VegetablesCatalogEJBSessionBean.java62
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/catalog-ejb/src/main/resources/META-INF/ejb-jar.xml35
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/catalog-ejb/src/main/resources/META-INF/openejb-jar.xml78
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/catalog-ejb/src/main/resources/META-INF/sca-contribution.xml24
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/catalog-ejb/src/main/resources/VegetablesCatalogEJB.componentType26
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/catalog-ejb/src/main/resources/catalog-ejb.composite31
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/catalog-ejb/src/test/java/client/CatalogEJBClientTestCase.java67
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/catalog-ejb/src/test/java/org/omg/stub/javax/ejb/_EJBHome_Stub.java223
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/catalog-ejb/src/test/java/org/omg/stub/javax/ejb/_EJBObject_Stub.java252
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/catalog-ejb/src/test/java/org/omg/stub/javax/ejb/_Handle_Stub.java89
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/catalog-ejb/src/test/java/org/omg/stub/javax/ejb/_HomeHandle_Stub.java89
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/catalog-ejb/src/test/java/services/ejb/_CatalogEJBHome_Stub.java269
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/catalog-ejb/src/test/java/services/ejb/_CatalogEJBRemote_Stub.java292
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/catalog-mediation/META-INF/sca-contribution.xml25
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/catalog-mediation/catalog-mediation.composite34
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/catalog-mediation/pom.xml94
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/catalog-mediation/services/mediation/VegetablesCatalogMediationImpl.java51
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/catalog-webapp/catalog-web.composite43
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/catalog-webapp/pom.xml113
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/catalog-webapp/webapp/META-INF/sca-contribution.xml24
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/catalog-webapp/webapp/WEB-INF/web.xml41
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/catalog-webapp/webapp/catalog.jsp52
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/domain/cloud.composite37
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/domain/cloud/CatalogEJBNode.composite35
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/domain/cloud/CatalogMediationNode.composite33
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/domain/cloud/CatalogWebAppNode.composite36
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/domain/cloud/CatalogsNode.composite33
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/domain/cloud/CurrencyNode.composite33
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/domain/cloud/StoreClientNode.composite33
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/domain/cloud/StoreDBNode.composite35
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/domain/cloud/StoreEUNode.composite36
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/domain/cloud/StoreEnterpriseNode.composite35
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/domain/cloud/StoreMarketNode.composite35
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/domain/cloud/StoreMashupNode.composite35
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/domain/cloud/StoreMergerNode.composite35
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/domain/cloud/StoreNode.composite35
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/domain/cloud/StoreSupplierNode.composite36
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/domain/domain.composite37
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/domain/launch/LaunchCatalogMediationNode.java28
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/domain/launch/LaunchCatalogsNode.java28
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/domain/launch/LaunchCurrencyNode.java28
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/domain/launch/LaunchStoreDBNode.java28
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/domain/launch/LaunchStoreEUNode.java28
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/domain/launch/LaunchStoreEnterpriseNode.java28
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/domain/launch/LaunchStoreMarketNode.java28
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/domain/launch/LaunchStoreMashupNode.java28
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/domain/launch/LaunchStoreMergerNode.java28
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/domain/launch/LaunchStoreNode.java28
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/domain/launch/LaunchStoreSupplierNode.java28
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/domain/launch/LaunchTutorialDomainManager.java33
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/domain/launch/LaunchWarehouseSpring.java55
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/domain/pom.xml240
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/domain/workspace.xml36
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/pom.xml61
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/store-client/META-INF/sca-contribution.xml23
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/store-client/client/Shopper.java29
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/store-client/client/ShopperImpl.java63
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/store-client/launch/LaunchStoreClientNode.java43
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/store-client/pom.xml126
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/store-client/services/Cart.java28
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/store-client/services/Catalog.java27
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/store-client/services/Item.java66
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/store-client/services/Total.java29
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/store-client/store-client.composite38
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/store-db/META-INF/sca-contribution.xml27
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/store-db/pom.xml128
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/store-db/store-db.composite75
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/store-enterprise/META-INF/sca-contribution.xml26
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/store-enterprise/build.xml54
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/store-enterprise/pom.xml80
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/store-enterprise/store-enterprise.composite88
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/store-eu/META-INF/sca-contribution.xml26
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/store-eu/pom.xml114
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/store-eu/store-eu.composite70
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/store-eu/uiservices/store-eu.html162
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/store-market/META-INF/sca-contribution.xml26
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/store-market/build.xml54
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/store-market/pom.xml80
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/store-market/store-market.composite68
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/store-mashup/META-INF/sca-contribution.xml25
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/store-mashup/build-openajax.xml86
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/store-mashup/gadget/map-gadget.html50
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/store-mashup/gadget/store-gadget.html166
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/store-mashup/map-gadget.composite32
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/store-mashup/mashup/store-mash.html70
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/store-mashup/pom.xml139
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/store-mashup/store-gadget.composite64
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/store-mashup/store-mashup.composite48
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/store-merger/META-INF/sca-contribution.xml26
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/store-merger/pom.xml80
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/store-merger/store-merger.composite75
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/store-supplier/META-INF/sca-contribution.xml27
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/store-supplier/pom.xml129
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/store-supplier/store-supplier.composite77
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/store-test/META-INF/sca-contribution.xml27
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/store-test/client/Shopper.java29
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/store-test/pom.xml218
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/store-test/test/StoreSupplierTestCase.java115
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/store/META-INF/sca-contribution.xml25
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/store/pom.xml80
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/store/store.composite64
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/warehouse-spring/META-INF/sca-contribution.xml24
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/warehouse-spring/build.xml75
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/warehouse-spring/pom.xml98
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/warehouse-spring/services/WarehouseImpl.java40
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/warehouse-spring/uiservices/warehouse.html76
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/warehouse-spring/warehouse-context.xml29
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/warehouse-spring/warehouse-spring.composite49
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/web-services/META-INF/sca-contribution.xml25
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/web-services/catalogs.composite43
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/web-services/currency.composite32
-rw-r--r--branches/sca-java-1.5.2/tutorials/store/web-services/pom.xml80
139 files changed, 8806 insertions, 0 deletions
diff --git a/branches/sca-java-1.5.2/tutorials/store/README b/branches/sca-java-1.5.2/tutorials/store/README
new file mode 100644
index 0000000000..47c1354b79
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/README
@@ -0,0 +1,272 @@
+Store Tutorial
+==============
+
+This tutorial that shows how to use SCA and Tuscany to build multiple
+variations of an online Store application. The variations demostrate the
+evolution of the Store as it goes through the following stages:
+
+1 - Initial online fruit store
+2 - Fruit store merges with vegetable store to form the fruit and vegetable store
+3 - The fruit and vegetable store move to using a database for storing the cart
+4 - The fruit and vegetable store acts as a supplier to other online stores
+5 - The fruit and vegetable store ships their software solution to another geography
+6 - The fruit and vegetable running in the enterprise
+
+For diagrams of the scenarios covered here, please refer to Tutorial.pdf
+
+Running The Tutorial Application
+--------------------------------
+
+Start the SCA Domain Manager on linux:
+
+ cd domain
+ java -jar ../../../modules/tuscany-node-launcher-1.5.1.jar domain
+
+Start the SCA Domain Manager on windows:
+
+ cd domain
+ java -jar ..\..\..\modules\tuscany-node-launcher-1.5.1.jar domain
+
+Access the SCA Domain Manager application by pointing your Web browser at:
+
+ http://localhost:9990/ui/cloud/
+
+This shows you all of the Tuscany nodes that are configured to run
+in the store tutorial domain. If you are interested, the configuration
+is stored on disc in the store/domain directory but for now let's just
+start some nodes and see what happens.
+
+The different nodes you see are used to start different scenarios in
+the tutorial. Select the node you want to start (e.g StoreNode), then click the
+Start button. You may need to give the nodes a little time to start up. Check the
+console where you lauched the domain manager application and you will see the
+following message when nodes have started.
+
+INFO: INFO: Press 'q' to quit, 'r' to restart.
+
+Remember to shut down the nodes before you exit the domain manager application.
+
+The following describes the nodes you have to start for each scenario and some
+usful links to explore once the node has started.
+
+1 - Initial online fruit store
+----------------------------
+
+Start
+
+ StoreNode
+
+The store itself can be found at
+
+ http://localhost:8100/ui/
+
+If you want to look at how Tuscany provides remote bindings you can take
+a look at the service description that Tuscany created automatically
+for the store catalog service which is exposed over a JSONRPC binding
+Point your browser at:
+
+ http://l3localhost:8100/StoreCatalog?smd
+
+The service is configured in the SCA composite file in the following way:
+
+ <component name="StoreCatalog">
+ <implementation.java class="services.FruitsCatalogImpl"/>
+ <property name="currencyCode">USD</property>
+ <service name="Catalog">
+ <t:binding.jsonrpc/>
+ </service>
+ <reference name="currencyConverter" target="StoreCurrencyConverter"/>
+ </component>
+
+Note the inclusion of <t:binding.jsonrpc/>. This is all that is required to
+make this service available over JSONRPC. If you want to expose the service
+over web services simply add <binding.ws/> instead of (or as well as) <t:binding.jsonrpc/>.
+
+2 - Fruit store merges with vegetable store to form the fruit and vegetable store
+---------------------------------------------------------------------------------
+
+Start
+
+ CatalogsNode
+ StoreMergerNode
+
+The store itself can be found at
+
+ http://localhost:8101/ui/
+
+Now you see that there are more items in the catalog as the fruit and
+vegetable catalogs are both providing content. The vegetable catalog
+that was introduced during the merger is contacted using web services.
+If you want to see the WSDL for the vegetable catalog point your browser
+at
+
+http://l3aw203:8200/VegetablesCatalogWebService?wsdl
+
+The vegetable catalog service is configured in an SCA composite file
+in the following way:
+
+ <component name="VegetablesCatalogWebService">
+ <implementation.java class="services.VegetablesCatalogImpl"/>
+ <service name="Catalog">
+ <binding.ws/>
+ </service>
+ </component>
+
+3 - The fruit and vegetable store move to using a database to storing the cart
+------------------------------------------------------------------------------
+
+Start
+
+ StoreDBNode
+
+The store itself can be found at
+
+ http://l3aw203:8102/ui/
+
+This looks the same as the scenario 2 store but this time a database is used
+for storing items put into the shopping cart. When you add items you
+will see messages on the console indicating that items are added to the
+database. For example.
+
+INFO: insert into Cart values ('cart-8c8bcc43-5036-4e9a-b282-0dd3d00d350c', 'Apple', '$2.99')
+
+This scenario shows how you change the implementation of a service without
+changing any of the configuration of the rest of the application
+
+4 - The fruit and vegetable store acts as a supplier to other online stores
+---------------------------------------------------------------------------
+
+Start
+
+ StoreSupplierNode
+
+The store itself can be found at
+
+ http://localhost:8103/ui/
+
+Again this is the same basic store as in scenario 3. However this time the
+shopping cart and catalog serivces have been given additional remote bindings so that
+the services can be accessed by others. For example, take a look at the WSDL
+description of the shopping cart service that is now available at:
+
+ http://l3aw203:8333/ShoppinCartTotalWebService?wsdl
+
+This WSDL is available as the shopping cart total service is now configured with a web services
+binding in the following way:
+
+ <component name="StoreSupplierShoppingCart">
+ <implementation.java class="services.db.ShoppingCartTableImpl"/>
+ <property name="database">../store-supplier/target/cart-db</property>
+ <service name="Cart">
+ <t:binding.atom uri="/ShoppingCart/Cart"/>
+ </service>
+ <service name="Total">
+ <t:binding.jsonrpc/>
+ <binding.ws uri="/ShoppinCartTotalWebService"/>
+ </service>
+ </component>
+
+If you want to actually exercise these services from a standalone application
+you can run up the StoreClientNode using the provided launcher
+
+store/store-client/launch/LaunchStoreClientNode
+
+
+5 - The fruit and vegetable store ships their software solution to another geography
+------------------------------------------------------------------------------------
+
+Start
+
+ CurrencyNode
+ StoreEUNode
+
+The store itself can be found at
+
+ http://localhost:8104/ui/
+
+Notice now that the prices are quoted in Euros and the language is French. This was
+achieved by editing the store.html file to change the language and presentation to
+be appropriate for Europe. The curreny was changed by reconfiguring the catalog
+component to use EUR instead of USD.
+
+ <component name="StoreEUCatalog">
+ <implementation.java class="services.merger.MergedCatalogImpl"/>
+ <property name="currencyCode">EUR</property>
+ ...
+ </component>
+
+6 - The fruit and vegetable running in the enterprise
+---------------------------------------------------------------------------------
+
+Start
+
+ CatalogsNode
+ StoreEnterpriseNode
+
+Separately run
+ LaunchWarehouseSpring from the command line
+ TBD
+
+The LaunchWarehouseSpring program starts the node for the warehouse based on local
+configuration. It doesn't use the domain manager like the other nodes we start do.
+It also start and ActiveMQ broker via which JMS messages will pass.
+
+The store itself can be found at
+
+ http://localhost:8108/ui/
+
+The items in the catalog as much the same as the previous examples.
+This time though when you place the order a message is sent over JMS to
+the warehouse component running outside the domain and listening on JMS.
+In this case we have implemented the warehouse application using SCA and it
+has it's own UI. The UI can be found at
+
+http://l3aw203:8088/ui/
+
+You should see the orders accumulating. YOu can't do anything with the
+orders but it is just a demo.
+
+The warecouse component is configured in the composite file
+in the following way:
+
+ <component name="Warehouse">
+ <implementation.java class="services.WarehouseImpl"/>
+ <service name="Warehouse">
+ <t:binding.jsonrpc uri="http://localhost:8088/Warehouse"/>
+ <binding.jms initialContextFactory="org.apache.activemq.jndi.ActiveMQInitialContextFactory"
+ jndiURL="tcp://localhost:61619">
+ <destination name="RequestQueue" create="ifnotexist"/>
+ <response>
+ <destination name="ResponseQueue" create="ifnotexist"/>
+ </response>
+ </binding.jms>
+ </service>
+ </component>
+
+And the shopping cart component that talks to it is configured as follows
+
+ <component name="StoreEnterpriseShoppingCart">
+ <implementation.java class="services.ShoppingCartImpl"/>
+ <service name="Cart">
+ <t:binding.atom uri="/ShoppingCart/Cart"/>
+ </service>
+ <service name="Total">
+ <t:binding.jsonrpc/>
+ </service>
+ <reference name="warehouse" multiplicity="0..1" >
+ <binding.jms initialContextFactory="org.apache.activemq.jndi.ActiveMQInitialContextFactory"
+ jndiURL="tcp://localhost:61619">
+ <destination name="RequestQueue" create="always"/>
+ <response>
+ <destination name="ResponseQueue" create="always"/>
+ </response>
+ </binding.jms>
+ </reference>
+ </component>
+
+
+For more detailed information about how to get started with Apache Tuscany
+see our online guides at:
+
+http://tuscany.apache.org/sca-java-getting-started-guides-1x.html
+
diff --git a/branches/sca-java-1.5.2/tutorials/store/Tutorial.odp b/branches/sca-java-1.5.2/tutorials/store/Tutorial.odp
new file mode 100644
index 0000000000..8592cdb9d9
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/Tutorial.odp
Binary files differ
diff --git a/branches/sca-java-1.5.2/tutorials/store/Tutorial.pdf b/branches/sca-java-1.5.2/tutorials/store/Tutorial.pdf
new file mode 100644
index 0000000000..e20a51c635
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/Tutorial.pdf
Binary files differ
diff --git a/branches/sca-java-1.5.2/tutorials/store/assets/META-INF/sca-contribution.xml b/branches/sca-java-1.5.2/tutorials/store/assets/META-INF/sca-contribution.xml
new file mode 100644
index 0000000000..cba1564cb4
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/assets/META-INF/sca-contribution.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<contribution xmlns="http://www.osoa.org/xmlns/sca/1.0">
+ <export.java package="services"/>
+ <export.java package="services.market"/>
+ <export.java package="services.merger"/>
+ <export.java package="services.db"/>
+ <export.java package="services.map"/>
+ <export.resource uri="uiservices/store.html"/>
+</contribution> \ No newline at end of file
diff --git a/branches/sca-java-1.5.2/tutorials/store/assets/pom.xml b/branches/sca-java-1.5.2/tutorials/store/assets/pom.xml
new file mode 100644
index 0000000000..8a6d456a6d
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/assets/pom.xml
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-tutorial-store</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ <relativePath>../pom.xml</relativePath>
+ </parent>
+ <artifactId>tutorial-assets</artifactId>
+ <name>Apache Tuscany SCA Store Tutorial Reusable Assets</name>
+
+ <repositories>
+ <repository>
+ <id>apache.incubator</id>
+ <url>http://people.apache.org/repo/m2-incubating-repository</url>
+ </repository>
+ </repositories>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-sca-api</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-data-api</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.derby</groupId>
+ <artifactId>derby</artifactId>
+ <version>10.3.1.4</version>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <finalName>${artifactId}</finalName>
+ <sourceDirectory>${basedir}</sourceDirectory>
+ <resources>
+ <resource>
+ <directory>${basedir}</directory>
+ <excludes>
+ <exclude>**/*.java</exclude>
+ <exclude>**/.*/**</exclude>
+ <exclude>pom.xml</exclude>
+ <exclude>build.xml</exclude>
+ <exclude>target/**</exclude>
+ </excludes>
+ </resource>
+ </resources>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-maven-ant-generator</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ <executions>
+ <execution>
+ <configuration>
+ <pathToRootDir>../../..</pathToRootDir>
+ </configuration>
+ <goals>
+ <goal>generate</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+
+</project>
diff --git a/branches/sca-java-1.5.2/tutorials/store/assets/services/Cart.java b/branches/sca-java-1.5.2/tutorials/store/assets/services/Cart.java
new file mode 100644
index 0000000000..9e6226d963
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/assets/services/Cart.java
@@ -0,0 +1,28 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package services;
+
+import org.apache.tuscany.sca.data.collection.Collection;
+import org.osoa.sca.annotations.Remotable;
+
+@Remotable
+public interface Cart extends Collection<String, Item> {
+
+}
diff --git a/branches/sca-java-1.5.2/tutorials/store/assets/services/Catalog.java b/branches/sca-java-1.5.2/tutorials/store/assets/services/Catalog.java
new file mode 100644
index 0000000000..2c3b19f579
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/assets/services/Catalog.java
@@ -0,0 +1,27 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package services;
+
+import org.osoa.sca.annotations.Remotable;
+
+@Remotable
+public interface Catalog {
+ Item[] get();
+}
diff --git a/branches/sca-java-1.5.2/tutorials/store/assets/services/CurrencyConverter.java b/branches/sca-java-1.5.2/tutorials/store/assets/services/CurrencyConverter.java
new file mode 100644
index 0000000000..e104a0423a
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/assets/services/CurrencyConverter.java
@@ -0,0 +1,29 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package services;
+
+import org.osoa.sca.annotations.Remotable;
+
+@Remotable
+public interface CurrencyConverter {
+ public double getConversion(String fromCurrenycCode, String toCurrencyCode, double amount);
+
+ public String getCurrencySymbol(String currencyCode);
+}
diff --git a/branches/sca-java-1.5.2/tutorials/store/assets/services/CurrencyConverterImpl.java b/branches/sca-java-1.5.2/tutorials/store/assets/services/CurrencyConverterImpl.java
new file mode 100644
index 0000000000..c354aed447
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/assets/services/CurrencyConverterImpl.java
@@ -0,0 +1,38 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package services;
+
+public class CurrencyConverterImpl implements CurrencyConverter {
+ public double getConversion(String fromCurrencyCode, String toCurrencyCode, double amount) {
+ if (toCurrencyCode.equals("USD"))
+ return amount;
+ else if (toCurrencyCode.equals("EUR"))
+ return ((double)Math.round(amount * 0.7256 * 100)) /100;
+ return 0;
+ }
+
+ public String getCurrencySymbol(String currencyCode) {
+ if (currencyCode.equals("USD"))
+ return "$";
+ else if (currencyCode.equals("EUR"))
+ return "E"; //"€";
+ return "?";
+ }
+}
diff --git a/branches/sca-java-1.5.2/tutorials/store/assets/services/FruitsCatalogImpl.java b/branches/sca-java-1.5.2/tutorials/store/assets/services/FruitsCatalogImpl.java
new file mode 100644
index 0000000000..377b3d7e59
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/assets/services/FruitsCatalogImpl.java
@@ -0,0 +1,52 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package services;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.osoa.sca.annotations.Init;
+import org.osoa.sca.annotations.Property;
+import org.osoa.sca.annotations.Reference;
+
+public class FruitsCatalogImpl implements Catalog {
+
+ @Property
+ public String currencyCode = "USD";
+
+ @Reference
+ public CurrencyConverter currencyConverter;
+
+ private List<Item> catalog = new ArrayList<Item>();
+
+ @Init
+ public void init() {
+ String currencySymbol = currencyConverter.getCurrencySymbol(currencyCode);
+ catalog.add(new Item("Apple", currencySymbol + currencyConverter.getConversion("USD", currencyCode, 2.99)));
+ catalog.add(new Item("Orange", currencySymbol + currencyConverter.getConversion("USD", currencyCode, 3.55)));
+ catalog.add(new Item("Pear", currencySymbol + currencyConverter.getConversion("USD", currencyCode, 1.55)));
+ }
+
+ public Item[] get() {
+ Item[] catalogArray = new Item[catalog.size()];
+ catalog.toArray(catalogArray);
+ return catalogArray;
+ }
+}
diff --git a/branches/sca-java-1.5.2/tutorials/store/assets/services/Item.java b/branches/sca-java-1.5.2/tutorials/store/assets/services/Item.java
new file mode 100644
index 0000000000..81cefcdbef
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/assets/services/Item.java
@@ -0,0 +1,66 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package services;
+
+
+public class Item {
+ private String name;
+ private String price;
+ private String origin;
+
+ public Item() {
+ }
+
+ public Item(String name, String price, String origin) {
+ this.name = name;
+ this.price = price;
+ this.origin = origin;
+ }
+
+ public Item(String name, String price) {
+ this.name = name;
+ this.price = price;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getPrice() {
+ return price;
+ }
+
+ public void setPrice(String price) {
+ this.price = price;
+ }
+
+ public String getOrigin() {
+ return origin;
+ }
+
+ public void setOrigin(String origin) {
+ this.origin = origin;
+ }
+
+}
diff --git a/branches/sca-java-1.5.2/tutorials/store/assets/services/Order.java b/branches/sca-java-1.5.2/tutorials/store/assets/services/Order.java
new file mode 100644
index 0000000000..07a9f9d0b0
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/assets/services/Order.java
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package services;
+
+
+public class Order {
+ private Item[] items;
+
+ public Order() {
+ }
+
+ public Order(Item[] items) {
+ this.items = items;
+ }
+
+ public Item[] getItems() {
+ return items;
+ }
+
+ public void setItems(Item[] items) {
+ this.items = items;
+ }
+}
diff --git a/branches/sca-java-1.5.2/tutorials/store/assets/services/ShoppingCartImpl.java b/branches/sca-java-1.5.2/tutorials/store/assets/services/ShoppingCartImpl.java
new file mode 100644
index 0000000000..d297a8ccf1
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/assets/services/ShoppingCartImpl.java
@@ -0,0 +1,129 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package services;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+
+import org.apache.tuscany.sca.data.collection.Entry;
+import org.apache.tuscany.sca.data.collection.NotFoundException;
+import org.osoa.sca.annotations.Init;
+import org.osoa.sca.annotations.Reference;
+import org.osoa.sca.annotations.Scope;
+
+@Scope("COMPOSITE")
+public class ShoppingCartImpl implements Cart, Total {
+
+ private Map<String, Item> cart;
+
+ @Reference(required=false)
+ protected Warehouse warehouse;
+
+ @Init
+ public void init() {
+ cart = new HashMap<String, Item>();
+ }
+
+ public Entry<String, Item>[] getAll() {
+ Entry<String, Item>[] entries = new Entry[cart.size()];
+ int i = 0;
+ for (Map.Entry<String, Item> e: cart.entrySet()) {
+ entries[i++] = new Entry<String, Item>(e.getKey(), e.getValue());
+ }
+ return entries;
+ }
+
+ public Item get(String key) throws NotFoundException {
+ Item item = cart.get(key);
+ if (item == null) {
+ throw new NotFoundException(key);
+ } else {
+ return item;
+ }
+ }
+
+ public String post(String key, Item item) {
+ if (key == null) {
+ key ="cart-" + UUID.randomUUID().toString();
+ }
+ cart.put(key, item);
+ return key;
+ }
+
+ public void put(String key, Item item) throws NotFoundException {
+ if (!cart.containsKey(key)) {
+ throw new NotFoundException(key);
+ }
+ cart.put(key, item);
+ }
+
+ public void delete(String key) throws NotFoundException {
+ if (key == null || key.equals("")) {
+ cart.clear();
+ } else {
+ Item item = cart.remove(key);
+ if (item == null)
+ throw new NotFoundException(key);
+ }
+ }
+
+ public Entry<String, Item>[] query(String queryString) {
+ List<Entry<String, Item>> entries = new ArrayList<Entry<String,Item>>();
+ if (queryString.startsWith("name=")) {
+ String name = queryString.substring(5);
+ for (Map.Entry<String, Item> e: cart.entrySet()) {
+ Item item = e.getValue();
+ if (item.getName().equals(name)) {
+ entries.add(new Entry<String, Item>(e.getKey(), e.getValue()));
+ }
+ }
+ }
+ return entries.toArray(new Entry[entries.size()]);
+ }
+
+ public String getTotal() {
+ double total = 0;
+ String currencySymbol = "";
+ if (!cart.isEmpty()) {
+ Item item = cart.values().iterator().next();
+ currencySymbol = item.getPrice().substring(0, 1);
+ }
+ for (Item item : cart.values()) {
+ total += Double.valueOf(item.getPrice().substring(1));
+ }
+ return currencySymbol + String.valueOf(total);
+ }
+
+ public void confirmTotal() {
+ if (warehouse != null){
+ System.out.println("Confirm total");
+ try {
+ Order order = new Order(cart.values().toArray(new Item[cart.values().size()]));
+ warehouse.addOrder(order);
+ } catch (Exception ex){
+ ex.printStackTrace();
+ }
+ }
+ cart.clear();
+ }
+}
diff --git a/branches/sca-java-1.5.2/tutorials/store/assets/services/Total.java b/branches/sca-java-1.5.2/tutorials/store/assets/services/Total.java
new file mode 100644
index 0000000000..b29b321e25
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/assets/services/Total.java
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package services;
+
+import org.osoa.sca.annotations.Remotable;
+
+@Remotable
+public interface Total {
+
+ String getTotal();
+ void confirmTotal();
+
+}
diff --git a/branches/sca-java-1.5.2/tutorials/store/assets/services/VegetablesCatalogImpl.java b/branches/sca-java-1.5.2/tutorials/store/assets/services/VegetablesCatalogImpl.java
new file mode 100644
index 0000000000..8bfbc757db
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/assets/services/VegetablesCatalogImpl.java
@@ -0,0 +1,42 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package services;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.osoa.sca.annotations.Init;
+
+public class VegetablesCatalogImpl implements Catalog {
+ private List<Item> catalog = new ArrayList<Item>();
+
+ @Init
+ public void init() {
+ catalog.add(new Item("Broccoli", "$2.99"));
+ catalog.add(new Item("Asparagus", "$3.55"));
+ catalog.add(new Item("Cauliflower", "$1.55"));
+ }
+
+ public Item[] get() {
+ Item[] catalogArray = new Item[catalog.size()];
+ catalog.toArray(catalogArray);
+ return catalogArray;
+ }
+}
diff --git a/branches/sca-java-1.5.2/tutorials/store/assets/services/Warehouse.java b/branches/sca-java-1.5.2/tutorials/store/assets/services/Warehouse.java
new file mode 100644
index 0000000000..f04b0dd52d
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/assets/services/Warehouse.java
@@ -0,0 +1,28 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package services;
+
+import org.osoa.sca.annotations.Remotable;
+
+@Remotable
+public interface Warehouse {
+ void addOrder(Order order);
+ Order[] getOrders();
+}
diff --git a/branches/sca-java-1.5.2/tutorials/store/assets/services/db/ShoppingCartTableImpl.java b/branches/sca-java-1.5.2/tutorials/store/assets/services/db/ShoppingCartTableImpl.java
new file mode 100644
index 0000000000..24eca045ab
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/assets/services/db/ShoppingCartTableImpl.java
@@ -0,0 +1,175 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package services.db;
+
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+
+import org.apache.tuscany.sca.data.collection.Entry;
+import org.apache.tuscany.sca.data.collection.NotFoundException;
+import org.osoa.sca.ServiceRuntimeException;
+import org.osoa.sca.annotations.Destroy;
+import org.osoa.sca.annotations.Init;
+import org.osoa.sca.annotations.Property;
+
+import services.Cart;
+import services.Item;
+import services.Total;
+
+public class ShoppingCartTableImpl implements Cart, Total {
+
+ @Property
+ public String database;
+
+ private Connection connection;
+
+ @Init
+ public void init() throws Exception {
+ Class.forName("org.apache.derby.jdbc.EmbeddedDriver", true, Thread.currentThread().getContextClassLoader());
+ String baseDir = System.getProperty("basedir");
+ String url = "jdbc:derby:directory:" + (baseDir != null? baseDir + "/" + database : database);
+ System.out.println("Connecting to database: " + url);
+ connection = DriverManager.getConnection(url, "", "");
+ }
+
+ @Destroy
+ public void shutdown() throws Exception {
+ if(connection != null) {
+ connection.close();
+ connection = null;
+ }
+ }
+
+ public Entry<String, Item>[] getAll() {
+ try {
+ Statement statement = connection.createStatement();
+ ResultSet results = statement.executeQuery("select * from Cart");
+ List<Entry<String, Item>> entries = new ArrayList<Entry<String, Item>>();
+ while (results.next()) {
+ Item item = new Item(results.getString("name"), results.getString("price"));
+ entries.add(new Entry<String, Item>(results.getString("id"), item));
+ }
+ return entries.toArray(new Entry[entries.size()]);
+ } catch (SQLException e) {
+ throw new ServiceRuntimeException(e);
+ }
+ }
+
+ public Item get(String key) throws NotFoundException {
+ try {
+ Statement statement = connection.createStatement();
+ ResultSet results = statement.executeQuery("select * from Cart where id = '" + key + "'");
+ if (results.next()) {
+ return new Item(results.getString("name"), results.getString("price"));
+ } else {
+ throw new NotFoundException(key);
+ }
+ } catch (SQLException e) {
+ throw new ServiceRuntimeException(e);
+ }
+ }
+
+ public String post(String key, Item item) {
+ if (key == null) {
+ key = "cart-" + UUID.randomUUID().toString();
+ }
+ try {
+ Statement statement = connection.createStatement();
+ String query = "insert into Cart values ('" + key + "', '" + item.getName() + "', '" + item.getPrice() + "')";
+ System.out.println(query);
+ statement.executeUpdate(query);
+ } catch (SQLException e) {
+ throw new ServiceRuntimeException(e);
+ }
+ return key;
+ }
+
+ public void put(String key, Item item) throws NotFoundException {
+ try {
+ Statement statement = connection.createStatement();
+ String query = "update into Cart set name = '" + item.getName() + "', price = '" + item.getPrice() + "' where id = '" + key + "'";
+ System.out.println(query);
+ int count = statement.executeUpdate(query);
+ if (count == 0)
+ throw new NotFoundException(key);
+ } catch (SQLException e) {
+ throw new ServiceRuntimeException(e);
+ }
+ }
+
+ public void delete(String key) throws NotFoundException {
+ try {
+ Statement statement = connection.createStatement();
+ if (key == null || key.equals("")) {
+ String query = "delete from Cart";
+ System.out.println(query);
+ statement.executeUpdate(query);
+ } else {
+ String query = "delete from Cart where id = '" + key + "'";
+ System.out.println(query);
+ int count = statement.executeUpdate(query);
+ if (count == 0)
+ throw new NotFoundException(key);
+ }
+ } catch (SQLException e) {
+ throw new ServiceRuntimeException(e);
+ }
+ }
+
+ public Entry<String, Item>[] query(String queryString) {
+ try {
+ Statement statement = connection.createStatement();
+ ResultSet results = statement.executeQuery("select * from Cart where " + queryString);
+ List<Entry<String, Item>> entries = new ArrayList<Entry<String, Item>>();
+ while (results.next()) {
+ Item item = new Item(results.getString("name"), results.getString("price"));
+ entries.add(new Entry<String, Item>(results.getString("id"), item));
+ }
+ return entries.toArray(new Entry[entries.size()]);
+ } catch (SQLException e) {
+ throw new ServiceRuntimeException(e);
+ }
+ }
+
+ public String getTotal() {
+ Entry<String, Item>[] entries = getAll();
+ double total = 0;
+ String currencySymbol = "";
+ if (entries.length > 0) {
+ Item item = entries[0].getData();
+ currencySymbol = item.getPrice().substring(0, 1);
+ }
+ for (Entry<String, Item> entry : entries) {
+ Item item = entry.getData();
+ total += Double.valueOf(item.getPrice().substring(1));
+ }
+ return currencySymbol + total;
+ }
+
+ public void confirmTotal() {
+
+ }
+}
diff --git a/branches/sca-java-1.5.2/tutorials/store/assets/services/db/cart.sql b/branches/sca-java-1.5.2/tutorials/store/assets/services/db/cart.sql
new file mode 100644
index 0000000000..750e23ebde
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/assets/services/db/cart.sql
@@ -0,0 +1,27 @@
+--
+-- Licensed to the Apache Software Foundation (ASF) under one
+-- or more contributor license agreements. See the NOTICE file
+-- distributed with this work for additional information
+-- regarding copyright ownership. The ASF licenses this file
+-- to you under the Apache License, Version 2.0 (the
+-- "License"); you may not use this file except in compliance
+-- with the License. You may obtain a copy of the License at
+--
+-- http://www.apache.org/licenses/LICENSE-2.0
+--
+-- Unless required by applicable law or agreed to in writing,
+-- software distributed under the License is distributed on an
+-- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+-- KIND, either express or implied. See the License for the
+-- specific language governing permissions and limitations
+-- under the License.
+--
+
+DROP TABLE CART;
+
+CREATE TABLE CART(
+ id VARCHAR(50) NOT NULL,
+ name VARCHAR(50),
+ price VARCHAR(10),
+ primary key (id)
+);
diff --git a/branches/sca-java-1.5.2/tutorials/store/assets/services/map/FruitsCatalogImpl.java b/branches/sca-java-1.5.2/tutorials/store/assets/services/map/FruitsCatalogImpl.java
new file mode 100644
index 0000000000..b160ba7be0
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/assets/services/map/FruitsCatalogImpl.java
@@ -0,0 +1,56 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package services.map;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.osoa.sca.annotations.Init;
+import org.osoa.sca.annotations.Property;
+import org.osoa.sca.annotations.Reference;
+
+import services.Catalog;
+import services.CurrencyConverter;
+import services.Item;
+
+public class FruitsCatalogImpl implements Catalog {
+
+ @Property
+ public String currencyCode = "USD";
+
+ @Reference
+ public CurrencyConverter currencyConverter;
+
+ private List<Item> catalog = new ArrayList<Item>();
+
+ @Init
+ public void init() {
+ String currencySymbol = currencyConverter.getCurrencySymbol(currencyCode);
+ catalog.add(new Item("Apple", currencySymbol + currencyConverter.getConversion("USD", currencyCode, 2.99), "34.425744,-119.711151"));
+ catalog.add(new Item("Orange", currencySymbol + currencyConverter.getConversion("USD", currencyCode, 3.55), "25.811018,-80.130844"));
+ catalog.add(new Item("Pear", currencySymbol + currencyConverter.getConversion("USD", currencyCode, 1.55), "36.596649,-121.8964"));
+ }
+
+ public Item[] get() {
+ Item[] catalogArray = new Item[catalog.size()];
+ catalog.toArray(catalogArray);
+ return catalogArray;
+ }
+}
diff --git a/branches/sca-java-1.5.2/tutorials/store/assets/services/market/MarketCatalogImpl.java b/branches/sca-java-1.5.2/tutorials/store/assets/services/market/MarketCatalogImpl.java
new file mode 100644
index 0000000000..bd2c7d76a2
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/assets/services/market/MarketCatalogImpl.java
@@ -0,0 +1,66 @@
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package services.market;
+
+import java.util.Vector;
+
+import org.osoa.sca.annotations.Property;
+import org.osoa.sca.annotations.Reference;
+
+import services.Catalog;
+import services.CurrencyConverter;
+import services.Item;
+
+
+public class MarketCatalogImpl implements Catalog {
+
+ @Property
+ public String currencyCode = "USD";
+
+ @Reference
+ public CurrencyConverter currencyConverter;
+
+ @Reference(required=false)
+ protected Catalog[] goodsCatalog;
+
+
+ public Item[] get() {
+
+ String currencySymbol = currencyConverter.getCurrencySymbol(currencyCode);
+ Vector<Item> catalog = new Vector<Item>();
+
+ for (int i = 0; i < goodsCatalog.length; i++) {
+ Item[] items = goodsCatalog[i].get();
+
+ for (Item item : items) {
+ double price = Double.valueOf(item.getPrice().substring(1));
+ price = currencyConverter.getConversion("USD", currencyCode, price);
+ catalog.addElement(new Item(item.getName(), currencySymbol + price));
+ }
+ }
+
+ Item[] catalogArray = new Item[catalog.size()];
+ catalog.copyInto(catalogArray);
+
+ return catalogArray;
+ }
+
+} \ No newline at end of file
diff --git a/branches/sca-java-1.5.2/tutorials/store/assets/services/merger/MergedCatalogImpl.java b/branches/sca-java-1.5.2/tutorials/store/assets/services/merger/MergedCatalogImpl.java
new file mode 100644
index 0000000000..c02b4e821e
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/assets/services/merger/MergedCatalogImpl.java
@@ -0,0 +1,66 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package services.merger;
+
+import org.osoa.sca.annotations.Property;
+import org.osoa.sca.annotations.Reference;
+
+import services.Catalog;
+import services.CurrencyConverter;
+import services.Item;
+
+public class MergedCatalogImpl implements Catalog {
+
+ @Property
+ public String currencyCode = "USD";
+
+ @Reference
+ public CurrencyConverter currencyConverter;
+
+ @Reference
+ public Catalog fruitsCatalog;
+
+ @Reference
+ public Catalog vegetablesCatalog;
+
+ public Item[] get() {
+ String currencySymbol = currencyConverter.getCurrencySymbol(currencyCode);
+
+ Item[] fruits = fruitsCatalog.get();
+ Item[] vegetables = vegetablesCatalog.get();
+
+ Item[] catalog = new Item[fruits.length + vegetables.length];
+ int i =0;
+ for (Item item: fruits) {
+ double price = Double.valueOf(item.getPrice().substring(1));
+ price = currencyConverter.getConversion("USD", currencyCode, price);
+ catalog[i++] = new Item(item.getName(), currencySymbol + price);
+ }
+
+ for (Item item: vegetables) {
+ double price = Double.valueOf(item.getPrice().substring(1));
+ price = currencyConverter.getConversion("USD", currencyCode, price);
+ catalog[i++] = new Item(item.getName(), currencySymbol + price);
+ }
+
+ return catalog;
+ }
+
+}
diff --git a/branches/sca-java-1.5.2/tutorials/store/assets/tutorial.html b/branches/sca-java-1.5.2/tutorials/store/assets/tutorial.html
new file mode 100644
index 0000000000..14f81e0c22
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/assets/tutorial.html
@@ -0,0 +1,37 @@
+<html>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ -->
+<head>
+<title>Apache Tuscany - Online Store Tutorial</title>
+</head>
+
+<body>
+<h1>Apache Tuscany - Online Store Tutorial
+<h2><a href="http://localhost:9990/ui/home">Online Store - SCA Domain</a>
+<h2><a href="http://localhost:8100/ui/store.html">Online Store - Fruits</a>
+<h2><a href="http://localhost:8200/VegetablesCatalogWebService?wsdl">Vegetables Catalog Web Service</a>
+<h2><a href="http://localhost:8101/ui/store.html">Merger - Fruits and Vegetables</a>
+<h2><a href="http://localhost:8102/ui/store.html">Online Store - Cart Database</a>
+<h2><a href="http://localhost:8103/ui/store.html">Online Store - Supplier</a>
+<h2><a href="http://localhost:8105/ui/store.html">Online Store - Marketplace</a>
+<h2><a href="http://localhost:8333/CatalogWebService?wsdl">Merged Catalog Web Service</a>
+<h2><a href="http://localhost:8104/ui/store-eu.html">EU Online Store</a>
+<h2><a href="http://localhost:8106/mashup/store-mash.html">Online Store Mashup</a>
+</body>
+</html> \ No newline at end of file
diff --git a/branches/sca-java-1.5.2/tutorials/store/assets/uiservices/store.html b/branches/sca-java-1.5.2/tutorials/store/assets/uiservices/store.html
new file mode 100644
index 0000000000..5f4182972e
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/assets/uiservices/store.html
@@ -0,0 +1,183 @@
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<html>
+<head>
+<title>Store</title>
+
+<script type="text/javascript" src="store.js"></script>
+
+<script language="JavaScript">
+
+ //@Reference
+ var catalog = new tuscany.sca.Reference("catalog");
+
+ //@Reference
+ var shoppingCart = new tuscany.sca.Reference("shoppingCart");
+
+ //@Reference
+ var shoppingTotal = new tuscany.sca.Reference("shoppingTotal");
+
+ var catalogItems;
+
+ function catalog_getResponse(items,exception) {
+ if(exception){
+ alert(exception.message);
+ return;
+ }
+ var catalog = "";
+ for (var i=0; i<items.length; i++) {
+ var item = items[i].name + ' - ' + items[i].price;
+ catalog += '<input name="items" type="checkbox" value="' +
+ item + '">' + item + ' <br>';
+ }
+ document.getElementById('catalog').innerHTML=catalog;
+ catalogItems = items;
+ }
+
+ function shoppingCart_getResponse(feed) {
+ document.getElementById("shoppingCart").innerHTML = "";
+ if (feed != null) {
+ var entries = feed.getElementsByTagName("entry");
+ var list = "";
+ for (var i=0; i<entries.length; i++) {
+ var content = entries[i].getElementsByTagName("content")[0];
+ var name = content.getElementsByTagName("name")[0].firstChild.nodeValue;
+ var price = content.getElementsByTagName("price")[0].firstChild.nodeValue;
+ list += name + ' - ' + price + ' <br>';
+ }
+ document.getElementById("shoppingCart").innerHTML = list;
+
+ if (entries.length != 0) {
+ try {
+ shoppingTotal.getTotal(shoppingTotal_getTotalResponse);
+ }
+ catch(e) {
+ alert(e);
+ }
+ }
+ }
+ }
+
+ function shoppingTotal_getTotalResponse(total,exception) {
+ if(exception){
+ alert(exception.message);
+ return;
+ }
+ document.getElementById('total').innerHTML = total;
+ }
+
+ function shoppingCart_postResponse(entry) {
+ shoppingCart.get("", shoppingCart_getResponse);
+ }
+
+ function addToCart() {
+ var items = document.catalogForm.items;
+ var j = 0;
+ for (var i=0; i<items.length; i++)
+ if (items[i].checked) {
+ var entry = '<entry xmlns="http://www.w3.org/2005/Atom"><title>item</title><content type="text/xml">' +
+ '<Item xmlns="http://services/">' +
+ '<name xmlns="">' + catalogItems[i].name + '</name>' + '<price xmlns="">' + catalogItems[i].price + '</price>' +
+ '</Item>' + '</content></entry>';
+ shoppingCart.post(entry, shoppingCart_postResponse);
+ items[i].checked = false;
+ }
+ }
+ function checkoutCart() {
+ var cartHtml = document.getElementById('shoppingCart').innerHTML;
+ var totalHtml = document.getElementById('total').innerHTML;
+
+ document.getElementById('shoppingCart').innerHTML = "";
+ document.getElementById('total').innerHTML = "";
+
+ document.getElementById('store').innerHTML='<h2>' +
+ 'Thanks for Shopping With Us!</h2>'+
+ '<h2>Your Order</h2>'+
+ '<form name="orderForm">'+
+ cartHtml +
+ '<br>'+
+ totalHtml +
+ '<br>'+
+ '<br>'+
+ '<input type="submit" value="Place Order" onClick="confirmTotal()">'+
+ '</form>';
+ }
+
+ function deleteCart() {
+ shoppingCart.del("", null);
+ document.getElementById('shoppingCart').innerHTML = "";
+ document.getElementById('total').innerHTML = "";
+ }
+
+ function confirmTotal() {
+ try {
+ shoppingTotal.confirmTotal(shoppingTotal_confirmTotalResponse);
+ alert("Order dispatched to warehouse");
+ }
+ catch(e) {
+ alert(e);
+ }
+ }
+
+ function shoppingTotal_confirmTotalResponse(exception) {
+ if(exception){
+ alert(exception.message);
+ return;
+ }
+ }
+
+ function init() {
+ try {
+ catalog.get(catalog_getResponse);
+ shoppingCart.get("", shoppingCart_getResponse);
+ }
+ catch(e) {
+ alert(e);
+ }
+ }
+
+</script>
+
+</head>
+
+<body onload="init()">
+<h1>Store</h1>
+ <div id="store">
+ <h2>Catalog</h2>
+ <form name="catalogForm">
+ <div id="catalog" ></div>
+ <br>
+ <input type="button" onClick="addToCart()" value="Add to Cart">
+ </form>
+
+ <br>
+
+ <h2>Your Shopping Cart</h2>
+ <form name="shoppingCartForm">
+ <div id="shoppingCart"></div>
+ <br>
+ <div id="total"></div>
+ <br>
+ <input type="button" onClick="checkoutCart()" value="Checkout">
+ <input type="button" onClick="deleteCart()" value="Empty">
+ <a href="../ShoppingCart/Cart/">(feed)</a>
+ </form>
+ </div>
+</body>
+</html>
diff --git a/branches/sca-java-1.5.2/tutorials/store/catalog-ejb/pom.xml b/branches/sca-java-1.5.2/tutorials/store/catalog-ejb/pom.xml
new file mode 100644
index 0000000000..264e42130f
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/catalog-ejb/pom.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-tutorial-store</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ <relativePath>../pom.xml</relativePath>
+ </parent>
+
+ <artifactId>tutorial-catalog-ejb</artifactId>
+ <name>Apache Tuscany SCA Store Tutorial Catalog EJB</name>
+ <packaging>jar</packaging>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.geronimo.specs</groupId>
+ <artifactId>geronimo-ejb_3.0_spec</artifactId>
+ <version>1.0</version>
+ <scope>provided</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>4.5</version>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.geronimo.modules</groupId>
+ <artifactId>geronimo-openejb</artifactId>
+ <version>2.1.4</version>
+ <scope>test</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>org.apache.geronimo.modules</groupId>
+ <artifactId>geronimo-connector</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.apache.geronimo.modules</groupId>
+ <artifactId>geronimo-persistence-jpa10</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.apache.openejb</groupId>
+ <artifactId>openejb-ejbd</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.apache.openejb</groupId>
+ <artifactId>openejb-server</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.apache.openejb</groupId>
+ <artifactId>openejb-loader</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.apache.openejb</groupId>
+ <artifactId>openejb-jee</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.apache.openejb</groupId>
+ <artifactId>openejb-ejbd</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.apache.openejb</groupId>
+ <artifactId>openejb-javaagent</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>com.sun.xml.bind</groupId>
+ <artifactId>jaxb-impl</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+
+ </dependencies>
+
+ <build>
+ <finalName>${artifactId}</finalName>
+ <resources>
+ <resource>
+ <directory>${pom.basedir}/src/main/resources</directory>
+ <filtering>true</filtering>
+ </resource>
+ </resources>
+ </build>
+
+</project>
+
diff --git a/branches/sca-java-1.5.2/tutorials/store/catalog-ejb/src/main/java/services/ejb/CatalogEJBHome.java b/branches/sca-java-1.5.2/tutorials/store/catalog-ejb/src/main/java/services/ejb/CatalogEJBHome.java
new file mode 100644
index 0000000000..c7ad31b682
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/catalog-ejb/src/main/java/services/ejb/CatalogEJBHome.java
@@ -0,0 +1,28 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package services.ejb;
+
+import javax.ejb.EJBHome;
+
+public interface CatalogEJBHome extends EJBHome {
+
+ CatalogEJBRemote create() throws javax.ejb.CreateException, java.rmi.RemoteException;
+
+}
diff --git a/branches/sca-java-1.5.2/tutorials/store/catalog-ejb/src/main/java/services/ejb/CatalogEJBRemote.java b/branches/sca-java-1.5.2/tutorials/store/catalog-ejb/src/main/java/services/ejb/CatalogEJBRemote.java
new file mode 100644
index 0000000000..7e79fc8b9d
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/catalog-ejb/src/main/java/services/ejb/CatalogEJBRemote.java
@@ -0,0 +1,28 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package services.ejb;
+
+import java.rmi.RemoteException;
+
+import javax.ejb.EJBObject;
+
+public interface CatalogEJBRemote extends EJBObject {
+ Vegetable[] get() throws RemoteException;
+}
diff --git a/branches/sca-java-1.5.2/tutorials/store/catalog-ejb/src/main/java/services/ejb/Vegetable.java b/branches/sca-java-1.5.2/tutorials/store/catalog-ejb/src/main/java/services/ejb/Vegetable.java
new file mode 100644
index 0000000000..cf81539ba5
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/catalog-ejb/src/main/java/services/ejb/Vegetable.java
@@ -0,0 +1,54 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package services.ejb;
+
+import java.io.Serializable;
+
+public class Vegetable implements Serializable {
+ private static final long serialVersionUID = -5847326138627338217L;
+
+ private String name;
+ private String price;
+
+ public Vegetable() {
+ }
+
+ public Vegetable(String name, String price) {
+ this.name = name;
+ this.price = price;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getPrice() {
+ return price;
+ }
+
+ public void setPrice(String price) {
+ this.price = price;
+ }
+
+}
diff --git a/branches/sca-java-1.5.2/tutorials/store/catalog-ejb/src/main/java/services/ejb/VegetablesCatalogEJBSessionBean.java b/branches/sca-java-1.5.2/tutorials/store/catalog-ejb/src/main/java/services/ejb/VegetablesCatalogEJBSessionBean.java
new file mode 100644
index 0000000000..ff2004fe1b
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/catalog-ejb/src/main/java/services/ejb/VegetablesCatalogEJBSessionBean.java
@@ -0,0 +1,62 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package services.ejb;
+
+import java.rmi.RemoteException;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.ejb.CreateException;
+import javax.ejb.EJBException;
+import javax.ejb.SessionBean;
+import javax.ejb.SessionContext;
+
+public class VegetablesCatalogEJBSessionBean implements SessionBean {
+ private static final long serialVersionUID = -7421020241291271838L;
+
+ private List<Vegetable> catalog = new ArrayList<Vegetable>();
+
+ public VegetablesCatalogEJBSessionBean() {
+ catalog.add(new Vegetable("Broccoli", "$2.99"));
+ catalog.add(new Vegetable("Asparagus", "$3.55"));
+ catalog.add(new Vegetable("Cauliflower", "$1.55"));
+ }
+
+ public Vegetable[] get() {
+ Vegetable[] catalogArray = new Vegetable[catalog.size()];
+ catalog.toArray(catalogArray);
+ return catalogArray;
+ }
+
+ public void ejbCreate() throws CreateException {
+ }
+
+ public void ejbActivate() throws EJBException, RemoteException {
+ }
+
+ public void ejbPassivate() throws EJBException, RemoteException {
+ }
+
+ public void ejbRemove() throws EJBException, RemoteException {
+ }
+
+ public void setSessionContext(SessionContext arg0) throws EJBException, RemoteException {
+ }
+}
diff --git a/branches/sca-java-1.5.2/tutorials/store/catalog-ejb/src/main/resources/META-INF/ejb-jar.xml b/branches/sca-java-1.5.2/tutorials/store/catalog-ejb/src/main/resources/META-INF/ejb-jar.xml
new file mode 100644
index 0000000000..a0a7adf6fa
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/catalog-ejb/src/main/resources/META-INF/ejb-jar.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<ejb-jar xmlns="http://java.sun.com/xml/ns/j2ee"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
+ http://java.sun.com/xml/ns/j2ee/ejb-jar_2_1.xsd"
+ version="2.1">
+
+ <display-name>Apache Tuscany SCA Tutorial Catalog EJB</display-name>
+ <enterprise-beans>
+ <session id="VegetablesCatalogEJB">
+ <ejb-name>VegetablesCatalogEJB</ejb-name>
+ <home>services.ejb.CatalogEJBHome</home>
+ <remote>services.ejb.CatalogEJBRemote</remote>
+ <ejb-class>services.ejb.VegetablesCatalogEJBSessionBean</ejb-class>
+ <session-type>Stateless</session-type>
+ <transaction-type>Container</transaction-type>
+ </session>
+ </enterprise-beans>
+</ejb-jar>
diff --git a/branches/sca-java-1.5.2/tutorials/store/catalog-ejb/src/main/resources/META-INF/openejb-jar.xml b/branches/sca-java-1.5.2/tutorials/store/catalog-ejb/src/main/resources/META-INF/openejb-jar.xml
new file mode 100644
index 0000000000..04d77ee39e
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/catalog-ejb/src/main/resources/META-INF/openejb-jar.xml
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<openejb-jar xmlns="http://www.openejb.org/xml/ns/openejb-jar-2.1"
+ xmlns:sys="http://geronimo.apache.org/xml/ns/deployment-1.2">
+ <sys:environment>
+ <sys:moduleId>
+ <sys:groupId>${pom.groupId}</sys:groupId>
+ <sys:artifactId>${pom.artifactId}</sys:artifactId>
+ <sys:version>${version}</sys:version>
+ <sys:type>jar</sys:type>
+ </sys:moduleId>
+ <sys:dependencies>
+ <sys:dependency>
+ <sys:groupId>org.apache.geronimo.configs</sys:groupId>
+ <sys:artifactId>j2ee-corba-yoko</sys:artifactId>
+ <!--
+ <sys:version>2.0.2</sys:version>
+ -->
+ <sys:type>car</sys:type>
+ </sys:dependency>
+ </sys:dependencies>
+ <sys:hidden-classes />
+ <sys:non-overridable-classes />
+ </sys:environment>
+
+ <enterprise-beans>
+ <session>
+ <ejb-name>VegetablesCatalogEJB</ejb-name>
+ <jndi-name>VegetablesCatalogEJB</jndi-name>
+ <tss-link>IdentityTokenNoSecurity</tss-link>
+ </session>
+ </enterprise-beans>
+
+ <!--
+ NOTE: for geronimo 2.0.2, please make sure the following system module is started
+ before the deployment of the EJB jar
+ org.apache.geronimo.configs/openejb-corba-deployer/2.0.2/car
+ -->
+ <gbean name="IdentityTokenNoSecurity" class="org.apache.geronimo.corba.TSSBean">
+ <attribute name="POAName">IdentityTokenNoSecurity</attribute>
+ <reference name="Server">
+ <name>UnprotectedServer</name>
+ </reference>
+ <xml-attribute name="tssConfig">
+ <tss:tss xmlns:tss="http://openejb.apache.org/xml/ns/corba-tss-config-2.1"
+ xmlns:sec="http://geronimo.apache.org/xml/ns/security-1.2">
+ <tss:compoundSecMechTypeList>
+ <tss:compoundSecMech>
+ <tss:sasMech>
+ <tss:identityTokenTypes>
+ <tss:ITTAnonymous />
+ <tss:ITTPrincipalNameGSSUP
+ principal-class="org.apache.geronimo.security.realm.providers.GeronimoUserPrincipal" />
+ <tss:ITTDistinguishedName />
+ <tss:ITTX509CertChain />
+ </tss:identityTokenTypes>
+ </tss:sasMech>
+ </tss:compoundSecMech>
+ </tss:compoundSecMechTypeList>
+ </tss:tss>
+ </xml-attribute>
+ </gbean>
+</openejb-jar>
diff --git a/branches/sca-java-1.5.2/tutorials/store/catalog-ejb/src/main/resources/META-INF/sca-contribution.xml b/branches/sca-java-1.5.2/tutorials/store/catalog-ejb/src/main/resources/META-INF/sca-contribution.xml
new file mode 100644
index 0000000000..2e46b31047
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/catalog-ejb/src/main/resources/META-INF/sca-contribution.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<contribution xmlns="http://www.osoa.org/xmlns/sca/1.0"
+ xmlns:c="http://catalog">
+ <export.java package="services.ejb"/>
+ <deployable composite="c:catalog-ejb"/>
+</contribution> \ No newline at end of file
diff --git a/branches/sca-java-1.5.2/tutorials/store/catalog-ejb/src/main/resources/VegetablesCatalogEJB.componentType b/branches/sca-java-1.5.2/tutorials/store/catalog-ejb/src/main/resources/VegetablesCatalogEJB.componentType
new file mode 100644
index 0000000000..bc57b35e79
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/catalog-ejb/src/main/resources/VegetablesCatalogEJB.componentType
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<componentType xmlns="http://www.osoa.org/xmlns/sca/1.0">
+
+ <service name="CatalogEJB">
+ <interface.java interface="services.ejb.CatalogEJBRemote"/>
+ </service>
+
+</componentType>
diff --git a/branches/sca-java-1.5.2/tutorials/store/catalog-ejb/src/main/resources/catalog-ejb.composite b/branches/sca-java-1.5.2/tutorials/store/catalog-ejb/src/main/resources/catalog-ejb.composite
new file mode 100644
index 0000000000..f733524809
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/catalog-ejb/src/main/resources/catalog-ejb.composite
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
+ targetNamespace="http://catalog"
+ name="catalog-ejb">
+
+ <component name="VegetablesCatalogEJB">
+ <implementation.ejb ejb-link="tutorial-catalog-ejb.jar#VegetablesCatalogEJB"/>
+ <service name="CatalogEJB">
+ <binding.ejb uri="/VegetablesCatalogEJB"/>
+ </service>
+ </component>
+
+</composite>
diff --git a/branches/sca-java-1.5.2/tutorials/store/catalog-ejb/src/test/java/client/CatalogEJBClientTestCase.java b/branches/sca-java-1.5.2/tutorials/store/catalog-ejb/src/test/java/client/CatalogEJBClientTestCase.java
new file mode 100644
index 0000000000..f9bd16f050
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/catalog-ejb/src/test/java/client/CatalogEJBClientTestCase.java
@@ -0,0 +1,67 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package client;
+
+import javax.naming.InitialContext;
+import javax.rmi.PortableRemoteObject;
+
+import org.junit.Ignore;
+import org.junit.Test;
+
+import services.ejb.CatalogEJBHome;
+import services.ejb.CatalogEJBRemote;
+import services.ejb.Vegetable;
+
+/**
+ * A test client for the catalog EJB.
+ *
+ * @version $Rev$ $Date$
+ */
+public class CatalogEJBClientTestCase {
+
+ @Test
+ @Ignore // Ignore the test case for maven build, remove it if you want to run
+ public void testCatalogEJB() throws Exception {
+ InitialContext context = new InitialContext();
+
+ Object o = context.lookup("corbaname:iiop:1.2@localhost:1050#VegetablesCatalogEJB");
+
+ // The narrow(...) call requires generated EJB stubs. Tuscany binding.ejb doesn't the stubs
+ CatalogEJBHome home = (CatalogEJBHome)PortableRemoteObject.narrow(o, CatalogEJBHome.class);
+
+ // The following call will hang with SUN jdk1.6.0_05, please use SUN or IBM jdk 1.5.x instead
+ CatalogEJBRemote catalog = home.create();
+
+ Vegetable items[] = catalog.get();
+ for (Vegetable item : items) {
+ System.out.println(item.getName() + " " + item.getPrice());
+ }
+ }
+
+ public static void main(String args[]) throws Exception {
+ String javaVersion = System.getProperty("java.version");
+ String javaVendor = System.getProperty("java.vendor");
+
+ if (javaVendor.toUpperCase().contains("SUN") && javaVersion.startsWith("1.6.")) {
+ System.err.println("The EJB invocation may hang due to a bug in " + javaVendor + ":" + javaVersion);
+ }
+ new CatalogEJBClientTestCase().testCatalogEJB();
+ }
+
+}
diff --git a/branches/sca-java-1.5.2/tutorials/store/catalog-ejb/src/test/java/org/omg/stub/javax/ejb/_EJBHome_Stub.java b/branches/sca-java-1.5.2/tutorials/store/catalog-ejb/src/test/java/org/omg/stub/javax/ejb/_EJBHome_Stub.java
new file mode 100644
index 0000000000..6930093042
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/catalog-ejb/src/test/java/org/omg/stub/javax/ejb/_EJBHome_Stub.java
@@ -0,0 +1,223 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+// Stub class generated by rmic, do not edit.
+// Contents subject to change without notice.
+
+package org.omg.stub.javax.ejb;
+
+import java.rmi.RemoteException;
+import java.rmi.UnexpectedException;
+
+import javax.ejb.EJBHome;
+import javax.ejb.EJBMetaData;
+import javax.ejb.Handle;
+import javax.ejb.HomeHandle;
+import javax.ejb.RemoveException;
+import javax.rmi.CORBA.Stub;
+import javax.rmi.CORBA.Util;
+
+import org.omg.CORBA.SystemException;
+import org.omg.CORBA.portable.ApplicationException;
+import org.omg.CORBA.portable.OutputStream;
+import org.omg.CORBA.portable.RemarshalException;
+import org.omg.CORBA.portable.ServantObject;
+import org.omg.CORBA_2_3.portable.InputStream;
+
+public class _EJBHome_Stub extends Stub implements EJBHome {
+
+ private static final String[] _type_ids = {
+ "RMI:javax.ejb.EJBHome:0000000000000000"
+ };
+
+ public String[] _ids() {
+ return _type_ids;
+ }
+
+ public EJBMetaData getEJBMetaData() throws RemoteException {
+ while(true) {
+ if (!Util.isLocal(this)) {
+ InputStream in = null;
+ try {
+ try {
+ OutputStream out = _request("_get_EJBMetaData", true);
+ in = (InputStream)_invoke(out);
+ return (EJBMetaData) in.read_value(EJBMetaData.class);
+ } catch (ApplicationException ex) {
+ in = (InputStream) ex.getInputStream();
+ String id = in.read_string();
+ throw new UnexpectedException(id);
+ } catch (RemarshalException ex) {
+ continue;
+ }
+ } catch (SystemException ex) {
+ throw Util.mapSystemException(ex);
+ } finally {
+ _releaseReply(in);
+ }
+ } else {
+ ServantObject so = _servant_preinvoke("_get_EJBMetaData",javax.ejb.EJBHome.class);
+ if (so == null) {
+ continue;
+ }
+ try {
+ EJBMetaData result = ((javax.ejb.EJBHome)so.servant).getEJBMetaData();
+ return (EJBMetaData)Util.copyObject(result,_orb());
+ } catch (Throwable ex) {
+ Throwable exCopy = (Throwable)Util.copyObject(ex,_orb());
+ throw Util.wrapException(exCopy);
+ } finally {
+ _servant_postinvoke(so);
+ }
+ }
+ }
+ }
+
+ public HomeHandle getHomeHandle() throws RemoteException {
+ while(true) {
+ if (!Util.isLocal(this)) {
+ InputStream in = null;
+ try {
+ try {
+ OutputStream out = _request("_get_homeHandle", true);
+ in = (InputStream)_invoke(out);
+ return (HomeHandle) in.read_abstract_interface(HomeHandle.class);
+ } catch (ApplicationException ex) {
+ in = (InputStream) ex.getInputStream();
+ String id = in.read_string();
+ throw new UnexpectedException(id);
+ } catch (RemarshalException ex) {
+ continue;
+ }
+ } catch (SystemException ex) {
+ throw Util.mapSystemException(ex);
+ } finally {
+ _releaseReply(in);
+ }
+ } else {
+ ServantObject so = _servant_preinvoke("_get_homeHandle",javax.ejb.EJBHome.class);
+ if (so == null) {
+ continue;
+ }
+ try {
+ HomeHandle result = ((javax.ejb.EJBHome)so.servant).getHomeHandle();
+ return (HomeHandle)Util.copyObject(result,_orb());
+ } catch (Throwable ex) {
+ Throwable exCopy = (Throwable)Util.copyObject(ex,_orb());
+ throw Util.wrapException(exCopy);
+ } finally {
+ _servant_postinvoke(so);
+ }
+ }
+ }
+ }
+
+ public void remove(Handle arg0) throws RemoteException, RemoveException {
+ while(true) {
+ if (!Util.isLocal(this)) {
+ InputStream in = null;
+ try {
+ try {
+ OutputStream out = _request("remove__javax_ejb_Handle", true);
+ Util.writeAbstractObject(out,arg0);
+ _invoke(out);
+ return;
+ } catch (ApplicationException ex) {
+ in = (InputStream) ex.getInputStream();
+ String id = in.read_string();
+ if (id.equals("IDL:javax/ejb/RemoveEx:1.0")) {
+ throw (RemoveException) in.read_value(RemoveException.class);
+ }
+ throw new UnexpectedException(id);
+ } catch (RemarshalException ex) {
+ continue;
+ }
+ } catch (SystemException ex) {
+ throw Util.mapSystemException(ex);
+ } finally {
+ _releaseReply(in);
+ }
+ } else {
+ ServantObject so = _servant_preinvoke("remove__javax_ejb_Handle",javax.ejb.EJBHome.class);
+ if (so == null) {
+ continue;
+ }
+ try {
+ Handle arg0Copy = (Handle) Util.copyObject(arg0,_orb());
+ ((javax.ejb.EJBHome)so.servant).remove(arg0Copy);
+ return;
+ } catch (Throwable ex) {
+ Throwable exCopy = (Throwable)Util.copyObject(ex,_orb());
+ if (exCopy instanceof RemoveException) {
+ throw (RemoveException)exCopy;
+ }
+ throw Util.wrapException(exCopy);
+ } finally {
+ _servant_postinvoke(so);
+ }
+ }
+ }
+ }
+
+ public void remove(Object arg0) throws RemoteException, RemoveException {
+ while(true) {
+ if (!Util.isLocal(this)) {
+ InputStream in = null;
+ try {
+ try {
+ OutputStream out = _request("remove__java_lang_Object", true);
+ Util.writeAny(out,arg0);
+ _invoke(out);
+ return;
+ } catch (ApplicationException ex) {
+ in = (InputStream) ex.getInputStream();
+ String id = in.read_string();
+ if (id.equals("IDL:javax/ejb/RemoveEx:1.0")) {
+ throw (RemoveException) in.read_value(RemoveException.class);
+ }
+ throw new UnexpectedException(id);
+ } catch (RemarshalException ex) {
+ continue;
+ }
+ } catch (SystemException ex) {
+ throw Util.mapSystemException(ex);
+ } finally {
+ _releaseReply(in);
+ }
+ } else {
+ ServantObject so = _servant_preinvoke("remove__java_lang_Object",javax.ejb.EJBHome.class);
+ if (so == null) {
+ continue;
+ }
+ try {
+ Object arg0Copy = (Object) Util.copyObject(arg0,_orb());
+ ((javax.ejb.EJBHome)so.servant).remove(arg0Copy);
+ return;
+ } catch (Throwable ex) {
+ Throwable exCopy = (Throwable)Util.copyObject(ex,_orb());
+ if (exCopy instanceof RemoveException) {
+ throw (RemoveException)exCopy;
+ }
+ throw Util.wrapException(exCopy);
+ } finally {
+ _servant_postinvoke(so);
+ }
+ }
+ }
+ }
+}
diff --git a/branches/sca-java-1.5.2/tutorials/store/catalog-ejb/src/test/java/org/omg/stub/javax/ejb/_EJBObject_Stub.java b/branches/sca-java-1.5.2/tutorials/store/catalog-ejb/src/test/java/org/omg/stub/javax/ejb/_EJBObject_Stub.java
new file mode 100644
index 0000000000..3482ebb9ec
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/catalog-ejb/src/test/java/org/omg/stub/javax/ejb/_EJBObject_Stub.java
@@ -0,0 +1,252 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+// Stub class generated by rmic, do not edit.
+// Contents subject to change without notice.
+
+package org.omg.stub.javax.ejb;
+
+import java.rmi.RemoteException;
+import java.rmi.UnexpectedException;
+
+import javax.ejb.EJBHome;
+import javax.ejb.EJBObject;
+import javax.ejb.Handle;
+import javax.ejb.RemoveException;
+import javax.rmi.CORBA.Stub;
+import javax.rmi.CORBA.Util;
+
+import org.omg.CORBA.SystemException;
+import org.omg.CORBA.portable.ApplicationException;
+import org.omg.CORBA.portable.InputStream;
+import org.omg.CORBA.portable.OutputStream;
+import org.omg.CORBA.portable.RemarshalException;
+import org.omg.CORBA.portable.ServantObject;
+
+public class _EJBObject_Stub extends Stub implements EJBObject {
+
+ private static final String[] _type_ids = {
+ "RMI:javax.ejb.EJBObject:0000000000000000"
+ };
+
+ public String[] _ids() {
+ return _type_ids;
+ }
+
+ public EJBHome getEJBHome() throws RemoteException {
+ while(true) {
+ if (!Util.isLocal(this)) {
+ InputStream in = null;
+ try {
+ try {
+ OutputStream out = _request("_get_EJBHome", true);
+ in = _invoke(out);
+ return (EJBHome) in.read_Object(EJBHome.class);
+ } catch (ApplicationException ex) {
+ in = ex.getInputStream();
+ String id = in.read_string();
+ throw new UnexpectedException(id);
+ } catch (RemarshalException ex) {
+ continue;
+ }
+ } catch (SystemException ex) {
+ throw Util.mapSystemException(ex);
+ } finally {
+ _releaseReply(in);
+ }
+ } else {
+ ServantObject so = _servant_preinvoke("_get_EJBHome",javax.ejb.EJBObject.class);
+ if (so == null) {
+ continue;
+ }
+ try {
+ EJBHome result = ((javax.ejb.EJBObject)so.servant).getEJBHome();
+ return (EJBHome)Util.copyObject(result,_orb());
+ } catch (Throwable ex) {
+ Throwable exCopy = (Throwable)Util.copyObject(ex,_orb());
+ throw Util.wrapException(exCopy);
+ } finally {
+ _servant_postinvoke(so);
+ }
+ }
+ }
+ }
+
+ public Handle getHandle() throws RemoteException {
+ while(true) {
+ if (!Util.isLocal(this)) {
+ org.omg.CORBA_2_3.portable.InputStream in = null;
+ try {
+ try {
+ OutputStream out = _request("_get_handle", true);
+ in = (org.omg.CORBA_2_3.portable.InputStream)_invoke(out);
+ return (Handle) in.read_abstract_interface(Handle.class);
+ } catch (ApplicationException ex) {
+ in = (org.omg.CORBA_2_3.portable.InputStream) ex.getInputStream();
+ String id = in.read_string();
+ throw new UnexpectedException(id);
+ } catch (RemarshalException ex) {
+ continue;
+ }
+ } catch (SystemException ex) {
+ throw Util.mapSystemException(ex);
+ } finally {
+ _releaseReply(in);
+ }
+ } else {
+ ServantObject so = _servant_preinvoke("_get_handle",javax.ejb.EJBObject.class);
+ if (so == null) {
+ continue;
+ }
+ try {
+ Handle result = ((javax.ejb.EJBObject)so.servant).getHandle();
+ return (Handle)Util.copyObject(result,_orb());
+ } catch (Throwable ex) {
+ Throwable exCopy = (Throwable)Util.copyObject(ex,_orb());
+ throw Util.wrapException(exCopy);
+ } finally {
+ _servant_postinvoke(so);
+ }
+ }
+ }
+ }
+
+ public Object getPrimaryKey() throws RemoteException {
+ while(true) {
+ if (!Util.isLocal(this)) {
+ InputStream in = null;
+ try {
+ try {
+ OutputStream out = _request("_get_primaryKey", true);
+ in = _invoke(out);
+ return Util.readAny(in);
+ } catch (ApplicationException ex) {
+ in = ex.getInputStream();
+ String id = in.read_string();
+ throw new UnexpectedException(id);
+ } catch (RemarshalException ex) {
+ continue;
+ }
+ } catch (SystemException ex) {
+ throw Util.mapSystemException(ex);
+ } finally {
+ _releaseReply(in);
+ }
+ } else {
+ ServantObject so = _servant_preinvoke("_get_primaryKey",javax.ejb.EJBObject.class);
+ if (so == null) {
+ continue;
+ }
+ try {
+ Object result = ((javax.ejb.EJBObject)so.servant).getPrimaryKey();
+ return (Object)Util.copyObject(result,_orb());
+ } catch (Throwable ex) {
+ Throwable exCopy = (Throwable)Util.copyObject(ex,_orb());
+ throw Util.wrapException(exCopy);
+ } finally {
+ _servant_postinvoke(so);
+ }
+ }
+ }
+ }
+
+ public boolean isIdentical(EJBObject arg0) throws RemoteException {
+ while(true) {
+ if (!Util.isLocal(this)) {
+ InputStream in = null;
+ try {
+ try {
+ OutputStream out = _request("isIdentical", true);
+ Util.writeRemoteObject(out,arg0);
+ in = _invoke(out);
+ return in.read_boolean();
+ } catch (ApplicationException ex) {
+ in = ex.getInputStream();
+ String id = in.read_string();
+ throw new UnexpectedException(id);
+ } catch (RemarshalException ex) {
+ continue;
+ }
+ } catch (SystemException ex) {
+ throw Util.mapSystemException(ex);
+ } finally {
+ _releaseReply(in);
+ }
+ } else {
+ ServantObject so = _servant_preinvoke("isIdentical",javax.ejb.EJBObject.class);
+ if (so == null) {
+ continue;
+ }
+ try {
+ EJBObject arg0Copy = (EJBObject) Util.copyObject(arg0,_orb());
+ return ((javax.ejb.EJBObject)so.servant).isIdentical(arg0Copy);
+ } catch (Throwable ex) {
+ Throwable exCopy = (Throwable)Util.copyObject(ex,_orb());
+ throw Util.wrapException(exCopy);
+ } finally {
+ _servant_postinvoke(so);
+ }
+ }
+ }
+ }
+
+ public void remove() throws RemoteException, RemoveException {
+ while(true) {
+ if (!Util.isLocal(this)) {
+ org.omg.CORBA_2_3.portable.InputStream in = null;
+ try {
+ try {
+ OutputStream out = _request("remove", true);
+ _invoke(out);
+ return;
+ } catch (ApplicationException ex) {
+ in = (org.omg.CORBA_2_3.portable.InputStream) ex.getInputStream();
+ String id = in.read_string();
+ if (id.equals("IDL:javax/ejb/RemoveEx:1.0")) {
+ throw (RemoveException) in.read_value(RemoveException.class);
+ }
+ throw new UnexpectedException(id);
+ } catch (RemarshalException ex) {
+ continue;
+ }
+ } catch (SystemException ex) {
+ throw Util.mapSystemException(ex);
+ } finally {
+ _releaseReply(in);
+ }
+ } else {
+ ServantObject so = _servant_preinvoke("remove",javax.ejb.EJBObject.class);
+ if (so == null) {
+ continue;
+ }
+ try {
+ ((javax.ejb.EJBObject)so.servant).remove();
+ return;
+ } catch (Throwable ex) {
+ Throwable exCopy = (Throwable)Util.copyObject(ex,_orb());
+ if (exCopy instanceof RemoveException) {
+ throw (RemoveException)exCopy;
+ }
+ throw Util.wrapException(exCopy);
+ } finally {
+ _servant_postinvoke(so);
+ }
+ }
+ }
+ }
+}
diff --git a/branches/sca-java-1.5.2/tutorials/store/catalog-ejb/src/test/java/org/omg/stub/javax/ejb/_Handle_Stub.java b/branches/sca-java-1.5.2/tutorials/store/catalog-ejb/src/test/java/org/omg/stub/javax/ejb/_Handle_Stub.java
new file mode 100644
index 0000000000..d848fbb280
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/catalog-ejb/src/test/java/org/omg/stub/javax/ejb/_Handle_Stub.java
@@ -0,0 +1,89 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+// Stub class generated by rmic, do not edit.
+// Contents subject to change without notice.
+
+package org.omg.stub.javax.ejb;
+
+import java.rmi.Remote;
+import java.rmi.RemoteException;
+import java.rmi.UnexpectedException;
+
+import javax.ejb.EJBObject;
+import javax.ejb.Handle;
+import javax.rmi.CORBA.Stub;
+import javax.rmi.CORBA.Util;
+
+import org.omg.CORBA.SystemException;
+import org.omg.CORBA.portable.ApplicationException;
+import org.omg.CORBA.portable.InputStream;
+import org.omg.CORBA.portable.OutputStream;
+import org.omg.CORBA.portable.RemarshalException;
+import org.omg.CORBA.portable.ServantObject;
+
+public class _Handle_Stub extends Stub implements Handle,
+Remote {
+
+ private static final String[] _type_ids = {
+ "RMI:javax.ejb.Handle:0000000000000000"
+ };
+
+ public String[] _ids() {
+ return _type_ids;
+ }
+
+ public EJBObject getEJBObject() throws RemoteException {
+ while(true) {
+ if (!Util.isLocal(this)) {
+ InputStream in = null;
+ try {
+ try {
+ OutputStream out = _request("_get_EJBObject", true);
+ in = _invoke(out);
+ return (EJBObject) in.read_Object(EJBObject.class);
+ } catch (ApplicationException ex) {
+ in = ex.getInputStream();
+ String id = in.read_string();
+ throw new UnexpectedException(id);
+ } catch (RemarshalException ex) {
+ continue;
+ }
+ } catch (SystemException ex) {
+ throw Util.mapSystemException(ex);
+ } finally {
+ _releaseReply(in);
+ }
+ } else {
+ ServantObject so = _servant_preinvoke("_get_EJBObject",javax.ejb.Handle.class);
+ if (so == null) {
+ continue;
+ }
+ try {
+ EJBObject result = ((javax.ejb.Handle)so.servant).getEJBObject();
+ return (EJBObject)Util.copyObject(result,_orb());
+ } catch (Throwable ex) {
+ Throwable exCopy = (Throwable)Util.copyObject(ex,_orb());
+ throw Util.wrapException(exCopy);
+ } finally {
+ _servant_postinvoke(so);
+ }
+ }
+ }
+ }
+}
diff --git a/branches/sca-java-1.5.2/tutorials/store/catalog-ejb/src/test/java/org/omg/stub/javax/ejb/_HomeHandle_Stub.java b/branches/sca-java-1.5.2/tutorials/store/catalog-ejb/src/test/java/org/omg/stub/javax/ejb/_HomeHandle_Stub.java
new file mode 100644
index 0000000000..6efc86b608
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/catalog-ejb/src/test/java/org/omg/stub/javax/ejb/_HomeHandle_Stub.java
@@ -0,0 +1,89 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+// Stub class generated by rmic, do not edit.
+// Contents subject to change without notice.
+
+package org.omg.stub.javax.ejb;
+
+import java.rmi.Remote;
+import java.rmi.RemoteException;
+import java.rmi.UnexpectedException;
+
+import javax.ejb.EJBHome;
+import javax.ejb.HomeHandle;
+import javax.rmi.CORBA.Stub;
+import javax.rmi.CORBA.Util;
+
+import org.omg.CORBA.SystemException;
+import org.omg.CORBA.portable.ApplicationException;
+import org.omg.CORBA.portable.InputStream;
+import org.omg.CORBA.portable.OutputStream;
+import org.omg.CORBA.portable.RemarshalException;
+import org.omg.CORBA.portable.ServantObject;
+
+public class _HomeHandle_Stub extends Stub implements HomeHandle,
+Remote {
+
+ private static final String[] _type_ids = {
+ "RMI:javax.ejb.HomeHandle:0000000000000000"
+ };
+
+ public String[] _ids() {
+ return _type_ids;
+ }
+
+ public EJBHome getEJBHome() throws RemoteException {
+ while(true) {
+ if (!Util.isLocal(this)) {
+ InputStream in = null;
+ try {
+ try {
+ OutputStream out = _request("_get_EJBHome", true);
+ in = _invoke(out);
+ return (EJBHome) in.read_Object(EJBHome.class);
+ } catch (ApplicationException ex) {
+ in = ex.getInputStream();
+ String id = in.read_string();
+ throw new UnexpectedException(id);
+ } catch (RemarshalException ex) {
+ continue;
+ }
+ } catch (SystemException ex) {
+ throw Util.mapSystemException(ex);
+ } finally {
+ _releaseReply(in);
+ }
+ } else {
+ ServantObject so = _servant_preinvoke("_get_EJBHome",javax.ejb.HomeHandle.class);
+ if (so == null) {
+ continue;
+ }
+ try {
+ EJBHome result = ((javax.ejb.HomeHandle)so.servant).getEJBHome();
+ return (EJBHome)Util.copyObject(result,_orb());
+ } catch (Throwable ex) {
+ Throwable exCopy = (Throwable)Util.copyObject(ex,_orb());
+ throw Util.wrapException(exCopy);
+ } finally {
+ _servant_postinvoke(so);
+ }
+ }
+ }
+ }
+}
diff --git a/branches/sca-java-1.5.2/tutorials/store/catalog-ejb/src/test/java/services/ejb/_CatalogEJBHome_Stub.java b/branches/sca-java-1.5.2/tutorials/store/catalog-ejb/src/test/java/services/ejb/_CatalogEJBHome_Stub.java
new file mode 100644
index 0000000000..bdc1a5cfd5
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/catalog-ejb/src/test/java/services/ejb/_CatalogEJBHome_Stub.java
@@ -0,0 +1,269 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+// Stub class generated by rmic, do not edit.
+// Contents subject to change without notice.
+
+package services.ejb;
+
+import java.rmi.RemoteException;
+import java.rmi.UnexpectedException;
+
+import javax.ejb.CreateException;
+import javax.ejb.EJBMetaData;
+import javax.ejb.Handle;
+import javax.ejb.HomeHandle;
+import javax.ejb.RemoveException;
+import javax.rmi.CORBA.Stub;
+import javax.rmi.CORBA.Util;
+
+import org.omg.CORBA.SystemException;
+import org.omg.CORBA.portable.ApplicationException;
+import org.omg.CORBA.portable.OutputStream;
+import org.omg.CORBA.portable.RemarshalException;
+import org.omg.CORBA.portable.ServantObject;
+import org.omg.CORBA_2_3.portable.InputStream;
+
+public class _CatalogEJBHome_Stub extends Stub implements CatalogEJBHome {
+
+ private static final String[] _type_ids = {
+ "RMI:services.ejb.CatalogEJBHome:0000000000000000",
+ "RMI:javax.ejb.EJBHome:0000000000000000"
+ };
+
+ public String[] _ids() {
+ return _type_ids;
+ }
+
+ public EJBMetaData getEJBMetaData() throws RemoteException {
+ while(true) {
+ if (!Util.isLocal(this)) {
+ InputStream in = null;
+ try {
+ try {
+ OutputStream out = _request("_get_EJBMetaData", true);
+ in = (InputStream)_invoke(out);
+ return (EJBMetaData) in.read_value(EJBMetaData.class);
+ } catch (ApplicationException ex) {
+ in = (InputStream) ex.getInputStream();
+ String id = in.read_string();
+ throw new UnexpectedException(id);
+ } catch (RemarshalException ex) {
+ continue;
+ }
+ } catch (SystemException ex) {
+ throw Util.mapSystemException(ex);
+ } finally {
+ _releaseReply(in);
+ }
+ } else {
+ ServantObject so = _servant_preinvoke("_get_EJBMetaData",javax.ejb.EJBHome.class);
+ if (so == null) {
+ continue;
+ }
+ try {
+ EJBMetaData result = ((javax.ejb.EJBHome)so.servant).getEJBMetaData();
+ return (EJBMetaData)Util.copyObject(result,_orb());
+ } catch (Throwable ex) {
+ Throwable exCopy = (Throwable)Util.copyObject(ex,_orb());
+ throw Util.wrapException(exCopy);
+ } finally {
+ _servant_postinvoke(so);
+ }
+ }
+ }
+ }
+
+ public HomeHandle getHomeHandle() throws RemoteException {
+ while(true) {
+ if (!Util.isLocal(this)) {
+ InputStream in = null;
+ try {
+ try {
+ OutputStream out = _request("_get_homeHandle", true);
+ in = (InputStream)_invoke(out);
+ return (HomeHandle) in.read_abstract_interface(HomeHandle.class);
+ } catch (ApplicationException ex) {
+ in = (InputStream) ex.getInputStream();
+ String id = in.read_string();
+ throw new UnexpectedException(id);
+ } catch (RemarshalException ex) {
+ continue;
+ }
+ } catch (SystemException ex) {
+ throw Util.mapSystemException(ex);
+ } finally {
+ _releaseReply(in);
+ }
+ } else {
+ ServantObject so = _servant_preinvoke("_get_homeHandle",javax.ejb.EJBHome.class);
+ if (so == null) {
+ continue;
+ }
+ try {
+ HomeHandle result = ((javax.ejb.EJBHome)so.servant).getHomeHandle();
+ return (HomeHandle)Util.copyObject(result,_orb());
+ } catch (Throwable ex) {
+ Throwable exCopy = (Throwable)Util.copyObject(ex,_orb());
+ throw Util.wrapException(exCopy);
+ } finally {
+ _servant_postinvoke(so);
+ }
+ }
+ }
+ }
+
+ public void remove(Handle arg0) throws RemoteException, RemoveException {
+ while(true) {
+ if (!Util.isLocal(this)) {
+ InputStream in = null;
+ try {
+ try {
+ OutputStream out = _request("remove__javax_ejb_Handle", true);
+ Util.writeAbstractObject(out,arg0);
+ _invoke(out);
+ return;
+ } catch (ApplicationException ex) {
+ in = (InputStream) ex.getInputStream();
+ String id = in.read_string();
+ if (id.equals("IDL:javax/ejb/RemoveEx:1.0")) {
+ throw (RemoveException) in.read_value(RemoveException.class);
+ }
+ throw new UnexpectedException(id);
+ } catch (RemarshalException ex) {
+ continue;
+ }
+ } catch (SystemException ex) {
+ throw Util.mapSystemException(ex);
+ } finally {
+ _releaseReply(in);
+ }
+ } else {
+ ServantObject so = _servant_preinvoke("remove__javax_ejb_Handle",javax.ejb.EJBHome.class);
+ if (so == null) {
+ continue;
+ }
+ try {
+ Handle arg0Copy = (Handle) Util.copyObject(arg0,_orb());
+ ((javax.ejb.EJBHome)so.servant).remove(arg0Copy);
+ return;
+ } catch (Throwable ex) {
+ Throwable exCopy = (Throwable)Util.copyObject(ex,_orb());
+ if (exCopy instanceof RemoveException) {
+ throw (RemoveException)exCopy;
+ }
+ throw Util.wrapException(exCopy);
+ } finally {
+ _servant_postinvoke(so);
+ }
+ }
+ }
+ }
+
+ public void remove(Object arg0) throws RemoteException, RemoveException {
+ while(true) {
+ if (!Util.isLocal(this)) {
+ InputStream in = null;
+ try {
+ try {
+ OutputStream out = _request("remove__java_lang_Object", true);
+ Util.writeAny(out,arg0);
+ _invoke(out);
+ return;
+ } catch (ApplicationException ex) {
+ in = (InputStream) ex.getInputStream();
+ String id = in.read_string();
+ if (id.equals("IDL:javax/ejb/RemoveEx:1.0")) {
+ throw (RemoveException) in.read_value(RemoveException.class);
+ }
+ throw new UnexpectedException(id);
+ } catch (RemarshalException ex) {
+ continue;
+ }
+ } catch (SystemException ex) {
+ throw Util.mapSystemException(ex);
+ } finally {
+ _releaseReply(in);
+ }
+ } else {
+ ServantObject so = _servant_preinvoke("remove__java_lang_Object",javax.ejb.EJBHome.class);
+ if (so == null) {
+ continue;
+ }
+ try {
+ Object arg0Copy = (Object) Util.copyObject(arg0,_orb());
+ ((javax.ejb.EJBHome)so.servant).remove(arg0Copy);
+ return;
+ } catch (Throwable ex) {
+ Throwable exCopy = (Throwable)Util.copyObject(ex,_orb());
+ if (exCopy instanceof RemoveException) {
+ throw (RemoveException)exCopy;
+ }
+ throw Util.wrapException(exCopy);
+ } finally {
+ _servant_postinvoke(so);
+ }
+ }
+ }
+ }
+
+ public CatalogEJBRemote create() throws CreateException, RemoteException {
+ while(true) {
+ if (!Util.isLocal(this)) {
+ InputStream in = null;
+ try {
+ try {
+ OutputStream out = _request("create", true);
+ in = (InputStream)_invoke(out);
+ return (CatalogEJBRemote) in.read_Object(CatalogEJBRemote.class);
+ } catch (ApplicationException ex) {
+ in = (InputStream) ex.getInputStream();
+ String id = in.read_string();
+ if (id.equals("IDL:javax/ejb/CreateEx:1.0")) {
+ throw (CreateException) in.read_value(CreateException.class);
+ }
+ throw new UnexpectedException(id);
+ } catch (RemarshalException ex) {
+ continue;
+ }
+ } catch (SystemException ex) {
+ throw Util.mapSystemException(ex);
+ } finally {
+ _releaseReply(in);
+ }
+ } else {
+ ServantObject so = _servant_preinvoke("create",services.ejb.CatalogEJBHome.class);
+ if (so == null) {
+ continue;
+ }
+ try {
+ CatalogEJBRemote result = ((services.ejb.CatalogEJBHome)so.servant).create();
+ return (CatalogEJBRemote)Util.copyObject(result,_orb());
+ } catch (Throwable ex) {
+ Throwable exCopy = (Throwable)Util.copyObject(ex,_orb());
+ if (exCopy instanceof CreateException) {
+ throw (CreateException)exCopy;
+ }
+ throw Util.wrapException(exCopy);
+ } finally {
+ _servant_postinvoke(so);
+ }
+ }
+ }
+ }
+}
diff --git a/branches/sca-java-1.5.2/tutorials/store/catalog-ejb/src/test/java/services/ejb/_CatalogEJBRemote_Stub.java b/branches/sca-java-1.5.2/tutorials/store/catalog-ejb/src/test/java/services/ejb/_CatalogEJBRemote_Stub.java
new file mode 100644
index 0000000000..a24108714e
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/catalog-ejb/src/test/java/services/ejb/_CatalogEJBRemote_Stub.java
@@ -0,0 +1,292 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+// Stub class generated by rmic, do not edit.
+// Contents subject to change without notice.
+
+package services.ejb;
+
+import java.rmi.RemoteException;
+import java.rmi.UnexpectedException;
+
+import javax.ejb.EJBHome;
+import javax.ejb.EJBObject;
+import javax.ejb.Handle;
+import javax.ejb.RemoveException;
+import javax.rmi.CORBA.Stub;
+import javax.rmi.CORBA.Util;
+
+import org.omg.CORBA.SystemException;
+import org.omg.CORBA.portable.ApplicationException;
+import org.omg.CORBA.portable.InputStream;
+import org.omg.CORBA.portable.OutputStream;
+import org.omg.CORBA.portable.RemarshalException;
+import org.omg.CORBA.portable.ServantObject;
+
+public class _CatalogEJBRemote_Stub extends Stub implements CatalogEJBRemote {
+
+ private static final String[] _type_ids = {
+ "RMI:services.ejb.CatalogEJBRemote:0000000000000000",
+ "RMI:javax.ejb.EJBObject:0000000000000000"
+ };
+
+ public String[] _ids() {
+ return _type_ids;
+ }
+
+ public EJBHome getEJBHome() throws RemoteException {
+ while(true) {
+ if (!Util.isLocal(this)) {
+ InputStream in = null;
+ try {
+ try {
+ OutputStream out = _request("_get_EJBHome", true);
+ in = _invoke(out);
+ return (EJBHome) in.read_Object(EJBHome.class);
+ } catch (ApplicationException ex) {
+ in = ex.getInputStream();
+ String id = in.read_string();
+ throw new UnexpectedException(id);
+ } catch (RemarshalException ex) {
+ continue;
+ }
+ } catch (SystemException ex) {
+ throw Util.mapSystemException(ex);
+ } finally {
+ _releaseReply(in);
+ }
+ } else {
+ ServantObject so = _servant_preinvoke("_get_EJBHome",javax.ejb.EJBObject.class);
+ if (so == null) {
+ continue;
+ }
+ try {
+ EJBHome result = ((javax.ejb.EJBObject)so.servant).getEJBHome();
+ return (EJBHome)Util.copyObject(result,_orb());
+ } catch (Throwable ex) {
+ Throwable exCopy = (Throwable)Util.copyObject(ex,_orb());
+ throw Util.wrapException(exCopy);
+ } finally {
+ _servant_postinvoke(so);
+ }
+ }
+ }
+ }
+
+ public Handle getHandle() throws RemoteException {
+ while(true) {
+ if (!Util.isLocal(this)) {
+ org.omg.CORBA_2_3.portable.InputStream in = null;
+ try {
+ try {
+ OutputStream out = _request("_get_handle", true);
+ in = (org.omg.CORBA_2_3.portable.InputStream)_invoke(out);
+ return (Handle) in.read_abstract_interface(Handle.class);
+ } catch (ApplicationException ex) {
+ in = (org.omg.CORBA_2_3.portable.InputStream) ex.getInputStream();
+ String id = in.read_string();
+ throw new UnexpectedException(id);
+ } catch (RemarshalException ex) {
+ continue;
+ }
+ } catch (SystemException ex) {
+ throw Util.mapSystemException(ex);
+ } finally {
+ _releaseReply(in);
+ }
+ } else {
+ ServantObject so = _servant_preinvoke("_get_handle",javax.ejb.EJBObject.class);
+ if (so == null) {
+ continue;
+ }
+ try {
+ Handle result = ((javax.ejb.EJBObject)so.servant).getHandle();
+ return (Handle)Util.copyObject(result,_orb());
+ } catch (Throwable ex) {
+ Throwable exCopy = (Throwable)Util.copyObject(ex,_orb());
+ throw Util.wrapException(exCopy);
+ } finally {
+ _servant_postinvoke(so);
+ }
+ }
+ }
+ }
+
+ public Object getPrimaryKey() throws RemoteException {
+ while(true) {
+ if (!Util.isLocal(this)) {
+ InputStream in = null;
+ try {
+ try {
+ OutputStream out = _request("_get_primaryKey", true);
+ in = _invoke(out);
+ return Util.readAny(in);
+ } catch (ApplicationException ex) {
+ in = ex.getInputStream();
+ String id = in.read_string();
+ throw new UnexpectedException(id);
+ } catch (RemarshalException ex) {
+ continue;
+ }
+ } catch (SystemException ex) {
+ throw Util.mapSystemException(ex);
+ } finally {
+ _releaseReply(in);
+ }
+ } else {
+ ServantObject so = _servant_preinvoke("_get_primaryKey",javax.ejb.EJBObject.class);
+ if (so == null) {
+ continue;
+ }
+ try {
+ Object result = ((javax.ejb.EJBObject)so.servant).getPrimaryKey();
+ return (Object)Util.copyObject(result,_orb());
+ } catch (Throwable ex) {
+ Throwable exCopy = (Throwable)Util.copyObject(ex,_orb());
+ throw Util.wrapException(exCopy);
+ } finally {
+ _servant_postinvoke(so);
+ }
+ }
+ }
+ }
+
+ public boolean isIdentical(EJBObject arg0) throws RemoteException {
+ while(true) {
+ if (!Util.isLocal(this)) {
+ InputStream in = null;
+ try {
+ try {
+ OutputStream out = _request("isIdentical", true);
+ Util.writeRemoteObject(out,arg0);
+ in = _invoke(out);
+ return in.read_boolean();
+ } catch (ApplicationException ex) {
+ in = ex.getInputStream();
+ String id = in.read_string();
+ throw new UnexpectedException(id);
+ } catch (RemarshalException ex) {
+ continue;
+ }
+ } catch (SystemException ex) {
+ throw Util.mapSystemException(ex);
+ } finally {
+ _releaseReply(in);
+ }
+ } else {
+ ServantObject so = _servant_preinvoke("isIdentical",javax.ejb.EJBObject.class);
+ if (so == null) {
+ continue;
+ }
+ try {
+ EJBObject arg0Copy = (EJBObject) Util.copyObject(arg0,_orb());
+ return ((javax.ejb.EJBObject)so.servant).isIdentical(arg0Copy);
+ } catch (Throwable ex) {
+ Throwable exCopy = (Throwable)Util.copyObject(ex,_orb());
+ throw Util.wrapException(exCopy);
+ } finally {
+ _servant_postinvoke(so);
+ }
+ }
+ }
+ }
+
+ public void remove() throws RemoteException, RemoveException {
+ while(true) {
+ if (!Util.isLocal(this)) {
+ org.omg.CORBA_2_3.portable.InputStream in = null;
+ try {
+ try {
+ OutputStream out = _request("remove", true);
+ _invoke(out);
+ return;
+ } catch (ApplicationException ex) {
+ in = (org.omg.CORBA_2_3.portable.InputStream) ex.getInputStream();
+ String id = in.read_string();
+ if (id.equals("IDL:javax/ejb/RemoveEx:1.0")) {
+ throw (RemoveException) in.read_value(RemoveException.class);
+ }
+ throw new UnexpectedException(id);
+ } catch (RemarshalException ex) {
+ continue;
+ }
+ } catch (SystemException ex) {
+ throw Util.mapSystemException(ex);
+ } finally {
+ _releaseReply(in);
+ }
+ } else {
+ ServantObject so = _servant_preinvoke("remove",javax.ejb.EJBObject.class);
+ if (so == null) {
+ continue;
+ }
+ try {
+ ((javax.ejb.EJBObject)so.servant).remove();
+ return;
+ } catch (Throwable ex) {
+ Throwable exCopy = (Throwable)Util.copyObject(ex,_orb());
+ if (exCopy instanceof RemoveException) {
+ throw (RemoveException)exCopy;
+ }
+ throw Util.wrapException(exCopy);
+ } finally {
+ _servant_postinvoke(so);
+ }
+ }
+ }
+ }
+
+ public Vegetable[] get() throws RemoteException {
+ while(true) {
+ if (!Util.isLocal(this)) {
+ org.omg.CORBA_2_3.portable.InputStream in = null;
+ try {
+ try {
+ OutputStream out = _request("get", true);
+ in = (org.omg.CORBA_2_3.portable.InputStream)_invoke(out);
+ return (Vegetable[]) in.read_value(Vegetable[].class);
+ } catch (ApplicationException ex) {
+ in = (org.omg.CORBA_2_3.portable.InputStream) ex.getInputStream();
+ String id = in.read_string();
+ throw new UnexpectedException(id);
+ } catch (RemarshalException ex) {
+ continue;
+ }
+ } catch (SystemException ex) {
+ throw Util.mapSystemException(ex);
+ } finally {
+ _releaseReply(in);
+ }
+ } else {
+ ServantObject so = _servant_preinvoke("get",services.ejb.CatalogEJBRemote.class);
+ if (so == null) {
+ continue;
+ }
+ try {
+ Vegetable[] result = ((services.ejb.CatalogEJBRemote)so.servant).get();
+ return (Vegetable[])Util.copyObject(result,_orb());
+ } catch (Throwable ex) {
+ Throwable exCopy = (Throwable)Util.copyObject(ex,_orb());
+ throw Util.wrapException(exCopy);
+ } finally {
+ _servant_postinvoke(so);
+ }
+ }
+ }
+ }
+}
diff --git a/branches/sca-java-1.5.2/tutorials/store/catalog-mediation/META-INF/sca-contribution.xml b/branches/sca-java-1.5.2/tutorials/store/catalog-mediation/META-INF/sca-contribution.xml
new file mode 100644
index 0000000000..88950bf740
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/catalog-mediation/META-INF/sca-contribution.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<contribution xmlns="http://www.osoa.org/xmlns/sca/1.0"
+ xmlns:c="http://catalog">
+ <import.java package="services"/>
+ <import.java package="services.ejb"/>
+ <deployable composite="c:catalog-mediation"/>
+</contribution> \ No newline at end of file
diff --git a/branches/sca-java-1.5.2/tutorials/store/catalog-mediation/catalog-mediation.composite b/branches/sca-java-1.5.2/tutorials/store/catalog-mediation/catalog-mediation.composite
new file mode 100644
index 0000000000..d832e88acc
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/catalog-mediation/catalog-mediation.composite
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
+ targetNamespace="http://catalog"
+ name="catalog-mediation">
+
+ <component name="MediatedVegetablesCatalog">
+ <implementation.java class="services.mediation.VegetablesCatalogMediationImpl"/>
+ <service name="Catalog">
+ <binding.ws/>
+ </service>
+ <reference name="catalog" target="VegetablesCatalogEJB">
+ <binding.ejb/>
+ </reference>
+ </component>
+
+</composite>
diff --git a/branches/sca-java-1.5.2/tutorials/store/catalog-mediation/pom.xml b/branches/sca-java-1.5.2/tutorials/store/catalog-mediation/pom.xml
new file mode 100644
index 0000000000..a7147e2bee
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/catalog-mediation/pom.xml
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-tutorial-store</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ <relativePath>../pom.xml</relativePath>
+ </parent>
+ <artifactId>tutorial-catalog-mediation</artifactId>
+ <name>Apache Tuscany SCA Store Tutorial Catalog Mediation</name>
+
+ <repositories>
+ <repository>
+ <id>apache.incubator</id>
+ <url>http://people.apache.org/repo/m2-incubating-repository</url>
+ </repository>
+ </repositories>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tutorial-assets</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tutorial-catalog-ejb</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.geronimo.specs</groupId>
+ <artifactId>geronimo-ejb_3.0_spec</artifactId>
+ <version>1.0</version>
+ <scope>provided</scope>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <finalName>${artifactId}</finalName>
+ <sourceDirectory>${basedir}</sourceDirectory>
+ <resources>
+ <resource>
+ <directory>${basedir}</directory>
+ <excludes>
+ <exclude>**/*.java</exclude>
+ <exclude>**/.*/**</exclude>
+ <exclude>pom.xml</exclude>
+ <exclude>build.xml</exclude>
+ <exclude>target/**</exclude>
+ </excludes>
+ </resource>
+ </resources>
+
+ <plugins>
+ <plugin>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-maven-ant-generator</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ <executions>
+ <execution>
+ <configuration>
+ <pathToRootDir>../../..</pathToRootDir>
+ </configuration>
+ <goals>
+ <goal>generate</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+
+</project>
diff --git a/branches/sca-java-1.5.2/tutorials/store/catalog-mediation/services/mediation/VegetablesCatalogMediationImpl.java b/branches/sca-java-1.5.2/tutorials/store/catalog-mediation/services/mediation/VegetablesCatalogMediationImpl.java
new file mode 100644
index 0000000000..6cfa54e9de
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/catalog-mediation/services/mediation/VegetablesCatalogMediationImpl.java
@@ -0,0 +1,51 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package services.mediation;
+
+import java.rmi.RemoteException;
+
+import org.osoa.sca.ServiceRuntimeException;
+import org.osoa.sca.annotations.Reference;
+
+import services.Catalog;
+import services.Item;
+import services.ejb.CatalogEJBRemote;
+import services.ejb.Vegetable;
+
+public class VegetablesCatalogMediationImpl implements Catalog {
+
+ @Reference
+ public CatalogEJBRemote catalog;
+
+ public Item[] get() {
+ Vegetable[] vegetables;
+ try {
+ vegetables = catalog.get();
+ } catch (RemoteException e) {
+ throw new ServiceRuntimeException(e);
+ }
+ Item[] items = new Item[vegetables.length];
+ for (int i = 0; i < vegetables.length; i++) {
+ items[i] = new Item(vegetables[i].getName(), vegetables[i].getPrice());
+ }
+ return items;
+ }
+
+}
diff --git a/branches/sca-java-1.5.2/tutorials/store/catalog-webapp/catalog-web.composite b/branches/sca-java-1.5.2/tutorials/store/catalog-webapp/catalog-web.composite
new file mode 100644
index 0000000000..3ba76da078
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/catalog-webapp/catalog-web.composite
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
+ targetNamespace="http://catalog"
+ name="catalog-web">
+
+ <component name="WebFruitsCatalog">
+ <implementation.java class="services.FruitsCatalogImpl"/>
+ <service name="Catalog">
+ <binding.ws/>
+ </service>
+ <property name="currencyCode">USD</property>
+ <reference name="currencyConverter" target="CurrencyConverterWebService">
+ <binding.ws/>
+ </reference>
+ </component>
+
+ <component name="LocalFruitsCatalog">
+ <implementation.java class="services.FruitsCatalogImpl"/>
+ <property name="currencyCode">USD</property>
+ <reference name="currencyConverter" target="CurrencyConverterWebService">
+ <binding.ws/>
+ </reference>
+ </component>
+
+</composite>
diff --git a/branches/sca-java-1.5.2/tutorials/store/catalog-webapp/pom.xml b/branches/sca-java-1.5.2/tutorials/store/catalog-webapp/pom.xml
new file mode 100644
index 0000000000..8a4c3a462f
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/catalog-webapp/pom.xml
@@ -0,0 +1,113 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-tutorial-store</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ <relativePath>../pom.xml</relativePath>
+ </parent>
+ <artifactId>tutorial-catalog-webapp</artifactId>
+ <name>Apache Tuscany SCA Store Tutorial Catalog WAR Contribution</name>
+ <packaging>war</packaging>
+
+ <repositories>
+ <repository>
+ <id>apache.incubator</id>
+ <url>http://people.apache.org/repo/m2-incubating-repository</url>
+ </repository>
+ </repositories>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-sca-api</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-node-api</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tutorial-assets</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-node-launcher</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ </dependencies>
+
+ <build>
+ <finalName>${artifactId}</finalName>
+ <sourceDirectory>${basedir}</sourceDirectory>
+ <resources>
+ <resource>
+ <directory>${basedir}</directory>
+ <excludes>
+ <exclude>**/*.java</exclude>
+ <exclude>**/.*/**</exclude>
+ <exclude>pom.xml</exclude>
+ <exclude>build.xml</exclude>
+ <exclude>target/**</exclude>
+ <exclude>webapp/**</exclude>
+ <exclude>target/**</exclude>
+ </excludes>
+ </resource>
+ </resources>
+
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-war-plugin</artifactId>
+ <configuration>
+ <warSourceDirectory>webapp</warSourceDirectory>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-maven-ant-generator</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ <executions>
+ <execution>
+ <configuration>
+ <pathToRootDir>../../..</pathToRootDir>
+ </configuration>
+ <goals>
+ <goal>generate</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+
+</project>
diff --git a/branches/sca-java-1.5.2/tutorials/store/catalog-webapp/webapp/META-INF/sca-contribution.xml b/branches/sca-java-1.5.2/tutorials/store/catalog-webapp/webapp/META-INF/sca-contribution.xml
new file mode 100644
index 0000000000..7f06dc7ccb
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/catalog-webapp/webapp/META-INF/sca-contribution.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<contribution xmlns="http://www.osoa.org/xmlns/sca/1.0"
+ xmlns:c="http://catalog">
+ <import.java package="services"/>
+ <deployable composite="c:catalog-web"/>
+</contribution> \ No newline at end of file
diff --git a/branches/sca-java-1.5.2/tutorials/store/catalog-webapp/webapp/WEB-INF/web.xml b/branches/sca-java-1.5.2/tutorials/store/catalog-webapp/webapp/WEB-INF/web.xml
new file mode 100644
index 0000000000..e08d617dad
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/catalog-webapp/webapp/WEB-INF/web.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+
+<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web
+Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
+<web-app>
+
+ <display-name>Fruit Catalog</display-name>
+
+ <filter>
+ <filter-name>tuscany</filter-name>
+ <filter-class>org.apache.tuscany.sca.node.launcher.NodeServletFilter</filter-class>
+ </filter>
+
+ <filter-mapping>
+ <filter-name>tuscany</filter-name>
+ <url-pattern>/*</url-pattern>
+ </filter-mapping>
+
+ <welcome-file-list id="WelcomeFileList">
+ <welcome-file>catalog.jsp</welcome-file>
+ </welcome-file-list>
+
+</web-app>
diff --git a/branches/sca-java-1.5.2/tutorials/store/catalog-webapp/webapp/catalog.jsp b/branches/sca-java-1.5.2/tutorials/store/catalog-webapp/webapp/catalog.jsp
new file mode 100644
index 0000000000..dcee7c33f4
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/catalog-webapp/webapp/catalog.jsp
@@ -0,0 +1,52 @@
+<%--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+--%>
+
+<%@ page import="org.apache.tuscany.sca.node.SCAClient"%>
+<%@ page import="services.Catalog" %>
+<%@page import="services.Item"%>
+
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+
+<%
+
+ SCAClient client = (SCAClient) application.getAttribute("org.apache.tuscany.sca.node.SCAClient");
+
+ Catalog catalog = (Catalog)client.getService(Catalog.class, "LocalFruitsCatalog");
+ Item[] items = catalog.get();
+
+%>
+
+<html>
+<head><title>Catalog</title></head>
+
+<body>
+<h1>Catalog</h1>
+
+<table border="0">
+
+<% for (int i = 0, n = items.length; i < n; i++) { %>
+
+ <tr><td><%=items[i].getName() %></td><td><%=items[i].getPrice() %></td></tr>
+
+<% } %>
+
+</table>
+
+</body>
+</html>
diff --git a/branches/sca-java-1.5.2/tutorials/store/domain/cloud.composite b/branches/sca-java-1.5.2/tutorials/store/domain/cloud.composite
new file mode 100644
index 0000000000..ea0ff1e637
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/domain/cloud.composite
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<composite name="cloud"
+ targetNamespace="http://tuscany.apache.org/xmlns/sca/1.0/"
+ xmlns="http://www.osoa.org/xmlns/sca/1.0" xmlns:ns1="http://www.osoa.org/xmlns/sca/1.0">
+ <include name="ns2:CurrencyNode" uri="http://tuscany.apache.org/cloud" xmlns:ns2="http://tuscany.apache.org/cloud"/>
+ <include name="ns2:CatalogsNode" uri="http://tuscany.apache.org/cloud" xmlns:ns2="http://tuscany.apache.org/cloud"/>
+ <include name="ns2:StoreNode" uri="http://tuscany.apache.org/cloud" xmlns:ns2="http://tuscany.apache.org/cloud"/>
+ <include name="ns2:StoreMergerNode" uri="http://tuscany.apache.org/cloud" xmlns:ns2="http://tuscany.apache.org/cloud"/>
+ <include name="ns2:StoreClientNode" uri="http://tuscany.apache.org/cloud" xmlns:ns2="http://tuscany.apache.org/cloud"/>
+ <include name="ns2:StoreDBNode" uri="http://tuscany.apache.org/cloud" xmlns:ns2="http://tuscany.apache.org/cloud"/>
+ <include name="ns2:StoreSupplierNode" uri="http://tuscany.apache.org/cloud" xmlns:ns2="http://tuscany.apache.org/cloud"/>
+ <include name="ns2:StoreEUNode" uri="http://tuscany.apache.org/cloud" xmlns:ns2="http://tuscany.apache.org/cloud"/>
+ <include name="ns2:StoreEnterpriseNode" uri="http://tuscany.apache.org/cloud" xmlns:ns2="http://tuscany.apache.org/cloud"/>
+ <!--include name="ns2:StoreMashupNode" uri="http://tuscany.apache.org/cloud" xmlns:ns2="http://tuscany.apache.org/cloud"/-->
+ <!--include name="ns2:StoreMarketNode" uri="http://tuscany.apache.org/cloud" xmlns:ns2="http://tuscany.apache.org/cloud"/-->
+ <!--include name="ns2:CatalogWebAppNode" uri="http://tuscany.apache.org/cloud" xmlns:ns2="http://tuscany.apache.org/cloud"/-->
+ <!--include name="ns2:CatalogMediationNode" uri="http://tuscany.apache.org/cloud" xmlns:ns2="http://tuscany.apache.org/cloud"/-->
+ <!--include name="ns2:CatalogEJBNode" uri="http://tuscany.apache.org/cloud" xmlns:ns2="http://tuscany.apache.org/cloud"/-->
+</composite>
diff --git a/branches/sca-java-1.5.2/tutorials/store/domain/cloud/CatalogEJBNode.composite b/branches/sca-java-1.5.2/tutorials/store/domain/cloud/CatalogEJBNode.composite
new file mode 100644
index 0000000000..02e83d4c8d
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/domain/cloud/CatalogEJBNode.composite
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
+ xmlns:t="http://tuscany.apache.org/xmlns/sca/1.0"
+ targetNamespace="http://tuscany.apache.org/cloud"
+ xmlns:c="http://catalog"
+ name="CatalogEJBNode">
+
+ <component name="CatalogEJBNode">
+ <t:implementation.node uri="catalog-ejb" composite="c:catalog-ejb"/>
+ <service name="Node">
+ <t:binding.http uri="http://localhost:8080"/>
+ <!-- <binding.ejb uri="corbaname:iiop:1.2@localhost:2809/NameServiceServerRoot#"/> -->
+ <binding.ejb uri="corbaname:iiop:1.2@localhost:1050#"/>
+ </service>
+ </component>
+
+</composite>
diff --git a/branches/sca-java-1.5.2/tutorials/store/domain/cloud/CatalogMediationNode.composite b/branches/sca-java-1.5.2/tutorials/store/domain/cloud/CatalogMediationNode.composite
new file mode 100644
index 0000000000..bac96d9781
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/domain/cloud/CatalogMediationNode.composite
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
+ xmlns:t="http://tuscany.apache.org/xmlns/sca/1.0"
+ targetNamespace="http://tuscany.apache.org/cloud"
+ xmlns:c="http://catalog"
+ name="CatalogMediationNode">
+
+ <component name="CatalogMediationNode">
+ <t:implementation.node uri="catalog-mediation" composite="c:catalog-mediation"/>
+ <service name="Node">
+ <binding.ws uri="http://localhost:8105"/>
+ </service>
+ </component>
+
+</composite>
diff --git a/branches/sca-java-1.5.2/tutorials/store/domain/cloud/CatalogWebAppNode.composite b/branches/sca-java-1.5.2/tutorials/store/domain/cloud/CatalogWebAppNode.composite
new file mode 100644
index 0000000000..f3ed2dfdd5
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/domain/cloud/CatalogWebAppNode.composite
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
+ xmlns:t="http://tuscany.apache.org/xmlns/sca/1.0"
+ xmlns:c="http://catalog"
+ targetNamespace="http://tuscany.apache.org/cloud"
+ name="CatalogWebAppNode">
+
+ <component name="CatalogWebAppNode">
+ <t:implementation.node uri="catalog-webapp" composite="c:catalog-web" />
+ <service name="Node">
+ <binding.ws uri="http://localhost:8080/CatalogWebAppNode" />
+ <t:binding.http uri="http://localhost:8080/CatalogWebAppNode" />
+ <t:binding.jsonrpc uri="http://localhost:8080/CatalogWebAppNode" />
+ <t:binding.atom uri="http://localhost:8080/CatalogWebAppNode" />
+ </service>
+ </component>
+
+</composite> \ No newline at end of file
diff --git a/branches/sca-java-1.5.2/tutorials/store/domain/cloud/CatalogsNode.composite b/branches/sca-java-1.5.2/tutorials/store/domain/cloud/CatalogsNode.composite
new file mode 100644
index 0000000000..3a5ec770cb
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/domain/cloud/CatalogsNode.composite
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
+ xmlns:t="http://tuscany.apache.org/xmlns/sca/1.0"
+ targetNamespace="http://tuscany.apache.org/cloud"
+ xmlns:c="http://services"
+ name="CatalogsNode">
+
+ <component name="CatalogsNode">
+ <t:implementation.node uri="web-services" composite="c:catalogs"/>
+ <service name="Node">
+ <binding.ws uri="http://localhost:8200"/>
+ </service>
+ </component>
+
+</composite>
diff --git a/branches/sca-java-1.5.2/tutorials/store/domain/cloud/CurrencyNode.composite b/branches/sca-java-1.5.2/tutorials/store/domain/cloud/CurrencyNode.composite
new file mode 100644
index 0000000000..ed80268f22
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/domain/cloud/CurrencyNode.composite
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
+ xmlns:t="http://tuscany.apache.org/xmlns/sca/1.0"
+ targetNamespace="http://tuscany.apache.org/cloud"
+ xmlns:c="http://services"
+ name="CurrencyNode">
+
+ <component name="CurrencyNode">
+ <t:implementation.node uri="web-services" composite="c:currency"/>
+ <service name="Node">
+ <binding.ws uri="http://localhost:8201"/>
+ </service>
+ </component>
+
+</composite>
diff --git a/branches/sca-java-1.5.2/tutorials/store/domain/cloud/StoreClientNode.composite b/branches/sca-java-1.5.2/tutorials/store/domain/cloud/StoreClientNode.composite
new file mode 100644
index 0000000000..91948b5476
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/domain/cloud/StoreClientNode.composite
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
+ xmlns:t="http://tuscany.apache.org/xmlns/sca/1.0"
+ targetNamespace="http://tuscany.apache.org/cloud"
+ xmlns:s="http://store"
+ name="StoreClientNode">
+
+ <component name="StoreClientNode">
+ <t:implementation.node uri="store-client" composite="s:store-client"/>
+ <service name="Node">
+ <t:binding.http uri="http://localhost:8107"/>
+ </service>
+ </component>
+
+</composite>
diff --git a/branches/sca-java-1.5.2/tutorials/store/domain/cloud/StoreDBNode.composite b/branches/sca-java-1.5.2/tutorials/store/domain/cloud/StoreDBNode.composite
new file mode 100644
index 0000000000..9b09bd7344
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/domain/cloud/StoreDBNode.composite
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
+ xmlns:t="http://tuscany.apache.org/xmlns/sca/1.0"
+ targetNamespace="http://tuscany.apache.org/cloud"
+ xmlns:s="http://store"
+ name="StoreDBNode">
+
+ <component name="StoreDBNode">
+ <t:implementation.node uri="store-db" composite="s:store-db"/>
+ <service name="Node">
+ <t:binding.http uri="http://localhost:8102"/>
+ <t:binding.jsonrpc uri="http://localhost:8102"/>
+ <t:binding.atom uri="http://localhost:8102"/>
+ </service>
+ </component>
+
+</composite>
diff --git a/branches/sca-java-1.5.2/tutorials/store/domain/cloud/StoreEUNode.composite b/branches/sca-java-1.5.2/tutorials/store/domain/cloud/StoreEUNode.composite
new file mode 100644
index 0000000000..6a50de56d5
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/domain/cloud/StoreEUNode.composite
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
+ xmlns:t="http://tuscany.apache.org/xmlns/sca/1.0"
+ targetNamespace="http://tuscany.apache.org/cloud"
+ xmlns:s="http://store"
+ name="StoreEUNode">
+
+ <component name="StoreEUNode">
+ <t:implementation.node uri="store-eu" composite="s:store-eu"/>
+ <service name="Node">
+ <t:binding.http uri="http://localhost:8104"/>
+ <t:binding.jsonrpc uri="http://localhost:8104"/>
+ <t:binding.atom uri="http://localhost:8104"/>
+ <binding.ws uri="http://localhost:8444"/>
+ </service>
+ </component>
+
+</composite>
diff --git a/branches/sca-java-1.5.2/tutorials/store/domain/cloud/StoreEnterpriseNode.composite b/branches/sca-java-1.5.2/tutorials/store/domain/cloud/StoreEnterpriseNode.composite
new file mode 100644
index 0000000000..e4cc62a8c3
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/domain/cloud/StoreEnterpriseNode.composite
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
+ xmlns:t="http://tuscany.apache.org/xmlns/sca/1.0"
+ targetNamespace="http://tuscany.apache.org/cloud"
+ xmlns:s="http://store"
+ name="StoreEnterpriseNode">
+
+ <component name="StoreEnterpriseNode">
+ <t:implementation.node uri="store-enterprise" composite="s:store-enterprise"/>
+ <service name="Node">
+ <t:binding.http uri="http://localhost:8108"/>
+ <t:binding.jsonrpc uri="http://localhost:8108"/>
+ <t:binding.atom uri="http://localhost:8108"/>
+ </service>
+ </component>
+
+</composite>
diff --git a/branches/sca-java-1.5.2/tutorials/store/domain/cloud/StoreMarketNode.composite b/branches/sca-java-1.5.2/tutorials/store/domain/cloud/StoreMarketNode.composite
new file mode 100644
index 0000000000..1bdd994c2b
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/domain/cloud/StoreMarketNode.composite
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
+ xmlns:t="http://tuscany.apache.org/xmlns/sca/1.0"
+ targetNamespace="http://tuscany.apache.org/cloud"
+ xmlns:s="http://store"
+ name="StoreMarketNode">
+
+ <component name="StoreMarketNode">
+ <t:implementation.node uri="store-market" composite="s:store-market"/>
+ <service name="Node">
+ <t:binding.http uri="http://localhost:8107"/>
+ <t:binding.jsonrpc uri="http://localhost:8107"/>
+ <t:binding.atom uri="http://localhost:8107"/>
+ </service>
+ </component>
+
+</composite>
diff --git a/branches/sca-java-1.5.2/tutorials/store/domain/cloud/StoreMashupNode.composite b/branches/sca-java-1.5.2/tutorials/store/domain/cloud/StoreMashupNode.composite
new file mode 100644
index 0000000000..0db43df8c3
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/domain/cloud/StoreMashupNode.composite
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
+ xmlns:t="http://tuscany.apache.org/xmlns/sca/1.0"
+ targetNamespace="http://tuscany.apache.org/cloud"
+ xmlns:s="http://store"
+ name="StoreMashupNode">
+
+ <component name="StoreMashupNode">
+ <t:implementation.node uri="store-mashup" composite="s:store-mashup"/>
+ <service name="Node">
+ <t:binding.http uri="http://localhost:8106"/>
+ <t:binding.jsonrpc uri="http://localhost:8106"/>
+ <t:binding.atom uri="http://localhost:8106"/>
+ </service>
+ </component>
+
+</composite>
diff --git a/branches/sca-java-1.5.2/tutorials/store/domain/cloud/StoreMergerNode.composite b/branches/sca-java-1.5.2/tutorials/store/domain/cloud/StoreMergerNode.composite
new file mode 100644
index 0000000000..0ce6e6a231
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/domain/cloud/StoreMergerNode.composite
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
+ xmlns:t="http://tuscany.apache.org/xmlns/sca/1.0"
+ targetNamespace="http://tuscany.apache.org/cloud"
+ xmlns:s="http://store"
+ name="StoreMergerNode">
+
+ <component name="StoreMergerNode">
+ <t:implementation.node uri="store-merger" composite="s:store-merger"/>
+ <service name="Node">
+ <t:binding.http uri="http://localhost:8101"/>
+ <t:binding.jsonrpc uri="http://localhost:8101"/>
+ <t:binding.atom uri="http://localhost:8101"/>
+ </service>
+ </component>
+
+</composite>
diff --git a/branches/sca-java-1.5.2/tutorials/store/domain/cloud/StoreNode.composite b/branches/sca-java-1.5.2/tutorials/store/domain/cloud/StoreNode.composite
new file mode 100644
index 0000000000..e2b61a98e1
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/domain/cloud/StoreNode.composite
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
+ xmlns:t="http://tuscany.apache.org/xmlns/sca/1.0"
+ targetNamespace="http://tuscany.apache.org/cloud"
+ xmlns:s="http://store"
+ name="StoreNode">
+
+ <component name="StoreNode">
+ <t:implementation.node uri="store" composite="s:store"/>
+ <service name="Node">
+ <t:binding.http uri="http://localhost:8100"/>
+ <t:binding.jsonrpc uri="http://localhost:8100"/>
+ <t:binding.atom uri="http://localhost:8100"/>
+ </service>
+ </component>
+
+</composite>
diff --git a/branches/sca-java-1.5.2/tutorials/store/domain/cloud/StoreSupplierNode.composite b/branches/sca-java-1.5.2/tutorials/store/domain/cloud/StoreSupplierNode.composite
new file mode 100644
index 0000000000..df46bb8813
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/domain/cloud/StoreSupplierNode.composite
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
+ xmlns:t="http://tuscany.apache.org/xmlns/sca/1.0"
+ targetNamespace="http://tuscany.apache.org/cloud"
+ xmlns:s="http://store"
+ name="StoreSupplierNode">
+
+ <component name="StoreSupplierNode">
+ <t:implementation.node uri="store-supplier" composite="s:store-supplier"/>
+ <service name="Node">
+ <t:binding.http uri="http://localhost:8103"/>
+ <t:binding.jsonrpc uri="http://localhost:8103"/>
+ <t:binding.atom uri="http://localhost:8103"/>
+ <binding.ws uri="http://localhost:8333"/>
+ </service>
+ </component>
+
+</composite>
diff --git a/branches/sca-java-1.5.2/tutorials/store/domain/domain.composite b/branches/sca-java-1.5.2/tutorials/store/domain/domain.composite
new file mode 100644
index 0000000000..6d883b84b8
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/domain/domain.composite
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<composite name="domain"
+ targetNamespace="http://tuscany.apache.org/xmlns/sca/1.0"
+ xmlns="http://www.osoa.org/xmlns/sca/1.0" xmlns:ns1="http://www.osoa.org/xmlns/sca/1.0">
+ <include name="ns2:store" uri="store" xmlns:ns2="http://store"/>
+ <include name="ns2:store-merger" uri="store-merger" xmlns:ns2="http://store"/>
+ <include name="ns2:store-client" uri="store-client" xmlns:ns2="http://store"/>
+ <include name="ns2:store-db" uri="store-db" xmlns:ns2="http://store"/>
+ <include name="ns2:store-supplier" uri="store-supplier" xmlns:ns2="http://store"/>
+ <!--include name="ns2:store-market" uri="store-market" xmlns:ns2="http://store"/-->
+ <include name="ns2:store-eu" uri="store-eu" xmlns:ns2="http://store"/>
+ <!-- include name="ns2:store-mashup" uri="store-mashup" xmlns:ns2="http://store"/-->
+ <include name="ns2:catalogs" uri="web-services" xmlns:ns2="http://services"/>
+ <include name="ns2:currency" uri="web-services" xmlns:ns2="http://services"/>
+ <include name="ns2:store-enterprise" uri="store-enterprise" xmlns:ns2="http://store"/>
+ <!--include name="ns2:catalog-web" uri="catalog-webapp" xmlns:ns2="http://catalog"/-->
+ <!--include name="ns2:catalog-mediation" uri="catalog-mediation" xmlns:ns2="http://catalog"/-->
+ <!--include name="ns2:catalog-ejb" uri="catalog-ejb" xmlns:ns2="http://catalog"/-->
+</composite>
diff --git a/branches/sca-java-1.5.2/tutorials/store/domain/launch/LaunchCatalogMediationNode.java b/branches/sca-java-1.5.2/tutorials/store/domain/launch/LaunchCatalogMediationNode.java
new file mode 100644
index 0000000000..4e0772d211
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/domain/launch/LaunchCatalogMediationNode.java
@@ -0,0 +1,28 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package launch;
+
+import org.apache.tuscany.sca.node.launcher.NodeLauncher;
+
+public class LaunchCatalogMediationNode {
+ public static void main(String[] args) throws Exception {
+ NodeLauncher.main(new String[] {"http://localhost:9990/node-config/CatalogMediationNode"});
+ }
+}
diff --git a/branches/sca-java-1.5.2/tutorials/store/domain/launch/LaunchCatalogsNode.java b/branches/sca-java-1.5.2/tutorials/store/domain/launch/LaunchCatalogsNode.java
new file mode 100644
index 0000000000..a0c04a2f34
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/domain/launch/LaunchCatalogsNode.java
@@ -0,0 +1,28 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package launch;
+
+import org.apache.tuscany.sca.node.launcher.NodeLauncher;
+
+public class LaunchCatalogsNode {
+ public static void main(String[] args) throws Exception {
+ NodeLauncher.main(new String[] {"http://localhost:9990/node-config/CatalogsNode"});
+ }
+}
diff --git a/branches/sca-java-1.5.2/tutorials/store/domain/launch/LaunchCurrencyNode.java b/branches/sca-java-1.5.2/tutorials/store/domain/launch/LaunchCurrencyNode.java
new file mode 100644
index 0000000000..d9110f5804
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/domain/launch/LaunchCurrencyNode.java
@@ -0,0 +1,28 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package launch;
+
+import org.apache.tuscany.sca.node.launcher.NodeLauncher;
+
+public class LaunchCurrencyNode {
+ public static void main(String[] args) throws Exception {
+ NodeLauncher.main(new String[] {"http://localhost:9990/node-config/CurrencyNode"});
+ }
+}
diff --git a/branches/sca-java-1.5.2/tutorials/store/domain/launch/LaunchStoreDBNode.java b/branches/sca-java-1.5.2/tutorials/store/domain/launch/LaunchStoreDBNode.java
new file mode 100644
index 0000000000..b83db75646
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/domain/launch/LaunchStoreDBNode.java
@@ -0,0 +1,28 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package launch;
+
+import org.apache.tuscany.sca.node.launcher.NodeLauncher;
+
+public class LaunchStoreDBNode {
+ public static void main(String[] args) throws Exception {
+ NodeLauncher.main(new String[] {"http://localhost:9990/node-config/StoreDBNode"});
+ }
+}
diff --git a/branches/sca-java-1.5.2/tutorials/store/domain/launch/LaunchStoreEUNode.java b/branches/sca-java-1.5.2/tutorials/store/domain/launch/LaunchStoreEUNode.java
new file mode 100644
index 0000000000..de0e421e2d
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/domain/launch/LaunchStoreEUNode.java
@@ -0,0 +1,28 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package launch;
+
+import org.apache.tuscany.sca.node.launcher.NodeLauncher;
+
+public class LaunchStoreEUNode {
+ public static void main(String[] args) throws Exception {
+ NodeLauncher.main(new String[] {"http://localhost:9990/node-config/StoreEUNode"});
+ }
+}
diff --git a/branches/sca-java-1.5.2/tutorials/store/domain/launch/LaunchStoreEnterpriseNode.java b/branches/sca-java-1.5.2/tutorials/store/domain/launch/LaunchStoreEnterpriseNode.java
new file mode 100644
index 0000000000..1fbdbee497
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/domain/launch/LaunchStoreEnterpriseNode.java
@@ -0,0 +1,28 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package launch;
+
+import org.apache.tuscany.sca.node.launcher.NodeLauncher;
+
+public class LaunchStoreEnterpriseNode {
+ public static void main(String[] args) throws Exception {
+ NodeLauncher.main(new String[] {"http://localhost:9990/node-config/StoreEnterpriseNode"});
+ }
+}
diff --git a/branches/sca-java-1.5.2/tutorials/store/domain/launch/LaunchStoreMarketNode.java b/branches/sca-java-1.5.2/tutorials/store/domain/launch/LaunchStoreMarketNode.java
new file mode 100644
index 0000000000..b95d2a8d74
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/domain/launch/LaunchStoreMarketNode.java
@@ -0,0 +1,28 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package launch;
+
+import org.apache.tuscany.sca.node.launcher.NodeLauncher;
+
+public class LaunchStoreMarketNode {
+ public static void main(String[] args) throws Exception {
+ NodeLauncher.main(new String[] {"http://localhost:9990/node-config/StoreMarketNode"});
+ }
+}
diff --git a/branches/sca-java-1.5.2/tutorials/store/domain/launch/LaunchStoreMashupNode.java b/branches/sca-java-1.5.2/tutorials/store/domain/launch/LaunchStoreMashupNode.java
new file mode 100644
index 0000000000..aa7cbdc4ca
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/domain/launch/LaunchStoreMashupNode.java
@@ -0,0 +1,28 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package launch;
+
+import org.apache.tuscany.sca.node.launcher.NodeLauncher;
+
+public class LaunchStoreMashupNode {
+ public static void main(String[] args) throws Exception {
+ NodeLauncher.main(new String[] {"http://localhost:9990/node-config/StoreMashupNode"});
+ }
+}
diff --git a/branches/sca-java-1.5.2/tutorials/store/domain/launch/LaunchStoreMergerNode.java b/branches/sca-java-1.5.2/tutorials/store/domain/launch/LaunchStoreMergerNode.java
new file mode 100644
index 0000000000..a29c9b7d61
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/domain/launch/LaunchStoreMergerNode.java
@@ -0,0 +1,28 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package launch;
+
+import org.apache.tuscany.sca.node.launcher.NodeLauncher;
+
+public class LaunchStoreMergerNode {
+ public static void main(String[] args) throws Exception {
+ NodeLauncher.main(new String[] {"http://localhost:9990/node-config/StoreMergerNode"});
+ }
+}
diff --git a/branches/sca-java-1.5.2/tutorials/store/domain/launch/LaunchStoreNode.java b/branches/sca-java-1.5.2/tutorials/store/domain/launch/LaunchStoreNode.java
new file mode 100644
index 0000000000..11f1b2ce86
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/domain/launch/LaunchStoreNode.java
@@ -0,0 +1,28 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package launch;
+
+import org.apache.tuscany.sca.node.launcher.NodeLauncher;
+
+public class LaunchStoreNode {
+ public static void main(String[] args) throws Exception {
+ NodeLauncher.main(new String[] {"http://localhost:9990/node-config/StoreNode"});
+ }
+}
diff --git a/branches/sca-java-1.5.2/tutorials/store/domain/launch/LaunchStoreSupplierNode.java b/branches/sca-java-1.5.2/tutorials/store/domain/launch/LaunchStoreSupplierNode.java
new file mode 100644
index 0000000000..fce27d7d3b
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/domain/launch/LaunchStoreSupplierNode.java
@@ -0,0 +1,28 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package launch;
+
+import org.apache.tuscany.sca.node.launcher.NodeLauncher;
+
+public class LaunchStoreSupplierNode {
+ public static void main(String[] args) throws Exception {
+ NodeLauncher.main(new String[] {"http://localhost:9990/node-config/StoreSupplierNode"});
+ }
+}
diff --git a/branches/sca-java-1.5.2/tutorials/store/domain/launch/LaunchTutorialDomainManager.java b/branches/sca-java-1.5.2/tutorials/store/domain/launch/LaunchTutorialDomainManager.java
new file mode 100644
index 0000000000..7408e99c63
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/domain/launch/LaunchTutorialDomainManager.java
@@ -0,0 +1,33 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package launch;
+
+/**
+ * Launches the domain manager from this module.
+ *
+ * @version $Rev$ $Date$
+ */
+public class LaunchTutorialDomainManager {
+
+ public static void main(String[] args) throws Exception {
+ org.apache.tuscany.sca.node.launcher.DomainManagerLauncher.main(args);
+ }
+
+}
diff --git a/branches/sca-java-1.5.2/tutorials/store/domain/launch/LaunchWarehouseSpring.java b/branches/sca-java-1.5.2/tutorials/store/domain/launch/LaunchWarehouseSpring.java
new file mode 100644
index 0000000000..a07a4bf635
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/domain/launch/LaunchWarehouseSpring.java
@@ -0,0 +1,55 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package launch;
+
+import java.io.IOException;
+
+import org.apache.activemq.broker.BrokerService;
+import org.apache.tuscany.sca.node.SCANode;
+import org.apache.tuscany.sca.node.launcher.Contribution;
+import org.apache.tuscany.sca.node.launcher.NodeLauncher;
+
+public class LaunchWarehouseSpring {
+ public static void main(String[] args) throws Exception {
+
+ BrokerService jmsBroker;
+ jmsBroker = new BrokerService();
+ jmsBroker.setPersistent(false);
+ jmsBroker.setUseJmx(false);
+ jmsBroker.addConnector("tcp://localhost:61619");
+ jmsBroker.start();
+
+ NodeLauncher launcher = NodeLauncher.newInstance();
+ SCANode node = launcher.createNode(null,
+ new Contribution("assets", "../assets/target/classes"),
+ new Contribution("warehouse", "../warehouse-spring/target/classes"));
+ node.start();
+
+ System.out.println("Press a key to stop");
+ try {
+ System.in.read();
+ } catch (IOException e) {}
+
+ node.stop();
+
+ jmsBroker.stop();
+
+ }
+}
diff --git a/branches/sca-java-1.5.2/tutorials/store/domain/pom.xml b/branches/sca-java-1.5.2/tutorials/store/domain/pom.xml
new file mode 100644
index 0000000000..5edb6b2ac2
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/domain/pom.xml
@@ -0,0 +1,240 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-tutorial-store</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ <relativePath>../pom.xml</relativePath>
+ </parent>
+ <artifactId>tutorial-domain</artifactId>
+ <name>Apache Tuscany SCA Store Tutorial Domain</name>
+
+ <repositories>
+ <repository>
+ <id>apache.incubator</id>
+ <url>http://people.apache.org/repo/m2-incubating-repository</url>
+ </repository>
+ </repositories>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-node-launcher</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-node-api</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-domain-manager</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-implementation-node-runtime</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-implementation-java-runtime</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-implementation-widget-runtime-tuscany</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-implementation-resource-runtime</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-implementation-spring</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-implementation-spring-runtime</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-binding-atom-js</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-binding-atom-abdera</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-binding-jsonrpc-js</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-binding-jsonrpc-runtime</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-binding-http-runtime</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-binding-ws-axis2</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-binding-sca-axis2</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-binding-ejb-runtime</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-binding-jms-runtime</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-host-jms-asf</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-implementation-ejb</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.derby</groupId>
+ <artifactId>derby</artifactId>
+ <version>10.3.1.4</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.activemq</groupId>
+ <artifactId>activemq-core</artifactId>
+ <version>5.2.0</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.geronimo.specs</groupId>
+ <artifactId>geronimo-jms_1.1_spec</artifactId>
+ <version>1.1</version>
+ <scope>provided</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>org.apache.geronimo.specs</groupId>
+ <artifactId>geronimo-jms_1.1_spec</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+
+ </dependencies>
+
+ <build>
+ <finalName>${artifactId}</finalName>
+ <sourceDirectory>${basedir}</sourceDirectory>
+ <resources>
+ <resource>
+ <directory>${basedir}</directory>
+ <excludes>
+ <exclude>**/*.java</exclude>
+ <exclude>**/.*/**</exclude>
+ <exclude>pom.xml</exclude>
+ <exclude>build.xml</exclude>
+ <exclude>target/**</exclude>
+ </excludes>
+ </resource>
+ </resources>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-maven-ant-generator</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ <executions>
+ <execution>
+ <configuration>
+ <mainClass>launch.LaunchTutorialAdmin</mainClass>
+ <pathToRootDir>../../..</pathToRootDir>
+ </configuration>
+ <goals>
+ <goal>generate</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+
+</project>
diff --git a/branches/sca-java-1.5.2/tutorials/store/domain/workspace.xml b/branches/sca-java-1.5.2/tutorials/store/domain/workspace.xml
new file mode 100644
index 0000000000..b01bd0c1d8
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/domain/workspace.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<workspace xmlns="http://tuscany.apache.org/xmlns/sca/1.0" xmlns:ns1="http://tuscany.apache.org/xmlns/sca/1.0">
+ <contribution location="file:../assets/target/tutorial-assets.jar" uri="assets"/>
+ <contribution location="file:../store/target/tutorial-store.jar" uri="store"/>
+ <contribution location="file:../store-merger/target/tutorial-store-merger.jar" uri="store-merger"/>
+ <contribution location="file:../store-client/target/tutorial-store-client.jar" uri="store-client"/>
+ <contribution location="file:../store-db/target/tutorial-store-db.jar" uri="store-db"/>
+ <contribution location="file:../store-supplier/target/tutorial-store-supplier.jar" uri="store-supplier"/>
+ <!-- contribution location="file:../store-market/target/tutorial-store-market.jar" uri="store-market"/-->
+ <contribution location="file:../store-eu/target/tutorial-store-eu.jar" uri="store-eu"/>
+ <contribution location="file:../store-enterprise/target/tutorial-store-enterprise.jar" uri="store-enterprise"/>
+ <!-- contribution location="file:../store-mashup" uri="store-mashup"/-->
+ <contribution location="file:../web-services/target/tutorial-web-services.jar" uri="web-services"/>
+ <!-- contribution location="file:../catalog-webapp/target/tutorial-catalog-webapp.war" uri="catalog-webapp"/-->
+ <!-- contribution location="file:../catalog-mediation/target/tutorial-catalog-mediation.jar" uri="catalog-mediation"/-->
+ <!-- contribution location="file:../catalog-ejb/target/tutorial-catalog-ejb.jar" uri="catalog-ejb"/-->
+ <contribution location="file:../domain/cloud" uri="http://tuscany.apache.org/cloud"/>
+</workspace>
diff --git a/branches/sca-java-1.5.2/tutorials/store/pom.xml b/branches/sca-java-1.5.2/tutorials/store/pom.xml
new file mode 100644
index 0000000000..5f49f21646
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/pom.xml
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-tutorials</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ <relativePath>../pom.xml</relativePath>
+ </parent>
+ <artifactId>tuscany-tutorial-store</artifactId>
+ <packaging>pom</packaging>
+ <name>Apache Tuscany SCA Store Tutorial</name>
+
+ <profiles>
+ <profile>
+ <id>default</id>
+ <activation>
+ <activeByDefault>true</activeByDefault>
+ </activation>
+ <modules>
+ <module>domain</module>
+ <module>assets</module>
+ <module>store</module>
+ <module>store-merger</module>
+ <module>store-client</module>
+ <module>store-db</module>
+ <module>store-supplier</module>
+ <module>store-market</module>
+ <module>store-eu</module>
+ <module>store-mashup</module>
+ <module>store-enterprise</module>
+ <module>warehouse-spring</module>
+ <module>web-services</module>
+ <module>catalog-webapp</module>
+ <module>catalog-ejb</module>
+ <module>catalog-mediation</module>
+ <module>store-test</module>
+ </modules>
+ </profile>
+
+ </profiles>
+
+</project>
diff --git a/branches/sca-java-1.5.2/tutorials/store/store-client/META-INF/sca-contribution.xml b/branches/sca-java-1.5.2/tutorials/store/store-client/META-INF/sca-contribution.xml
new file mode 100644
index 0000000000..30ffa61ed2
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/store-client/META-INF/sca-contribution.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<contribution xmlns="http://www.osoa.org/xmlns/sca/1.0"
+ xmlns:s="http://store">
+ <deployable composite="s:store-client"/>
+</contribution> \ No newline at end of file
diff --git a/branches/sca-java-1.5.2/tutorials/store/store-client/client/Shopper.java b/branches/sca-java-1.5.2/tutorials/store/store-client/client/Shopper.java
new file mode 100644
index 0000000000..f8643d4c52
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/store-client/client/Shopper.java
@@ -0,0 +1,29 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package client;
+
+import org.osoa.sca.annotations.Remotable;
+
+@Remotable
+public interface Shopper {
+
+ String shop(String itemName, int quantity);
+
+}
diff --git a/branches/sca-java-1.5.2/tutorials/store/store-client/client/ShopperImpl.java b/branches/sca-java-1.5.2/tutorials/store/store-client/client/ShopperImpl.java
new file mode 100644
index 0000000000..c017548fb3
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/store-client/client/ShopperImpl.java
@@ -0,0 +1,63 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package client;
+
+import org.apache.tuscany.sca.data.collection.NotFoundException;
+import org.osoa.sca.annotations.Reference;
+
+import services.Cart;
+import services.Catalog;
+import services.Item;
+import services.Total;
+
+public class ShopperImpl implements Shopper {
+
+ @Reference
+ public Catalog catalog;
+
+ @Reference
+ public Cart shoppingCart;
+
+ @Reference
+ public Total shoppingTotal;
+
+ public String shop(String itemName, int quantity) {
+
+ Item[] items = catalog.get();
+ for (Item item: items) {
+ if (item.getName().startsWith(itemName)) {
+
+ try {
+ shoppingCart.delete("");
+ } catch (NotFoundException e) {
+ }
+
+ for (int i = 0; i < quantity; i++) {
+ shoppingCart.post("item" + i, item);
+ }
+
+ return shoppingTotal.getTotal();
+ }
+ }
+
+ return "";
+ }
+
+}
diff --git a/branches/sca-java-1.5.2/tutorials/store/store-client/launch/LaunchStoreClientNode.java b/branches/sca-java-1.5.2/tutorials/store/store-client/launch/LaunchStoreClientNode.java
new file mode 100644
index 0000000000..d1a9dfb36c
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/store-client/launch/LaunchStoreClientNode.java
@@ -0,0 +1,43 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package launch;
+
+import org.apache.tuscany.sca.node.SCAClient;
+import org.apache.tuscany.sca.node.SCANode;
+import org.apache.tuscany.sca.node.launcher.NodeLauncher;
+
+import client.Shopper;
+
+public class LaunchStoreClientNode {
+
+ public static void main(String[] args) throws Exception {
+ NodeLauncher nodeLauncher = NodeLauncher.newInstance();
+ SCANode storeClientNode = nodeLauncher.createNodeFromURL("http://localhost:9990/node-config/StoreClientNode");
+ storeClientNode.start();
+ SCAClient client = (SCAClient)storeClientNode;
+
+ Shopper shopper = client.getService(Shopper.class, "StoreClient");
+
+ String total = shopper.shop("Orange", 5);
+ System.out.println("Total: " + total);
+
+ storeClientNode.stop();
+ }
+}
diff --git a/branches/sca-java-1.5.2/tutorials/store/store-client/pom.xml b/branches/sca-java-1.5.2/tutorials/store/store-client/pom.xml
new file mode 100644
index 0000000000..cec23435ff
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/store-client/pom.xml
@@ -0,0 +1,126 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-tutorial-store</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ <relativePath>../pom.xml</relativePath>
+ </parent>
+ <artifactId>tutorial-store-client</artifactId>
+ <name>Apache Tuscany SCA Store Tutorial Online Store Client</name>
+
+ <repositories>
+ <repository>
+ <id>apache.incubator</id>
+ <url>http://people.apache.org/repo/m2-incubating-repository</url>
+ </repository>
+ </repositories>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-sca-api</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-data-api</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-node-launcher</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-node-api</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-implementation-node-runtime</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-implementation-java-runtime</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-binding-atom-abdera</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-binding-ws-axis2</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ <scope>runtime</scope>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <finalName>${artifactId}</finalName>
+ <sourceDirectory>${basedir}</sourceDirectory>
+ <resources>
+ <resource>
+ <directory>${basedir}</directory>
+ <excludes>
+ <exclude>**/*.java</exclude>
+ <exclude>**/.*/**</exclude>
+ <exclude>pom.xml</exclude>
+ <exclude>build.xml</exclude>
+ <exclude>target/**</exclude>
+ </excludes>
+ </resource>
+ </resources>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-maven-ant-generator</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ <executions>
+ <execution>
+ <configuration>
+ <pathToRootDir>../../..</pathToRootDir>
+ </configuration>
+ <goals>
+ <goal>generate</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+
+</project>
diff --git a/branches/sca-java-1.5.2/tutorials/store/store-client/services/Cart.java b/branches/sca-java-1.5.2/tutorials/store/store-client/services/Cart.java
new file mode 100644
index 0000000000..9e6226d963
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/store-client/services/Cart.java
@@ -0,0 +1,28 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package services;
+
+import org.apache.tuscany.sca.data.collection.Collection;
+import org.osoa.sca.annotations.Remotable;
+
+@Remotable
+public interface Cart extends Collection<String, Item> {
+
+}
diff --git a/branches/sca-java-1.5.2/tutorials/store/store-client/services/Catalog.java b/branches/sca-java-1.5.2/tutorials/store/store-client/services/Catalog.java
new file mode 100644
index 0000000000..2c3b19f579
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/store-client/services/Catalog.java
@@ -0,0 +1,27 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package services;
+
+import org.osoa.sca.annotations.Remotable;
+
+@Remotable
+public interface Catalog {
+ Item[] get();
+}
diff --git a/branches/sca-java-1.5.2/tutorials/store/store-client/services/Item.java b/branches/sca-java-1.5.2/tutorials/store/store-client/services/Item.java
new file mode 100644
index 0000000000..81cefcdbef
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/store-client/services/Item.java
@@ -0,0 +1,66 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package services;
+
+
+public class Item {
+ private String name;
+ private String price;
+ private String origin;
+
+ public Item() {
+ }
+
+ public Item(String name, String price, String origin) {
+ this.name = name;
+ this.price = price;
+ this.origin = origin;
+ }
+
+ public Item(String name, String price) {
+ this.name = name;
+ this.price = price;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getPrice() {
+ return price;
+ }
+
+ public void setPrice(String price) {
+ this.price = price;
+ }
+
+ public String getOrigin() {
+ return origin;
+ }
+
+ public void setOrigin(String origin) {
+ this.origin = origin;
+ }
+
+}
diff --git a/branches/sca-java-1.5.2/tutorials/store/store-client/services/Total.java b/branches/sca-java-1.5.2/tutorials/store/store-client/services/Total.java
new file mode 100644
index 0000000000..8f464e526f
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/store-client/services/Total.java
@@ -0,0 +1,29 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package services;
+
+import org.osoa.sca.annotations.Remotable;
+
+@Remotable
+public interface Total {
+
+ String getTotal();
+
+}
diff --git a/branches/sca-java-1.5.2/tutorials/store/store-client/store-client.composite b/branches/sca-java-1.5.2/tutorials/store/store-client/store-client.composite
new file mode 100644
index 0000000000..3c5f1637ef
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/store-client/store-client.composite
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
+ xmlns:t="http://tuscany.apache.org/xmlns/sca/1.0"
+ targetNamespace="http://store"
+ name="store-client">
+
+ <component name="StoreClient">
+ <implementation.java class="client.ShopperImpl"/>
+ <reference name="catalog" target="StoreSupplierCatalog">
+ <binding.ws/>
+ </reference>
+ <reference name="shoppingCart" target="StoreSupplierShoppingCart/Cart">
+ <t:binding.atom/>
+ </reference>
+ <reference name="shoppingTotal" target="StoreSupplierShoppingCart/Total">
+ <binding.ws/>
+ </reference>
+ </component>
+
+</composite>
diff --git a/branches/sca-java-1.5.2/tutorials/store/store-db/META-INF/sca-contribution.xml b/branches/sca-java-1.5.2/tutorials/store/store-db/META-INF/sca-contribution.xml
new file mode 100644
index 0000000000..7a5d5613be
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/store-db/META-INF/sca-contribution.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<contribution xmlns="http://www.osoa.org/xmlns/sca/1.0"
+ xmlns:s="http://store">
+ <import.java package="services"/>
+ <import.java package="services.merger"/>
+ <import.java package="services.db"/>
+ <import.resource uri="uiservices/store.html"/>
+ <deployable composite="s:store-db"/>
+</contribution> \ No newline at end of file
diff --git a/branches/sca-java-1.5.2/tutorials/store/store-db/pom.xml b/branches/sca-java-1.5.2/tutorials/store/store-db/pom.xml
new file mode 100644
index 0000000000..46e7043608
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/store-db/pom.xml
@@ -0,0 +1,128 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-tutorial-store</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ <relativePath>../pom.xml</relativePath>
+ </parent>
+ <artifactId>tutorial-store-db</artifactId>
+ <name>Apache Tuscany SCA Store Tutorial Online Store Using DB</name>
+
+ <repositories>
+ <repository>
+ <id>apache.incubator</id>
+ <url>http://people.apache.org/repo/m2-incubating-repository</url>
+ </repository>
+ </repositories>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-sca-api</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <finalName>${artifactId}</finalName>
+ <sourceDirectory>${basedir}</sourceDirectory>
+ <resources>
+ <resource>
+ <directory>${basedir}</directory>
+ <excludes>
+ <exclude>**/*.java</exclude>
+ <exclude>**/.*/**</exclude>
+ <exclude>pom.xml</exclude>
+ <exclude>build.xml</exclude>
+ <exclude>target/**</exclude>
+ </excludes>
+ </resource>
+ </resources>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-maven-ant-generator</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ <executions>
+ <execution>
+ <configuration>
+ <pathToRootDir>../../..</pathToRootDir>
+ </configuration>
+ <goals>
+ <goal>generate</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>sql-maven-plugin</artifactId>
+ <version>1.3</version>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.derby</groupId>
+ <artifactId>derby</artifactId>
+ <version>10.3.1.4</version>
+ </dependency>
+ </dependencies>
+
+ <executions>
+ <execution>
+ <id>create-db</id>
+ <phase>generate-resources</phase>
+ <goals>
+ <goal>execute</goal>
+ </goals>
+ <configuration>
+ <driver>org.apache.derby.jdbc.EmbeddedDriver</driver>
+ <url>jdbc:derby:${basedir}/target/cart-db;create=true</url>
+ <autocommit>true</autocommit>
+ <onError>continue</onError>
+ <onConnectionError>skip</onConnectionError>
+ <delimiter>;</delimiter>
+ <srcFiles>
+ <srcFile>${basedir}/../assets/services/db/cart.sql</srcFile>
+ </srcFiles>
+ </configuration>
+ </execution>
+
+ <!-- Shutdown DB in order to be able to run unit tests -->
+ <execution>
+ <id>shutdown-database-sothat-test-can-run</id>
+ <phase>process-test-resources</phase>
+ <goals>
+ <goal>execute</goal>
+ </goals>
+ <configuration>
+ <driver>org.apache.derby.jdbc.EmbeddedDriver</driver>
+ <url>jdbc:derby:${basedir}/target/cart-db;shutdown=true</url>
+ <skipOnConnectionError>true</skipOnConnectionError>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+
+</project>
diff --git a/branches/sca-java-1.5.2/tutorials/store/store-db/store-db.composite b/branches/sca-java-1.5.2/tutorials/store/store-db/store-db.composite
new file mode 100644
index 0000000000..03094be5ad
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/store-db/store-db.composite
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
+ xmlns:t="http://tuscany.apache.org/xmlns/sca/1.0"
+ targetNamespace="http://store"
+ name="store-db">
+
+ <component name="StoreDB">
+ <t:implementation.widget location="uiservices/store.html"/>
+ <service name="Widget">
+ <t:binding.http uri="/ui"/>
+ </service>
+ <reference name="catalog" target="StoreDBCatalog">
+ <t:binding.jsonrpc/>
+ </reference>
+ <reference name="shoppingCart" target="StoreDBShoppingCart/Cart">
+ <t:binding.atom/>
+ </reference>
+ <reference name="shoppingTotal" target="StoreDBShoppingCart/Total">
+ <t:binding.jsonrpc/>
+ </reference>
+ </component>
+
+ <component name="StoreDBCatalog">
+ <implementation.java class="services.merger.MergedCatalogImpl"/>
+ <property name="currencyCode">USD</property>
+ <service name="Catalog">
+ <t:binding.jsonrpc/>
+ </service>
+ <reference name="fruitsCatalog" target="StoreDBFruitsCatalog"/>
+ <reference name="vegetablesCatalog" target="VegetablesCatalogWebService">
+ <binding.ws/>
+ </reference>
+ <reference name="currencyConverter" target="StoreDBCurrencyConverter"/>
+ </component>
+
+ <component name="StoreDBFruitsCatalog">
+ <implementation.java class="services.FruitsCatalogImpl"/>
+ <property name="currencyCode">USD</property>
+ <reference name="currencyConverter" target="StoreDBCurrencyConverter"/>
+ </component>
+
+ <component name="StoreDBShoppingCart">
+ <implementation.java class="services.db.ShoppingCartTableImpl"/>
+ <property name="database">../store-db/target/cart-db</property>
+ <service name="Cart">
+ <t:binding.atom uri="/ShoppingCart/Cart"/>
+ </service>
+ <service name="Total">
+ <t:binding.jsonrpc/>
+ </service>
+ </component>
+
+ <component name="StoreDBCurrencyConverter">
+ <implementation.java class="services.CurrencyConverterImpl"/>
+ </component>
+
+</composite>
diff --git a/branches/sca-java-1.5.2/tutorials/store/store-enterprise/META-INF/sca-contribution.xml b/branches/sca-java-1.5.2/tutorials/store/store-enterprise/META-INF/sca-contribution.xml
new file mode 100644
index 0000000000..0ce45c6392
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/store-enterprise/META-INF/sca-contribution.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<contribution xmlns="http://www.osoa.org/xmlns/sca/1.0"
+ xmlns:s="http://store">
+ <import.java package="services" />
+ <import.java package="services.merger" />
+ <import.resource uri="uiservices/store.html"/>
+ <deployable composite="s:store-enterprise" />
+</contribution> \ No newline at end of file
diff --git a/branches/sca-java-1.5.2/tutorials/store/store-enterprise/build.xml b/branches/sca-java-1.5.2/tutorials/store/store-enterprise/build.xml
new file mode 100644
index 0000000000..efef0788a2
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/store-enterprise/build.xml
@@ -0,0 +1,54 @@
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+
+<project name="tutorial-store-enterprise" default="compile">
+
+ <target name="compile">
+ <mkdir dir="target/classes"/>
+ <javac destdir="target/classes" debug="on" source="1.5" target="1.5">
+ <src path="."/>
+ <classpath>
+ <fileset refid="tuscany.jars"/>
+ <fileset refid="3rdparty.jars"/>
+ </classpath>
+ </javac>
+ <copy todir="target/classes">
+ <fileset dir="." excludes="**/*.java, pom.xml, build.xml, target"/>
+ </copy>
+ <jar destfile="target/tutorial-store-enterprise.jar" basedir="target/classes">
+ <manifest>
+ </manifest>
+ </jar>
+ </target>
+
+ <target name="package" depends="compile"/>
+
+ <target name="clean">
+ <delete includeemptydirs="true">
+ <fileset dir="target"/>
+ </delete>
+ </target>
+
+ <fileset id="tuscany.jars" dir="../../../modules">
+ <include name="tuscany-sca-api-1.5.1-SNAPSHOT.jar"/>
+ </fileset>
+ <fileset id="3rdparty.jars" dir="../../../lib">
+ </fileset>
+
+</project>
diff --git a/branches/sca-java-1.5.2/tutorials/store/store-enterprise/pom.xml b/branches/sca-java-1.5.2/tutorials/store/store-enterprise/pom.xml
new file mode 100644
index 0000000000..5cd43de990
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/store-enterprise/pom.xml
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-tutorial-store</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ <relativePath>../pom.xml</relativePath>
+ </parent>
+ <artifactId>tutorial-store-enterprise</artifactId>
+ <name>Apache Tuscany SCA Store Tutorial Enterprise Online Store</name>
+
+ <repositories>
+ <repository>
+ <id>apache.incubator</id>
+ <url>http://people.apache.org/repo/m2-incubating-repository</url>
+ </repository>
+ </repositories>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-sca-api</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <finalName>${artifactId}</finalName>
+ <sourceDirectory>${basedir}</sourceDirectory>
+ <resources>
+ <resource>
+ <directory>${basedir}</directory>
+ <excludes>
+ <exclude>**/*.java</exclude>
+ <exclude>**/.*/**</exclude>
+ <exclude>pom.xml</exclude>
+ <exclude>build.xml</exclude>
+ <exclude>target/**</exclude>
+ </excludes>
+ </resource>
+ </resources>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-maven-ant-generator</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ <executions>
+ <execution>
+ <configuration>
+ <pathToRootDir>../../..</pathToRootDir>
+ </configuration>
+ <goals>
+ <goal>generate</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+
+</project>
diff --git a/branches/sca-java-1.5.2/tutorials/store/store-enterprise/store-enterprise.composite b/branches/sca-java-1.5.2/tutorials/store/store-enterprise/store-enterprise.composite
new file mode 100644
index 0000000000..310284f176
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/store-enterprise/store-enterprise.composite
@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
+ xmlns:t="http://tuscany.apache.org/xmlns/sca/1.0"
+ targetNamespace="http://store"
+ name="store-enterprise">
+
+ <component name="StoreEnterprise">
+ <t:implementation.widget location="uiservices/store.html"/>
+ <service name="Widget">
+ <t:binding.http uri="/ui"/>
+ </service>
+ <reference name="catalog" target="StoreEnterpriseCatalog">
+ <t:binding.jsonrpc/>
+ </reference>
+ <reference name="shoppingCart" target="StoreEnterpriseShoppingCart/Cart">
+ <t:binding.atom/>
+ </reference>
+ <reference name="shoppingTotal" target="StoreEnterpriseShoppingCart/Total">
+ <t:binding.jsonrpc/>
+ </reference>
+ </component>
+
+ <component name="StoreEnterpriseCatalog">
+ <implementation.java class="services.merger.MergedCatalogImpl"/>
+ <property name="currencyCode">USD</property>
+ <service name="Catalog">
+ <t:binding.jsonrpc/>
+ </service>
+ <reference name="currencyConverter" target="StoreEnterpriseCurrencyConverter"/>
+ <reference name="fruitsCatalog" target="StoreEnterpriseFruitsCatalog"/>
+ <reference name="vegetablesCatalog" target="StoreEnterpriseVegetablesCatalog"/>
+ <!-- reference name="vegetablesCatalog" target="VegetablesCatalogWebService">
+ <binding.ws/>
+ </reference-->
+ </component>
+
+ <component name="StoreEnterpriseFruitsCatalog">
+ <implementation.java class="services.FruitsCatalogImpl"/>
+ <property name="currencyCode">USD</property>
+ <reference name="currencyConverter" target="StoreEnterpriseCurrencyConverter"/>
+ </component>
+
+ <component name="StoreEnterpriseVegetablesCatalog">
+ <implementation.java class="services.VegetablesCatalogImpl"/>
+ </component>
+
+ <component name="StoreEnterpriseShoppingCart">
+ <implementation.java class="services.ShoppingCartImpl"/>
+ <service name="Cart">
+ <t:binding.atom uri="/ShoppingCart/Cart"/>
+ </service>
+ <service name="Total">
+ <t:binding.jsonrpc/>
+ </service>
+ <reference name="warehouse" multiplicity="0..1" >
+ <binding.jms initialContextFactory="org.apache.activemq.jndi.ActiveMQInitialContextFactory"
+ jndiURL="tcp://localhost:61619">
+ <destination name="RequestQueue" create="always"/>
+ <response>
+ <destination name="ResponseQueue" create="always"/>
+ </response>
+ </binding.jms>
+ </reference>
+ </component>
+
+ <component name="StoreEnterpriseCurrencyConverter">
+ <implementation.java class="services.CurrencyConverterImpl"/>
+ </component>
+
+</composite>
diff --git a/branches/sca-java-1.5.2/tutorials/store/store-eu/META-INF/sca-contribution.xml b/branches/sca-java-1.5.2/tutorials/store/store-eu/META-INF/sca-contribution.xml
new file mode 100644
index 0000000000..552932b0e7
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/store-eu/META-INF/sca-contribution.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<contribution xmlns="http://www.osoa.org/xmlns/sca/1.0"
+ xmlns:s="http://store">
+ <import.java package="services"/>
+ <import.java package="services.merger"/>
+ <import.java package="services.db"/>
+ <deployable composite="s:store-eu"/>
+</contribution> \ No newline at end of file
diff --git a/branches/sca-java-1.5.2/tutorials/store/store-eu/pom.xml b/branches/sca-java-1.5.2/tutorials/store/store-eu/pom.xml
new file mode 100644
index 0000000000..c554c0b180
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/store-eu/pom.xml
@@ -0,0 +1,114 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-tutorial-store</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ <relativePath>../pom.xml</relativePath>
+ </parent>
+ <artifactId>tutorial-store-eu</artifactId>
+ <name>Apache Tuscany SCA Store Tutorial EU Online Store</name>
+
+ <repositories>
+ <repository>
+ <id>apache.incubator</id>
+ <url>http://people.apache.org/repo/m2-incubating-repository</url>
+ </repository>
+ </repositories>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-sca-api</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <finalName>${artifactId}</finalName>
+ <sourceDirectory>${basedir}</sourceDirectory>
+ <resources>
+ <resource>
+ <directory>${basedir}</directory>
+ <excludes>
+ <exclude>**/*.java</exclude>
+ <exclude>**/.*/**</exclude>
+ <exclude>pom.xml</exclude>
+ <exclude>build.xml</exclude>
+ <exclude>target/**</exclude>
+ </excludes>
+ </resource>
+ </resources>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-maven-ant-generator</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ <executions>
+ <execution>
+ <configuration>
+ <pathToRootDir>../../..</pathToRootDir>
+ </configuration>
+ <goals>
+ <goal>generate</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>sql-maven-plugin</artifactId>
+ <version>1.3</version>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.derby</groupId>
+ <artifactId>derby</artifactId>
+ <version>10.3.1.4</version>
+ </dependency>
+ </dependencies>
+
+ <executions>
+ <execution>
+ <id>create-db</id>
+ <phase>generate-resources</phase>
+ <goals>
+ <goal>execute</goal>
+ </goals>
+ <configuration>
+ <driver>org.apache.derby.jdbc.EmbeddedDriver</driver>
+ <url>jdbc:derby:${basedir}/target/cart-eu-db;create=true</url>
+ <autocommit>true</autocommit>
+ <onError>continue</onError>
+ <delimiter>;</delimiter>
+ <srcFiles>
+ <srcFile>${basedir}/../assets/services/db/cart.sql</srcFile>
+ </srcFiles>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+
+</project>
diff --git a/branches/sca-java-1.5.2/tutorials/store/store-eu/store-eu.composite b/branches/sca-java-1.5.2/tutorials/store/store-eu/store-eu.composite
new file mode 100644
index 0000000000..a0b8b50975
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/store-eu/store-eu.composite
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
+ xmlns:t="http://tuscany.apache.org/xmlns/sca/1.0"
+ targetNamespace="http://store"
+ name="store-eu">
+
+ <component name="StoreEU">
+ <t:implementation.widget location="uiservices/store-eu.html"/>
+ <service name="Widget">
+ <t:binding.http uri="/ui"/>
+ </service>
+ <reference name="catalog" target="StoreEUCatalog">
+ <t:binding.jsonrpc/>
+ </reference>
+ <reference name="shoppingCart" target="StoreEUShoppingCart/Cart">
+ <t:binding.atom/>
+ </reference>
+ <reference name="shoppingTotal" target="StoreEUShoppingCart/Total">
+ <t:binding.jsonrpc/>
+ </reference>
+ </component>
+
+ <component name="StoreEUCatalog">
+ <implementation.java class="services.merger.MergedCatalogImpl"/>
+ <property name="currencyCode">EUR</property>
+ <service name="Catalog">
+ <t:binding.jsonrpc/>
+ <binding.ws uri="/CatalogWebService"/>
+ </service>
+ <reference name="fruitsCatalog" target="FruitsCatalogWebService">
+ <binding.ws/>
+ </reference>
+ <reference name="vegetablesCatalog" target="VegetablesCatalogWebService">
+ <binding.ws/>
+ </reference>
+ <reference name="currencyConverter" target="CurrencyConverterWebService">
+ <binding.ws/>
+ </reference>
+ </component>
+
+ <component name="StoreEUShoppingCart">
+ <implementation.java class="services.db.ShoppingCartTableImpl"/>
+ <property name="database">../store-eu/target/cart-eu-db</property>
+ <service name="Cart">
+ <t:binding.atom uri="/ShoppingCart/Cart"/>
+ </service>
+ <service name="Total">
+ <t:binding.jsonrpc/>
+ </service>
+ </component>
+
+</composite>
diff --git a/branches/sca-java-1.5.2/tutorials/store/store-eu/uiservices/store-eu.html b/branches/sca-java-1.5.2/tutorials/store/store-eu/uiservices/store-eu.html
new file mode 100644
index 0000000000..11eec1e2f9
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/store-eu/uiservices/store-eu.html
@@ -0,0 +1,162 @@
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<html>
+<head>
+<title>EU Store</title>
+
+<script type="text/javascript" src="store-eu.js"></script>
+
+<script language="JavaScript">
+
+ //@Reference
+ var catalog = new tuscany.sca.Reference("catalog");
+
+ //@Reference
+ var shoppingCart = new tuscany.sca.Reference("shoppingCart");
+
+ //@Reference
+ var shoppingTotal = new tuscany.sca.Reference("shoppingTotal");
+
+ var catalogItems;
+
+ function catalog_getResponse(items, exception) {
+ if(exception){
+ alert(exception.message);
+ return;
+ }
+ var catalog = "";
+ for (var i=0; i<items.length; i++) {
+ var item = items[i].name + ' - ' + items[i].price;
+ catalog += '<input name="items" type="checkbox" value="' +
+ item + '">' + item + ' <br>';
+ }
+ document.getElementById('catalog').innerHTML=catalog;
+ catalogItems = items;
+ }
+
+ function shoppingCart_getResponse(feed) {
+ if (feed != null) {
+ var entries = feed.getElementsByTagName("entry");
+ var list = "";
+ for (var i=0; i<entries.length; i++) {
+ var content = entries[i].getElementsByTagName("content")[0];
+ var name = content.getElementsByTagName("name")[0].firstChild.nodeValue;
+ var price = content.getElementsByTagName("price")[0].firstChild.nodeValue;
+ list += name + ' - ' + price + ' <br>';
+ }
+ document.getElementById("shoppingCart").innerHTML = list;
+
+ if (entries.length != 0) {
+ try {
+ shoppingTotal.getTotal(shoppingTotal_getTotalResponse);
+ }
+ carch(e) {
+ alert(e);
+ }
+
+ }
+ }
+ }
+
+ function shoppingTotal_getTotalResponse(total,exception) {
+ if(exception){
+ alert(exception.message);
+ return;
+ }
+ document.getElementById('total').innerHTML = total;
+ }
+
+ function shoppingCart_postResponse(entry) {
+ shoppingCart.get("", shoppingCart_getResponse);
+ }
+
+ function addToCart() {
+ var items = document.catalogForm.items;
+ var j = 0;
+ for (var i=0; i<items.length; i++)
+ if (items[i].checked) {
+ var entry = '<entry xmlns="http://www.w3.org/2005/Atom"><title>item</title><content type="text/xml">' +
+ '<Item xmlns="http://services/">' +
+ '<name xmlns="">' + catalogItems[i].name + '</name>' + '<price xmlns="">' + catalogItems[i].price + '</price>' +
+ '</Item>' + '</content></entry>';
+ shoppingCart.post(entry, shoppingCart_postResponse);
+ items[i].checked = false;
+ }
+ }
+ function checkoutCart() {
+ document.getElementById('store').innerHTML='<h2>' +
+ 'Thanks for Shopping With Us!</h2>'+
+ '<h2>Your Order</h2>'+
+ '<form name="orderForm">'+
+ document.getElementById('shoppingCart').innerHTML+
+ '<br>'+
+ document.getElementById('total').innerHTML+
+ '<br>'+
+ '<br>'+
+ '<input type="submit" value="Continue Shopping">'+
+ '</form>';
+ shoppingCart.del("", null);
+ }
+ function deleteCart() {
+ shoppingCart.del("", null);
+ document.getElementById('shoppingCart').innerHTML = "";
+ document.getElementById('total').innerHTML = "";
+ }
+
+ function init() {
+ try {
+ catalog.get(catalog_getResponse);
+ shoppingCart.get("", shoppingCart_getResponse);
+ }
+ catch(e) {
+ alert(e);
+ }
+
+ }
+
+</script>
+
+</head>
+
+<body onload="init()">
+<h1>Store</h1>
+ <p>Fruits and Vegetables - Fruits et Legumes - Obst und Gemuese
+ <div id="store">
+ <h2>Catalog</h2>
+ <form name="catalogForm">
+ <div id="catalog" ></div>
+ <br>
+ <input type="button" onClick="addToCart()" value="Add to Cart">
+ </form>
+
+ <br>
+
+ <h2>Your Shopping Cart</h2>
+ <form name="shoppingCartForm">
+ <div id="shoppingCart"></div>
+ <br>
+ <div id="total"></div>
+ <br>
+ <input type="button" onClick="checkoutCart()" value="Checkout">
+ <input type="button" onClick="deleteCart()" value="Empty">
+ <a href="../ShoppingCart/Cart/">(feed)</a>
+ </form>
+ </div>
+</body>
+</html>
diff --git a/branches/sca-java-1.5.2/tutorials/store/store-market/META-INF/sca-contribution.xml b/branches/sca-java-1.5.2/tutorials/store/store-market/META-INF/sca-contribution.xml
new file mode 100644
index 0000000000..491230c952
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/store-market/META-INF/sca-contribution.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<contribution xmlns="http://www.osoa.org/xmlns/sca/1.0"
+ xmlns:s="http://store">
+ <import.java package="services" />
+ <import.java package="services.market" />
+ <import.resource uri="uiservices/store.html"/>
+ <deployable composite="s:store-market" />
+</contribution> \ No newline at end of file
diff --git a/branches/sca-java-1.5.2/tutorials/store/store-market/build.xml b/branches/sca-java-1.5.2/tutorials/store/store-market/build.xml
new file mode 100644
index 0000000000..51b08a0360
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/store-market/build.xml
@@ -0,0 +1,54 @@
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+
+<project name="tutorial-store-market" default="compile">
+
+ <target name="compile">
+ <mkdir dir="target/classes"/>
+ <javac destdir="target/classes" debug="on" source="1.5" target="1.5">
+ <src path="."/>
+ <classpath>
+ <fileset refid="tuscany.jars"/>
+ <fileset refid="3rdparty.jars"/>
+ </classpath>
+ </javac>
+ <copy todir="target/classes">
+ <fileset dir="." excludes="**/*.java, pom.xml, build.xml, target"/>
+ </copy>
+ <jar destfile="target/tutorial-store-market.jar" basedir="target/classes">
+ <manifest>
+ </manifest>
+ </jar>
+ </target>
+
+ <target name="package" depends="compile"/>
+
+ <target name="clean">
+ <delete includeemptydirs="true">
+ <fileset dir="target"/>
+ </delete>
+ </target>
+
+ <fileset id="tuscany.jars" dir="../../../modules">
+ <include name="tuscany-sca-api-1.5.1-SNAPSHOT.jar"/>
+ </fileset>
+ <fileset id="3rdparty.jars" dir="../../../lib">
+ </fileset>
+
+</project>
diff --git a/branches/sca-java-1.5.2/tutorials/store/store-market/pom.xml b/branches/sca-java-1.5.2/tutorials/store/store-market/pom.xml
new file mode 100644
index 0000000000..50f2cf821d
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/store-market/pom.xml
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-tutorial-store</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ <relativePath>../pom.xml</relativePath>
+ </parent>
+ <artifactId>tutorial-store-market</artifactId>
+ <name>Apache Tuscany SCA Store Tutorial Marketplace Online Store</name>
+
+ <repositories>
+ <repository>
+ <id>apache.incubator</id>
+ <url>http://people.apache.org/repo/m2-incubating-repository</url>
+ </repository>
+ </repositories>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-sca-api</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <finalName>${artifactId}</finalName>
+ <sourceDirectory>${basedir}</sourceDirectory>
+ <resources>
+ <resource>
+ <directory>${basedir}</directory>
+ <excludes>
+ <exclude>**/*.java</exclude>
+ <exclude>**/.*/**</exclude>
+ <exclude>pom.xml</exclude>
+ <exclude>build.xml</exclude>
+ <exclude>target/**</exclude>
+ </excludes>
+ </resource>
+ </resources>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-maven-ant-generator</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ <executions>
+ <execution>
+ <configuration>
+ <pathToRootDir>../../..</pathToRootDir>
+ </configuration>
+ <goals>
+ <goal>generate</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+
+</project>
diff --git a/branches/sca-java-1.5.2/tutorials/store/store-market/store-market.composite b/branches/sca-java-1.5.2/tutorials/store/store-market/store-market.composite
new file mode 100644
index 0000000000..1c225e6c07
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/store-market/store-market.composite
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
+ xmlns:t="http://tuscany.apache.org/xmlns/sca/1.0"
+ targetNamespace="http://store"
+ name="store-market">
+
+ <component name="StoreMarket">
+ <t:implementation.widget location="uiservices/store.html"/>
+ <service name="Widget">
+ <t:binding.http uri="/ui"/>
+ </service>
+ <reference name="catalog" target="StoreMarketCatalog">
+ <t:binding.jsonrpc/>
+ </reference>
+ <reference name="shoppingCart" target="StoreMarketShoppingCart/Cart">
+ <t:binding.atom/>
+ </reference>
+ <reference name="shoppingTotal" target="StoreMarketShoppingCart/Total">
+ <t:binding.jsonrpc/>
+ </reference>
+ </component>
+
+ <component name="StoreMarketCatalog">
+ <implementation.java class="services.market.MarketCatalogImpl"/>
+ <property name="currencyCode">USD</property>
+ <service name="Catalog">
+ <t:binding.jsonrpc/>
+ </service>
+ <reference name="goodsCatalog" multiplicity="0..n" target="VegetablesCatalogWebService FruitsCatalogWebService" >
+ <binding.ws />
+ </reference>
+ <reference name="currencyConverter" target="StoreMarketCurrencyConverter"/>
+
+ </component>
+
+ <component name="StoreMarketShoppingCart">
+ <implementation.java class="services.ShoppingCartImpl"/>
+ <service name="Cart">
+ <t:binding.atom uri="/ShoppingCart/Cart"/>
+ </service>
+ <service name="Total">
+ <t:binding.jsonrpc/>
+ </service>
+ </component>
+
+ <component name="StoreMarketCurrencyConverter">
+ <implementation.java class="services.CurrencyConverterImpl"/>
+ </component>
+
+</composite>
diff --git a/branches/sca-java-1.5.2/tutorials/store/store-mashup/META-INF/sca-contribution.xml b/branches/sca-java-1.5.2/tutorials/store/store-mashup/META-INF/sca-contribution.xml
new file mode 100644
index 0000000000..4ec08403e5
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/store-mashup/META-INF/sca-contribution.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<contribution xmlns="http://www.osoa.org/xmlns/sca/1.0"
+ xmlns:s="http://store">
+ <import.java package="services"/>
+ <import.java package="services.map"/>
+ <deployable composite="s:store-mashup"/>
+</contribution>
diff --git a/branches/sca-java-1.5.2/tutorials/store/store-mashup/build-openajax.xml b/branches/sca-java-1.5.2/tutorials/store/store-mashup/build-openajax.xml
new file mode 100644
index 0000000000..4668dedc1d
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/store-mashup/build-openajax.xml
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<project name="OpenAjaxZipInstaller">
+
+ <property name="openajax.version" value="1.0_build117_v1.0"/>
+ <property name="unpack.location" value="${basedir}/openajax"/>
+
+ <target name="check-openajax-installed">
+ <condition property="already.installed" >
+ <available file="${localRepository}/openajax/openajax/${openajax.version}/openajax-${openajax.version}.zip"/>
+ </condition>
+ <condition property="maven.suffix" value="">
+ <os family="unix"/>
+ </condition>
+ <condition property="maven.suffix" value=".bat">
+ <os family="windows"/>
+ </condition>
+ </target>
+
+
+ <target name="check-openajax-unpacked">
+ <condition property="already.unpacked" >
+ <available file="${unpack.location}"/>
+ </condition>
+ </target>
+
+ <target name="install-openajax" depends="check-openajax-installed" unless="already.installed">
+ <mkdir dir="${basedir}/target/openajax-download/"/>
+ <get src="http://downloads.sourceforge.net/openajaxallianc/OpenAjaxHub${openajax.version}.zip"
+ dest="${basedir}/target/openajax-download/openajax-${openajax.version}.zip"
+ verbose="true"
+ usetimestamp="true"/>
+ <exec executable="mvn${maven.suffix}" dir="${basedir}" failonerror="false">
+ <arg line="install:install-file -DgroupId=openajax -DartifactId=openajax -Dversion=${openajax.version} -Dpackaging=zip -DgeneratePom=true -Dfile=${basedir}/target/openajax-download/openajax-${openajax.version}.zip"/>
+ </exec>
+ </target>
+
+ <target name="install-openajax-nomaven" depends="check-openajax-installed" unless="already.installed">
+ <mkdir dir="${basedir}/target/openajax-download/"/>
+ <get src="http://downloads.sourceforge.net/openajaxallianc/OpenAjaxHub${openajax.version}.zip"
+ dest="${basedir}/target/openajax-download/openajax-${openajax.version}.zip"
+ verbose="true"
+ usetimestamp="true"/>
+ <copy file="${basedir}/target/openajax-download/openajax-${openajax.version}.zip"
+ tofile="${localRepository}/openajax/openajax/${openajax.version}/openajax-${openajax.version}.zip"/>
+ </target>
+
+
+ <target name="unpack-openajax-files" depends="check-openajax-installed, check-openajax-unpacked" unless="already.unpacked">
+ <fail message="openajax zip file not installed in local repository: ${localRepository}" unless="already.installed"/>
+ <mkdir dir="${basedir}/target/openajax-unpack-temp/"/>
+ <unzip src="${localRepository}/openajax/openajax/${openajax.version}/openajax-${openajax.version}.zip"
+ dest="${basedir}/target/openajax-unpack-temp/"
+ overwrite="false">
+ <patternset>
+ <include name="OpenAjaxHub${openajax.version}/release/**"/>
+ </patternset>
+ </unzip>
+ <move file="${basedir}/target/openajax-unpack-temp/OpenAjaxHub${openajax.version}/release"
+ tofile="${unpack.location}"
+ verbose="true"/>
+ <delete dir="${basedir}/target/openajax-unpack-temp/"/>
+ </target>
+
+
+ <target name="clean-openajax-files">
+ <delete dir="${unpack.location}"/>
+ </target>
+</project>
diff --git a/branches/sca-java-1.5.2/tutorials/store/store-mashup/gadget/map-gadget.html b/branches/sca-java-1.5.2/tutorials/store/store-mashup/gadget/map-gadget.html
new file mode 100644
index 0000000000..d76bcad91b
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/store-mashup/gadget/map-gadget.html
@@ -0,0 +1,50 @@
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<html>
+<head>
+<title>Map</title>
+
+<script type="text/javascript" src="http://maps.google.com/maps?file=api&amp;v=2&amp;key=ABQIAAAAzr2EBOXUKnm_jVnk0OJI7xSosDVG8KKPE1-m51RBrvYughuyMxQ-i1QfUnH94QxWIa6N4U6MouMmBA"></script>
+
+<script language="JavaScript">
+
+ function coordsChangedCallback(eventname, publisherData, subscriberData) {
+ var coords = publisherData.split(',');
+ if (coords.length >= 2) {
+ subscriberData.setCenter(new GLatLng(coords[0], coords[1]));
+ }
+ }
+
+ function init() {
+ if (GBrowserIsCompatible()) {
+ var map = new GMap2(document.getElementById("map_canvas"));
+ map.setCenter(new GLatLng(37.4419, -122.1419), 13);
+
+ if (window.top.hub != null) {
+ window.top.hub.subscribe("geospatial.coords", coordsChangedCallback, null, map);
+ }
+ }
+ }
+</script>
+</head>
+
+<body onload="init()">
+ <div id="map_canvas" style="width: 100%; height: 100%"></div>
+</body>
+</html>
diff --git a/branches/sca-java-1.5.2/tutorials/store/store-mashup/gadget/store-gadget.html b/branches/sca-java-1.5.2/tutorials/store/store-mashup/gadget/store-gadget.html
new file mode 100644
index 0000000000..e25b91f46d
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/store-mashup/gadget/store-gadget.html
@@ -0,0 +1,166 @@
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<html>
+<head>
+<title>Store</title>
+
+<script type="text/javascript" src="/gadget/store/store-gadget.js"></script>
+
+<script language="JavaScript">
+
+ //@Reference
+ var catalog = new tuscany.sca.Reference("catalog");
+
+ //@Reference
+ var shoppingCart = new tuscany.sca.Reference("shoppingCart");
+
+ //@Reference
+ var shoppingTotal = new tuscany.sca.Reference("shoppingTotal");
+
+ var catalogItems;
+
+ function catalog_getResponse(items,exception) {
+ if(exception){
+ alert(exception.message);
+ return;
+ }
+ var catalog = "";
+ for (var i=0; i<items.length; i++) {
+ var item = items[i].name + ' - ' + items[i].price;
+ catalog += '<input name="items" type="checkbox" onClick="selectItem(' + i + ')" value="' +
+ item + '">' + item + ' <br>';
+ }
+ document.getElementById('catalog').innerHTML=catalog;
+ catalogItems = items;
+ }
+
+ function shoppingCart_getResponse(feed) {
+ if (feed != null) {
+ var entries = feed.getElementsByTagName("entry");
+ var list = "";
+ for (var i=0; i<entries.length; i++) {
+ var content = entries[i].getElementsByTagName("content")[0];
+ var name = content.getElementsByTagName("name")[0].firstChild.nodeValue;
+ var price = content.getElementsByTagName("price")[0].firstChild.nodeValue;
+ list += name + ' - ' + price + ' <br>';
+ }
+ document.getElementById("shoppingCart").innerHTML = list;
+
+ if (entries.length != 0) {
+ try {
+ shoppingTotal.getTotal(shoppingTotal_getTotalResponse);
+ }
+ carch(e) {
+ alert(e);
+ }
+ }
+ }
+ }
+
+ function shoppingTotal_getTotalResponse(total,exception) {
+ if(exception){
+ alert(exception.message);
+ return;
+ }
+ document.getElementById('total').innerHTML = total;
+ }
+
+ function shoppingCart_postResponse(entry) {
+ shoppingCart.get("", shoppingCart_getResponse);
+ }
+
+ function addToCart() {
+ var items = document.catalogForm.items;
+ var j = 0;
+ for (var i=0; i<items.length; i++)
+ if (items[i].checked) {
+ var entry = '<entry xmlns="http://www.w3.org/2005/Atom"><title>item</title><content type="text/xml">' +
+ '<Item xmlns="http://services/">' +
+ '<name xmlns="">' + catalogItems[i].name + '</name>' + '<price xmlns="">' + catalogItems[i].price + '</price>' +
+ '</Item>' + '</content></entry>';
+ shoppingCart.post(entry, shoppingCart_postResponse);
+ items[i].checked = false;
+ }
+ }
+ function checkoutCart() {
+ document.getElementById('store').innerHTML='<h2>' +
+ 'Thanks for Shopping With Us!</h2>'+
+ '<h2>Your Order</h2>'+
+ '<form name="orderForm" action="/gadget/store">'+
+ document.getElementById('shoppingCart').innerHTML+
+ '<br>'+
+ document.getElementById('total').innerHTML+
+ '<br>'+
+ '<br>'+
+ '<input type="submit" value="Continue Shopping">'+
+ '</form>';
+ shoppingCart.del("", null);
+ }
+ function deleteCart() {
+ shoppingCart.del("", null);
+ document.getElementById('shoppingCart').innerHTML = "";
+ document.getElementById('total').innerHTML = "";
+ }
+
+ function selectItem(i) {
+ var item = catalogItems[i];
+ if (window.top.hub != null) {
+ window.top.hub.publish("geospatial.coords", item.origin);
+ }
+ }
+
+ function init() {
+ try {
+ catalog.get(catalog_getResponse);
+ shoppingCart.get("", shoppingCart_getResponse);
+ }
+ catch(e) {
+ alert(e);
+ }
+ }
+
+</script>
+
+</head>
+
+<body onload="init()">
+<h1>Store</h1>
+ <div id="store">
+ <h2>Catalog</h2>
+ <form name="catalogForm">
+ <div id="catalog" ></div>
+ <br>
+ <input type="button" onClick="addToCart()" value="Add to Cart">
+ </form>
+
+ <br>
+
+ <h2>Your Shopping Cart</h2>
+ <form name="shoppingCartForm">
+ <div id="shoppingCart"></div>
+ <br>
+ <div id="total"></div>
+ <br>
+ <input type="button" onClick="checkoutCart()" value="Checkout">
+ <input type="button" onClick="deleteCart()" value="Empty">
+ <a href="/ShoppingCart/Cart/" target="_top">(feed)</a>
+ </form>
+ </div>
+</body>
+</html>
diff --git a/branches/sca-java-1.5.2/tutorials/store/store-mashup/map-gadget.composite b/branches/sca-java-1.5.2/tutorials/store/store-mashup/map-gadget.composite
new file mode 100644
index 0000000000..77db2edbf2
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/store-mashup/map-gadget.composite
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
+ xmlns:t="http://tuscany.apache.org/xmlns/sca/1.0"
+ targetNamespace="http://store"
+ name="map-gadget">
+
+ <component name="MapGadget">
+ <t:implementation.widget location="gadget/map-gadget.html"/>
+ <service name="Widget">
+ <t:binding.http uri="/gadget/map"/>
+ </service>
+ </component>
+
+</composite>
diff --git a/branches/sca-java-1.5.2/tutorials/store/store-mashup/mashup/store-mash.html b/branches/sca-java-1.5.2/tutorials/store/store-mashup/mashup/store-mash.html
new file mode 100644
index 0000000000..b4708475f6
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/store-mashup/mashup/store-mash.html
@@ -0,0 +1,70 @@
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<html>
+<head>
+<title>Store Mashup</title>
+
+<script type="text/javascript" src='/openajax/OpenAjax.js'></script>
+
+<script type="text/javascript" src="/mashup/store-mash.js"></script>
+
+<script language="JavaScript">
+
+ //@Reference
+ var storeGadget = new tuscany.sca.Reference("storeGadget");
+
+ //@Reference
+ var mapGadget = new tuscany.sca.Reference("mapGadget");
+
+ function storeGadget_getResponse(gadget) {
+ var gadget1 = document.getElementById('gadget1').contentDocument;
+ gadget1.open();
+ gadget1.write(gadget);
+ gadget1.close();
+ }
+
+ function mapGadget_getResponse(gadget) {
+ var gadget2 = document.getElementById('gadget2').contentDocument;
+ gadget2.open();
+ gadget2.write(gadget);
+ gadget2.close();
+ }
+
+ function init() {
+ window.top.hub = OpenAjax.hub;
+
+ storeGadget.get('', storeGadget_getResponse);
+ mapGadget.get('', mapGadget_getResponse);
+ }
+
+</script>
+</head>
+
+<body onload="init()">
+<h1>Store Mashup</h1>
+<br>
+<table border="0" cellpadding="0" cellspacing="2">
+ <tr>
+ <td><iframe id="gadget1" style='overflow:hidden;width:400px;height:500px;border:1px solid black;'></iframe></td>
+ <td><iframe id="gadget2" style='overflow:hidden;width:400px;height:500px;border:1px solid black;'></iframe></td>
+ </tr>
+</table>
+
+</body>
+</html>
diff --git a/branches/sca-java-1.5.2/tutorials/store/store-mashup/pom.xml b/branches/sca-java-1.5.2/tutorials/store/store-mashup/pom.xml
new file mode 100644
index 0000000000..06be0c7ed4
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/store-mashup/pom.xml
@@ -0,0 +1,139 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-tutorial-store</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ <relativePath>../pom.xml</relativePath>
+ </parent>
+ <artifactId>tutorial-store-mashup</artifactId>
+ <name>Apache Tuscany SCA Store Tutorial Online Store Mashup</name>
+
+ <repositories>
+ <repository>
+ <id>apache.incubator</id>
+ <url>http://people.apache.org/repo/m2-incubating-repository</url>
+ </repository>
+ </repositories>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-sca-api</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <finalName>${artifactId}</finalName>
+ <sourceDirectory>${basedir}</sourceDirectory>
+ <resources>
+ <resource>
+ <directory>${basedir}</directory>
+ <excludes>
+ <exclude>**/*.java</exclude>
+ <exclude>**/.*/**</exclude>
+ <exclude>pom.xml</exclude>
+ <exclude>build.xml</exclude>
+ <exclude>target/**</exclude>
+ </excludes>
+ </resource>
+ </resources>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-maven-ant-generator</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ <executions>
+ <execution>
+ <configuration>
+ <pathToRootDir>../../..</pathToRootDir>
+ </configuration>
+ <goals>
+ <goal>generate</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-antrun-plugin</artifactId>
+ <dependencies>
+ <dependency>
+ <groupId>ant</groupId>
+ <artifactId>ant-trax</artifactId>
+ <version>1.6.5</version>
+ </dependency>
+ </dependencies>
+
+ <executions>
+ <execution>
+ <id>install-openajax</id>
+ <phase>validate</phase>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ <configuration>
+ <tasks>
+ <ant antfile="./build-openajax.xml" target="install-openajax">
+ <property name="localRepository" value="${settings.localRepository}"/>
+ </ant>
+ </tasks>
+ </configuration>
+ </execution>
+ <execution>
+ <id>copy-openajax-files</id>
+ <phase>generate-resources</phase>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ <configuration>
+ <tasks>
+ <ant antfile="./build-openajax.xml" target="unpack-openajax-files">
+ <property name="localRepository" value="${settings.localRepository}"/>
+ <property name="artifactId" value="${artifactId}"/>
+ </ant>
+ </tasks>
+ </configuration>
+ </execution>
+ <execution>
+ <id>clean-openajax-files</id>
+ <phase>clean</phase>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ <configuration>
+ <tasks>
+ <ant antfile="./build-openajax.xml" target="clean-openajax-files">
+ <property name="localRepository" value="${settings.localRepository}"/>
+ <property name="artifactId" value="${artifactId}"/>
+ </ant>
+ </tasks>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+
+</project>
diff --git a/branches/sca-java-1.5.2/tutorials/store/store-mashup/store-gadget.composite b/branches/sca-java-1.5.2/tutorials/store/store-mashup/store-gadget.composite
new file mode 100644
index 0000000000..7c10651e52
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/store-mashup/store-gadget.composite
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
+ xmlns:t="http://tuscany.apache.org/xmlns/sca/1.0"
+ targetNamespace="http://store"
+ name="store-gadget">
+
+ <component name="StoreGadget">
+ <t:implementation.widget location="gadget/store-gadget.html"/>
+ <service name="Widget">
+ <t:binding.http uri="/gadget/store"/>
+ </service>
+ <reference name="catalog" target="StoreGadgetCatalog">
+ <t:binding.jsonrpc/>
+ </reference>
+ <reference name="shoppingCart" target="StoreGadgetShoppingCart/Cart">
+ <t:binding.atom/>
+ </reference>
+ <reference name="shoppingTotal" target="StoreGadgetShoppingCart/Total">
+ <t:binding.jsonrpc/>
+ </reference>
+ </component>
+
+ <component name="StoreGadgetCatalog">
+ <implementation.java class="services.map.FruitsCatalogImpl"/>
+ <property name="currencyCode">USD</property>
+ <service name="Catalog">
+ <t:binding.jsonrpc/>
+ </service>
+ <reference name="currencyConverter" target="StoreGadgetCurrencyConverter"/>
+ </component>
+
+ <component name="StoreGadgetShoppingCart">
+ <implementation.java class="services.ShoppingCartImpl"/>
+ <service name="Cart">
+ <t:binding.atom uri="/ShoppingCart/Cart"/>
+ </service>
+ <service name="Total">
+ <t:binding.jsonrpc/>
+ </service>
+ </component>
+
+ <component name="StoreGadgetCurrencyConverter">
+ <implementation.java class="services.CurrencyConverterImpl"/>
+ </component>
+
+</composite>
diff --git a/branches/sca-java-1.5.2/tutorials/store/store-mashup/store-mashup.composite b/branches/sca-java-1.5.2/tutorials/store/store-mashup/store-mashup.composite
new file mode 100644
index 0000000000..84e4933e63
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/store-mashup/store-mashup.composite
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
+ xmlns:t="http://tuscany.apache.org/xmlns/sca/1.0"
+ targetNamespace="http://store"
+ xmlns:s="http://store"
+ name="store-mashup">
+
+ <include name="s:store-gadget"/>
+ <include name="s:map-gadget"/>
+
+ <component name="StoreMashup">
+ <t:implementation.widget location="mashup/store-mash.html"/>
+ <service name="Widget">
+ <t:binding.http uri="/mashup"/>
+ </service>
+ <reference name="storeGadget" target="StoreGadget">
+ <t:binding.http/>
+ </reference>
+ <reference name="mapGadget" target="MapGadget">
+ <t:binding.http/>
+ </reference>
+ </component>
+
+ <component name="openajax">
+ <t:implementation.resource location="openajax"/>
+ <service name="Resource">
+ <t:binding.http uri="/openajax"/>
+ </service>
+ </component>
+</composite>
diff --git a/branches/sca-java-1.5.2/tutorials/store/store-merger/META-INF/sca-contribution.xml b/branches/sca-java-1.5.2/tutorials/store/store-merger/META-INF/sca-contribution.xml
new file mode 100644
index 0000000000..700a84736c
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/store-merger/META-INF/sca-contribution.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<contribution xmlns="http://www.osoa.org/xmlns/sca/1.0"
+ xmlns:s="http://store">
+ <import.java package="services" />
+ <import.java package="services.merger" />
+ <import.resource uri="uiservices/store.html"/>
+ <deployable composite="s:store-merger" />
+</contribution> \ No newline at end of file
diff --git a/branches/sca-java-1.5.2/tutorials/store/store-merger/pom.xml b/branches/sca-java-1.5.2/tutorials/store/store-merger/pom.xml
new file mode 100644
index 0000000000..7eeb5e0535
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/store-merger/pom.xml
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-tutorial-store</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ <relativePath>../pom.xml</relativePath>
+ </parent>
+ <artifactId>tutorial-store-merger</artifactId>
+ <name>Apache Tuscany SCA Store Tutorial Merger Online Store</name>
+
+ <repositories>
+ <repository>
+ <id>apache.incubator</id>
+ <url>http://people.apache.org/repo/m2-incubating-repository</url>
+ </repository>
+ </repositories>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-sca-api</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <finalName>${artifactId}</finalName>
+ <sourceDirectory>${basedir}</sourceDirectory>
+ <resources>
+ <resource>
+ <directory>${basedir}</directory>
+ <excludes>
+ <exclude>**/*.java</exclude>
+ <exclude>**/.*/**</exclude>
+ <exclude>pom.xml</exclude>
+ <exclude>build.xml</exclude>
+ <exclude>target/**</exclude>
+ </excludes>
+ </resource>
+ </resources>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-maven-ant-generator</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ <executions>
+ <execution>
+ <configuration>
+ <pathToRootDir>../../..</pathToRootDir>
+ </configuration>
+ <goals>
+ <goal>generate</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+
+</project>
diff --git a/branches/sca-java-1.5.2/tutorials/store/store-merger/store-merger.composite b/branches/sca-java-1.5.2/tutorials/store/store-merger/store-merger.composite
new file mode 100644
index 0000000000..76d77dc693
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/store-merger/store-merger.composite
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
+ xmlns:t="http://tuscany.apache.org/xmlns/sca/1.0"
+ targetNamespace="http://store"
+ name="store-merger">
+
+ <component name="StoreMerger">
+ <t:implementation.widget location="uiservices/store.html"/>
+ <service name="Widget">
+ <t:binding.http uri="/ui"/>
+ </service>
+ <reference name="catalog" target="StoreMergerCatalog">
+ <t:binding.jsonrpc/>
+ </reference>
+ <reference name="shoppingCart" target="StoreMergerShoppingCart/Cart">
+ <t:binding.atom/>
+ </reference>
+ <reference name="shoppingTotal" target="StoreMergerShoppingCart/Total">
+ <t:binding.jsonrpc/>
+ </reference>
+ </component>
+
+ <component name="StoreMergerCatalog">
+ <implementation.java class="services.merger.MergedCatalogImpl"/>
+ <property name="currencyCode">USD</property>
+ <service name="Catalog">
+ <t:binding.jsonrpc/>
+ </service>
+ <reference name="currencyConverter" target="StoreMergerCurrencyConverter"/>
+ <reference name="fruitsCatalog" target="StoreMergerFruitsCatalog"/>
+ <!-- <reference name="vegetablesCatalog" target="MediatedVegetablesCatalog"> -->
+ <reference name="vegetablesCatalog" target="VegetablesCatalogWebService">
+ <binding.ws/>
+ </reference>
+ </component>
+
+ <component name="StoreMergerFruitsCatalog">
+ <implementation.java class="services.FruitsCatalogImpl"/>
+ <property name="currencyCode">USD</property>
+ <reference name="currencyConverter" target="StoreMergerCurrencyConverter"/>
+ </component>
+
+ <component name="StoreMergerShoppingCart">
+ <implementation.java class="services.ShoppingCartImpl"/>
+ <service name="Cart">
+ <t:binding.atom uri="/ShoppingCart/Cart"/>
+ </service>
+ <service name="Total">
+ <t:binding.jsonrpc/>
+ </service>
+ </component>
+
+ <component name="StoreMergerCurrencyConverter">
+ <implementation.java class="services.CurrencyConverterImpl"/>
+ </component>
+
+</composite>
diff --git a/branches/sca-java-1.5.2/tutorials/store/store-supplier/META-INF/sca-contribution.xml b/branches/sca-java-1.5.2/tutorials/store/store-supplier/META-INF/sca-contribution.xml
new file mode 100644
index 0000000000..a75087aca1
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/store-supplier/META-INF/sca-contribution.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<contribution xmlns="http://www.osoa.org/xmlns/sca/1.0"
+ xmlns:s="http://store">
+ <import.java package="services"/>
+ <import.java package="services.merger"/>
+ <import.java package="services.db"/>
+ <import.resource uri="uiservices/store.html"/>
+ <deployable composite="s:store-supplier"/>
+</contribution> \ No newline at end of file
diff --git a/branches/sca-java-1.5.2/tutorials/store/store-supplier/pom.xml b/branches/sca-java-1.5.2/tutorials/store/store-supplier/pom.xml
new file mode 100644
index 0000000000..978148a7a9
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/store-supplier/pom.xml
@@ -0,0 +1,129 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-tutorial-store</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ <relativePath>../pom.xml</relativePath>
+ </parent>
+ <artifactId>tutorial-store-supplier</artifactId>
+ <name>Apache Tuscany SCA Store Tutorial Supplier Online Store</name>
+
+ <repositories>
+ <repository>
+ <id>apache.incubator</id>
+ <url>http://people.apache.org/repo/m2-incubating-repository</url>
+ </repository>
+ </repositories>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-sca-api</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <finalName>${artifactId}</finalName>
+ <sourceDirectory>${basedir}</sourceDirectory>
+ <resources>
+ <resource>
+ <directory>${basedir}</directory>
+ <excludes>
+ <exclude>**/*.java</exclude>
+ <exclude>**/.*/**</exclude>
+ <exclude>pom.xml</exclude>
+ <exclude>build.xml</exclude>
+ <exclude>target/**</exclude>
+ </excludes>
+ </resource>
+ </resources>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-maven-ant-generator</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ <executions>
+ <execution>
+ <configuration>
+ <pathToRootDir>../../..</pathToRootDir>
+ </configuration>
+ <goals>
+ <goal>generate</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>sql-maven-plugin</artifactId>
+ <version>1.3</version>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.derby</groupId>
+ <artifactId>derby</artifactId>
+ <version>10.3.1.4</version>
+ </dependency>
+ </dependencies>
+
+ <executions>
+ <execution>
+ <id>create-db</id>
+ <phase>generate-resources</phase>
+ <goals>
+ <goal>execute</goal>
+ </goals>
+ <configuration>
+ <driver>org.apache.derby.jdbc.EmbeddedDriver</driver>
+ <url>jdbc:derby:${basedir}/target/cart-db;create=true</url>
+ <autocommit>true</autocommit>
+ <onError>continue</onError>
+ <onConnectionError>skip</onConnectionError>
+ <delimiter>;</delimiter>
+ <srcFiles>
+ <srcFile>${basedir}/../assets/services/db/cart.sql</srcFile>
+ </srcFiles>
+ </configuration>
+ </execution>
+
+ <!-- Shutdown DB in order to be able to run unit tests -->
+ <execution>
+ <id>shutdown-database-sothat-test-can-run</id>
+ <phase>process-test-resources</phase>
+ <goals>
+ <goal>execute</goal>
+ </goals>
+ <configuration>
+ <driver>org.apache.derby.jdbc.EmbeddedDriver</driver>
+ <url>jdbc:derby:${basedir}/target/cart-db;shutdown=true</url>
+ <skipOnConnectionError>true</skipOnConnectionError>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+
+</project>
diff --git a/branches/sca-java-1.5.2/tutorials/store/store-supplier/store-supplier.composite b/branches/sca-java-1.5.2/tutorials/store/store-supplier/store-supplier.composite
new file mode 100644
index 0000000000..525bc889cb
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/store-supplier/store-supplier.composite
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
+ xmlns:t="http://tuscany.apache.org/xmlns/sca/1.0"
+ targetNamespace="http://store"
+ name="store-supplier">
+
+ <component name="StoreSupplier">
+ <t:implementation.widget location="uiservices/store.html"/>
+ <service name="Widget">
+ <t:binding.http uri="/ui"/>
+ </service>
+ <reference name="catalog" target="StoreSupplierCatalog">
+ <t:binding.jsonrpc/>
+ </reference>
+ <reference name="shoppingCart" target="StoreSupplierShoppingCart/Cart">
+ <t:binding.atom/>
+ </reference>
+ <reference name="shoppingTotal" target="StoreSupplierShoppingCart/Total">
+ <t:binding.jsonrpc/>
+ </reference>
+ </component>
+
+ <component name="StoreSupplierCatalog">
+ <implementation.java class="services.merger.MergedCatalogImpl"/>
+ <property name="currencyCode">USD</property>
+ <service name="Catalog">
+ <t:binding.jsonrpc/>
+ <binding.ws uri="/CatalogWebService"/>
+ </service>
+ <reference name="fruitsCatalog" target="StoreSupplierFruitsCatalog"/>
+ <reference name="vegetablesCatalog" target="VegetablesCatalogWebService">
+ <binding.ws/>
+ </reference>
+ <reference name="currencyConverter" target="StoreSupplierCurrencyConverter"/>
+ </component>
+
+ <component name="StoreSupplierFruitsCatalog">
+ <implementation.java class="services.FruitsCatalogImpl"/>
+ <property name="currencyCode">USD</property>
+ <reference name="currencyConverter" target="StoreSupplierCurrencyConverter"/>
+ </component>
+
+ <component name="StoreSupplierShoppingCart">
+ <implementation.java class="services.db.ShoppingCartTableImpl"/>
+ <property name="database">../store-supplier/target/cart-db</property>
+ <service name="Cart">
+ <t:binding.atom uri="/ShoppingCart/Cart"/>
+ </service>
+ <service name="Total">
+ <t:binding.jsonrpc/>
+ <binding.ws uri="/ShoppinCartTotalWebService"/>
+ </service>
+ </component>
+
+ <component name="StoreSupplierCurrencyConverter">
+ <implementation.java class="services.CurrencyConverterImpl"/>
+ </component>
+
+</composite>
diff --git a/branches/sca-java-1.5.2/tutorials/store/store-test/META-INF/sca-contribution.xml b/branches/sca-java-1.5.2/tutorials/store/store-test/META-INF/sca-contribution.xml
new file mode 100644
index 0000000000..a75087aca1
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/store-test/META-INF/sca-contribution.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<contribution xmlns="http://www.osoa.org/xmlns/sca/1.0"
+ xmlns:s="http://store">
+ <import.java package="services"/>
+ <import.java package="services.merger"/>
+ <import.java package="services.db"/>
+ <import.resource uri="uiservices/store.html"/>
+ <deployable composite="s:store-supplier"/>
+</contribution> \ No newline at end of file
diff --git a/branches/sca-java-1.5.2/tutorials/store/store-test/client/Shopper.java b/branches/sca-java-1.5.2/tutorials/store/store-test/client/Shopper.java
new file mode 100644
index 0000000000..f8643d4c52
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/store-test/client/Shopper.java
@@ -0,0 +1,29 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package client;
+
+import org.osoa.sca.annotations.Remotable;
+
+@Remotable
+public interface Shopper {
+
+ String shop(String itemName, int quantity);
+
+}
diff --git a/branches/sca-java-1.5.2/tutorials/store/store-test/pom.xml b/branches/sca-java-1.5.2/tutorials/store/store-test/pom.xml
new file mode 100644
index 0000000000..cba64966cf
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/store-test/pom.xml
@@ -0,0 +1,218 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-tutorial-store</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ <relativePath>../pom.xml</relativePath>
+ </parent>
+ <artifactId>tutorial-store-test</artifactId>
+ <name>Apache Tuscany SCA Store Tutorial Integration Test</name>
+
+ <repositories>
+ <repository>
+ <id>apache.incubator</id>
+ <url>http://people.apache.org/repo/m2-incubating-repository</url>
+ </repository>
+ </repositories>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-sca-api</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-data-api</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-node-launcher</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-node-api</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-domain-manager</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-implementation-node-runtime</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-implementation-java-runtime</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-implementation-widget-runtime-tuscany</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-implementation-resource-runtime</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-binding-atom-abdera</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-binding-jsonrpc-runtime</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-binding-http-runtime</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-binding-ws-axis2</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-binding-sca-axis2</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-binding-ejb-runtime</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-contribution-jee-impl</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-implementation-ejb</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-binding-jms-runtime</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.derby</groupId>
+ <artifactId>derby</artifactId>
+ <version>10.3.1.4</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>4.5</version>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tutorial-store-supplier</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ </dependencies>
+
+ <build>
+ <finalName>${artifactId}</finalName>
+ <testSourceDirectory>${basedir}</testSourceDirectory>
+ <resources>
+ <resource>
+ <directory>${basedir}</directory>
+ <excludes>
+ <exclude>**/.*/**</exclude>
+ <exclude>**/*.java</exclude>
+ <exclude>pom.xml</exclude>
+ <exclude>build.xml</exclude>
+ <exclude>target/**</exclude>
+ </excludes>
+ </resource>
+ </resources>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-maven-ant-generator</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ <executions>
+ <execution>
+ <configuration>
+ <pathToRootDir>../../..</pathToRootDir>
+ </configuration>
+ <goals>
+ <goal>generate</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+
+</project>
diff --git a/branches/sca-java-1.5.2/tutorials/store/store-test/test/StoreSupplierTestCase.java b/branches/sca-java-1.5.2/tutorials/store/store-test/test/StoreSupplierTestCase.java
new file mode 100644
index 0000000000..9cea47fbc8
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/store-test/test/StoreSupplierTestCase.java
@@ -0,0 +1,115 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package test;
+
+import java.io.IOException;
+
+import junit.framework.Assert;
+import junit.framework.TestCase;
+
+import org.apache.tuscany.sca.node.SCAClient;
+import org.apache.tuscany.sca.node.SCANode;
+import org.apache.tuscany.sca.node.launcher.DomainManagerLauncher;
+import org.apache.tuscany.sca.node.launcher.NodeLauncher;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Ignore;
+import org.junit.Test;
+import org.junit.Ignore;
+
+import client.Shopper;
+
+
+/**
+ * Test the store-merger.
+ *
+ * @version $Rev$ $Date$
+ */
+public class StoreSupplierTestCase {
+
+ private SCANode domainManager;
+ private SCANode storeSupplierNode;
+ private SCANode storeCatalogsNode;
+ private SCANode storeClientNode;
+
+ @Before
+ public void setup() throws Exception {
+ String baseDir = System.getProperty("basedir");
+ String domainDir = baseDir != null? baseDir + "/" + "../domain" : "../domain";
+
+ DomainManagerLauncher managerLauncher = DomainManagerLauncher.newInstance();
+ domainManager = managerLauncher.createDomainManager(domainDir);
+ domainManager.start();
+
+ /* helpful for debugging
+ try {
+ System.out.println("press enter to continue)");
+ System.in.read();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ */
+
+ NodeLauncher nodeLauncher = NodeLauncher.newInstance();
+ storeSupplierNode = nodeLauncher.createNodeFromURL("http://localhost:9990/node-config/StoreSupplierNode");
+ storeSupplierNode.start();
+
+ storeCatalogsNode = nodeLauncher.createNodeFromURL("http://localhost:9990/node-config/CatalogsNode");
+ storeCatalogsNode.start();
+
+ storeClientNode = nodeLauncher.createNodeFromURL("http://localhost:9990/node-config/StoreClientNode");
+ storeClientNode.start();
+
+ }
+
+ @After
+ public void tearDown() throws Exception {
+ storeSupplierNode.stop();
+ storeCatalogsNode.stop();
+ storeClientNode.stop();
+ domainManager.stop();
+ }
+
+
+ @Test
+ @Ignore
+ public void testWaitForInput() {
+ try {
+ System.out.println("press enter to continue)");
+ System.in.read();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+
+ @Test
+ public void testShop() {
+ SCAClient client = (SCAClient)storeClientNode;
+ Shopper shopper = client.getService(Shopper.class, "StoreClient");
+
+ String total = shopper.shop("Orange", 5);
+ System.out.println("Total: " + total);
+
+ Assert.assertEquals("$17.75", total);
+
+ }
+
+}
diff --git a/branches/sca-java-1.5.2/tutorials/store/store/META-INF/sca-contribution.xml b/branches/sca-java-1.5.2/tutorials/store/store/META-INF/sca-contribution.xml
new file mode 100644
index 0000000000..3ed6e4a4ef
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/store/META-INF/sca-contribution.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<contribution xmlns="http://www.osoa.org/xmlns/sca/1.0"
+ xmlns:s="http://store">
+ <import.java package="services"/>
+ <import.resource uri="uiservices/store.html"/>
+ <deployable composite="s:store"/>
+</contribution> \ No newline at end of file
diff --git a/branches/sca-java-1.5.2/tutorials/store/store/pom.xml b/branches/sca-java-1.5.2/tutorials/store/store/pom.xml
new file mode 100644
index 0000000000..07d5e5f29a
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/store/pom.xml
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-tutorial-store</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ <relativePath>../pom.xml</relativePath>
+ </parent>
+ <artifactId>tutorial-store</artifactId>
+ <name>Apache Tuscany SCA Store Tutorial Online Store</name>
+
+ <repositories>
+ <repository>
+ <id>apache.incubator</id>
+ <url>http://people.apache.org/repo/m2-incubating-repository</url>
+ </repository>
+ </repositories>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-sca-api</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <finalName>${artifactId}</finalName>
+ <sourceDirectory>${basedir}</sourceDirectory>
+ <resources>
+ <resource>
+ <directory>${basedir}</directory>
+ <excludes>
+ <exclude>**/*.java</exclude>
+ <exclude>**/.*/**</exclude>
+ <exclude>pom.xml</exclude>
+ <exclude>build.xml</exclude>
+ <exclude>target/**</exclude>
+ </excludes>
+ </resource>
+ </resources>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-maven-ant-generator</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ <executions>
+ <execution>
+ <configuration>
+ <pathToRootDir>../../..</pathToRootDir>
+ </configuration>
+ <goals>
+ <goal>generate</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+
+</project>
diff --git a/branches/sca-java-1.5.2/tutorials/store/store/store.composite b/branches/sca-java-1.5.2/tutorials/store/store/store.composite
new file mode 100644
index 0000000000..b3f3140c8c
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/store/store.composite
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
+ xmlns:t="http://tuscany.apache.org/xmlns/sca/1.0"
+ targetNamespace="http://store"
+ name="store">
+
+ <component name="Store">
+ <t:implementation.widget location="uiservices/store.html"/>
+ <service name="Widget">
+ <t:binding.http uri="/ui"/>
+ </service>
+ <reference name="catalog" target="StoreCatalog">
+ <t:binding.jsonrpc/>
+ </reference>
+ <reference name="shoppingCart" target="StoreShoppingCart/Cart">
+ <t:binding.atom/>
+ </reference>
+ <reference name="shoppingTotal" target="StoreShoppingCart/Total">
+ <t:binding.jsonrpc/>
+ </reference>
+ </component>
+
+ <component name="StoreCatalog">
+ <implementation.java class="services.FruitsCatalogImpl"/>
+ <property name="currencyCode">USD</property>
+ <service name="Catalog">
+ <t:binding.jsonrpc/>
+ </service>
+ <reference name="currencyConverter" target="StoreCurrencyConverter"/>
+ </component>
+
+ <component name="StoreShoppingCart">
+ <implementation.java class="services.ShoppingCartImpl"/>
+ <service name="Cart">
+ <t:binding.atom uri="/ShoppingCart/Cart"/>
+ </service>
+ <service name="Total">
+ <t:binding.jsonrpc/>
+ </service>
+ </component>
+
+ <component name="StoreCurrencyConverter">
+ <implementation.java class="services.CurrencyConverterImpl"/>
+ </component>
+
+</composite>
diff --git a/branches/sca-java-1.5.2/tutorials/store/warehouse-spring/META-INF/sca-contribution.xml b/branches/sca-java-1.5.2/tutorials/store/warehouse-spring/META-INF/sca-contribution.xml
new file mode 100644
index 0000000000..99863d56cc
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/warehouse-spring/META-INF/sca-contribution.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<contribution xmlns="http://www.osoa.org/xmlns/sca/1.0"
+ xmlns:s="http://store">
+ <import.java package="services" />
+ <deployable composite="s:warehouse" />
+</contribution> \ No newline at end of file
diff --git a/branches/sca-java-1.5.2/tutorials/store/warehouse-spring/build.xml b/branches/sca-java-1.5.2/tutorials/store/warehouse-spring/build.xml
new file mode 100644
index 0000000000..d1148b41b3
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/warehouse-spring/build.xml
@@ -0,0 +1,75 @@
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+
+<project name="tutorial-warehouse-spring" default="compile">
+
+ <target name="compile">
+ <mkdir dir="target/classes"/>
+ <javac destdir="target/classes" debug="on" source="1.5" target="1.5">
+ <src path="."/>
+ <classpath>
+ <fileset refid="tuscany.jars"/>
+ <fileset refid="3rdparty.jars"/>
+ </classpath>
+ </javac>
+ <copy todir="target/classes">
+ <fileset dir="." excludes="**/*.java, pom.xml, build.xml, target"/>
+ </copy>
+ <jar destfile="target/tutorial-warehouse-spring.jar" basedir="target/classes">
+ <manifest>
+ </manifest>
+ </jar>
+ </target>
+
+ <target name="package" depends="compile"/>
+
+ <target name="clean">
+ <delete includeemptydirs="true">
+ <fileset dir="target"/>
+ </delete>
+ </target>
+
+ <fileset id="tuscany.jars" dir="../../../modules">
+ <include name="tuscany-assembly-1.5.1-SNAPSHOT.jar"/>
+ <include name="tuscany-assembly-xml-1.5.1-SNAPSHOT.jar"/>
+ <include name="tuscany-binding-jms-1.5.1-SNAPSHOT.jar"/>
+ <include name="tuscany-contribution-1.5.1-SNAPSHOT.jar"/>
+ <include name="tuscany-contribution-java-1.5.1-SNAPSHOT.jar"/>
+ <include name="tuscany-contribution-namespace-1.5.1-SNAPSHOT.jar"/>
+ <include name="tuscany-core-spi-1.5.1-SNAPSHOT.jar"/>
+ <include name="tuscany-data-api-1.5.1-SNAPSHOT.jar"/>
+ <include name="tuscany-definitions-1.5.1-SNAPSHOT.jar"/>
+ <include name="tuscany-extensibility-1.5.1-SNAPSHOT.jar"/>
+ <include name="tuscany-implementation-java-1.5.1-SNAPSHOT.jar"/>
+ <include name="tuscany-interface-1.5.1-SNAPSHOT.jar"/>
+ <include name="tuscany-interface-java-1.5.1-SNAPSHOT.jar"/>
+ <include name="tuscany-monitor-1.5.1-SNAPSHOT.jar"/>
+ <include name="tuscany-policy-1.5.1-SNAPSHOT.jar"/>
+ <include name="tuscany-sca-api-1.5.1-SNAPSHOT.jar"/>
+ <include name="tuscany-sca-api-extension-1.5.1-SNAPSHOT.jar"/>
+ <include name="tutorial-assets-1.5.1-SNAPSHOT.jar"/>
+ </fileset>
+ <fileset id="3rdparty.jars" dir="../../../lib">
+ <include name="derby-10.3.1.4.jar"/>
+ <include name="jsr181-api-1.0-MR1.jar"/>
+ <include name="stax-api-1.0-2.jar"/>
+ <include name="wstx-asl-3.2.4.jar"/>
+ </fileset>
+
+</project>
diff --git a/branches/sca-java-1.5.2/tutorials/store/warehouse-spring/pom.xml b/branches/sca-java-1.5.2/tutorials/store/warehouse-spring/pom.xml
new file mode 100644
index 0000000000..bf6f790335
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/warehouse-spring/pom.xml
@@ -0,0 +1,98 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-tutorial-store</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ <relativePath>../pom.xml</relativePath>
+ </parent>
+ <artifactId>tutorial-warehouse-spring</artifactId>
+ <name>Apache Tuscany SCA Store Tutorial Warehouse Spring</name>
+
+ <repositories>
+ <repository>
+ <id>apache.incubator</id>
+ <url>http://people.apache.org/repo/m2-incubating-repository</url>
+ </repository>
+ </repositories>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-sca-api</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-implementation-java</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-binding-jms</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tutorial-assets</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <finalName>${artifactId}</finalName>
+ <sourceDirectory>${basedir}</sourceDirectory>
+ <resources>
+ <resource>
+ <directory>${basedir}</directory>
+ <excludes>
+ <exclude>**/*.java</exclude>
+ <exclude>**/.*/**</exclude>
+ <exclude>pom.xml</exclude>
+ <exclude>build.xml</exclude>
+ <exclude>target/**</exclude>
+ </excludes>
+ </resource>
+ </resources>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-maven-ant-generator</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ <executions>
+ <execution>
+ <configuration>
+ <pathToRootDir>../../..</pathToRootDir>
+ </configuration>
+ <goals>
+ <goal>generate</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+
+</project>
diff --git a/branches/sca-java-1.5.2/tutorials/store/warehouse-spring/services/WarehouseImpl.java b/branches/sca-java-1.5.2/tutorials/store/warehouse-spring/services/WarehouseImpl.java
new file mode 100644
index 0000000000..d14def1e8e
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/warehouse-spring/services/WarehouseImpl.java
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package services;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.osoa.sca.annotations.Scope;
+
+@Scope("COMPOSITE")
+public class WarehouseImpl implements Warehouse {
+
+ private List<Order> orders = new ArrayList<Order>();
+
+ public void addOrder(Order order) {
+ System.out.println("Received order: " + order.toString());
+ orders.add(order);
+ }
+
+ public Order[] getOrders() {
+ return orders.toArray(new Order[orders.size()]);
+ }
+}
diff --git a/branches/sca-java-1.5.2/tutorials/store/warehouse-spring/uiservices/warehouse.html b/branches/sca-java-1.5.2/tutorials/store/warehouse-spring/uiservices/warehouse.html
new file mode 100644
index 0000000000..b215f9a3cd
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/warehouse-spring/uiservices/warehouse.html
@@ -0,0 +1,76 @@
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<html>
+<head>
+<title>Warehouse</title>
+
+<script type="text/javascript" src="warehouse.js"></script>
+
+<script language="JavaScript">
+
+ //@Reference
+ var warehouse = new tuscany.sca.Reference("warehouse");
+
+ function getOrders() {
+ warehouse.getOrders(warehouse_getOrdersResponse);
+ }
+
+ function warehouse_getOrdersResponse(orders,exception) {
+ if(exception){
+ alert(exception.message);
+ return;
+ }
+
+ var orderHTML = "";
+ for (var i=0; i<orders.length; i++) {
+ var order = orders[i];
+ var items = order.items;
+ orderHTML += "Order</br>";
+ for (var j=0; j<items.length; j++) {
+ var item = items[j].name + ' - ' + items[j].price;
+ orderHTML += " " + item + "<br/>";
+ }
+ }
+ document.getElementById('orders').innerHTML=orderHTML;
+ }
+
+ function init() {
+ try {
+ getOrders();
+ }
+ catch(e) {
+ alert(e);
+ }
+ }
+
+</script>
+
+</head>
+
+<body onload="init()">
+<h1>Pending Orders</h1>
+ <div id="warehouse">
+ <form name="ordersForm">
+ <div id="orders" ></div>
+ <br>
+ <input type="button" onClick="getOrders()" value="Refresh">
+ </form>
+ </div>
+</body>
+</html>
diff --git a/branches/sca-java-1.5.2/tutorials/store/warehouse-spring/warehouse-context.xml b/branches/sca-java-1.5.2/tutorials/store/warehouse-spring/warehouse-context.xml
new file mode 100644
index 0000000000..ed718d1403
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/warehouse-spring/warehouse-context.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:sca="http://www.springframework.org/schema/sca"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans
+ http://www.springframework.org/schema/beans/spring-beans.xsd">
+
+ <bean id="warehouse" class="services.WarehouseImpl">
+ </bean>
+
+</beans>
diff --git a/branches/sca-java-1.5.2/tutorials/store/warehouse-spring/warehouse-spring.composite b/branches/sca-java-1.5.2/tutorials/store/warehouse-spring/warehouse-spring.composite
new file mode 100644
index 0000000000..bfe789542d
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/warehouse-spring/warehouse-spring.composite
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
+ xmlns:t="http://tuscany.apache.org/xmlns/sca/1.0"
+ targetNamespace="http://store"
+ name="warehouse">
+
+ <component name="WarehouseUI">
+ <t:implementation.widget location="uiservices/warehouse.html"/>
+ <service name="Widget">
+ <t:binding.http uri="http://localhost:8088/ui"/>
+ </service>
+ <reference name="warehouse">
+ <t:binding.jsonrpc uri="http://localhost:8088/Warehouse"/>
+ </reference>
+ </component>
+
+ <component name="Warehouse">
+ <implementation.spring location="warehouse-context.xml"/>
+ <service name="Warehouse">
+ <t:binding.jsonrpc uri="http://localhost:8088/Warehouse"/>
+ <binding.jms initialContextFactory="org.apache.activemq.jndi.ActiveMQInitialContextFactory"
+ jndiURL="tcp://localhost:61619">
+ <destination name="RequestQueue" create="ifnotexist"/>
+ <response>
+ <destination name="ResponseQueue" create="ifnotexist"/>
+ </response>
+ </binding.jms>
+ </service>
+ </component>
+
+</composite>
diff --git a/branches/sca-java-1.5.2/tutorials/store/web-services/META-INF/sca-contribution.xml b/branches/sca-java-1.5.2/tutorials/store/web-services/META-INF/sca-contribution.xml
new file mode 100644
index 0000000000..10fbe6c448
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/web-services/META-INF/sca-contribution.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<contribution xmlns="http://www.osoa.org/xmlns/sca/1.0"
+ xmlns:c="http://services">
+ <import.java package="services"/>
+ <deployable composite="c:catalogs"/>
+ <deployable composite="c:currency"/>
+</contribution> \ No newline at end of file
diff --git a/branches/sca-java-1.5.2/tutorials/store/web-services/catalogs.composite b/branches/sca-java-1.5.2/tutorials/store/web-services/catalogs.composite
new file mode 100644
index 0000000000..154d475165
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/web-services/catalogs.composite
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
+ xmlns:t="http://tuscany.apache.org/xmlns/sca/1.0"
+ targetNamespace="http://services"
+ name="catalogs">
+
+ <component name="FruitsCatalogWebService">
+ <implementation.java class="services.FruitsCatalogImpl"/>
+ <service name="Catalog">
+ <binding.ws/>
+ </service>
+ <property name="currencyCode">USD</property>
+ <reference name="currencyConverter" target="CurrencyConverterWebService">
+ <binding.ws/>
+ </reference>
+ </component>
+
+ <component name="VegetablesCatalogWebService">
+ <implementation.java class="services.VegetablesCatalogImpl"/>
+ <service name="Catalog">
+ <binding.ws/>
+ </service>
+ </component>
+
+</composite>
diff --git a/branches/sca-java-1.5.2/tutorials/store/web-services/currency.composite b/branches/sca-java-1.5.2/tutorials/store/web-services/currency.composite
new file mode 100644
index 0000000000..7a3f70e299
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/web-services/currency.composite
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
+ xmlns:t="http://tuscany.apache.org/xmlns/sca/1.0"
+ targetNamespace="http://services"
+ name="currency">
+
+ <component name="CurrencyConverterWebService">
+ <implementation.java class="services.CurrencyConverterImpl"/>
+ <service name="CurrencyConverter">
+ <binding.ws/>
+ </service>
+ </component>
+
+</composite>
diff --git a/branches/sca-java-1.5.2/tutorials/store/web-services/pom.xml b/branches/sca-java-1.5.2/tutorials/store/web-services/pom.xml
new file mode 100644
index 0000000000..1e25fe1599
--- /dev/null
+++ b/branches/sca-java-1.5.2/tutorials/store/web-services/pom.xml
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-tutorial-store</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ <relativePath>../pom.xml</relativePath>
+ </parent>
+ <artifactId>tutorial-web-services</artifactId>
+ <name>Apache Tuscany SCA Store Tutorial Web Services</name>
+
+ <repositories>
+ <repository>
+ <id>apache.incubator</id>
+ <url>http://people.apache.org/repo/m2-incubating-repository</url>
+ </repository>
+ </repositories>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-sca-api</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <finalName>${artifactId}</finalName>
+ <sourceDirectory>${basedir}</sourceDirectory>
+ <resources>
+ <resource>
+ <directory>${basedir}</directory>
+ <excludes>
+ <exclude>**/*.java</exclude>
+ <exclude>**/.*/**</exclude>
+ <exclude>pom.xml</exclude>
+ <exclude>build.xml</exclude>
+ <exclude>target/**</exclude>
+ </excludes>
+ </resource>
+ </resources>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-maven-ant-generator</artifactId>
+ <version>1.5.1-SNAPSHOT</version>
+ <executions>
+ <execution>
+ <configuration>
+ <pathToRootDir>../../..</pathToRootDir>
+ </configuration>
+ <goals>
+ <goal>generate</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+
+</project>