summaryrefslogtreecommitdiffstats
path: root/sandbox/lresende/sca-1.x
diff options
context:
space:
mode:
authorlresende <lresende@13f79535-47bb-0310-9956-ffa450edef68>2010-01-13 02:16:12 +0000
committerlresende <lresende@13f79535-47bb-0310-9956-ffa450edef68>2010-01-13 02:16:12 +0000
commit83355a7557cf91c455a65e0ce79ea8dd4d880052 (patch)
tree25fb3c02f2eca9990323a3b9c03bc6028f73fb38 /sandbox/lresende/sca-1.x
parent3e33ce505cf18f5f603f29cf0be4b4fd33053d3d (diff)
Refactoring sandbox structure to accomodate 1.x versus 2.x stuff
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@898623 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'sandbox/lresende/sca-1.x')
-rw-r--r--sandbox/lresende/sca-1.x/demos/customer-map/DISCLAIMER8
-rw-r--r--sandbox/lresende/sca-1.x/demos/customer-map/LICENSE205
-rw-r--r--sandbox/lresende/sca-1.x/demos/customer-map/NOTICE6
-rw-r--r--sandbox/lresende/sca-1.x/demos/customer-map/customer-maps.sql28
-rw-r--r--sandbox/lresende/sca-1.x/demos/customer-map/pom.xml171
-rw-r--r--sandbox/lresende/sca-1.x/demos/customer-map/src/main/java/customer/CustomerService.java35
-rw-r--r--sandbox/lresende/sca-1.x/demos/customer-map/src/main/java/launch/Launch.java34
-rw-r--r--sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/customer-map.composite42
-rw-r--r--sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/customer.componentType31
-rw-r--r--sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/customer.xml27
-rw-r--r--sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/customer.xsd35
-rw-r--r--sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/db.lckbin0 -> 38 bytes
-rw-r--r--sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/log/log.ctrlbin0 -> 48 bytes
-rw-r--r--sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/log/log1.datbin0 -> 1048576 bytes
-rw-r--r--sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/log/logmirror.ctrlbin0 -> 48 bytes
-rw-r--r--sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c10.datbin0 -> 8192 bytes
-rw-r--r--sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c101.datbin0 -> 8192 bytes
-rw-r--r--sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c111.datbin0 -> 8192 bytes
-rw-r--r--sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c121.datbin0 -> 8192 bytes
-rw-r--r--sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c130.datbin0 -> 8192 bytes
-rw-r--r--sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c141.datbin0 -> 8192 bytes
-rw-r--r--sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c150.datbin0 -> 16384 bytes
-rw-r--r--sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c161.datbin0 -> 16384 bytes
-rw-r--r--sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c171.datbin0 -> 16384 bytes
-rw-r--r--sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c180.datbin0 -> 24576 bytes
-rw-r--r--sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c191.datbin0 -> 8192 bytes
-rw-r--r--sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c1a1.datbin0 -> 8192 bytes
-rw-r--r--sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c1b1.datbin0 -> 8192 bytes
-rw-r--r--sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c1c0.datbin0 -> 8192 bytes
-rw-r--r--sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c1d1.datbin0 -> 8192 bytes
-rw-r--r--sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c1e0.datbin0 -> 8192 bytes
-rw-r--r--sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c1f1.datbin0 -> 8192 bytes
-rw-r--r--sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c20.datbin0 -> 20480 bytes
-rw-r--r--sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c200.datbin0 -> 8192 bytes
-rw-r--r--sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c211.datbin0 -> 8192 bytes
-rw-r--r--sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c221.datbin0 -> 8192 bytes
-rw-r--r--sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c230.datbin0 -> 274432 bytes
-rw-r--r--sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c241.datbin0 -> 8192 bytes
-rw-r--r--sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c251.datbin0 -> 12288 bytes
-rw-r--r--sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c260.datbin0 -> 8192 bytes
-rw-r--r--sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c271.datbin0 -> 8192 bytes
-rw-r--r--sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c281.datbin0 -> 8192 bytes
-rw-r--r--sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c290.datbin0 -> 8192 bytes
-rw-r--r--sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c2a1.datbin0 -> 8192 bytes
-rw-r--r--sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c2b1.datbin0 -> 8192 bytes
-rw-r--r--sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c2c1.datbin0 -> 8192 bytes
-rw-r--r--sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c2d0.datbin0 -> 8192 bytes
-rw-r--r--sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c2e1.datbin0 -> 8192 bytes
-rw-r--r--sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c2f0.datbin0 -> 8192 bytes
-rw-r--r--sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c300.datbin0 -> 8192 bytes
-rw-r--r--sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c31.datbin0 -> 8192 bytes
-rw-r--r--sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c311.datbin0 -> 8192 bytes
-rw-r--r--sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c41.datbin0 -> 8192 bytes
-rw-r--r--sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c51.datbin0 -> 8192 bytes
-rw-r--r--sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c60.datbin0 -> 8192 bytes
-rw-r--r--sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c71.datbin0 -> 8192 bytes
-rw-r--r--sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c81.datbin0 -> 8192 bytes
-rw-r--r--sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c90.datbin0 -> 24576 bytes
-rw-r--r--sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/ca1.datbin0 -> 20480 bytes
-rw-r--r--sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/cb1.datbin0 -> 8192 bytes
-rw-r--r--sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/cc0.datbin0 -> 8192 bytes
-rw-r--r--sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/cd1.datbin0 -> 8192 bytes
-rw-r--r--sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/ce1.datbin0 -> 8192 bytes
-rw-r--r--sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/cf0.datbin0 -> 8192 bytes
-rw-r--r--sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/service.properties22
-rw-r--r--sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/html/binding-atom.js92
-rw-r--r--sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/html/binding-jsonrpc.js494
-rw-r--r--sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/html/index-plain.html76
-rw-r--r--sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/html/index.html55
-rw-r--r--sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/html/map.json27
-rw-r--r--sandbox/lresende/sca-1.x/demos/customer-map/src/test/java/customer/CustomerServiceTestCase.java60
-rw-r--r--sandbox/lresende/sca-1.x/demos/customer-map/src/test/resources/customer.componentType29
-rw-r--r--sandbox/lresende/sca-1.x/demos/customer-map/src/test/resources/customer.composite35
-rw-r--r--sandbox/lresende/sca-1.x/demos/customer-map/src/test/resources/customer.xml27
-rw-r--r--sandbox/lresende/sca-1.x/modules/implementation-data-pojo/DISCLAIMER8
-rw-r--r--sandbox/lresende/sca-1.x/modules/implementation-data-pojo/LICENSE205
-rw-r--r--sandbox/lresende/sca-1.x/modules/implementation-data-pojo/NOTICE6
-rw-r--r--sandbox/lresende/sca-1.x/modules/implementation-data-pojo/README33
-rw-r--r--sandbox/lresende/sca-1.x/modules/implementation-data-pojo/company.sql28
-rw-r--r--sandbox/lresende/sca-1.x/modules/implementation-data-pojo/pom.xml174
-rw-r--r--sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/main/java/org/apache/tuscany/sca/implementation/openjpa/JPAImplementation.java36
-rw-r--r--sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/main/java/org/apache/tuscany/sca/implementation/openjpa/JPAImplementationFactory.java24
-rw-r--r--sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/main/java/org/apache/tuscany/sca/implementation/openjpa/JPAImplementationProcessor.java99
-rw-r--r--sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/main/java/org/apache/tuscany/sca/implementation/openjpa/PersistenceUnitInfoImplProcessor.java109
-rw-r--r--sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/main/java/org/apache/tuscany/sca/implementation/openjpa/TuscanyBrokerFactory.java100
-rw-r--r--sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/main/java/org/apache/tuscany/sca/implementation/openjpa/TuscanyBrokerImpl.java37
-rw-r--r--sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/main/java/org/apache/tuscany/sca/implementation/openjpa/TuscanyJDBCConfigurationImpl.java58
-rw-r--r--sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/main/java/org/apache/tuscany/sca/implementation/openjpa/TuscanyManagerRuntime.java51
-rw-r--r--sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/main/java/org/apache/tuscany/sca/implementation/openjpa/TuscanyStoreManager.java49
-rw-r--r--sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/main/java/org/apache/tuscany/sca/implementation/openjpa/impl/JPAImplementationFactoryImpl.java39
-rw-r--r--sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/main/java/org/apache/tuscany/sca/implementation/openjpa/impl/JPAImplementationImpl.java119
-rw-r--r--sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/main/java/org/apache/tuscany/sca/implementation/openjpa/provider/JPAImplementationProvider.java96
-rw-r--r--sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/main/java/org/apache/tuscany/sca/implementation/openjpa/provider/JPAImplementationProviderFactory.java44
-rw-r--r--sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/main/java/org/apache/tuscany/sca/implementation/openjpa/provider/JPAInvoker.java63
-rw-r--r--sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor19
-rw-r--r--sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/main/resources/META-INF/services/org.apache.tuscany.sca.implementation.openjpa.OpenJpaImplementationFactory18
-rw-r--r--sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/main/resources/META-INF/services/org.apache.tuscany.sca.provider.ImplementationProviderFactory19
-rw-r--r--sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/test/java/company/Company.java47
-rw-r--r--sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/test/java/company/CompanyCollection.java25
-rw-r--r--sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/test/java/company/CompanyCollectionImpl.java100
-rw-r--r--sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/test/java/org/apache/tuscany/sca/implementation/openjpa/CompanyCollectionTestCase.java44
-rw-r--r--sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/test/java/org/apache/tuscany/sca/implementation/openjpa/CompanyTestCase.java80
-rw-r--r--sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/test/resources/META-INF/orm.xml36
-rw-r--r--sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/test/resources/META-INF/persistence.xml40
-rwxr-xr-xsandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/test/resources/company.composite47
-rw-r--r--sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/README118
-rw-r--r--sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/build.xml137
-rw-r--r--sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/calculator-web.pngbin0 -> 22916 bytes
-rw-r--r--sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/calculator-web.svg358
-rw-r--r--sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/pom.xml77
-rw-r--r--sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/src/main/java/beans/Calculator.java78
-rw-r--r--sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/src/main/java/calculator/AddService.java28
-rw-r--r--sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/src/main/java/calculator/AddServiceImpl.java30
-rw-r--r--sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/src/main/java/calculator/CalculatorClient.java47
-rw-r--r--sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/src/main/java/calculator/CalculatorService.java35
-rw-r--r--sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/src/main/java/calculator/CalculatorServiceImpl.java69
-rw-r--r--sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/src/main/java/calculator/DivideService.java28
-rw-r--r--sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/src/main/java/calculator/DivideServiceImpl.java30
-rw-r--r--sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/src/main/java/calculator/MultiplyService.java28
-rw-r--r--sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/src/main/java/calculator/MultiplyServiceImpl.java30
-rw-r--r--sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/src/main/java/calculator/SubtractService.java28
-rw-r--r--sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/src/main/java/calculator/SubtractServiceImpl.java30
-rw-r--r--sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/src/main/resources/Calculator.composite49
-rw-r--r--sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/src/main/resources/wsdl/add.wsdl87
-rw-r--r--sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/src/main/webapp/META-INF/sca-contribution.xml24
-rw-r--r--sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/src/main/webapp/WEB-INF/faces-config.xml14
-rw-r--r--sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/src/main/webapp/WEB-INF/web.xml59
-rw-r--r--sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/src/main/webapp/calc.jsp50
-rw-r--r--sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/src/main/webapp/calc_jsf.jsp27
-rw-r--r--sandbox/lresende/sca-1.x/samples/expertise-atom/pom.xml96
-rw-r--r--sandbox/lresende/sca-1.x/samples/expertise-atom/src/main/java/org/apache/tuscany/expertise/Expert.java67
-rw-r--r--sandbox/lresende/sca-1.x/samples/expertise-atom/src/main/java/org/apache/tuscany/expertise/atom/AtomExpertiseLocator.java130
-rw-r--r--sandbox/lresende/sca-1.x/samples/expertise-atom/src/main/java/org/apache/tuscany/expertise/atom/ExpertiseLocator.java29
-rw-r--r--sandbox/lresende/sca-1.x/samples/expertise-atom/src/main/java/org/apache/tuscany/expertise/launch/Launch.java34
-rw-r--r--sandbox/lresende/sca-1.x/samples/expertise-atom/src/main/resources/META-INF/sca-contribution.xml25
-rw-r--r--sandbox/lresende/sca-1.x/samples/expertise-atom/src/main/resources/atom.composite36
-rw-r--r--sandbox/lresende/sca-1.x/samples/expertise-atom/src/main/resources/atom.composite_diagram71
-rw-r--r--sandbox/lresende/sca-1.x/samples/expertise-atom/src/main/resources/expertLocator.html110
-rw-r--r--sandbox/lresende/sca-1.x/samples/expertise-restfull/pom.xml82
-rw-r--r--sandbox/lresende/sca-1.x/samples/expertise-restfull/src/main/java/org/apache/tuscany/expertise/Expert.java64
-rw-r--r--sandbox/lresende/sca-1.x/samples/expertise-restfull/src/main/java/org/apache/tuscany/expertise/launch/Launch.java34
-rw-r--r--sandbox/lresende/sca-1.x/samples/expertise-restfull/src/main/java/org/apache/tuscany/expertise/restfull/ExpertRegistry.java37
-rw-r--r--sandbox/lresende/sca-1.x/samples/expertise-restfull/src/main/java/org/apache/tuscany/expertise/restfull/ExpertRegistryImpl.java92
-rw-r--r--sandbox/lresende/sca-1.x/samples/expertise-restfull/src/main/java/org/apache/tuscany/expertise/restfull/RestfulExpertiseLocator.java100
-rw-r--r--sandbox/lresende/sca-1.x/samples/expertise-restfull/src/main/resources/META-INF/sca-contribution.xml25
-rw-r--r--sandbox/lresende/sca-1.x/samples/expertise-restfull/src/main/resources/rest.composite34
-rw-r--r--sandbox/lresende/sca-1.x/samples/expertise-restfull/src/main/resources/rest.composite_diagram71
-rw-r--r--sandbox/lresende/sca-1.x/samples/pom.xml46
-rw-r--r--sandbox/lresende/sca-1.x/samples/store-distributed/README28
-rw-r--r--sandbox/lresende/sca-1.x/samples/store-distributed/build.xml79
-rw-r--r--sandbox/lresende/sca-1.x/samples/store-distributed/cloud.composite27
-rw-r--r--sandbox/lresende/sca-1.x/samples/store-distributed/domain.composite27
-rw-r--r--sandbox/lresende/sca-1.x/samples/store-distributed/pom.xml109
-rw-r--r--sandbox/lresende/sca-1.x/samples/store-distributed/src/main/java/node/LaunchDomain.java33
-rw-r--r--sandbox/lresende/sca-1.x/samples/store-distributed/src/main/java/node/LaunchStoreNodeA.java28
-rw-r--r--sandbox/lresende/sca-1.x/samples/store-distributed/src/main/java/node/LaunchStoreNodeB.java28
-rw-r--r--sandbox/lresende/sca-1.x/samples/store-distributed/src/main/java/node/LaunchStoreNodeC.java28
-rw-r--r--sandbox/lresende/sca-1.x/samples/store-distributed/src/main/java/services/Cart.java28
-rw-r--r--sandbox/lresende/sca-1.x/samples/store-distributed/src/main/java/services/Catalog.java27
-rw-r--r--sandbox/lresende/sca-1.x/samples/store-distributed/src/main/java/services/CurrencyConverter.java29
-rw-r--r--sandbox/lresende/sca-1.x/samples/store-distributed/src/main/java/services/CurrencyConverterImpl.java38
-rw-r--r--sandbox/lresende/sca-1.x/samples/store-distributed/src/main/java/services/FruitsCatalogImpl.java52
-rw-r--r--sandbox/lresende/sca-1.x/samples/store-distributed/src/main/java/services/Item.java51
-rw-r--r--sandbox/lresende/sca-1.x/samples/store-distributed/src/main/java/services/ShoppingCartImpl.java112
-rw-r--r--sandbox/lresende/sca-1.x/samples/store-distributed/src/main/java/services/Total.java29
-rw-r--r--sandbox/lresende/sca-1.x/samples/store-distributed/src/main/resources/cloud/NodeA.composite36
-rw-r--r--sandbox/lresende/sca-1.x/samples/store-distributed/src/main/resources/cloud/NodeB.composite36
-rw-r--r--sandbox/lresende/sca-1.x/samples/store-distributed/src/main/resources/cloud/NodeC.composite36
-rw-r--r--sandbox/lresende/sca-1.x/samples/store-distributed/src/main/resources/nodeA/META-INF/sca-contribution.xml24
-rw-r--r--sandbox/lresende/sca-1.x/samples/store-distributed/src/main/resources/nodeA/content/store.js510
-rw-r--r--sandbox/lresende/sca-1.x/samples/store-distributed/src/main/resources/nodeA/store.composite46
-rw-r--r--sandbox/lresende/sca-1.x/samples/store-distributed/src/main/resources/nodeB/META-INF/sca-contribution.xml24
-rw-r--r--sandbox/lresende/sca-1.x/samples/store-distributed/src/main/resources/nodeB/content/store.js647
-rw-r--r--sandbox/lresende/sca-1.x/samples/store-distributed/src/main/resources/nodeB/store.composite43
-rw-r--r--sandbox/lresende/sca-1.x/samples/store-distributed/src/main/resources/nodeC/META-INF/sca-contribution.xml24
-rw-r--r--sandbox/lresende/sca-1.x/samples/store-distributed/src/main/resources/nodeC/content/index.js66
-rw-r--r--sandbox/lresende/sca-1.x/samples/store-distributed/src/main/resources/nodeC/content/store.html114
-rw-r--r--sandbox/lresende/sca-1.x/samples/store-distributed/src/main/resources/nodeC/content/store.js39
-rw-r--r--sandbox/lresende/sca-1.x/samples/store-distributed/src/main/resources/nodeC/store.composite50
-rw-r--r--sandbox/lresende/sca-1.x/samples/store-distributed/src/main/resources/nodeC/uiservices/store.html162
-rw-r--r--sandbox/lresende/sca-1.x/samples/store-distributed/src/main/resources/uiservices/store.html162
-rw-r--r--sandbox/lresende/sca-1.x/samples/store-distributed/store.pngbin0 -> 15670 bytes
-rw-r--r--sandbox/lresende/sca-1.x/samples/store-distributed/store.svg304
-rw-r--r--sandbox/lresende/sca-1.x/samples/store-distributed/workspace.xml25
-rw-r--r--sandbox/lresende/sca-1.x/samples/store-jsf/README2
-rw-r--r--sandbox/lresende/sca-1.x/samples/store-jsf/pom.xml64
-rw-r--r--sandbox/lresende/sca-1.x/samples/store-jsf/src/main/java/beans/Catalog.java56
-rw-r--r--sandbox/lresende/sca-1.x/samples/store-jsf/src/main/java/beans/Product.java56
-rw-r--r--sandbox/lresende/sca-1.x/samples/store-jsf/src/main/webapp/WEB-INF/faces-config.xml31
-rw-r--r--sandbox/lresende/sca-1.x/samples/store-jsf/src/main/webapp/WEB-INF/lib/ajax4jsf-1.1.1.jarbin0 -> 1262524 bytes
-rw-r--r--sandbox/lresende/sca-1.x/samples/store-jsf/src/main/webapp/WEB-INF/web.xml31
-rw-r--r--sandbox/lresende/sca-1.x/samples/store-jsf/src/main/webapp/catalog.jsp82
-rw-r--r--sandbox/lresende/sca-1.x/samples/store-secure-webapp/build-dojo.xml62
-rw-r--r--sandbox/lresende/sca-1.x/samples/store-secure-webapp/build.xml119
-rw-r--r--sandbox/lresende/sca-1.x/samples/store-secure-webapp/pom.xml144
-rw-r--r--sandbox/lresende/sca-1.x/samples/store-secure-webapp/src/main/java/services/Catalog.java8
-rw-r--r--sandbox/lresende/sca-1.x/samples/store-secure-webapp/src/main/java/services/CurrencyConverter.java12
-rw-r--r--sandbox/lresende/sca-1.x/samples/store-secure-webapp/src/main/java/services/CurrencyConverterImpl.java21
-rw-r--r--sandbox/lresende/sca-1.x/samples/store-secure-webapp/src/main/java/services/FruitsCatalogImpl.java35
-rw-r--r--sandbox/lresende/sca-1.x/samples/store-secure-webapp/src/main/java/services/Item.java30
-rw-r--r--sandbox/lresende/sca-1.x/samples/store-secure-webapp/src/main/java/store/security/StoreCallbackHandler.java50
-rw-r--r--sandbox/lresende/sca-1.x/samples/store-secure-webapp/src/main/resources/definitions.xml73
-rw-r--r--sandbox/lresende/sca-1.x/samples/store-secure-webapp/src/main/resources/store.composite41
-rw-r--r--sandbox/lresende/sca-1.x/samples/store-secure-webapp/src/main/webapp/META-INF/sca-contribution.xml23
-rw-r--r--sandbox/lresende/sca-1.x/samples/store-secure-webapp/src/main/webapp/WEB-INF/geronimo-web.xml73
-rw-r--r--sandbox/lresende/sca-1.x/samples/store-secure-webapp/src/main/webapp/WEB-INF/web.xml60
-rw-r--r--sandbox/lresende/sca-1.x/samples/store-secure-webapp/src/main/webapp/auth/logon.html20
-rw-r--r--sandbox/lresende/sca-1.x/samples/store-secure-webapp/src/main/webapp/auth/logonError.html5
-rw-r--r--sandbox/lresende/sca-1.x/samples/store-secure-webapp/src/main/webapp/store.html48
209 files changed, 10283 insertions, 0 deletions
diff --git a/sandbox/lresende/sca-1.x/demos/customer-map/DISCLAIMER b/sandbox/lresende/sca-1.x/demos/customer-map/DISCLAIMER
new file mode 100644
index 0000000000..d68a410903
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/demos/customer-map/DISCLAIMER
@@ -0,0 +1,8 @@
+Apache Tuscany is an effort undergoing incubation at The Apache Software
+Foundation (ASF), sponsored by the Apache Web Services PMC. Incubation is
+required of all newly accepted projects until a further review indicates that
+the infrastructure, communications, and decision making process have stabilized
+in a manner consistent with other successful ASF projects. While incubation
+status is not necessarily a reflection of the completeness or stability of the
+code, it does indicate that the project has yet to be fully endorsed by the ASF.
+
diff --git a/sandbox/lresende/sca-1.x/demos/customer-map/LICENSE b/sandbox/lresende/sca-1.x/demos/customer-map/LICENSE
new file mode 100644
index 0000000000..8aa906c321
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/demos/customer-map/LICENSE
@@ -0,0 +1,205 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed 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.
+
+
+
diff --git a/sandbox/lresende/sca-1.x/demos/customer-map/NOTICE b/sandbox/lresende/sca-1.x/demos/customer-map/NOTICE
new file mode 100644
index 0000000000..94481d6cfa
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/demos/customer-map/NOTICE
@@ -0,0 +1,6 @@
+${pom.name}
+Copyright (c) 2005 - 2007 The Apache Software Foundation
+
+This product includes software developed by
+The Apache Software Foundation (http://www.apache.org/).
+
diff --git a/sandbox/lresende/sca-1.x/demos/customer-map/customer-maps.sql b/sandbox/lresende/sca-1.x/demos/customer-map/customer-maps.sql
new file mode 100644
index 0000000000..c57678c5d0
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/demos/customer-map/customer-maps.sql
@@ -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.
+--
+
+DROP TABLE CUSTOMER;
+
+CREATE TABLE CUSTOMER (ID INT PRIMARY KEY NOT NULL GENERATED ALWAYS AS IDENTITY ,
+ NAME VARCHAR(30),
+ ADDRESS VARCHAR(30),
+ CITY VARCHAR(20),
+ STATE VARCHAR(2),
+ LATITUDE VARCHAR(20),
+ LONGITUDE VARCHAR(30) ) \ No newline at end of file
diff --git a/sandbox/lresende/sca-1.x/demos/customer-map/pom.xml b/sandbox/lresende/sca-1.x/demos/customer-map/pom.xml
new file mode 100644
index 0000000000..501cbfec3e
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/demos/customer-map/pom.xml
@@ -0,0 +1,171 @@
+<?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 xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-demos</artifactId>
+ <version>1.2-incubating-SNAPSHOT</version>
+ <relativePath>../pom.xml</relativePath>
+ </parent>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>demo-customer-map</artifactId>
+ <name>Apache Tuscany Customer Map Demo</name>
+ <url>http://cwiki.apache.org/TUSCANY</url>
+
+ <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-host-embedded</artifactId>
+ <version>1.2-incubating-SNAPSHOT</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-implementation-java-runtime</artifactId>
+ <version>1.2-incubating-SNAPSHOT</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-implementation-resource</artifactId>
+ <version>1.2-incubating-SNAPSHOT</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-binding-feed</artifactId>
+ <version>1.2-incubating-SNAPSHOT</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-binding-jsonrpc</artifactId>
+ <version>1.2-incubating-SNAPSHOT</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-binding-http</artifactId>
+ <version>1.2-incubating-SNAPSHOT</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-host-jetty</artifactId>
+ <version>1.2-incubating-SNAPSHOT</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-databinding</artifactId>
+ <version>1.2-incubating-SNAPSHOT</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-databinding-json</artifactId>
+ <version>1.2-incubating-SNAPSHOT</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-databinding-sdo</artifactId>
+ <version>1.2-incubating-SNAPSHOT</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <!-- DAS Related dependencies -->
+ <dependency>
+ <groupId>org.apache.tuscany.sdo</groupId>
+ <artifactId>tuscany-sdo-impl</artifactId>
+ <version>1.0-incubating-SNAPSHOT</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-implementation-das</artifactId>
+ <version>1.1-incubating-SNAPSHOT</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.derby</groupId>
+ <artifactId>derby</artifactId>
+ <version>10.1.2.1</version>
+ </dependency>
+
+ <!-- Test dependencies -->
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>3.8.1</version>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>httpunit</groupId>
+ <artifactId>httpunit</artifactId>
+ <version>1.6.1</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <finalName>demo-customer-map</finalName>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.tuscany.sdo</groupId>
+ <artifactId>tuscany-sdo-plugin</artifactId>
+ <version>1.0-incubating-SNAPSHOT</version>
+ <executions>
+ <execution>
+ <id>customer</id>
+ <configuration>
+ <schemaFile>${basedir}/src/main/resources/customer.xsd
+ </schemaFile>
+ <noUnsettable>true</noUnsettable>
+ </configuration>
+ <goals>
+ <goal>generate</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project> \ No newline at end of file
diff --git a/sandbox/lresende/sca-1.x/demos/customer-map/src/main/java/customer/CustomerService.java b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/java/customer/CustomerService.java
new file mode 100644
index 0000000000..5a99f0bc77
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/java/customer/CustomerService.java
@@ -0,0 +1,35 @@
+/*
+ * 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 customer;
+
+import org.osoa.sca.annotations.Remotable;
+
+import commonj.sdo.DataObject;
+
+/**
+ *
+ * @version $Rev$ $Date$
+ */
+@Remotable
+public interface CustomerService {
+
+ public DataObject getCustomers();
+
+}
diff --git a/sandbox/lresende/sca-1.x/demos/customer-map/src/main/java/launch/Launch.java b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/java/launch/Launch.java
new file mode 100644
index 0000000000..2bbb40c6a5
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/java/launch/Launch.java
@@ -0,0 +1,34 @@
+/*
+ * 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.host.embedded.SCADomain;
+
+public class Launch {
+ public static void main(String[] args) throws Exception {
+ System.out.println("Starting ...");
+ SCADomain scaDomain = SCADomain.newInstance("customer-map.composite");
+ System.out.println("customer-map.composite ready for big business !!!");
+ System.in.read();
+ System.out.println("Stopping ...");
+ scaDomain.close();
+ System.out.println();
+ }
+}
diff --git a/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/customer-map.composite b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/customer-map.composite
new file mode 100644
index 0000000000..f7c979687d
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/customer-map.composite
@@ -0,0 +1,42 @@
+<?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:tuscany="http://tuscany.apache.org/xmlns/sca/1.0"
+ targetNamespace="http://demo/customer-map"
+ name="customer">
+
+ <component name="customer-map">
+ <tuscany:implementation.resource location="html"/>
+ <service name="Resource">
+ <tuscany:binding.http uri="http://localhost:8080/customer-map"/>
+ </service>
+ </component>
+
+ <component name="CustomerServiceComponent">
+ <tuscany:implementation.das config="customer.xml" dataAccessType="rdb">
+ <tuscany:connectionInfo>
+ <tuscany:connectionProperties
+ driverClass="org.apache.derby.jdbc.EmbeddedDriver"
+ databaseURL="jdbc:derby:target/classes/dastest; create = true"
+ loginTimeout="600000" />
+ </tuscany:connectionInfo>
+ </tuscany:implementation.das>
+ </component>
+</composite> \ No newline at end of file
diff --git a/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/customer.componentType b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/customer.componentType
new file mode 100644
index 0000000000..bf56a3f4e9
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/customer.componentType
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+ * 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"
+ xmlns:tuscany="http://tuscany.apache.org/xmlns/sca/1.0"
+ xmlns:wsdli="http://www.w3.org/2006/01/wsdl-instance"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+
+ <service name="CustomerService">
+ <interface.java interface="customer.CustomerService"/>
+ <tuscany:binding.jsonrpc/>
+ </service>
+
+</componentType> \ No newline at end of file
diff --git a/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/customer.xml b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/customer.xml
new file mode 100644
index 0000000000..17d5da9cd6
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/customer.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.
+ -->
+<Config xmlns="http:///org.apache.tuscany.das.rdb/config.xsd">
+
+ <Command name="getCustomers" SQL="select * from CUSTOMER" kind="Select"/>
+
+ <Table tableName="CUSTOMER" typeName="Customer">
+ <Column columnName="ID" primaryKey="true" generated="true"/>
+ </Table>
+</Config>
diff --git a/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/customer.xsd b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/customer.xsd
new file mode 100644
index 0000000000..f00d0ec56a
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/customer.xsd
@@ -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.
+ -->
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:this="http:///org.apache.tuscany.das.rdb.test/customer.xsd"
+ targetNamespace="http:///org.apache.tuscany.das.rdb.test/customer.xsd">
+
+ <xsd:complexType name="Customer">
+ <xsd:sequence>
+ <xsd:element name="ID" nillable="false" type="xsd:int"/>
+ <xsd:element name="name" type="xsd:string"/>
+ <xsd:element name="address" type="xsd:string"/>
+ <xsd:element name="city" type="xsd:string"/>
+ <xsd:element name="state" type="xsd:string"/>
+ <xsd:element name="latitude" type="xsd:string"/>
+ <xsd:element name="longitude" type="xsd:string"/>
+ </xsd:sequence>
+ </xsd:complexType>
+</xsd:schema>
diff --git a/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/db.lck b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/db.lck
new file mode 100644
index 0000000000..6b9b2452e0
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/db.lck
Binary files differ
diff --git a/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/log/log.ctrl b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/log/log.ctrl
new file mode 100644
index 0000000000..4238225f1f
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/log/log.ctrl
Binary files differ
diff --git a/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/log/log1.dat b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/log/log1.dat
new file mode 100644
index 0000000000..e9eb981c16
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/log/log1.dat
Binary files differ
diff --git a/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/log/logmirror.ctrl b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/log/logmirror.ctrl
new file mode 100644
index 0000000000..4238225f1f
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/log/logmirror.ctrl
Binary files differ
diff --git a/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c10.dat b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c10.dat
new file mode 100644
index 0000000000..27e2ac866e
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c10.dat
Binary files differ
diff --git a/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c101.dat b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c101.dat
new file mode 100644
index 0000000000..fc4340b2e7
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c101.dat
Binary files differ
diff --git a/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c111.dat b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c111.dat
new file mode 100644
index 0000000000..750dffff3f
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c111.dat
Binary files differ
diff --git a/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c121.dat b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c121.dat
new file mode 100644
index 0000000000..0d0b53b30e
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c121.dat
Binary files differ
diff --git a/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c130.dat b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c130.dat
new file mode 100644
index 0000000000..65f1689e47
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c130.dat
Binary files differ
diff --git a/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c141.dat b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c141.dat
new file mode 100644
index 0000000000..5b509fb668
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c141.dat
Binary files differ
diff --git a/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c150.dat b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c150.dat
new file mode 100644
index 0000000000..d985c31be4
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c150.dat
Binary files differ
diff --git a/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c161.dat b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c161.dat
new file mode 100644
index 0000000000..d3af4852f2
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c161.dat
Binary files differ
diff --git a/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c171.dat b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c171.dat
new file mode 100644
index 0000000000..731d9e87fb
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c171.dat
Binary files differ
diff --git a/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c180.dat b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c180.dat
new file mode 100644
index 0000000000..82298723d7
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c180.dat
Binary files differ
diff --git a/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c191.dat b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c191.dat
new file mode 100644
index 0000000000..b2d149a0f3
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c191.dat
Binary files differ
diff --git a/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c1a1.dat b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c1a1.dat
new file mode 100644
index 0000000000..5001ad3d63
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c1a1.dat
Binary files differ
diff --git a/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c1b1.dat b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c1b1.dat
new file mode 100644
index 0000000000..b3a539d635
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c1b1.dat
Binary files differ
diff --git a/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c1c0.dat b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c1c0.dat
new file mode 100644
index 0000000000..359525a31a
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c1c0.dat
Binary files differ
diff --git a/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c1d1.dat b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c1d1.dat
new file mode 100644
index 0000000000..9f257df932
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c1d1.dat
Binary files differ
diff --git a/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c1e0.dat b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c1e0.dat
new file mode 100644
index 0000000000..e43e52fb7f
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c1e0.dat
Binary files differ
diff --git a/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c1f1.dat b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c1f1.dat
new file mode 100644
index 0000000000..7e6ee3b1e0
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c1f1.dat
Binary files differ
diff --git a/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c20.dat b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c20.dat
new file mode 100644
index 0000000000..2b9a6b96d4
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c20.dat
Binary files differ
diff --git a/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c200.dat b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c200.dat
new file mode 100644
index 0000000000..cae919d022
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c200.dat
Binary files differ
diff --git a/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c211.dat b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c211.dat
new file mode 100644
index 0000000000..c7e311b00e
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c211.dat
Binary files differ
diff --git a/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c221.dat b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c221.dat
new file mode 100644
index 0000000000..28e89367ce
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c221.dat
Binary files differ
diff --git a/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c230.dat b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c230.dat
new file mode 100644
index 0000000000..c8aca2ee6f
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c230.dat
Binary files differ
diff --git a/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c241.dat b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c241.dat
new file mode 100644
index 0000000000..3478bc897d
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c241.dat
Binary files differ
diff --git a/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c251.dat b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c251.dat
new file mode 100644
index 0000000000..d3d6adf4fb
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c251.dat
Binary files differ
diff --git a/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c260.dat b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c260.dat
new file mode 100644
index 0000000000..8d7333df7d
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c260.dat
Binary files differ
diff --git a/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c271.dat b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c271.dat
new file mode 100644
index 0000000000..af722f7d73
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c271.dat
Binary files differ
diff --git a/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c281.dat b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c281.dat
new file mode 100644
index 0000000000..3972983c2e
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c281.dat
Binary files differ
diff --git a/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c290.dat b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c290.dat
new file mode 100644
index 0000000000..31577b8124
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c290.dat
Binary files differ
diff --git a/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c2a1.dat b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c2a1.dat
new file mode 100644
index 0000000000..0f700d13a7
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c2a1.dat
Binary files differ
diff --git a/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c2b1.dat b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c2b1.dat
new file mode 100644
index 0000000000..1d6382fb3d
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c2b1.dat
Binary files differ
diff --git a/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c2c1.dat b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c2c1.dat
new file mode 100644
index 0000000000..3bc60d886b
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c2c1.dat
Binary files differ
diff --git a/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c2d0.dat b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c2d0.dat
new file mode 100644
index 0000000000..c542d3c91c
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c2d0.dat
Binary files differ
diff --git a/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c2e1.dat b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c2e1.dat
new file mode 100644
index 0000000000..16abd20b5f
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c2e1.dat
Binary files differ
diff --git a/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c2f0.dat b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c2f0.dat
new file mode 100644
index 0000000000..eb26be5932
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c2f0.dat
Binary files differ
diff --git a/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c300.dat b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c300.dat
new file mode 100644
index 0000000000..35a164db8a
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c300.dat
Binary files differ
diff --git a/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c31.dat b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c31.dat
new file mode 100644
index 0000000000..44f7fa784d
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c31.dat
Binary files differ
diff --git a/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c311.dat b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c311.dat
new file mode 100644
index 0000000000..85c095cadb
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c311.dat
Binary files differ
diff --git a/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c41.dat b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c41.dat
new file mode 100644
index 0000000000..519f1a49be
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c41.dat
Binary files differ
diff --git a/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c51.dat b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c51.dat
new file mode 100644
index 0000000000..452a28db9b
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c51.dat
Binary files differ
diff --git a/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c60.dat b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c60.dat
new file mode 100644
index 0000000000..94c357868f
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c60.dat
Binary files differ
diff --git a/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c71.dat b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c71.dat
new file mode 100644
index 0000000000..9ca2ca97d1
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c71.dat
Binary files differ
diff --git a/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c81.dat b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c81.dat
new file mode 100644
index 0000000000..85bc9c8351
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c81.dat
Binary files differ
diff --git a/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c90.dat b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c90.dat
new file mode 100644
index 0000000000..14e77ef636
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/c90.dat
Binary files differ
diff --git a/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/ca1.dat b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/ca1.dat
new file mode 100644
index 0000000000..624ae61a85
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/ca1.dat
Binary files differ
diff --git a/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/cb1.dat b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/cb1.dat
new file mode 100644
index 0000000000..97e6f19260
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/cb1.dat
Binary files differ
diff --git a/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/cc0.dat b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/cc0.dat
new file mode 100644
index 0000000000..5126021a83
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/cc0.dat
Binary files differ
diff --git a/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/cd1.dat b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/cd1.dat
new file mode 100644
index 0000000000..2e135b64ab
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/cd1.dat
Binary files differ
diff --git a/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/ce1.dat b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/ce1.dat
new file mode 100644
index 0000000000..076423c10a
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/ce1.dat
Binary files differ
diff --git a/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/cf0.dat b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/cf0.dat
new file mode 100644
index 0000000000..bfae1c8b85
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/seg0/cf0.dat
Binary files differ
diff --git a/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/service.properties b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/service.properties
new file mode 100644
index 0000000000..997a33e4db
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/dastest/service.properties
@@ -0,0 +1,22 @@
+#D:\dev\Opensource\Apache\Tuscany\source\java\sca\demos\google-maps\src\main\resources\dastest
+# ********************************************************************
+# *** Please do NOT edit this file. ***
+# *** CHANGING THE CONTENT OF THIS FILE MAY CAUSE DATA CORRUPTION. ***
+# ********************************************************************
+#Wed Aug 29 13:46:31 PDT 2007
+SysschemasIndex2Identifier=225
+SyscolumnsIdentifier=144
+SysconglomeratesIndex1Identifier=49
+SysconglomeratesIdentifier=32
+SyscolumnsIndex2Identifier=177
+SysschemasIndex1Identifier=209
+SysconglomeratesIndex3Identifier=81
+SystablesIndex2Identifier=129
+SyscolumnsIndex1Identifier=161
+derby.serviceProtocol=org.apache.derby.database.Database
+SysschemasIdentifier=192
+derby.storage.propertiesId=16
+SysconglomeratesIndex2Identifier=65
+derby.serviceLocale=en_US
+SystablesIdentifier=96
+SystablesIndex1Identifier=113 \ No newline at end of file
diff --git a/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/html/binding-atom.js b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/html/binding-atom.js
new file mode 100644
index 0000000000..aacf864f14
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/html/binding-atom.js
@@ -0,0 +1,92 @@
+/*
+ * 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.
+ */
+
+function AtomClient(uri) {
+
+ this.uri=uri;
+
+ this.get = function(id, responseFunction) {
+ var xhr = this.createXMLHttpRequest();
+ xhr.onreadystatechange = function() {
+ if (xhr.readyState == 4) {
+ if (xhr.status == 200) {
+ if (responseFunction != null) responseFunction(xhr.responseXML);
+ } else {
+ alert("get - Error getting data from the server");
+ }
+ }
+ }
+ xhr.open("GET", uri + id, true);
+ xhr.send(null);
+ }
+ this.post = function (entry, responseFunction) {
+ var xhr = this.createXMLHttpRequest();
+ xhr.onreadystatechange = function() {
+ if (xhr.readyState == 4) {
+ if (xhr.status == 201) {
+ if (responseFunction != null) responseFunction(xhr.responseXML);
+ } else {
+ alert("post - Error getting data from the server");
+ }
+ }
+ }
+ xhr.open("POST", uri, true);
+ xhr.setRequestHeader("Content-Type", "application/atom+xml");
+ xhr.send(entry);
+ }
+ this.put = function (id, entry, responseFunction) {
+ var xhr = this.createXMLHttpRequest();
+ xhr.onreadystatechange = function() {
+ if (xhr.readyState == 4) {
+ if (xhr.status == 200) {
+ if (responseFunction != null) responseFunction(xhr.responseXML);
+ } else {
+ alert("put - Error getting data from the server");
+ }
+ }
+ }
+ xhr.open("PUT", uri + id, true);
+ xhr.setRequestHeader("Content-Type", "application/atom+xml");
+ xhr.send(entry);
+ }
+ this.delete = function (id, responseFunction) {
+ var xhr = this.createXMLHttpRequest();
+ xhr.onreadystatechange = function() {
+ if (xhr.readyState == 4) {
+ if (xhr.status == 200) {
+ if (responseFunction != null) responseFunction();
+ } else {
+ alert("delete - Error getting data from the server");
+ }
+ }
+ }
+ xhr.open("DELETE", uri + id, true);
+ xhr.send(null);
+ }
+
+ this.createXMLHttpRequest = function () {
+ try {return new XMLHttpRequest();} catch(e) {}
+ try {return new ActiveXObject("Msxml2.XMLHTTP");} catch(e) {}
+ try {return new ActiveXObject("Microsoft.XMLHTTP");} catch(e) {}
+ alert("XML http request not supported");
+ return null;
+ }
+}
+
+bindingatom = "loaded"; \ No newline at end of file
diff --git a/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/html/binding-jsonrpc.js b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/html/binding-jsonrpc.js
new file mode 100644
index 0000000000..7f4a092f71
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/html/binding-jsonrpc.js
@@ -0,0 +1,494 @@
+/*
+ * JSON-RPC JavaScript client
+ *
+ * $Id: jsonrpc.js,v 1.36.2.3 2006/03/08 15:09:37 mclark Exp $
+ *
+ * Copyright (c) 2003-2004 Jan-Klaas Kollhof
+ * Copyright (c) 2005 Michael Clark, Metaparadigm Pte Ltd
+ *
+ * This code is based on Jan-Klaas' JavaScript o lait library (jsolait).
+ *
+ * Licensed 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.
+ *
+ */
+
+/*
+ * Modifications for Apache Tuscany:
+ * - JSONRpcClient_createMethod changed so callback is last arg
+ */
+
+/* escape a character */
+
+escapeJSONChar =
+function escapeJSONChar(c)
+{
+ if(c == "\"" || c == "\\") return "\\" + c;
+ else if (c == "\b") return "\\b";
+ else if (c == "\f") return "\\f";
+ else if (c == "\n") return "\\n";
+ else if (c == "\r") return "\\r";
+ else if (c == "\t") return "\\t";
+ var hex = c.charCodeAt(0).toString(16);
+ if(hex.length == 1) return "\\u000" + hex;
+ else if(hex.length == 2) return "\\u00" + hex;
+ else if(hex.length == 3) return "\\u0" + hex;
+ else return "\\u" + hex;
+};
+
+
+/* encode a string into JSON format */
+
+escapeJSONString =
+function escapeJSONString(s)
+{
+ /* The following should suffice but Safari's regex is b0rken
+ (doesn't support callback substitutions)
+ return "\"" + s.replace(/([^\u0020-\u007f]|[\\\"])/g,
+ escapeJSONChar) + "\"";
+ */
+
+ /* Rather inefficient way to do it */
+ var parts = s.split("");
+ for(var i=0; i < parts.length; i++) {
+ var c =parts[i];
+ if(c == '"' ||
+ c == '\\' ||
+ c.charCodeAt(0) < 32 ||
+ c.charCodeAt(0) >= 128)
+ parts[i] = escapeJSONChar(parts[i]);
+ }
+ return "\"" + parts.join("") + "\"";
+};
+
+
+/* Marshall objects to JSON format */
+
+toJSON = function toJSON(o)
+{
+ if(o == null) {
+ return "null";
+ } else if(o.constructor == String) {
+ return escapeJSONString(o);
+ } else if(o.constructor == Number) {
+ return o.toString();
+ } else if(o.constructor == Boolean) {
+ return o.toString();
+ } else if(o.constructor == Date) {
+ return '{javaClass: "java.util.Date", time: ' + o.valueOf() +'}';
+ } else if(o.constructor == Array) {
+ var v = [];
+ for(var i = 0; i < o.length; i++) v.push(toJSON(o[i]));
+ return "[" + v.join(", ") + "]";
+ } else {
+ var v = [];
+ for(attr in o) {
+ if(o[attr] == null) v.push("\"" + attr + "\": null");
+ else if(typeof o[attr] == "function"); /* skip */
+ else v.push(escapeJSONString(attr) + ": " + toJSON(o[attr]));
+ }
+ return "{" + v.join(", ") + "}";
+ }
+};
+
+
+/* JSONRpcClient constructor */
+
+JSONRpcClient =
+function JSONRpcClient_ctor(serverURL, user, pass, objectID)
+{
+ this.serverURL = serverURL;
+ this.user = user;
+ this.pass = pass;
+ this.objectID = objectID;
+
+ /* Add standard methods */
+ if(this.objectID) {
+ this._addMethods(["listMethods"]);
+ var req = this._makeRequest("listMethods", []);
+ } else {
+ this._addMethods(["system.listMethods"]);
+ var req = this._makeRequest("system.listMethods", []);
+ }
+ var m = this._sendRequest(req);
+ this._addMethods(m);
+};
+
+
+/* JSONRpcCLient.Exception */
+
+JSONRpcClient.Exception =
+function JSONRpcClient_Exception_ctor(code, message, javaStack)
+{
+ this.code = code;
+ var name;
+ if(javaStack) {
+ this.javaStack = javaStack;
+ var m = javaStack.match(/^([^:]*)/);
+ if(m) name = m[0];
+ }
+ if(name) this.name = name;
+ else this.name = "JSONRpcClientException";
+ this.message = message;
+};
+
+JSONRpcClient.Exception.CODE_REMOTE_EXCEPTION = 490;
+JSONRpcClient.Exception.CODE_ERR_CLIENT = 550;
+JSONRpcClient.Exception.CODE_ERR_PARSE = 590;
+JSONRpcClient.Exception.CODE_ERR_NOMETHOD = 591;
+JSONRpcClient.Exception.CODE_ERR_UNMARSHALL = 592;
+JSONRpcClient.Exception.CODE_ERR_MARSHALL = 593;
+
+JSONRpcClient.Exception.prototype = new Error();
+
+JSONRpcClient.Exception.prototype.toString =
+function JSONRpcClient_Exception_toString(code, msg)
+{
+ return this.name + ": " + this.message;
+};
+
+
+/* Default top level exception handler */
+
+JSONRpcClient.default_ex_handler =
+function JSONRpcClient_default_ex_handler(e) { alert(e); };
+
+
+/* Client settable variables */
+
+JSONRpcClient.toplevel_ex_handler = JSONRpcClient.default_ex_handler;
+JSONRpcClient.profile_async = false;
+JSONRpcClient.max_req_active = 1;
+JSONRpcClient.requestId = 1;
+
+
+/* JSONRpcClient implementation */
+
+JSONRpcClient.prototype._createMethod =
+function JSONRpcClient_createMethod(methodName)
+{
+ var fn=function()
+ {
+ var args = [];
+ var callback = null;
+ for(var i=0;i<arguments.length;i++) args.push(arguments[i]);
+
+/* TUSCANY change callback to be last arg instead of first to match binding.ajax
+ if(typeof args[0] == "function") callback = args.shift();
+*/
+ if(typeof args[arguments.length-1] == "function") callback = args.pop();
+
+ var req = fn.client._makeRequest.call(fn.client, fn.methodName,
+ args, callback);
+ if(callback == null) {
+ return fn.client._sendRequest.call(fn.client, req);
+ } else {
+ JSONRpcClient.async_requests.push(req);
+ JSONRpcClient.kick_async();
+ return req.requestId;
+ }
+ };
+ fn.client = this;
+ fn.methodName = methodName;
+ return fn;
+};
+
+JSONRpcClient.prototype._addMethods =
+function JSONRpcClient_addMethods(methodNames)
+{
+ for(var i=0; i<methodNames.length; i++) {
+ var obj = this;
+ var names = methodNames[i].split(".");
+ for(var n=0; n<names.length-1; n++) {
+ var name = names[n];
+ if(obj[name]) {
+ obj = obj[name];
+ } else {
+ obj[name] = new Object();
+ obj = obj[name];
+ }
+ }
+ var name = names[names.length-1];
+ if(!obj[name]) {
+ var method = this._createMethod(methodNames[i]);
+ obj[name] = method;
+ }
+ }
+};
+
+JSONRpcClient._getCharsetFromHeaders =
+function JSONRpcClient_getCharsetFromHeaders(http)
+{
+ try {
+ var contentType = http.getResponseHeader("Content-type");
+ var parts = contentType.split(/\s*;\s*/);
+ for(var i =0; i < parts.length; i++) {
+ if(parts[i].substring(0, 8) == "charset=")
+ return parts[i].substring(8, parts[i].length);
+ }
+ } catch (e) {}
+ return "UTF-8"; /* default */
+};
+
+/* Async queue globals */
+JSONRpcClient.async_requests = [];
+JSONRpcClient.async_inflight = {};
+JSONRpcClient.async_responses = [];
+JSONRpcClient.async_timeout = null;
+JSONRpcClient.num_req_active = 0;
+
+JSONRpcClient._async_handler =
+function JSONRpcClient_async_handler()
+{
+ JSONRpcClient.async_timeout = null;
+
+ while(JSONRpcClient.async_responses.length > 0) {
+ var res = JSONRpcClient.async_responses.shift();
+ if(res.canceled) continue;
+ if(res.profile) res.profile.dispatch = new Date();
+ try {
+ res.cb(res.result, res.ex, res.profile);
+ } catch(e) {
+ JSONRpcClient.toplevel_ex_handler(e);
+ }
+ }
+
+ while(JSONRpcClient.async_requests.length > 0 &&
+ JSONRpcClient.num_req_active < JSONRpcClient.max_req_active) {
+ var req = JSONRpcClient.async_requests.shift();
+ if(req.canceled) continue;
+ req.client._sendRequest.call(req.client, req);
+ }
+};
+
+JSONRpcClient.kick_async =
+function JSONRpcClient_kick_async()
+{
+ if(JSONRpcClient.async_timeout == null)
+ JSONRpcClient.async_timeout =
+ setTimeout(JSONRpcClient._async_handler, 0);
+};
+
+JSONRpcClient.cancelRequest =
+function JSONRpcClient_cancelRequest(requestId)
+{
+ /* If it is in flight then mark it as canceled in the inflight map
+ and the XMLHttpRequest callback will discard the reply. */
+ if(JSONRpcClient.async_inflight[requestId]) {
+ JSONRpcClient.async_inflight[requestId].canceled = true;
+ return true;
+ }
+
+ /* If its not in flight yet then we can just mark it as canceled in
+ the the request queue and it will get discarded before being sent. */
+ for(var i in JSONRpcClient.async_requests) {
+ if(JSONRpcClient.async_requests[i].requestId == requestId) {
+ JSONRpcClient.async_requests[i].canceled = true;
+ return true;
+ }
+ }
+
+ /* It may have returned from the network and be waiting for its callback
+ to be dispatched, so mark it as canceled in the response queue
+ and the response will get discarded before calling the callback. */
+ for(var i in JSONRpcClient.async_responses) {
+ if(JSONRpcClient.async_responses[i].requestId == requestId) {
+ JSONRpcClient.async_responses[i].canceled = true;
+ return true;
+ }
+ }
+
+ return false;
+};
+
+JSONRpcClient.prototype._makeRequest =
+function JSONRpcClient_makeRequest(methodName, args, cb)
+{
+ var req = {};
+ req.client = this;
+ req.requestId = JSONRpcClient.requestId++;
+
+ var obj = {};
+ obj.id = req.requestId;
+ if (this.objectID)
+ obj.method = ".obj#" + this.objectID + "." + methodName;
+ else
+ obj.method = methodName;
+ obj.params = args;
+
+ if (cb) req.cb = cb;
+ if (JSONRpcClient.profile_async)
+ req.profile = { "submit": new Date() };
+ req.data = toJSON(obj);
+
+ return req;
+};
+
+JSONRpcClient.prototype._sendRequest =
+function JSONRpcClient_sendRequest(req)
+{
+ if(req.profile) req.profile.start = new Date();
+
+ /* Get free http object from the pool */
+ var http = JSONRpcClient.poolGetHTTPRequest();
+ JSONRpcClient.num_req_active++;
+
+ /* Send the request */
+ if (typeof(this.user) == "undefined") {
+ http.open("POST", this.serverURL, (req.cb != null));
+ } else {
+ http.open("POST", this.serverURL, (req.cb != null), this.user, this.pass);
+ }
+
+ /* setRequestHeader is missing in Opera 8 Beta */
+ try { http.setRequestHeader("Content-type", "text/plain"); } catch(e) {}
+
+ /* Construct call back if we have one */
+ if(req.cb) {
+ var self = this;
+ http.onreadystatechange = function() {
+ if(http.readyState == 4) {
+ http.onreadystatechange = function () {};
+ var res = { "cb": req.cb, "result": null, "ex": null};
+ if (req.profile) {
+ res.profile = req.profile;
+ res.profile.end = new Date();
+ }
+ try { res.result = self._handleResponse(http); }
+ catch(e) { res.ex = e; }
+ if(!JSONRpcClient.async_inflight[req.requestId].canceled)
+ JSONRpcClient.async_responses.push(res);
+ delete JSONRpcClient.async_inflight[req.requestId];
+ JSONRpcClient.kick_async();
+ }
+ };
+ } else {
+ http.onreadystatechange = function() {};
+ }
+
+ JSONRpcClient.async_inflight[req.requestId] = req;
+
+ try {
+ http.send(req.data);
+ } catch(e) {
+ JSONRpcClient.poolReturnHTTPRequest(http);
+ JSONRpcClient.num_req_active--;
+ throw new JSONRpcClient.Exception
+ (JSONRpcClient.Exception.CODE_ERR_CLIENT, "Connection failed");
+ }
+
+ if(!req.cb) return this._handleResponse(http);
+};
+
+JSONRpcClient.prototype._handleResponse =
+function JSONRpcClient_handleResponse(http)
+{
+ /* Get the charset */
+ if(!this.charset) {
+ this.charset = JSONRpcClient._getCharsetFromHeaders(http);
+ }
+
+ /* Get request results */
+ var status, statusText, data;
+ try {
+ status = http.status;
+ statusText = http.statusText;
+ data = http.responseText;
+ } catch(e) {
+ JSONRpcClient.poolReturnHTTPRequest(http);
+ JSONRpcClient.num_req_active--;
+ JSONRpcClient.kick_async();
+ throw new JSONRpcClient.Exception
+ (JSONRpcClient.Exception.CODE_ERR_CLIENT, "Connection failed");
+ }
+
+ /* Return http object to the pool; */
+ JSONRpcClient.poolReturnHTTPRequest(http);
+ JSONRpcClient.num_req_active--;
+
+ /* Unmarshall the response */
+ if(status != 200) {
+ throw new JSONRpcClient.Exception(status, statusText);
+ }
+ var obj;
+ try {
+ eval("obj = " + data);
+ } catch(e) {
+ throw new JSONRpcClient.Exception(550, "error parsing result");
+ }
+ if(obj.error)
+ throw new JSONRpcClient.Exception(obj.error.code, obj.error.msg,
+ obj.error.trace);
+ var res = obj.result;
+
+ /* Handle CallableProxy */
+ if(res && res.objectID && res.JSONRPCType == "CallableReference")
+ return new JSONRpcClient(this.serverURL, this.user,
+ this.pass, res.objectID);
+
+ return res;
+};
+
+
+/* XMLHttpRequest wrapper code */
+
+/* XMLHttpRequest pool globals */
+JSONRpcClient.http_spare = [];
+JSONRpcClient.http_max_spare = 8;
+
+JSONRpcClient.poolGetHTTPRequest =
+function JSONRpcClient_pool_getHTTPRequest()
+{
+ if(JSONRpcClient.http_spare.length > 0) {
+ return JSONRpcClient.http_spare.pop();
+ }
+ return JSONRpcClient.getHTTPRequest();
+};
+
+JSONRpcClient.poolReturnHTTPRequest =
+function JSONRpcClient_poolReturnHTTPRequest(http)
+{
+ if(JSONRpcClient.http_spare.length >= JSONRpcClient.http_max_spare)
+ delete http;
+ else
+ JSONRpcClient.http_spare.push(http);
+};
+
+JSONRpcClient.msxmlNames = [ "MSXML2.XMLHTTP.5.0",
+ "MSXML2.XMLHTTP.4.0",
+ "MSXML2.XMLHTTP.3.0",
+ "MSXML2.XMLHTTP",
+ "Microsoft.XMLHTTP" ];
+
+JSONRpcClient.getHTTPRequest =
+function JSONRpcClient_getHTTPRequest()
+{
+ /* Mozilla XMLHttpRequest */
+ try {
+ JSONRpcClient.httpObjectName = "XMLHttpRequest";
+ return new XMLHttpRequest();
+ } catch(e) {}
+
+ /* Microsoft MSXML ActiveX */
+ for (var i=0;i < JSONRpcClient.msxmlNames.length; i++) {
+ try {
+ JSONRpcClient.httpObjectName = JSONRpcClient.msxmlNames[i];
+ return new ActiveXObject(JSONRpcClient.msxmlNames[i]);
+ } catch (e) {}
+ }
+
+ /* None found */
+ JSONRpcClient.httpObjectName = null;
+ throw new JSONRpcClient.Exception(0, "Can't create XMLHttpRequest object");
+};
+
+bindingjsonrpc = "loaded"; \ No newline at end of file
diff --git a/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/html/index-plain.html b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/html/index-plain.html
new file mode 100644
index 0000000000..0783c3facb
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/html/index-plain.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 xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8"/>
+ <title>Google Maps JavaScript API Example</title>
+ <script src="http://maps.google.com/maps?file=api&amp;v=2&amp;key=ABQIAAAAm88JxNt0WTuRM7JcraL3dBTwM0brOpm-All5BF6PoaKBxRWWERRebL1SxVq4ZL7LvM8MmxNYPufSBA"
+ type="text/javascript"></script>
+ <script type="text/javascript">
+
+ //<![CDATA[
+
+ function load() {
+ if (GBrowserIsCompatible()) {
+ var map = new GMap(document.getElementById("map"));
+ map.addControl(new GLargeMapControl());
+ map.addControl(new GMapTypeControl());
+ map.setCenter(new GLatLng(0,0),0);
+ map.setZoom(1);
+ //map.setCenter(new GLatLng(-15.5833,-56.0833), 13);
+
+ // A function to create the marker and set up the event window
+ function createMarker(point,name,html) {
+ var marker = new GMarker(point);
+ GEvent.addListener(marker, "click", function() {
+ marker.openInfoWindowHtml(html);
+ });
+ return marker;
+ }
+
+ // ================================================================
+ // === JSON handler ===============================================
+ // ================================================================
+ process_it = function(doc) {
+ // === Parse the JSON document ===
+ var jsonData = eval('(' + doc + ')');
+
+ // === Plot the markers ===
+ for (var i=0; i<jsonData.markers.length; i++) {
+ var marker = createMarker(jsonData.markers[i].point, jsonData.markers[i].label, jsonData.markers[i].html);
+ map.addOverlay(marker);
+ }
+ }
+
+ // ================================================================
+ // === Fetch the JSON data file ====
+ GDownloadUrl("map.json", process_it);
+ // ================================================================
+
+
+ }
+ }
+
+ //]]>
+ </script>
+ </head>
+ <body onload="load()" onunload="GUnload()">
+ <div id="map" style="width: 800px; height: 500px"></div>
+ </body>
+</html> \ No newline at end of file
diff --git a/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/html/index.html b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/html/index.html
new file mode 100644
index 0000000000..53f637bed2
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/html/index.html
@@ -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.
+-->
+<html>
+<head>
+<title>Customer Mashup</TITLE>
+
+
+<script type="text/javascript" src="binding-jsonrpc.js"></script>
+<script language="JavaScript">
+ //Reference
+ customer = (new JSONRpcClient("http://localhost:8080/CustomerServiceComponent/CustomerService")).CustomerService;
+
+ function getCustomers() {
+ customer.getCustomers(customer_handleResponse);
+ }
+
+ function customer_handleResponse(result) {
+ alert(result["p0:dataObject"].CUSTOMER);
+ alert(result["p0:dataObject"].CUSTOMER.NAME["$"]);
+
+ document.getElementById('result').innerHTML=result;
+ }
+</script>
+
+<link rel="stylesheet" type="text/css" href="style.css" />
+</head>
+
+<body>
+
+<h1>MyCompany.com</h1>
+<div id="customer">
+ <h2>Customer List</h2>
+ <input type="button" value="Submit" onclick="getCustomers()" />
+ <div id="result">None yet.</div>
+ <div id="customer_list" ></div>
+</div>
+
+</body>
+</html>
diff --git a/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/html/map.json b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/html/map.json
new file mode 100644
index 0000000000..a884141a3c
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/demos/customer-map/src/main/resources/html/map.json
@@ -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.
+ */
+
+{"markers": [
+ {"country":"Brazil", "city":"Cuiaba", "point":new GLatLng(-15.625702586903822, -56.07351064682007), "html":"My home town","label":"Cuiaba"},
+ {"country":"Brazil", "city":"Chapada dos Guimaraes", "point":new GLatLng(-15.44329, -55.75835), "html":"Chapada, Wonderful landscape and beautiful whaterfalls ","label":"Chapada dos Guimaraes"},
+ {"country":"Brazil", "city":"Pantanal Matogrossense", "point":new GLatLng(-16.223575372658782, -56.631431579589844), "html":"Pantanal and it's amazing biologic diversity","label":"Pantanal Matogrossensse"},
+ {"country":"Brazil", "city":"Rio de Janeiro", "point":new GLatLng(-22.963984709280982, -43.17753553390503), "html":"Wonderful City","label":"Rio de Janeiro"},
+ {"country":"Brazil", "city":"Sao Paulo", "point":new GLatLng(-23.54329433556302, -46.71802997589111), "html":"Sao Paulo","label":"Sao Paulo"},
+ ]
+} \ No newline at end of file
diff --git a/sandbox/lresende/sca-1.x/demos/customer-map/src/test/java/customer/CustomerServiceTestCase.java b/sandbox/lresende/sca-1.x/demos/customer-map/src/test/java/customer/CustomerServiceTestCase.java
new file mode 100644
index 0000000000..7d289fd62a
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/demos/customer-map/src/test/java/customer/CustomerServiceTestCase.java
@@ -0,0 +1,60 @@
+/*
+ * 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 customer;
+
+import junit.framework.TestCase;
+
+import org.apache.tuscany.sca.host.embedded.SCADomain;
+
+import commonj.sdo.DataObject;
+import customer.CustomerService;
+
+/**
+ * Tests the DAS service
+ */
+public class CustomerServiceTestCase extends TestCase {
+
+ private SCADomain scaDomain;
+ private CustomerService customerService;
+
+ /**
+ * @throws java.lang.Exception
+ */
+ @Override
+ protected void setUp() throws Exception {
+ scaDomain = SCADomain.newInstance("customer.composite");
+ customerService = scaDomain.getService(CustomerService.class, "CustomerServiceComponent/CustomerService");
+ }
+
+ /**
+ * @throws java.lang.Exception
+ */
+ @Override
+ protected void tearDown() throws Exception {
+ scaDomain.close();
+ }
+
+ public void testGetCustomers() throws Exception {
+ DataObject root = customerService.getCustomers();
+ assertNotNull(root);
+ assertEquals("Luciano Resende", root.getString("CUSTOMER[1]/NAME"));
+ }
+
+
+}
diff --git a/sandbox/lresende/sca-1.x/demos/customer-map/src/test/resources/customer.componentType b/sandbox/lresende/sca-1.x/demos/customer-map/src/test/resources/customer.componentType
new file mode 100644
index 0000000000..0d1992d597
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/demos/customer-map/src/test/resources/customer.componentType
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+ * 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"
+ xmlns:wsdli="http://www.w3.org/2006/01/wsdl-instance"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+
+ <service name="CustomerService">
+ <interface.java interface="customer.CustomerService"/>
+ </service>
+
+</componentType> \ No newline at end of file
diff --git a/sandbox/lresende/sca-1.x/demos/customer-map/src/test/resources/customer.composite b/sandbox/lresende/sca-1.x/demos/customer-map/src/test/resources/customer.composite
new file mode 100644
index 0000000000..72a692e38b
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/demos/customer-map/src/test/resources/customer.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:tuscany="http://tuscany.apache.org/xmlns/sca/1.0"
+ targetNamespace="http://demo/google-maps"
+ name="customer">
+
+ <component name="CustomerServiceComponent">
+ <tuscany:implementation.das config="customer.xml" dataAccessType="rdb">
+ <tuscany:connectionInfo>
+ <tuscany:connectionProperties
+ driverClass="org.apache.derby.jdbc.EmbeddedDriver"
+ databaseURL="jdbc:derby:target/classes/dastest; create = true"
+ loginTimeout="600000" />
+ </tuscany:connectionInfo>
+ </tuscany:implementation.das>
+ </component>
+</composite>
diff --git a/sandbox/lresende/sca-1.x/demos/customer-map/src/test/resources/customer.xml b/sandbox/lresende/sca-1.x/demos/customer-map/src/test/resources/customer.xml
new file mode 100644
index 0000000000..7b17903540
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/demos/customer-map/src/test/resources/customer.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.
+ -->
+<Config xmlns="http:///org.apache.tuscany.das.rdb/config.xsd">
+
+ <Command name="getCustomers" SQL="select * from CUSTOMER" kind="Select"/>
+
+ <Table tableName="CUSTOMER">
+ <Column columnName="ID" primaryKey="true" generated="true"/>
+ </Table>
+</Config>
diff --git a/sandbox/lresende/sca-1.x/modules/implementation-data-pojo/DISCLAIMER b/sandbox/lresende/sca-1.x/modules/implementation-data-pojo/DISCLAIMER
new file mode 100644
index 0000000000..d68a410903
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/modules/implementation-data-pojo/DISCLAIMER
@@ -0,0 +1,8 @@
+Apache Tuscany is an effort undergoing incubation at The Apache Software
+Foundation (ASF), sponsored by the Apache Web Services PMC. Incubation is
+required of all newly accepted projects until a further review indicates that
+the infrastructure, communications, and decision making process have stabilized
+in a manner consistent with other successful ASF projects. While incubation
+status is not necessarily a reflection of the completeness or stability of the
+code, it does indicate that the project has yet to be fully endorsed by the ASF.
+
diff --git a/sandbox/lresende/sca-1.x/modules/implementation-data-pojo/LICENSE b/sandbox/lresende/sca-1.x/modules/implementation-data-pojo/LICENSE
new file mode 100644
index 0000000000..8aa906c321
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/modules/implementation-data-pojo/LICENSE
@@ -0,0 +1,205 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed 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.
+
+
+
diff --git a/sandbox/lresende/sca-1.x/modules/implementation-data-pojo/NOTICE b/sandbox/lresende/sca-1.x/modules/implementation-data-pojo/NOTICE
new file mode 100644
index 0000000000..94481d6cfa
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/modules/implementation-data-pojo/NOTICE
@@ -0,0 +1,6 @@
+${pom.name}
+Copyright (c) 2005 - 2007 The Apache Software Foundation
+
+This product includes software developed by
+The Apache Software Foundation (http://www.apache.org/).
+
diff --git a/sandbox/lresende/sca-1.x/modules/implementation-data-pojo/README b/sandbox/lresende/sca-1.x/modules/implementation-data-pojo/README
new file mode 100644
index 0000000000..ff6ee6a8f4
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/modules/implementation-data-pojo/README
@@ -0,0 +1,33 @@
+Tuscany implementation OpenJpa
+===============================
+Persistence technology is a very part of enterprise level application system. Tuscany has provided
+SDO implementation and a non standard but useful DAS infrastructure.
+But Tuscany also considered much existed software resource has used popular technologies as
+hibernate and jpa.
+Hibernate has license problem so an implementation based on it can not be hosted by Apache.
+This implementation is developed on the bases of Tuscany¡¯s robust extensible architecture and of
+course the jpa implementation project: Apache OpenJPA.
+
+This module is under the process of more improvement:
+
+For the time being, user of this module could configure a component as did by the *.composite file
+in this module. The component is infact a proxy of a JPA top api:
+ javax.persitence.EntityManager
+User of this module could use all the method provided by this interface.
+
+An difference is: OpenJPA could work with 2PC only if there is JNDI context and
+TransactionManager registered in the JNDI. This module modified much to work with
+policy-transaction module.
+
+For the time being, the Transaction boundary is located around one invocation of the EntityManager. But in the future, these boundary will move up to an component who references the EntityManager, that will be the righteous way for SCA developers!
+
+The data base working in this module is now Derby, it is for the ease of test running. MySQL
+could also work with this module, but it need database deployment in before. Not all types of database could work with this module, such as HSql, it did not provided a XA DataSource implementation up to now.
+
+There are much powerful features provided by openjpa, such as table auto generation, it is now also working in this module.
+
+User could get start from looking at what is done by:
+??org.apache.tuscany.sca.implementation.openjpa.ImplJpaTestCase
+??and
+??openjpa.composite
+When running the testcase, a RuntimeException stack trace(from inside openjpa api) will get printed on your screen, it is just ok, because of a trying of duplication primary key insertion, and it causes transaction rolling back.
diff --git a/sandbox/lresende/sca-1.x/modules/implementation-data-pojo/company.sql b/sandbox/lresende/sca-1.x/modules/implementation-data-pojo/company.sql
new file mode 100644
index 0000000000..4911f9e62f
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/modules/implementation-data-pojo/company.sql
@@ -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.
+--
+
+DROP TABLE COMPANY;
+
+CREATE TABLE COMPANY (
+ ID INT PRIMARY KEY NOT NULL GENERATED ALWAYS AS IDENTITY,
+ NAME VARCHAR(30));
+
+INSERT INTO COMPANY (NAME) VALUES('ACME Publishing');
+INSERT INTO COMPANY (NAME) VALUES('Do-rite plumbing');
+INSERT INTO COMPANY (NAME) VALUES('MegaCorp'); \ No newline at end of file
diff --git a/sandbox/lresende/sca-1.x/modules/implementation-data-pojo/pom.xml b/sandbox/lresende/sca-1.x/modules/implementation-data-pojo/pom.xml
new file mode 100644
index 0000000000..7e56a256a2
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/modules/implementation-data-pojo/pom.xml
@@ -0,0 +1,174 @@
+<?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-modules</artifactId>
+ <version>1.5-SNAPSHOT</version>
+ <relativePath>../pom.xml</relativePath>
+ </parent>
+ <artifactId>tuscany-implementation-data-pojo</artifactId>
+ <name>Apache Tuscany SCA OpenJPA Implementation Extension</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-assembly</artifactId>
+ <version>1.5-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-core</artifactId>
+ <version>1.5-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-interface</artifactId>
+ <version>1.5-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-assembly-xml</artifactId>
+ <version>1.5-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-contribution-impl</artifactId>
+ <version>1.5-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-sca-api</artifactId>
+ <version>1.5-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-databinding</artifactId>
+ <version>1.5-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-implementation-java-runtime</artifactId>
+ <version>1.5-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-data-api</artifactId>
+ <version>1.5-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-host-embedded</artifactId>
+ <version>1.5-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-policy-transaction</artifactId>
+ <version>1.5-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.geronimo.specs</groupId>
+ <artifactId>geronimo-jpa_3.0_spec</artifactId>
+ <version>1.1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.openjpa</groupId>
+ <artifactId>openjpa</artifactId>
+ <version>1.0.0</version>
+ </dependency>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>3.8.1</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.derby</groupId>
+ <artifactId>derby</artifactId>
+ <version>10.3.1.4</version>
+ <scope>compile</scope>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <finalName>${artifactId}</finalName>
+
+ <plugins>
+ <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.1.2.1</version-->
+ <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:${pom.basedir}/target/test-classes/company;create=true</url>
+ <autocommit>true</autocommit>
+ <onError>continue</onError>
+ <onConnectionError>skip</onConnectionError>
+ <delimiter>;</delimiter>
+ <srcFiles>
+ <srcFile>${pom.basedir}/company.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:${pom.basedir}/target/test-classes/company;shutdown=true</url>
+ <skipOnConnectionError>true</skipOnConnectionError>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+
+</project>
diff --git a/sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/main/java/org/apache/tuscany/sca/implementation/openjpa/JPAImplementation.java b/sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/main/java/org/apache/tuscany/sca/implementation/openjpa/JPAImplementation.java
new file mode 100644
index 0000000000..c1ed6b4e58
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/main/java/org/apache/tuscany/sca/implementation/openjpa/JPAImplementation.java
@@ -0,0 +1,36 @@
+/*
+ * 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 org.apache.tuscany.sca.implementation.openjpa;
+
+import java.util.Properties;
+
+import org.apache.openjpa.persistence.PersistenceUnitInfoImpl;
+import org.apache.tuscany.sca.assembly.Implementation;
+
+public interface JPAImplementation extends Implementation {
+
+ void setPersistenceUnitInfoImpl(PersistenceUnitInfoImpl buii);
+
+ PersistenceUnitInfoImpl getPersistenceUnitInfoImpl();
+
+ void setDataSourceMeta(Properties p);
+
+ Properties getDataSourceMeta();
+}
diff --git a/sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/main/java/org/apache/tuscany/sca/implementation/openjpa/JPAImplementationFactory.java b/sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/main/java/org/apache/tuscany/sca/implementation/openjpa/JPAImplementationFactory.java
new file mode 100644
index 0000000000..a5812b26e4
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/main/java/org/apache/tuscany/sca/implementation/openjpa/JPAImplementationFactory.java
@@ -0,0 +1,24 @@
+/*
+ * 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 org.apache.tuscany.sca.implementation.openjpa;
+
+public interface JPAImplementationFactory {
+ JPAImplementation createOpenJpaImplementation();
+}
diff --git a/sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/main/java/org/apache/tuscany/sca/implementation/openjpa/JPAImplementationProcessor.java b/sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/main/java/org/apache/tuscany/sca/implementation/openjpa/JPAImplementationProcessor.java
new file mode 100644
index 0000000000..8ea83e7bfb
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/main/java/org/apache/tuscany/sca/implementation/openjpa/JPAImplementationProcessor.java
@@ -0,0 +1,99 @@
+/*
+ * 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 org.apache.tuscany.sca.implementation.openjpa;
+
+import java.util.Properties;
+
+import javax.xml.namespace.QName;
+import javax.xml.stream.XMLStreamConstants;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
+import javax.xml.stream.XMLStreamWriter;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.openjpa.persistence.PersistenceUnitInfoImpl;
+import org.apache.tuscany.sca.assembly.AssemblyFactory;
+import org.apache.tuscany.sca.assembly.xml.Constants;
+import org.apache.tuscany.sca.contribution.ModelFactoryExtensionPoint;
+import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor;
+import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
+import org.apache.tuscany.sca.contribution.service.ContributionReadException;
+import org.apache.tuscany.sca.contribution.service.ContributionResolveException;
+import org.apache.tuscany.sca.contribution.service.ContributionWriteException;
+import org.apache.tuscany.sca.implementation.openjpa.impl.JPAImplementationFactoryImpl;
+import org.apache.tuscany.sca.interfacedef.java.JavaInterfaceFactory;
+
+public class JPAImplementationProcessor implements StAXArtifactProcessor<JPAImplementation> {
+ private final QName QNAME = new QName(Constants.SCA10_TUSCANY_NS, "implementation.data.pojo");
+ private QName DS = new QName(Constants.SCA10_TUSCANY_NS, "datasource");
+
+ private JPAImplementationFactory jpaFactory;
+ private Log log = LogFactory.getLog(this.getClass());
+ private StAXArtifactProcessor<PersistenceUnitInfoImpl> puiiProcessor;
+
+ public JPAImplementationProcessor(ModelFactoryExtensionPoint modelFactories) {
+ AssemblyFactory assemblyFactory = modelFactories.getFactory(AssemblyFactory.class);
+ JavaInterfaceFactory javaFactory = modelFactories.getFactory(JavaInterfaceFactory.class);
+
+ this.jpaFactory = new JPAImplementationFactoryImpl(assemblyFactory, javaFactory);
+ this.puiiProcessor = new PersistenceUnitInfoImplProcessor(modelFactories);
+ }
+
+ public Class<JPAImplementation> getModelType() {
+ return JPAImplementation.class;
+ }
+
+ public QName getArtifactType() {
+ return QNAME;
+ }
+
+ public JPAImplementation read(XMLStreamReader reader) throws ContributionReadException, XMLStreamException {
+ assert QNAME.equals(reader.getName());
+ JPAImplementation implementation = jpaFactory.createOpenJpaImplementation();
+
+ implementation.setPersistenceUnitInfoImpl(puiiProcessor.read(reader));
+ Properties dsmeta = new Properties();
+ do {
+ int event = reader.next();
+ if (event == XMLStreamConstants.START_ELEMENT) {
+ if (!reader.getName().equals(DS)) {
+ dsmeta.setProperty(reader.getName().getLocalPart(), reader.getElementText());
+ }
+ } else if (event == XMLStreamConstants.END_ELEMENT && reader.getName().equals(DS)) {
+ implementation.setDataSourceMeta(dsmeta);
+ break;
+ }
+ } while (true);
+
+ return implementation;
+
+ }
+
+ public void write(JPAImplementation model, XMLStreamWriter writer) throws ContributionWriteException, XMLStreamException {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void resolve(JPAImplementation model, ModelResolver resolver) throws ContributionResolveException {
+
+ }
+
+}
diff --git a/sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/main/java/org/apache/tuscany/sca/implementation/openjpa/PersistenceUnitInfoImplProcessor.java b/sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/main/java/org/apache/tuscany/sca/implementation/openjpa/PersistenceUnitInfoImplProcessor.java
new file mode 100644
index 0000000000..d6e8276f25
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/main/java/org/apache/tuscany/sca/implementation/openjpa/PersistenceUnitInfoImplProcessor.java
@@ -0,0 +1,109 @@
+/*
+ * 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 org.apache.tuscany.sca.implementation.openjpa;
+
+import javax.xml.namespace.QName;
+import javax.xml.stream.XMLStreamConstants;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
+import javax.xml.stream.XMLStreamWriter;
+
+import org.apache.openjpa.persistence.PersistenceUnitInfoImpl;
+import org.apache.tuscany.sca.assembly.xml.Constants;
+import org.apache.tuscany.sca.contribution.ModelFactoryExtensionPoint;
+import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor;
+import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
+import org.apache.tuscany.sca.contribution.service.ContributionReadException;
+import org.apache.tuscany.sca.contribution.service.ContributionResolveException;
+import org.apache.tuscany.sca.contribution.service.ContributionWriteException;
+
+public class PersistenceUnitInfoImplProcessor implements StAXArtifactProcessor<PersistenceUnitInfoImpl> {
+ private QName P_U = new QName(Constants.SCA10_TUSCANY_NS, "persistence-unit");
+ private QName BrokerFactory = new QName(Constants.SCA10_TUSCANY_NS, "jpa.BrokerFactory");
+ private QName CLASS = new QName(Constants.SCA10_TUSCANY_NS, "class");
+ private QName TRAN_MD = new QName(Constants.SCA10_TUSCANY_NS, "jpa.TransactionMode");
+ private QName LOG = new QName(Constants.SCA10_TUSCANY_NS, "jpa.Log");
+ private QName SYNCHRON = new QName(Constants.SCA10_TUSCANY_NS, "jpa.jdbc.SynchronizeMappings");
+
+ public PersistenceUnitInfoImplProcessor(ModelFactoryExtensionPoint modelFactories) {
+
+ }
+
+ public QName getArtifactType() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+
+ public PersistenceUnitInfoImpl read(XMLStreamReader reader) throws ContributionReadException, XMLStreamException {
+
+ PersistenceUnitInfoImpl _info = new PersistenceUnitInfoImpl();
+
+ while (true) {
+ int event = reader.next();
+ switch (event) {
+
+ case XMLStreamConstants.START_ELEMENT:
+ QName qn = reader.getName();
+ /*
+ * if (qn.equals(BrokerFactory)) {
+ * _info.setProperty("openjpa.BrokerFactory", reader
+ * .getElementText()); }
+ */
+ if (qn.equals(CLASS)) {
+ _info.addManagedClassName(reader.getElementText());
+
+ } else if (qn.equals(P_U)) {
+ _info.setPersistenceUnitName(reader.getAttributeValue(null, "name"));
+ } else {
+ _info.setProperty(qn.getLocalPart(), reader.getElementText());
+ } /*
+ * else if (qn.equals(LOG)) {
+ * _info.setProperty("openjpa.Log",
+ * reader.getElementText()); } else if
+ * (qn.equals(SYNCHRON)) {
+ * _info.setProperty("openjpa.jdbc.SynchronizeMappings",
+ * reader.getElementText()); }
+ */
+ break;
+ case XMLStreamConstants.END_ELEMENT:
+ if (reader.getName().equals(P_U))
+ return _info;
+ }
+ }
+ }
+
+ public void write(PersistenceUnitInfoImpl model, XMLStreamWriter writer) throws ContributionWriteException,
+ XMLStreamException {
+ // TODO Auto-generated method stub
+
+ }
+
+ public Class<PersistenceUnitInfoImpl> getModelType() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public void resolve(PersistenceUnitInfoImpl model, ModelResolver resolver) throws ContributionResolveException {
+ // TODO Auto-generated method stub
+
+ }
+
+}
diff --git a/sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/main/java/org/apache/tuscany/sca/implementation/openjpa/TuscanyBrokerFactory.java b/sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/main/java/org/apache/tuscany/sca/implementation/openjpa/TuscanyBrokerFactory.java
new file mode 100644
index 0000000000..c4b14a1a90
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/main/java/org/apache/tuscany/sca/implementation/openjpa/TuscanyBrokerFactory.java
@@ -0,0 +1,100 @@
+/*
+ * 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 org.apache.tuscany.sca.implementation.openjpa;
+
+import javax.sql.XAConnection;
+import javax.transaction.TransactionManager;
+
+import org.apache.derby.jdbc.*;
+import org.apache.openjpa.conf.OpenJPAConfiguration;
+import org.apache.openjpa.kernel.AbstractBrokerFactory;
+import org.apache.openjpa.kernel.StoreManager;
+import org.apache.openjpa.lib.conf.ConfigurationProvider;
+import java.util.*;
+import org.apache.commons.logging.*;
+import org.apache.openjpa.jdbc.meta.MappingTool;
+import org.apache.openjpa.jdbc.conf.*;
+import org.apache.openjpa.meta.*;
+
+public class TuscanyBrokerFactory extends AbstractBrokerFactory {
+ private Log log = LogFactory.getLog(this.getClass());
+ protected TuscanyBrokerFactory(OpenJPAConfiguration conf) {
+ super(conf);
+ if (buildSchema != null && buildSchema.equals("buildSchema")) {
+ MappingTool tool = new MappingTool((JDBCConfiguration) conf,
+ (String) buildSchema, false);
+ Collection classes = meta.loadPersistentTypes(false, this
+ .getClass().getClassLoader());
+ for (Iterator itr = classes.iterator(); itr.hasNext();) {
+ tool.run((Class) itr.next());
+ }
+ log
+ .info("creating database and tables accroding to class mappings...");
+ tool.record();
+ }
+ }
+
+ private XAConnection xaconn;
+
+ @Override
+ protected StoreManager newStoreManager() {
+ try {
+ if (xaconn == null) {
+ if (cp.getProperties().get("dbtype").equals("Derby")) {
+ EmbeddedXADataSource xads = new EmbeddedXADataSource();
+ xads.setDatabaseName((String)cp.getProperties().get("dbname"));
+
+ xaconn = xads.getXAConnection();
+ }
+
+ System.out.println("------------TuscanyBrokerFactory.newStoreManager....");
+
+ }
+ return new TuscanyStoreManager(xaconn);
+
+ } catch (Exception ex) {
+ ex.printStackTrace();
+ throw new RuntimeException(ex);
+ }
+ }
+
+ private static TransactionManager tm;
+ private static ConfigurationProvider cp;
+ private static Object buildSchema;
+ private static MetaDataRepository meta;
+
+ public static TuscanyBrokerFactory newInstance(ConfigurationProvider _cp) {
+ tm = (TransactionManager)_cp.getProperties().get("TransactionManager");
+ EmbeddedDataSource ds2 = null;
+ if (_cp.getProperties().get("dbtype").equals("Derby")) {
+ ds2 = new EmbeddedDataSource();
+ ds2.setDatabaseName((String) _cp.getProperties().get("dbname"));
+ ds2.setCreateDatabase((String) _cp.getProperties().get("dbcreate"));
+ }
+ TuscanyJDBCConfigurationImpl conf = new TuscanyJDBCConfigurationImpl(tm, ds2);
+ _cp.setInto(conf);
+ buildSchema = _cp.getProperties().get(
+ "openjpa.jdbc.SynchronizeMappings");
+
+ meta = conf.getMetaDataRepositoryInstance();
+ cp = _cp;
+ return new TuscanyBrokerFactory(conf);
+ }
+}
diff --git a/sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/main/java/org/apache/tuscany/sca/implementation/openjpa/TuscanyBrokerImpl.java b/sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/main/java/org/apache/tuscany/sca/implementation/openjpa/TuscanyBrokerImpl.java
new file mode 100644
index 0000000000..f5972142de
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/main/java/org/apache/tuscany/sca/implementation/openjpa/TuscanyBrokerImpl.java
@@ -0,0 +1,37 @@
+/*
+ * 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 org.apache.tuscany.sca.implementation.openjpa;
+
+import javax.transaction.TransactionManager;
+
+import org.apache.openjpa.ee.ManagedRuntime;
+import org.apache.openjpa.kernel.BrokerImpl;
+
+public class TuscanyBrokerImpl extends BrokerImpl {
+ private TransactionManager tm;
+
+ public TuscanyBrokerImpl(TransactionManager tm) {
+ this.tm = tm;
+ }
+
+ public ManagedRuntime getManagedRuntime() {
+ return new TuscanyManagerRuntime(tm);
+ }
+}
diff --git a/sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/main/java/org/apache/tuscany/sca/implementation/openjpa/TuscanyJDBCConfigurationImpl.java b/sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/main/java/org/apache/tuscany/sca/implementation/openjpa/TuscanyJDBCConfigurationImpl.java
new file mode 100644
index 0000000000..78de14cc1c
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/main/java/org/apache/tuscany/sca/implementation/openjpa/TuscanyJDBCConfigurationImpl.java
@@ -0,0 +1,58 @@
+/*
+ * 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 org.apache.tuscany.sca.implementation.openjpa;
+
+import javax.sql.DataSource;
+import javax.transaction.TransactionManager;
+
+import org.apache.openjpa.ee.ManagedRuntime;
+import org.apache.openjpa.jdbc.conf.JDBCConfigurationImpl;
+import org.apache.openjpa.jdbc.sql.DBDictionary;
+import org.apache.openjpa.jdbc.sql.DerbyDictionary;
+import org.apache.openjpa.kernel.StoreContext;
+import org.apache.openjpa.lib.conf.Configurations;
+
+public class TuscanyJDBCConfigurationImpl extends JDBCConfigurationImpl {
+ private TransactionManager tm;
+
+ public TuscanyJDBCConfigurationImpl(TransactionManager tm,DataSource _ds) {
+ this.tm = tm;
+ ds2 = _ds;
+ }
+ public ManagedRuntime getManagedRuntimeInstance() {
+ return new TuscanyManagerRuntime(tm);
+ }
+
+ public Object getConnectionFactory() {
+ return null;
+ }
+
+ public DBDictionary getDBDictionaryInstance() {
+ DerbyDictionary dd = new DerbyDictionary();
+ Configurations.configureInstance(dd, this, "", "");
+ return dd;
+ }
+ private DataSource ds2;
+ @Override
+ public DataSource getDataSource2(StoreContext ctx) {
+
+ return ds2;
+ }
+}
diff --git a/sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/main/java/org/apache/tuscany/sca/implementation/openjpa/TuscanyManagerRuntime.java b/sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/main/java/org/apache/tuscany/sca/implementation/openjpa/TuscanyManagerRuntime.java
new file mode 100644
index 0000000000..2fb35f83a1
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/main/java/org/apache/tuscany/sca/implementation/openjpa/TuscanyManagerRuntime.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 org.apache.tuscany.sca.implementation.openjpa;
+import javax.transaction.SystemException;
+import javax.transaction.TransactionManager;
+
+import org.apache.openjpa.ee.ManagedRuntime;
+
+public class TuscanyManagerRuntime implements ManagedRuntime{
+ public TuscanyManagerRuntime(TransactionManager tm){
+ this.tm = tm;
+ }
+ public Throwable getRollbackCause() throws Exception {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public Object getTransactionKey() throws Exception, SystemException {
+ // TODO Auto-generated method stub
+ return "Geng";
+ }
+ private TransactionManager tm;
+ public TransactionManager getTransactionManager() throws Exception {
+
+
+ return tm;
+ }
+
+ public void setRollbackOnly(Throwable cause) throws Exception {
+ // TODO Auto-generated method stub
+
+ }
+
+}
diff --git a/sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/main/java/org/apache/tuscany/sca/implementation/openjpa/TuscanyStoreManager.java b/sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/main/java/org/apache/tuscany/sca/implementation/openjpa/TuscanyStoreManager.java
new file mode 100644
index 0000000000..441ba666d7
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/main/java/org/apache/tuscany/sca/implementation/openjpa/TuscanyStoreManager.java
@@ -0,0 +1,49 @@
+/*
+ * 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 org.apache.tuscany.sca.implementation.openjpa;
+
+import java.sql.Connection;
+import java.sql.SQLException;
+
+import javax.sql.XAConnection;
+
+import org.apache.openjpa.jdbc.kernel.JDBCStoreManager;
+
+public class TuscanyStoreManager extends JDBCStoreManager {
+ private XAConnection xaconn;
+
+ public TuscanyStoreManager(XAConnection xaconn) {
+ this.xaconn = xaconn;
+ }
+
+ protected _RefCountConnection connectInternal() throws SQLException {
+ Connection conn = xaconn.getConnection();
+ // conn.setAutoCommit(false);
+ _RefCountConnection rc = new _RefCountConnection(conn);
+ return rc;
+ }
+
+ class _RefCountConnection extends RefCountConnection {
+ public _RefCountConnection(Connection conn) {
+
+ super(conn);
+ }
+ }
+}
diff --git a/sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/main/java/org/apache/tuscany/sca/implementation/openjpa/impl/JPAImplementationFactoryImpl.java b/sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/main/java/org/apache/tuscany/sca/implementation/openjpa/impl/JPAImplementationFactoryImpl.java
new file mode 100644
index 0000000000..2a7d1abd70
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/main/java/org/apache/tuscany/sca/implementation/openjpa/impl/JPAImplementationFactoryImpl.java
@@ -0,0 +1,39 @@
+/*
+ * 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 org.apache.tuscany.sca.implementation.openjpa.impl;
+
+import org.apache.tuscany.sca.assembly.AssemblyFactory;
+import org.apache.tuscany.sca.implementation.openjpa.*;
+import org.apache.tuscany.sca.interfacedef.java.JavaInterfaceFactory;
+
+public class JPAImplementationFactoryImpl implements JPAImplementationFactory {
+ private AssemblyFactory assemblyFactory;
+ private JavaInterfaceFactory javaFactory;
+
+ public JPAImplementationFactoryImpl(AssemblyFactory aF, JavaInterfaceFactory javaIF) {
+ this.assemblyFactory = aF;
+ this.javaFactory = javaIF;
+ }
+
+ public JPAImplementation createOpenJpaImplementation() {
+ return new JPAImplementationImpl(assemblyFactory, javaFactory);
+ }
+
+}
diff --git a/sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/main/java/org/apache/tuscany/sca/implementation/openjpa/impl/JPAImplementationImpl.java b/sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/main/java/org/apache/tuscany/sca/implementation/openjpa/impl/JPAImplementationImpl.java
new file mode 100644
index 0000000000..055ecd4a4d
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/main/java/org/apache/tuscany/sca/implementation/openjpa/impl/JPAImplementationImpl.java
@@ -0,0 +1,119 @@
+/*
+ * 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 org.apache.tuscany.sca.implementation.openjpa.impl;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.Properties;
+
+import javax.persistence.EntityManager;
+
+import org.apache.openjpa.persistence.PersistenceUnitInfoImpl;
+import org.apache.tuscany.sca.assembly.AssemblyFactory;
+import org.apache.tuscany.sca.assembly.ConstrainingType;
+import org.apache.tuscany.sca.assembly.Property;
+import org.apache.tuscany.sca.assembly.Reference;
+import org.apache.tuscany.sca.assembly.Service;
+import org.apache.tuscany.sca.implementation.openjpa.JPAImplementation;
+import org.apache.tuscany.sca.interfacedef.InvalidInterfaceException;
+import org.apache.tuscany.sca.interfacedef.java.JavaInterface;
+import org.apache.tuscany.sca.interfacedef.java.JavaInterfaceContract;
+import org.apache.tuscany.sca.interfacedef.java.JavaInterfaceFactory;
+
+public class JPAImplementationImpl implements JPAImplementation {
+ private Service jpaService;
+ private PersistenceUnitInfoImpl puii;
+ private Properties dsmeta;
+
+ public void setPersistenceUnitInfoImpl(PersistenceUnitInfoImpl puii) {
+ this.puii = puii;
+ }
+
+ public PersistenceUnitInfoImpl getPersistenceUnitInfoImpl() {
+ return this.puii;
+ }
+
+ public void setDataSourceMeta(Properties p) {
+ dsmeta = p;
+ }
+
+ public Properties getDataSourceMeta() {
+ return dsmeta;
+ }
+
+ JPAImplementationImpl(AssemblyFactory assemblyFactory, JavaInterfaceFactory javaFactory) {
+
+ jpaService = assemblyFactory.createService();
+ jpaService.setName("EntityManager");
+ JavaInterface javaInterface;
+ try {
+ javaInterface = javaFactory.createJavaInterface(EntityManager.class);
+ } catch (InvalidInterfaceException e) {
+ throw new IllegalArgumentException(e);
+ }
+ JavaInterfaceContract interfaceContract = javaFactory.createJavaInterfaceContract();
+ interfaceContract.setInterface(javaInterface);
+ jpaService.setInterfaceContract(interfaceContract);
+ }
+
+ public boolean isUnresolved() {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ public void setUnresolved(boolean unresolved) {
+ // TODO Auto-generated method stub
+
+ }
+
+ public ConstrainingType getConstrainingType() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public List<Property> getProperties() {
+ // TODO Auto-generated method stub
+ return Collections.emptyList();
+ }
+
+ public List<Reference> getReferences() {
+ return Collections.emptyList();
+ }
+
+ public List<Service> getServices() {
+ return Collections.singletonList(jpaService);
+ }
+
+ public String getURI() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public void setConstrainingType(ConstrainingType constrainingType) {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void setURI(String uri) {
+ // TODO Auto-generated method stub
+
+ }
+
+}
diff --git a/sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/main/java/org/apache/tuscany/sca/implementation/openjpa/provider/JPAImplementationProvider.java b/sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/main/java/org/apache/tuscany/sca/implementation/openjpa/provider/JPAImplementationProvider.java
new file mode 100644
index 0000000000..5a863a8ae7
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/main/java/org/apache/tuscany/sca/implementation/openjpa/provider/JPAImplementationProvider.java
@@ -0,0 +1,96 @@
+/*
+ * 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 org.apache.tuscany.sca.implementation.openjpa.provider;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.persistence.EntityManagerFactory;
+import javax.transaction.TransactionManager;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.openjpa.kernel.Bootstrap;
+import org.apache.openjpa.kernel.BrokerFactory;
+import org.apache.openjpa.persistence.JPAFacadeHelper;
+import org.apache.openjpa.persistence.PersistenceUnitInfoImpl;
+import org.apache.openjpa.persistence.PersistenceProductDerivation.ConfigurationProviderImpl;
+import org.apache.tuscany.sca.core.ExtensionPointRegistry;
+import org.apache.tuscany.sca.implementation.openjpa.JPAImplementation;
+import org.apache.tuscany.sca.interfacedef.Operation;
+import org.apache.tuscany.sca.invocation.Invoker;
+import org.apache.tuscany.sca.provider.ImplementationProvider;
+import org.apache.tuscany.sca.runtime.RuntimeComponent;
+import org.apache.tuscany.sca.runtime.RuntimeComponentService;
+
+public class JPAImplementationProvider implements ImplementationProvider {
+ private RuntimeComponent component;
+ private JPAImplementation implementation;
+ private EntityManagerFactory emf;
+ private TransactionManager tm;
+
+ public JPAImplementationProvider(RuntimeComponent component,
+ JPAImplementation implementation,
+ ExtensionPointRegistry extensionPoints) {
+ this.component = component;
+ this.implementation = implementation;
+ tm = (TransactionManager)extensionPoints.getExtensionPoint(org.apache.geronimo.transaction.manager.XAWork.class);
+
+ initEntityManager();
+ }
+
+ private void initEntityManager() {
+ Map map = new HashMap();
+ map.put("TransactionManager", tm);
+ PersistenceUnitInfoImpl _info = implementation.getPersistenceUnitInfoImpl();
+ _info.fromUserProperties(map);
+ ConfigurationProviderImpl cp = new ConfigurationProviderImpl();
+ cp.addProperties(_info.toOpenJPAProperties());
+ cp.addProperties(implementation.getDataSourceMeta());
+
+ BrokerFactory factory = Bootstrap.newBrokerFactory(cp, null);
+
+ emf = JPAFacadeHelper.toEntityManagerFactory(factory);
+
+ }
+
+ private Log log = LogFactory.getLog(this.getClass());
+
+ public Invoker createInvoker(RuntimeComponentService service, Operation operation) {
+
+ return new JPAInvoker(operation, emf, tm);
+ }
+
+ public void start() {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void stop() {
+ // TODO Auto-generated method stub
+
+ }
+
+ public boolean supportsOneWayInvocation() {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+}
diff --git a/sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/main/java/org/apache/tuscany/sca/implementation/openjpa/provider/JPAImplementationProviderFactory.java b/sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/main/java/org/apache/tuscany/sca/implementation/openjpa/provider/JPAImplementationProviderFactory.java
new file mode 100644
index 0000000000..e1e821113c
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/main/java/org/apache/tuscany/sca/implementation/openjpa/provider/JPAImplementationProviderFactory.java
@@ -0,0 +1,44 @@
+/*
+ * 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 org.apache.tuscany.sca.implementation.openjpa.provider;
+
+import org.apache.tuscany.sca.core.ExtensionPointRegistry;
+import org.apache.tuscany.sca.implementation.openjpa.JPAImplementation;
+import org.apache.tuscany.sca.provider.ImplementationProvider;
+import org.apache.tuscany.sca.provider.ImplementationProviderFactory;
+import org.apache.tuscany.sca.runtime.RuntimeComponent;
+
+public class JPAImplementationProviderFactory implements ImplementationProviderFactory<JPAImplementation> {
+ private ExtensionPointRegistry extensionPointRegistry;
+
+ public JPAImplementationProviderFactory(ExtensionPointRegistry extensionPoints) {
+ extensionPointRegistry = extensionPoints;
+ }
+
+ public ImplementationProvider createImplementationProvider(RuntimeComponent component,
+ JPAImplementation implementation) {
+ return new JPAImplementationProvider(component, implementation, extensionPointRegistry);
+ }
+
+ public Class<JPAImplementation> getModelType() {
+ return JPAImplementation.class;
+ }
+
+}
diff --git a/sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/main/java/org/apache/tuscany/sca/implementation/openjpa/provider/JPAInvoker.java b/sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/main/java/org/apache/tuscany/sca/implementation/openjpa/provider/JPAInvoker.java
new file mode 100644
index 0000000000..8b74209d3e
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/main/java/org/apache/tuscany/sca/implementation/openjpa/provider/JPAInvoker.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 org.apache.tuscany.sca.implementation.openjpa.provider;
+
+import java.lang.reflect.Method;
+
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.transaction.TransactionManager;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.tuscany.sca.interfacedef.Operation;
+import org.apache.tuscany.sca.interfacedef.java.impl.JavaInterfaceUtil;
+import org.apache.tuscany.sca.invocation.Invoker;
+import org.apache.tuscany.sca.invocation.Message;
+
+public class JPAInvoker implements Invoker {
+ private Operation operation;
+ private TransactionManager tm;
+
+ public JPAInvoker(Operation operation, EntityManagerFactory emf, TransactionManager tm) {
+ this.operation = operation;
+ this.tm = tm;
+ this.emf = emf;
+ }
+
+ private Log log = LogFactory.getLog(this.getClass());
+ private EntityManagerFactory emf;
+
+ public Message invoke(Message msg) {
+ try {
+ tm.begin();
+ Method method = JavaInterfaceUtil.findMethod(EntityManager.class, operation);
+ Object r = method.invoke(emf.createEntityManager(), (Object[])msg.getBody());
+ tm.commit();
+ log.info(method);
+ msg.setBody(r);
+ return msg;
+ } catch (Exception ex) {
+ throw new RuntimeException(ex);
+
+ }
+ }
+
+}
diff --git a/sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor b/sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor
new file mode 100644
index 0000000000..8c82832e01
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor
@@ -0,0 +1,19 @@
+# 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.
+
+# Implementation class for the artifact processor extension
+org.apache.tuscany.sca.implementation.openjpa.JPAImplementationProcessor;qname=http://tuscany.apache.org/xmlns/sca/1.0#implementation.data.pojo,model=org.apache.tuscany.sca.implementation.openjpa.JPAImplementation \ No newline at end of file
diff --git a/sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/main/resources/META-INF/services/org.apache.tuscany.sca.implementation.openjpa.OpenJpaImplementationFactory b/sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/main/resources/META-INF/services/org.apache.tuscany.sca.implementation.openjpa.OpenJpaImplementationFactory
new file mode 100644
index 0000000000..13067543c9
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/main/resources/META-INF/services/org.apache.tuscany.sca.implementation.openjpa.OpenJpaImplementationFactory
@@ -0,0 +1,18 @@
+# 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.
+
+org.apache.tuscany.sca.implementation.openjpa.impl.JPAImplementationFactoryImpl \ No newline at end of file
diff --git a/sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/main/resources/META-INF/services/org.apache.tuscany.sca.provider.ImplementationProviderFactory b/sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/main/resources/META-INF/services/org.apache.tuscany.sca.provider.ImplementationProviderFactory
new file mode 100644
index 0000000000..fb62ff853b
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/main/resources/META-INF/services/org.apache.tuscany.sca.provider.ImplementationProviderFactory
@@ -0,0 +1,19 @@
+# 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.
+
+# Implementation class for the implementation extension
+org.apache.tuscany.sca.implementation.openjpa.provider.JPAImplementationProviderFactory;model=org.apache.tuscany.sca.implementation.openjpa.JPAImplementation \ No newline at end of file
diff --git a/sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/test/java/company/Company.java b/sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/test/java/company/Company.java
new file mode 100644
index 0000000000..3ea6e65c0d
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/test/java/company/Company.java
@@ -0,0 +1,47 @@
+/*
+ * 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 company;
+
+import javax.persistence.*;
+
+@Entity
+public class Company {
+ @Id private int id;
+ @Basic private String name;
+
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int i) {
+ id = i;
+ }
+
+ public String getName() {
+ return this.name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String toString() {
+ return "Company (" + getId() + ") is is " + getName();
+ }
+}
diff --git a/sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/test/java/company/CompanyCollection.java b/sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/test/java/company/CompanyCollection.java
new file mode 100644
index 0000000000..b74f53aa8b
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/test/java/company/CompanyCollection.java
@@ -0,0 +1,25 @@
+/*
+ * 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 company;
+
+import org.apache.tuscany.sca.implementation.data.collection.Collection;
+
+public interface CompanyCollection extends Collection<String, Company> {
+
+}
diff --git a/sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/test/java/company/CompanyCollectionImpl.java b/sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/test/java/company/CompanyCollectionImpl.java
new file mode 100644
index 0000000000..385defeb0b
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/test/java/company/CompanyCollectionImpl.java
@@ -0,0 +1,100 @@
+/*
+ * 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 company;
+
+import java.util.Iterator;
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.EntityTransaction;
+import javax.persistence.Persistence;
+import javax.persistence.Query;
+
+import org.apache.tuscany.sca.implementation.data.collection.Entry;
+import org.apache.tuscany.sca.implementation.data.collection.NotFoundException;
+
+public class CompanyCollectionImpl implements CompanyCollection {
+ EntityManagerFactory emf = null;
+ EntityManager em = null;
+
+ public CompanyCollectionImpl() {
+ System.out.println(">>>");
+ try {
+ emf = Persistence.createEntityManagerFactory("company-openJPA");
+ em = emf.createEntityManager();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ public void delete(String arg0) throws NotFoundException {
+ // TODO Auto-generated method stub
+
+ }
+
+ public Company get(String arg0) throws NotFoundException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public Entry<String, Company>[] getAll() {
+ EntityTransaction tx = em.getTransaction();
+ try {
+ tx.begin();
+
+ Query q = em.createQuery("SELECT c FROM company c");
+ List results = q.getResultList();
+ Iterator iter = results.iterator();
+ while (iter.hasNext()) {
+ Company company = (Company)iter.next();
+
+ System.out.println(company);
+ }
+
+ tx.commit();
+ } catch(Exception e) {
+ e.printStackTrace();
+ } finally {
+ if (tx.isActive()) {
+ tx.rollback();
+ }
+
+ em.close();
+ }
+
+ return null;
+ }
+
+ public String post(String arg0, Company arg1) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public void put(String arg0, Company arg1) throws NotFoundException {
+ // TODO Auto-generated method stub
+
+ }
+
+ public Entry<String, Company>[] query(String arg0) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+}
diff --git a/sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/test/java/org/apache/tuscany/sca/implementation/openjpa/CompanyCollectionTestCase.java b/sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/test/java/org/apache/tuscany/sca/implementation/openjpa/CompanyCollectionTestCase.java
new file mode 100644
index 0000000000..bc9fbb3543
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/test/java/org/apache/tuscany/sca/implementation/openjpa/CompanyCollectionTestCase.java
@@ -0,0 +1,44 @@
+/*
+ * 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 org.apache.tuscany.sca.implementation.openjpa;
+
+import junit.framework.TestCase;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import company.CompanyCollection;
+import company.CompanyCollectionImpl;
+
+public class CompanyCollectionTestCase extends TestCase {
+ private Log log = LogFactory.getLog(this.getClass());
+ private CompanyCollection collection = null;
+
+ public void setUp() {
+ collection = new CompanyCollectionImpl();
+ }
+
+ public void testGetAll() {
+ collection.getAll();
+ }
+
+ public void tearDown() {
+
+ }
+}
diff --git a/sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/test/java/org/apache/tuscany/sca/implementation/openjpa/CompanyTestCase.java b/sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/test/java/org/apache/tuscany/sca/implementation/openjpa/CompanyTestCase.java
new file mode 100644
index 0000000000..1c4d6fb254
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/test/java/org/apache/tuscany/sca/implementation/openjpa/CompanyTestCase.java
@@ -0,0 +1,80 @@
+/*
+ * 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 org.apache.tuscany.sca.implementation.openjpa;
+
+import junit.framework.*;
+import org.apache.tuscany.sca.host.embedded.*;
+import org.apache.commons.logging.*;
+
+import company.*;
+
+import javax.persistence.*;
+import java.util.*;
+
+public class CompanyTestCase extends TestCase {
+ private EntityManager em;
+ private Log log = LogFactory.getLog(this.getClass());
+ private SCADomain domain;
+
+ public void setUp() {
+ domain = SCADomain.newInstance("openjpa.composite");
+ em = domain.getService(EntityManager.class, "CompanyServiceComponent");
+
+ }
+
+ public void testAccess() {
+ Company company = new Company();
+ int id = new Random().nextInt();
+
+ company.setId(id);
+ company.setName("Company " + id);
+
+ em.persist(company);
+ log.info(em.find(Company.class, id));
+
+ Query q = em.createQuery("select company from Company company");
+ q.setMaxResults(5);
+ log.info("There are " + q.getResultList().size() + " Company in the database now");
+ }
+
+ public void testRollback() {
+ try {
+ Company company1 = new Company();
+ Company company2 = new Company();
+
+ int id = new Random().nextInt();
+
+ company1.setId(id);
+ company1.setName("Company " + id);
+ em.persist(company1);
+
+ company2.setId(id);
+ company2.setName("Company " + id);
+ em.persist(company2);
+
+ } catch (RuntimeException ex) {
+ log.info("An expected exception occured, Tuscany is rolling back...");
+ }
+ }
+
+ public void tearDown() {
+ em.close();
+ domain.close();
+ }
+}
diff --git a/sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/test/resources/META-INF/orm.xml b/sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/test/resources/META-INF/orm.xml
new file mode 100644
index 0000000000..75e329964f
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/test/resources/META-INF/orm.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.
+-->
+
+<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm http://java.sun.com/xml/ns/persistence/orm_1_0.xsd"
+ version="1.0">
+ <entity class="company.Company" name="company">
+ <table name="COMPANY"/>
+ <attributes>
+ <id name="id">
+ <generated-value strategy="TABLE"/>
+ </id>
+ <basic name="name">
+ <column name="NAME" length="30"/>
+ </basic>
+ </attributes>
+ </entity>
+</entity-mappings> \ No newline at end of file
diff --git a/sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/test/resources/META-INF/persistence.xml b/sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/test/resources/META-INF/persistence.xml
new file mode 100644
index 0000000000..302fbfe845
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/test/resources/META-INF/persistence.xml
@@ -0,0 +1,40 @@
+<?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.
+-->
+
+<persistence xmlns="http://java.sun.com/xml/ns/persistence"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
+ http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0">
+
+ <persistence-unit name="company-openJPA">
+ <!--mapping-file>orm.xml</mapping-file-->
+ <class>company.Company</class>
+
+ <properties>
+ <property name="openjpa.ConnectionDriverName" value="org.apache.derby.jdbc.EmbeddedDriver"/>
+ <property name="openjpa.ConnectionURL" value="jdbc:derby:target/test-classes/company"/>
+ <property name="openjpa.ConnectionUserName" value=""/>
+ <property name="openjpa.ConnectionPassword" value=""/>
+
+ <property name="openjpa.Log" value="DefaultLevel=TRACE, Tool=TRACE"/>
+ </properties>
+ </persistence-unit>
+
+</persistence> \ No newline at end of file
diff --git a/sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/test/resources/company.composite b/sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/test/resources/company.composite
new file mode 100755
index 0000000000..fd164d2519
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/modules/implementation-data-pojo/src/test/resources/company.composite
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+ * 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:tuscany="http://tuscany.apache.org/xmlns/sca/1.0"
+ targetNamespace="http://sample/openjpa"
+ name="company">
+
+ <component name="CompanyServiceComponent">
+ <tuscany:implementation.data.pojo>
+
+ <tuscany:persistence-unit name="company">
+ <tuscany:openjpa.BrokerFactory>org.apache.tuscany.sca.implementation.openjpa.TuscanyBrokerFactory</tuscany:openjpa.BrokerFactory>
+ <tuscany:openjpa.TransactionMode>managed</tuscany:openjpa.TransactionMode>
+ <tuscany:openjpa.Log>DefaultLevel=WARN,SQL=TRACE</tuscany:openjpa.Log>
+ <tuscany:openjpa.jdbc.SynchronizeMappings>buildSchema</tuscany:openjpa.jdbc.SynchronizeMappings>
+
+ <tuscany:class>company.Company</tuscany:class>
+ </tuscany:persistence-unit>
+
+ <tuscany:connectionInfo>
+ <tuscany:connectionProperties
+ driverClass="org.apache.derby.jdbc.EmbeddedDriver"
+ databaseURL="jdbc:derby:target/test-classes/company; create = true"
+ loginTimeout="600000"/>
+ </tuscany:connectionInfo>
+ </tuscany:implementation.data.pojo>
+ </component>
+
+</composite>
diff --git a/sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/README b/sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/README
new file mode 100644
index 0000000000..9f041f4ecb
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/README
@@ -0,0 +1,118 @@
+Calculator Sample
+=================
+This sample uses the same code as the calculator sample but deploys the
+sample wrapped in a web app.
+
+The README in the samples directory (the directory above this) provides
+general instructions about building and running samples. Take a look there
+first.
+
+As this sample provides a web app there is a manual step where the WAR file
+that contains the sample is copied to your web app container. If you just want
+to give this sample a go deploy the WAR file (target/sample-calculator-webapp.war)
+to you web application server.
+
+Once the web app is deployed use your browser to visit the following URL;
+
+http://localhost.localdomain:8080/sample-calculator-jsf-webapp/faces/calc_jsf.jsp
+
+The port and hostname will of course vary depending on your local installation.
+
+Sample Overview
+---------------
+The sample provides a single calculator service with a default SCA (java)
+binding. The CalculatorClient exercises this interface by calling add,
+subtract, multiply and divide operations. This results in messages passing to
+the appropriate components in the composite across the local wires.
+
+calculator-webapp/
+ src/
+ main/
+ java/
+ calculator/
+ CalculatorService.java - As calculator sample
+ CalculatorServiceImpl.java
+ AddService.java - As calculator sample
+ AddServiceImpl.java
+ SubtractService.java - As calculator sample
+ SubtractServiceImpl.java
+ MultiplyService.java - As calculator sample
+ MultiplyServiceImpl.java
+ DivideService.java - As calculator sample
+ DivideServiceImpl.java
+ CalculatorClient.java - As calculator sample
+ resources/
+ Calculator.composite - As calculator sample
+ webapp
+ META-INF/
+ sca-contribution.xml - specifies the composite to be deployed
+ WEB-INF/
+ web.xml - defines the listener that starts up the
+ Tuscany SCA runtime
+ calc.jsp - the web application that makes use of the
+ SCA application
+ test/
+ java/
+ calculator/
+ CalculatorTestCase.java - JUnit test case
+
+ calculator.png - a pictorial representation of the sample .composite file
+ build.xml - the Ant build file
+ pom.xml - the Maven build file
+
+Building And Running The Sample Using Ant
+-----------------------------------------
+With the binary distribution the sample can be built using Ant as
+follows
+
+cd calculator-webapp
+ant package
+
+This should result in a war file (sample-calculator-webapp.war) in the target
+directory. Copy this war file to your web app deployment directory in you
+web app container.
+
+The process for getting the web app running will depend on which web app container
+you are using. For example, if you are using Tomcat then it is simply a matter
+of copying the WAR file to the webapps directory.
+
+Once the web app is deployed use your browser to visit the following URL;
+
+http://localhost:8080/sample-calculator-webapp/calc.jsp
+
+The port and hostname will of course vary depending on your local installation.
+
+You should see the following output.
+
+Expression Result
+2 + 3 5.0
+3 - 2 1.0
+3 * 2 6.0
+3 / 2 1.5
+
+Building And Running The Sample Using Maven
+-------------------------------------------
+With either the binary or source distributions the sample can be built and run
+using Maven as follows.
+
+cd calculator-webapp
+mvn
+
+
+You should see the following output from the test phase.
+
+-------------------------------------------------------
+ T E S T S
+-------------------------------------------------------
+Running calculator.CalculatorTestCase
+Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.852 sec
+
+Results :
+
+Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
+
+Again this should result in a war file (sample-calculator-webapp.war) in the target
+directory. Follow the steps described in the previous section for running the web
+app and for the expected results.
+
+
diff --git a/sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/build.xml b/sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/build.xml
new file mode 100644
index 0000000000..11b30c48d2
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/build.xml
@@ -0,0 +1,137 @@
+<!--
+ * 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="sample-calculator-jsf-webapp" default="compile">
+
+ <target name="compile">
+ <mkdir dir="target/classes"/>
+ <javac destdir="target/classes" debug="on" source="1.5" target="1.5">
+ <src path="src/main/java"/>
+ <classpath>
+ <fileset refid="tuscany.jars"/>
+ <fileset refid="3rdparty.jars"/>
+ </classpath>
+ </javac>
+ <copy todir="target/classes">
+ <fileset dir="src/main/resources"/>
+ <fileset dir="." includes="*" excludes="src, target, pom.xml, build.xml"/>
+ </copy>
+ <war destfile="target/sample-calculator-jsf-webapp.war" webxml="src/main/webapp/WEB-INF/web.xml">
+ <fileset dir="src/main/webapp"/>
+ <lib refid="tuscany.jars"/>
+ <lib refid="3rdparty.jars"/>
+ <classes dir="target/classes"/>
+ </war>
+ </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.2-incubating-SNAPSHOT.jar"/>
+ <include name="tuscany-assembly-xml-1.2-incubating-SNAPSHOT.jar"/>
+ <include name="tuscany-assembly-xsd-1.2-incubating-SNAPSHOT.jar"/>
+ <include name="tuscany-binding-sca-1.2-incubating-SNAPSHOT.jar"/>
+ <include name="tuscany-binding-sca-xml-1.2-incubating-SNAPSHOT.jar"/>
+ <include name="tuscany-contribution-1.2-incubating-SNAPSHOT.jar"/>
+ <include name="tuscany-contribution-impl-1.2-incubating-SNAPSHOT.jar"/>
+ <include name="tuscany-contribution-java-1.2-incubating-SNAPSHOT.jar"/>
+ <include name="tuscany-contribution-namespace-1.2-incubating-SNAPSHOT.jar"/>
+ <include name="tuscany-contribution-xml-1.2-incubating-SNAPSHOT.jar"/>
+ <include name="tuscany-core-1.2-incubating-SNAPSHOT.jar"/>
+ <include name="tuscany-core-databinding-1.2-incubating-SNAPSHOT.jar"/>
+ <include name="tuscany-core-spi-1.2-incubating-SNAPSHOT.jar"/>
+ <include name="tuscany-databinding-1.2-incubating-SNAPSHOT.jar"/>
+ <include name="tuscany-databinding-jaxb-1.2-incubating-SNAPSHOT.jar"/>
+ <include name="tuscany-definitions-1.2-incubating-SNAPSHOT.jar"/>
+ <include name="tuscany-definitions-xml-1.2-incubating-SNAPSHOT.jar"/>
+ <include name="tuscany-domain-1.2-incubating-SNAPSHOT.jar"/>
+ <include name="tuscany-domain-api-1.2-incubating-SNAPSHOT.jar"/>
+ <include name="tuscany-host-embedded-1.2-incubating-SNAPSHOT.jar"/>
+ <include name="tuscany-host-http-1.2-incubating-SNAPSHOT.jar"/>
+ <include name="tuscany-host-webapp-1.2-incubating-SNAPSHOT.jar"/>
+ <include name="tuscany-implementation-java-1.2-incubating-SNAPSHOT.jar"/>
+ <include name="tuscany-implementation-java-runtime-1.2-incubating-SNAPSHOT.jar"/>
+ <include name="tuscany-implementation-java-xml-1.2-incubating-SNAPSHOT.jar"/>
+ <include name="tuscany-interface-1.2-incubating-SNAPSHOT.jar"/>
+ <include name="tuscany-interface-java-1.2-incubating-SNAPSHOT.jar"/>
+ <include name="tuscany-interface-java-jaxws-1.2-incubating-SNAPSHOT.jar"/>
+ <include name="tuscany-interface-java-xml-1.2-incubating-SNAPSHOT.jar"/>
+ <include name="tuscany-node-1.2-incubating-SNAPSHOT.jar"/>
+ <include name="tuscany-node-api-1.2-incubating-SNAPSHOT.jar"/>
+ <include name="tuscany-policy-1.2-incubating-SNAPSHOT.jar"/>
+ <include name="tuscany-policy-logging-1.2-incubating-SNAPSHOT.jar"/>
+ <include name="tuscany-policy-security-1.2-incubating-SNAPSHOT.jar"/>
+ <include name="tuscany-policy-xml-1.2-incubating-SNAPSHOT.jar"/>
+ <include name="tuscany-sca-api-1.2-incubating-SNAPSHOT.jar"/>
+ </fileset>
+ <fileset id="3rdparty.jars" dir="../../lib">
+ <include name="XmlSchema-1.3.2.jar"/>
+ <include name="activation-1.1.jar"/>
+ <include name="annogen-0.1.0.jar"/>
+ <include name="axiom-api-1.2.5.jar"/>
+ <include name="axiom-dom-1.2.5.jar"/>
+ <include name="axiom-impl-1.2.5.jar"/>
+ <include name="axis2-kernel-1.3.jar"/>
+ <include name="backport-util-concurrent-2.2.jar"/>
+ <include name="cglib-nodep-2.1_3.jar"/>
+ <include name="commons-beanutils-1.7.0.jar"/>
+ <include name="commons-codec-1.3.jar"/>
+ <include name="commons-collections-3.1.jar"/>
+ <include name="commons-digester-1.6.jar"/>
+ <include name="commons-el-1.0.jar"/>
+ <include name="commons-fileupload-1.1.1.jar"/>
+ <include name="commons-httpclient-3.0.1.jar"/>
+ <include name="commons-io-1.2.jar"/>
+ <include name="commons-lang-2.1.jar"/>
+ <include name="commons-logging-1.0.4.jar"/>
+ <include name="geronimo-commonj_1.1_spec-1.0.jar"/>
+ <include name="geronimo-jms_1.1_spec-1.1.jar"/>
+ <include name="httpcore-4.0-alpha5.jar"/>
+ <include name="httpcore-nio-4.0-alpha5.jar"/>
+ <include name="httpcore-niossl-4.0-alpha5.jar"/>
+ <include name="jaxb-api-2.1.jar"/>
+ <include name="jaxb-impl-2.1.6.jar"/>
+ <include name="jaxb2-reflection-2.1.4.jar"/>
+ <include name="jaxen-1.1-beta-9.jar"/>
+ <include name="jaxws-api-2.1.jar"/>
+ <include name="jsr181-api-1.0-MR1.jar"/>
+ <include name="jsr250-api-1.0.jar"/>
+ <include name="jstl-1.1.0.jar"/>
+ <include name="mail-1.4.jar"/>
+ <include name="myfaces-api-1.1.5.jar"/>
+ <include name="myfaces-impl-1.1.5.jar"/>
+ <include name="neethi-2.0.2.jar"/>
+ <include name="saaj-api-1.3.jar"/>
+ <include name="stax-api-1.0-2.jar"/>
+ <include name="stax-api-1.0.1.jar"/>
+ <include name="woden-1.0-incubating-M7b.jar"/>
+ <include name="wsdl4j-1.6.2.jar"/>
+ <include name="wstx-asl-3.2.1.jar"/>
+ <include name="xalan-2.7.0.jar"/>
+ <include name="xercesImpl-2.8.1.jar"/>
+ <include name="xml-apis-1.3.03.jar"/>
+ </fileset>
+
+</project>
diff --git a/sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/calculator-web.png b/sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/calculator-web.png
new file mode 100644
index 0000000000..896ddc4093
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/calculator-web.png
Binary files differ
diff --git a/sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/calculator-web.svg b/sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/calculator-web.svg
new file mode 100644
index 0000000000..00ed27556f
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/calculator-web.svg
@@ -0,0 +1,358 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+ * 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.
+-->
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="1052.3622"
+ height="744.09448"
+ id="svg2"
+ sodipodi:version="0.32"
+ inkscape:version="0.44"
+ sodipodi:docbase="C:\simon\Projects\Tuscany\java\java-head\sca\samples\calculator-web"
+ sodipodi:docname="calculator-web.svg"
+ version="1.0"
+ inkscape:export-filename="C:\simon\Projects\Tuscany\java\java-head\sca\samples\calculator-web\calculator-web.png"
+ inkscape:export-xdpi="52.84"
+ inkscape:export-ydpi="52.84">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ gridtolerance="10000"
+ guidetolerance="10"
+ objecttolerance="10"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1.4"
+ inkscape:cx="471.80491"
+ inkscape:cy="378.84265"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ inkscape:window-width="1054"
+ inkscape:window-height="721"
+ inkscape:window-x="59"
+ inkscape:window-y="79" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <g
+ id="g2997"
+ transform="matrix(1,0,0,1.144214,0,-27.53557)">
+ <rect
+ rx="15.307091"
+ ry="12.692303"
+ y="192.00233"
+ x="258.31146"
+ height="299.99988"
+ width="495.71429"
+ id="rect2067"
+ style="opacity:1;fill:#90baf4;fill-opacity:1;stroke:#060000;stroke-width:1.86971939;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <flowRoot
+ id="flowRoot2954"
+ xml:space="preserve"><flowRegion
+ id="flowRegion2956"><rect
+ y="212.66591"
+ x="281.42856"
+ height="61.42857"
+ width="170"
+ id="rect2958" /></flowRegion><flowPara
+ id="flowPara2960">Calculator</flowPara></flowRoot> </g>
+ <rect
+ style="fill:#317fed;fill-opacity:1;stroke:#060000;stroke-width:1.9999994;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect2988"
+ width="115.66247"
+ height="191.57716"
+ x="339.91632"
+ y="262.1673"
+ rx="6.9961648"
+ ry="15.892869" />
+ <flowRoot
+ xml:space="preserve"
+ id="flowRoot2966"
+ transform="translate(79.61125,62.65764)"><flowRegion
+ id="flowRegion2968"><rect
+ id="rect2970"
+ width="170"
+ height="61.42857"
+ x="281.42856"
+ y="212.66591" /></flowRegion><flowPara
+ id="flowPara2972">Calculator</flowPara><flowPara
+ id="flowPara1895">Service</flowPara><flowPara
+ id="flowPara1897">Component</flowPara></flowRoot> <path
+ style="fill:#5b9d05;fill-opacity:1;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 322.76581,342.58603 L 356.10085,342.58603 L 362.16176,355.71801 L 355.0907,367.83985 L 322.76581,367.83985 L 330.34196,355.71801 L 322.76581,342.58603 z "
+ id="path3017" />
+ <path
+ style="fill:#ae62bf;fill-opacity:1;fill-rule:evenodd;stroke:black;stroke-width:0.99999982px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 431.01809,321.46204 L 471.00147,321.46204 L 478.27117,334.59402 L 469.78986,346.71586 L 431.01809,346.71586 L 440.10523,334.59402 L 431.01809,321.46204 z "
+ id="path3019" />
+ <path
+ style="fill:#5b9d05;fill-opacity:1;fill-rule:evenodd;stroke:black;stroke-width:1.00000024px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 223.15923,328.61046 L 282.4833,328.61046 L 293.26948,355.48529 L 280.68561,380.29286 L 223.15923,380.29286 L 236.64198,355.48529 L 223.15923,328.61046 z "
+ id="path1883" />
+ <flowRoot
+ xml:space="preserve"
+ id="flowRoot1885"
+ transform="translate(-46.16225,128.7269)"
+ style="font-family:Bitstream Vera Sans;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal;font-size:11;text-anchor:start;text-align:start;writing-mode:lr;line-height:125%"><flowRegion
+ id="flowRegion1887"><rect
+ id="rect1889"
+ width="170"
+ height="61.42857"
+ x="281.42856"
+ y="212.66591"
+ style="font-family:Bitstream Vera Sans;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal;font-size:11;text-anchor:start;text-align:start;writing-mode:lr;line-height:125%" /></flowRegion><flowPara
+ id="flowPara1891">Calculator</flowPara><flowPara
+ id="flowPara1893">Service</flowPara></flowRoot> <rect
+ style="fill:#317fed;fill-opacity:1;stroke:#060000;stroke-width:2.00000024;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect1899"
+ width="115.66247"
+ height="70.148659"
+ x="594.75488"
+ y="209.73451"
+ rx="6.9961648"
+ ry="5.8193965" />
+ <flowRoot
+ xml:space="preserve"
+ id="flowRoot1901"
+ transform="translate(334.4498,10.22481)"><flowRegion
+ id="flowRegion1903"><rect
+ id="rect1905"
+ width="170"
+ height="61.42857"
+ x="281.42856"
+ y="212.66591" /></flowRegion><flowPara
+ id="flowPara1907">Add</flowPara><flowPara
+ id="flowPara1909">Service</flowPara><flowPara
+ id="flowPara1911">Component</flowPara></flowRoot> <path
+ style="fill:#5b9d05;fill-opacity:1;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 573.31867,232.29606 L 606.65371,232.29606 L 612.71462,245.42804 L 605.64356,257.54988 L 573.31867,257.54988 L 580.89482,245.42804 L 573.31867,232.29606 z "
+ id="path1913" />
+ <rect
+ style="fill:#317fed;fill-opacity:1;stroke:#060000;stroke-width:2.00000024;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect1917"
+ width="115.66247"
+ height="70.148659"
+ x="594.06543"
+ y="292.59158"
+ rx="6.9961648"
+ ry="5.8193965" />
+ <flowRoot
+ xml:space="preserve"
+ id="flowRoot1919"
+ transform="translate(333.7604,93.08188)"><flowRegion
+ id="flowRegion1921"><rect
+ id="rect1923"
+ width="170"
+ height="61.42857"
+ x="281.42856"
+ y="212.66591" /></flowRegion><flowPara
+ id="flowPara1925">Subtract</flowPara><flowPara
+ id="flowPara1927">Service</flowPara><flowPara
+ id="flowPara1929">Component</flowPara></flowRoot> <path
+ style="fill:#5b9d05;fill-opacity:1;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 572.62924,315.15313 L 605.96428,315.15313 L 612.02519,328.28511 L 604.95413,340.40695 L 572.62924,340.40695 L 580.20539,328.28511 L 572.62924,315.15313 z "
+ id="path1931" />
+ <rect
+ style="fill:#317fed;fill-opacity:1;stroke:#060000;stroke-width:2.00000024;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect1933"
+ width="115.66247"
+ height="70.148659"
+ x="594.77979"
+ y="371.87729"
+ rx="6.9961648"
+ ry="5.8193965" />
+ <flowRoot
+ xml:space="preserve"
+ id="flowRoot1935"
+ transform="translate(334.4747,172.3676)"><flowRegion
+ id="flowRegion1937"><rect
+ id="rect1939"
+ width="170"
+ height="61.42857"
+ x="281.42856"
+ y="212.66591" /></flowRegion><flowPara
+ id="flowPara1941">Multiply</flowPara><flowPara
+ id="flowPara1943">Service</flowPara><flowPara
+ id="flowPara1945">Component</flowPara></flowRoot> <path
+ style="fill:#5b9d05;fill-opacity:1;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 573.34352,394.43884 L 606.67856,394.43884 L 612.73947,407.57082 L 605.66841,419.69266 L 573.34352,419.69266 L 580.91967,407.57082 L 573.34352,394.43884 z "
+ id="path1947" />
+ <rect
+ style="fill:#317fed;fill-opacity:1;stroke:#060000;stroke-width:2.00000024;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect1949"
+ width="115.66247"
+ height="70.148659"
+ x="596.20831"
+ y="452.59158"
+ rx="6.9961648"
+ ry="5.8193965" />
+ <flowRoot
+ xml:space="preserve"
+ id="flowRoot1951"
+ transform="translate(335.9032,253.0819)"><flowRegion
+ id="flowRegion1953"><rect
+ id="rect1955"
+ width="170"
+ height="61.42857"
+ x="281.42856"
+ y="212.66591" /></flowRegion><flowPara
+ id="flowPara1957">Divide</flowPara><flowPara
+ id="flowPara1959">Service</flowPara><flowPara
+ id="flowPara1961">Component</flowPara></flowRoot> <path
+ style="fill:#5b9d05;fill-opacity:1;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 574.77209,475.15313 L 608.10713,475.15313 L 614.16804,488.28511 L 607.09698,500.40695 L 574.77209,500.40695 L 582.34824,488.28511 L 574.77209,475.15313 z "
+ id="path1963" />
+ <flowRoot
+ xml:space="preserve"
+ id="flowRoot1965"
+ transform="translate(161.0221,114.967)"
+ style="font-size:8px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;font-family:Bitstream Vera Sans"><flowRegion
+ id="flowRegion1967"><rect
+ id="rect1969"
+ width="170"
+ height="61.42857"
+ x="281.42856"
+ y="212.66591"
+ style="font-size:8px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;font-family:Bitstream Vera Sans" /></flowRegion><flowPara
+ id="flowPara1973">add</flowPara><flowPara
+ id="flowPara1977">Service</flowPara></flowRoot> <path
+ style="fill:#ae62bf;fill-opacity:1;fill-rule:evenodd;stroke:black;stroke-width:0.99999982px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 430.65917,357.18186 L 470.64255,357.18186 L 477.91225,370.31384 L 469.43094,382.43568 L 430.65917,382.43568 L 439.74631,370.31384 L 430.65917,357.18186 z "
+ id="path1979" />
+ <flowRoot
+ xml:space="preserve"
+ id="flowRoot1981"
+ transform="translate(160.6632,150.6868)"
+ style="font-size:8px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;font-family:Bitstream Vera Sans"><flowRegion
+ id="flowRegion1983"><rect
+ id="rect1985"
+ width="170"
+ height="61.42857"
+ x="281.42856"
+ y="212.66591"
+ style="font-size:8px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;font-family:Bitstream Vera Sans" /></flowRegion><flowPara
+ id="flowPara1987">subtract</flowPara><flowPara
+ id="flowPara1989">Service</flowPara></flowRoot> <path
+ style="fill:#ae62bf;fill-opacity:1;fill-rule:evenodd;stroke:black;stroke-width:0.99999982px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 431.37346,390.75329 L 471.35684,390.75329 L 478.62654,403.88527 L 470.14523,416.00711 L 431.37346,416.00711 L 440.4606,403.88527 L 431.37346,390.75329 z "
+ id="path1991" />
+ <flowRoot
+ xml:space="preserve"
+ id="flowRoot1993"
+ transform="translate(161.3775,184.2583)"
+ style="font-size:8px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;font-family:Bitstream Vera Sans"><flowRegion
+ id="flowRegion1995"><rect
+ id="rect1997"
+ width="170"
+ height="61.42857"
+ x="281.42856"
+ y="212.66591"
+ style="font-size:8px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;font-family:Bitstream Vera Sans" /></flowRegion><flowPara
+ id="flowPara1999">multiply</flowPara><flowPara
+ id="flowPara2001">Service</flowPara></flowRoot> <path
+ style="fill:#ae62bf;fill-opacity:1;fill-rule:evenodd;stroke:black;stroke-width:0.99999982px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 429.94489,422.18186 L 469.92827,422.18186 L 477.19797,435.31384 L 468.71666,447.43568 L 429.94489,447.43568 L 439.03203,435.31384 L 429.94489,422.18186 z "
+ id="path2003" />
+ <flowRoot
+ xml:space="preserve"
+ id="flowRoot2005"
+ transform="translate(159.9489,215.6868)"
+ style="font-size:8px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;font-family:Bitstream Vera Sans"><flowRegion
+ id="flowRegion2007"><rect
+ id="rect2009"
+ width="170"
+ height="61.42857"
+ x="281.42856"
+ y="212.66591"
+ style="font-size:8px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;font-family:Bitstream Vera Sans" /></flowRegion><flowPara
+ id="flowPara2011">divide</flowPara><flowPara
+ id="flowPara2013">Service</flowPara></flowRoot> <path
+ style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 477.85714,335.52305 L 511.42857,335.52305 L 510.71429,245.52305 L 579.28571,245.52305"
+ id="path2015" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 477.85714,369.80877 L 528.57143,369.80877 L 528.57143,329.80877 L 580,329.80877"
+ id="path2017" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 478.57143,402.66591 L 528.57143,401.95163 L 528.57143,408.3802 L 580,407.66591"
+ id="path2019" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 475.71429,435.52305 L 509.28571,435.52305 L 510,486.95163 L 582.14286,486.23734"
+ id="path2021" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 292.85714,355.52305 L 330,354.80877"
+ id="path2023" />
+ <path
+ sodipodi:type="arc"
+ style="opacity:1;fill:#f19a9a;fill-opacity:1;stroke:#2e2424;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:3, 1;stroke-dashoffset:0;stroke-opacity:1"
+ id="path1950"
+ sodipodi:cx="179.28572"
+ sodipodi:cy="352.66592"
+ sodipodi:rx="32.857143"
+ sodipodi:ry="35"
+ d="M 197.59435,323.60313 A 32.857143,35 0 1 1 196.81963,323.06603"
+ sodipodi:start="5.3034219"
+ sodipodi:end="11.558474"
+ sodipodi:open="true"
+ transform="translate(-12.85714,0.714286)" />
+ <flowRoot
+ xml:space="preserve"
+ id="flowRoot1952"
+ transform="translate(-142.5493,128.5383)"
+ style="font-size:11px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:Bitstream Vera Sans"><flowRegion
+ id="flowRegion1954"><rect
+ id="rect1956"
+ width="170"
+ height="61.42857"
+ x="281.42856"
+ y="212.66591"
+ style="font-size:11px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:Bitstream Vera Sans" /></flowRegion><flowPara
+ id="flowPara1960">WebApp</flowPara></flowRoot> <path
+ style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 235,356.23734 C 200.71429,356.23734 200.71429,356.23734 200.71429,356.23734"
+ id="path1972" />
+ </g>
+</svg>
diff --git a/sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/pom.xml b/sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/pom.xml
new file mode 100644
index 0000000000..0354a8265a
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/pom.xml
@@ -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.
+-->
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-sca</artifactId>
+ <version>1.7-SNAPSHOT</version>
+ </parent>
+ <artifactId>sample-calculator-jsf-webapp</artifactId>
+ <packaging>war</packaging>
+ <name>Apache Tuscany SCA Calculator Sample using JSF in a WebApp</name>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.myfaces.core</groupId>
+ <artifactId>myfaces-impl</artifactId>
+ <version>1.1.5</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.myfaces.core</groupId>
+ <artifactId>myfaces-api</artifactId>
+ <version>1.1.5</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-host-webapp</artifactId>
+ <version>1.7-SNAPSHOT</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-implementation-java-runtime</artifactId>
+ <version>1.7-SNAPSHOT</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <!-- marking dependency as provided to exclude from war file -->
+ <dependency>
+ <groupId>javax.servlet</groupId>
+ <artifactId>servlet-api</artifactId>
+ <version>2.3</version>
+ <scope>provided</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>4.2</version>
+ <scope>test</scope>
+ </dependency>
+
+ </dependencies>
+
+ <build>
+ <finalName>${artifactId}</finalName>
+ </build>
+</project>
diff --git a/sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/src/main/java/beans/Calculator.java b/sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/src/main/java/beans/Calculator.java
new file mode 100644
index 0000000000..f8ca02f8db
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/src/main/java/beans/Calculator.java
@@ -0,0 +1,78 @@
+package beans;
+
+import javax.faces.context.FacesContext;
+
+import org.apache.tuscany.sca.host.embedded.SCADomain;
+
+import calculator.CalculatorService;
+
+public class Calculator {
+ CalculatorService calculatorService;
+ Double number1 = 2.0;
+ Double number2 = 3.0;
+ Double result;
+ String operation;
+
+ public Double getNumber1() {
+ return number1;
+ }
+
+ public void setNumber1(Double number1) {
+ this.number1 = number1;
+ }
+
+ public Double getNumber2() {
+ return number2;
+ }
+
+ public void setNumber2(Double number2) {
+ this.number2 = number2;
+ }
+
+ public String getOperation() {
+ return operation;
+ }
+
+ public void setOperation(String operation) {
+ this.operation = operation;
+ }
+
+ public Calculator() {
+ SCADomain scaDomain = (SCADomain) FacesContext.getCurrentInstance().getExternalContext().getApplicationMap().get("org.apache.tuscany.sca.SCADomain");
+ System.out.println("scaDomain: " + scaDomain);
+// SCADomain scaDomain = (SCADomain) application.getAttribute("org.apache.tuscany.sca.SCADomain");
+ if(scaDomain != null) {
+ calculatorService = (CalculatorService)scaDomain.getService(CalculatorService.class, "CalculatorServiceComponent");
+ }
+ }
+
+ public String callService() {
+ if(operation == null || calculatorService == null) {
+ result = 0.0;
+ }
+ else if(operation.equals("+")) {
+ result = calculatorService.add(number1, number2);
+ }
+ else if(operation.equals("-")) {
+ result = calculatorService.subtract(number1, number2);
+ }
+ else if(operation.equals("*")) {
+ result = calculatorService.multiply(number1, number2);
+ }
+ else if(operation.equals("/")) {
+ result = calculatorService.divide(number1, number2);
+ }
+ else {
+ result = 0.0;
+ }
+ return null;
+ }
+
+ public Double getResult() {
+ return result;
+ }
+
+ public void setResult(Double result) {
+ this.result = result;
+ }
+}
diff --git a/sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/src/main/java/calculator/AddService.java b/sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/src/main/java/calculator/AddService.java
new file mode 100644
index 0000000000..a235e648c7
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/src/main/java/calculator/AddService.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 calculator;
+
+/**
+ * The interface for the add service
+ */
+public interface AddService {
+
+ double add(double n1, double n2);
+
+}
diff --git a/sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/src/main/java/calculator/AddServiceImpl.java b/sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/src/main/java/calculator/AddServiceImpl.java
new file mode 100644
index 0000000000..8b6fe066a6
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/src/main/java/calculator/AddServiceImpl.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 calculator;
+
+/**
+ * An implementation of the Add service
+ */
+public class AddServiceImpl implements AddService {
+
+ public double add(double n1, double n2) {
+ return n1 + n2;
+ }
+
+}
diff --git a/sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/src/main/java/calculator/CalculatorClient.java b/sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/src/main/java/calculator/CalculatorClient.java
new file mode 100644
index 0000000000..ac76137fcb
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/src/main/java/calculator/CalculatorClient.java
@@ -0,0 +1,47 @@
+/*
+ * 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 calculator;
+
+import org.apache.tuscany.sca.host.embedded.SCADomain;
+
+/**
+ * This client program shows how to create an SCA runtime, start it,
+ * and locate and invoke a SCA component
+ *
+ * (not really necessary as this sample runs in a webapp)
+ */
+public class CalculatorClient {
+ public static void main(String[] args) throws Exception {
+
+ SCADomain scaDomain = SCADomain.newInstance("Calculator.composite");
+ CalculatorService calculatorService =
+ scaDomain.getService(CalculatorService.class, "CalculatorServiceComponent");
+
+ // Calculate
+ System.out.println("3 + 2=" + calculatorService.add(3, 2));
+ System.out.println("3 - 2=" + calculatorService.subtract(3, 2));
+ System.out.println("3 * 2=" + calculatorService.multiply(3, 2));
+ System.out.println("3 / 2=" + calculatorService.divide(3, 2));
+
+ scaDomain.close();
+
+ }
+
+}
diff --git a/sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/src/main/java/calculator/CalculatorService.java b/sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/src/main/java/calculator/CalculatorService.java
new file mode 100644
index 0000000000..031fa8b912
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/src/main/java/calculator/CalculatorService.java
@@ -0,0 +1,35 @@
+/*
+ * 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 calculator;
+
+
+/**
+ * The Calculator service interface.
+ */
+public interface CalculatorService {
+
+ double add(double n1, double n2);
+
+ double subtract(double n1, double n2);
+
+ double multiply(double n1, double n2);
+
+ double divide(double n1, double n2);
+
+}
diff --git a/sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/src/main/java/calculator/CalculatorServiceImpl.java b/sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/src/main/java/calculator/CalculatorServiceImpl.java
new file mode 100644
index 0000000000..ba897fa301
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/src/main/java/calculator/CalculatorServiceImpl.java
@@ -0,0 +1,69 @@
+/*
+ * 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 calculator;
+
+import org.osoa.sca.annotations.Reference;
+
+/**
+ * An implementation of the Calculator service.
+ */
+public class CalculatorServiceImpl implements CalculatorService {
+
+ private AddService addService;
+ private SubtractService subtractService;
+ private MultiplyService multiplyService;
+ private DivideService divideService;
+
+ @Reference
+ public void setAddService(AddService addService) {
+ this.addService = addService;
+ }
+
+ @Reference
+ public void setSubtractService(SubtractService subtractService) {
+ this.subtractService = subtractService;
+ }
+
+ @Reference
+ public void setDivideService(DivideService divideService) {
+ this.divideService = divideService;
+ }
+
+ @Reference
+ public void setMultiplyService(MultiplyService multiplyService) {
+ this.multiplyService = multiplyService;
+ }
+
+ public double add(double n1, double n2) {
+ return addService.add(n1, n2);
+ }
+
+ public double subtract(double n1, double n2) {
+ return subtractService.subtract(n1, n2);
+ }
+
+ public double multiply(double n1, double n2) {
+ return multiplyService.multiply(n1, n2);
+ }
+
+ public double divide(double n1, double n2) {
+ return divideService.divide(n1, n2);
+ }
+
+}
diff --git a/sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/src/main/java/calculator/DivideService.java b/sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/src/main/java/calculator/DivideService.java
new file mode 100644
index 0000000000..497dafd4fd
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/src/main/java/calculator/DivideService.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 calculator;
+
+/**
+ * The interface for the divide service
+ */
+public interface DivideService {
+
+ double divide(double n1, double n2);
+
+}
diff --git a/sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/src/main/java/calculator/DivideServiceImpl.java b/sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/src/main/java/calculator/DivideServiceImpl.java
new file mode 100644
index 0000000000..f7ac0b7287
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/src/main/java/calculator/DivideServiceImpl.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 calculator;
+
+/**
+ * An implementation of the Divide service.
+ */
+public class DivideServiceImpl implements DivideService {
+
+ public double divide(double n1, double n2) {
+ return n1 / n2;
+ }
+
+}
diff --git a/sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/src/main/java/calculator/MultiplyService.java b/sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/src/main/java/calculator/MultiplyService.java
new file mode 100644
index 0000000000..5290605938
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/src/main/java/calculator/MultiplyService.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 calculator;
+
+/**
+ * The interface for the multiply service
+ */
+public interface MultiplyService {
+
+ double multiply(double n1, double n2);
+
+}
diff --git a/sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/src/main/java/calculator/MultiplyServiceImpl.java b/sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/src/main/java/calculator/MultiplyServiceImpl.java
new file mode 100644
index 0000000000..b7dca792b2
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/src/main/java/calculator/MultiplyServiceImpl.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 calculator;
+
+/**
+ * An implementation of the Multiply service.
+ */
+public class MultiplyServiceImpl implements MultiplyService {
+
+ public double multiply(double n1, double n2) {
+ return n1 * n2;
+ }
+
+}
diff --git a/sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/src/main/java/calculator/SubtractService.java b/sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/src/main/java/calculator/SubtractService.java
new file mode 100644
index 0000000000..376b3e5bb9
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/src/main/java/calculator/SubtractService.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 calculator;
+
+/**
+ * The interface for the subtract service
+ */
+public interface SubtractService {
+
+ double subtract(double n1, double n2);
+
+}
diff --git a/sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/src/main/java/calculator/SubtractServiceImpl.java b/sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/src/main/java/calculator/SubtractServiceImpl.java
new file mode 100644
index 0000000000..77b128ab8d
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/src/main/java/calculator/SubtractServiceImpl.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 calculator;
+
+/**
+ * An implementation of the subtract service.
+ */
+public class SubtractServiceImpl implements SubtractService {
+
+ public double subtract(double n1, double n2) {
+ return n1 - n2;
+ }
+
+}
diff --git a/sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/src/main/resources/Calculator.composite b/sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/src/main/resources/Calculator.composite
new file mode 100644
index 0000000000..ac9d010b48
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/src/main/resources/Calculator.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"
+ targetNamespace="http://sample"
+ xmlns:sample="http://sample"
+ name="Calculator">
+
+ <component name="CalculatorServiceComponent">
+ <implementation.java class="calculator.CalculatorServiceImpl"/>
+ <reference name="addService" target="AddServiceComponent"></reference>
+ <reference name="subtractService" target="SubtractServiceComponent"></reference>
+ <reference name="multiplyService" target="MultiplyServiceComponent"></reference>
+ <reference name="divideService" target="DivideServiceComponent"></reference>
+ </component>
+
+ <component name="AddServiceComponent">
+ <implementation.java class="calculator.AddServiceImpl"/>
+ </component>
+
+ <component name="SubtractServiceComponent">
+ <implementation.java class="calculator.SubtractServiceImpl"/>
+ </component>
+
+ <component name="MultiplyServiceComponent">
+ <implementation.java class="calculator.MultiplyServiceImpl"/>
+ </component>
+
+ <component name="DivideServiceComponent">
+ <implementation.java class="calculator.DivideServiceImpl"/>
+ </component>
+
+</composite>
diff --git a/sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/src/main/resources/wsdl/add.wsdl b/sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/src/main/resources/wsdl/add.wsdl
new file mode 100644
index 0000000000..ae1986c588
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/src/main/resources/wsdl/add.wsdl
@@ -0,0 +1,87 @@
+<?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.
+-->
+<wsdl:definitions targetNamespace="http://calculator"
+ xmlns:tns="http://calculator"
+ xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
+ xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ name="add">
+
+ <wsdl:types>
+ <schema elementFormDefault="qualified"
+ targetNamespace="http://calculator"
+ xmlns="http://www.w3.org/2001/XMLSchema">
+
+ <element name="add">
+ <complexType>
+ <sequence>
+ <element name="n1" type="xsd:double"/>
+ <element name="n2" type="xsd:double"/>
+ </sequence>
+ </complexType>
+ </element>
+
+ <element name="addResponse">
+ <complexType>
+ <sequence>
+ <element name="response" type="xsd:double"/>
+ </sequence>
+ </complexType>
+ </element>
+
+ </schema>
+ </wsdl:types>
+
+ <wsdl:message name="addRequest">
+ <wsdl:part element="tns:add" name="parameters"/>
+ </wsdl:message>
+
+ <wsdl:message name="addResponse">
+ <wsdl:part element="tns:addResponse" name="parameters"/>
+ </wsdl:message>
+
+ <wsdl:portType name="Add">
+ <wsdl:operation name="add">
+ <wsdl:input message="tns:addRequest" name="addRequest"/>
+ <wsdl:output message="tns:addResponse" name="addResponse"/>
+ </wsdl:operation>
+ </wsdl:portType>
+
+ <wsdl:binding name="AddSoapBinding" type="tns:Add">
+ <wsdlsoap:binding style="document"
+ transport="http://schemas.xmlsoap.org/soap/http"/>
+ <wsdl:operation name="add">
+ <wsdlsoap:operation soapAction=""/>
+ <wsdl:input name="addRequest">
+ <wsdlsoap:body use="literal"/>
+ </wsdl:input>
+ <wsdl:output name="addResponse">
+ <wsdlsoap:body use="literal"/>
+ </wsdl:output>
+ </wsdl:operation>
+ </wsdl:binding>
+
+ <wsdl:service name="AddService">
+ <wsdl:port binding="tns:AddSoapBinding" name="AddSoapPort">
+ <wsdlsoap:address location="http://localhost:8080/sample-calculator-webapp/services/AddService"/>
+ </wsdl:port>
+ </wsdl:service>
+
+</wsdl:definitions>
diff --git a/sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/src/main/webapp/META-INF/sca-contribution.xml b/sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/src/main/webapp/META-INF/sca-contribution.xml
new file mode 100644
index 0000000000..3ce1f21836
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/src/main/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"
+ targetNamespace="http://sample"
+ xmlns:sample="http://sample">
+ <deployable composite="sample:Calculator"/>
+</contribution> \ No newline at end of file
diff --git a/sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/src/main/webapp/WEB-INF/faces-config.xml b/sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/src/main/webapp/WEB-INF/faces-config.xml
new file mode 100644
index 0000000000..4670164d90
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/src/main/webapp/WEB-INF/faces-config.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!DOCTYPE faces-config PUBLIC
+ "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN"
+ "http://java.sun.com/dtd/web-facesconfig_1_1.dtd">
+
+<faces-config>
+ <managed-bean>
+ <managed-bean-name>calculator</managed-bean-name>
+ <managed-bean-class>beans.Calculator</managed-bean-class>
+ <managed-bean-scope>session</managed-bean-scope>
+ </managed-bean>
+
+</faces-config>
diff --git a/sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/src/main/webapp/WEB-INF/web.xml b/sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/src/main/webapp/WEB-INF/web.xml
new file mode 100644
index 0000000000..329e0a5bad
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/src/main/webapp/WEB-INF/web.xml
@@ -0,0 +1,59 @@
+<?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>Apache Tuscany Calculator Web Service Sample</display-name>
+
+ <filter>
+ <filter-name>tuscany</filter-name>
+ <filter-class>org.apache.tuscany.sca.host.webapp.TuscanyServletFilter</filter-class>
+ </filter>
+
+ <filter-mapping>
+ <filter-name>tuscany</filter-name>
+ <url-pattern>/*</url-pattern>
+ </filter-mapping>
+
+ <listener>
+ <listener-class>org.apache.myfaces.webapp.StartupServletContextListener</listener-class>
+ </listener>
+
+ <servlet>
+ <servlet-name>Faces Servlet</servlet-name>
+ <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
+ <load-on-startup>1</load-on-startup>
+ </servlet>
+ <servlet-mapping>
+ <servlet-name>Faces Servlet</servlet-name>
+ <url-pattern>/faces/*</url-pattern>
+ </servlet-mapping>
+ <servlet-mapping>
+ <servlet-name>Faces Servlet</servlet-name>
+ <url-pattern>*.faces</url-pattern>
+ </servlet-mapping>
+
+ <welcome-file-list id="WelcomeFileList">
+ <welcome-file>calc.jsp</welcome-file>
+ </welcome-file-list>
+
+</web-app>
diff --git a/sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/src/main/webapp/calc.jsp b/sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/src/main/webapp/calc.jsp
new file mode 100644
index 0000000000..4c4366747d
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/src/main/webapp/calc.jsp
@@ -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.
+--%>
+
+<%@ page import="org.apache.tuscany.sca.host.embedded.SCADomain"%>
+<%@ page import="calculator.CalculatorService" %>
+
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%
+ SCADomain scaDomain = (SCADomain) application.getAttribute("org.apache.tuscany.sca.SCADomain");
+ CalculatorService calculatorService = (CalculatorService)scaDomain.getService(CalculatorService.class, "CalculatorServiceComponent");
+%>
+<html>
+<head><title>Calculator sample</title></head>
+
+<body>
+<table>
+ <tr>
+ <th>Expression</th><th>Result</th>
+ </tr>
+ <tr>
+ <td>2 + 3</td><td><%= calculatorService.add(2, 3) %></td>
+ </tr>
+ <tr>
+ <td>3 - 2</td><td><%= calculatorService.subtract(3, 2) %></td>
+ </tr>
+ <tr>
+ <td>3 * 2</td><td><%= calculatorService.multiply(3, 2) %></td>
+ </tr>
+ <tr>
+ <td>3 / 2</td><td><%= calculatorService.divide(3, 2) %></td>
+ </tr>
+</table>
+</body>
+</html>
diff --git a/sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/src/main/webapp/calc_jsf.jsp b/sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/src/main/webapp/calc_jsf.jsp
new file mode 100644
index 0000000000..37985724d0
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/calculator-jsf-webapp/src/main/webapp/calc_jsf.jsp
@@ -0,0 +1,27 @@
+<%@taglib uri="http://java.sun.com/jsf/core" prefix="f"%><%@taglib
+ uri="http://java.sun.com/jsf/html" prefix="h"%><%@ page language="java"
+ contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Insert title here</title>
+</head>
+<body>
+
+<f:view>
+ <h:form>
+ <h:inputText value="#{calculator.number1}" size="5"></h:inputText>
+ <h:selectOneMenu value="#{calculator.operation}">
+ <f:selectItem itemValue="+" />
+ <f:selectItem itemValue="-" />
+ <f:selectItem itemValue="*" />
+ <f:selectItem itemValue="/" />
+ </h:selectOneMenu>
+ <h:inputText value="#{calculator.number2}" size="5"></h:inputText>
+ <h:commandButton value="=" action="#{calculator.callService}"></h:commandButton>
+ <h:outputText value="#{calculator.result}"></h:outputText>
+ </h:form>
+</f:view>
+</body>
+</html> \ No newline at end of file
diff --git a/sandbox/lresende/sca-1.x/samples/expertise-atom/pom.xml b/sandbox/lresende/sca-1.x/samples/expertise-atom/pom.xml
new file mode 100644
index 0000000000..54840dca7e
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/expertise-atom/pom.xml
@@ -0,0 +1,96 @@
+<?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-sca</artifactId>
+ <version>1.7-SNAPSHOT</version>
+ </parent>
+ <artifactId>sample-expertise-atom</artifactId>
+ <name>Apache Tuscany SCA ATOM Expertise Locator</name>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-sca-api</artifactId>
+ <version>1.7-SNAPSHOT</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-data-api</artifactId>
+ <version>1.7-SNAPSHOT</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-host-embedded</artifactId>
+ <version>1.7-SNAPSHOT</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-implementation-java-runtime</artifactId>
+ <version>1.7-SNAPSHOT</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-implementation-widget-runtime-tuscany</artifactId>
+ <version>1.7-SNAPSHOT</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-binding-atom-abdera</artifactId>
+ <version>1.7-SNAPSHOT</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-binding-atom-js</artifactId>
+ <version>1.7-SNAPSHOT</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-binding-http-runtime</artifactId>
+ <version>1.7-SNAPSHOT</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-host-tomcat</artifactId>
+ <version>1.7-SNAPSHOT</version>
+ <scope>runtime</scope>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <finalName>${artifactId}</finalName>
+ </build>
+
+</project>
diff --git a/sandbox/lresende/sca-1.x/samples/expertise-atom/src/main/java/org/apache/tuscany/expertise/Expert.java b/sandbox/lresende/sca-1.x/samples/expertise-atom/src/main/java/org/apache/tuscany/expertise/Expert.java
new file mode 100644
index 0000000000..5bc3325a18
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/expertise-atom/src/main/java/org/apache/tuscany/expertise/Expert.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 org.apache.tuscany.expertise;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.tuscany.expertise.Expert;
+
+public class Expert implements Serializable {
+ private static final long serialVersionUID = 2026687637313310397L;
+
+ private String id;
+ private String name;
+ private String location;
+ private List<String> expertises = new ArrayList<String>();
+
+ public Expert() {
+
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getLocation() {
+ return location;
+ }
+
+ public void setLocation(String location) {
+ this.location = location;
+ }
+
+ public List<String> getExpertise() {
+ return this.expertises;
+ }
+
+}
diff --git a/sandbox/lresende/sca-1.x/samples/expertise-atom/src/main/java/org/apache/tuscany/expertise/atom/AtomExpertiseLocator.java b/sandbox/lresende/sca-1.x/samples/expertise-atom/src/main/java/org/apache/tuscany/expertise/atom/AtomExpertiseLocator.java
new file mode 100644
index 0000000000..a2fde8f938
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/expertise-atom/src/main/java/org/apache/tuscany/expertise/atom/AtomExpertiseLocator.java
@@ -0,0 +1,130 @@
+/*
+ * 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 org.apache.tuscany.expertise.atom;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.tuscany.expertise.Expert;
+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.Scope;
+
+@Scope("COMPOSITE")
+public class AtomExpertiseLocator implements ExpertiseLocator {
+
+ private Map<String, Expert> experts = new HashMap<String, Expert>();
+
+ @Init
+ public void init() {
+ Expert expert;
+
+ expert = new Expert();
+ expert.setId("1");
+ expert.setName("John Smith");
+ expert.setLocation("CA");
+ expert.getExpertise().add("SOA");
+ expert.getExpertise().add("SCA");
+ expert.getExpertise().add("WAS");
+
+ experts.put(expert.getId(), expert);
+
+ expert = new Expert();
+ expert.setId("2");
+ expert.setName("Ken Johnson");
+ expert.setLocation("NY");
+ expert.getExpertise().add("Search");
+
+ experts.put(expert.getId(), expert);
+
+ expert = new Expert();
+ expert.setId("3");
+ expert.setName("Mark Smith");
+ expert.setLocation("CA");
+ expert.getExpertise().add("SCA");
+ expert.getExpertise().add("WASCE");
+
+ experts.put(expert.getId(), expert);
+ }
+
+
+ public Entry<String, Expert>[] getAll() {
+ Entry<String, Expert>[] entries = new Entry[experts.size()];
+ int i = 0;
+ for (Map.Entry<String, Expert> e: experts.entrySet()) {
+ entries[i++] = new Entry<String, Expert>(e.getKey(), e.getValue());
+ }
+ return entries;
+
+ }
+
+ public Expert get(String key) throws NotFoundException {
+ Expert item = experts.get(key);
+ if (item == null) {
+ throw new NotFoundException(key);
+ } else {
+ return item;
+ }
+ }
+
+ public String post(String key, Expert item) {
+ if (key == null) {
+ int size = experts.entrySet().size() + 1;
+ key = Integer.toString(size);
+ item.setId(key);
+ }
+ experts.put(key, item);
+ return key;
+ }
+
+ public void put(String key, Expert item) throws NotFoundException {
+ if (!experts.containsKey(key)) {
+ throw new NotFoundException(key);
+ }
+ experts.put(key, item);
+ }
+
+ public void delete(String key) throws NotFoundException {
+ if (key == null || key.equals("")) {
+ experts.clear();
+ } else {
+ Expert expert = experts.remove(key);
+ if (expert == null)
+ throw new NotFoundException(key);
+ }
+ }
+
+ public Entry<String, Expert>[] query(String queryString) {
+ List<Entry<String, Expert>> entries = new ArrayList<Entry<String,Expert>>();
+ if (queryString.startsWith("location=")) {
+ String location = queryString.substring(9);
+ for (Map.Entry<String, Expert> e: experts.entrySet()) {
+ Expert expert = e.getValue();
+ if (expert.getLocation().equals(location)) {
+ entries.add(new Entry<String, Expert>(e.getKey(), e.getValue()));
+ }
+ }
+ }
+ return entries.toArray(new Entry[entries.size()]);
+ }
+}
diff --git a/sandbox/lresende/sca-1.x/samples/expertise-atom/src/main/java/org/apache/tuscany/expertise/atom/ExpertiseLocator.java b/sandbox/lresende/sca-1.x/samples/expertise-atom/src/main/java/org/apache/tuscany/expertise/atom/ExpertiseLocator.java
new file mode 100644
index 0000000000..84683528cc
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/expertise-atom/src/main/java/org/apache/tuscany/expertise/atom/ExpertiseLocator.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 org.apache.tuscany.expertise.atom;
+
+import org.apache.tuscany.expertise.Expert;
+import org.apache.tuscany.sca.data.collection.Collection;
+import org.osoa.sca.annotations.Remotable;
+
+@Remotable
+public interface ExpertiseLocator extends Collection<String, Expert> {
+
+}
diff --git a/sandbox/lresende/sca-1.x/samples/expertise-atom/src/main/java/org/apache/tuscany/expertise/launch/Launch.java b/sandbox/lresende/sca-1.x/samples/expertise-atom/src/main/java/org/apache/tuscany/expertise/launch/Launch.java
new file mode 100644
index 0000000000..eb82100092
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/expertise-atom/src/main/java/org/apache/tuscany/expertise/launch/Launch.java
@@ -0,0 +1,34 @@
+/*
+ * 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 org.apache.tuscany.expertise.launch;
+
+import org.apache.tuscany.sca.host.embedded.SCADomain;
+
+public class Launch {
+ public static void main(String[] args) throws Exception {
+ System.out.println("Starting ...");
+ SCADomain scaDomain = SCADomain.newInstance("atom.composite");
+ System.out.println("atom.composite ready for big business !!!");
+ System.in.read();
+ System.out.println("Stopping ...");
+ scaDomain.close();
+ System.out.println();
+ }
+}
diff --git a/sandbox/lresende/sca-1.x/samples/expertise-atom/src/main/resources/META-INF/sca-contribution.xml b/sandbox/lresende/sca-1.x/samples/expertise-atom/src/main/resources/META-INF/sca-contribution.xml
new file mode 100644
index 0000000000..c1e9be425c
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/expertise-atom/src/main/resources/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:sample="http://sample">
+ <import.java package="org.apache.tuscany.expertise"/>
+
+ <deployable composite="sample:atom"/>
+</contribution> \ No newline at end of file
diff --git a/sandbox/lresende/sca-1.x/samples/expertise-atom/src/main/resources/atom.composite b/sandbox/lresende/sca-1.x/samples/expertise-atom/src/main/resources/atom.composite
new file mode 100644
index 0000000000..75d04f1fe4
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/expertise-atom/src/main/resources/atom.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:s="http://sample" xmlns:t="http://tuscany.apache.org/xmlns/sca/1.0" name="atom" targetNamespace="http://sample">
+ <component name="ExpertiseLocatorWidget">
+ <t:implementation.widget location="expertLocator.html"/>
+ <service name="Widget">
+ <t:binding.http uri="http://localhost:8100/ui"/>
+ </service>
+ <reference name="expertiseLocator" target="AtomExpertiseLocatorComponent/ExpertiseLocator">
+ <t:binding.atom/>
+ </reference>
+ </component>
+ <component name="AtomExpertiseLocatorComponent">
+ <implementation.java class="org.apache.tuscany.expertise.atom.AtomExpertiseLocator"/>
+ <service name="ExpertiseLocator">
+ <t:binding.atom uri="http://localhost:8100/experts"/>
+ </service>
+ </component>
+</composite> \ No newline at end of file
diff --git a/sandbox/lresende/sca-1.x/samples/expertise-atom/src/main/resources/atom.composite_diagram b/sandbox/lresende/sca-1.x/samples/expertise-atom/src/main/resources/atom.composite_diagram
new file mode 100644
index 0000000000..50c1ccf578
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/expertise-atom/src/main/resources/atom.composite_diagram
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<notation:Diagram xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmlns:sca="http://www.osoa.org/xmlns/sca/1.0" xmi:id="_-bz9UJT-Ed6D4MBlxOyxqQ" type="Sca" measurementUnit="Pixel">
+ <children xmi:type="notation:Node" xmi:id="_-cvxcJT-Ed6D4MBlxOyxqQ" type="2001">
+ <children xmi:type="notation:Node" xmi:id="_-cvxc5T-Ed6D4MBlxOyxqQ" type="5008"/>
+ <children xmi:type="notation:Node" xmi:id="_-cwYgJT-Ed6D4MBlxOyxqQ" type="7001">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_-cwYgZT-Ed6D4MBlxOyxqQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_-cwYgpT-Ed6D4MBlxOyxqQ"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_-cwYg5T-Ed6D4MBlxOyxqQ" type="7002">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_-cwYhJT-Ed6D4MBlxOyxqQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_-cwYhZT-Ed6D4MBlxOyxqQ"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_-cwYhpT-Ed6D4MBlxOyxqQ" type="7003">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_-cwYh5T-Ed6D4MBlxOyxqQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_-cwYiJT-Ed6D4MBlxOyxqQ"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_-cwYiZT-Ed6D4MBlxOyxqQ" type="7004">
+ <children xmi:type="notation:Node" xmi:id="_-cyNsJT-Ed6D4MBlxOyxqQ" type="3012">
+ <children xmi:type="notation:Node" xmi:id="_-cy0wJT-Ed6D4MBlxOyxqQ" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_-cy0wZT-Ed6D4MBlxOyxqQ" type="7009">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_-cy0wpT-Ed6D4MBlxOyxqQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_-cy0w5T-Ed6D4MBlxOyxqQ"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_-cy0xJT-Ed6D4MBlxOyxqQ" type="7010">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_-cy0xZT-Ed6D4MBlxOyxqQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_-cy0xpT-Ed6D4MBlxOyxqQ"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_-cy0x5T-Ed6D4MBlxOyxqQ" type="7011">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_-cy0yJT-Ed6D4MBlxOyxqQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_-cy0yZT-Ed6D4MBlxOyxqQ"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_-czb0JT-Ed6D4MBlxOyxqQ" type="7012">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_-czb0ZT-Ed6D4MBlxOyxqQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_-czb0pT-Ed6D4MBlxOyxqQ"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_-cyNsZT-Ed6D4MBlxOyxqQ" fontName="Lucida Grande"/>
+ <element xmi:type="sca:Component" href="atom.composite#//@composite/@component.0"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_-cyNspT-Ed6D4MBlxOyxqQ" x="33" y="1"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_-c0C4JT-Ed6D4MBlxOyxqQ" type="3012">
+ <children xmi:type="notation:Node" xmi:id="_-c0p8pT-Ed6D4MBlxOyxqQ" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_-c0p85T-Ed6D4MBlxOyxqQ" type="7009">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_-c0p9JT-Ed6D4MBlxOyxqQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_-c0p9ZT-Ed6D4MBlxOyxqQ"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_-c1RAJT-Ed6D4MBlxOyxqQ" type="7010">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_-c1RAZT-Ed6D4MBlxOyxqQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_-c1RApT-Ed6D4MBlxOyxqQ"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_-c1RA5T-Ed6D4MBlxOyxqQ" type="7011">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_-c1RBJT-Ed6D4MBlxOyxqQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_-c1RBZT-Ed6D4MBlxOyxqQ"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_-c1RBpT-Ed6D4MBlxOyxqQ" type="7012">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_-c1RB5T-Ed6D4MBlxOyxqQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_-c1RCJT-Ed6D4MBlxOyxqQ"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_-c0p8JT-Ed6D4MBlxOyxqQ" fontName="Lucida Grande"/>
+ <element xmi:type="sca:Component" href="atom.composite#//@composite/@component.1"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_-c0p8ZT-Ed6D4MBlxOyxqQ" x="249" y="1"/>
+ </children>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_-cwYipT-Ed6D4MBlxOyxqQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_-cwYi5T-Ed6D4MBlxOyxqQ"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_-cvxcZT-Ed6D4MBlxOyxqQ" fontName="Lucida Grande"/>
+ <element xmi:type="sca:Composite" href="atom.composite#//@composite"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_-cvxcpT-Ed6D4MBlxOyxqQ" width="550" height="217"/>
+ </children>
+ <styles xmi:type="notation:DiagramStyle" xmi:id="_-bz9UZT-Ed6D4MBlxOyxqQ"/>
+ <element xmi:type="sca:DocumentRoot" href="atom.composite#/"/>
+</notation:Diagram>
diff --git a/sandbox/lresende/sca-1.x/samples/expertise-atom/src/main/resources/expertLocator.html b/sandbox/lresende/sca-1.x/samples/expertise-atom/src/main/resources/expertLocator.html
new file mode 100644
index 0000000000..22579cb0ce
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/expertise-atom/src/main/resources/expertLocator.html
@@ -0,0 +1,110 @@
+<!--
+ * 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>Expert Locator</title>
+
+<script type="text/javascript" src="expertLocator.js"></script>
+
+<script language="JavaScript">
+
+ //@Reference
+ var expertiseLocator = new tuscany.sca.Reference("expertiseLocator");
+
+ var experts;
+
+ function expertiseLocator_getResponse(feed) {
+ document.getElementById("experts").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 id = content.getElementsByTagName("id")[0].firstChild.nodeValue;
+ var name = content.getElementsByTagName("name")[0].firstChild.nodeValue;
+ var location = content.getElementsByTagName("location")[0].firstChild.nodeValue;
+ //var expertises = content.getElementsByTagName("expertises")[0].firstChild.nodeValue;
+ list += location + ' - ' + name + ' <br>';
+ }
+ document.getElementById("experts").innerHTML = list;
+ }
+ }
+
+ function expertiseLocator_postResponse(feed) {
+ expertiseLocator.get("", expertiseLocator_getResponse);
+ }
+
+ function addExpert() {
+ var name = document.getElementById("fieldName").value;
+ var location = document.getElementById("fieldLocation").value;
+ var expertises = document.getElementById("fieldExpertises").value.split(',');
+
+ var entry = '<entry xmlns="http://www.w3.org/2005/Atom"><title>expert</title><content type="text/xml">' +
+ '<Expert xmlns="http://services/">' +
+ '<name xmlns="">' + name + '</name>' +
+ '<location xmlns="">' + location + '</location>' +
+ '</Expert>' + '</content></entry>';
+
+ try {
+ expertiseLocator.post(entry, expertiseLocator_postResponse);
+ }
+ catch(e) {
+ alert(e);
+ }
+ }
+
+ function init() {
+ try {
+ expertiseLocator.get("", expertiseLocator_getResponse);
+ }
+ catch(e) {
+ alert(e);
+ }
+ }
+
+</script>
+
+</head>
+
+<body onload="init()">
+<h1>Expertise Locator</h1>
+ <div>
+ <h2>Add new Expert</h2>
+ <form name="expertForm">
+ Name<br/>
+ <input type="text" id="fieldName" name="name"/> <br/>
+ Location<br/>
+ <input type="text" id="fieldLocation" name="location"/> <br/>
+ Expertise <br/>
+ <input type="text" id="fieldExpertises" name="expertises"/> <b>separate multiple values with commas (,)</b> <br/>
+ <br/>
+ <input type="button" onClick="addExpert()" value="Submit new Expert"/>
+ </form>
+ </div>
+
+ <div id="expertiseLocator">
+ <h2>Experts</h2>
+ <form name="expertiseLocatorForm">
+ <div id="experts" ></div>
+ <br>
+ </form>
+ </div>
+
+</body>
+</html>
diff --git a/sandbox/lresende/sca-1.x/samples/expertise-restfull/pom.xml b/sandbox/lresende/sca-1.x/samples/expertise-restfull/pom.xml
new file mode 100644
index 0000000000..8d5459be84
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/expertise-restfull/pom.xml
@@ -0,0 +1,82 @@
+<?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-sca</artifactId>
+ <version>1.7-SNAPSHOT</version>
+ </parent>
+ <artifactId>sample-expertise-restfull</artifactId>
+ <name>Apache Tuscany SCA RESTFull Expertise Locator</name>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-sca-api</artifactId>
+ <version>1.7-SNAPSHOT</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-data-api</artifactId>
+ <version>1.7-SNAPSHOT</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-host-embedded</artifactId>
+ <version>1.7-SNAPSHOT</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-implementation-java-runtime</artifactId>
+ <version>1.7-SNAPSHOT</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-binding-http-runtime</artifactId>
+ <version>1.7-SNAPSHOT</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-host-tomcat</artifactId>
+ <version>1.7-SNAPSHOT</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>javax.servlet</groupId>
+ <artifactId>servlet-api</artifactId>
+ <version>2.5</version>
+ <scope>provided</scope>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <finalName>${artifactId}</finalName>
+ </build>
+
+</project>
diff --git a/sandbox/lresende/sca-1.x/samples/expertise-restfull/src/main/java/org/apache/tuscany/expertise/Expert.java b/sandbox/lresende/sca-1.x/samples/expertise-restfull/src/main/java/org/apache/tuscany/expertise/Expert.java
new file mode 100644
index 0000000000..61ac1c12b7
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/expertise-restfull/src/main/java/org/apache/tuscany/expertise/Expert.java
@@ -0,0 +1,64 @@
+/*
+ * 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 org.apache.tuscany.expertise;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+public class Expert implements Serializable {
+ private static final long serialVersionUID = 2026687637313310397L;
+
+ private String id;
+ private String name;
+ private String location;
+ private List<String> expertises = new ArrayList<String>();
+
+ public Expert() {
+
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getLocation() {
+ return location;
+ }
+
+ public void setLocation(String location) {
+ this.location = location;
+ }
+
+ public List<String> getExpertise() {
+ return this.expertises;
+ }
+}
diff --git a/sandbox/lresende/sca-1.x/samples/expertise-restfull/src/main/java/org/apache/tuscany/expertise/launch/Launch.java b/sandbox/lresende/sca-1.x/samples/expertise-restfull/src/main/java/org/apache/tuscany/expertise/launch/Launch.java
new file mode 100644
index 0000000000..306abd5465
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/expertise-restfull/src/main/java/org/apache/tuscany/expertise/launch/Launch.java
@@ -0,0 +1,34 @@
+/*
+ * 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 org.apache.tuscany.expertise.launch;
+
+import org.apache.tuscany.sca.host.embedded.SCADomain;
+
+public class Launch {
+ public static void main(String[] args) throws Exception {
+ System.out.println("Starting ...");
+ SCADomain scaDomain = SCADomain.newInstance("rest.composite");
+ System.out.println("rest.composite ready for big business !!!");
+ System.in.read();
+ System.out.println("Stopping ...");
+ scaDomain.close();
+ System.out.println();
+ }
+}
diff --git a/sandbox/lresende/sca-1.x/samples/expertise-restfull/src/main/java/org/apache/tuscany/expertise/restfull/ExpertRegistry.java b/sandbox/lresende/sca-1.x/samples/expertise-restfull/src/main/java/org/apache/tuscany/expertise/restfull/ExpertRegistry.java
new file mode 100644
index 0000000000..1b90df36d2
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/expertise-restfull/src/main/java/org/apache/tuscany/expertise/restfull/ExpertRegistry.java
@@ -0,0 +1,37 @@
+/*
+ * 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 org.apache.tuscany.expertise.restfull;
+
+import java.util.List;
+
+import org.apache.tuscany.expertise.Expert;
+import org.osoa.sca.annotations.Remotable;
+
+@Remotable
+public interface ExpertRegistry {
+
+ void addExpert(Expert expert);
+
+ void removeExpert(Expert expert);
+
+ List<Expert> getExperts();
+
+ List<Expert> getExpertsByExpertise(String expertise);
+} \ No newline at end of file
diff --git a/sandbox/lresende/sca-1.x/samples/expertise-restfull/src/main/java/org/apache/tuscany/expertise/restfull/ExpertRegistryImpl.java b/sandbox/lresende/sca-1.x/samples/expertise-restfull/src/main/java/org/apache/tuscany/expertise/restfull/ExpertRegistryImpl.java
new file mode 100644
index 0000000000..bf7b2ea03e
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/expertise-restfull/src/main/java/org/apache/tuscany/expertise/restfull/ExpertRegistryImpl.java
@@ -0,0 +1,92 @@
+/*
+ * 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 org.apache.tuscany.expertise.restfull;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.tuscany.expertise.Expert;
+import org.osoa.sca.annotations.Init;
+import org.osoa.sca.annotations.Service;
+
+@Service(ExpertRegistry.class)
+public class ExpertRegistryImpl implements ExpertRegistry {
+ private List<Expert> experts = new ArrayList<Expert>();
+
+ public ExpertRegistryImpl() {
+
+ }
+
+ @Init
+ public void init() {
+ Expert expert;
+
+ expert = new Expert();
+ expert.setId("1");
+ expert.setName("John Smith");
+ expert.setLocation("CA");
+ expert.getExpertise().add("SOA");
+ expert.getExpertise().add("SCA");
+ expert.getExpertise().add("WAS");
+
+ experts.add(expert);
+
+ expert = new Expert();
+ expert.setId("2");
+ expert.setName("Ken Johnson");
+ expert.setLocation("NY");
+ expert.getExpertise().add("Search");
+
+ experts.add(expert);
+
+ expert = new Expert();
+ expert.setId("3");
+ expert.setName("Mark Smith");
+ expert.setLocation("CA");
+ expert.getExpertise().add("SCA");
+ expert.getExpertise().add("WASCE");
+
+ experts.add(expert);
+ }
+
+ public void addExpert(Expert expert) {
+ experts.add(expert);
+ }
+
+ public void removeExpert(Expert expert) {
+ experts.remove(expert);
+ }
+
+ public List<Expert> getExperts() {
+ return experts;
+ }
+
+ public List<Expert> getExpertsByExpertise(String expertise) {
+ List<Expert> expertsByExpertise = new ArrayList<Expert>();
+
+ for (Expert expert : experts) {
+ if (expert.getExpertise().contains(expertise)) {
+ expertsByExpertise.add(expert);
+ }
+ }
+
+ return expertsByExpertise;
+ }
+}
diff --git a/sandbox/lresende/sca-1.x/samples/expertise-restfull/src/main/java/org/apache/tuscany/expertise/restfull/RestfulExpertiseLocator.java b/sandbox/lresende/sca-1.x/samples/expertise-restfull/src/main/java/org/apache/tuscany/expertise/restfull/RestfulExpertiseLocator.java
new file mode 100644
index 0000000000..ea3915ccb5
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/expertise-restfull/src/main/java/org/apache/tuscany/expertise/restfull/RestfulExpertiseLocator.java
@@ -0,0 +1,100 @@
+/*
+ * 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 org.apache.tuscany.expertise.restfull;
+
+import java.io.IOException;
+import java.net.URLDecoder;
+import java.util.List;
+
+import javax.servlet.Servlet;
+import javax.servlet.ServletException;
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.tuscany.expertise.Expert;
+import org.osoa.sca.annotations.Reference;
+import org.osoa.sca.annotations.Scope;
+import org.osoa.sca.annotations.Service;
+
+@Service(Servlet.class)
+@Scope("COMPOSITE")
+public class RestfulExpertiseLocator extends HttpServlet implements Servlet {
+
+ private static final long serialVersionUID = 4021701701436888369L;
+
+ @Reference
+ protected ExpertRegistry experts;
+
+
+ @Override
+ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
+ String path = URLDecoder.decode(getRequestPath(request), "UTF-8");
+ String expertise = path.substring(1);
+
+ if (expertise != null && expertise.length() > 0 ) {
+ printExperts(response.getOutputStream(), experts.getExpertsByExpertise(expertise));
+ } else {
+ printExperts(response.getOutputStream(), experts.getExperts());
+ }
+
+ }
+
+
+ private void printExperts(ServletOutputStream out, List<Expert> experts) throws IOException {
+ out.print("<html><body>");
+ out.print("<h2>Expertise Locator</h2>");
+
+ if (experts.size() > 0) {
+ for (Expert expert: experts) {
+ out.print("<b>Location:</b> " + expert.getLocation() + " - " + expert.getName() +" ==> ");
+ for (String expertise : expert.getExpertise()) {
+ out.print(expertise + ";");
+ }
+ out.print("<br/>");
+ }
+ } else {
+ out.println("No experts found");
+ }
+ out.print("</body></html>");
+ }
+
+ /**
+ *
+ * @param request
+ * @return
+ */
+ private static String getRequestPath(HttpServletRequest request) {
+ // Get the request path
+ String contextPath = request.getContextPath();
+ String servletPath = request.getServletPath();
+ String requestURI = request.getRequestURI();
+
+ int contextPathLength = request.getContextPath().length();
+ int servletPathLenght = servletPath.contains(contextPath) ? servletPath.length() - contextPath.length() : servletPath.length();
+
+ String requestPath = requestURI.substring(contextPathLength + servletPathLenght);
+
+ return requestPath;
+ }
+
+
+}
diff --git a/sandbox/lresende/sca-1.x/samples/expertise-restfull/src/main/resources/META-INF/sca-contribution.xml b/sandbox/lresende/sca-1.x/samples/expertise-restfull/src/main/resources/META-INF/sca-contribution.xml
new file mode 100644
index 0000000000..96d2cc3c66
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/expertise-restfull/src/main/resources/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:sample="http://sample">
+ <import.java package="org.apache.tuscany.expertise"/>
+
+ <deployable composite="sample:rest"/>
+</contribution> \ No newline at end of file
diff --git a/sandbox/lresende/sca-1.x/samples/expertise-restfull/src/main/resources/rest.composite b/sandbox/lresende/sca-1.x/samples/expertise-restfull/src/main/resources/rest.composite
new file mode 100644
index 0000000000..50f19a7c79
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/expertise-restfull/src/main/resources/rest.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" xmlns:s="http://sample" xmlns:t="http://tuscany.apache.org/xmlns/sca/1.0" name="rest" targetNamespace="http://sample">
+ <component name="ExpertRegistryComponent">
+ <implementation.java class="org.apache.tuscany.expertise.restfull.ExpertRegistryImpl"/>
+ <service name="ExpertRegistry">
+ <interface.java interface="org.apache.tuscany.expertise.restfull.ExpertRegistry"/>
+ </service>
+ </component>
+ <component name="RestExpertiseLocatorComponent">
+ <implementation.java class="org.apache.tuscany.expertise.restfull.RestfulExpertiseLocator"/>
+ <service name="Servlet">
+ <t:binding.http uri="http://localhost:8200/experts"/>
+ </service>
+ <reference name="experts" target="ExpertRegistryComponent"/>
+ </component>
+</composite> \ No newline at end of file
diff --git a/sandbox/lresende/sca-1.x/samples/expertise-restfull/src/main/resources/rest.composite_diagram b/sandbox/lresende/sca-1.x/samples/expertise-restfull/src/main/resources/rest.composite_diagram
new file mode 100644
index 0000000000..05dae0d547
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/expertise-restfull/src/main/resources/rest.composite_diagram
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<notation:Diagram xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmlns:sca="http://www.osoa.org/xmlns/sca/1.0" xmi:id="_RmagEZT2Ed6D4MBlxOyxqQ" type="Sca" measurementUnit="Pixel">
+ <children xmi:type="notation:Node" xmi:id="_R56q4JT2Ed6D4MBlxOyxqQ" type="2001">
+ <children xmi:type="notation:Node" xmi:id="_R59uMJT2Ed6D4MBlxOyxqQ" type="5008"/>
+ <children xmi:type="notation:Node" xmi:id="_R5_jYJT2Ed6D4MBlxOyxqQ" type="7001">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_R5_jYZT2Ed6D4MBlxOyxqQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_R5_jYpT2Ed6D4MBlxOyxqQ"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_R6AKcJT2Ed6D4MBlxOyxqQ" type="7002">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_R6AKcZT2Ed6D4MBlxOyxqQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_R6AKcpT2Ed6D4MBlxOyxqQ"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_R6BYkJT2Ed6D4MBlxOyxqQ" type="7003">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_R6BYkZT2Ed6D4MBlxOyxqQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_R6BYkpT2Ed6D4MBlxOyxqQ"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_R6CmsJT2Ed6D4MBlxOyxqQ" type="7004">
+ <children xmi:type="notation:Node" xmi:id="_R7gmUJT2Ed6D4MBlxOyxqQ" type="3012">
+ <children xmi:type="notation:Node" xmi:id="_R7hNYJT2Ed6D4MBlxOyxqQ" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_R7h0cJT2Ed6D4MBlxOyxqQ" type="7009">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_R7h0cZT2Ed6D4MBlxOyxqQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_R7h0cpT2Ed6D4MBlxOyxqQ"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_R7jpoJT2Ed6D4MBlxOyxqQ" type="7010">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_R7jpoZT2Ed6D4MBlxOyxqQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_R7jpopT2Ed6D4MBlxOyxqQ"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_R7k3wJT2Ed6D4MBlxOyxqQ" type="7011">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_R7k3wZT2Ed6D4MBlxOyxqQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_R7k3wpT2Ed6D4MBlxOyxqQ"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_R7le0JT2Ed6D4MBlxOyxqQ" type="7012">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_R7le0ZT2Ed6D4MBlxOyxqQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_R7le0pT2Ed6D4MBlxOyxqQ"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_R7gmUZT2Ed6D4MBlxOyxqQ" fontName="Lucida Grande"/>
+ <element xmi:type="sca:Component" href="rest.composite#//@composite/@component.0"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_R7gmUpT2Ed6D4MBlxOyxqQ" x="249" y="1"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_R7ms8JT2Ed6D4MBlxOyxqQ" type="3012">
+ <children xmi:type="notation:Node" xmi:id="_R7nUAJT2Ed6D4MBlxOyxqQ" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_R7nUAZT2Ed6D4MBlxOyxqQ" type="7009">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_R7nUApT2Ed6D4MBlxOyxqQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_R7nUA5T2Ed6D4MBlxOyxqQ"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_R7n7EJT2Ed6D4MBlxOyxqQ" type="7010">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_R7n7EZT2Ed6D4MBlxOyxqQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_R7n7EpT2Ed6D4MBlxOyxqQ"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_R7n7E5T2Ed6D4MBlxOyxqQ" type="7011">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_R7n7FJT2Ed6D4MBlxOyxqQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_R7n7FZT2Ed6D4MBlxOyxqQ"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_R7oiIJT2Ed6D4MBlxOyxqQ" type="7012">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_R7oiIZT2Ed6D4MBlxOyxqQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_R7oiIpT2Ed6D4MBlxOyxqQ"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_R7ms8ZT2Ed6D4MBlxOyxqQ" fontName="Lucida Grande"/>
+ <element xmi:type="sca:Component" href="rest.composite#//@composite/@component.1"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_R7ms8pT2Ed6D4MBlxOyxqQ" x="33" y="1"/>
+ </children>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_R6CmsZT2Ed6D4MBlxOyxqQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_R6CmspT2Ed6D4MBlxOyxqQ"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_R56q4ZT2Ed6D4MBlxOyxqQ" fontName="Lucida Grande"/>
+ <element xmi:type="sca:Composite" href="rest.composite#//@composite"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_R56q4pT2Ed6D4MBlxOyxqQ" width="559" height="226"/>
+ </children>
+ <styles xmi:type="notation:DiagramStyle" xmi:id="_RmbHIJT2Ed6D4MBlxOyxqQ"/>
+ <element xmi:type="sca:DocumentRoot" href="rest.composite#/"/>
+</notation:Diagram>
diff --git a/sandbox/lresende/sca-1.x/samples/pom.xml b/sandbox/lresende/sca-1.x/samples/pom.xml
new file mode 100644
index 0000000000..e481abc47a
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/pom.xml
@@ -0,0 +1,46 @@
+<?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-sca</artifactId>
+ <version>1.7-SNAPSHOT</version>
+ </parent>
+ <artifactId>tuscany-samples-lresende</artifactId>
+ <packaging>pom</packaging>
+ <name>Apache Tuscany Samples (lresende sandbox)</name>
+
+ <profiles>
+ <profile>
+ <id>default</id>
+ <activation>
+ <activeByDefault>true</activeByDefault>
+ </activation>
+ <modules>
+ <module>expertise-atom</module>
+ <module>expertise-restfull</module>
+ <module>store-secure-webapp</module>
+ </modules>
+ </profile>
+
+ </profiles>
+
+</project>
diff --git a/sandbox/lresende/sca-1.x/samples/store-distributed/README b/sandbox/lresende/sca-1.x/samples/store-distributed/README
new file mode 100644
index 0000000000..d4797618ff
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/store-distributed/README
@@ -0,0 +1,28 @@
+Store Sample
+======================================
+
+This is a sample store scenario that is used as a getting started guide
+for Tuscany SCA. For detailed information, please see:
+
+http://incubator.apache.org/tuscany/getting-started-with-tuscany.html
+
+or
+
+http://incubator.apache.org/tuscany/getting-started-with-tuscany-using-tuscany-eclipse-plugin.html
+
+
+Building And Running The Sample Using Ant
+-----------------------------------------
+With the binary distribution the sample can be built using Ant as follows:
+
+cd store
+ant compile
+
+and then, to run:
+
+ant run
+
+Once the store application is running use your browser to visit the following
+URL:
+
+http://localhost:8080/store/
diff --git a/sandbox/lresende/sca-1.x/samples/store-distributed/build.xml b/sandbox/lresende/sca-1.x/samples/store-distributed/build.xml
new file mode 100644
index 0000000000..652afc3570
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/store-distributed/build.xml
@@ -0,0 +1,79 @@
+<!--
+ * 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="store" default="compile">
+ <property name="test.class" value="launch.Launch" />
+ <property name="test.jar" value="sample-store.jar" />
+
+ <target name="init">
+ <mkdir dir="target/classes"/>
+ </target>
+
+ <target name="compile" depends="init">
+ <javac srcdir="src/main/java"
+ destdir="target/classes"
+ debug="on"
+ source="1.5"
+ target="1.5">
+ <classpath>
+ <pathelement location="../../lib/tuscany-sca-manifest.jar"/>
+ <fileset refid="3rdparty.jars"/>
+ </classpath>
+ </javac>
+ <copy todir="target/classes">
+ <fileset dir="src/main/resources"/>
+ </copy>
+ <jar destfile="target/${test.jar}" basedir="target/classes">
+ <manifest>
+ <attribute name="Main-Class" value="${test.class}" />
+ </manifest>
+ </jar>
+ </target>
+
+ <target name="run-classes">
+ <java classname="${test.class}"
+ fork="true">
+ <classpath>
+ <pathelement path="target/classes"/>
+ <pathelement location="../../lib/tuscany-sca-manifest.jar"/>
+ <fileset refid="3rdparty.jars"/>
+ </classpath>
+ </java>
+ </target>
+
+ <target name="run">
+ <java classname="${test.class}"
+ fork="true">
+ <classpath>
+ <pathelement path="target/classes"/>
+ <pathelement location="../../lib/tuscany-sca-manifest.jar"/>
+ <fileset refid="3rdparty.jars"/>
+ </classpath>
+ </java>
+ </target>
+
+ <target name="clean">
+ <delete quiet="true" includeemptydirs="true">
+ <fileset dir="target"/>
+ </delete>
+ </target>
+
+ <fileset id="3rdparty.jars" dir="../../lib">
+ <include name="saxon-9.0.0.2.jar"/>
+ </fileset>
+</project>
diff --git a/sandbox/lresende/sca-1.x/samples/store-distributed/cloud.composite b/sandbox/lresende/sca-1.x/samples/store-distributed/cloud.composite
new file mode 100644
index 0000000000..7bd13d5b6f
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/store-distributed/cloud.composite
@@ -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.
+-->
+<composite name="cloud.composite"
+ 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:NodeA" uri="http://tuscany.apache.org/cloud" xmlns:ns2="http://store/cloud"/>
+ <include name="ns2:NodeB" uri="http://tuscany.apache.org/cloud" xmlns:ns2="http://store/cloud"/>
+ <include name="ns2:NodeC" uri="http://tuscany.apache.org/cloud" xmlns:ns2="http://store/cloud"/>
+</composite>
diff --git a/sandbox/lresende/sca-1.x/samples/store-distributed/domain.composite b/sandbox/lresende/sca-1.x/samples/store-distributed/domain.composite
new file mode 100644
index 0000000000..6898c454af
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/store-distributed/domain.composite
@@ -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.
+-->
+<composite name="domain.composite"
+ 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:storeA" uri="nodeA" xmlns:ns2="http://store"/>
+ <include name="ns2:storeB" uri="nodeB" xmlns:ns2="http://store"/>
+ <include name="ns2:storeC" uri="nodeC" xmlns:ns2="http://store"/>
+</composite>
diff --git a/sandbox/lresende/sca-1.x/samples/store-distributed/pom.xml b/sandbox/lresende/sca-1.x/samples/store-distributed/pom.xml
new file mode 100644
index 0000000000..bb24b6cedd
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/store-distributed/pom.xml
@@ -0,0 +1,109 @@
+<?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-sca</artifactId>
+ <version>1.7-SNAPSHOT</version>
+ </parent>
+ <artifactId>sample-store-distributed</artifactId>
+ <name>Apache Tuscany SCA Getting Started Online Store Sample</name>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-node2-api</artifactId>
+ <version>1.7-SNAPSHOT</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-node2-launcher</artifactId>
+ <version>1.7-SNAPSHOT</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-domain-manager</artifactId>
+ <version>1.7-SNAPSHOT</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-data-api</artifactId>
+ <version>1.7-SNAPSHOT</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-implementation-java-runtime</artifactId>
+ <version>1.7-SNAPSHOT</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-implementation-widget-runtime</artifactId>
+ <version>1.7-SNAPSHOT</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-binding-atom-abdera</artifactId>
+ <version>1.7-SNAPSHOT</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-binding-jsonrpc-runtime</artifactId>
+ <version>1.7-SNAPSHOT</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-binding-http-runtime</artifactId>
+ <version>1.7-SNAPSHOT</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-host-tomcat</artifactId>
+ <version>1.7-SNAPSHOT</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>4.2</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <finalName>${artifactId}</finalName>
+ </build>
+
+</project>
diff --git a/sandbox/lresende/sca-1.x/samples/store-distributed/src/main/java/node/LaunchDomain.java b/sandbox/lresende/sca-1.x/samples/store-distributed/src/main/java/node/LaunchDomain.java
new file mode 100644
index 0000000000..dd19f6b49b
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/store-distributed/src/main/java/node/LaunchDomain.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 node;
+
+import org.apache.tuscany.sca.node.launcher.DomainManagerLauncher;
+
+/**
+ * This server program that loads a composite to provide simple registry function.
+ * This server can be replaced with any registry that is appropriate but the components
+ * in each node that talk to the registry should be replaced also.
+ */
+public class LaunchDomain {
+ public static void main(String[] args) throws Exception {
+ DomainManagerLauncher.main(args);
+ }
+
+}
diff --git a/sandbox/lresende/sca-1.x/samples/store-distributed/src/main/java/node/LaunchStoreNodeA.java b/sandbox/lresende/sca-1.x/samples/store-distributed/src/main/java/node/LaunchStoreNodeA.java
new file mode 100644
index 0000000000..9016e515fb
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/store-distributed/src/main/java/node/LaunchStoreNodeA.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 node;
+
+import org.apache.tuscany.sca.node.launcher.NodeLauncher;
+
+public class LaunchStoreNodeA {
+ public static void main(String[] args) throws Exception {
+ NodeLauncher.main(new String[] {"http://localhost:9990/node-config/NodeA"});
+ }
+}
diff --git a/sandbox/lresende/sca-1.x/samples/store-distributed/src/main/java/node/LaunchStoreNodeB.java b/sandbox/lresende/sca-1.x/samples/store-distributed/src/main/java/node/LaunchStoreNodeB.java
new file mode 100644
index 0000000000..2b387aec82
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/store-distributed/src/main/java/node/LaunchStoreNodeB.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 node;
+
+import org.apache.tuscany.sca.node.launcher.NodeLauncher;
+
+public class LaunchStoreNodeB {
+ public static void main(String[] args) throws Exception {
+ NodeLauncher.main(new String[] {"http://localhost:9990/node-config/NodeB"});
+ }
+}
diff --git a/sandbox/lresende/sca-1.x/samples/store-distributed/src/main/java/node/LaunchStoreNodeC.java b/sandbox/lresende/sca-1.x/samples/store-distributed/src/main/java/node/LaunchStoreNodeC.java
new file mode 100644
index 0000000000..fb138e484f
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/store-distributed/src/main/java/node/LaunchStoreNodeC.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 node;
+
+import org.apache.tuscany.sca.node.launcher.NodeLauncher;
+
+public class LaunchStoreNodeC {
+ public static void main(String[] args) throws Exception {
+ NodeLauncher.main(new String[] {"http://localhost:9990/node-config/NodeC"});
+ }
+}
diff --git a/sandbox/lresende/sca-1.x/samples/store-distributed/src/main/java/services/Cart.java b/sandbox/lresende/sca-1.x/samples/store-distributed/src/main/java/services/Cart.java
new file mode 100644
index 0000000000..9e6226d963
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/store-distributed/src/main/java/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/sandbox/lresende/sca-1.x/samples/store-distributed/src/main/java/services/Catalog.java b/sandbox/lresende/sca-1.x/samples/store-distributed/src/main/java/services/Catalog.java
new file mode 100644
index 0000000000..2c3b19f579
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/store-distributed/src/main/java/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/sandbox/lresende/sca-1.x/samples/store-distributed/src/main/java/services/CurrencyConverter.java b/sandbox/lresende/sca-1.x/samples/store-distributed/src/main/java/services/CurrencyConverter.java
new file mode 100644
index 0000000000..e104a0423a
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/store-distributed/src/main/java/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/sandbox/lresende/sca-1.x/samples/store-distributed/src/main/java/services/CurrencyConverterImpl.java b/sandbox/lresende/sca-1.x/samples/store-distributed/src/main/java/services/CurrencyConverterImpl.java
new file mode 100644
index 0000000000..c354aed447
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/store-distributed/src/main/java/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/sandbox/lresende/sca-1.x/samples/store-distributed/src/main/java/services/FruitsCatalogImpl.java b/sandbox/lresende/sca-1.x/samples/store-distributed/src/main/java/services/FruitsCatalogImpl.java
new file mode 100644
index 0000000000..377b3d7e59
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/store-distributed/src/main/java/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/sandbox/lresende/sca-1.x/samples/store-distributed/src/main/java/services/Item.java b/sandbox/lresende/sca-1.x/samples/store-distributed/src/main/java/services/Item.java
new file mode 100644
index 0000000000..27abd4f016
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/store-distributed/src/main/java/services/Item.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;
+
+
+public class Item {
+ private String name;
+ private String price;
+
+ public Item() {
+ }
+
+ 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;
+ }
+
+}
diff --git a/sandbox/lresende/sca-1.x/samples/store-distributed/src/main/java/services/ShoppingCartImpl.java b/sandbox/lresende/sca-1.x/samples/store-distributed/src/main/java/services/ShoppingCartImpl.java
new file mode 100644
index 0000000000..9889921a96
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/store-distributed/src/main/java/services/ShoppingCartImpl.java
@@ -0,0 +1,112 @@
+/*
+ * 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.Scope;
+
+@Scope("COMPOSITE")
+public class ShoppingCartImpl implements Cart, Total {
+
+ private Map<String, Item> cart;
+
+ @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);
+ }
+}
diff --git a/sandbox/lresende/sca-1.x/samples/store-distributed/src/main/java/services/Total.java b/sandbox/lresende/sca-1.x/samples/store-distributed/src/main/java/services/Total.java
new file mode 100644
index 0000000000..8f464e526f
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/store-distributed/src/main/java/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/sandbox/lresende/sca-1.x/samples/store-distributed/src/main/resources/cloud/NodeA.composite b/sandbox/lresende/sca-1.x/samples/store-distributed/src/main/resources/cloud/NodeA.composite
new file mode 100644
index 0000000000..f7bfd0fcb6
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/store-distributed/src/main/resources/cloud/NodeA.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://store/cloud"
+ xmlns:store="http://store"
+ name="NodeA">
+
+ <component name="NodeA">
+ <t:implementation.node uri="nodeA" composite="store:storeA"/>
+ <service name="Node">
+ <binding.sca uri="http://localhost:8100"/>
+ <t:binding.jsonrpc uri="http://localhost:8100"/>
+ <t:binding.atom uri="http://localhost:8100"/>
+ <t:binding.http uri="http://localhost:8100"/>
+ </service>
+ </component>
+
+</composite>
diff --git a/sandbox/lresende/sca-1.x/samples/store-distributed/src/main/resources/cloud/NodeB.composite b/sandbox/lresende/sca-1.x/samples/store-distributed/src/main/resources/cloud/NodeB.composite
new file mode 100644
index 0000000000..187c5caf1c
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/store-distributed/src/main/resources/cloud/NodeB.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://store/cloud"
+ xmlns:store="http://store"
+ name="NodeB">
+
+ <component name="NodeB">
+ <t:implementation.node uri="nodeB" composite="store:storeB"/>
+ <service name="Node">
+ <binding.sca uri="http://localhost:8200"/>
+ <t:binding.jsonrpc uri="http://localhost:8200"/>
+ <t:binding.atom uri="http://localhost:8200"/>
+ <t:binding.http uri="http://localhost:8200"/>
+ </service>
+ </component>
+
+</composite>
diff --git a/sandbox/lresende/sca-1.x/samples/store-distributed/src/main/resources/cloud/NodeC.composite b/sandbox/lresende/sca-1.x/samples/store-distributed/src/main/resources/cloud/NodeC.composite
new file mode 100644
index 0000000000..96c2e02acb
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/store-distributed/src/main/resources/cloud/NodeC.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://store/cloud"
+ xmlns:store="http://store"
+ name="NodeC">
+
+ <component name="NodeC">
+ <t:implementation.node uri="nodeC" composite="store:storeC"/>
+ <service name="Node">
+ <binding.sca uri="http://localhost:8300"/>
+ <t:binding.jsonrpc uri="http://localhost:8400"/>
+ <t:binding.atom uri="http://localhost:8400"/>
+ <t:binding.http uri="http://localhost:8400"/>
+ </service>
+ </component>
+
+</composite>
diff --git a/sandbox/lresende/sca-1.x/samples/store-distributed/src/main/resources/nodeA/META-INF/sca-contribution.xml b/sandbox/lresende/sca-1.x/samples/store-distributed/src/main/resources/nodeA/META-INF/sca-contribution.xml
new file mode 100644
index 0000000000..f165ee0e29
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/store-distributed/src/main/resources/nodeA/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"
+ targetNamespace="http://store"
+ xmlns:store="http://store">
+ <deployable composite="store:storeA"/>
+</contribution> \ No newline at end of file
diff --git a/sandbox/lresende/sca-1.x/samples/store-distributed/src/main/resources/nodeA/content/store.js b/sandbox/lresende/sca-1.x/samples/store-distributed/src/main/resources/nodeA/content/store.js
new file mode 100644
index 0000000000..7df50eef64
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/store-distributed/src/main/resources/nodeA/content/store.js
@@ -0,0 +1,510 @@
+/* Apache Tuscany SCA Widget header */
+
+/*
+ * JSON-RPC JavaScript client
+ *
+ * $Id: jsonrpc.js,v 1.36.2.3 2006/03/08 15:09:37 mclark Exp $
+ *
+ * Copyright (c) 2003-2004 Jan-Klaas Kollhof
+ * Copyright (c) 2005 Michael Clark, Metaparadigm Pte Ltd
+ *
+ * This code is based on Jan-Klaas' JavaScript o lait library (jsolait).
+ *
+ * Licensed 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.
+ *
+ */
+
+/*
+ * Modifications for Apache Tuscany:
+ * - JSONRpcClient_createMethod changed so callback is last arg
+ */
+
+/* escape a character */
+
+alert('loading sotre.js from nodeA');
+
+escapeJSONChar =
+function escapeJSONChar(c)
+{
+ if(c == "\"" || c == "\\") return "\\" + c;
+ else if (c == "\b") return "\\b";
+ else if (c == "\f") return "\\f";
+ else if (c == "\n") return "\\n";
+ else if (c == "\r") return "\\r";
+ else if (c == "\t") return "\\t";
+ var hex = c.charCodeAt(0).toString(16);
+ if(hex.length == 1) return "\\u000" + hex;
+ else if(hex.length == 2) return "\\u00" + hex;
+ else if(hex.length == 3) return "\\u0" + hex;
+ else return "\\u" + hex;
+};
+
+
+/* encode a string into JSON format */
+
+escapeJSONString =
+function escapeJSONString(s)
+{
+ /* The following should suffice but Safari's regex is b0rken
+ (doesn't support callback substitutions)
+ return "\"" + s.replace(/([^\u0020-\u007f]|[\\\"])/g,
+ escapeJSONChar) + "\"";
+ */
+
+ /* Rather inefficient way to do it */
+ var parts = s.split("");
+ for(var i=0; i < parts.length; i++) {
+ var c =parts[i];
+ if(c == '"' ||
+ c == '\\' ||
+ c.charCodeAt(0) < 32 ||
+ c.charCodeAt(0) >= 128)
+ parts[i] = escapeJSONChar(parts[i]);
+ }
+ return "\"" + parts.join("") + "\"";
+};
+
+
+/* Marshall objects to JSON format */
+
+toJSON = function toJSON(o)
+{
+ if(o == null) {
+ return "null";
+ } else if(o.constructor == String) {
+ return escapeJSONString(o);
+ } else if(o.constructor == Number) {
+ return o.toString();
+ } else if(o.constructor == Boolean) {
+ return o.toString();
+ } else if(o.constructor == Date) {
+ return '{javaClass: "java.util.Date", time: ' + o.valueOf() +'}';
+ } else if(o.constructor == Array) {
+ var v = [];
+ for(var i = 0; i < o.length; i++) v.push(toJSON(o[i]));
+ return "[" + v.join(", ") + "]";
+ } else {
+ var v = [];
+ for(attr in o) {
+ if(o[attr] == null) v.push("\"" + attr + "\": null");
+ else if(typeof o[attr] == "function"); /* skip */
+ else v.push(escapeJSONString(attr) + ": " + toJSON(o[attr]));
+ }
+ return "{" + v.join(", ") + "}";
+ }
+};
+
+
+/* JSONRpcClient constructor */
+
+JSONRpcClient =
+function JSONRpcClient_ctor(serverURL, user, pass, objectID)
+{
+ this.serverURL = serverURL;
+ this.user = user;
+ this.pass = pass;
+ this.objectID = objectID;
+
+ /* Add standard methods */
+ if(this.objectID) {
+ this._addMethods(["listMethods"]);
+ var req = this._makeRequest("listMethods", []);
+ } else {
+ this._addMethods(["system.listMethods"]);
+ var req = this._makeRequest("system.listMethods", []);
+ }
+ var m = this._sendRequest(req);
+ this._addMethods(m);
+};
+
+
+/* JSONRpcCLient.Exception */
+
+JSONRpcClient.Exception =
+function JSONRpcClient_Exception_ctor(code, message, javaStack)
+{
+ this.code = code;
+ var name;
+ if(javaStack) {
+ this.javaStack = javaStack;
+ var m = javaStack.match(/^([^:]*)/);
+ if(m) name = m[0];
+ }
+ if(name) this.name = name;
+ else this.name = "JSONRpcClientException";
+ this.message = message;
+};
+
+JSONRpcClient.Exception.CODE_REMOTE_EXCEPTION = 490;
+JSONRpcClient.Exception.CODE_ERR_CLIENT = 550;
+JSONRpcClient.Exception.CODE_ERR_PARSE = 590;
+JSONRpcClient.Exception.CODE_ERR_NOMETHOD = 591;
+JSONRpcClient.Exception.CODE_ERR_UNMARSHALL = 592;
+JSONRpcClient.Exception.CODE_ERR_MARSHALL = 593;
+
+JSONRpcClient.Exception.prototype = new Error();
+
+JSONRpcClient.Exception.prototype.toString =
+function JSONRpcClient_Exception_toString(code, msg)
+{
+ return this.name + ": " + this.message;
+};
+
+
+/* Default top level exception handler */
+
+JSONRpcClient.default_ex_handler =
+function JSONRpcClient_default_ex_handler(e) { alert(e); };
+
+
+/* Client settable variables */
+
+JSONRpcClient.toplevel_ex_handler = JSONRpcClient.default_ex_handler;
+JSONRpcClient.profile_async = false;
+JSONRpcClient.max_req_active = 1;
+JSONRpcClient.requestId = 1;
+
+
+/* JSONRpcClient implementation */
+
+JSONRpcClient.prototype._createMethod =
+function JSONRpcClient_createMethod(methodName)
+{
+ var fn=function()
+ {
+ var args = [];
+ var callback = null;
+ for(var i=0;i<arguments.length;i++) args.push(arguments[i]);
+
+/* TUSCANY change callback to be last arg instead of first to match binding.ajax
+ if(typeof args[0] == "function") callback = args.shift();
+*/
+ if(typeof args[arguments.length-1] == "function") callback = args.pop();
+
+ var req = fn.client._makeRequest.call(fn.client, fn.methodName,
+ args, callback);
+ if(callback == null) {
+ return fn.client._sendRequest.call(fn.client, req);
+ } else {
+ JSONRpcClient.async_requests.push(req);
+ JSONRpcClient.kick_async();
+ return req.requestId;
+ }
+ };
+ fn.client = this;
+ fn.methodName = methodName;
+ return fn;
+};
+
+JSONRpcClient.prototype._addMethods =
+function JSONRpcClient_addMethods(methodNames)
+{
+ for(var i=0; i<methodNames.length; i++) {
+ var obj = this;
+ var names = methodNames[i].split(".");
+ for(var n=0; n<names.length-1; n++) {
+ var name = names[n];
+ if(obj[name]) {
+ obj = obj[name];
+ } else {
+ obj[name] = new Object();
+ obj = obj[name];
+ }
+ }
+ var name = names[names.length-1];
+ if(!obj[name]) {
+ var method = this._createMethod(methodNames[i]);
+ obj[name] = method;
+ }
+ }
+};
+
+JSONRpcClient._getCharsetFromHeaders =
+function JSONRpcClient_getCharsetFromHeaders(http)
+{
+ try {
+ var contentType = http.getResponseHeader("Content-type");
+ var parts = contentType.split(/\s*;\s*/);
+ for(var i =0; i < parts.length; i++) {
+ if(parts[i].substring(0, 8) == "charset=")
+ return parts[i].substring(8, parts[i].length);
+ }
+ } catch (e) {}
+ return "UTF-8"; /* default */
+};
+
+/* Async queue globals */
+JSONRpcClient.async_requests = [];
+JSONRpcClient.async_inflight = {};
+JSONRpcClient.async_responses = [];
+JSONRpcClient.async_timeout = null;
+JSONRpcClient.num_req_active = 0;
+
+JSONRpcClient._async_handler =
+function JSONRpcClient_async_handler()
+{
+ JSONRpcClient.async_timeout = null;
+
+ while(JSONRpcClient.async_responses.length > 0) {
+ var res = JSONRpcClient.async_responses.shift();
+ if(res.canceled) continue;
+ if(res.profile) res.profile.dispatch = new Date();
+ try {
+ res.cb(res.result, res.ex, res.profile);
+ } catch(e) {
+ JSONRpcClient.toplevel_ex_handler(e);
+ }
+ }
+
+ while(JSONRpcClient.async_requests.length > 0 &&
+ JSONRpcClient.num_req_active < JSONRpcClient.max_req_active) {
+ var req = JSONRpcClient.async_requests.shift();
+ if(req.canceled) continue;
+ req.client._sendRequest.call(req.client, req);
+ }
+};
+
+JSONRpcClient.kick_async =
+function JSONRpcClient_kick_async()
+{
+ if(JSONRpcClient.async_timeout == null)
+ JSONRpcClient.async_timeout =
+ setTimeout(JSONRpcClient._async_handler, 0);
+};
+
+JSONRpcClient.cancelRequest =
+function JSONRpcClient_cancelRequest(requestId)
+{
+ /* If it is in flight then mark it as canceled in the inflight map
+ and the XMLHttpRequest callback will discard the reply. */
+ if(JSONRpcClient.async_inflight[requestId]) {
+ JSONRpcClient.async_inflight[requestId].canceled = true;
+ return true;
+ }
+
+ /* If its not in flight yet then we can just mark it as canceled in
+ the the request queue and it will get discarded before being sent. */
+ for(var i in JSONRpcClient.async_requests) {
+ if(JSONRpcClient.async_requests[i].requestId == requestId) {
+ JSONRpcClient.async_requests[i].canceled = true;
+ return true;
+ }
+ }
+
+ /* It may have returned from the network and be waiting for its callback
+ to be dispatched, so mark it as canceled in the response queue
+ and the response will get discarded before calling the callback. */
+ for(var i in JSONRpcClient.async_responses) {
+ if(JSONRpcClient.async_responses[i].requestId == requestId) {
+ JSONRpcClient.async_responses[i].canceled = true;
+ return true;
+ }
+ }
+
+ return false;
+};
+
+JSONRpcClient.prototype._makeRequest =
+function JSONRpcClient_makeRequest(methodName, args, cb)
+{
+ var req = {};
+ req.client = this;
+ req.requestId = JSONRpcClient.requestId++;
+
+ var obj = {};
+ obj.id = req.requestId;
+ if (this.objectID)
+ obj.method = ".obj#" + this.objectID + "." + methodName;
+ else
+ obj.method = methodName;
+ obj.params = args;
+
+ if (cb) req.cb = cb;
+ if (JSONRpcClient.profile_async)
+ req.profile = { "submit": new Date() };
+ req.data = toJSON(obj);
+
+ return req;
+};
+
+JSONRpcClient.prototype._sendRequest =
+function JSONRpcClient_sendRequest(req)
+{
+ if(req.profile) req.profile.start = new Date();
+
+ /* Get free http object from the pool */
+ var http = JSONRpcClient.poolGetHTTPRequest();
+ JSONRpcClient.num_req_active++;
+
+ /* Send the request */
+ if (typeof(this.user) == "undefined") {
+ http.open("POST", this.serverURL, (req.cb != null));
+ } else {
+ http.open("POST", this.serverURL, (req.cb != null), this.user, this.pass);
+ }
+
+ /* setRequestHeader is missing in Opera 8 Beta */
+ try { http.setRequestHeader("Content-type", "text/plain"); } catch(e) {}
+
+ /* Construct call back if we have one */
+ if(req.cb) {
+ var self = this;
+ http.onreadystatechange = function() {
+ if(http.readyState == 4) {
+ http.onreadystatechange = function () {};
+ var res = { "cb": req.cb, "result": null, "ex": null};
+ if (req.profile) {
+ res.profile = req.profile;
+ res.profile.end = new Date();
+ }
+ try { res.result = self._handleResponse(http); }
+ catch(e) { res.ex = e; }
+ if(!JSONRpcClient.async_inflight[req.requestId].canceled)
+ JSONRpcClient.async_responses.push(res);
+ delete JSONRpcClient.async_inflight[req.requestId];
+ JSONRpcClient.kick_async();
+ }
+ };
+ } else {
+ http.onreadystatechange = function() {};
+ }
+
+ JSONRpcClient.async_inflight[req.requestId] = req;
+
+ try {
+ http.send(req.data);
+ } catch(e) {
+ JSONRpcClient.poolReturnHTTPRequest(http);
+ JSONRpcClient.num_req_active--;
+ throw new JSONRpcClient.Exception
+ (JSONRpcClient.Exception.CODE_ERR_CLIENT, "Connection failed");
+ }
+
+ if(!req.cb) return this._handleResponse(http);
+};
+
+JSONRpcClient.prototype._handleResponse =
+function JSONRpcClient_handleResponse(http)
+{
+ /* Get the charset */
+ if(!this.charset) {
+ this.charset = JSONRpcClient._getCharsetFromHeaders(http);
+ }
+
+ /* Get request results */
+ var status, statusText, data;
+ try {
+ status = http.status;
+ statusText = http.statusText;
+ data = http.responseText;
+ } catch(e) {
+ JSONRpcClient.poolReturnHTTPRequest(http);
+ JSONRpcClient.num_req_active--;
+ JSONRpcClient.kick_async();
+ throw new JSONRpcClient.Exception
+ (JSONRpcClient.Exception.CODE_ERR_CLIENT, "Connection failed");
+ }
+
+ /* Return http object to the pool; */
+ JSONRpcClient.poolReturnHTTPRequest(http);
+ JSONRpcClient.num_req_active--;
+
+ /* Unmarshall the response */
+ if(status != 200) {
+ throw new JSONRpcClient.Exception(status, statusText);
+ }
+ var obj;
+ try {
+ eval("obj = " + data);
+ } catch(e) {
+ throw new JSONRpcClient.Exception(550, "error parsing result");
+ }
+ if(obj.error)
+ throw new JSONRpcClient.Exception(obj.error.code, obj.error.msg,
+ obj.error.trace);
+ var res = obj.result;
+
+ /* Handle CallableProxy */
+ if(res && res.objectID && res.JSONRPCType == "CallableReference")
+ return new JSONRpcClient(this.serverURL, this.user,
+ this.pass, res.objectID);
+
+ return res;
+};
+
+
+/* XMLHttpRequest wrapper code */
+
+/* XMLHttpRequest pool globals */
+JSONRpcClient.http_spare = [];
+JSONRpcClient.http_max_spare = 8;
+
+JSONRpcClient.poolGetHTTPRequest =
+function JSONRpcClient_pool_getHTTPRequest()
+{
+ if(JSONRpcClient.http_spare.length > 0) {
+ return JSONRpcClient.http_spare.pop();
+ }
+ return JSONRpcClient.getHTTPRequest();
+};
+
+JSONRpcClient.poolReturnHTTPRequest =
+function JSONRpcClient_poolReturnHTTPRequest(http)
+{
+ if(JSONRpcClient.http_spare.length >= JSONRpcClient.http_max_spare)
+ delete http;
+ else
+ JSONRpcClient.http_spare.push(http);
+};
+
+JSONRpcClient.msxmlNames = [ "MSXML2.XMLHTTP.5.0",
+ "MSXML2.XMLHTTP.4.0",
+ "MSXML2.XMLHTTP.3.0",
+ "MSXML2.XMLHTTP",
+ "Microsoft.XMLHTTP" ];
+
+JSONRpcClient.getHTTPRequest =
+function JSONRpcClient_getHTTPRequest()
+{
+ /* Mozilla XMLHttpRequest */
+ try {
+ JSONRpcClient.httpObjectName = "XMLHttpRequest";
+ return new XMLHttpRequest();
+ } catch(e) {}
+
+ /* Microsoft MSXML ActiveX */
+ for (var i=0;i < JSONRpcClient.msxmlNames.length; i++) {
+ try {
+ JSONRpcClient.httpObjectName = JSONRpcClient.msxmlNames[i];
+ return new ActiveXObject(JSONRpcClient.msxmlNames[i]);
+ } catch (e) {}
+ }
+
+ /* None found */
+ JSONRpcClient.httpObjectName = null;
+ throw new JSONRpcClient.Exception(0, "Can't create XMLHttpRequest object");
+};
+
+//---------------------
+
+
+var propertyMapA = new Object();
+var referenceMapA = new Object();
+
+alert("referenceMapA : " + referenceMapA);
+referenceMapA.catalog = new JSONRpcClient("http://luck.ibm.com:8100/Catalog").Service;
+
+alert('finished loading store.js from nodeA');
+
+/** End of Apache Tuscany SCA Widget */
+
diff --git a/sandbox/lresende/sca-1.x/samples/store-distributed/src/main/resources/nodeA/store.composite b/sandbox/lresende/sca-1.x/samples/store-distributed/src/main/resources/nodeA/store.composite
new file mode 100644
index 0000000000..99d1fb5dd7
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/store-distributed/src/main/resources/nodeA/store.composite
@@ -0,0 +1,46 @@
+<?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="storeA">
+
+ <component name="Catalog">
+ <implementation.java class="services.FruitsCatalogImpl"/>
+ <property name="currencyCode">USD</property>
+ <service name="Catalog">
+ <t:binding.jsonrpc/>
+ </service>
+ <reference name="currencyConverter" target="CurrencyConverter"/>
+ </component>
+
+ <component name="CurrencyConverter">
+ <implementation.java class="services.CurrencyConverterImpl"/>
+ </component>
+
+ <!-- http://localhost:8100/store/nodeA/store.js -->
+ <component name="jsNodeA">
+ <t:implementation.resource location="content"/>
+ <service name="Resource">
+ <t:binding.http uri="/store/nodeA"/>
+ </service>
+ </component>
+
+</composite>
diff --git a/sandbox/lresende/sca-1.x/samples/store-distributed/src/main/resources/nodeB/META-INF/sca-contribution.xml b/sandbox/lresende/sca-1.x/samples/store-distributed/src/main/resources/nodeB/META-INF/sca-contribution.xml
new file mode 100644
index 0000000000..0f8e76ccd7
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/store-distributed/src/main/resources/nodeB/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"
+ targetNamespace="http://store"
+ xmlns:store="http://store">
+ <deployable composite="store:storeB"/>
+</contribution> \ No newline at end of file
diff --git a/sandbox/lresende/sca-1.x/samples/store-distributed/src/main/resources/nodeB/content/store.js b/sandbox/lresende/sca-1.x/samples/store-distributed/src/main/resources/nodeB/content/store.js
new file mode 100644
index 0000000000..c95a3b2f95
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/store-distributed/src/main/resources/nodeB/content/store.js
@@ -0,0 +1,647 @@
+/* Apache Tuscany SCA Widget header */
+
+/*
+ * JSON-RPC JavaScript client
+ *
+ * $Id: jsonrpc.js,v 1.36.2.3 2006/03/08 15:09:37 mclark Exp $
+ *
+ * Copyright (c) 2003-2004 Jan-Klaas Kollhof
+ * Copyright (c) 2005 Michael Clark, Metaparadigm Pte Ltd
+ *
+ * This code is based on Jan-Klaas' JavaScript o lait library (jsolait).
+ *
+ * Licensed 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.
+ *
+ */
+
+/*
+ * Modifications for Apache Tuscany:
+ * - JSONRpcClient_createMethod changed so callback is last arg
+ */
+
+/* escape a character */
+
+alert('loading sotre.js from nodeB');
+
+escapeJSONChar =
+function escapeJSONChar(c)
+{
+ if(c == "\"" || c == "\\") return "\\" + c;
+ else if (c == "\b") return "\\b";
+ else if (c == "\f") return "\\f";
+ else if (c == "\n") return "\\n";
+ else if (c == "\r") return "\\r";
+ else if (c == "\t") return "\\t";
+ var hex = c.charCodeAt(0).toString(16);
+ if(hex.length == 1) return "\\u000" + hex;
+ else if(hex.length == 2) return "\\u00" + hex;
+ else if(hex.length == 3) return "\\u0" + hex;
+ else return "\\u" + hex;
+};
+
+
+/* encode a string into JSON format */
+
+escapeJSONString =
+function escapeJSONString(s)
+{
+ /* The following should suffice but Safari's regex is b0rken
+ (doesn't support callback substitutions)
+ return "\"" + s.replace(/([^\u0020-\u007f]|[\\\"])/g,
+ escapeJSONChar) + "\"";
+ */
+
+ /* Rather inefficient way to do it */
+ var parts = s.split("");
+ for(var i=0; i < parts.length; i++) {
+ var c =parts[i];
+ if(c == '"' ||
+ c == '\\' ||
+ c.charCodeAt(0) < 32 ||
+ c.charCodeAt(0) >= 128)
+ parts[i] = escapeJSONChar(parts[i]);
+ }
+ return "\"" + parts.join("") + "\"";
+};
+
+
+/* Marshall objects to JSON format */
+
+toJSON = function toJSON(o)
+{
+ if(o == null) {
+ return "null";
+ } else if(o.constructor == String) {
+ return escapeJSONString(o);
+ } else if(o.constructor == Number) {
+ return o.toString();
+ } else if(o.constructor == Boolean) {
+ return o.toString();
+ } else if(o.constructor == Date) {
+ return '{javaClass: "java.util.Date", time: ' + o.valueOf() +'}';
+ } else if(o.constructor == Array) {
+ var v = [];
+ for(var i = 0; i < o.length; i++) v.push(toJSON(o[i]));
+ return "[" + v.join(", ") + "]";
+ } else {
+ var v = [];
+ for(attr in o) {
+ if(o[attr] == null) v.push("\"" + attr + "\": null");
+ else if(typeof o[attr] == "function"); /* skip */
+ else v.push(escapeJSONString(attr) + ": " + toJSON(o[attr]));
+ }
+ return "{" + v.join(", ") + "}";
+ }
+};
+
+
+/* JSONRpcClient constructor */
+
+JSONRpcClient =
+function JSONRpcClient_ctor(serverURL, user, pass, objectID)
+{
+ this.serverURL = serverURL;
+ this.user = user;
+ this.pass = pass;
+ this.objectID = objectID;
+
+ /* Add standard methods */
+ if(this.objectID) {
+ this._addMethods(["listMethods"]);
+ var req = this._makeRequest("listMethods", []);
+ } else {
+ this._addMethods(["system.listMethods"]);
+ var req = this._makeRequest("system.listMethods", []);
+ }
+ var m = this._sendRequest(req);
+ this._addMethods(m);
+};
+
+
+/* JSONRpcCLient.Exception */
+
+JSONRpcClient.Exception =
+function JSONRpcClient_Exception_ctor(code, message, javaStack)
+{
+ this.code = code;
+ var name;
+ if(javaStack) {
+ this.javaStack = javaStack;
+ var m = javaStack.match(/^([^:]*)/);
+ if(m) name = m[0];
+ }
+ if(name) this.name = name;
+ else this.name = "JSONRpcClientException";
+ this.message = message;
+};
+
+JSONRpcClient.Exception.CODE_REMOTE_EXCEPTION = 490;
+JSONRpcClient.Exception.CODE_ERR_CLIENT = 550;
+JSONRpcClient.Exception.CODE_ERR_PARSE = 590;
+JSONRpcClient.Exception.CODE_ERR_NOMETHOD = 591;
+JSONRpcClient.Exception.CODE_ERR_UNMARSHALL = 592;
+JSONRpcClient.Exception.CODE_ERR_MARSHALL = 593;
+
+JSONRpcClient.Exception.prototype = new Error();
+
+JSONRpcClient.Exception.prototype.toString =
+function JSONRpcClient_Exception_toString(code, msg)
+{
+ return this.name + ": " + this.message;
+};
+
+
+/* Default top level exception handler */
+
+JSONRpcClient.default_ex_handler =
+function JSONRpcClient_default_ex_handler(e) { alert(e); };
+
+
+/* Client settable variables */
+
+JSONRpcClient.toplevel_ex_handler = JSONRpcClient.default_ex_handler;
+JSONRpcClient.profile_async = false;
+JSONRpcClient.max_req_active = 1;
+JSONRpcClient.requestId = 1;
+
+
+/* JSONRpcClient implementation */
+
+JSONRpcClient.prototype._createMethod =
+function JSONRpcClient_createMethod(methodName)
+{
+ var fn=function()
+ {
+ var args = [];
+ var callback = null;
+ for(var i=0;i<arguments.length;i++) args.push(arguments[i]);
+
+/* TUSCANY change callback to be last arg instead of first to match binding.ajax
+ if(typeof args[0] == "function") callback = args.shift();
+*/
+ if(typeof args[arguments.length-1] == "function") callback = args.pop();
+
+ var req = fn.client._makeRequest.call(fn.client, fn.methodName,
+ args, callback);
+ if(callback == null) {
+ return fn.client._sendRequest.call(fn.client, req);
+ } else {
+ JSONRpcClient.async_requests.push(req);
+ JSONRpcClient.kick_async();
+ return req.requestId;
+ }
+ };
+ fn.client = this;
+ fn.methodName = methodName;
+ return fn;
+};
+
+JSONRpcClient.prototype._addMethods =
+function JSONRpcClient_addMethods(methodNames)
+{
+ for(var i=0; i<methodNames.length; i++) {
+ var obj = this;
+ var names = methodNames[i].split(".");
+ for(var n=0; n<names.length-1; n++) {
+ var name = names[n];
+ if(obj[name]) {
+ obj = obj[name];
+ } else {
+ obj[name] = new Object();
+ obj = obj[name];
+ }
+ }
+ var name = names[names.length-1];
+ if(!obj[name]) {
+ var method = this._createMethod(methodNames[i]);
+ obj[name] = method;
+ }
+ }
+};
+
+JSONRpcClient._getCharsetFromHeaders =
+function JSONRpcClient_getCharsetFromHeaders(http)
+{
+ try {
+ var contentType = http.getResponseHeader("Content-type");
+ var parts = contentType.split(/\s*;\s*/);
+ for(var i =0; i < parts.length; i++) {
+ if(parts[i].substring(0, 8) == "charset=")
+ return parts[i].substring(8, parts[i].length);
+ }
+ } catch (e) {}
+ return "UTF-8"; /* default */
+};
+
+/* Async queue globals */
+JSONRpcClient.async_requests = [];
+JSONRpcClient.async_inflight = {};
+JSONRpcClient.async_responses = [];
+JSONRpcClient.async_timeout = null;
+JSONRpcClient.num_req_active = 0;
+
+JSONRpcClient._async_handler =
+function JSONRpcClient_async_handler()
+{
+ JSONRpcClient.async_timeout = null;
+
+ while(JSONRpcClient.async_responses.length > 0) {
+ var res = JSONRpcClient.async_responses.shift();
+ if(res.canceled) continue;
+ if(res.profile) res.profile.dispatch = new Date();
+ try {
+ res.cb(res.result, res.ex, res.profile);
+ } catch(e) {
+ JSONRpcClient.toplevel_ex_handler(e);
+ }
+ }
+
+ while(JSONRpcClient.async_requests.length > 0 &&
+ JSONRpcClient.num_req_active < JSONRpcClient.max_req_active) {
+ var req = JSONRpcClient.async_requests.shift();
+ if(req.canceled) continue;
+ req.client._sendRequest.call(req.client, req);
+ }
+};
+
+JSONRpcClient.kick_async =
+function JSONRpcClient_kick_async()
+{
+ if(JSONRpcClient.async_timeout == null)
+ JSONRpcClient.async_timeout =
+ setTimeout(JSONRpcClient._async_handler, 0);
+};
+
+JSONRpcClient.cancelRequest =
+function JSONRpcClient_cancelRequest(requestId)
+{
+ /* If it is in flight then mark it as canceled in the inflight map
+ and the XMLHttpRequest callback will discard the reply. */
+ if(JSONRpcClient.async_inflight[requestId]) {
+ JSONRpcClient.async_inflight[requestId].canceled = true;
+ return true;
+ }
+
+ /* If its not in flight yet then we can just mark it as canceled in
+ the the request queue and it will get discarded before being sent. */
+ for(var i in JSONRpcClient.async_requests) {
+ if(JSONRpcClient.async_requests[i].requestId == requestId) {
+ JSONRpcClient.async_requests[i].canceled = true;
+ return true;
+ }
+ }
+
+ /* It may have returned from the network and be waiting for its callback
+ to be dispatched, so mark it as canceled in the response queue
+ and the response will get discarded before calling the callback. */
+ for(var i in JSONRpcClient.async_responses) {
+ if(JSONRpcClient.async_responses[i].requestId == requestId) {
+ JSONRpcClient.async_responses[i].canceled = true;
+ return true;
+ }
+ }
+
+ return false;
+};
+
+JSONRpcClient.prototype._makeRequest =
+function JSONRpcClient_makeRequest(methodName, args, cb)
+{
+ var req = {};
+ req.client = this;
+ req.requestId = JSONRpcClient.requestId++;
+
+ var obj = {};
+ obj.id = req.requestId;
+ if (this.objectID)
+ obj.method = ".obj#" + this.objectID + "." + methodName;
+ else
+ obj.method = methodName;
+ obj.params = args;
+
+ if (cb) req.cb = cb;
+ if (JSONRpcClient.profile_async)
+ req.profile = { "submit": new Date() };
+ req.data = toJSON(obj);
+
+ return req;
+};
+
+JSONRpcClient.prototype._sendRequest =
+function JSONRpcClient_sendRequest(req)
+{
+ if(req.profile) req.profile.start = new Date();
+
+ /* Get free http object from the pool */
+ var http = JSONRpcClient.poolGetHTTPRequest();
+ JSONRpcClient.num_req_active++;
+
+ /* Send the request */
+ if (typeof(this.user) == "undefined") {
+ http.open("POST", this.serverURL, (req.cb != null));
+ } else {
+ http.open("POST", this.serverURL, (req.cb != null), this.user, this.pass);
+ }
+
+ /* setRequestHeader is missing in Opera 8 Beta */
+ try { http.setRequestHeader("Content-type", "text/plain"); } catch(e) {}
+
+ /* Construct call back if we have one */
+ if(req.cb) {
+ var self = this;
+ http.onreadystatechange = function() {
+ if(http.readyState == 4) {
+ http.onreadystatechange = function () {};
+ var res = { "cb": req.cb, "result": null, "ex": null};
+ if (req.profile) {
+ res.profile = req.profile;
+ res.profile.end = new Date();
+ }
+ try { res.result = self._handleResponse(http); }
+ catch(e) { res.ex = e; }
+ if(!JSONRpcClient.async_inflight[req.requestId].canceled)
+ JSONRpcClient.async_responses.push(res);
+ delete JSONRpcClient.async_inflight[req.requestId];
+ JSONRpcClient.kick_async();
+ }
+ };
+ } else {
+ http.onreadystatechange = function() {};
+ }
+
+ JSONRpcClient.async_inflight[req.requestId] = req;
+
+ try {
+ http.send(req.data);
+ } catch(e) {
+ JSONRpcClient.poolReturnHTTPRequest(http);
+ JSONRpcClient.num_req_active--;
+ throw new JSONRpcClient.Exception
+ (JSONRpcClient.Exception.CODE_ERR_CLIENT, "Connection failed");
+ }
+
+ if(!req.cb) return this._handleResponse(http);
+};
+
+JSONRpcClient.prototype._handleResponse =
+function JSONRpcClient_handleResponse(http)
+{
+ /* Get the charset */
+ if(!this.charset) {
+ this.charset = JSONRpcClient._getCharsetFromHeaders(http);
+ }
+
+ /* Get request results */
+ var status, statusText, data;
+ try {
+ status = http.status;
+ statusText = http.statusText;
+ data = http.responseText;
+ } catch(e) {
+ JSONRpcClient.poolReturnHTTPRequest(http);
+ JSONRpcClient.num_req_active--;
+ JSONRpcClient.kick_async();
+ throw new JSONRpcClient.Exception
+ (JSONRpcClient.Exception.CODE_ERR_CLIENT, "Connection failed");
+ }
+
+ /* Return http object to the pool; */
+ JSONRpcClient.poolReturnHTTPRequest(http);
+ JSONRpcClient.num_req_active--;
+
+ /* Unmarshall the response */
+ if(status != 200) {
+ throw new JSONRpcClient.Exception(status, statusText);
+ }
+ var obj;
+ try {
+ eval("obj = " + data);
+ } catch(e) {
+ throw new JSONRpcClient.Exception(550, "error parsing result");
+ }
+ if(obj.error)
+ throw new JSONRpcClient.Exception(obj.error.code, obj.error.msg,
+ obj.error.trace);
+ var res = obj.result;
+
+ /* Handle CallableProxy */
+ if(res && res.objectID && res.JSONRPCType == "CallableReference")
+ return new JSONRpcClient(this.serverURL, this.user,
+ this.pass, res.objectID);
+
+ return res;
+};
+
+
+/* XMLHttpRequest wrapper code */
+
+/* XMLHttpRequest pool globals */
+JSONRpcClient.http_spare = [];
+JSONRpcClient.http_max_spare = 8;
+
+JSONRpcClient.poolGetHTTPRequest =
+function JSONRpcClient_pool_getHTTPRequest()
+{
+ if(JSONRpcClient.http_spare.length > 0) {
+ return JSONRpcClient.http_spare.pop();
+ }
+ return JSONRpcClient.getHTTPRequest();
+};
+
+JSONRpcClient.poolReturnHTTPRequest =
+function JSONRpcClient_poolReturnHTTPRequest(http)
+{
+ if(JSONRpcClient.http_spare.length >= JSONRpcClient.http_max_spare)
+ delete http;
+ else
+ JSONRpcClient.http_spare.push(http);
+};
+
+JSONRpcClient.msxmlNames = [ "MSXML2.XMLHTTP.5.0",
+ "MSXML2.XMLHTTP.4.0",
+ "MSXML2.XMLHTTP.3.0",
+ "MSXML2.XMLHTTP",
+ "Microsoft.XMLHTTP" ];
+
+JSONRpcClient.getHTTPRequest =
+function JSONRpcClient_getHTTPRequest()
+{
+ /* Mozilla XMLHttpRequest */
+ try {
+ JSONRpcClient.httpObjectName = "XMLHttpRequest";
+ return new XMLHttpRequest();
+ } catch(e) {}
+
+ /* Microsoft MSXML ActiveX */
+ for (var i=0;i < JSONRpcClient.msxmlNames.length; i++) {
+ try {
+ JSONRpcClient.httpObjectName = JSONRpcClient.msxmlNames[i];
+ return new ActiveXObject(JSONRpcClient.msxmlNames[i]);
+ } catch (e) {}
+ }
+
+ /* None found */
+ JSONRpcClient.httpObjectName = null;
+ throw new JSONRpcClient.Exception(0, "Can't create XMLHttpRequest object");
+};
+
+
+/*
+ * 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.
+ */
+
+function AtomClient(uri) {
+
+ this.msxmlNames = [ "MSXML2.XMLHTTP.5.0",
+ "MSXML2.XMLHTTP.4.0",
+ "MSXML2.XMLHTTP.3.0",
+ "MSXML2.XMLHTTP",
+ "Microsoft.XMLHTTP" ];
+
+ this.uri=uri;
+
+ this.get = function(id, responseFunction) {
+ var xhr = this.createXMLHttpRequest();
+ xhr.onreadystatechange = function() {
+ if (xhr.readyState == 4) {
+ if (xhr.status == 200) {
+ var strDocument = xhr.responseText;
+ var xmlDocument = xhr.responseXML;
+ if(!xmlDocument || xmlDocument.childNodes.length==0){
+ xmlDocument = (new DOMParser()).parseFromString(strDocument, "text/xml");
+ }
+ if (responseFunction != null) responseFunction(xmlDocument);
+ } else {
+ alert("get - Error getting data from the server");
+ }
+ }
+ }
+ xhr.open("GET", uri + '/' + id, true);
+ xhr.send(null);
+ }
+
+ this.post = function (entry, responseFunction) {
+ var xhr = this.createXMLHttpRequest();
+ xhr.onreadystatechange = function() {
+ if (xhr.readyState == 4) {
+ if (xhr.status == 201) {
+ var strDocument = xhr.responseText;
+ var xmlDocument = xhr.responseXML;
+ if(!xmlDocument || xmlDocument.childNodes.length==0){
+ xmlDocument = (new DOMParser()).parseFromString(strDocument, "text/xml");
+ }
+ if (responseFunction != null) responseFunction(xmlDocument);
+ } else {
+ alert("post - Error getting data from the server");
+ }
+ }
+ }
+ xhr.open("POST", uri, true);
+ xhr.setRequestHeader("Content-Type", "application/atom+xml");
+ xhr.send(entry);
+ }
+
+ this.put = function (id, entry, responseFunction) {
+ var xhr = this.createXMLHttpRequest();
+ xhr.onreadystatechange = function() {
+ if (xhr.readyState == 4) {
+ if (xhr.status == 200) {
+ var strDocument = xhr.responseText;
+ var xmlDocument = xhr.responseXML;
+ if(!xmlDocument || xmlDocument.childNodes.length==0){
+ xmlDocument = (new DOMParser()).parseFromString(strDocument, "text/xml");
+ }
+ if (responseFunction != null) responseFunction(xmlDocument);
+ } else {
+ alert("put - Error getting data from the server");
+ }
+ }
+ }
+ xhr.open("PUT", uri + '/' + id, true);
+ xhr.setRequestHeader("Content-Type", "application/atom+xml");
+ xhr.send(entry);
+ }
+
+ this.del = function (id, responseFunction) {
+ var xhr = this.createXMLHttpRequest();
+ xhr.onreadystatechange = function() {
+ if (xhr.readyState == 4) {
+ if (xhr.status == 200) {
+ if (responseFunction != null) responseFunction();
+ } else {
+ alert("delete - Error getting data from the server");
+ }
+ }
+ }
+ xhr.open("DELETE", uri + '/' + id, true);
+ xhr.send(null);
+ }
+ this.createXMLHttpRequest = function () {
+ /* Mozilla XMLHttpRequest */
+ try {return new XMLHttpRequest();} catch(e) {}
+
+ /* Microsoft MSXML ActiveX */
+ for (var i=0;i < this.msxmlNames.length; i++) {
+ try {return new ActiveXObject(this.msxmlNames[i]);} catch (e) {}
+ }
+ alert("XML http request not supported");
+ return null;
+ }
+ if (typeof DOMParser == "undefined") {
+ DOMParser = function () {}
+
+ DOMParser.prototype.parseFromString = function (str, contentType) {
+ if (typeof ActiveXObject != "undefined") {
+ var d = new ActiveXObject("MSXML.DomDocument");
+ d.loadXML(str);
+ return d;
+ } else if (typeof XMLHttpRequest != "undefined") {
+ var req = new XMLHttpRequest;
+ req.open("GET", "data:" + (contentType || "application/xml") +
+ ";charset=utf-8," + encodeURIComponent(str), false);
+ if (req.overrideMimeType) {
+ req.overrideMimeType(contentType);
+ }
+ req.send(null);
+ return req.responseXML;
+ }
+ }
+ }
+}
+
+
+alert(window.top);
+alert(window.parent);
+alert(window.top.document.referenceMap);
+window.top.document.referenceMap.shoppingCart = new AtomClient("http://localhost:8200/ShoppingCart/Cart");
+window.top.document.referenceMap.shoppingTotal = new JSONRpcClient("http://localhost:8200/ShoppingCart/Total").Service;
+
+alert('finished loading store.js from nodeB');
+
+/** End of Apache Tuscany SCA Widget */
+
diff --git a/sandbox/lresende/sca-1.x/samples/store-distributed/src/main/resources/nodeB/store.composite b/sandbox/lresende/sca-1.x/samples/store-distributed/src/main/resources/nodeB/store.composite
new file mode 100644
index 0000000000..b66b937546
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/store-distributed/src/main/resources/nodeB/store.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://store"
+ name="storeB">
+
+ <component name="ShoppingCart">
+ <implementation.java class="services.ShoppingCartImpl"/>
+ <service name="Cart">
+ <t:binding.atom uri="/ShoppingCart/Cart"/>
+ </service>
+ <service name="Total">
+ <t:binding.jsonrpc/>
+ </service>
+ </component>
+
+ <!-- http://localhost:8200/store/nodeB/store.js -->
+ <component name="jsNodeB">
+ <t:implementation.resource location="content"/>
+ <service name="Resource">
+ <t:binding.http uri="/store/nodeB"/>
+ </service>
+ </component>
+
+</composite>
diff --git a/sandbox/lresende/sca-1.x/samples/store-distributed/src/main/resources/nodeC/META-INF/sca-contribution.xml b/sandbox/lresende/sca-1.x/samples/store-distributed/src/main/resources/nodeC/META-INF/sca-contribution.xml
new file mode 100644
index 0000000000..15bab17c1a
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/store-distributed/src/main/resources/nodeC/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"
+ targetNamespace="http://store"
+ xmlns:store="http://store">
+ <deployable composite="store:storeC"/>
+</contribution> \ No newline at end of file
diff --git a/sandbox/lresende/sca-1.x/samples/store-distributed/src/main/resources/nodeC/content/index.js b/sandbox/lresende/sca-1.x/samples/store-distributed/src/main/resources/nodeC/content/index.js
new file mode 100644
index 0000000000..d42dc5512d
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/store-distributed/src/main/resources/nodeC/content/index.js
@@ -0,0 +1,66 @@
+/*-----------------------------------------------------------------------------+
+| Product: index.js - Ajile's default auto-loader for shared dependencies.
+|+-----------------------------------------------------------------------------+
+| Author: Michael A. I. Lee [ http://ajile.iskitz.com/ ]
+|
+| Created: Friday, November 2, 2006 [2006.06.02 - 19:44:40 EDT]
+| Modified: Saturday December 16, 2006 [2006.12.16 - 13:00:00 EST]
+|+-----------------------------------------------------------------------------+
+|
+| README:
+|
+| If you need a way to import/load a common set of scripts for every page on
+| your site or in your web application, this is the file you should use.
+|
+| This index.js file can be used to define scripting dependencies for a page,
+| site, or application in a single place for use in many places.
+|
+| As of Ajile 0.6.5, Ajile automatically loads the index.js file found in its
+| directory. To disable this behavior, use the "mvcshareoff" load-time option
+| in the src parameter of the script tag used to load Ajile.
+|
+| Placing your top-level Namespace, Import, and Load directives in this file
+| allows Ajile to automatically load, import, and initialize all required
+| modules at startup for every page that uses Ajile.
+|
+| By using this file as described, all scripting logic can be controlled from
+| a single point separate from the page, site or application's display logic.
+|
+| When used within web pages (e.g. HTML, XHTML, HTA, JSP, ASP, PHP, CGI, etc.)
+| only 1 SCRIPT tag is required. That SCRIPT tag must identify the location of
+| the Ajile module. For example:
+|
+| <script type="text/javascript" src="__Ajile's_Path__"></script>
+|
+| Visit http://ajile.iskitz.com/ to start creating "Smart scripts that play nice!"
+|+----------------------------------------------------------------------------*/
+
+// You may copy this file into your own projects and use it to define your
+// shared dependencies. This file must reside in the same location as the Ajile
+// module. The logic below demonstrates how this file can be used to define an
+// auto-loader. You'll most-likely use index.js to auto-load common or shared
+// functionality.
+
+/*
+
+ // Example options setting...
+ Ajile.EnableCloak(false);
+ Ajile.EnableDebug();
+ Ajile.EnableOverride(false);
+
+ // Define your namespace.
+ Namespace ("your.namespace");
+
+ // Import a versioned namespace.
+ Import ("some.namespace.*.0.6", "some/path/");
+
+ // Import a module's public members.
+ Import ("some.other.Module.*");
+
+ // Define a new module.
+ your.namespace.NewModule = new function()
+ {
+ // Your implementation here...
+ };
+
+//*/ \ No newline at end of file
diff --git a/sandbox/lresende/sca-1.x/samples/store-distributed/src/main/resources/nodeC/content/store.html b/sandbox/lresende/sca-1.x/samples/store-distributed/src/main/resources/nodeC/content/store.html
new file mode 100644
index 0000000000..0e3ab370b3
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/store-distributed/src/main/resources/nodeC/content/store.html
@@ -0,0 +1,114 @@
+<!--
+ * 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="http://luck.ibm.com:8400/store/nodeC/store.js"></script>
+
+<script language="JavaScript">
+
+var propertyMap = new Object();
+function Property(name) {
+ return propertyMap[name];
+}
+var referenceMap = new Object();
+function Reference(name) {
+ return referenceMap[name];
+}
+
+alert("PropertyMap : " + propertyMap);
+alert("ReferenceMap: " + referenceMap);
+
+//dhtmlLoadScript("http://luck.ibm.com:8100/store/nodeA/store.js");
+staticLoadScript("http://luck.ibm.com:8100/store/nodeA/store.js");
+
+referenceMap.catalog = referenceMapA.catalog;
+</script>
+
+</head>
+
+<body>
+<h1>Store</h1>
+
+ <input type="button" onClick="init()" value"Initialize">
+
+ <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>
+
+
+
+<script language="JavaScript">
+
+ //@Reference
+ var catalog = new Reference("catalog");
+
+ 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 init() {
+
+ alert(Reference("catalog"));
+ try {
+ catalog.get(catalog_getResponse);
+ }
+ catch(e){
+ alert(e);
+ }
+ }
+
+ init();
+</script>
+
+</html>
diff --git a/sandbox/lresende/sca-1.x/samples/store-distributed/src/main/resources/nodeC/content/store.js b/sandbox/lresende/sca-1.x/samples/store-distributed/src/main/resources/nodeC/content/store.js
new file mode 100644
index 0000000000..088a80a1d1
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/store-distributed/src/main/resources/nodeC/content/store.js
@@ -0,0 +1,39 @@
+
+function dhtmlLoadScript(url) {
+ var script = document.createElement('script');
+ script.type = 'text/javascript';
+ script.src = url;
+ document.getElementsByTagName('head')[0].appendChild(script);
+}
+
+function dhtmlLoadScriptIFrame(iframeId, url) {
+ var iframe = document.createElement("IFRAME");
+ iframe.style.display="none";
+ iframe.name = iframeId;
+ iframe.id = iframeId;
+ iframe.src = url;
+ document.body.appendChild(iframe);
+
+ //var iframeDocument = window.frames[iframeId].document;
+ //iframeDocument.write('<script src="', url, '" type="text/JavaScript"><\/script>');
+}
+
+
+function staticLoadScript(url)
+{
+ document.write('<script src="', url, '" type="text/JavaScript"><\/script>');
+}
+
+
+function initialize() {
+
+
+ //alert('will load sotre.js from nodeA');
+ //dhtmlLoadScriptIFrame("iframe", "http://localhost:8100/store/nodeA/store.html");
+
+ //alert('will load sotre.js from nodeB');
+ //dhtmlLoadScriptIFrame("iframe2","http://localhost:8200/store/nodeB/store.html");
+}
+
+/** End of Apache Tuscany SCA Widget */
+
diff --git a/sandbox/lresende/sca-1.x/samples/store-distributed/src/main/resources/nodeC/store.composite b/sandbox/lresende/sca-1.x/samples/store-distributed/src/main/resources/nodeC/store.composite
new file mode 100644
index 0000000000..aa603114a6
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/store-distributed/src/main/resources/nodeC/store.composite
@@ -0,0 +1,50 @@
+<?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="storeC">
+
+ <component name="Store">
+ <t:implementation.widget location="content/store.html"/>
+ <service name="Widget">
+ <t:binding.http uri="/store"/>
+ </service>
+ <reference name="catalog" target="Catalog">
+ <t:binding.jsonrpc/>
+ </reference>
+ <reference name="shoppingCart" target="ShoppingCart/Cart">
+ <t:binding.atom/>
+ </reference>
+ <reference name="shoppingTotal" target="ShoppingCart/Total">
+ <t:binding.jsonrpc/>
+ </reference>
+ </component>
+
+ <!-- http://localhost:8400/store/nodeA/store.js -->
+ <component name="jsNodeC">
+ <t:implementation.resource location="content"/>
+ <service name="Resource">
+ <t:binding.http uri="/store/nodeC"/>
+ </service>
+ </component>
+
+</composite>
+
diff --git a/sandbox/lresende/sca-1.x/samples/store-distributed/src/main/resources/nodeC/uiservices/store.html b/sandbox/lresende/sca-1.x/samples/store-distributed/src/main/resources/nodeC/uiservices/store.html
new file mode 100644
index 0000000000..45604463d1
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/store-distributed/src/main/resources/nodeC/uiservices/store.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>Store</title>
+
+<script type="text/javascript" src="store.js"></script>
+
+<script language="JavaScript">
+
+ //@Reference
+ var catalog = new Reference("catalog");
+
+ //@Reference
+ var shoppingCart = new Reference("shoppingCart");
+
+ //@Reference
+ var shoppingTotal = new 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);
+ }
+ 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() {
+ 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>
+ <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/sandbox/lresende/sca-1.x/samples/store-distributed/src/main/resources/uiservices/store.html b/sandbox/lresende/sca-1.x/samples/store-distributed/src/main/resources/uiservices/store.html
new file mode 100644
index 0000000000..45604463d1
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/store-distributed/src/main/resources/uiservices/store.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>Store</title>
+
+<script type="text/javascript" src="store.js"></script>
+
+<script language="JavaScript">
+
+ //@Reference
+ var catalog = new Reference("catalog");
+
+ //@Reference
+ var shoppingCart = new Reference("shoppingCart");
+
+ //@Reference
+ var shoppingTotal = new 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);
+ }
+ 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() {
+ 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>
+ <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/sandbox/lresende/sca-1.x/samples/store-distributed/store.png b/sandbox/lresende/sca-1.x/samples/store-distributed/store.png
new file mode 100644
index 0000000000..da413edeee
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/store-distributed/store.png
Binary files differ
diff --git a/sandbox/lresende/sca-1.x/samples/store-distributed/store.svg b/sandbox/lresende/sca-1.x/samples/store-distributed/store.svg
new file mode 100644
index 0000000000..74f8ecd36d
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/store-distributed/store.svg
@@ -0,0 +1,304 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+ * 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.
+-->
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="1052.3622"
+ height="744.09448"
+ id="svg2"
+ sodipodi:version="0.32"
+ inkscape:version="0.45.1"
+ sodipodi:docbase="C:\simon\tuscany\java-head\sca\samples\store"
+ sodipodi:docname="store.svg"
+ version="1.0"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="C:\simon\tuscany\java-head\sca\samples\store\store.png"
+ inkscape:export-xdpi="52.84"
+ inkscape:export-ydpi="52.84">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ gridtolerance="10000"
+ guidetolerance="10"
+ objecttolerance="10"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1.4"
+ inkscape:cx="538.06165"
+ inkscape:cy="341.69129"
+ inkscape:document-units="px"
+ inkscape:current-layer="g2997"
+ inkscape:window-width="1466"
+ inkscape:window-height="831"
+ inkscape:window-x="117"
+ inkscape:window-y="80" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <g
+ id="g2997">
+ <rect
+ rx="14.335117"
+ ry="17.743465"
+ y="197.1973"
+ x="447.35422"
+ height="419.39099"
+ width="464.23727"
+ id="rect2067"
+ style="opacity:1;fill:#90baf4;fill-opacity:1;stroke:#060000;stroke-width:2.28840661;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <flowRoot
+ id="flowRoot2954"
+ xml:space="preserve"
+ transform="translate(189.90868,1.0101522)"><flowRegion
+ id="flowRegion2956"><rect
+ y="212.66591"
+ x="281.42856"
+ height="61.42857"
+ width="170"
+ id="rect2958" /></flowRegion><flowPara
+ id="flowPara2171">store</flowPara></flowRoot> <rect
+ style="fill:#317fed;fill-opacity:1;stroke:#060000;stroke-width:2.30182266;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect2175"
+ width="118.21779"
+ height="111.27543"
+ x="491.60019"
+ y="247.75989"
+ rx="7.1507306"
+ ry="9.2311935" />
+ <flowRoot
+ xml:space="preserve"
+ id="flowRoot2177"
+ transform="translate(223.8585,41.670449)"><flowRegion
+ id="flowRegion2179"><rect
+ id="rect2181"
+ width="170"
+ height="61.42857"
+ x="281.42856"
+ y="212.66591" /></flowRegion><flowPara
+ id="flowPara2183">ufs</flowPara></flowRoot> <path
+ style="fill:#5b9d05;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 474.29877,279.45598 L 507.63381,279.45598 L 513.69472,292.58796 L 506.62366,304.7098 L 474.29877,304.7098 L 481.87492,292.58796 L 474.29877,279.45598 z "
+ id="path2187" />
+ <rect
+ style="fill:#317fed;fill-opacity:1;stroke:#060000;stroke-width:2;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect2191"
+ width="115.66247"
+ height="85.862968"
+ x="493.07068"
+ y="503.27759"
+ rx="6.9961648"
+ ry="7.1230249" />
+ <flowRoot
+ xml:space="preserve"
+ id="flowRoot2193"
+ transform="translate(225.47992,297.33908)"><flowRegion
+ id="flowRegion2195"><rect
+ id="rect2197"
+ width="170"
+ height="61.42857"
+ x="281.42856"
+ y="212.66591" /></flowRegion><flowPara
+ id="flowPara2199">ShoppingCart</flowPara></flowRoot> <path
+ style="fill:#5b9d05;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 475.92019,535.12461 L 509.25523,535.12461 L 515.31614,548.25659 L 508.24508,560.37843 L 475.92019,560.37843 L 483.49634,548.25659 L 475.92019,535.12461 z "
+ id="path2203" />
+ <rect
+ style="fill:#317fed;fill-opacity:1;stroke:#060000;stroke-width:2;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect2207"
+ width="115.66247"
+ height="85.862968"
+ x="761.44415"
+ y="391.31604"
+ rx="6.9961648"
+ ry="7.1230249" />
+ <flowRoot
+ xml:space="preserve"
+ id="flowRoot2209"
+ transform="translate(487.8534,185.37751)"><flowRegion
+ id="flowRegion2211"><rect
+ id="rect2213"
+ width="170"
+ height="61.42857"
+ x="281.42856"
+ y="212.66591" /></flowRegion><flowPara
+ id="flowPara2215">CurrencyConverter</flowPara></flowRoot> <path
+ style="fill:#5b9d05;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 744.29367,423.16304 L 777.62871,423.16304 L 783.68962,436.29502 L 776.61856,448.41686 L 744.29367,448.41686 L 751.86982,436.29502 L 744.29367,423.16304 z "
+ id="path2219" />
+ <rect
+ style="opacity:1;fill:#0064ff;fill-opacity:1;stroke:#000000;stroke-width:0.9612025;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect2223"
+ width="104.08451"
+ height="113.17588"
+ x="138.37151"
+ y="350.1156"
+ rx="0"
+ ry="0.048917599" />
+ <path
+ style="fill:#1a73fe;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1"
+ d="M 138.21429,462.66591 L 115.35714,479.80877 L 267.85714,479.80877 L 241.78571,463.02305 L 138.21429,462.66591 z "
+ id="path3197" />
+ <rect
+ style="opacity:1;fill:#f1f4f8;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect3199"
+ width="92.5"
+ height="97.14286"
+ x="143.57143"
+ y="358.38019"
+ ry="3.6203461"
+ rx="3.9285715" />
+ <image
+ y="366.6889"
+ x="156.24066"
+ id="image3323"
+ height="78.571434"
+ width="58.57143"
+ sodipodi:absref="C:\simon\tuscany\evangelism\whitepapers\shoppingcart.png"
+ xlink:href="C:\simon\tuscany\evangelism\whitepapers\shoppingcart.png" />
+ <image
+ y="270.52304"
+ x="526.42859"
+ id="image3342"
+ height="78.571434"
+ width="58.57143"
+ sodipodi:absref="C:\simon\tuscany\evangelism\whitepapers\shoppingcart.png"
+ xlink:href="C:\simon\tuscany\evangelism\whitepapers\shoppingcart.png" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 242.85714,374.80877 C 245.71429,374.80877 345.71429,374.80877 345.71429,374.80877 L 345.71429,291.95162 L 481.42858,291.95162"
+ id="path3348"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 210.71429,406.95163 L 345,406.95163 L 345,437.66591 L 481.42857,437.66591"
+ id="path3350"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 210.71429,439.09448 L 325.71429,439.09448 L 325.71429,548.3802 L 482.85714,548.3802"
+ id="path3352"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 626.42857,436.23734 C 750,437.66591 752.14286,436.23734 752.14286,436.23734"
+ id="path3354"
+ sodipodi:nodetypes="cc" />
+ <flowRoot
+ xml:space="preserve"
+ id="flowRoot3356"
+ transform="translate(-94.285714,25)"><flowRegion
+ id="flowRegion3358"><rect
+ id="rect3360"
+ width="142.14285"
+ height="21.428572"
+ x="655"
+ y="349.80878" /></flowRegion><flowPara
+ id="flowPara3362">CurrenyCode</flowPara></flowRoot> <flowRoot
+ xml:space="preserve"
+ id="flowRoot3364"
+ transform="translate(-250.76562,-76.210859)"><flowRegion
+ id="flowRegion3366"><rect
+ id="rect3368"
+ width="142.14285"
+ height="21.428572"
+ x="655"
+ y="349.80878" /></flowRegion><flowPara
+ id="flowPara3370">HTTP</flowPara></flowRoot> <flowRoot
+ xml:space="preserve"
+ id="flowRoot3372"
+ transform="translate(-273.62277,70.931998)"><flowRegion
+ id="flowRegion3374"><rect
+ id="rect3376"
+ width="142.14285"
+ height="21.428572"
+ x="655"
+ y="349.80878" /></flowRegion><flowPara
+ id="flowPara3378">JSONRPC</flowPara></flowRoot> <flowRoot
+ xml:space="preserve"
+ id="flowRoot3380"
+ transform="translate(-243.62277,183.07485)"><flowRegion
+ id="flowRegion3382"><rect
+ id="rect3384"
+ width="142.14285"
+ height="21.428572"
+ x="655"
+ y="349.80878" /></flowRegion><flowPara
+ id="flowPara3386">Atom</flowPara></flowRoot> </g>
+ <rect
+ style="fill:#317fed;fill-opacity:1;stroke:#060000;stroke-width:2;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect2988"
+ width="115.66247"
+ height="85.862968"
+ x="491.56897"
+ y="392.70135"
+ rx="6.9961648"
+ ry="7.1230249" />
+ <flowRoot
+ xml:space="preserve"
+ id="flowRoot2966"
+ transform="translate(223.97819,186.76283)"><flowRegion
+ id="flowRegion2968"><rect
+ id="rect2970"
+ width="170"
+ height="61.42857"
+ x="281.42856"
+ y="212.66591" /></flowRegion><flowPara
+ id="flowPara2972">Catalog</flowPara></flowRoot> <rect
+ style="opacity:1;fill:#fff62c;fill-opacity:1;stroke:#060000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect3006"
+ width="21.718224"
+ height="20.708065"
+ x="537.53094"
+ y="377.04398"
+ rx="10.859112"
+ ry="0" />
+ <path
+ style="fill:#5b9d05;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 474.41846,424.54836 L 507.7535,424.54836 L 513.81441,437.68034 L 506.74335,449.80218 L 474.41846,449.80218 L 481.99461,437.68034 L 474.41846,424.54836 z "
+ id="path3017" />
+ <path
+ style="fill:#ae62bf;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 587.6709,422.71008 L 621.00594,422.71008 L 627.06685,435.84206 L 619.99579,447.9639 L 587.6709,447.9639 L 595.24705,435.84206 L 587.6709,422.71008 z "
+ id="path3019" />
+ </g>
+</svg>
diff --git a/sandbox/lresende/sca-1.x/samples/store-distributed/workspace.xml b/sandbox/lresende/sca-1.x/samples/store-distributed/workspace.xml
new file mode 100644
index 0000000000..d6cb2bfc81
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/store-distributed/workspace.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.
+-->
+<workspace xmlns="http://tuscany.apache.org/xmlns/sca/1.0" xmlns:ns1="http://tuscany.apache.org/xmlns/sca/1.0">
+ <contribution location="file:./src/main/resources/nodeA" uri="nodeA"/>
+ <contribution location="file:./src/main/resources/nodeB" uri="nodeB"/>
+ <contribution location="file:./src/main/resources/nodeC" uri="nodeC"/>
+ <contribution location="file:./src/main/resources/cloud" uri="http://tuscany.apache.org/cloud"/>
+</workspace>
diff --git a/sandbox/lresende/sca-1.x/samples/store-jsf/README b/sandbox/lresende/sca-1.x/samples/store-jsf/README
new file mode 100644
index 0000000000..79ddb03568
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/store-jsf/README
@@ -0,0 +1,2 @@
+To access the deployed application :
+http://localhost.localdomain:8080/sample-store-jsf/faces/catalog.jsp \ No newline at end of file
diff --git a/sandbox/lresende/sca-1.x/samples/store-jsf/pom.xml b/sandbox/lresende/sca-1.x/samples/store-jsf/pom.xml
new file mode 100644
index 0000000000..fe68a0e4b5
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/store-jsf/pom.xml
@@ -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.
+-->
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-sca</artifactId>
+ <version>1.7-SNAPSHOT</version>
+ </parent>
+ <artifactId>sample-store-jsf</artifactId>
+ <packaging>war</packaging>
+ <name>Apache Tuscany SCA Getting Started Online Store Sample using JSF</name>
+
+ <dependencies>
+
+ <dependency>
+ <groupId>org.apache.myfaces.core</groupId>
+ <artifactId>myfaces-impl</artifactId>
+ <version>1.1.5</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.myfaces.core</groupId>
+ <artifactId>myfaces-api</artifactId>
+ <version>1.1.5</version>
+ </dependency>
+
+ <!-- dependency>
+ <groupId>net.java.dev.ajax4jsf</groupId>
+ <artifactId>ajax4jsf</artifactId>
+ <version>1.0.6</version>
+ </dependency -->
+
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>4.2</version>
+ <scope>test</scope>
+ </dependency>
+
+ </dependencies>
+
+ <build>
+ <finalName>${artifactId}</finalName>
+ </build>
+
+</project>
diff --git a/sandbox/lresende/sca-1.x/samples/store-jsf/src/main/java/beans/Catalog.java b/sandbox/lresende/sca-1.x/samples/store-jsf/src/main/java/beans/Catalog.java
new file mode 100644
index 0000000000..01e4a0d481
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/store-jsf/src/main/java/beans/Catalog.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 beans;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class Catalog {
+ Product[] products;
+
+ public Catalog() {
+ products = new Product[3];
+ products[0] = new Product("Apple", 2.99);
+ products[1] = new Product("Orange", 3.55);
+ products[2] = new Product("Pear", 1.55);
+ }
+
+ public Product[] getProducts() {
+ return products;
+ }
+
+ public void setProducts(Product[] products) {
+ this.products = products;
+ }
+
+ public List getProductsInCart() {
+ List productsInCart = new ArrayList();
+ double total = 0.0;
+ for (int i = 0; i < products.length; i++) {
+ Product product = products[i];
+ if (product.isInCart()) {
+ productsInCart.add(product);
+ total += product.getPrice();
+ }
+ }
+ productsInCart.add(new Product("Total", total));
+ return productsInCart;
+ }
+
+}
diff --git a/sandbox/lresende/sca-1.x/samples/store-jsf/src/main/java/beans/Product.java b/sandbox/lresende/sca-1.x/samples/store-jsf/src/main/java/beans/Product.java
new file mode 100644
index 0000000000..9f3df2f95c
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/store-jsf/src/main/java/beans/Product.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 beans;
+
+public class Product {
+ String name;
+ double price;
+ boolean inCart;
+
+ public Product(String name, double price) {
+ this.name = name;
+ this.price = price;
+ this.inCart = false;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public double getPrice() {
+ return price;
+ }
+
+ public void setPrice(double price) {
+ this.price = price;
+ }
+
+ public boolean isInCart() {
+ return inCart;
+ }
+
+ public void setInCart(boolean inCart) {
+ this.inCart = inCart;
+ }
+
+}
diff --git a/sandbox/lresende/sca-1.x/samples/store-jsf/src/main/webapp/WEB-INF/faces-config.xml b/sandbox/lresende/sca-1.x/samples/store-jsf/src/main/webapp/WEB-INF/faces-config.xml
new file mode 100644
index 0000000000..1dd376a58f
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/store-jsf/src/main/webapp/WEB-INF/faces-config.xml
@@ -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.
+-->
+<!DOCTYPE faces-config PUBLIC
+ "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN"
+ "http://java.sun.com/dtd/web-facesconfig_1_1.dtd">
+
+<faces-config>
+ <managed-bean>
+ <managed-bean-name>catalog</managed-bean-name>
+ <managed-bean-class>beans.Catalog</managed-bean-class>
+ <managed-bean-scope>session</managed-bean-scope>
+ </managed-bean>
+
+</faces-config>
diff --git a/sandbox/lresende/sca-1.x/samples/store-jsf/src/main/webapp/WEB-INF/lib/ajax4jsf-1.1.1.jar b/sandbox/lresende/sca-1.x/samples/store-jsf/src/main/webapp/WEB-INF/lib/ajax4jsf-1.1.1.jar
new file mode 100644
index 0000000000..347b0d2066
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/store-jsf/src/main/webapp/WEB-INF/lib/ajax4jsf-1.1.1.jar
Binary files differ
diff --git a/sandbox/lresende/sca-1.x/samples/store-jsf/src/main/webapp/WEB-INF/web.xml b/sandbox/lresende/sca-1.x/samples/store-jsf/src/main/webapp/WEB-INF/web.xml
new file mode 100644
index 0000000000..a39a51eefc
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/store-jsf/src/main/webapp/WEB-INF/web.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!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 id="WebApp_ID">
+ <display-name>SkeletonProject</display-name>
+ <filter>
+ <filter-name>ajax4jsf</filter-name>
+ <display-name>Ajax4jsf Filter</display-name>
+ <filter-class>org.ajax4jsf.Filter</filter-class>
+ </filter>
+ <filter-mapping>
+ <filter-name>ajax4jsf</filter-name>
+ <servlet-name>Faces Servlet</servlet-name>
+ </filter-mapping>
+ <servlet>
+ <servlet-name>Faces Servlet</servlet-name>
+ <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
+ <load-on-startup>1</load-on-startup>
+ </servlet>
+ <servlet-mapping>
+ <servlet-name>Faces Servlet</servlet-name>
+ <url-pattern>/faces/*</url-pattern>
+ </servlet-mapping>
+ <servlet-mapping>
+ <servlet-name>Faces Servlet</servlet-name>
+ <url-pattern>*.faces</url-pattern>
+ </servlet-mapping>
+
+ <welcome-file-list>
+ <welcome-file>catalog.jsp</welcome-file>
+ </welcome-file-list>
+</web-app>
diff --git a/sandbox/lresende/sca-1.x/samples/store-jsf/src/main/webapp/catalog.jsp b/sandbox/lresende/sca-1.x/samples/store-jsf/src/main/webapp/catalog.jsp
new file mode 100644
index 0000000000..d456bedcc0
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/store-jsf/src/main/webapp/catalog.jsp
@@ -0,0 +1,82 @@
+<%--
+ * 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.
+--%>
+<%@taglib uri="http://java.sun.com/jsf/html" prefix="h"%><%@taglib
+ uri="http://java.sun.com/jsf/core" prefix="f"%><%@taglib
+ uri="https://ajax4jsf.dev.java.net/ajax" prefix="a4j"%><%@ page language="java"
+ contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Basic JSF/Ajax sample</title>
+</head>
+<body>
+
+<f:view>
+ <h:form>
+ <h:outputText value="Store" style="font-size: 28px"/>
+ <h:outputText value="Catalog" style="font-size: 24px"/>
+ <h:dataTable border="0" value="#{catalog.products}" var="item">
+ <h:column id="column1">
+ <h:outputText value="#{item.name}"></h:outputText>
+ <f:facet name="header">
+ <h:outputText value="Product"></h:outputText>
+ </f:facet>
+ </h:column>
+ <h:column id="column2">
+ <h:outputText value="#{item.price}">
+ <f:convertNumber type="currency" currencySymbol="$" />
+ </h:outputText>
+ <f:facet name="header">
+ <h:outputText value="Price"></h:outputText>
+ </f:facet>
+ </h:column>
+ <h:column id="column3">
+ <f:facet name="header">
+ <h:outputText value=""></h:outputText>
+ </f:facet>
+ <h:selectBooleanCheckbox value="#{item.inCart}"></h:selectBooleanCheckbox>
+ </h:column>
+ </h:dataTable>
+ <a4j:commandButton value="Add to Cart" reRender="cart"></a4j:commandButton>
+ </h:form>
+
+ <br>
+
+ <h:outputText value="Your Cart" style="font-size: 24px"/>
+ <h:dataTable border="1" value="#{catalog.productsInCart}" var="item" id="cart">
+ <h:column id="column1">
+ <h:outputText value="#{item.name}"></h:outputText>
+ <f:facet name="header">
+ <h:outputText value=""></h:outputText>
+ </f:facet>
+ </h:column>
+ <h:column id="column2">
+ <h:outputText value="#{item.price}">
+ <f:convertNumber type="currency" currencySymbol="$" />
+ </h:outputText>
+ <f:facet name="header">
+ <h:outputText value=""></h:outputText>
+ </f:facet>
+ </h:column>
+ </h:dataTable>
+
+</f:view>
+</body>
+</html> \ No newline at end of file
diff --git a/sandbox/lresende/sca-1.x/samples/store-secure-webapp/build-dojo.xml b/sandbox/lresende/sca-1.x/samples/store-secure-webapp/build-dojo.xml
new file mode 100644
index 0000000000..6167eba10e
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/store-secure-webapp/build-dojo.xml
@@ -0,0 +1,62 @@
+<?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="DojoZipInstaller">
+ <property name="dojo.version" value="1.3.0"/>
+ <property name="dojo.zip" value="${localRepository}/org/dojotoolkit/dojo/${dojo.version}/dojo-${dojo.version}.zip"/>
+ <property name="unpack.location" value="${basedir}/src/main/resources/dojo"/>
+
+
+ <target name="check-dojo-installed">
+ <condition property="already.installed" >
+ <available file="${localRepository}/org/dojotoolkit/dojo/${dojo.version}/dojo-${dojo.version}.zip"/>
+ </condition>
+ </target>
+
+ <target name="check-dojo-unpacked">
+ <condition property="already.unpacked" >
+ <available file="${unpack.location}"/>
+ </condition>
+ </target>
+
+ <target name="unpack-dojo-files" depends="check-dojo-installed, check-dojo-unpacked" unless="already.unpacked">
+ <fail message="dojo zip file not installed in local repository: ${localRepository}" unless="already.installed"/>
+ <mkdir dir="${basedir}/target/dojo-unpack-temp/"/>
+ <unzip src="${localRepository}/org/dojotoolkit/dojo/${dojo.version}/dojo-${dojo.version}.zip"
+ dest="${basedir}/target/dojo-unpack-temp/"
+ overwrite="false"
+ encoding="native-encoding">
+ <patternset>
+ <include name="dojo-${dojo.version}/dojo/**"/>
+ <exclude name="dojo-${dojo.version}/dojo/tests/**"/>
+ <exclude name="dojo-${dojo.version}/dijit/**"/>
+ <exclude name="dojo-${dojo.version}/dojox/**"/>
+ <exclude name="dojo-${dojo.version}/util/**"/>
+ </patternset>
+ </unzip>
+ <move file="${basedir}/target/dojo-unpack-temp/dojo-${dojo.version}"
+ tofile="${unpack.location}"
+ verbose="true"/>
+ <delete dir="${basedir}/target/dojo-unpack-temp/"/>
+ </target>
+
+ <target name="clean-dojo-files">
+ <delete dir="${unpack.location}"/>
+ </target>
+</project>
diff --git a/sandbox/lresende/sca-1.x/samples/store-secure-webapp/build.xml b/sandbox/lresende/sca-1.x/samples/store-secure-webapp/build.xml
new file mode 100644
index 0000000000..fce9338312
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/store-secure-webapp/build.xml
@@ -0,0 +1,119 @@
+<!--
+ * 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="sample-store-secure-webapp" default="compile">
+
+ <target name="compile">
+ <mkdir dir="target/classes"/>
+ <javac destdir="target/classes" debug="on" source="1.5" target="1.5">
+ <src path="src/main/java"/>
+ <classpath>
+ <fileset refid="tuscany.jars"/>
+ <fileset refid="3rdparty.jars"/>
+ </classpath>
+ </javac>
+ <copy todir="target/classes">
+ <fileset dir="src/main/resources"/>
+ </copy>
+ <war destfile="target/sample-store-secure-webapp.war" webxml="src/main/webapp/WEB-INF/web.xml">
+ <fileset dir="src/main/webapp"/>
+ <lib refid="tuscany.jars"/>
+ <lib refid="3rdparty.jars"/>
+ <classes dir="target/classes"/>
+ </war>
+ </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.6-SNAPSHOT.jar"/>
+ <include name="tuscany-assembly-xml-1.6-SNAPSHOT.jar"/>
+ <include name="tuscany-assembly-xsd-1.6-SNAPSHOT.jar"/>
+ <include name="tuscany-binding-jsonrpc-1.6-SNAPSHOT.jar"/>
+ <include name="tuscany-binding-jsonrpc-runtime-1.6-SNAPSHOT.jar"/>
+ <include name="tuscany-binding-sca-1.6-SNAPSHOT.jar"/>
+ <include name="tuscany-binding-sca-xml-1.6-SNAPSHOT.jar"/>
+ <include name="tuscany-contribution-1.6-SNAPSHOT.jar"/>
+ <include name="tuscany-contribution-impl-1.6-SNAPSHOT.jar"/>
+ <include name="tuscany-contribution-java-1.6-SNAPSHOT.jar"/>
+ <include name="tuscany-contribution-namespace-1.6-SNAPSHOT.jar"/>
+ <include name="tuscany-contribution-xml-1.6-SNAPSHOT.jar"/>
+ <include name="tuscany-core-1.6-SNAPSHOT.jar"/>
+ <include name="tuscany-core-databinding-1.6-SNAPSHOT.jar"/>
+ <include name="tuscany-core-spi-1.6-SNAPSHOT.jar"/>
+ <include name="tuscany-databinding-1.6-SNAPSHOT.jar"/>
+ <include name="tuscany-databinding-jaxb-1.6-SNAPSHOT.jar"/>
+ <include name="tuscany-databinding-json-1.6-SNAPSHOT.jar"/>
+ <include name="tuscany-definitions-1.6-SNAPSHOT.jar"/>
+ <include name="tuscany-definitions-xml-1.6-SNAPSHOT.jar"/>
+ <include name="tuscany-endpoint-1.6-SNAPSHOT.jar"/>
+ <include name="tuscany-extensibility-1.6-SNAPSHOT.jar"/>
+ <include name="tuscany-host-embedded-1.6-SNAPSHOT.jar"/>
+ <include name="tuscany-host-http-1.6-SNAPSHOT.jar"/>
+ <include name="tuscany-host-webapp-1.6-SNAPSHOT.jar"/>
+ <include name="tuscany-implementation-java-1.6-SNAPSHOT.jar"/>
+ <include name="tuscany-implementation-java-runtime-1.6-SNAPSHOT.jar"/>
+ <include name="tuscany-implementation-java-xml-1.6-SNAPSHOT.jar"/>
+ <include name="tuscany-implementation-node-1.6-SNAPSHOT.jar"/>
+ <include name="tuscany-interface-1.6-SNAPSHOT.jar"/>
+ <include name="tuscany-interface-java-1.6-SNAPSHOT.jar"/>
+ <include name="tuscany-interface-java-jaxws-1.6-SNAPSHOT.jar"/>
+ <include name="tuscany-interface-java-xml-1.6-SNAPSHOT.jar"/>
+ <include name="tuscany-monitor-1.6-SNAPSHOT.jar"/>
+ <include name="tuscany-node-api-1.6-SNAPSHOT.jar"/>
+ <include name="tuscany-node-impl-1.6-SNAPSHOT.jar"/>
+ <include name="tuscany-policy-1.6-SNAPSHOT.jar"/>
+ <include name="tuscany-policy-security-1.6-SNAPSHOT.jar"/>
+ <include name="tuscany-policy-security-http-1.6-SNAPSHOT.jar"/>
+ <include name="tuscany-policy-xml-1.6-SNAPSHOT.jar"/>
+ <include name="tuscany-sca-api-1.6-SNAPSHOT.jar"/>
+ <include name="tuscany-sca-api-extension-1.6-SNAPSHOT.jar"/>
+ <include name="tuscany-xsd-1.6-SNAPSHOT.jar"/>
+ </fileset>
+ <fileset id="3rdparty.jars" dir="../../lib">
+ <include name="XmlSchema-1.4.2.jar"/>
+ <include name="activation-1.1.jar"/>
+ <include name="asm-all-3.1.jar"/>
+ <include name="axiom-api-1.2.7.jar"/>
+ <include name="axiom-impl-1.2.7.jar"/>
+ <include name="cglib-nodep-2.2.jar"/>
+ <include name="commons-codec-1.3.jar"/>
+ <include name="commons-logging-1.1.1.jar"/>
+ <include name="geronimo-activation_1.1_spec-1.0.1.jar"/>
+ <include name="geronimo-javamail_1.4_spec-1.2.jar"/>
+ <include name="geronimo-stax-api_1.0_spec-1.0.1.jar"/>
+ <include name="jaxb-api-2.1.jar"/>
+ <include name="jaxb-impl-2.1.7.jar"/>
+ <include name="jaxen-1.1.1.jar"/>
+ <include name="jaxws-api-2.1.jar"/>
+ <include name="jettison-1.0.1.jar"/>
+ <include name="json-rpc-1.0.jar"/>
+ <include name="jsr181-api-1.0-MR1.jar"/>
+ <include name="jsr250-api-1.0.jar"/>
+ <include name="stax-api-1.0-2.jar"/>
+ <include name="wstx-asl-3.2.4.jar"/>
+ </fileset>
+
+</project>
diff --git a/sandbox/lresende/sca-1.x/samples/store-secure-webapp/pom.xml b/sandbox/lresende/sca-1.x/samples/store-secure-webapp/pom.xml
new file mode 100644
index 0000000000..b95dda30fd
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/store-secure-webapp/pom.xml
@@ -0,0 +1,144 @@
+<?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-sca</artifactId>
+ <version>1.7-SNAPSHOT</version>
+ </parent>
+ <artifactId>sample-store-secure-webapp</artifactId>
+ <packaging>war</packaging>
+ <name>Apache Tuscany SCA Sample Store in a WebApp</name>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-host-webapp</artifactId>
+ <version>1.7-SNAPSHOT</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-implementation-java-runtime</artifactId>
+ <version>1.7-SNAPSHOT</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-binding-jsonrpc-runtime</artifactId>
+ <version>1.7-SNAPSHOT</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-policy-security</artifactId>
+ <version>1.7-SNAPSHOT</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-policy-security-http</artifactId>
+ <version>1.7-SNAPSHOT</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-policy-security-geronimo</artifactId>
+ <version>1.7-SNAPSHOT</version>
+ </dependency>
+
+ <!-- exclude stax 1.0.1 as we're also pulling in javax\xml\stream\stax-api\1.0-2 -->
+ <dependency>
+ <groupId>stax</groupId>
+ <artifactId>stax-api</artifactId>
+ <version>1.0.1</version>
+ <scope>provided</scope>
+ </dependency>
+
+ <!-- marking dependency as provided to exclude from war file -->
+ <dependency>
+ <groupId>javax.servlet</groupId>
+ <artifactId>servlet-api</artifactId>
+ <version>2.3</version>
+ <scope>provided</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>4.5</version>
+ <scope>test</scope>
+ </dependency>
+
+ </dependencies>
+
+ <build>
+ <finalName>${artifactId}</finalName>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-antrun-plugin</artifactId>
+ <!-- version>1.1</version -->
+ <dependencies>
+ <dependency>
+ <groupId>ant</groupId>
+ <artifactId>ant-trax</artifactId>
+ <version>1.6.5</version>
+ </dependency>
+ </dependencies>
+ <executions>
+ <execution>
+ <id>copy-dojo-files</id>
+ <phase>generate-resources</phase>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ <configuration>
+ <tasks>
+ <ant antfile="./build-dojo.xml" target="unpack-dojo-files">
+ <property name="localRepository" value="${settings.localRepository}"/>
+ <property name="artifactId" value="${artifactId}"/>
+ </ant>
+ </tasks>
+ </configuration>
+ </execution>
+ <execution>
+ <id>clean-dojo-files</id>
+ <phase>clean</phase>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ <configuration>
+ <tasks>
+ <ant antfile="./build-dojo.xml" target="clean-dojo-files">
+ <property name="localRepository" value="${settings.localRepository}"/>
+ <property name="artifactId" value="${artifactId}"/>
+ </ant>
+ </tasks>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/sandbox/lresende/sca-1.x/samples/store-secure-webapp/src/main/java/services/Catalog.java b/sandbox/lresende/sca-1.x/samples/store-secure-webapp/src/main/java/services/Catalog.java
new file mode 100644
index 0000000000..0d8d3d561a
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/store-secure-webapp/src/main/java/services/Catalog.java
@@ -0,0 +1,8 @@
+package services;
+
+import org.osoa.sca.annotations.Remotable;
+
+@Remotable
+public interface Catalog {
+ Item[] get();
+}
diff --git a/sandbox/lresende/sca-1.x/samples/store-secure-webapp/src/main/java/services/CurrencyConverter.java b/sandbox/lresende/sca-1.x/samples/store-secure-webapp/src/main/java/services/CurrencyConverter.java
new file mode 100644
index 0000000000..15b2c6e3a6
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/store-secure-webapp/src/main/java/services/CurrencyConverter.java
@@ -0,0 +1,12 @@
+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/sandbox/lresende/sca-1.x/samples/store-secure-webapp/src/main/java/services/CurrencyConverterImpl.java b/sandbox/lresende/sca-1.x/samples/store-secure-webapp/src/main/java/services/CurrencyConverterImpl.java
new file mode 100644
index 0000000000..2bf9d8d42b
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/store-secure-webapp/src/main/java/services/CurrencyConverterImpl.java
@@ -0,0 +1,21 @@
+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/sandbox/lresende/sca-1.x/samples/store-secure-webapp/src/main/java/services/FruitsCatalogImpl.java b/sandbox/lresende/sca-1.x/samples/store-secure-webapp/src/main/java/services/FruitsCatalogImpl.java
new file mode 100644
index 0000000000..4cac4ac21d
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/store-secure-webapp/src/main/java/services/FruitsCatalogImpl.java
@@ -0,0 +1,35 @@
+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/sandbox/lresende/sca-1.x/samples/store-secure-webapp/src/main/java/services/Item.java b/sandbox/lresende/sca-1.x/samples/store-secure-webapp/src/main/java/services/Item.java
new file mode 100644
index 0000000000..e8bcfabfb1
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/store-secure-webapp/src/main/java/services/Item.java
@@ -0,0 +1,30 @@
+package services;
+
+public class Item {
+ private String name;
+ private String price;
+
+ public Item() {
+ }
+
+ 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;
+ }
+}
diff --git a/sandbox/lresende/sca-1.x/samples/store-secure-webapp/src/main/java/store/security/StoreCallbackHandler.java b/sandbox/lresende/sca-1.x/samples/store-secure-webapp/src/main/java/store/security/StoreCallbackHandler.java
new file mode 100644
index 0000000000..88e3a778a0
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/store-secure-webapp/src/main/java/store/security/StoreCallbackHandler.java
@@ -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.
+ */
+
+package store.security;
+
+import java.io.IOException;
+
+import javax.security.auth.callback.Callback;
+import javax.security.auth.callback.CallbackHandler;
+import javax.security.auth.callback.NameCallback;
+import javax.security.auth.callback.PasswordCallback;
+import javax.security.auth.callback.UnsupportedCallbackException;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class StoreCallbackHandler implements CallbackHandler {
+
+ public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException {
+ for (int i = 0; i < callbacks.length; i++) {
+ if (callbacks[i] instanceof NameCallback) {
+ NameCallback nc = (NameCallback)callbacks[i];
+ nc.setName("PWEST");
+ } else if (callbacks[i] instanceof PasswordCallback) {
+ PasswordCallback pc = (PasswordCallback)callbacks[i];
+ pc.setPassword("xxx".toCharArray());
+ } else {
+ throw new UnsupportedCallbackException
+ (callbacks[i], "Unsupported Callback!");
+ }
+ }
+ }
+
+}
diff --git a/sandbox/lresende/sca-1.x/samples/store-secure-webapp/src/main/resources/definitions.xml b/sandbox/lresende/sca-1.x/samples/store-secure-webapp/src/main/resources/definitions.xml
new file mode 100644
index 0000000000..55789c8443
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/store-secure-webapp/src/main/resources/definitions.xml
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+ * 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.
+-->
+<sca:definitions xmlns="http://www.osoa.org/xmlns/sca/1.0"
+ targetNamespace="http://www.osoa.org/xmlns/sca/1.0"
+ xmlns:sca="http://www.osoa.org/xmlns/sca/1.0"
+ xmlns:tuscany="http://tuscany.apache.org/xmlns/sca/1.0"
+ xmlns:store="http://store">
+
+ <!-- PolicySets -->
+ <!-- sca:policySet xmlns="http://www.osoa.org/xmlns/sca/1.0"
+ name="jsonRPCsecurityPolicy"
+ provides="sca:authentication"
+ appliesTo="tuscany:binding.jsonrpc">
+ <tuscany:authenticationConfiguration realm="ldap-realm"/>
+ </sca:policySet-->
+
+
+ <!-- PolicySets -->
+ <!-- policySet xmlns="http://www.osoa.org/xmlns/sca/1.0"
+ name="JaasPolicy"
+ provides="tuscany:jaasAuthentication"
+ appliesTo="sca:implementation.java">
+
+ <tuscany:jaasAuthentication>
+ <tuscany:configurationName>ldap-realm</tuscany:configurationName>
+ <tuscany:callbackHandler>store.security.StoreCallbackHandler</tuscany:callbackHandler>
+ </tuscany:jaasAuthentication>
+ </policySet-->
+
+ <!-- PolicySets -->
+ <policySet xmlns="http://www.osoa.org/xmlns/sca/1.0"
+ name="RealmBaseAuthenticationPolicy"
+ provides="sca:authentication"
+ appliesTo="sca:implementation.java">
+
+ <tuscany:ldapRealmAuthentication>
+ <tuscany:realm>ldap-realm</tuscany:realm>
+ <tuscany:realmConfigurationName>ldap-realm</tuscany:realmConfigurationName>
+ </tuscany:ldapRealmAuthentication>
+ </policySet>
+
+ <policySet xmlns="http://www.osoa.org/xmlns/sca/1.0"
+ name="allowUser"
+ provides="sca:authorization"
+ appliesTo="sca:implementation.java">
+ <allow roles="user"/>
+ </policySet>
+
+ <policySet xmlns="http://www.osoa.org/xmlns/sca/1.0"
+ name="allowManager"
+ provides="sca:authorization"
+ appliesTo="sca:implementation.java">
+ <allow roles="manager"/>
+ </policySet>
+
+ </sca:definitions> \ No newline at end of file
diff --git a/sandbox/lresende/sca-1.x/samples/store-secure-webapp/src/main/resources/store.composite b/sandbox/lresende/sca-1.x/samples/store-secure-webapp/src/main/resources/store.composite
new file mode 100644
index 0000000000..5c567cbd15
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/store-secure-webapp/src/main/resources/store.composite
@@ -0,0 +1,41 @@
+<?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:tuscany="http://tuscany.apache.org/xmlns/sca/1.0"
+ xmlns:s="http://store"
+ targetNamespace="http://store"
+ name="store">
+
+ <component name="Catalog">
+ <implementation.java class="services.FruitsCatalogImpl">
+ <operation name="get" policySets="allowManager" /> <!-- requires="authorization" policySets="allowManager" -->
+ </implementation.java>
+ <property name="currencyCode">USD</property>
+ <service name="Catalog">
+ <operation name="get" requires="authentication"/>
+ <tuscany:binding.jsonrpc/>
+ </service>
+ <reference name="currencyConverter" target="CurrencyConverter" />
+ </component>
+
+ <component name="CurrencyConverter">
+ <implementation.java class="services.CurrencyConverterImpl" />
+ </component>
+</composite>
diff --git a/sandbox/lresende/sca-1.x/samples/store-secure-webapp/src/main/webapp/META-INF/sca-contribution.xml b/sandbox/lresende/sca-1.x/samples/store-secure-webapp/src/main/webapp/META-INF/sca-contribution.xml
new file mode 100644
index 0000000000..41c84c9a44
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/store-secure-webapp/src/main/webapp/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:store="http://store">
+ <deployable composite="store:store"/>
+</contribution> \ No newline at end of file
diff --git a/sandbox/lresende/sca-1.x/samples/store-secure-webapp/src/main/webapp/WEB-INF/geronimo-web.xml b/sandbox/lresende/sca-1.x/samples/store-secure-webapp/src/main/webapp/WEB-INF/geronimo-web.xml
new file mode 100644
index 0000000000..705010bf7c
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/store-secure-webapp/src/main/webapp/WEB-INF/geronimo-web.xml
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<web:web-app
+ xmlns:app="http://geronimo.apache.org/xml/ns/j2ee/application-2.0"
+ xmlns:client="http://geronimo.apache.org/xml/ns/j2ee/application-client-2.0"
+ xmlns:conn="http://geronimo.apache.org/xml/ns/j2ee/connector-1.2"
+ xmlns:dep="http://geronimo.apache.org/xml/ns/deployment-1.2"
+ xmlns:lc="http://geronimo.apache.org/xml/ns/loginconfig-2.0"
+ xmlns:ejb="http://openejb.apache.org/xml/ns/openejb-jar-2.2"
+ xmlns:name="http://geronimo.apache.org/xml/ns/naming-1.2"
+ xmlns:pers="http://java.sun.com/xml/ns/persistence"
+ xmlns:pkgen="http://openejb.apache.org/xml/ns/pkgen-2.1"
+ xmlns:sec="http://geronimo.apache.org/xml/ns/security-2.0"
+ xmlns:web="http://geronimo.apache.org/xml/ns/j2ee/web-2.0.1">
+ <dep:environment>
+ <dep:moduleId>
+ <dep:groupId>org.apache.tuscany</dep:groupId>
+ <dep:artifactId>sample-store-secure-webapp</dep:artifactId>
+ <dep:version>1.0</dep:version>
+ <dep:type>car</dep:type>
+ </dep:moduleId>
+ <!-- TUSCANY-2622 -->
+ <dep:hidden-classes>
+ <dep:filter>org.apache.axiom</dep:filter>
+ <dep:filter>org.apache.axis2</dep:filter>
+ <dep:filter>org.apache.commons</dep:filter>
+ <dep:filter>org.jdom</dep:filter>
+ </dep:hidden-classes>
+ </dep:environment>
+
+ <web:context-root>/sample-store-secure-webapp</web:context-root>
+
+ <web:security-realm-name>ldap-realm</web:security-realm-name>
+ <sec:security>
+ <sec:role-mappings>
+ <!--
+ <sec:role role-name="manager">
+ <sec:principal name="lmanager" class="org.apache.geronimo.security.realm.providers.GeronimoUserPrincipal" />
+ </sec:role>
+ <sec:role role-name="user">
+ <sec:principal name="lresende" class="org.apache.geronimo.security.realm.providers.GeronimoUserPrincipal" />
+ </sec:role>
+ -->
+ <sec:role role-name="manager">
+ <sec:principal name="managers" class="org.apache.geronimo.security.realm.providers.GeronimoGroupPrincipal" designated-run-as="true"/>
+ </sec:role>
+ </sec:role-mappings>
+ </sec:security>
+
+ <dep:gbean name="ldap-realm" class="org.apache.geronimo.security.realm.GenericSecurityRealm">
+ <dep:attribute name="realmName">ldap-realm</dep:attribute>
+ <dep:xml-reference name="LoginModuleConfiguration">
+ <lc:login-config>
+ <lc:login-module control-flag="REQUIRED" wrap-principals="false">
+ <lc:login-domain-name>ldap-realm</lc:login-domain-name>
+ <lc:login-module-class>org.apache.geronimo.security.realm.providers.LDAPLoginModule</lc:login-module-class>
+ <!-- lc:option name="users">foo,bar</lc:option-->
+ <lc:option name="initialContextFactory">com.sun.jndi.ldap.LdapCtxFactory</lc:option>
+ <lc:option name="connectionURL">ldap://dpev007.innovate.ibm.com:389</lc:option>
+ <lc:option name="connectionUsername">cn=ldaproot,dc=tnc,dc=org</lc:option>
+ <lc:option name="connectionPassword">ldappass</lc:option>
+ <lc:option name="authentication">simple</lc:option>
+ <lc:option name="userBase">ou=people,dc=tnc,dc=org</lc:option>
+ <lc:option name="userSearchMatching">uid={0}</lc:option>
+ <lc:option name="userSearchSubtree">false</lc:option>
+ <lc:option name="roleBase">ou=groups,dc=tnc,dc=org</lc:option>
+ <lc:option name="roleName">cn</lc:option>
+ <lc:option name="roleSearchMatching">(member={0})</lc:option>
+ <lc:option name="roleSearchSubtree">false</lc:option>
+ </lc:login-module>
+ </lc:login-config>
+ </dep:xml-reference>
+ </dep:gbean>
+</web:web-app>
diff --git a/sandbox/lresende/sca-1.x/samples/store-secure-webapp/src/main/webapp/WEB-INF/web.xml b/sandbox/lresende/sca-1.x/samples/store-secure-webapp/src/main/webapp/WEB-INF/web.xml
new file mode 100644
index 0000000000..704c7631b0
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/store-secure-webapp/src/main/webapp/WEB-INF/web.xml
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
+ <display-name>sample-store-secure-webapp</display-name>
+
+ <filter>
+ <filter-name>tuscany</filter-name>
+ <filter-class>org.apache.tuscany.sca.host.webapp.TuscanyServletFilter</filter-class>
+ </filter>
+
+ <filter-mapping>
+ <filter-name>tuscany</filter-name>
+ <url-pattern>/*</url-pattern>
+ </filter-mapping>
+
+ <welcome-file-list id="WelcomeFileList">
+ <welcome-file>store.html</welcome-file>
+ </welcome-file-list>
+
+ <!-- login-config>
+ <auth-method>BASIC</auth-method>
+ <realm-name>ldap-realm</realm-name>
+ </login-config-->
+
+ <login-config>
+ <auth-method>FORM</auth-method>
+ <realm-name>ldap-realm</realm-name>
+ <form-login-config>
+ <form-login-page>/auth/logon.html</form-login-page>
+ <form-error-page>/auth/logonError.html</form-error-page>
+ </form-login-config>
+ </login-config>
+
+ <security-role>
+ <description>Application managers</description>
+ <role-name>manager</role-name>
+ </security-role>
+
+ <security-role>
+ <description>Application users</description>
+ <role-name>user</role-name>
+ </security-role>
+
+ <security-constraint>
+ <web-resource-collection>
+ <web-resource-name>Areas with authentication required</web-resource-name>
+ <url-pattern>/protected/*</url-pattern>
+ <http-method>GET</http-method>
+ <http-method>POST</http-method>
+ </web-resource-collection>
+ <auth-constraint>
+ <role-name>manager</role-name>
+ </auth-constraint>
+ </security-constraint>
+
+ <env-entry>
+ <env-entry-name>org.apache.tuscany.sca.contribution.processor.ValidationSchemaExtensionPoint.enabled</env-entry-name>
+ <env-entry-type>java.lang.String</env-entry-type>
+ <env-entry-value>false</env-entry-value>
+ </env-entry>
+</web-app> \ No newline at end of file
diff --git a/sandbox/lresende/sca-1.x/samples/store-secure-webapp/src/main/webapp/auth/logon.html b/sandbox/lresende/sca-1.x/samples/store-secure-webapp/src/main/webapp/auth/logon.html
new file mode 100644
index 0000000000..09191f7010
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/store-secure-webapp/src/main/webapp/auth/logon.html
@@ -0,0 +1,20 @@
+<HTML>
+<H1>Store Authentication</H1>
+<form method="POST" action="j_security_check">
+<table border="0" cellspacing="2" cellpadding="1">
+<tr>
+ <td>Username:</td>
+ <td><input size="12" value="" name="j_username" maxlength="25" type="text"></td>
+</tr>
+<tr>
+ <td>Password:</td>
+ <td><input size="12" value="" name="j_password" maxlength="25" type="password"></td>
+</tr>
+<tr>
+ <td colspan="2" align="center">
+ <input name="submit" type="submit" value="Login">
+ </td>
+</tr>
+</table>
+</form>
+</HTML> \ No newline at end of file
diff --git a/sandbox/lresende/sca-1.x/samples/store-secure-webapp/src/main/webapp/auth/logonError.html b/sandbox/lresende/sca-1.x/samples/store-secure-webapp/src/main/webapp/auth/logonError.html
new file mode 100644
index 0000000000..c0c0f7b75d
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/store-secure-webapp/src/main/webapp/auth/logonError.html
@@ -0,0 +1,5 @@
+<HTML>
+<H1>Store Authentication ERROR</H1>
+Username, password or role incorrect.
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
+</HTML> \ No newline at end of file
diff --git a/sandbox/lresende/sca-1.x/samples/store-secure-webapp/src/main/webapp/store.html b/sandbox/lresende/sca-1.x/samples/store-secure-webapp/src/main/webapp/store.html
new file mode 100644
index 0000000000..e4cd0ba12d
--- /dev/null
+++ b/sandbox/lresende/sca-1.x/samples/store-secure-webapp/src/main/webapp/store.html
@@ -0,0 +1,48 @@
+<html>
+<head>
+<title>Store</title>
+
+<script type="text/javascript" src="dojo/dojo/dojo.js"></script>
+
+<script type="text/javascript">
+ dojo.require("dojo.rpc.JsonService");
+</script>
+
+<script language="JavaScript">
+
+ var catalog = new dojo.rpc.JsonService("Catalog?smd");
+
+ var catalogItems;
+
+ function catalog_getResponse(items) {
+ 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 init() {
+ catalog.get().addCallback(catalog_getResponse);
+ }
+
+</script>
+
+</head>
+
+<body onload="init()">
+<h1>Store</h1>
+ <div id="store">
+ <h2>Catalog</h2>
+ <form name="catalogForm">
+ <div id="catalog" ></div>
+ <br>
+ </form>
+
+ <br>
+ </div>
+</body>
+</html>