From 56f0d297c6eba38d5187431ed9319a97ff5d6094 Mon Sep 17 00:00:00 2001 From: lresende Date: Mon, 4 Oct 2010 14:44:27 +0000 Subject: Rename 2.0-M5.1 release tag git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@1004265 13f79535-47bb-0310-9956-ffa450edef68 --- sca-java-2.x/tags/2.0-M5.1/samples/README | 269 +++++++++++++++++ .../tags/2.0-M5.1/samples/binding-rmi/README | 1 + .../contribution-calculator-reference/README | 34 +++ .../contribution-calculator-reference/build.xml | 59 ++++ .../contribution-calculator-reference/pom.xml | 69 +++++ .../src/main/java/calculator/AddService.java | 28 ++ .../main/java/calculator/CalculatorService.java | 39 +++ .../java/calculator/CalculatorServiceImpl.java | 68 +++++ .../src/main/java/calculator/DivideService.java | 28 ++ .../src/main/java/calculator/MultiplyService.java | 28 ++ .../src/main/java/calculator/SubtractService.java | 28 ++ .../resources/CalculatorRMIReference.composite | 42 +++ .../calculator/CalculatorRMIReferenceTestCase.java | 70 +++++ .../java/calculator/CalculatorRMIServiceImpl.java | 52 ++++ .../contribution-calculator-service/README | 28 ++ .../contribution-calculator-service/build.xml | 59 ++++ .../contribution-calculator-service/pom.xml | 67 +++++ .../src/main/java/calculator/AddService.java | 28 ++ .../src/main/java/calculator/AddServiceImpl.java | 30 ++ .../src/main/java/calculator/CalculatorClient.java | 40 +++ .../main/java/calculator/CalculatorService.java | 36 +++ .../java/calculator/CalculatorServiceImpl.java | 68 +++++ .../src/main/java/calculator/DivideService.java | 28 ++ .../main/java/calculator/DivideServiceImpl.java | 30 ++ .../src/main/java/calculator/MultiplyService.java | 28 ++ .../main/java/calculator/MultiplyServiceImpl.java | 30 ++ .../src/main/java/calculator/SubtractService.java | 28 ++ .../main/java/calculator/SubtractServiceImpl.java | 30 ++ .../main/resources/CalculatorRMIServer.composite | 53 ++++ .../main/resources/META-INF/sca-contribution.xml | 23 ++ .../calculator/CalculatorRMIServerTestCase.java | 63 ++++ .../tags/2.0-M5.1/samples/binding-rmi/pom.xml | 44 +++ .../tags/2.0-M5.1/samples/binding-sca/README | 1 + .../binding-sca/contribution-calculator/README | 26 ++ .../binding-sca/contribution-calculator/build.xml | 57 ++++ .../binding-sca/contribution-calculator/pom.xml | 58 ++++ .../src/main/java/calculator/AddService.java | 28 ++ .../src/main/java/calculator/AddServiceImpl.java | 38 +++ .../src/main/java/calculator/CalculatorClient.java | 52 ++++ .../main/java/calculator/CalculatorService.java | 37 +++ .../java/calculator/CalculatorServiceImpl.java | 72 +++++ .../src/main/java/calculator/DivideService.java | 28 ++ .../main/java/calculator/DivideServiceImpl.java | 38 +++ .../src/main/java/calculator/MultiplyService.java | 28 ++ .../main/java/calculator/MultiplyServiceImpl.java | 38 +++ .../src/main/java/calculator/SubtractService.java | 28 ++ .../main/java/calculator/SubtractServiceImpl.java | 38 +++ .../src/main/resources/Calculator.composite | 49 +++ .../src/main/resources/CalculatorClient.composite | 30 ++ .../main/resources/META-INF/sca-contribution.xml | 24 ++ .../test/java/calculator/CalculatorTestCase.java | 50 ++++ .../tags/2.0-M5.1/samples/binding-sca/pom.xml | 43 +++ .../samples/calculator-osgi/META-INF/MANIFEST.MF | 19 ++ .../tags/2.0-M5.1/samples/calculator-osgi/README | 99 +++++++ .../2.0-M5.1/samples/calculator-osgi/build.xml | 78 +++++ .../tags/2.0-M5.1/samples/calculator-osgi/pom.xml | 116 ++++++++ .../src/main/java/calculator/AddService.java | 28 ++ .../src/main/java/calculator/AddServiceImpl.java | 35 +++ .../main/java/calculator/CalculatorActivator.java | 54 ++++ .../src/main/java/calculator/CalculatorClient.java | 52 ++++ .../main/java/calculator/CalculatorService.java | 34 +++ .../java/calculator/CalculatorServiceImpl.java | 69 +++++ .../src/main/java/calculator/DivideService.java | 28 ++ .../main/java/calculator/DivideServiceImpl.java | 35 +++ .../src/main/java/calculator/MultiplyService.java | 28 ++ .../main/java/calculator/MultiplyServiceImpl.java | 35 +++ .../src/main/java/calculator/SubtractService.java | 28 ++ .../main/java/calculator/SubtractServiceImpl.java | 35 +++ .../src/main/resources/Calculator.composite | 54 ++++ .../test/java/calculator/CalculatorTestCase.java | 54 ++++ .../2.0-M5.1/samples/calculator-scaclient/README | 13 + .../2.0-M5.1/samples/calculator-scaclient/pom.xml | 69 +++++ .../main/java/calculator/CalculatorService.java | 38 +++ .../src/main/java/sample/CalculatorSCAClient.java | 53 ++++ .../contribution-binding-ws-calculator/README | 25 ++ .../contribution-binding-ws-calculator/build.xml | 55 ++++ .../calculator.odg | Bin 0 -> 12477 bytes .../calculator.png | Bin 0 -> 41196 bytes .../contribution-binding-ws-calculator/pom.xml | 54 ++++ .../src/main/java/calculator/AddService.java | 31 ++ .../src/main/java/calculator/AddServiceImpl.java | 35 +++ .../main/java/calculator/CalculatorService.java | 35 +++ .../java/calculator/CalculatorServiceImpl.java | 70 +++++ .../src/main/java/calculator/DivideService.java | 28 ++ .../main/java/calculator/DivideServiceImpl.java | 35 +++ .../src/main/java/calculator/MultiplyService.java | 28 ++ .../main/java/calculator/MultiplyServiceImpl.java | 35 +++ .../src/main/java/calculator/SubtractService.java | 28 ++ .../main/java/calculator/SubtractServiceImpl.java | 35 +++ .../src/main/resources/Calculator.composite | 54 ++++ .../main/resources/META-INF/sca-contribution.xml | 23 ++ .../test/java/calculator/CalculatorTestCase.java | 50 ++++ .../README | 25 ++ .../build.xml | 56 ++++ .../pom.xml | 58 ++++ .../src/main/java/calculator/AddService.java | 28 ++ .../src/main/java/calculator/AddServiceImpl.java | 35 +++ .../src/main/java/calculator/CalculatorClient.java | 62 ++++ .../main/java/calculator/CalculatorService.java | 37 +++ .../java/calculator/CalculatorServiceImpl.java | 70 +++++ .../src/main/java/calculator/DivideService.java | 28 ++ .../main/java/calculator/DivideServiceImpl.java | 35 +++ .../src/main/java/calculator/MultiplyService.java | 28 ++ .../main/java/calculator/MultiplyServiceImpl.java | 35 +++ .../src/main/java/calculator/SubtractService.java | 28 ++ .../main/java/calculator/SubtractServiceImpl.java | 35 +++ .../src/main/resources/Calculator.composite | 49 +++ .../src/main/resources/CalculatorClient.composite | 30 ++ .../main/resources/META-INF/sca-contribution.xml | 24 ++ .../test/java/calculator/CalculatorTestCase.java | 49 +++ .../samples/dosgi-calculator-operations/LICENSE | 205 +++++++++++++ .../META-INF/MANIFEST.MF | 22 ++ .../samples/dosgi-calculator-operations/NOTICE | 6 + .../OSGI-INF/add-component.xml | 25 ++ .../OSGI-INF/blueprint/operations-module.xml | 40 +++ .../OSGI-INF/divide-component.xml | 25 ++ .../OSGI-INF/multiply-component.xml | 25 ++ .../OSGI-INF/sca/bundle.componentType | 54 ++++ .../OSGI-INF/sca/bundle.composite | 43 +++ .../OSGI-INF/subtract-component.xml | 25 ++ .../samples/dosgi-calculator-operations/README | 185 ++++++++++++ .../samples/dosgi-calculator-operations/pom.xml | 148 +++++++++ .../calculator/dosgi/operations/AddService.java | 31 ++ .../calculator/dosgi/operations/DivideService.java | 31 ++ .../dosgi/operations/MultiplyService.java | 31 ++ .../dosgi/operations/SubtractService.java | 31 ++ .../dosgi/operations/impl/AddServiceImpl.java | 37 +++ .../dosgi/operations/impl/DivideServiceImpl.java | 37 +++ .../dosgi/operations/impl/MultiplyServiceImpl.java | 37 +++ .../dosgi/operations/impl/OperationsActivator.java | 88 ++++++ .../dosgi/operations/impl/SubtractServiceImpl.java | 37 +++ .../main/resources/META-INF/sca-contribution.xml | 23 ++ .../dosgi/operations/test/OSGiTestUtils.java | 105 +++++++ .../dosgi/operations/test/OperationsNode.java | 43 +++ .../test/OperationsOSGiNodeTestCase.java | 104 +++++++ .../tags/2.0-M5.1/samples/dosgi-calculator/LICENSE | 205 +++++++++++++ .../samples/dosgi-calculator/META-INF/MANIFEST.MF | 20 ++ .../tags/2.0-M5.1/samples/dosgi-calculator/NOTICE | 6 + .../OSGI-INF/blueprint/calculator-module.xml | 43 +++ .../OSGI-INF/calculator-component.xml | 36 +++ .../OSGI-INF/sca/bundle.componentType | 64 ++++ .../dosgi-calculator/OSGI-INF/sca/bundle.composite | 45 +++ .../tags/2.0-M5.1/samples/dosgi-calculator/README | 143 +++++++++ .../samples/dosgi-calculator/dosgi-calculator.png | Bin 0 -> 85103 bytes .../tags/2.0-M5.1/samples/dosgi-calculator/pom.xml | 153 ++++++++++ .../java/calculator/dosgi/CalculatorService.java | 36 +++ .../calculator/dosgi/impl/CalculatorActivator.java | 76 +++++ .../dosgi/impl/CalculatorServiceDSImpl.java | 114 +++++++ .../dosgi/impl/CalculatorServiceImpl.java | 105 +++++++ .../calculator/dosgi/operations/AddService.java | 31 ++ .../calculator/dosgi/operations/DivideService.java | 31 ++ .../dosgi/operations/MultiplyService.java | 31 ++ .../dosgi/operations/SubtractService.java | 31 ++ .../java/calculator/rmi/OperationsRMIServer.java | 93 ++++++ .../calculator/rmi/OperationsRMIServer_Stub.java | 132 +++++++++ .../main/java/calculator/rmi/OperationsRemote.java | 37 +++ .../main/resources/META-INF/sca-contribution.xml | 24 ++ .../java/calculator/dosgi/test/CalculatorNode.java | 43 +++ .../dosgi/test/CalculatorOSGiNodeTestCase.java | 152 ++++++++++ .../java/calculator/dosgi/test/OSGiTestUtils.java | 105 +++++++ .../dosgi-dynamic-calculator-operations/LICENSE | 205 +++++++++++++ .../META-INF/MANIFEST.MF | 23 ++ .../dosgi-dynamic-calculator-operations/NOTICE | 6 + .../OSGI-INF/add-component.xml | 25 ++ .../OSGI-INF/blueprint/operations-module.xml | 40 +++ .../OSGI-INF/divide-component.xml | 25 ++ .../OSGI-INF/multiply-component.xml | 25 ++ .../OSGI-INF/sca-config/operations-config.xml | 29 ++ .../OSGI-INF/subtract-component.xml | 25 ++ .../dosgi-dynamic-calculator-operations/README | 196 ++++++++++++ .../dosgi-dynamic-calculator-operations/pom.xml | 148 +++++++++ .../calculator/dosgi/operations/AddService.java | 31 ++ .../calculator/dosgi/operations/DivideService.java | 31 ++ .../dosgi/operations/MultiplyService.java | 31 ++ .../dosgi/operations/SubtractService.java | 31 ++ .../dosgi/operations/impl/AddServiceImpl.java | 37 +++ .../dosgi/operations/impl/DivideServiceImpl.java | 37 +++ .../dosgi/operations/impl/MultiplyServiceImpl.java | 37 +++ .../dosgi/operations/impl/OperationsActivator.java | 94 ++++++ .../dosgi/operations/impl/SubtractServiceImpl.java | 37 +++ .../dosgi/operations/test/OSGiTestUtils.java | 105 +++++++ .../dosgi/operations/test/OperationsNode.java | 43 +++ .../test/OperationsOSGiNodeTestCase.java | 104 +++++++ .../samples/dosgi-dynamic-calculator/LICENSE | 205 +++++++++++++ .../dosgi-dynamic-calculator/META-INF/MANIFEST.MF | 23 ++ .../samples/dosgi-dynamic-calculator/NOTICE | 6 + .../OSGI-INF/blueprint/calculator-module.xml | 43 +++ .../OSGI-INF/calculator-component.xml | 36 +++ .../calculator-service-descriptions.xml | 61 ++++ .../OSGI-INF/sca-config/calculator-config.xml | 32 ++ .../samples/dosgi-dynamic-calculator/README | 145 +++++++++ .../dosgi-dynamic-calculator/dosgi-calculator.png | Bin 0 -> 85103 bytes .../samples/dosgi-dynamic-calculator/pom.xml | 153 ++++++++++ .../java/calculator/dosgi/CalculatorService.java | 36 +++ .../calculator/dosgi/impl/CalculatorActivator.java | 78 +++++ .../dosgi/impl/CalculatorServiceDSImpl.java | 114 +++++++ .../dosgi/impl/CalculatorServiceImpl.java | 99 +++++++ .../calculator/dosgi/operations/AddService.java | 31 ++ .../calculator/dosgi/operations/DivideService.java | 31 ++ .../dosgi/operations/MultiplyService.java | 31 ++ .../dosgi/operations/SubtractService.java | 31 ++ .../java/calculator/rmi/OperationsRMIServer.java | 93 ++++++ .../calculator/rmi/OperationsRMIServer_Stub.java | 132 +++++++++ .../main/java/calculator/rmi/OperationsRemote.java | 37 +++ .../java/calculator/dosgi/test/CalculatorNode.java | 43 +++ .../dosgi/test/CalculatorOSGiNodeTestCase.java | 144 +++++++++ .../java/calculator/dosgi/test/OSGiTestUtils.java | 105 +++++++ .../tags/2.0-M5.1/samples/helloworld-bpel/README | 153 ++++++++++ .../2.0-M5.1/samples/helloworld-bpel/build.xml | 95 ++++++ .../samples/helloworld-bpel/helloworld-bpel.png | Bin 0 -> 8897 bytes .../samples/helloworld-bpel/helloworld-bpel.svg | 179 +++++++++++ .../tags/2.0-M5.1/samples/helloworld-bpel/pom.xml | 76 +++++ .../src/main/java/helloworld/Hello.java | 29 ++ .../main/resources/META-INF/sca-contribution.xml | 23 ++ .../src/main/resources/helloworld.bpel | 80 +++++ .../src/main/resources/helloworld.composite | 29 ++ .../src/main/resources/helloworld.wsdl | 94 ++++++ .../src/main/resources/log4j.properties | 35 +++ .../2.0-M5.1/samples/helloworld-scaclient/pom.xml | 69 +++++ .../src/main/java/sample/Helloworld.java | 28 ++ .../src/main/java/sample/HelloworldSCAClient.java | 51 ++++ .../src/test/java/sample/HelloworldTestCase.java | 33 +++ .../2.0-M5.1/samples/helloworld-spring/pom.xml | 67 +++++ .../src/main/java/sample/Helloworld.java | 28 ++ .../src/main/java/sample/HelloworldImpl.java | 28 ++ .../main/resources/META-INF/sca-contribution.xml | 23 ++ .../src/main/resources/helloworld-context.xml | 30 ++ .../src/main/resources/helloworld.composite | 29 ++ .../src/test/java/sample/HelloworldTestCase.java | 33 +++ .../tags/2.0-M5.1/samples/helloworld-ws-sdo/README | 214 ++++++++++++++ .../2.0-M5.1/samples/helloworld-ws-sdo/build.xml | 101 +++++++ .../helloworld-ws-sdo/helloworld-ws-sdo.png | Bin 0 -> 7549 bytes .../samples/helloworld-ws-sdo/maven-eclipse.xml | 8 + .../2.0-M5.1/samples/helloworld-ws-sdo/pom.xml | 180 +++++++++++ .../src/main/java/helloworld/HelloWorldClient.java | 51 ++++ .../src/main/java/helloworld/HelloWorldImpl.java | 33 +++ .../src/main/java/helloworld/HelloWorldServer.java | 51 ++++ .../main/java/helloworld/HelloWorldService.java | 34 +++ .../helloworld/HelloWorldServiceComponent.java | 42 +++ .../main/java/services/bcircle/BioTestCase.java | 59 ++++ .../java/services/bcircle/BiochemicalCircle.java | 29 ++ .../services/bcircle/BiochemicalCircleImpl.java | 40 +++ .../main/resources/META-INF/sca-contribution.xml | 28 ++ .../src/main/resources/helloworldws.composite | 31 ++ .../main/resources/helloworldwsclient.composite | 34 +++ .../src/main/resources/logging.properties | 30 ++ .../resources/clinicalLaboratory.composite | 34 +++ .../helloworld-ws-sdo/src/main/resources/test.xsd | 35 +++ .../src/main/resources/wsdl/helloworld.wsdl | 88 ++++++ .../java/helloworld/HelloWorldClientTestCase.java | 85 ++++++ .../test/java/helloworld/HelloWorldTestServer.java | 67 +++++ .../src/test/java/helloworld/TestCaseRunner.java | 329 +++++++++++++++++++++ .../tags/2.0-M5.1/samples/helloworld/README | 7 + .../tags/2.0-M5.1/samples/helloworld/pom.xml | 58 ++++ .../src/main/java/sample/Helloworld.java | 28 ++ .../src/main/java/sample/HelloworldImpl.java | 28 ++ .../main/resources/META-INF/sca-contribution.xml | 23 ++ .../src/main/resources/helloworld.composite | 29 ++ .../src/test/java/sample/HelloworldTestCase.java | 33 +++ .../2.0-M5.1/samples/launcher-command-line/README | 13 + .../2.0-M5.1/samples/launcher-embedded-jse/README | 20 ++ .../samples/launcher-embedded-jse/build.xml | 119 ++++++++ .../2.0-M5.1/samples/launcher-embedded-jse/pom.xml | 76 +++++ .../main/java/calculator/CalculatorService.java | 38 +++ .../src/main/java/launcher/RuntimeIntegration.java | 43 +++ .../src/main/java/launcher/SampleJSELauncher.java | 150 ++++++++++ .../java/launcher/SampleLauncherException.java | 42 +++ .../src/test/java/launcher/LauncherTestCase.java | 47 +++ .../2.0-M5.1/samples/launcher-embedded-osgi/README | 20 ++ .../samples/launcher-embedded-osgi/build.xml | 94 ++++++ .../samples/launcher-embedded-osgi/pom.xml | 76 +++++ .../main/java/calculator/CalculatorService.java | 38 +++ .../src/main/java/launcher/RuntimeIntegration.java | 61 ++++ .../src/main/java/launcher/SampleJSELauncher.java | 89 ++++++ .../java/launcher/SampleLauncherException.java | 42 +++ .../src/test/java/launcher/LauncherTestCase.java | 39 +++ .../tags/2.0-M5.1/samples/launcher-maven/README | 18 ++ .../tags/2.0-M5.1/samples/logging.properties | 25 ++ sca-java-2.x/tags/2.0-M5.1/samples/pom.xml | 98 ++++++ .../tags/2.0-M5.1/samples/store-webapp/README | 28 ++ .../tags/2.0-M5.1/samples/store-webapp/pom.xml | 84 ++++++ .../store-webapp/src/main/java/services/Cart.java | 28 ++ .../src/main/java/services/Catalog.java | 27 ++ .../src/main/java/services/CurrencyConverter.java | 29 ++ .../main/java/services/CurrencyConverterImpl.java | 38 +++ .../src/main/java/services/FruitsCatalogImpl.java | 52 ++++ .../store-webapp/src/main/java/services/Item.java | 51 ++++ .../src/main/java/services/ShoppingCartImpl.java | 112 +++++++ .../store-webapp/src/main/java/services/Total.java | 29 ++ .../src/main/resources/store.composite | 55 ++++ .../src/main/webapp/META-INF/sca-contribution.xml | 23 ++ .../src/main/webapp/WEB-INF/geronimo-web.xml | 50 ++++ .../store-webapp/src/main/webapp/WEB-INF/web.xml | 36 +++ .../store-webapp/src/main/webapp/store.html | 163 ++++++++++ .../tags/2.0-M5.1/samples/store-webapp/store.png | Bin 0 -> 15670 bytes .../tags/2.0-M5.1/samples/store-webapp/store.svg | 304 +++++++++++++++++++ sca-java-2.x/tags/2.0-M5.1/samples/store/README | 28 ++ sca-java-2.x/tags/2.0-M5.1/samples/store/build.xml | 79 +++++ sca-java-2.x/tags/2.0-M5.1/samples/store/pom.xml | 70 +++++ .../samples/store/src/main/java/launch/Launch.java | 39 +++ .../samples/store/src/main/java/services/Cart.java | 28 ++ .../store/src/main/java/services/Catalog.java | 27 ++ .../src/main/java/services/CurrencyConverter.java | 29 ++ .../main/java/services/CurrencyConverterImpl.java | 38 +++ .../src/main/java/services/FruitsCatalogImpl.java | 52 ++++ .../samples/store/src/main/java/services/Item.java | 50 ++++ .../src/main/java/services/ShoppingCartImpl.java | 112 +++++++ .../store/src/main/java/services/Total.java | 29 ++ .../store/src/main/resources/store.composite | 58 ++++ .../store/src/main/resources/uiservices/store.html | 162 ++++++++++ .../store/src/test/java/client/Shopper.java | 29 ++ .../store/src/test/java/client/ShopperImpl.java | 64 ++++ .../store/src/test/java/store/StoreTestCase.java | 117 ++++++++ .../src/test/resources/store-client.composite | 38 +++ sca-java-2.x/tags/2.0-M5.1/samples/store/store.png | Bin 0 -> 15670 bytes sca-java-2.x/tags/2.0-M5.1/samples/store/store.svg | 304 +++++++++++++++++++ .../samples/webapps/helloworld-bpel/README | 7 + .../samples/webapps/helloworld-bpel/pom.xml | 160 ++++++++++ .../src/main/java/sample/HelloworldService.java | 28 ++ .../src/main/resources/helloworld.bpel | 66 +++++ .../src/main/resources/helloworld.wsdl | 82 +++++ .../src/main/webapp/WEB-INF/web.composite | 37 +++ .../src/main/webapp/WEB-INF/web.xml | 41 +++ .../helloworld-bpel/src/main/webapp/hello.jsp | 36 +++ .../samples/webapps/helloworld-jaxrs/README | 7 + .../samples/webapps/helloworld-jaxrs/pom.xml | 118 ++++++++ .../src/main/java/sample/HelloWorldResource.java | 68 +++++ .../src/main/java/sample/HelloworldService.java | 25 ++ .../main/java/sample/HelloworldServiceImpl.java | 28 ++ .../src/main/webapp/WEB-INF/application | 14 + .../src/main/webapp/WEB-INF/web.composite | 34 +++ .../src/main/webapp/WEB-INF/web.xml | 49 +++ .../src/test/java/itest/HelloworldTestCase.java | 46 +++ .../2.0-M5.1/samples/webapps/helloworld-jms/README | 131 ++++++++ .../samples/webapps/helloworld-jms/pom.xml | 96 ++++++ .../src/main/java/sample/HelloWorldClient.java | 37 +++ .../src/main/java/sample/HelloWorldService.java | 29 ++ .../main/java/sample/HelloWorldServiceImpl.java | 31 ++ .../src/main/webapp/META-INF/context.xml | 34 +++ .../src/main/webapp/WEB-INF/jetty-env.xml | 48 +++ .../src/main/webapp/WEB-INF/web.composite | 44 +++ .../helloworld-jms/src/main/webapp/WEB-INF/web.xml | 66 +++++ .../helloworld-jms/src/main/webapp/hello.jsp | 41 +++ .../samples/webapps/helloworld-js-client/README | 7 + .../samples/webapps/helloworld-js-client/pom.xml | 104 +++++++ .../src/main/java/sample/HelloworldService.java | 25 ++ .../main/java/sample/HelloworldServiceImpl.java | 28 ++ .../src/main/webapp/WEB-INF/web.composite | 36 +++ .../src/main/webapp/WEB-INF/web.xml | 41 +++ .../src/main/webapp/hello.html | 51 ++++ .../src/test/java/itest/HelloworldTestCase.java | 75 +++++ .../samples/webapps/helloworld-jsf/pom.xml | 99 +++++++ .../src/main/java/sample/HelloWorldController.java | 56 ++++ .../src/main/java/sample/HelloworldService.java | 25 ++ .../main/java/sample/HelloworldServiceImpl.java | 27 ++ .../src/main/webapp/WEB-INF/faces-config.xml | 51 ++++ .../src/main/webapp/WEB-INF/web.composite | 34 +++ .../helloworld-jsf/src/main/webapp/WEB-INF/web.xml | 191 ++++++++++++ .../helloworld-jsf/src/main/webapp/helloWorld.jsp | 40 +++ .../helloworld-jsf/src/main/webapp/index.jsp | 23 ++ .../helloworld-jsf/src/main/webapp/page2.jsp | 38 +++ .../2.0-M5.1/samples/webapps/helloworld-jsp/README | 7 + .../samples/webapps/helloworld-jsp/pom.xml | 98 ++++++ .../src/main/java/sample/HelloworldService.java | 25 ++ .../main/java/sample/HelloworldServiceImpl.java | 28 ++ .../src/main/webapp/WEB-INF/web.composite | 34 +++ .../helloworld-jsp/src/main/webapp/WEB-INF/web.xml | 41 +++ .../helloworld-jsp/src/main/webapp/hello.jsp | 37 +++ .../src/test/java/itest/HelloworldTestCase.java | 53 ++++ .../samples/webapps/helloworld-servlet/README | 7 + .../samples/webapps/helloworld-servlet/pom.xml | 105 +++++++ .../src/main/java/sample/HelloworldService.java | 25 ++ .../main/java/sample/HelloworldServiceImpl.java | 27 ++ .../src/main/java/sample/HelloworldServlet.java | 64 ++++ .../src/main/webapp/WEB-INF/web.composite | 34 +++ .../src/main/webapp/WEB-INF/web.xml | 44 +++ .../helloworld-servlet/src/main/webapp/hello.html | 46 +++ .../src/test/java/itest/HelloworldTestCase.java | 55 ++++ .../samples/webapps/helloworld-stripes/pom.xml | 112 +++++++ .../main/java/mystripes/action/BaseActionBean.java | 33 +++ .../main/java/mystripes/action/HomeActionBean.java | 45 +++ .../src/main/java/sample/HelloworldService.java | 25 ++ .../main/java/sample/HelloworldServiceImpl.java | 28 ++ .../src/main/resources/StripesResources.properties | 73 +++++ .../src/main/resources/log4j.properties | 48 +++ .../src/main/webapp/WEB-INF/jsp/home.jsp | 26 ++ .../src/main/webapp/WEB-INF/jsp/layout.jsp | 39 +++ .../src/main/webapp/WEB-INF/jsp/taglibs.jsp | 29 ++ .../src/main/webapp/WEB-INF/web.composite | 34 +++ .../src/main/webapp/WEB-INF/web.xml | 61 ++++ .../helloworld-stripes/src/main/webapp/index.html | 24 ++ .../helloworld-stripes/src/test/java/README | 7 + .../src/test/java/itest/HelloworldTestCase.java | 53 ++++ .../2.0-M5.1/samples/webapps/helloworld/README | 7 + .../2.0-M5.1/samples/webapps/helloworld/pom.xml | 118 ++++++++ .../helloworld/src/main/webapp/WEB-INF/web.xml | 47 +++ .../helloworld/src/test/java/itest/Helloworld.java | 27 ++ .../test/java/itest/HelloworldTestCaseFIXME.java | 44 +++ .../helloworld/src/test/resources/test-web.xml | 30 ++ 399 files changed, 21571 insertions(+) create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/README create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/README create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-reference/README create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-reference/build.xml create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-reference/pom.xml create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-reference/src/main/java/calculator/AddService.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-reference/src/main/java/calculator/CalculatorService.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-reference/src/main/java/calculator/CalculatorServiceImpl.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-reference/src/main/java/calculator/DivideService.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-reference/src/main/java/calculator/MultiplyService.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-reference/src/main/java/calculator/SubtractService.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-reference/src/main/resources/CalculatorRMIReference.composite create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-reference/src/test/java/calculator/CalculatorRMIReferenceTestCase.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-reference/src/test/java/calculator/CalculatorRMIServiceImpl.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-service/README create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-service/build.xml create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-service/pom.xml create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-service/src/main/java/calculator/AddService.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-service/src/main/java/calculator/AddServiceImpl.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-service/src/main/java/calculator/CalculatorClient.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-service/src/main/java/calculator/CalculatorService.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-service/src/main/java/calculator/CalculatorServiceImpl.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-service/src/main/java/calculator/DivideService.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-service/src/main/java/calculator/DivideServiceImpl.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-service/src/main/java/calculator/MultiplyService.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-service/src/main/java/calculator/MultiplyServiceImpl.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-service/src/main/java/calculator/SubtractService.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-service/src/main/java/calculator/SubtractServiceImpl.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-service/src/main/resources/CalculatorRMIServer.composite create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-service/src/main/resources/META-INF/sca-contribution.xml create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-service/src/test/java/calculator/CalculatorRMIServerTestCase.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/pom.xml create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/binding-sca/README create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/binding-sca/contribution-calculator/README create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/binding-sca/contribution-calculator/build.xml create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/binding-sca/contribution-calculator/pom.xml create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/binding-sca/contribution-calculator/src/main/java/calculator/AddService.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/binding-sca/contribution-calculator/src/main/java/calculator/AddServiceImpl.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/binding-sca/contribution-calculator/src/main/java/calculator/CalculatorClient.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/binding-sca/contribution-calculator/src/main/java/calculator/CalculatorService.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/binding-sca/contribution-calculator/src/main/java/calculator/CalculatorServiceImpl.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/binding-sca/contribution-calculator/src/main/java/calculator/DivideService.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/binding-sca/contribution-calculator/src/main/java/calculator/DivideServiceImpl.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/binding-sca/contribution-calculator/src/main/java/calculator/MultiplyService.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/binding-sca/contribution-calculator/src/main/java/calculator/MultiplyServiceImpl.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/binding-sca/contribution-calculator/src/main/java/calculator/SubtractService.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/binding-sca/contribution-calculator/src/main/java/calculator/SubtractServiceImpl.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/binding-sca/contribution-calculator/src/main/resources/Calculator.composite create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/binding-sca/contribution-calculator/src/main/resources/CalculatorClient.composite create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/binding-sca/contribution-calculator/src/main/resources/META-INF/sca-contribution.xml create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/binding-sca/contribution-calculator/src/test/java/calculator/CalculatorTestCase.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/binding-sca/pom.xml create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/calculator-osgi/META-INF/MANIFEST.MF create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/calculator-osgi/README create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/calculator-osgi/build.xml create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/calculator-osgi/pom.xml create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/calculator-osgi/src/main/java/calculator/AddService.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/calculator-osgi/src/main/java/calculator/AddServiceImpl.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/calculator-osgi/src/main/java/calculator/CalculatorActivator.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/calculator-osgi/src/main/java/calculator/CalculatorClient.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/calculator-osgi/src/main/java/calculator/CalculatorService.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/calculator-osgi/src/main/java/calculator/CalculatorServiceImpl.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/calculator-osgi/src/main/java/calculator/DivideService.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/calculator-osgi/src/main/java/calculator/DivideServiceImpl.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/calculator-osgi/src/main/java/calculator/MultiplyService.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/calculator-osgi/src/main/java/calculator/MultiplyServiceImpl.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/calculator-osgi/src/main/java/calculator/SubtractService.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/calculator-osgi/src/main/java/calculator/SubtractServiceImpl.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/calculator-osgi/src/main/resources/Calculator.composite create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/calculator-osgi/src/test/java/calculator/CalculatorTestCase.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/calculator-scaclient/README create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/calculator-scaclient/pom.xml create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/calculator-scaclient/src/main/java/calculator/CalculatorService.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/calculator-scaclient/src/main/java/sample/CalculatorSCAClient.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/contribution-binding-ws-calculator/README create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/contribution-binding-ws-calculator/build.xml create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/contribution-binding-ws-calculator/calculator.odg create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/contribution-binding-ws-calculator/calculator.png create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/contribution-binding-ws-calculator/pom.xml create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/contribution-binding-ws-calculator/src/main/java/calculator/AddService.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/contribution-binding-ws-calculator/src/main/java/calculator/AddServiceImpl.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/contribution-binding-ws-calculator/src/main/java/calculator/CalculatorService.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/contribution-binding-ws-calculator/src/main/java/calculator/CalculatorServiceImpl.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/contribution-binding-ws-calculator/src/main/java/calculator/DivideService.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/contribution-binding-ws-calculator/src/main/java/calculator/DivideServiceImpl.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/contribution-binding-ws-calculator/src/main/java/calculator/MultiplyService.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/contribution-binding-ws-calculator/src/main/java/calculator/MultiplyServiceImpl.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/contribution-binding-ws-calculator/src/main/java/calculator/SubtractService.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/contribution-binding-ws-calculator/src/main/java/calculator/SubtractServiceImpl.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/contribution-binding-ws-calculator/src/main/resources/Calculator.composite create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/contribution-binding-ws-calculator/src/main/resources/META-INF/sca-contribution.xml create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/contribution-binding-ws-calculator/src/test/java/calculator/CalculatorTestCase.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/contribution-implementation-java-calculator/README create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/contribution-implementation-java-calculator/build.xml create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/contribution-implementation-java-calculator/pom.xml create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/contribution-implementation-java-calculator/src/main/java/calculator/AddService.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/contribution-implementation-java-calculator/src/main/java/calculator/AddServiceImpl.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/contribution-implementation-java-calculator/src/main/java/calculator/CalculatorClient.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/contribution-implementation-java-calculator/src/main/java/calculator/CalculatorService.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/contribution-implementation-java-calculator/src/main/java/calculator/CalculatorServiceImpl.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/contribution-implementation-java-calculator/src/main/java/calculator/DivideService.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/contribution-implementation-java-calculator/src/main/java/calculator/DivideServiceImpl.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/contribution-implementation-java-calculator/src/main/java/calculator/MultiplyService.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/contribution-implementation-java-calculator/src/main/java/calculator/MultiplyServiceImpl.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/contribution-implementation-java-calculator/src/main/java/calculator/SubtractService.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/contribution-implementation-java-calculator/src/main/java/calculator/SubtractServiceImpl.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/contribution-implementation-java-calculator/src/main/resources/Calculator.composite create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/contribution-implementation-java-calculator/src/main/resources/CalculatorClient.composite create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/contribution-implementation-java-calculator/src/main/resources/META-INF/sca-contribution.xml create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/contribution-implementation-java-calculator/src/test/java/calculator/CalculatorTestCase.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/LICENSE create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/META-INF/MANIFEST.MF create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/NOTICE create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/OSGI-INF/add-component.xml create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/OSGI-INF/blueprint/operations-module.xml create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/OSGI-INF/divide-component.xml create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/OSGI-INF/multiply-component.xml create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/OSGI-INF/sca/bundle.componentType create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/OSGI-INF/sca/bundle.composite create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/OSGI-INF/subtract-component.xml create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/README create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/pom.xml create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/src/main/java/calculator/dosgi/operations/AddService.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/src/main/java/calculator/dosgi/operations/DivideService.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/src/main/java/calculator/dosgi/operations/MultiplyService.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/src/main/java/calculator/dosgi/operations/SubtractService.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/src/main/java/calculator/dosgi/operations/impl/AddServiceImpl.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/src/main/java/calculator/dosgi/operations/impl/DivideServiceImpl.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/src/main/java/calculator/dosgi/operations/impl/MultiplyServiceImpl.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/src/main/java/calculator/dosgi/operations/impl/OperationsActivator.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/src/main/java/calculator/dosgi/operations/impl/SubtractServiceImpl.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/src/main/resources/META-INF/sca-contribution.xml create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/src/test/java/calculator/dosgi/operations/test/OSGiTestUtils.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/src/test/java/calculator/dosgi/operations/test/OperationsNode.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/src/test/java/calculator/dosgi/operations/test/OperationsOSGiNodeTestCase.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/LICENSE create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/META-INF/MANIFEST.MF create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/NOTICE create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/OSGI-INF/blueprint/calculator-module.xml create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/OSGI-INF/calculator-component.xml create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/OSGI-INF/sca/bundle.componentType create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/OSGI-INF/sca/bundle.composite create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/README create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/dosgi-calculator.png create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/pom.xml create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/src/main/java/calculator/dosgi/CalculatorService.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/src/main/java/calculator/dosgi/impl/CalculatorActivator.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/src/main/java/calculator/dosgi/impl/CalculatorServiceDSImpl.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/src/main/java/calculator/dosgi/impl/CalculatorServiceImpl.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/src/main/java/calculator/dosgi/operations/AddService.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/src/main/java/calculator/dosgi/operations/DivideService.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/src/main/java/calculator/dosgi/operations/MultiplyService.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/src/main/java/calculator/dosgi/operations/SubtractService.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/src/main/java/calculator/rmi/OperationsRMIServer.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/src/main/java/calculator/rmi/OperationsRMIServer_Stub.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/src/main/java/calculator/rmi/OperationsRemote.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/src/main/resources/META-INF/sca-contribution.xml create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/src/test/java/calculator/dosgi/test/CalculatorNode.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/src/test/java/calculator/dosgi/test/CalculatorOSGiNodeTestCase.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/src/test/java/calculator/dosgi/test/OSGiTestUtils.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator-operations/LICENSE create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator-operations/META-INF/MANIFEST.MF create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator-operations/NOTICE create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator-operations/OSGI-INF/add-component.xml create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator-operations/OSGI-INF/blueprint/operations-module.xml create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator-operations/OSGI-INF/divide-component.xml create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator-operations/OSGI-INF/multiply-component.xml create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator-operations/OSGI-INF/sca-config/operations-config.xml create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator-operations/OSGI-INF/subtract-component.xml create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator-operations/README create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator-operations/pom.xml create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator-operations/src/main/java/calculator/dosgi/operations/AddService.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator-operations/src/main/java/calculator/dosgi/operations/DivideService.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator-operations/src/main/java/calculator/dosgi/operations/MultiplyService.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator-operations/src/main/java/calculator/dosgi/operations/SubtractService.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator-operations/src/main/java/calculator/dosgi/operations/impl/AddServiceImpl.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator-operations/src/main/java/calculator/dosgi/operations/impl/DivideServiceImpl.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator-operations/src/main/java/calculator/dosgi/operations/impl/MultiplyServiceImpl.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator-operations/src/main/java/calculator/dosgi/operations/impl/OperationsActivator.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator-operations/src/main/java/calculator/dosgi/operations/impl/SubtractServiceImpl.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator-operations/src/test/java/calculator/dosgi/operations/test/OSGiTestUtils.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator-operations/src/test/java/calculator/dosgi/operations/test/OperationsNode.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator-operations/src/test/java/calculator/dosgi/operations/test/OperationsOSGiNodeTestCase.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator/LICENSE create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator/META-INF/MANIFEST.MF create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator/NOTICE create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator/OSGI-INF/blueprint/calculator-module.xml create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator/OSGI-INF/calculator-component.xml create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator/OSGI-INF/remote-service/calculator-service-descriptions.xml create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator/OSGI-INF/sca-config/calculator-config.xml create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator/README create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator/dosgi-calculator.png create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator/pom.xml create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator/src/main/java/calculator/dosgi/CalculatorService.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator/src/main/java/calculator/dosgi/impl/CalculatorActivator.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator/src/main/java/calculator/dosgi/impl/CalculatorServiceDSImpl.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator/src/main/java/calculator/dosgi/impl/CalculatorServiceImpl.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator/src/main/java/calculator/dosgi/operations/AddService.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator/src/main/java/calculator/dosgi/operations/DivideService.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator/src/main/java/calculator/dosgi/operations/MultiplyService.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator/src/main/java/calculator/dosgi/operations/SubtractService.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator/src/main/java/calculator/rmi/OperationsRMIServer.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator/src/main/java/calculator/rmi/OperationsRMIServer_Stub.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator/src/main/java/calculator/rmi/OperationsRemote.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator/src/test/java/calculator/dosgi/test/CalculatorNode.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator/src/test/java/calculator/dosgi/test/CalculatorOSGiNodeTestCase.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator/src/test/java/calculator/dosgi/test/OSGiTestUtils.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/helloworld-bpel/README create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/helloworld-bpel/build.xml create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/helloworld-bpel/helloworld-bpel.png create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/helloworld-bpel/helloworld-bpel.svg create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/helloworld-bpel/pom.xml create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/helloworld-bpel/src/main/java/helloworld/Hello.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/helloworld-bpel/src/main/resources/META-INF/sca-contribution.xml create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/helloworld-bpel/src/main/resources/helloworld.bpel create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/helloworld-bpel/src/main/resources/helloworld.composite create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/helloworld-bpel/src/main/resources/helloworld.wsdl create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/helloworld-bpel/src/main/resources/log4j.properties create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/helloworld-scaclient/pom.xml create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/helloworld-scaclient/src/main/java/sample/Helloworld.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/helloworld-scaclient/src/main/java/sample/HelloworldSCAClient.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/helloworld-scaclient/src/test/java/sample/HelloworldTestCase.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/helloworld-spring/pom.xml create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/helloworld-spring/src/main/java/sample/Helloworld.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/helloworld-spring/src/main/java/sample/HelloworldImpl.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/helloworld-spring/src/main/resources/META-INF/sca-contribution.xml create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/helloworld-spring/src/main/resources/helloworld-context.xml create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/helloworld-spring/src/main/resources/helloworld.composite create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/helloworld-spring/src/test/java/sample/HelloworldTestCase.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/helloworld-ws-sdo/README create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/helloworld-ws-sdo/build.xml create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/helloworld-ws-sdo/helloworld-ws-sdo.png create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/helloworld-ws-sdo/maven-eclipse.xml create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/helloworld-ws-sdo/pom.xml create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/helloworld-ws-sdo/src/main/java/helloworld/HelloWorldClient.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/helloworld-ws-sdo/src/main/java/helloworld/HelloWorldImpl.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/helloworld-ws-sdo/src/main/java/helloworld/HelloWorldServer.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/helloworld-ws-sdo/src/main/java/helloworld/HelloWorldService.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/helloworld-ws-sdo/src/main/java/helloworld/HelloWorldServiceComponent.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/helloworld-ws-sdo/src/main/java/services/bcircle/BioTestCase.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/helloworld-ws-sdo/src/main/java/services/bcircle/BiochemicalCircle.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/helloworld-ws-sdo/src/main/java/services/bcircle/BiochemicalCircleImpl.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/helloworld-ws-sdo/src/main/resources/META-INF/sca-contribution.xml create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/helloworld-ws-sdo/src/main/resources/helloworldws.composite create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/helloworld-ws-sdo/src/main/resources/helloworldwsclient.composite create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/helloworld-ws-sdo/src/main/resources/logging.properties create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/helloworld-ws-sdo/src/main/resources/resources/clinicalLaboratory.composite create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/helloworld-ws-sdo/src/main/resources/test.xsd create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/helloworld-ws-sdo/src/main/resources/wsdl/helloworld.wsdl create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/helloworld-ws-sdo/src/test/java/helloworld/HelloWorldClientTestCase.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/helloworld-ws-sdo/src/test/java/helloworld/HelloWorldTestServer.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/helloworld-ws-sdo/src/test/java/helloworld/TestCaseRunner.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/helloworld/README create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/helloworld/pom.xml create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/helloworld/src/main/java/sample/Helloworld.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/helloworld/src/main/java/sample/HelloworldImpl.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/helloworld/src/main/resources/META-INF/sca-contribution.xml create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/helloworld/src/main/resources/helloworld.composite create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/helloworld/src/test/java/sample/HelloworldTestCase.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/launcher-command-line/README create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/launcher-embedded-jse/README create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/launcher-embedded-jse/build.xml create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/launcher-embedded-jse/pom.xml create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/launcher-embedded-jse/src/main/java/calculator/CalculatorService.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/launcher-embedded-jse/src/main/java/launcher/RuntimeIntegration.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/launcher-embedded-jse/src/main/java/launcher/SampleJSELauncher.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/launcher-embedded-jse/src/main/java/launcher/SampleLauncherException.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/launcher-embedded-jse/src/test/java/launcher/LauncherTestCase.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/launcher-embedded-osgi/README create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/launcher-embedded-osgi/build.xml create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/launcher-embedded-osgi/pom.xml create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/launcher-embedded-osgi/src/main/java/calculator/CalculatorService.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/launcher-embedded-osgi/src/main/java/launcher/RuntimeIntegration.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/launcher-embedded-osgi/src/main/java/launcher/SampleJSELauncher.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/launcher-embedded-osgi/src/main/java/launcher/SampleLauncherException.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/launcher-embedded-osgi/src/test/java/launcher/LauncherTestCase.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/launcher-maven/README create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/logging.properties create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/pom.xml create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/store-webapp/README create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/store-webapp/pom.xml create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/store-webapp/src/main/java/services/Cart.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/store-webapp/src/main/java/services/Catalog.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/store-webapp/src/main/java/services/CurrencyConverter.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/store-webapp/src/main/java/services/CurrencyConverterImpl.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/store-webapp/src/main/java/services/FruitsCatalogImpl.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/store-webapp/src/main/java/services/Item.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/store-webapp/src/main/java/services/ShoppingCartImpl.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/store-webapp/src/main/java/services/Total.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/store-webapp/src/main/resources/store.composite create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/store-webapp/src/main/webapp/META-INF/sca-contribution.xml create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/store-webapp/src/main/webapp/WEB-INF/geronimo-web.xml create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/store-webapp/src/main/webapp/WEB-INF/web.xml create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/store-webapp/src/main/webapp/store.html create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/store-webapp/store.png create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/store-webapp/store.svg create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/store/README create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/store/build.xml create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/store/pom.xml create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/store/src/main/java/launch/Launch.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/store/src/main/java/services/Cart.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/store/src/main/java/services/Catalog.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/store/src/main/java/services/CurrencyConverter.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/store/src/main/java/services/CurrencyConverterImpl.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/store/src/main/java/services/FruitsCatalogImpl.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/store/src/main/java/services/Item.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/store/src/main/java/services/ShoppingCartImpl.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/store/src/main/java/services/Total.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/store/src/main/resources/store.composite create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/store/src/main/resources/uiservices/store.html create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/store/src/test/java/client/Shopper.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/store/src/test/java/client/ShopperImpl.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/store/src/test/java/store/StoreTestCase.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/store/src/test/resources/store-client.composite create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/store/store.png create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/store/store.svg create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-bpel/README create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-bpel/pom.xml create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-bpel/src/main/java/sample/HelloworldService.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-bpel/src/main/resources/helloworld.bpel create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-bpel/src/main/resources/helloworld.wsdl create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-bpel/src/main/webapp/WEB-INF/web.composite create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-bpel/src/main/webapp/WEB-INF/web.xml create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-bpel/src/main/webapp/hello.jsp create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jaxrs/README create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jaxrs/pom.xml create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jaxrs/src/main/java/sample/HelloWorldResource.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jaxrs/src/main/java/sample/HelloworldService.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jaxrs/src/main/java/sample/HelloworldServiceImpl.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jaxrs/src/main/webapp/WEB-INF/application create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jaxrs/src/main/webapp/WEB-INF/web.composite create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jaxrs/src/main/webapp/WEB-INF/web.xml create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jaxrs/src/test/java/itest/HelloworldTestCase.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jms/README create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jms/pom.xml create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jms/src/main/java/sample/HelloWorldClient.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jms/src/main/java/sample/HelloWorldService.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jms/src/main/java/sample/HelloWorldServiceImpl.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jms/src/main/webapp/META-INF/context.xml create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jms/src/main/webapp/WEB-INF/jetty-env.xml create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jms/src/main/webapp/WEB-INF/web.composite create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jms/src/main/webapp/WEB-INF/web.xml create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jms/src/main/webapp/hello.jsp create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-js-client/README create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-js-client/pom.xml create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-js-client/src/main/java/sample/HelloworldService.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-js-client/src/main/java/sample/HelloworldServiceImpl.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-js-client/src/main/webapp/WEB-INF/web.composite create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-js-client/src/main/webapp/WEB-INF/web.xml create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-js-client/src/main/webapp/hello.html create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-js-client/src/test/java/itest/HelloworldTestCase.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jsf/pom.xml create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jsf/src/main/java/sample/HelloWorldController.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jsf/src/main/java/sample/HelloworldService.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jsf/src/main/java/sample/HelloworldServiceImpl.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jsf/src/main/webapp/WEB-INF/faces-config.xml create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jsf/src/main/webapp/WEB-INF/web.composite create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jsf/src/main/webapp/WEB-INF/web.xml create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jsf/src/main/webapp/helloWorld.jsp create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jsf/src/main/webapp/index.jsp create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jsf/src/main/webapp/page2.jsp create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jsp/README create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jsp/pom.xml create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jsp/src/main/java/sample/HelloworldService.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jsp/src/main/java/sample/HelloworldServiceImpl.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jsp/src/main/webapp/WEB-INF/web.composite create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jsp/src/main/webapp/WEB-INF/web.xml create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jsp/src/main/webapp/hello.jsp create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jsp/src/test/java/itest/HelloworldTestCase.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-servlet/README create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-servlet/pom.xml create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-servlet/src/main/java/sample/HelloworldService.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-servlet/src/main/java/sample/HelloworldServiceImpl.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-servlet/src/main/java/sample/HelloworldServlet.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-servlet/src/main/webapp/WEB-INF/web.composite create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-servlet/src/main/webapp/WEB-INF/web.xml create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-servlet/src/main/webapp/hello.html create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-servlet/src/test/java/itest/HelloworldTestCase.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-stripes/pom.xml create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-stripes/src/main/java/mystripes/action/BaseActionBean.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-stripes/src/main/java/mystripes/action/HomeActionBean.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-stripes/src/main/java/sample/HelloworldService.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-stripes/src/main/java/sample/HelloworldServiceImpl.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-stripes/src/main/resources/StripesResources.properties create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-stripes/src/main/resources/log4j.properties create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-stripes/src/main/webapp/WEB-INF/jsp/home.jsp create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-stripes/src/main/webapp/WEB-INF/jsp/layout.jsp create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-stripes/src/main/webapp/WEB-INF/jsp/taglibs.jsp create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-stripes/src/main/webapp/WEB-INF/web.composite create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-stripes/src/main/webapp/WEB-INF/web.xml create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-stripes/src/main/webapp/index.html create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-stripes/src/test/java/README create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-stripes/src/test/java/itest/HelloworldTestCase.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld/README create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld/pom.xml create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld/src/main/webapp/WEB-INF/web.xml create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld/src/test/java/itest/Helloworld.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld/src/test/java/itest/HelloworldTestCaseFIXME.java create mode 100644 sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld/src/test/resources/test-web.xml (limited to 'sca-java-2.x/tags/2.0-M5.1/samples') diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/README b/sca-java-2.x/tags/2.0-M5.1/samples/README new file mode 100644 index 0000000000..43b7cb3056 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/README @@ -0,0 +1,269 @@ +The Apache Tuscany SCA Samples +============================== + +New Samples Structure +--------------------- + +For the Milestone 5 release of Tuscany SCA Java 2.x we are beginning +the process of moving to a new structure for samples. Milestone 5 is +delivered in a state of partial change over to this new emphasis, and hence +this README reflects that hybrid state. + +There are primarily 3 types of sample; those which focus on pure SCA +concepts, those which demonstrate features of Tuscany and the last group +is of samples which give a flavour of more complete, realistic applications. + +The new structure primarily focusses separating contributions from the way that +contributions are launched. The samples demonstrate the way in which contributions are used by +launchers to execute tuscany SCA applications. + +In this way you can explore the samples by chosing which launcher you wish +to invoke which contribution. In the old style of sample this distinction was not clear; +any given sample contained both launcher and contribution, and the set of samples provided +represented a small subset of the combinations possible by the new approach. + +Within the SCA category of samples, most of the calculator samples, have been +migrated to this new structure as follows. + +SCA Samples + binding-rmi-calculator + contribution-calculator-reference + contribution-calculator-service + binding-sca + contribution-calculator + contribution-binding-ws-calculator + contribution-implementation-java-calculator + calculator-sca-client + launcher-command-line + launcher-embedded-jse + launcher-embedded-osgi + launcher-mvn + +Please visit the 2.x documentation in our website [1] to get a better understanding of SCA +and Tuscany 2.x + +Running the New Style samples +----------------------------- + +To run a new style sample there are 3 basic steps + +1) build the contribution: using either the command "mvn", "ant run" or your usual steps to build a + module in your IDE +2) unit test the contribution: if you used mvn or ant in step 1 then you will already have done this; + if you used an IDE follow your usual steps to run the unit test in the contribution's module +3) launch the contribution: go to one of the launcher* subdirectories of the samples root directory + and follow the instructions there to use a launcher to launch your chosen contribution + +I the case where you want to exercise the sample contribution with a separate client program, such as +an application using the SCA client API then there is a 4th step of starting that client application + +[1] http://tuscany.apache.org/documentation-2x/ + +Running the Old Style Samples +------------------------------ +The Apache Tuscany SCA samples are built as part of the main Maven build and +run, using the provided JUnit test cases, as tests in the Maven build. + +In the binary distribution of Apache Tuscany most samples can also +be run using the provided Ant build.xml files. These show the samples running +from a simple main() method without the need for a JUnit test case. + +In these notes text that appears in angled brackets like this means +that you need to make a choice and provide your own text at that point. + +These simple samples have been created with the intention of illustrating the +usage of the SCA API and annotations and certainly not to levels of SCA component +abstraction. In real life situations you should use SCA to assemble real and +usually bigger components, and when you do that you'll get all the benefits of +SCA, bindings, policies, integration in an SOA environment etc.. + +Sample Layout +------------- +Generally sample directories are organized in the same way based on the default +project template provided by Maven. For example, take a look at the calculator +sample; + +calculator/ + src/ - Holds all of the source files for the sample + main/ - Groups together the files that implement the sample + java/ - Java source files + resources/ - Non java resource files such as composte files + test/ - Groups together files that provide sample tests + java - Java test sources files. Usually JUnit test cases + target/ - Holds the files generated when the sample is built + classes/ - For example, Java class files + test-classes/ - classes from src/test and other test files + +Getting Ready To Build +---------------------- +You will need to install the following software before you start. + +J2SE Development Kit (JDK) 5.0 +Apache Ant 1.7.1 - if you are going to use Ant +Apache Maven 2.0.9 - if you are going to use Maven + +Java and Ant and/or Maven binary directories must be present in your PATH so +that their executable programs are available in your environment. You may +find it useful to use a script to set up your environment, for example; + +For UNIX: + JAVA_HOME=/ + ANT_HOME=//apache-ant-1.7.0 + MAVEN_HOME=//maven-2.0.6 + export PATH=$JAVA_HOME/bin:$ANT_HOME/bin:$MAVEN_HOME/bin:$PATH + +For Windows: + set JAVA_HOME=C:\ + set ANT_HOME=C:\\apache-ant-1.7.0 + set MAVEN_HOME=C:\\maven-2.0.6 + set PATH=%JAVA_HOME%\bin;%ANT_HOME%\bin;%MAVEN_HOME%\bin;%PATH% + + +Building And Running The SCA Samples Using Ant +---------------------------------------------- +The build.xml files provided with the Apache Tuscany SCA samples are designed +to work with the binary distribution. They rely on the tuscany-sca-manifest.jar +to describe the class path and this jar is only provided as part of the +binary distribution. + +The binary distribution of SCA also includes precompiled versions of each sample. +If you look in the target directory of each sample you will see this jar file. To +run a sample based on all of the precompiled artifacts all you have to do is: + +cd +ant run + +Check each /README file as some samples require that two progams are +run to get the desired result, for example, the two samples that show how +to build extensions are run from their associated application samples. + +If you want to rebuild a sample, for example, if you have changed it, do the +following: + +cd +ant compile + +Once the sample is built you have the option of running the sample in whatever +way best suits you. Two alternatives are provided in the ant build files. + +The compile target builds the class files and then builds the jar so you can use +the same command as before: + +ant run + +This will use the generated jar to run the samples. The command line version of +this is: + +on Windows + +java -cp ..\..\features\tuscany-sca-manifest.jar;target\ + +for example : java -cp ..\..\features\tuscany-sca-manifest.jar;target\sample-calculator.jar calculator.CalculatorClient + +on *nix + +java -cp ../../features/tuscany-sca-manifest.jar:target/ + +for example : java -cp ../../features/tuscany-sca-manifest.jar:target/sample-calculator.jar calculator.CalculatorClient + + +You can use the compiled classes directly using + +ant run-classes + +The command line version of this is: + +on Windows + +java -cp ..\..\features\tuscany-sca-manifest.jar;target\classes + +for example : java -cp ..\..\features\tuscany-sca-manifest.jar;target\classes calculator.CalculatorClient + +on *nix + +java -cp ../../features/tuscany-sca-manifest.jar:target/classes + +for example : java -cp ../../features/tuscany-sca-manifest.jar:target/classes calculator.CalculatorClient + +The class specified on the command of course depends on which sample you want to +run. In the examples we have used we are running the CalculatorClient from the calculator sample. + + +Building And Running The SCA Samples Using Maven +------------------------------------------------ + +The Maven build process will work from both source and binary distributions. +To build and test all of the Apache Tuscany SCA sources, including the samples, +do the following. + +cd sca +mvn + +This will take a little while to complete. Experience with Maven tells us that +sometimes there are problems downloading the dependencies that Apache Tuscany +SCA requires. If Maven reports that it cannot download required dependencies +try running the Maven build again. + +Once you have all of the source built you can build and run each sample +independently if required. + +cd +mvn + +When using Maven the samples are run within JUnit test cases and so you will +sometimes not see any test output. You will always see an indication of test +success or failure. + +Using The Samples In An IDE +--------------------------------------------- +The easiest way to use the samples in an IDE is to use Maven to generate all +of the IDE project files for you automatically. This works best if you +generate IDE projects for all of the Apache Tuscany modules. You can then +include the ones you are interested in working with in you IDE. + +To build IDE project files for all of the modules in Apache Tuscany SCA; + +cd sca + +If you are an Eclipse user do the following + +mvn -Peclipse + +If you are an IDEA user do the following + +mvn idea:idea + +These commands generate project files for each module in Apache Tuscany SCA. +The modules you are interested in can now be included in your IDE, for example, +in Eclipse, if you create a new Java project and use the option to "create a +new project from existing source" you can specify an SCA module directory, +which includes the generated project files, and Eclipse will treat it like any +other Java project. + +Using The Samples In An IDE Without Maven +----------------------------------------- +We don't provide any IDE project files with our distributions so you will have to +import the sample files into your IDE manually. Here's an example of how it can be +done using Eclipse. + +In a new or existing workspace + Create a new java project to represent the sample you want to work on, e.g. + launcher-embedded-jse + Import all of the sample code and resources into this project, e.g. + File, Import and then select tuscany-sca-1.0-incubating\samples\launcher-embedded-jse from the filesystem + Configure the source path to include + src/main/java + src/main/resources + Configure the output folder to be + target + Configure the build path to include the manifest jar tuscany-sca-manifiest.jar provided in + features + For here you have run; + the unit test (loads a sequence of contributions and runs them) + SampleJSELauncher (you'll need to add the name of the contribution to run as a parameter) + build.xml (you'll need to set tuscany.home to point to distribution\all\target\apache-tuscany-sca-all-2.0-SNAPSHOT.dir\tuscany-sca-2.0-SNAPSHOT) + +The details of how to do this for other development environments will +vary but the process will be similar. + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/README b/sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/README new file mode 100644 index 0000000000..18ba62d494 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/README @@ -0,0 +1 @@ +Please look at the README files in the subdirectories of this directory for descriptions of the sample contributions. diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-reference/README b/sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-reference/README new file mode 100644 index 0000000000..2f169419ba --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-reference/README @@ -0,0 +1,34 @@ +Calculator RMI Reference Sample Contribution +============================================ + +This sample illustrates the use of Tuscany RMI Binding to call reference +services that are hosted as Java RMI services. + +The README in the /samples directory provides +general instructions about building and running samples. ( where +distribution-unpack-dir is the directory in which you unpacked the tuscany +binary distribution archive) Take a look there for instructions on how to launch +this sample contribution. + +Sample Overview +--------------- +This sample extends the calculator sample by replacing the local wired +connections with RMI bindings. Instead of local add, subtract, multiply and +divide components, an RMI service implementation now provides the +add, subtract, multiply and divide interfaces and is hosted as an RMI server. +References specified in the .composite file include an RMI binding which targets +this RMI server. +Note. As this test creates and uses local network connections you may need to +configure your firewall, if you are running one, to allow the test to run +successfully. + +Amongst the other output created by the launcher/contribution combination, you should see the following output ... + + + [java] 3 + 2=5.0 + [java] 3 - 2=1.0 + [java] 3 * 2=6.0 + [java] 3 / 2=1.5 + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-reference/build.xml b/sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-reference/build.xml new file mode 100644 index 0000000000..fe28a46b7c --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-reference/build.xml @@ -0,0 +1,59 @@ + + + + + + + + ${tuscany.home} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-reference/pom.xml b/sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-reference/pom.xml new file mode 100644 index 0000000000..1507ead9db --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-reference/pom.xml @@ -0,0 +1,69 @@ + + + + 4.0.0 + + org.apache.tuscany.sca + tuscany-sca + 2.0-M5.1 + ../../pom.xml + + sample-contribution-binding-rmi-calculator-reference + Apache Tuscany SCA Sample Contribution binding-rmi Calculator Reference + + + + org.apache.tuscany.sca + tuscany-node-api + 2.0-M5.1 + + + org.apache.tuscany.sca + tuscany-node-impl + 2.0-M5.1 + test + + + org.apache.tuscany.sca + tuscany-implementation-java-runtime + 2.0-M5.1 + runtime + + + org.apache.tuscany.sca + tuscany-binding-rmi-runtime + 2.0-M5.1 + runtime + + + junit + junit + 4.8.1 + test + + + + + ${artifactId} + + + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-reference/src/main/java/calculator/AddService.java b/sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-reference/src/main/java/calculator/AddService.java new file mode 100644 index 0000000000..a235e648c7 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-reference/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/sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-reference/src/main/java/calculator/CalculatorService.java b/sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-reference/src/main/java/calculator/CalculatorService.java new file mode 100644 index 0000000000..0f7dec116f --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-reference/src/main/java/calculator/CalculatorService.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 calculator; + +import java.rmi.Remote; +import java.rmi.RemoteException; + +import org.oasisopen.sca.annotation.Remotable; + +/** + * The Calculator service interface. + */ +@Remotable +public interface CalculatorService extends Remote { + + double add(double n1, double n2) throws RemoteException; + + double subtract(double n1, double n2) throws RemoteException; + + double multiply(double n1, double n2) throws RemoteException; + + double divide(double n1, double n2) throws RemoteException; +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-reference/src/main/java/calculator/CalculatorServiceImpl.java b/sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-reference/src/main/java/calculator/CalculatorServiceImpl.java new file mode 100644 index 0000000000..bcfd8871b6 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-reference/src/main/java/calculator/CalculatorServiceImpl.java @@ -0,0 +1,68 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT 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.oasisopen.sca.annotation.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/sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-reference/src/main/java/calculator/DivideService.java b/sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-reference/src/main/java/calculator/DivideService.java new file mode 100644 index 0000000000..497dafd4fd --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-reference/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/sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-reference/src/main/java/calculator/MultiplyService.java b/sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-reference/src/main/java/calculator/MultiplyService.java new file mode 100644 index 0000000000..5290605938 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-reference/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/sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-reference/src/main/java/calculator/SubtractService.java b/sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-reference/src/main/java/calculator/SubtractService.java new file mode 100644 index 0000000000..376b3e5bb9 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-reference/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/sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-reference/src/main/resources/CalculatorRMIReference.composite b/sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-reference/src/main/resources/CalculatorRMIReference.composite new file mode 100644 index 0000000000..7455dc7d38 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-reference/src/main/resources/CalculatorRMIReference.composite @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-reference/src/test/java/calculator/CalculatorRMIReferenceTestCase.java b/sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-reference/src/test/java/calculator/CalculatorRMIReferenceTestCase.java new file mode 100644 index 0000000000..39d4b2fd28 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-reference/src/test/java/calculator/CalculatorRMIReferenceTestCase.java @@ -0,0 +1,70 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package calculator; + +import static org.junit.Assert.assertEquals; + +import java.rmi.registry.LocateRegistry; +import java.rmi.registry.Registry; + +import org.apache.tuscany.sca.node.Contribution; +import org.apache.tuscany.sca.node.ContributionLocationHelper; +import org.apache.tuscany.sca.node.Node; +import org.apache.tuscany.sca.node.NodeFactory; +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.Test; + + +/** + * This shows how to test the Calculator service component. + */ +public class CalculatorRMIReferenceTestCase { + + private static Node node; + private static CalculatorService calculatorService; + + @BeforeClass + public static void setUp() throws Exception { + CalculatorRMIServiceImpl rmiCalculatorImpl = new CalculatorRMIServiceImpl(); + Registry rmiRegistry = LocateRegistry.createRegistry(8099); + rmiRegistry.bind("CalculatorRMIService", rmiCalculatorImpl); + + String uri = ContributionLocationHelper.getContributionLocation(CalculatorService.class); + Contribution contribution = new Contribution("c1", uri); + node = NodeFactory.newInstance().createNode("CalculatorRMIReference.composite", contribution); + node.start(); + calculatorService = node.getService(CalculatorService.class, "CalculatorServiceComponent"); + } + + @AfterClass + public static void tearDown() throws Exception { + node.stop(); + LocateRegistry.getRegistry(8099).unbind("CalculatorRMIService"); + } + + @Test + public void testCalculator() throws Exception { + // Calculate + assertEquals(calculatorService.add(3, 2), 5.0, 0.0); + assertEquals(calculatorService.subtract(3, 2), 1.0, 0.0); + assertEquals(calculatorService.multiply(3, 2), 6.0, 0.0); + assertEquals(calculatorService.divide(3, 2), 1.5, 0.0); + } +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-reference/src/test/java/calculator/CalculatorRMIServiceImpl.java b/sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-reference/src/test/java/calculator/CalculatorRMIServiceImpl.java new file mode 100644 index 0000000000..d8ded42cb2 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-reference/src/test/java/calculator/CalculatorRMIServiceImpl.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 calculator; + +import java.rmi.RemoteException; +import java.rmi.server.UnicastRemoteObject; + + + +/** + * An implementation of the Calculator service. + */ +public class CalculatorRMIServiceImpl extends UnicastRemoteObject implements CalculatorService { + + private static final long serialVersionUID = -1543948944662001428L; + + public CalculatorRMIServiceImpl() throws RemoteException { + super(); + } + + public double add(double n1, double n2) throws RemoteException { + return n1 + n2; + } + + public double subtract(double n1, double n2) { + return n1 - n2; + } + + public double multiply(double n1, double n2) { + return n1 * n2; + } + + public double divide(double n1, double n2) { + return n1 / n2; + } +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-service/README b/sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-service/README new file mode 100644 index 0000000000..cb25027f14 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-service/README @@ -0,0 +1,28 @@ +Calculator RMI Service Sample Contribution +========================================== + +This sample illustrates the use of Tuscany RMI Binding to expose component +services as Java RMI Services. It also demonstrates how a simple Java RMI +Client application invokes the SCA Application's services exposed as RMI +Services. + +The README in the /samples directory provides +general instructions about building and running samples. ( where +distribution-unpack-dir is the directory in which you unpacked the tuscany +binary distribution archive) Take a look there for instructions on how to launch +this sample contribution. + + +Sample Overview +--------------- +This sample extends the calculator sample by replacing the local service +binding with an RMI binding. SO a java client can call the service exposed +by the SCA application using an RMI client. + +Amongst the other output created by the launcher/contribution combination, you should see the following output ... + + + [java] 3 + 2=5.0 + [java] 3 - 2=1.0 + [java] 3 * 2=6.0 + [java] 3 / 2=1.5 diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-service/build.xml b/sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-service/build.xml new file mode 100644 index 0000000000..888a1c88b7 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-service/build.xml @@ -0,0 +1,59 @@ + + + + + + + + ${tuscany.home} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-service/pom.xml b/sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-service/pom.xml new file mode 100644 index 0000000000..d5f17751f9 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-service/pom.xml @@ -0,0 +1,67 @@ + + + + 4.0.0 + + org.apache.tuscany.sca + tuscany-sca + 2.0-M5.1 + ../../pom.xml + + sample-contribution-binding-rmi-calculator-service + Apache Tuscany SCA Sample Contribution binding-rmi Calculator Service + + + + org.apache.tuscany.sca + tuscany-node-api + 2.0-M5.1 + + + org.apache.tuscany.sca + tuscany-node-impl + 2.0-M5.1 + test + + + org.apache.tuscany.sca + tuscany-implementation-java-runtime + 2.0-M5.1 + runtime + + + org.apache.tuscany.sca + tuscany-binding-rmi-runtime + 2.0-M5.1 + runtime + + + junit + junit + 4.8.1 + test + + + + + ${artifactId} + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-service/src/main/java/calculator/AddService.java b/sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-service/src/main/java/calculator/AddService.java new file mode 100644 index 0000000000..a235e648c7 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-service/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/sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-service/src/main/java/calculator/AddServiceImpl.java b/sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-service/src/main/java/calculator/AddServiceImpl.java new file mode 100644 index 0000000000..8b6fe066a6 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-service/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/sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-service/src/main/java/calculator/CalculatorClient.java b/sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-service/src/main/java/calculator/CalculatorClient.java new file mode 100644 index 0000000000..2b99485b68 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-service/src/main/java/calculator/CalculatorClient.java @@ -0,0 +1,40 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package calculator; + +import java.rmi.Naming; + +/** + * This client program shows how to create an SCA runtime, start it, + * and locate and invoke a SCA component + */ +public class CalculatorClient { + public static void main(String[] args) throws Exception { + CalculatorService calculatorService = (CalculatorService)Naming.lookup("//localhost:8099/CalculatorRMIService"); + + // 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)); + + } + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-service/src/main/java/calculator/CalculatorService.java b/sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-service/src/main/java/calculator/CalculatorService.java new file mode 100644 index 0000000000..3c0375924f --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-service/src/main/java/calculator/CalculatorService.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 calculator; + +import org.oasisopen.sca.annotation.Remotable; + +/** + * The Calculator service interface. + */ +@Remotable +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/sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-service/src/main/java/calculator/CalculatorServiceImpl.java b/sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-service/src/main/java/calculator/CalculatorServiceImpl.java new file mode 100644 index 0000000000..bcfd8871b6 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-service/src/main/java/calculator/CalculatorServiceImpl.java @@ -0,0 +1,68 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT 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.oasisopen.sca.annotation.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/sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-service/src/main/java/calculator/DivideService.java b/sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-service/src/main/java/calculator/DivideService.java new file mode 100644 index 0000000000..497dafd4fd --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-service/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/sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-service/src/main/java/calculator/DivideServiceImpl.java b/sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-service/src/main/java/calculator/DivideServiceImpl.java new file mode 100644 index 0000000000..f7ac0b7287 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-service/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/sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-service/src/main/java/calculator/MultiplyService.java b/sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-service/src/main/java/calculator/MultiplyService.java new file mode 100644 index 0000000000..5290605938 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-service/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/sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-service/src/main/java/calculator/MultiplyServiceImpl.java b/sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-service/src/main/java/calculator/MultiplyServiceImpl.java new file mode 100644 index 0000000000..b7dca792b2 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-service/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/sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-service/src/main/java/calculator/SubtractService.java b/sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-service/src/main/java/calculator/SubtractService.java new file mode 100644 index 0000000000..376b3e5bb9 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-service/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/sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-service/src/main/java/calculator/SubtractServiceImpl.java b/sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-service/src/main/java/calculator/SubtractServiceImpl.java new file mode 100644 index 0000000000..77b128ab8d --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-service/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/sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-service/src/main/resources/CalculatorRMIServer.composite b/sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-service/src/main/resources/CalculatorRMIServer.composite new file mode 100644 index 0000000000..8b37d407f0 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-service/src/main/resources/CalculatorRMIServer.composite @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-service/src/main/resources/META-INF/sca-contribution.xml b/sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-service/src/main/resources/META-INF/sca-contribution.xml new file mode 100644 index 0000000000..8d6012e5c4 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-service/src/main/resources/META-INF/sca-contribution.xml @@ -0,0 +1,23 @@ + + + + + \ No newline at end of file diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-service/src/test/java/calculator/CalculatorRMIServerTestCase.java b/sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-service/src/test/java/calculator/CalculatorRMIServerTestCase.java new file mode 100644 index 0000000000..0e352db9bb --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/contribution-calculator-service/src/test/java/calculator/CalculatorRMIServerTestCase.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 calculator; + +import static org.junit.Assert.assertEquals; + +import java.rmi.Naming; + +import org.apache.tuscany.sca.node.Contribution; +import org.apache.tuscany.sca.node.ContributionLocationHelper; +import org.apache.tuscany.sca.node.Node; +import org.apache.tuscany.sca.node.NodeFactory; +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.Test; + +/** + * This shows how to test the Calculator service component. + */ +public class CalculatorRMIServerTestCase { + + private static Node node; + private static CalculatorService calculatorService; + + @BeforeClass + public static void setUp() throws Exception { + String uri = ContributionLocationHelper.getContributionLocation(CalculatorService.class); + Contribution contribution = new Contribution("c1", uri); + node = NodeFactory.newInstance().createNode("CalculatorRMIServer.composite", contribution); + node.start(); + } + + @AfterClass + public static void tearDown() throws Exception { + node.stop(); + } + + @Test + public void testCalculator() throws Exception { + // Calculate + calculatorService = (CalculatorService)Naming.lookup("//localhost:8099/CalculatorRMIService"); + assertEquals(calculatorService.add(3, 2), 5.0, 0.0); + assertEquals(calculatorService.subtract(3, 2), 1.0, 0.0); + assertEquals(calculatorService.multiply(3, 2), 6.0, 0.0); + assertEquals(calculatorService.divide(3, 2), 1.5, 0.0); + } +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/pom.xml b/sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/pom.xml new file mode 100644 index 0000000000..4f9deb7ce3 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/binding-rmi/pom.xml @@ -0,0 +1,44 @@ + + + + 4.0.0 + + org.apache.tuscany.sca + tuscany-sca + 2.0-M5.1 + ../../pom.xml + + tuscany-sample-binding-rmi + pom + Apache Tuscany SCA Sample binding.rmi + + + + default + + true + + + contribution-calculator-reference + contribution-calculator-service + + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/binding-sca/README b/sca-java-2.x/tags/2.0-M5.1/samples/binding-sca/README new file mode 100644 index 0000000000..18ba62d494 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/binding-sca/README @@ -0,0 +1 @@ +Please look at the README files in the subdirectories of this directory for descriptions of the sample contributions. diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/binding-sca/contribution-calculator/README b/sca-java-2.x/tags/2.0-M5.1/samples/binding-sca/contribution-calculator/README new file mode 100644 index 0000000000..4777c5ad88 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/binding-sca/contribution-calculator/README @@ -0,0 +1,26 @@ +Calculator Sample Contribution +============================== + +This sample contribution implements a simple calculator using SCA components. + +The README in the /samples directory provides +general instructions about building and running samples. ( where +distribution-unpack-dir is the directory in which you unpacked the tuscany +binary distribution archive) Take a look there for instructions on how to launch +this sample contribution. + +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. + +Amongst the other output created by the launcher/contribution combination, you should see the following output ... + +run: + [java] 3 + 2=5.0 + [java] 3 - 2=1.0 + [java] 3 * 2=6.0 + [java] 3 / 2=1.5 + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/binding-sca/contribution-calculator/build.xml b/sca-java-2.x/tags/2.0-M5.1/samples/binding-sca/contribution-calculator/build.xml new file mode 100644 index 0000000000..c109d89c75 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/binding-sca/contribution-calculator/build.xml @@ -0,0 +1,57 @@ + + + + + + + ${tuscany.home} + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/binding-sca/contribution-calculator/pom.xml b/sca-java-2.x/tags/2.0-M5.1/samples/binding-sca/contribution-calculator/pom.xml new file mode 100644 index 0000000000..c6933b758a --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/binding-sca/contribution-calculator/pom.xml @@ -0,0 +1,58 @@ + + + + 4.0.0 + + org.apache.tuscany.sca + tuscany-sca + 2.0-M5.1 + ../../pom.xml + + sample-contribution-binding-sca-calculator + Apache Tuscany SCA Sample Contribution binding-sca Calculator + + + + org.apache.tuscany.sca + tuscany-feature-api + pom + 2.0-M5.1 + + + + junit + junit + 4.8.1 + test + + + + + + ${artifactId} + + + org.apache.tuscany.maven.plugins + maven-tuscany-plugin + 2.0-M5.1 + + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/binding-sca/contribution-calculator/src/main/java/calculator/AddService.java b/sca-java-2.x/tags/2.0-M5.1/samples/binding-sca/contribution-calculator/src/main/java/calculator/AddService.java new file mode 100644 index 0000000000..188451ebac --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/binding-sca/contribution-calculator/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 Add service interface + */ +public interface AddService { + + double add(double n1, double n2); + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/binding-sca/contribution-calculator/src/main/java/calculator/AddServiceImpl.java b/sca-java-2.x/tags/2.0-M5.1/samples/binding-sca/contribution-calculator/src/main/java/calculator/AddServiceImpl.java new file mode 100644 index 0000000000..bb75bb2337 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/binding-sca/contribution-calculator/src/main/java/calculator/AddServiceImpl.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 calculator; + +import java.util.logging.Level; +import java.util.logging.Logger; + +import org.oasisopen.sca.annotation.Service; + +/** + * An implementation of the Add service + */ +@Service(AddService.class) +public class AddServiceImpl implements AddService { + + public double add(double n1, double n2) { + Logger logger = Logger.getLogger("calculator"); + logger.log(Level.FINEST, "Adding " + n1 + " and " + n2); + return n1 + n2; + } + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/binding-sca/contribution-calculator/src/main/java/calculator/CalculatorClient.java b/sca-java-2.x/tags/2.0-M5.1/samples/binding-sca/contribution-calculator/src/main/java/calculator/CalculatorClient.java new file mode 100644 index 0000000000..afd5ea48fc --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/binding-sca/contribution-calculator/src/main/java/calculator/CalculatorClient.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 calculator; + +import org.oasisopen.sca.annotation.EagerInit; +import org.oasisopen.sca.annotation.Init; +import org.oasisopen.sca.annotation.Reference; +import org.oasisopen.sca.annotation.Scope; + +/** + * This client program shows how to create an SCA runtime, start it, + * and locate and invoke a SCA component + */ +@Scope("COMPOSITE") +@EagerInit +public class CalculatorClient { + + private CalculatorService calculatorService; + + @Reference + public void setCalculatorService(CalculatorService calculatorService) { + this.calculatorService = calculatorService; + } + + @Init + public void calculate() { + // Calculate + System.out.println("SCA API ClassLoader: " + Reference.class.getClassLoader()); + 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)); + } + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/binding-sca/contribution-calculator/src/main/java/calculator/CalculatorService.java b/sca-java-2.x/tags/2.0-M5.1/samples/binding-sca/contribution-calculator/src/main/java/calculator/CalculatorService.java new file mode 100644 index 0000000000..ce1cdaae5a --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/binding-sca/contribution-calculator/src/main/java/calculator/CalculatorService.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 calculator; + +import org.oasisopen.sca.annotation.Remotable; + +/** + * The Calculator service interface. + */ +@Remotable +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/sca-java-2.x/tags/2.0-M5.1/samples/binding-sca/contribution-calculator/src/main/java/calculator/CalculatorServiceImpl.java b/sca-java-2.x/tags/2.0-M5.1/samples/binding-sca/contribution-calculator/src/main/java/calculator/CalculatorServiceImpl.java new file mode 100644 index 0000000000..fc53393d23 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/binding-sca/contribution-calculator/src/main/java/calculator/CalculatorServiceImpl.java @@ -0,0 +1,72 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT 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.oasisopen.sca.annotation.Reference; +import org.oasisopen.sca.annotation.Service; + + +/** + * An implementation of the Calculator service. + */ +@Service(CalculatorService.class) +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/sca-java-2.x/tags/2.0-M5.1/samples/binding-sca/contribution-calculator/src/main/java/calculator/DivideService.java b/sca-java-2.x/tags/2.0-M5.1/samples/binding-sca/contribution-calculator/src/main/java/calculator/DivideService.java new file mode 100644 index 0000000000..30d248208b --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/binding-sca/contribution-calculator/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 divide service interface + */ +public interface DivideService { + + double divide(double n1, double n2); + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/binding-sca/contribution-calculator/src/main/java/calculator/DivideServiceImpl.java b/sca-java-2.x/tags/2.0-M5.1/samples/binding-sca/contribution-calculator/src/main/java/calculator/DivideServiceImpl.java new file mode 100644 index 0000000000..b1250ed9f2 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/binding-sca/contribution-calculator/src/main/java/calculator/DivideServiceImpl.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 calculator; + +import java.util.logging.Level; +import java.util.logging.Logger; + +import org.oasisopen.sca.annotation.Service; + +/** + * An implementation of the Divide service. + */ +@Service(DivideService.class) +public class DivideServiceImpl implements DivideService { + + public double divide(double n1, double n2) { + Logger logger = Logger.getLogger("calculator"); + logger.log(Level.FINEST, "Dividing " + n1 + " with " + n2); + return n1 / n2; + } + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/binding-sca/contribution-calculator/src/main/java/calculator/MultiplyService.java b/sca-java-2.x/tags/2.0-M5.1/samples/binding-sca/contribution-calculator/src/main/java/calculator/MultiplyService.java new file mode 100644 index 0000000000..5290605938 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/binding-sca/contribution-calculator/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/sca-java-2.x/tags/2.0-M5.1/samples/binding-sca/contribution-calculator/src/main/java/calculator/MultiplyServiceImpl.java b/sca-java-2.x/tags/2.0-M5.1/samples/binding-sca/contribution-calculator/src/main/java/calculator/MultiplyServiceImpl.java new file mode 100644 index 0000000000..11f68c66e3 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/binding-sca/contribution-calculator/src/main/java/calculator/MultiplyServiceImpl.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 calculator; + +import java.util.logging.Level; +import java.util.logging.Logger; + +import org.oasisopen.sca.annotation.Service; + +/** + * An implementation of the Multiply service. + */ +@Service(MultiplyService.class) +public class MultiplyServiceImpl implements MultiplyService { + + public double multiply(double n1, double n2) { + Logger logger = Logger.getLogger("calculator"); + logger.log(Level.FINEST, "Multiplying " + n1 + " with " + n2); + return n1 * n2; + } + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/binding-sca/contribution-calculator/src/main/java/calculator/SubtractService.java b/sca-java-2.x/tags/2.0-M5.1/samples/binding-sca/contribution-calculator/src/main/java/calculator/SubtractService.java new file mode 100644 index 0000000000..bf0d1882b6 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/binding-sca/contribution-calculator/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 multiply service + */ +public interface SubtractService { + + double subtract(double n1, double n2); + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/binding-sca/contribution-calculator/src/main/java/calculator/SubtractServiceImpl.java b/sca-java-2.x/tags/2.0-M5.1/samples/binding-sca/contribution-calculator/src/main/java/calculator/SubtractServiceImpl.java new file mode 100644 index 0000000000..30e59bf668 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/binding-sca/contribution-calculator/src/main/java/calculator/SubtractServiceImpl.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 calculator; + +import java.util.logging.Level; +import java.util.logging.Logger; + +import org.oasisopen.sca.annotation.Service; + +/** + * An implementation of the subtract service. + */ +@Service(SubtractService.class) +public class SubtractServiceImpl implements SubtractService { + + public double subtract(double n1, double n2) { + Logger logger = Logger.getLogger("calculator"); + logger.log(Level.FINEST, "Subtracting " + n1 + " from " + n2); + return n1 - n2; + } + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/binding-sca/contribution-calculator/src/main/resources/Calculator.composite b/sca-java-2.x/tags/2.0-M5.1/samples/binding-sca/contribution-calculator/src/main/resources/Calculator.composite new file mode 100644 index 0000000000..05bea57944 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/binding-sca/contribution-calculator/src/main/resources/Calculator.composite @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/binding-sca/contribution-calculator/src/main/resources/CalculatorClient.composite b/sca-java-2.x/tags/2.0-M5.1/samples/binding-sca/contribution-calculator/src/main/resources/CalculatorClient.composite new file mode 100644 index 0000000000..dfd32761be --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/binding-sca/contribution-calculator/src/main/resources/CalculatorClient.composite @@ -0,0 +1,30 @@ + + + + + + + + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/binding-sca/contribution-calculator/src/main/resources/META-INF/sca-contribution.xml b/sca-java-2.x/tags/2.0-M5.1/samples/binding-sca/contribution-calculator/src/main/resources/META-INF/sca-contribution.xml new file mode 100644 index 0000000000..3e64787ce4 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/binding-sca/contribution-calculator/src/main/resources/META-INF/sca-contribution.xml @@ -0,0 +1,24 @@ + + + + + + \ No newline at end of file diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/binding-sca/contribution-calculator/src/test/java/calculator/CalculatorTestCase.java b/sca-java-2.x/tags/2.0-M5.1/samples/binding-sca/contribution-calculator/src/test/java/calculator/CalculatorTestCase.java new file mode 100644 index 0000000000..9d3024f451 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/binding-sca/contribution-calculator/src/test/java/calculator/CalculatorTestCase.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 calculator; + +import static org.junit.Assert.assertEquals; + +import org.junit.Test; + +/** + * A unit test of the basic Java implementation classes in this contribution + * without using SCA + */ +public class CalculatorTestCase { + + @Test + public void testCalculator() throws Exception { + AddService add = new AddServiceImpl(); + SubtractService subtract = new SubtractServiceImpl(); + MultiplyService multiply = new MultiplyServiceImpl(); + DivideService divide = new DivideServiceImpl(); + + CalculatorServiceImpl calculator = new CalculatorServiceImpl(); + + calculator.setAddService(add); + calculator.setSubtractService(subtract); + calculator.setMultiplyService(multiply); + calculator.setDivideService(divide); + + assertEquals(calculator.add(3, 2), 5.0, 0); + assertEquals(calculator.subtract(3, 2), 1.0, 0); + assertEquals(calculator.multiply(3, 2), 6.0, 0); + assertEquals(calculator.divide(3, 2), 1.5, 0); + } +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/binding-sca/pom.xml b/sca-java-2.x/tags/2.0-M5.1/samples/binding-sca/pom.xml new file mode 100644 index 0000000000..6ba062df21 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/binding-sca/pom.xml @@ -0,0 +1,43 @@ + + + + 4.0.0 + + org.apache.tuscany.sca + tuscany-sca + 2.0-M5.1 + ../../pom.xml + + tuscany-sample-binding-sca + pom + Apache Tuscany SCA Sample binding.sca + + + + default + + true + + + contribution-calculator + + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/calculator-osgi/META-INF/MANIFEST.MF b/sca-java-2.x/tags/2.0-M5.1/samples/calculator-osgi/META-INF/MANIFEST.MF new file mode 100644 index 0000000000..1ebd35b30a --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/calculator-osgi/META-INF/MANIFEST.MF @@ -0,0 +1,19 @@ +Manifest-Version: 1.0 +Private-Package: calculator;version="2.0.0" +Tool: Bnd-0.0.255 +Bundle-Name: Apache Tuscany SCA Calculator OSGi Sample +Created-By: 1.6.0_07 (Sun Microsystems Inc.) +Bundle-Vendor: The Apache Software Foundation +Eclipse-LazyStart: false +Bundle-Version: 2.0.0 +Bnd-LastModified: 1223949424781 +Bundle-Activator: calculator.CalculatorActivator +Bundle-ManifestVersion: 2 +Bundle-License: http://www.apache.org/licenses/LICENSE-2.0.txt +Bundle-Description: Apache Tuscany SCA Calculator OSGi Sample +Import-Package: org.apache.tuscany.sca.node;version="2.0.0", + org.oasisopen.sca.annotation;version="2.0.0", + org.osgi.framework;version="1.4" +Bundle-SymbolicName: sample-calculator-osgi +Bundle-DocURL: http://www.apache.org/ +Bundle-RequiredExecutionEnvironment: J2SE-1.5,JavaSE-1.6 diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/calculator-osgi/README b/sca-java-2.x/tags/2.0-M5.1/samples/calculator-osgi/README new file mode 100644 index 0000000000..c416ad96a0 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/calculator-osgi/README @@ -0,0 +1,99 @@ +Calculator Sample +================= +This sample implements a simple calculator using SCA components and run it in a OSGi environment. + +The README in the /samples directory provides +general instructions about building and running samples. (where +distribution-unpack-dir is the directory in which you unpacked the tuscany +binary distribution archive). Take a look there first (noting at you read it that this sample +is not a new style sample). + +If you just want to run it to see what happens open a command prompt, navigate +to this sample directory and do: + +ant run + +OR if you don't have ant, on Windows do + +java -jar ..\..\features\tuscany-sca-equinox-manifest.jar -composite Calculator.composite -config ..\..\features\configuration\ -ttl 0 target\sample-calculator-osgi.jar + +and on *nix do + +java -jar ../../features/tuscany-sca-equinox-manifest.jar -composite Calculator.composite -config ../../features/configuration/ -ttl 0 target/sample-calculator-osgi.jar + +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/ + src/ + main/ + java/ + calculator/ + CalculatorService.java - the first component, calls +-/* as + appropriate + CalculatorServiceImpl.java + AddService.java - adds two numbers + AddServiceImpl.java + SubtractService.java - subtracts one number from another + SubtractServiceImpl.java + MultiplyService.java - multiplies two numbers + MultiplyServiceImpl.java + DivideService.java - divides one number by another + DivideServiceImpl.java + CalculatorClient.java - starts the SCA Runtime and + deploys the Calculator.composite. + It then calls the deployed Calculator + Components services + resources/ + Calculator.composite - the SCA assembly for this sample + 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 and run using Ant as +follows + +cd calculator +ant compile +ant run + +You should see the following output from the run target. + +run: + [java] 3 + 2=5.0 + [java] 3 - 2=1.0 + [java] 3 * 2=6.0 + [java] 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 +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: 1.272 sec + +Results : + +Tests run: 1, Failures: 0, Errors: 0, Skipped: 0 + +This shows that the Junit test cases have run successfully. diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/calculator-osgi/build.xml b/sca-java-2.x/tags/2.0-M5.1/samples/calculator-osgi/build.xml new file mode 100644 index 0000000000..46522211f9 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/calculator-osgi/build.xml @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/calculator-osgi/pom.xml b/sca-java-2.x/tags/2.0-M5.1/samples/calculator-osgi/pom.xml new file mode 100644 index 0000000000..ebf5123e27 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/calculator-osgi/pom.xml @@ -0,0 +1,116 @@ + + + + 4.0.0 + + org.apache.tuscany.sca + tuscany-sca + 2.0-M5.1 + ../../pom.xml + + sample-calculator-osgi + Apache Tuscany SCA Sample Calculator OSGi + + + + org.apache.tuscany.sca + tuscany-feature-api + 2.0-M5.1 + pom + + + + org.apache.tuscany.sca + tuscany-feature-core + 2.0-M5.1 + pom + + + + junit + junit + 4.8.1 + test + + + + + ${artifactId} + + + maven-eclipse-plugin + 2.5.1 + + + org.eclipse.pde.ManifestBuilder + org.eclipse.jdt.core.javabuilder + + + org.eclipse.jdt.core.javanature + org.eclipse.pde.PluginNature + + + org.eclipse.jdt.launching.JRE_CONTAINER + + + + + + + maven-jar-plugin + + + ${basedir}/META-INF/MANIFEST.MF + + + + + + org.apache.tuscany.maven.plugins + maven-osgi-junit-plugin + 1.0 + + + org.apache.tuscany.sca + tuscany-node-launcher-equinox + ${pom.version} + + + + + osgi-test + test + + test + + + + + osgi.configuration.area + ${project.build.directory}/equinox + + + + + + + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/calculator-osgi/src/main/java/calculator/AddService.java b/sca-java-2.x/tags/2.0-M5.1/samples/calculator-osgi/src/main/java/calculator/AddService.java new file mode 100644 index 0000000000..188451ebac --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/calculator-osgi/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 Add service interface + */ +public interface AddService { + + double add(double n1, double n2); + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/calculator-osgi/src/main/java/calculator/AddServiceImpl.java b/sca-java-2.x/tags/2.0-M5.1/samples/calculator-osgi/src/main/java/calculator/AddServiceImpl.java new file mode 100644 index 0000000000..7ca8fb04b5 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/calculator-osgi/src/main/java/calculator/AddServiceImpl.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; + +import java.util.logging.Level; +import java.util.logging.Logger; + +/** + * An implementation of the Add service + */ +public class AddServiceImpl implements AddService { + + public double add(double n1, double n2) { + Logger logger = Logger.getLogger("calculator"); + logger.log(Level.FINEST, "Adding " + n1 + " and " + n2); + return n1 + n2; + } + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/calculator-osgi/src/main/java/calculator/CalculatorActivator.java b/sca-java-2.x/tags/2.0-M5.1/samples/calculator-osgi/src/main/java/calculator/CalculatorActivator.java new file mode 100644 index 0000000000..4408568629 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/calculator-osgi/src/main/java/calculator/CalculatorActivator.java @@ -0,0 +1,54 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package calculator; + +import org.apache.tuscany.sca.node.Contribution; +import org.apache.tuscany.sca.node.ContributionLocationHelper; +import org.apache.tuscany.sca.node.Node; +import org.apache.tuscany.sca.node.NodeFactory; +import org.osgi.framework.BundleActivator; +import org.osgi.framework.BundleContext; + +/** + * Bundle Activator for Calculator + * + */ +public class CalculatorActivator implements BundleActivator { + private Node node; + + public void start(BundleContext context) throws Exception { + try { + NodeFactory factory = NodeFactory.newInstance(); + String url = ContributionLocationHelper.getContributionLocation(getClass()); + Contribution contrib = new Contribution("c1", url); + node = factory.createNode("Calculator.composite", contrib); + node.start(); + } catch (Throwable e) { + e.printStackTrace(); + } + } + + public void stop(BundleContext context) throws Exception { + if (node != null) { + node.stop(); + node = null; + } + } + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/calculator-osgi/src/main/java/calculator/CalculatorClient.java b/sca-java-2.x/tags/2.0-M5.1/samples/calculator-osgi/src/main/java/calculator/CalculatorClient.java new file mode 100644 index 0000000000..afd5ea48fc --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/calculator-osgi/src/main/java/calculator/CalculatorClient.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 calculator; + +import org.oasisopen.sca.annotation.EagerInit; +import org.oasisopen.sca.annotation.Init; +import org.oasisopen.sca.annotation.Reference; +import org.oasisopen.sca.annotation.Scope; + +/** + * This client program shows how to create an SCA runtime, start it, + * and locate and invoke a SCA component + */ +@Scope("COMPOSITE") +@EagerInit +public class CalculatorClient { + + private CalculatorService calculatorService; + + @Reference + public void setCalculatorService(CalculatorService calculatorService) { + this.calculatorService = calculatorService; + } + + @Init + public void calculate() { + // Calculate + System.out.println("SCA API ClassLoader: " + Reference.class.getClassLoader()); + 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)); + } + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/calculator-osgi/src/main/java/calculator/CalculatorService.java b/sca-java-2.x/tags/2.0-M5.1/samples/calculator-osgi/src/main/java/calculator/CalculatorService.java new file mode 100644 index 0000000000..c89043276e --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/calculator-osgi/src/main/java/calculator/CalculatorService.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 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/sca-java-2.x/tags/2.0-M5.1/samples/calculator-osgi/src/main/java/calculator/CalculatorServiceImpl.java b/sca-java-2.x/tags/2.0-M5.1/samples/calculator-osgi/src/main/java/calculator/CalculatorServiceImpl.java new file mode 100644 index 0000000000..39f55ca31f --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/calculator-osgi/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.oasisopen.sca.annotation.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/sca-java-2.x/tags/2.0-M5.1/samples/calculator-osgi/src/main/java/calculator/DivideService.java b/sca-java-2.x/tags/2.0-M5.1/samples/calculator-osgi/src/main/java/calculator/DivideService.java new file mode 100644 index 0000000000..30d248208b --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/calculator-osgi/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 divide service interface + */ +public interface DivideService { + + double divide(double n1, double n2); + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/calculator-osgi/src/main/java/calculator/DivideServiceImpl.java b/sca-java-2.x/tags/2.0-M5.1/samples/calculator-osgi/src/main/java/calculator/DivideServiceImpl.java new file mode 100644 index 0000000000..1323edf55a --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/calculator-osgi/src/main/java/calculator/DivideServiceImpl.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; + +import java.util.logging.Level; +import java.util.logging.Logger; + +/** + * An implementation of the Divide service. + */ +public class DivideServiceImpl implements DivideService { + + public double divide(double n1, double n2) { + Logger logger = Logger.getLogger("calculator"); + logger.log(Level.FINEST, "Dividing " + n1 + " with " + n2); + return n1 / n2; + } + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/calculator-osgi/src/main/java/calculator/MultiplyService.java b/sca-java-2.x/tags/2.0-M5.1/samples/calculator-osgi/src/main/java/calculator/MultiplyService.java new file mode 100644 index 0000000000..5290605938 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/calculator-osgi/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/sca-java-2.x/tags/2.0-M5.1/samples/calculator-osgi/src/main/java/calculator/MultiplyServiceImpl.java b/sca-java-2.x/tags/2.0-M5.1/samples/calculator-osgi/src/main/java/calculator/MultiplyServiceImpl.java new file mode 100644 index 0000000000..91b803bc9e --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/calculator-osgi/src/main/java/calculator/MultiplyServiceImpl.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; + +import java.util.logging.Level; +import java.util.logging.Logger; + +/** + * An implementation of the Multiply service. + */ +public class MultiplyServiceImpl implements MultiplyService { + + public double multiply(double n1, double n2) { + Logger logger = Logger.getLogger("calculator"); + logger.log(Level.FINEST, "Multiplying " + n1 + " with " + n2); + return n1 * n2; + } + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/calculator-osgi/src/main/java/calculator/SubtractService.java b/sca-java-2.x/tags/2.0-M5.1/samples/calculator-osgi/src/main/java/calculator/SubtractService.java new file mode 100644 index 0000000000..bf0d1882b6 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/calculator-osgi/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 multiply service + */ +public interface SubtractService { + + double subtract(double n1, double n2); + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/calculator-osgi/src/main/java/calculator/SubtractServiceImpl.java b/sca-java-2.x/tags/2.0-M5.1/samples/calculator-osgi/src/main/java/calculator/SubtractServiceImpl.java new file mode 100644 index 0000000000..58cc4a3547 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/calculator-osgi/src/main/java/calculator/SubtractServiceImpl.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; + +import java.util.logging.Level; +import java.util.logging.Logger; + +/** + * An implementation of the subtract service. + */ +public class SubtractServiceImpl implements SubtractService { + + public double subtract(double n1, double n2) { + Logger logger = Logger.getLogger("calculator"); + logger.log(Level.FINEST, "Subtracting " + n1 + " from " + n2); + return n1 - n2; + } + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/calculator-osgi/src/main/resources/Calculator.composite b/sca-java-2.x/tags/2.0-M5.1/samples/calculator-osgi/src/main/resources/Calculator.composite new file mode 100644 index 0000000000..c5e636f769 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/calculator-osgi/src/main/resources/Calculator.composite @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/calculator-osgi/src/test/java/calculator/CalculatorTestCase.java b/sca-java-2.x/tags/2.0-M5.1/samples/calculator-osgi/src/test/java/calculator/CalculatorTestCase.java new file mode 100644 index 0000000000..d6a3ccb24e --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/calculator-osgi/src/test/java/calculator/CalculatorTestCase.java @@ -0,0 +1,54 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package calculator; + +import org.apache.tuscany.sca.node.Contribution; +import org.apache.tuscany.sca.node.ContributionLocationHelper; +import org.apache.tuscany.sca.node.Node; +import org.apache.tuscany.sca.node.NodeFactory; +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.Test; + +/** + * This shows how to test the Calculator composition. + */ +public class CalculatorTestCase { + + private static Node node; + + @BeforeClass + public static void setUpBeforeClass() throws Exception { + String location = ContributionLocationHelper.getContributionLocation(CalculatorClient.class); + node = NodeFactory.newInstance().createNode("Calculator.composite", new Contribution("test", location)); + System.out.println("SCA Node API ClassLoader: " + node.getClass().getClassLoader()); + node.start(); + } + + @AfterClass + public static void tearDownAfterClass() throws Exception { + if (node != null) { + node.stop(); + } + } + + @Test + public void testDummy() throws Exception { + } +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/calculator-scaclient/README b/sca-java-2.x/tags/2.0-M5.1/samples/calculator-scaclient/README new file mode 100644 index 0000000000..97058ca4c9 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/calculator-scaclient/README @@ -0,0 +1,13 @@ +To run an application that uses the SCA client API to send messages to the +Calculator service running in the domain do the following + +First start one of the Calculator based contributions. For example, + +cd samples/binding-sca/contribution-calculator +follow the instructions in the README there + +Then run the the SCA client by doing the following: + +cd samples/calculator-scaclient +mvn exec:java + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/calculator-scaclient/pom.xml b/sca-java-2.x/tags/2.0-M5.1/samples/calculator-scaclient/pom.xml new file mode 100644 index 0000000000..66f3fac716 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/calculator-scaclient/pom.xml @@ -0,0 +1,69 @@ + + + + 4.0.0 + + org.apache.tuscany.sca + tuscany-sca + 2.0-M5.1 + ../../pom.xml + + + sample-calculator-scaclient + Apache Tuscany SCA Sample Calcualtor SCAClient + + + + + org.apache.tuscany.sca.shades + tuscany-base + 2.0-M5.1 + + + + junit + junit + 4.8.1 + test + + + + + + ${artifactId} + + + org.codehaus.mojo + exec-maven-plugin + 1.1.1 + + + + java + + + + + sample.CalculatorSCAClient + + + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/calculator-scaclient/src/main/java/calculator/CalculatorService.java b/sca-java-2.x/tags/2.0-M5.1/samples/calculator-scaclient/src/main/java/calculator/CalculatorService.java new file mode 100644 index 0000000000..12d80ffd1c --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/calculator-scaclient/src/main/java/calculator/CalculatorService.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 calculator; + +import org.oasisopen.sca.annotation.Remotable; + + +/** + * The Calculator service interface. + */ +@Remotable +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/sca-java-2.x/tags/2.0-M5.1/samples/calculator-scaclient/src/main/java/sample/CalculatorSCAClient.java b/sca-java-2.x/tags/2.0-M5.1/samples/calculator-scaclient/src/main/java/sample/CalculatorSCAClient.java new file mode 100644 index 0000000000..edbf528517 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/calculator-scaclient/src/main/java/sample/CalculatorSCAClient.java @@ -0,0 +1,53 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT 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 sample; + +import java.net.URI; + +import org.oasisopen.sca.NoSuchDomainException; +import org.oasisopen.sca.NoSuchServiceException; +import org.oasisopen.sca.client.SCAClientFactory; + +import calculator.CalculatorService; + +public class CalculatorSCAClient { + + public static void main(String[] args) throws NoSuchDomainException, NoSuchServiceException { + + String domainURI = "default"; + String name = "world"; + + if (args.length == 2) { + domainURI= args[0]; + name = args[1]; + } else if (args.length == 1) { + domainURI= args[0]; + } + + System.out.println("using domain uri: " + domainURI); + System.out.println("using name: " + name); + + SCAClientFactory factory = SCAClientFactory.newInstance(URI.create(domainURI)); + CalculatorService calculator = factory.getService(CalculatorService.class, "CalculatorServiceComponent"); + + System.out.println("Calling CalculatorService.add(2, 3)"); + System.out.println(calculator.add(3, 2)); + } + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/contribution-binding-ws-calculator/README b/sca-java-2.x/tags/2.0-M5.1/samples/contribution-binding-ws-calculator/README new file mode 100644 index 0000000000..14636d090e --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/contribution-binding-ws-calculator/README @@ -0,0 +1,25 @@ +Calculator Contribution Sample +============================== + +This directory contains code which implements a simple calculator SCA contribution. + +The contribution can be run as a tuscany application using one of the tuscany launchers +as described in the README in the root directory of the samples. + +Sample Overview +--------------- +The sample provides a single calculator service with a default SCA (java) +binding. The launcher 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. + +You should see the following output (depending on the launcher you use, this output +may be surrounded by other output). + +run: + [java] 3 + 2=5.0 + [java] 3 - 2=1.0 + [java] 3 * 2=6.0 + [java] 3 / 2=1.5 + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/contribution-binding-ws-calculator/build.xml b/sca-java-2.x/tags/2.0-M5.1/samples/contribution-binding-ws-calculator/build.xml new file mode 100644 index 0000000000..b0401d755e --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/contribution-binding-ws-calculator/build.xml @@ -0,0 +1,55 @@ + + + + + + ${tuscany.home} + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/contribution-binding-ws-calculator/calculator.odg b/sca-java-2.x/tags/2.0-M5.1/samples/contribution-binding-ws-calculator/calculator.odg new file mode 100644 index 0000000000..c2646f7d5e Binary files /dev/null and b/sca-java-2.x/tags/2.0-M5.1/samples/contribution-binding-ws-calculator/calculator.odg differ diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/contribution-binding-ws-calculator/calculator.png b/sca-java-2.x/tags/2.0-M5.1/samples/contribution-binding-ws-calculator/calculator.png new file mode 100644 index 0000000000..476306e5f0 Binary files /dev/null and b/sca-java-2.x/tags/2.0-M5.1/samples/contribution-binding-ws-calculator/calculator.png differ diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/contribution-binding-ws-calculator/pom.xml b/sca-java-2.x/tags/2.0-M5.1/samples/contribution-binding-ws-calculator/pom.xml new file mode 100644 index 0000000000..64b718729d --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/contribution-binding-ws-calculator/pom.xml @@ -0,0 +1,54 @@ + + + + 4.0.0 + + org.apache.tuscany.sca + tuscany-sca + 2.0-M5.1 + ../../pom.xml + + sample-contribution-binding-ws-calculator + Apache Tuscany SCA Sample Contribution binding-ws Calculator + + + + org.apache.tuscany.sca + tuscany-feature-api + pom + 2.0-M5.1 + + + + junit + junit + 4.8.1 + test + + + + + + ${artifactId} + + + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/contribution-binding-ws-calculator/src/main/java/calculator/AddService.java b/sca-java-2.x/tags/2.0-M5.1/samples/contribution-binding-ws-calculator/src/main/java/calculator/AddService.java new file mode 100644 index 0000000000..dd7ecb827d --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/contribution-binding-ws-calculator/src/main/java/calculator/AddService.java @@ -0,0 +1,31 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT 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.oasisopen.sca.annotation.Remotable; + +/** + * The Add service interface + */ +@Remotable +public interface AddService { + + double add(double n1, double n2); + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/contribution-binding-ws-calculator/src/main/java/calculator/AddServiceImpl.java b/sca-java-2.x/tags/2.0-M5.1/samples/contribution-binding-ws-calculator/src/main/java/calculator/AddServiceImpl.java new file mode 100644 index 0000000000..7ca8fb04b5 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/contribution-binding-ws-calculator/src/main/java/calculator/AddServiceImpl.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; + +import java.util.logging.Level; +import java.util.logging.Logger; + +/** + * An implementation of the Add service + */ +public class AddServiceImpl implements AddService { + + public double add(double n1, double n2) { + Logger logger = Logger.getLogger("calculator"); + logger.log(Level.FINEST, "Adding " + n1 + " and " + n2); + return n1 + n2; + } + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/contribution-binding-ws-calculator/src/main/java/calculator/CalculatorService.java b/sca-java-2.x/tags/2.0-M5.1/samples/contribution-binding-ws-calculator/src/main/java/calculator/CalculatorService.java new file mode 100644 index 0000000000..031fa8b912 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/contribution-binding-ws-calculator/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/sca-java-2.x/tags/2.0-M5.1/samples/contribution-binding-ws-calculator/src/main/java/calculator/CalculatorServiceImpl.java b/sca-java-2.x/tags/2.0-M5.1/samples/contribution-binding-ws-calculator/src/main/java/calculator/CalculatorServiceImpl.java new file mode 100644 index 0000000000..17fad7de6b --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/contribution-binding-ws-calculator/src/main/java/calculator/CalculatorServiceImpl.java @@ -0,0 +1,70 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package calculator; + +import org.oasisopen.sca.annotation.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/sca-java-2.x/tags/2.0-M5.1/samples/contribution-binding-ws-calculator/src/main/java/calculator/DivideService.java b/sca-java-2.x/tags/2.0-M5.1/samples/contribution-binding-ws-calculator/src/main/java/calculator/DivideService.java new file mode 100644 index 0000000000..30d248208b --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/contribution-binding-ws-calculator/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 divide service interface + */ +public interface DivideService { + + double divide(double n1, double n2); + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/contribution-binding-ws-calculator/src/main/java/calculator/DivideServiceImpl.java b/sca-java-2.x/tags/2.0-M5.1/samples/contribution-binding-ws-calculator/src/main/java/calculator/DivideServiceImpl.java new file mode 100644 index 0000000000..1323edf55a --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/contribution-binding-ws-calculator/src/main/java/calculator/DivideServiceImpl.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; + +import java.util.logging.Level; +import java.util.logging.Logger; + +/** + * An implementation of the Divide service. + */ +public class DivideServiceImpl implements DivideService { + + public double divide(double n1, double n2) { + Logger logger = Logger.getLogger("calculator"); + logger.log(Level.FINEST, "Dividing " + n1 + " with " + n2); + return n1 / n2; + } + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/contribution-binding-ws-calculator/src/main/java/calculator/MultiplyService.java b/sca-java-2.x/tags/2.0-M5.1/samples/contribution-binding-ws-calculator/src/main/java/calculator/MultiplyService.java new file mode 100644 index 0000000000..5290605938 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/contribution-binding-ws-calculator/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/sca-java-2.x/tags/2.0-M5.1/samples/contribution-binding-ws-calculator/src/main/java/calculator/MultiplyServiceImpl.java b/sca-java-2.x/tags/2.0-M5.1/samples/contribution-binding-ws-calculator/src/main/java/calculator/MultiplyServiceImpl.java new file mode 100644 index 0000000000..91b803bc9e --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/contribution-binding-ws-calculator/src/main/java/calculator/MultiplyServiceImpl.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; + +import java.util.logging.Level; +import java.util.logging.Logger; + +/** + * An implementation of the Multiply service. + */ +public class MultiplyServiceImpl implements MultiplyService { + + public double multiply(double n1, double n2) { + Logger logger = Logger.getLogger("calculator"); + logger.log(Level.FINEST, "Multiplying " + n1 + " with " + n2); + return n1 * n2; + } + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/contribution-binding-ws-calculator/src/main/java/calculator/SubtractService.java b/sca-java-2.x/tags/2.0-M5.1/samples/contribution-binding-ws-calculator/src/main/java/calculator/SubtractService.java new file mode 100644 index 0000000000..bf0d1882b6 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/contribution-binding-ws-calculator/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 multiply service + */ +public interface SubtractService { + + double subtract(double n1, double n2); + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/contribution-binding-ws-calculator/src/main/java/calculator/SubtractServiceImpl.java b/sca-java-2.x/tags/2.0-M5.1/samples/contribution-binding-ws-calculator/src/main/java/calculator/SubtractServiceImpl.java new file mode 100644 index 0000000000..58cc4a3547 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/contribution-binding-ws-calculator/src/main/java/calculator/SubtractServiceImpl.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; + +import java.util.logging.Level; +import java.util.logging.Logger; + +/** + * An implementation of the subtract service. + */ +public class SubtractServiceImpl implements SubtractService { + + public double subtract(double n1, double n2) { + Logger logger = Logger.getLogger("calculator"); + logger.log(Level.FINEST, "Subtracting " + n1 + " from " + n2); + return n1 - n2; + } + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/contribution-binding-ws-calculator/src/main/resources/Calculator.composite b/sca-java-2.x/tags/2.0-M5.1/samples/contribution-binding-ws-calculator/src/main/resources/Calculator.composite new file mode 100644 index 0000000000..ac4d7321e7 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/contribution-binding-ws-calculator/src/main/resources/Calculator.composite @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/contribution-binding-ws-calculator/src/main/resources/META-INF/sca-contribution.xml b/sca-java-2.x/tags/2.0-M5.1/samples/contribution-binding-ws-calculator/src/main/resources/META-INF/sca-contribution.xml new file mode 100644 index 0000000000..8d6012e5c4 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/contribution-binding-ws-calculator/src/main/resources/META-INF/sca-contribution.xml @@ -0,0 +1,23 @@ + + + + + \ No newline at end of file diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/contribution-binding-ws-calculator/src/test/java/calculator/CalculatorTestCase.java b/sca-java-2.x/tags/2.0-M5.1/samples/contribution-binding-ws-calculator/src/test/java/calculator/CalculatorTestCase.java new file mode 100644 index 0000000000..9d3024f451 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/contribution-binding-ws-calculator/src/test/java/calculator/CalculatorTestCase.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 calculator; + +import static org.junit.Assert.assertEquals; + +import org.junit.Test; + +/** + * A unit test of the basic Java implementation classes in this contribution + * without using SCA + */ +public class CalculatorTestCase { + + @Test + public void testCalculator() throws Exception { + AddService add = new AddServiceImpl(); + SubtractService subtract = new SubtractServiceImpl(); + MultiplyService multiply = new MultiplyServiceImpl(); + DivideService divide = new DivideServiceImpl(); + + CalculatorServiceImpl calculator = new CalculatorServiceImpl(); + + calculator.setAddService(add); + calculator.setSubtractService(subtract); + calculator.setMultiplyService(multiply); + calculator.setDivideService(divide); + + assertEquals(calculator.add(3, 2), 5.0, 0); + assertEquals(calculator.subtract(3, 2), 1.0, 0); + assertEquals(calculator.multiply(3, 2), 6.0, 0); + assertEquals(calculator.divide(3, 2), 1.5, 0); + } +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/contribution-implementation-java-calculator/README b/sca-java-2.x/tags/2.0-M5.1/samples/contribution-implementation-java-calculator/README new file mode 100644 index 0000000000..acf18ec8d9 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/contribution-implementation-java-calculator/README @@ -0,0 +1,25 @@ +Calculator Sample Contribution +============================== + +This sample implements a simple calculator using SCA components. + +The README in the /samples directory provides +general instructions about building and running samples. ( where +distribution-unpack-dir is the directory in which you unpacked the tuscany +binary distribution archive) Take a look there for instructions on how to launch +this sample contribution. + +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. + +You should see the following output from the run target. + +run: + [java] 3 + 2=5.0 + [java] 3 - 2=1.0 + [java] 3 * 2=6.0 + [java] 3 / 2=1.5 diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/contribution-implementation-java-calculator/build.xml b/sca-java-2.x/tags/2.0-M5.1/samples/contribution-implementation-java-calculator/build.xml new file mode 100644 index 0000000000..c4b53cc9cf --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/contribution-implementation-java-calculator/build.xml @@ -0,0 +1,56 @@ + + + + + + + + ${tuscany.home} + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/contribution-implementation-java-calculator/pom.xml b/sca-java-2.x/tags/2.0-M5.1/samples/contribution-implementation-java-calculator/pom.xml new file mode 100644 index 0000000000..22853a4b1f --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/contribution-implementation-java-calculator/pom.xml @@ -0,0 +1,58 @@ + + + + 4.0.0 + + org.apache.tuscany.sca + tuscany-sca + 2.0-M5.1 + ../../pom.xml + + sample-contribution-implementation-java-calculator + Apache Tuscany SCA Sample Contribution Implementation Java Calculator + + + + org.apache.tuscany.sca + tuscany-feature-api + pom + 2.0-M5.1 + + + + junit + junit + 4.8.1 + test + + + + + ${artifactId} + + + org.apache.tuscany.maven.plugins + maven-tuscany-plugin + 2.0-M5.1 + + + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/contribution-implementation-java-calculator/src/main/java/calculator/AddService.java b/sca-java-2.x/tags/2.0-M5.1/samples/contribution-implementation-java-calculator/src/main/java/calculator/AddService.java new file mode 100644 index 0000000000..188451ebac --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/contribution-implementation-java-calculator/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 Add service interface + */ +public interface AddService { + + double add(double n1, double n2); + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/contribution-implementation-java-calculator/src/main/java/calculator/AddServiceImpl.java b/sca-java-2.x/tags/2.0-M5.1/samples/contribution-implementation-java-calculator/src/main/java/calculator/AddServiceImpl.java new file mode 100644 index 0000000000..7ca8fb04b5 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/contribution-implementation-java-calculator/src/main/java/calculator/AddServiceImpl.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; + +import java.util.logging.Level; +import java.util.logging.Logger; + +/** + * An implementation of the Add service + */ +public class AddServiceImpl implements AddService { + + public double add(double n1, double n2) { + Logger logger = Logger.getLogger("calculator"); + logger.log(Level.FINEST, "Adding " + n1 + " and " + n2); + return n1 + n2; + } + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/contribution-implementation-java-calculator/src/main/java/calculator/CalculatorClient.java b/sca-java-2.x/tags/2.0-M5.1/samples/contribution-implementation-java-calculator/src/main/java/calculator/CalculatorClient.java new file mode 100644 index 0000000000..84c98d7f70 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/contribution-implementation-java-calculator/src/main/java/calculator/CalculatorClient.java @@ -0,0 +1,62 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package calculator; + +import org.oasisopen.sca.annotation.EagerInit; +import org.oasisopen.sca.annotation.Init; +import org.oasisopen.sca.annotation.Reference; +import org.oasisopen.sca.annotation.Scope; + +/** + * This client program shows how to create an SCA runtime, start it, + * and locate and invoke a SCA component + */ +@Scope("COMPOSITE") @EagerInit +public class CalculatorClient { + + private CalculatorService calculatorService; + + @Reference + public void setCalculatorService(CalculatorService calculatorService) { + this.calculatorService = calculatorService; + } + + @Init + public void calculate() { + + // Calculate + System.out.println("SCA API ClassLoader: " + print(Reference.class.getClassLoader())); + 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)); + } + + private static String print(ClassLoader cl) { + StringBuffer buf = new StringBuffer(); + for (; cl != null;) { + buf.append(cl.toString()); + buf.append(' '); + cl = cl.getParent(); + } + return buf.toString(); + } + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/contribution-implementation-java-calculator/src/main/java/calculator/CalculatorService.java b/sca-java-2.x/tags/2.0-M5.1/samples/contribution-implementation-java-calculator/src/main/java/calculator/CalculatorService.java new file mode 100644 index 0000000000..ce1cdaae5a --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/contribution-implementation-java-calculator/src/main/java/calculator/CalculatorService.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 calculator; + +import org.oasisopen.sca.annotation.Remotable; + +/** + * The Calculator service interface. + */ +@Remotable +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/sca-java-2.x/tags/2.0-M5.1/samples/contribution-implementation-java-calculator/src/main/java/calculator/CalculatorServiceImpl.java b/sca-java-2.x/tags/2.0-M5.1/samples/contribution-implementation-java-calculator/src/main/java/calculator/CalculatorServiceImpl.java new file mode 100644 index 0000000000..17fad7de6b --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/contribution-implementation-java-calculator/src/main/java/calculator/CalculatorServiceImpl.java @@ -0,0 +1,70 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package calculator; + +import org.oasisopen.sca.annotation.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/sca-java-2.x/tags/2.0-M5.1/samples/contribution-implementation-java-calculator/src/main/java/calculator/DivideService.java b/sca-java-2.x/tags/2.0-M5.1/samples/contribution-implementation-java-calculator/src/main/java/calculator/DivideService.java new file mode 100644 index 0000000000..30d248208b --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/contribution-implementation-java-calculator/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 divide service interface + */ +public interface DivideService { + + double divide(double n1, double n2); + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/contribution-implementation-java-calculator/src/main/java/calculator/DivideServiceImpl.java b/sca-java-2.x/tags/2.0-M5.1/samples/contribution-implementation-java-calculator/src/main/java/calculator/DivideServiceImpl.java new file mode 100644 index 0000000000..1323edf55a --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/contribution-implementation-java-calculator/src/main/java/calculator/DivideServiceImpl.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; + +import java.util.logging.Level; +import java.util.logging.Logger; + +/** + * An implementation of the Divide service. + */ +public class DivideServiceImpl implements DivideService { + + public double divide(double n1, double n2) { + Logger logger = Logger.getLogger("calculator"); + logger.log(Level.FINEST, "Dividing " + n1 + " with " + n2); + return n1 / n2; + } + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/contribution-implementation-java-calculator/src/main/java/calculator/MultiplyService.java b/sca-java-2.x/tags/2.0-M5.1/samples/contribution-implementation-java-calculator/src/main/java/calculator/MultiplyService.java new file mode 100644 index 0000000000..5290605938 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/contribution-implementation-java-calculator/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/sca-java-2.x/tags/2.0-M5.1/samples/contribution-implementation-java-calculator/src/main/java/calculator/MultiplyServiceImpl.java b/sca-java-2.x/tags/2.0-M5.1/samples/contribution-implementation-java-calculator/src/main/java/calculator/MultiplyServiceImpl.java new file mode 100644 index 0000000000..91b803bc9e --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/contribution-implementation-java-calculator/src/main/java/calculator/MultiplyServiceImpl.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; + +import java.util.logging.Level; +import java.util.logging.Logger; + +/** + * An implementation of the Multiply service. + */ +public class MultiplyServiceImpl implements MultiplyService { + + public double multiply(double n1, double n2) { + Logger logger = Logger.getLogger("calculator"); + logger.log(Level.FINEST, "Multiplying " + n1 + " with " + n2); + return n1 * n2; + } + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/contribution-implementation-java-calculator/src/main/java/calculator/SubtractService.java b/sca-java-2.x/tags/2.0-M5.1/samples/contribution-implementation-java-calculator/src/main/java/calculator/SubtractService.java new file mode 100644 index 0000000000..bf0d1882b6 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/contribution-implementation-java-calculator/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 multiply service + */ +public interface SubtractService { + + double subtract(double n1, double n2); + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/contribution-implementation-java-calculator/src/main/java/calculator/SubtractServiceImpl.java b/sca-java-2.x/tags/2.0-M5.1/samples/contribution-implementation-java-calculator/src/main/java/calculator/SubtractServiceImpl.java new file mode 100644 index 0000000000..58cc4a3547 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/contribution-implementation-java-calculator/src/main/java/calculator/SubtractServiceImpl.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; + +import java.util.logging.Level; +import java.util.logging.Logger; + +/** + * An implementation of the subtract service. + */ +public class SubtractServiceImpl implements SubtractService { + + public double subtract(double n1, double n2) { + Logger logger = Logger.getLogger("calculator"); + logger.log(Level.FINEST, "Subtracting " + n1 + " from " + n2); + return n1 - n2; + } + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/contribution-implementation-java-calculator/src/main/resources/Calculator.composite b/sca-java-2.x/tags/2.0-M5.1/samples/contribution-implementation-java-calculator/src/main/resources/Calculator.composite new file mode 100644 index 0000000000..05bea57944 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/contribution-implementation-java-calculator/src/main/resources/Calculator.composite @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/contribution-implementation-java-calculator/src/main/resources/CalculatorClient.composite b/sca-java-2.x/tags/2.0-M5.1/samples/contribution-implementation-java-calculator/src/main/resources/CalculatorClient.composite new file mode 100644 index 0000000000..dfd32761be --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/contribution-implementation-java-calculator/src/main/resources/CalculatorClient.composite @@ -0,0 +1,30 @@ + + + + + + + + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/contribution-implementation-java-calculator/src/main/resources/META-INF/sca-contribution.xml b/sca-java-2.x/tags/2.0-M5.1/samples/contribution-implementation-java-calculator/src/main/resources/META-INF/sca-contribution.xml new file mode 100644 index 0000000000..70aab0e051 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/contribution-implementation-java-calculator/src/main/resources/META-INF/sca-contribution.xml @@ -0,0 +1,24 @@ + + + + + + \ No newline at end of file diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/contribution-implementation-java-calculator/src/test/java/calculator/CalculatorTestCase.java b/sca-java-2.x/tags/2.0-M5.1/samples/contribution-implementation-java-calculator/src/test/java/calculator/CalculatorTestCase.java new file mode 100644 index 0000000000..2e4a700156 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/contribution-implementation-java-calculator/src/test/java/calculator/CalculatorTestCase.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 calculator; + +import static org.junit.Assert.assertEquals; + +import org.junit.Test; + +/** + * This shows how to test the Calculator composition. + */ +public class CalculatorTestCase { + + @Test + public void testCalculator() throws Exception { + AddService add = new AddServiceImpl(); + SubtractService subtract = new SubtractServiceImpl(); + MultiplyService multiply = new MultiplyServiceImpl(); + DivideService divide = new DivideServiceImpl(); + + CalculatorServiceImpl calculator = new CalculatorServiceImpl(); + + calculator.setAddService(add); + calculator.setSubtractService(subtract); + calculator.setMultiplyService(multiply); + calculator.setDivideService(divide); + + assertEquals(calculator.add(3, 2), 5.0, 0); + assertEquals(calculator.subtract(3, 2), 1.0, 0); + assertEquals(calculator.multiply(3, 2), 6.0, 0); + assertEquals(calculator.divide(3, 2), 1.5, 0); + } +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/LICENSE b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/LICENSE new file mode 100644 index 0000000000..6e529a25c4 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/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/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/META-INF/MANIFEST.MF b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/META-INF/MANIFEST.MF new file mode 100644 index 0000000000..82a803e3a6 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/META-INF/MANIFEST.MF @@ -0,0 +1,22 @@ +Manifest-Version: 1.0 +Export-Package: calculator.dosgi.operations;version="1.0.0" +Bundle-Version: 1.0.0 +Bundle-Name: calculator.dosgi.operations +Bundle-Activator: calculator.dosgi.operations.impl.OperationsActivator +Bundle-ManifestVersion: 2 +Import-Package: calculator.dosgi.operations;version="[1.0.0,1.0.0]", + org.oasisopen.sca.annotation;version="2.0.0", + org.osgi.framework, + org.osgi.service.component;resolution:=optional, + org.osgi.service.packageadmin +Bundle-SymbolicName: calculator.dosgi.operations +Bundle-Vendor: The Apache Software Foundation +Bundle-ActivationPolicy: lazy +Eclipse-LazyStart: true +Bundle-License: http://www.apache.org/licenses/LICENSE-2.0.txt +Bundle-DocURL: http://www.apache.org/ +Service-Component-Disabled: OSGI-INF/add-component.xml, + OSGI-INF/subtract-component.xml, + OSGI-INF/multiply-component.xml, + OSGI-INF/divide-component.xml +Bundle-RequiredExecutionEnvironment: J2SE-1.5,JavaSE-1.6 diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/NOTICE b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/NOTICE new file mode 100644 index 0000000000..9ddba06a32 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/NOTICE @@ -0,0 +1,6 @@ +${pom.name} +Copyright (c) 2005 - 2010 The Apache Software Foundation + +This product includes software developed by +The Apache Software Foundation (http://www.apache.org/). + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/OSGI-INF/add-component.xml b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/OSGI-INF/add-component.xml new file mode 100644 index 0000000000..99845257ff --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/OSGI-INF/add-component.xml @@ -0,0 +1,25 @@ + + + + + + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/OSGI-INF/blueprint/operations-module.xml b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/OSGI-INF/blueprint/operations-module.xml new file mode 100644 index 0000000000..f6b5f4690e --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/OSGI-INF/blueprint/operations-module.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/OSGI-INF/divide-component.xml b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/OSGI-INF/divide-component.xml new file mode 100644 index 0000000000..322d4daf2f --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/OSGI-INF/divide-component.xml @@ -0,0 +1,25 @@ + + + + + + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/OSGI-INF/multiply-component.xml b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/OSGI-INF/multiply-component.xml new file mode 100644 index 0000000000..b9ca777bd8 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/OSGI-INF/multiply-component.xml @@ -0,0 +1,25 @@ + + + + + + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/OSGI-INF/sca/bundle.componentType b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/OSGI-INF/sca/bundle.componentType new file mode 100644 index 0000000000..fced5b7840 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/OSGI-INF/sca/bundle.componentType @@ -0,0 +1,54 @@ + + + + + + + + + + 1 + ABC + + + + + + 1 + ABC + + + + + + 1 + ABC + + + + + + 1 + ABC + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/OSGI-INF/sca/bundle.composite b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/OSGI-INF/sca/bundle.composite new file mode 100644 index 0000000000..c7250912b0 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/OSGI-INF/sca/bundle.composite @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/OSGI-INF/subtract-component.xml b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/OSGI-INF/subtract-component.xml new file mode 100644 index 0000000000..1472f5a976 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/OSGI-INF/subtract-component.xml @@ -0,0 +1,25 @@ + + + + + + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/README b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/README new file mode 100644 index 0000000000..57126842a4 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/README @@ -0,0 +1,185 @@ +Distributed OSGi Calculator Sample +================================== +This sample implements a distributed calculator using Distributed OSGi (RFC 119) over SCA. + +The README in the /samples directory provides +general instructions about building and running samples. (where +distribution-unpack-dir is the directory in which you unpacked the tuscany +binary distribution archive). Take a look there first (noting at you read it that this sample +is not a new style sample). + +On Windows, run +java -jar ..\..\modules\osgi-3.5.0-v20090520.jar -configuration ..\..\features\configuration -clean -console + +On *Unix, run +java -jar ../../modules/osgi-3.5.0-v20090520.jar -configuration ../../features/configuration -clean -console + +You should see the osgi console: + +osgi> + +osgi> Jun 22, 2009 1:32:27 PM org.apache.tuscany.sca.extensibility.equinox.EquinoxServiceDiscoveryActivator start +INFO: Equinox-based service discoverer is now configured. + +You can run "ss" command under the osgi> to see the status of the bundles. +osgi> ss + +Then you can install and start the calculator.dosgi bundle: + +osgi> install file:./target/sample-dosgi-calculator-operations.jar +Bundle id is 198 + +osgi> start 198 +Nov 4, 2009 9:51:56 AM calculator.dosgi.operations.impl.OperationsActivator star +t +INFO: Starting calculator.dosgi.operations_1.0.0 [198] +Nov 4, 2009 9:51:56 AM calculator.dosgi.operations.impl.OperationsActivator star +t +INFO: Registering calculator.dosgi.operations.AddService +Nov 4, 2009 9:51:56 AM calculator.dosgi.operations.impl.OperationsActivator star +t +INFO: Registering calculator.dosgi.operations.SubtractService +Nov 4, 2009 9:51:56 AM calculator.dosgi.operations.impl.OperationsActivator star +t +INFO: Registering calculator.dosgi.operations.MultiplyService +Nov 4, 2009 9:51:56 AM calculator.dosgi.operations.impl.OperationsActivator star +t +INFO: Registering calculator.dosgi.operations.DivideService +Nov 4, 2009 9:51:56 AM calculator.dosgi.operations.impl.OperationsActivator getB +undle +INFO: calculator.dosgi.operations.AddService is loaded by bundle: calculator.dos +gi.operations +Nov 4, 2009 9:51:56 AM org.apache.tuscany.sca.node.impl.NodeImpl start +INFO: Starting node: calculator.dosgi.operations domain: tuscany.apache.org +Nov 4, 2009 9:51:56 AM org.apache.tuscany.sca.node.impl.NodeFactoryImpl loadCont +ributions +INFO: Loading contribution: bundleentry://198.fwk8152936/ +Nov 4, 2009 9:52:00 AM org.apache.tuscany.sca.host.rmi.DefaultRMIHost registerSe +rvice +INFO: RMI service registered: rmi://localhost:8085/AddService +Nov 4, 2009 9:52:00 AM org.apache.tuscany.sca.core.assembly.impl.EndpointRegistr +yImpl addEndpoint +INFO: Add endpoint - (@27845948)Endpoint: URI = OperationsComponent#service-bin +ding(AddService/AddService) +Nov 4, 2009 9:52:00 AM org.apache.tuscany.sca.host.rmi.DefaultRMIHost registerSe +rvice +INFO: RMI service registered: rmi://localhost:8085/SubtractService +Nov 4, 2009 9:52:00 AM org.apache.tuscany.sca.core.assembly.impl.EndpointRegistr +yImpl addEndpoint +INFO: Add endpoint - (@10576215)Endpoint: URI = OperationsComponent#service-bin +ding(SubtractService/SubtractService) +Nov 4, 2009 9:52:00 AM org.apache.tuscany.sca.host.rmi.DefaultRMIHost registerSe +rvice +INFO: RMI service registered: rmi://localhost:8085/MultiplyService +Nov 4, 2009 9:52:00 AM org.apache.tuscany.sca.core.assembly.impl.EndpointRegistr +yImpl addEndpoint +INFO: Add endpoint - (@31713234)Endpoint: URI = OperationsComponent#service-bin +ding(MultiplyService/MultiplyService) +Nov 4, 2009 9:52:00 AM org.apache.tuscany.sca.host.rmi.DefaultRMIHost registerSe +rvice +INFO: RMI service registered: rmi://localhost:8085/DivideService +Nov 4, 2009 9:52:00 AM org.apache.tuscany.sca.core.assembly.impl.EndpointRegistr +yImpl addEndpoint +INFO: Add endpoint - (@10202447)Endpoint: URI = OperationsComponent#service-bin +ding(DivideService/DivideService) + +osgi> + +To stop the bundle: + +osgi> stop 198 +Nov 4, 2009 9:53:19 AM org.apache.tuscany.sca.node.impl.NodeImpl stop +INFO: Stopping node: calculator.dosgi.operations +Nov 4, 2009 9:53:19 AM org.apache.tuscany.sca.core.assembly.impl.EndpointRegistr +yImpl endpointRemoved +INFO: Remove endpoint - (@27845948)Endpoint: URI = OperationsComponent#service- +binding(AddService/AddService) +Nov 4, 2009 9:53:19 AM org.apache.tuscany.sca.host.rmi.DefaultRMIHost unregister +Service +INFO: RMI service unregistered: rmi://localhost:8085/AddService +Nov 4, 2009 9:53:19 AM org.apache.tuscany.sca.core.assembly.impl.EndpointRegistr +yImpl endpointRemoved +INFO: Remove endpoint - (@10576215)Endpoint: URI = OperationsComponent#service- +binding(SubtractService/SubtractService) +Nov 4, 2009 9:53:19 AM org.apache.tuscany.sca.host.rmi.DefaultRMIHost unregister +Service +INFO: RMI service unregistered: rmi://localhost:8085/SubtractService +Nov 4, 2009 9:53:19 AM org.apache.tuscany.sca.core.assembly.impl.EndpointRegistr +yImpl endpointRemoved +INFO: Remove endpoint - (@31713234)Endpoint: URI = OperationsComponent#service- +binding(MultiplyService/MultiplyService) +Nov 4, 2009 9:53:19 AM org.apache.tuscany.sca.host.rmi.DefaultRMIHost unregister +Service +INFO: RMI service unregistered: rmi://localhost:8085/MultiplyService +Nov 4, 2009 9:53:19 AM org.apache.tuscany.sca.core.assembly.impl.EndpointRegistr +yImpl endpointRemoved +INFO: Remove endpoint - (@10202447)Endpoint: URI = OperationsComponent#service- +binding(DivideService/DivideService) +Nov 4, 2009 9:53:19 AM org.apache.tuscany.sca.host.rmi.DefaultRMIHost unregister +Service +INFO: RMI service unregistered: rmi://localhost:8085/DivideService +Nov 4, 2009 9:53:19 AM calculator.dosgi.operations.impl.OperationsActivator stop + +INFO: Stopping calculator.dosgi.operations_1.0.0 [198] + +osgi> + +To exit the console, run: +osgi> exit + +Sample Overview +--------------- +The application consists of two OSGi bundles: + * The calculator bundle: It provides the calculator service. The service is implemented by a java class that + consumes other services to perform the “add”, “subtract”, “multiply” and “divide” operations. + * The operations bundle: It provides the add/subtract/multiply/divide services. + (See ../samples/dosgi-calculator-operations) + + +dosgi-calculator-operations/ + src/ + main/ + java/ + calculator/ + dosgi/ + operations/ + AddService.java - Interface for Add + SubtractService.java - Interface for Subtract + MultiplyService.java - Interface for Multiply + DivideService.java - Interface for Divide + impl/ + OperationsActivator.java - OSGi bundle activator + AddServiceImpl.java - Implementation for Add + SubtractServiceImpl.java - Implementation for Subtract + MultiplyServiceImpl.java - Implementation for Multiply + DivideServiceImpl.java - Implementation for Divide + resources/ + META-INF/ + sca-contribution.xml + OSGI-INF/ + sca/ + bundle.componentType - The component type for implementation.osgi of this bundle + bundle.composite - The composite file + test/ + java/ + src/ + calculator/ + dosgi/ + operations/ + test/ + OperationsOSGiNodeTestCase.java - The JUNIT test case that tests this bundle using a RMI client + + META-INF/ + MANIFEST.MF - The OSGi manifest for this bundle + pom.xml - the Maven build file + + + +Building And Running The Test Case Using Maven +------------------------------------------- +With either the binary or source distributions the sample can be built and run +using Maven as follows. + +cd dosgi-calculator-operations +mvn + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/pom.xml b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/pom.xml new file mode 100644 index 0000000000..df36ab1ae4 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/pom.xml @@ -0,0 +1,148 @@ + + + + 4.0.0 + + org.apache.tuscany.sca + tuscany-sca + 2.0-M5.1 + ../../pom.xml + + + sample-dosgi-calculator-operations + Apache Tuscany SCA OSGi Remote Services Caculator Operations Sample + + + + org.apache.tuscany.sca + tuscany-feature-ejava + 2.0-M5.1 + pom + + + + org.apache.tuscany.sca + tuscany-node-launcher-equinox + 2.0-M5.1 + test + + + + org.apache.tuscany.sca + tuscany-node-impl-osgi + 2.0-M5.1 + runtime + + + + org.eclipse.osgi + services + 3.2.0-v20090520-1800 + test + + + + + org.eclipse.equinox + ds + 1.1.0-v20090601 + test + + + + org.eclipse.equinox + util + 1.0.100-v20090520-1800 + test + + + + junit + junit + 4.8.1 + test + + + + + + ${artifactId} + + + maven-eclipse-plugin + 2.5.1 + + + org.eclipse.pde.ManifestBuilder + org.eclipse.jdt.core.javabuilder + + + org.eclipse.jdt.core.javanature + org.eclipse.pde.PluginNature + + + org.eclipse.jdt.launching.JRE_CONTAINER + + + + + + + maven-jar-plugin + + + ${basedir}/META-INF/MANIFEST.MF + + + + + + org.apache.tuscany.maven.plugins + maven-osgi-junit-plugin + 1.0 + + + org.apache.tuscany.sca + tuscany-node-launcher-equinox + ${pom.version} + + + + + osgi-test + test + + test + + + + + osgi.configuration.area + ${project.build.directory}/equinox + + + + + + + + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/src/main/java/calculator/dosgi/operations/AddService.java b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/src/main/java/calculator/dosgi/operations/AddService.java new file mode 100644 index 0000000000..971500782f --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/src/main/java/calculator/dosgi/operations/AddService.java @@ -0,0 +1,31 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT 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.dosgi.operations; + +import org.oasisopen.sca.annotation.Remotable; + +/** + * The interface for the add service + */ +@Remotable +public interface AddService { + + double add(double n1, double n2); + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/src/main/java/calculator/dosgi/operations/DivideService.java b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/src/main/java/calculator/dosgi/operations/DivideService.java new file mode 100644 index 0000000000..49b8a1c0bf --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/src/main/java/calculator/dosgi/operations/DivideService.java @@ -0,0 +1,31 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT 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.dosgi.operations; + +import org.oasisopen.sca.annotation.Remotable; + +/** + * The interface for the divide service + */ +@Remotable +public interface DivideService { + + double divide(double n1, double n2); + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/src/main/java/calculator/dosgi/operations/MultiplyService.java b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/src/main/java/calculator/dosgi/operations/MultiplyService.java new file mode 100644 index 0000000000..f4e59d12ea --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/src/main/java/calculator/dosgi/operations/MultiplyService.java @@ -0,0 +1,31 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT 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.dosgi.operations; + +import org.oasisopen.sca.annotation.Remotable; + +/** + * The interface for the multiply service + */ +@Remotable +public interface MultiplyService { + + double multiply(double n1, double n2); + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/src/main/java/calculator/dosgi/operations/SubtractService.java b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/src/main/java/calculator/dosgi/operations/SubtractService.java new file mode 100644 index 0000000000..bfb9b820f7 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/src/main/java/calculator/dosgi/operations/SubtractService.java @@ -0,0 +1,31 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT 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.dosgi.operations; + +import org.oasisopen.sca.annotation.Remotable; + +/** + * The interface for the subtract service + */ +@Remotable +public interface SubtractService { + + double subtract(double n1, double n2); + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/src/main/java/calculator/dosgi/operations/impl/AddServiceImpl.java b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/src/main/java/calculator/dosgi/operations/impl/AddServiceImpl.java new file mode 100644 index 0000000000..66b2977241 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/src/main/java/calculator/dosgi/operations/impl/AddServiceImpl.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 calculator.dosgi.operations.impl; + +import java.util.logging.Level; +import java.util.logging.Logger; + +import calculator.dosgi.operations.AddService; + +/** + * An implementation of the Add service + */ +public class AddServiceImpl implements AddService { + + public double add(double n1, double n2) { + Logger logger = Logger.getLogger("calculator"); + logger.log(Level.INFO, "Adding " + n1 + " and " + n2); + return n1 + n2; + } + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/src/main/java/calculator/dosgi/operations/impl/DivideServiceImpl.java b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/src/main/java/calculator/dosgi/operations/impl/DivideServiceImpl.java new file mode 100644 index 0000000000..a3c21b2b96 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/src/main/java/calculator/dosgi/operations/impl/DivideServiceImpl.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 calculator.dosgi.operations.impl; + +import java.util.logging.Level; +import java.util.logging.Logger; + +import calculator.dosgi.operations.DivideService; + +/** + * An implementation of the Divide service. + */ +public class DivideServiceImpl implements DivideService { + + public double divide(double n1, double n2) { + Logger logger = Logger.getLogger("calculator"); + logger.log(Level.INFO, "Dividing " + n1 + " with " + n2); + return n1 / n2; + } + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/src/main/java/calculator/dosgi/operations/impl/MultiplyServiceImpl.java b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/src/main/java/calculator/dosgi/operations/impl/MultiplyServiceImpl.java new file mode 100644 index 0000000000..7922d2d392 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/src/main/java/calculator/dosgi/operations/impl/MultiplyServiceImpl.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 calculator.dosgi.operations.impl; + +import java.util.logging.Level; +import java.util.logging.Logger; + +import calculator.dosgi.operations.MultiplyService; + +/** + * An implementation of the Multiply service. + */ +public class MultiplyServiceImpl implements MultiplyService { + + public double multiply(double n1, double n2) { + Logger logger = Logger.getLogger("calculator"); + logger.log(Level.INFO, "Multiplying " + n1 + " with " + n2); + return n1 * n2; + } + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/src/main/java/calculator/dosgi/operations/impl/OperationsActivator.java b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/src/main/java/calculator/dosgi/operations/impl/OperationsActivator.java new file mode 100644 index 0000000000..da2ce9063a --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/src/main/java/calculator/dosgi/operations/impl/OperationsActivator.java @@ -0,0 +1,88 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT 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.dosgi.operations.impl; + +import java.util.Dictionary; +import java.util.Hashtable; +import java.util.logging.Logger; + +import org.osgi.framework.Bundle; +import org.osgi.framework.BundleActivator; +import org.osgi.framework.BundleContext; +import org.osgi.framework.ServiceReference; +import org.osgi.service.packageadmin.PackageAdmin; + +import calculator.dosgi.operations.AddService; +import calculator.dosgi.operations.DivideService; +import calculator.dosgi.operations.MultiplyService; +import calculator.dosgi.operations.SubtractService; + +/** + * + */ +public class OperationsActivator implements BundleActivator { + private Logger logger = Logger.getLogger(OperationsActivator.class.getName()); + + public void start(BundleContext context) throws Exception { + logger.info("Starting " + context.getBundle()); + + Dictionary props = new Hashtable(); + + logger.info("Registering " + AddService.class.getName()); + props.put("sca.service", "AddComponent#service-name(Add)"); + context.registerService(AddService.class.getName(), new AddServiceImpl(), props); + + logger.info("Registering " + SubtractService.class.getName()); + props.put("sca.service", "SubtractComponent#service-name(Subtract)"); + context.registerService(SubtractService.class.getName(), new SubtractServiceImpl(), props); + + logger.info("Registering " + MultiplyService.class.getName()); + props.put("sca.service", "MultiplyComponent#service-name(Multiply)"); + context.registerService(MultiplyService.class.getName(), new MultiplyServiceImpl(), props); + + logger.info("Registering " + DivideService.class.getName()); + props.put("sca.service", "DivideComponent#service-name(Divide)"); + context.registerService(DivideService.class.getName(), new DivideServiceImpl(), props); + + getBundle(context, AddService.class); + } + + public void stop(BundleContext context) throws Exception { + logger.info("Stopping " + context.getBundle()); + // Registered services will be automatically unregistered + } + + private Bundle getBundle(BundleContext bundleContext, Class cls) { + PackageAdmin packageAdmin = null; + // PackageAdmin is used to resolve bundles + ServiceReference ref = bundleContext.getServiceReference("org.osgi.service.packageadmin.PackageAdmin"); + if (ref != null) { + packageAdmin = (PackageAdmin)bundleContext.getService(ref); + Bundle bundle = packageAdmin.getBundle(cls); + if (bundle != null) { + logger.info(cls.getName() + " is loaded by bundle: " + bundle.getSymbolicName()); + } + bundleContext.ungetService(ref); + return bundle; + } + return null; + } + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/src/main/java/calculator/dosgi/operations/impl/SubtractServiceImpl.java b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/src/main/java/calculator/dosgi/operations/impl/SubtractServiceImpl.java new file mode 100644 index 0000000000..4bbe83b14f --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/src/main/java/calculator/dosgi/operations/impl/SubtractServiceImpl.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 calculator.dosgi.operations.impl; + +import java.util.logging.Level; +import java.util.logging.Logger; + +import calculator.dosgi.operations.SubtractService; + +/** + * An implementation of the subtract service. + */ +public class SubtractServiceImpl implements SubtractService { + + public double subtract(double n1, double n2) { + Logger logger = Logger.getLogger("calculator"); + logger.log(Level.INFO, "Subtracting " + n1 + " from " + n2); + return n1 - n2; + } + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/src/main/resources/META-INF/sca-contribution.xml b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/src/main/resources/META-INF/sca-contribution.xml new file mode 100644 index 0000000000..d24999ab3e --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/src/main/resources/META-INF/sca-contribution.xml @@ -0,0 +1,23 @@ + + + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/src/test/java/calculator/dosgi/operations/test/OSGiTestUtils.java b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/src/test/java/calculator/dosgi/operations/test/OSGiTestUtils.java new file mode 100644 index 0000000000..cd92989da1 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/src/test/java/calculator/dosgi/operations/test/OSGiTestUtils.java @@ -0,0 +1,105 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT 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.dosgi.operations.test; + +import java.lang.reflect.InvocationHandler; +import java.lang.reflect.Method; +import java.lang.reflect.Proxy; + +import org.osgi.framework.Bundle; + +/** + * + * Utility class to create OSGi bundles + * + * @version $Rev$ $Date$ + */ +public class OSGiTestUtils { + private static class InvocationHandlerImpl implements InvocationHandler { + private Object instance; + + public InvocationHandlerImpl(Object instance) { + super(); + this.instance = instance; + } + + public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { + Method m = instance.getClass().getMethod(method.getName(), method.getParameterTypes()); + return m.invoke(instance, args); + } + + } + + /** + * Returns a string representation of the given bundle. + * + * @param b + * @param verbose + * @return + */ + public static String bundleStatus(Bundle bundle, boolean verbose) { + StringBuffer sb = new StringBuffer(); + sb.append(bundle.getBundleId()).append(" ").append(bundle.getSymbolicName()); + int s = bundle.getState(); + if ((s & Bundle.UNINSTALLED) != 0) { + sb.append(" UNINSTALLED"); + } + if ((s & Bundle.INSTALLED) != 0) { + sb.append(" INSTALLED"); + } + if ((s & Bundle.RESOLVED) != 0) { + sb.append(" RESOLVED"); + } + if ((s & Bundle.STARTING) != 0) { + sb.append(" STARTING"); + } + if ((s & Bundle.STOPPING) != 0) { + sb.append(" STOPPING"); + } + if ((s & Bundle.ACTIVE) != 0) { + sb.append(" ACTIVE"); + } + + if (verbose) { + sb.append(" ").append(bundle.getLocation()); + sb.append(" ").append(bundle.getHeaders()); + } + return sb.toString(); + } + + /** + * A utility to cast the object to the given interface. If the class for the object + * is loaded by a different classloader, a proxy will be created. + * + * @param + * @param obj + * @param cls + * @return + */ + public static T cast(Object obj, Class cls) { + if (cls.isInstance(obj)) { + return cls.cast(obj); + } else { + return cls.cast(Proxy.newProxyInstance(cls.getClassLoader(), + new Class[] {cls}, + new InvocationHandlerImpl(obj))); + } + } +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/src/test/java/calculator/dosgi/operations/test/OperationsNode.java b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/src/test/java/calculator/dosgi/operations/test/OperationsNode.java new file mode 100644 index 0000000000..02007c385c --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/src/test/java/calculator/dosgi/operations/test/OperationsNode.java @@ -0,0 +1,43 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package calculator.dosgi.operations.test; + +import org.apache.tuscany.sca.node.equinox.launcher.NodeLauncher; + +/** + * + */ +public class OperationsNode { + + /** + * @param args + */ + public static void main(String[] args) { + if (args.length == 0) { + args = new String[] {"-bundles"}; + } + try { + NodeLauncher.main(args); + } catch (Exception e) { + e.printStackTrace(); + } + } + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/src/test/java/calculator/dosgi/operations/test/OperationsOSGiNodeTestCase.java b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/src/test/java/calculator/dosgi/operations/test/OperationsOSGiNodeTestCase.java new file mode 100644 index 0000000000..49c5aab041 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator-operations/src/test/java/calculator/dosgi/operations/test/OperationsOSGiNodeTestCase.java @@ -0,0 +1,104 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT 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.dosgi.operations.test; + +import static calculator.dosgi.operations.test.OSGiTestUtils.bundleStatus; + +import java.rmi.registry.LocateRegistry; +import java.rmi.registry.Registry; + +import org.apache.tuscany.sca.node.equinox.launcher.EquinoxHost; +import org.junit.AfterClass; +import org.junit.Assert; +import org.junit.BeforeClass; +import org.junit.Test; +import org.osgi.framework.Bundle; +import org.osgi.framework.BundleContext; +import org.osgi.framework.Constants; + +import calculator.dosgi.operations.AddService; + +/** + * + */ +public class OperationsOSGiNodeTestCase { + private static EquinoxHost host; + private static BundleContext context; + private static Bundle operationsBundle; + + /** + * @throws java.lang.Exception + */ + @BeforeClass + public static void setUpBeforeClass() throws Exception { + try { + host = new EquinoxHost(); + context = host.start(); + + for (Bundle b : context.getBundles()) { + if (b.getSymbolicName().equals("org.eclipse.equinox.ds") || b.getSymbolicName() + .startsWith("org.apache.tuscany.sca.")) { + try { + if (b.getHeaders().get(Constants.FRAGMENT_HOST) == null) { + // Start the non-fragment bundle + b.start(); + } + } catch (Exception e) { + e.printStackTrace(); + } + System.out.println(bundleStatus(b, false)); + } + if ("calculator.dosgi.operations".equals(b.getSymbolicName())) { + operationsBundle = b; + } + } + + if (operationsBundle != null) { + operationsBundle.start(); + System.out.println(bundleStatus(operationsBundle, false)); + } + + } catch (Exception e) { + e.printStackTrace(); + throw e; + } + } + + @Test + public void testOSGi() throws Exception { + Registry registry = LocateRegistry.getRegistry(8085); + Object add = registry.lookup("AddService"); + AddService addService = OSGiTestUtils.cast(add, AddService.class); + double sum = addService.add(1.0, 2.0); + Assert.assertEquals(3.0, sum, 0.0); + } + + /** + * @throws java.lang.Exception + */ + @AfterClass + public static void tearDownAfterClass() throws Exception { + if (host != null) { + host.stop(); + context = null; + } + } + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/LICENSE b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/LICENSE new file mode 100644 index 0000000000..6e529a25c4 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/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/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/META-INF/MANIFEST.MF b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/META-INF/MANIFEST.MF new file mode 100644 index 0000000000..542b53b085 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/META-INF/MANIFEST.MF @@ -0,0 +1,20 @@ +Manifest-Version: 1.0 +Export-Package: calculator.dosgi;version="1.0.0", + calculator.dosgi.operations;version="1.0.0" +Bundle-Version: 1.0.0 +Bundle-Name: calculator.dosgi +Bundle-Activator: calculator.dosgi.impl.CalculatorActivator +Bundle-ManifestVersion: 2 +Import-Package: org.oasisopen.sca.annotation;version="2.0.0", + org.osgi.framework, + org.osgi.service.component;resolution:=optional, + org.osgi.service.packageadmin, + org.osgi.util.tracker +Bundle-SymbolicName: calculator.dosgi +Bundle-Vendor: The Apache Software Foundation +Bundle-ActivationPolicy: lazy +Eclipse-LazyStart: true +Bundle-License: http://www.apache.org/licenses/LICENSE-2.0.txt +Bundle-DocURL: http://www.apache.org/ +Service-Component-Disabled: OSGI-INF/calculator-component.xml +Bundle-RequiredExecutionEnvironment: J2SE-1.5,JavaSE-1.6 diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/NOTICE b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/NOTICE new file mode 100644 index 0000000000..9ddba06a32 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/NOTICE @@ -0,0 +1,6 @@ +${pom.name} +Copyright (c) 2005 - 2010 The Apache Software Foundation + +This product includes software developed by +The Apache Software Foundation (http://www.apache.org/). + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/OSGI-INF/blueprint/calculator-module.xml b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/OSGI-INF/blueprint/calculator-module.xml new file mode 100644 index 0000000000..fd834e12ef --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/OSGI-INF/blueprint/calculator-module.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/OSGI-INF/calculator-component.xml b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/OSGI-INF/calculator-component.xml new file mode 100644 index 0000000000..5daaa59aae --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/OSGI-INF/calculator-component.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/OSGI-INF/sca/bundle.componentType b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/OSGI-INF/sca/bundle.componentType new file mode 100644 index 0000000000..1dff21ab6b --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/OSGI-INF/sca/bundle.componentType @@ -0,0 +1,64 @@ + + + + + + + + + + 1 + ABC + + + + + + + + 1 + ABC + + + + + + 1 + ABC + + + + + + 1 + ABC + + + + + + 1 + ABC + + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/OSGI-INF/sca/bundle.composite b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/OSGI-INF/sca/bundle.composite new file mode 100644 index 0000000000..c64e999fc6 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/OSGI-INF/sca/bundle.composite @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/README b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/README new file mode 100644 index 0000000000..e2cf7cd522 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/README @@ -0,0 +1,143 @@ +Distributed OSGi Calculator Sample +================================== +This sample implements a distributed calculator using Distributed OSGi (RFC 119) over SCA. + +The README in the /samples directory provides +general instructions about building and running samples. (where +distribution-unpack-dir is the directory in which you unpacked the tuscany +binary distribution archive). Take a look there first (noting at you read it that this sample +is not a new style sample). + + +On Windows, run +java -jar ..\..\modules\osgi-3.5.0-v20090520.jar -configuration ..\..\features\configuration -clean -console + +On *Unix, run +java -jar ../../modules/osgi-3.5.0-v20090520.jar -configuration ../../features/configuration -clean -console + +You should see the osgi console: + +osgi> + +You can run "ss" command under the osgi> to see the status of the bundles. +osgi> ss + +Then you can install and start the calculator.dosgi bundle: + +osgi> install file:./target/sample-dosgi-calculator.jar +Bundle id is 198 + +osgi> start 198 +Nov 4, 2009 9:40:00 AM calculator.dosgi.impl.CalculatorActivator start +INFO: Starting calculator.dosgi_1.0.0 [198] +Nov 4, 2009 9:40:01 AM calculator.dosgi.impl.CalculatorActivator start +INFO: Registering calculator.dosgi.CalculatorService +Nov 4, 2009 9:40:01 AM calculator.dosgi.impl.CalculatorActivator getBundle +INFO: calculator.dosgi.operations.AddService is loaded by bundle: calculator.dos +gi +Nov 4, 2009 9:40:01 AM org.apache.tuscany.sca.node.impl.NodeImpl start +INFO: Starting node: calculator.dosgi domain: tuscany.apache.org +Nov 4, 2009 9:40:01 AM org.apache.tuscany.sca.node.impl.NodeFactoryImpl loadCont +ributions +INFO: Loading contribution: bundleentry://198.fwk15020296/ +log4j:WARN No appenders could be found for logger (org.apache.axiom.om.util.StAX +Utils). +log4j:WARN Please initialize the log4j system properly. +Nov 4, 2009 9:40:47 AM org.mortbay.log.Slf4jLog info +INFO: Logging to org.slf4j.impl.JDK14LoggerAdapter(org.mortbay.log) via org.mort +bay.log.Slf4jLog +Nov 4, 2009 9:40:48 AM org.apache.tuscany.sca.http.jetty.JettyLogger info +INFO: jetty-6.1.x +Nov 4, 2009 9:40:48 AM org.apache.tuscany.sca.http.jetty.JettyLogger info +INFO: Started SelectChannelConnector@0.0.0.0:8086 +Nov 4, 2009 9:40:48 AM org.apache.tuscany.sca.http.jetty.JettyServer addServletM +apping +INFO: Added Servlet mapping: http://rfengt61p:8086/CalculatorService +Nov 4, 2009 9:40:48 AM org.apache.tuscany.sca.core.assembly.impl.EndpointRegistr +yImpl addEndpoint +INFO: Add endpoint - (@1277930)Endpoint: URI = CalculatorComponent#service-bind +ing(CalculatorService/CalculatorService) +osgi> + +You can point your browser to http://localhost:8086/CalculatorService?wsdl to see +the WSDL. + +You can also use the WebService Explorer from Eclipse WTP to test the Web Service. + +To stop the bundle: + +osgi> stop 198 +Nov 4, 2009 9:41:22 AM org.apache.tuscany.sca.node.impl.NodeImpl stop +INFO: Stopping node: calculator.dosgi +Nov 4, 2009 9:41:22 AM org.apache.tuscany.sca.core.assembly.impl.EndpointRegistr +yImpl endpointRemoved +INFO: Remove endpoint - (@1277930)Endpoint: URI = CalculatorComponent#service-b +inding(CalculatorService/CalculatorService) +Nov 4, 2009 9:41:22 AM org.apache.tuscany.sca.http.jetty.JettyServer removeServl +etMapping +INFO: Removed Servlet mapping: /CalculatorService +Nov 4, 2009 9:41:22 AM calculator.dosgi.impl.CalculatorActivator stop +INFO: Stopping calculator.dosgi_1.0.0 [198] + +To exit the console, run: +osgi> exit + +Sample Overview +--------------- +The application consists of two OSGi bundles: + * The calculator bundle: It provides the calculator service. The service is implemented by a java class that + consumes other services to perform the “add”, “subtract”, “multiply” and “divide” operations. + * The operations bundle: It provides the add/subtract/multiply/divide services. + (See ../samples/dosgi-calculator-operations) + + +dosgi-calculator/ + src/ + main/ + java/ + calculator/ + dosgi/ + CalculatorService.java - The interface for Calculator service + impl/ + CalculatorActivator.java - OSGi bundle activator for Calculator bundle + CalculatorServiceDSImpl.java - OSGi declarative service based implementation + CalculatorServiceImpl.java - Basic OSGi implementation + operations/ + AddService.java - Interface for Add + SubtractService.java - Interface for Subtract + MultiplyService.java - Interface for Multiply + DivideService.java - Interface for Divide + rmi/ + OperationsRemote.java - RMI remote interface for operations + OperationsRMIServer_Stub.java - RMI stub + OperationsRMIServer.java - RMI server implementation of the operations + resources/ + META-INF/ + sca-contribution.xml + OSGI-INF/ + sca/ + bundle.componentType - The component type for implementation.osgi of this bundle + bundle.composite - The composite file + test/ + java/ + src/ + calculator/ + dosgi/ + test/ + CalculatorOSGiNodeTestCase.java - The JUNIT test case that tests this bundle against a RMI service + + META-INF/ + MANIFEST.MF - The OSGi manifest for this bundle + dosig-calculator.png - a pictorial representation of the sample + pom.xml - the Maven build file + + + +Building And Running The Test Case Using Maven +------------------------------------------- +With either the binary or source distributions the sample can be built and run +using Maven as follows. + +cd dosgi-calculator +mvn + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/dosgi-calculator.png b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/dosgi-calculator.png new file mode 100644 index 0000000000..805baa54d2 Binary files /dev/null and b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/dosgi-calculator.png differ diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/pom.xml b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/pom.xml new file mode 100644 index 0000000000..c878465a26 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/pom.xml @@ -0,0 +1,153 @@ + + + + 4.0.0 + + org.apache.tuscany.sca + tuscany-sca + 2.0-M5.1 + ../../pom.xml + + + sample-dosgi-calculator + Apache Tuscany SCA OSGi Remote Services Calculator Sample + + + + org.apache.tuscany.sca + tuscany-feature-ejava + 2.0-M5.1 + pom + + + org.apache.tuscany.sca + tuscany-feature-webservice + 2.0-M5.1 + pom + runtime + + + org.apache.tuscany.sca + tuscany-node-launcher-equinox + 2.0-M5.1 + test + + + + org.apache.tuscany.sca + tuscany-node-impl-osgi + 2.0-M5.1 + runtime + + + + org.eclipse.osgi + services + 3.2.0-v20090520-1800 + + + + junit + junit + 4.8.1 + test + + + + + org.eclipse.equinox + ds + 1.1.0-v20090601 + test + + + + org.eclipse.equinox + util + 1.0.100-v20090520-1800 + test + + + + + + ${artifactId} + + + maven-eclipse-plugin + 2.5.1 + + + org.eclipse.pde.ManifestBuilder + org.eclipse.jdt.core.javabuilder + + + org.eclipse.jdt.core.javanature + org.eclipse.pde.PluginNature + + + org.eclipse.jdt.launching.JRE_CONTAINER + + + + + + + maven-jar-plugin + + + ${basedir}/META-INF/MANIFEST.MF + + + + + + org.apache.tuscany.maven.plugins + maven-osgi-junit-plugin + 1.0 + + + org.apache.tuscany.sca + tuscany-node-launcher-equinox + ${pom.version} + + + + + osgi-test + test + + test + + + + + osgi.configuration.area + ${project.build.directory}/equinox + + + + + + + + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/src/main/java/calculator/dosgi/CalculatorService.java b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/src/main/java/calculator/dosgi/CalculatorService.java new file mode 100644 index 0000000000..cc562b7c2f --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/src/main/java/calculator/dosgi/CalculatorService.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 calculator.dosgi; + +import org.oasisopen.sca.annotation.Remotable; + +/** + * The Calculator service interface. + */ +@Remotable +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/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/src/main/java/calculator/dosgi/impl/CalculatorActivator.java b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/src/main/java/calculator/dosgi/impl/CalculatorActivator.java new file mode 100644 index 0000000000..6b42645f69 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/src/main/java/calculator/dosgi/impl/CalculatorActivator.java @@ -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. + */ + +package calculator.dosgi.impl; + +import java.util.Dictionary; +import java.util.Hashtable; +import java.util.logging.Logger; + +import org.osgi.framework.Bundle; +import org.osgi.framework.BundleActivator; +import org.osgi.framework.BundleContext; +import org.osgi.framework.ServiceReference; +import org.osgi.service.packageadmin.PackageAdmin; + +import calculator.dosgi.CalculatorService; +import calculator.dosgi.operations.AddService; + +/** + * + */ +public class CalculatorActivator implements BundleActivator { + private Logger logger = Logger.getLogger(CalculatorActivator.class.getName()); + + private Bundle getBundle(BundleContext bundleContext, Class cls) { + PackageAdmin packageAdmin = null; + // PackageAdmin is used to resolve bundles + ServiceReference ref = bundleContext.getServiceReference("org.osgi.service.packageadmin.PackageAdmin"); + if (ref != null) { + packageAdmin = (PackageAdmin)bundleContext.getService(ref); + Bundle bundle = packageAdmin.getBundle(cls); + if (bundle != null) { + logger.info(cls.getName() + " is loaded by bundle: " + bundle.getSymbolicName()); + } + bundleContext.ungetService(ref); + return bundle; + } + return null; + } + + public void start(BundleContext context) throws Exception { + logger.info("Starting " + context.getBundle()); + Dictionary props = new Hashtable(); + props.put("sca.service", "CalculatorComponent#service-name(Calculator)"); + props.put("calculator", "Calculator"); + + logger.info("Registering " + CalculatorService.class.getName()); + CalculatorService calculator = new CalculatorServiceImpl(context); + context.registerService(CalculatorService.class.getName(), calculator, props); + + getBundle(context, AddService.class); + + } + + public void stop(BundleContext context) throws Exception { + logger.info("Stopping " + context.getBundle()); + // Registered services will be automatically unregistered + } + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/src/main/java/calculator/dosgi/impl/CalculatorServiceDSImpl.java b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/src/main/java/calculator/dosgi/impl/CalculatorServiceDSImpl.java new file mode 100644 index 0000000000..5f9db16ca9 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/src/main/java/calculator/dosgi/impl/CalculatorServiceDSImpl.java @@ -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. + */ +package calculator.dosgi.impl; + +import org.osgi.service.component.ComponentContext; + +import calculator.dosgi.CalculatorService; +import calculator.dosgi.operations.AddService; +import calculator.dosgi.operations.DivideService; +import calculator.dosgi.operations.MultiplyService; +import calculator.dosgi.operations.SubtractService; + +/** + * An implementation of the Calculator service. + */ +public class CalculatorServiceDSImpl implements CalculatorService { + private AddService addService; + private SubtractService subtractService; + private MultiplyService multiplyService; + private DivideService divideService; + + public CalculatorServiceDSImpl() { + super(); + System.out.println("CalculatorServiceDSImpl()"); + } + + protected void activate(ComponentContext context) { + System.out.println("Activating " + context); + } + + protected void deactivate(ComponentContext context) { + System.out.println("Deactivating " + context); + } + + /* + * The following setters can be used for DS injection + */ + public void setAddService(AddService addService) { + System.out.println("setAddService()"); + this.addService = addService; + } + + public void setSubtractService(SubtractService subtractService) { + this.subtractService = subtractService; + } + + public void setDivideService(DivideService divideService) { + this.divideService = divideService; + } + + public void setMultiplyService(MultiplyService multiplyService) { + this.multiplyService = multiplyService; + } + + /* + * The following setters can be used for DS injection + */ + public void unsetAddService(AddService addService) { + System.out.println("unsetAddService()"); + this.addService = null; + } + + public void unsetSubtractService(SubtractService subtractService) { + this.subtractService = null; + } + + public void unsetDivideService(DivideService divideService) { + this.divideService = null; + } + + public void unsetMultiplyService(MultiplyService multiplyService) { + this.multiplyService = null; + } + private T getService(Class cls) { + for (Object s : new Object[] {addService, subtractService, multiplyService, divideService}) { + if (cls.isInstance(s)) { + return cls.cast(s); + } + } + throw new IllegalStateException(cls.getSimpleName() + " is not available"); + } + + public double add(double n1, double n2) { + return getService(AddService.class).add(n1, n2); + } + + public double subtract(double n1, double n2) { + return getService(SubtractService.class).subtract(n1, n2); + } + + public double multiply(double n1, double n2) { + return getService(MultiplyService.class).multiply(n1, n2); + } + + public double divide(double n1, double n2) { + return getService(DivideService.class).divide(n1, n2); + } +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/src/main/java/calculator/dosgi/impl/CalculatorServiceImpl.java b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/src/main/java/calculator/dosgi/impl/CalculatorServiceImpl.java new file mode 100644 index 0000000000..a9ea37585a --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/src/main/java/calculator/dosgi/impl/CalculatorServiceImpl.java @@ -0,0 +1,105 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT 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.dosgi.impl; + +import static org.osgi.framework.Constants.OBJECTCLASS; + +import org.osgi.framework.BundleContext; +import org.osgi.framework.Filter; +import org.osgi.framework.InvalidSyntaxException; +import org.osgi.util.tracker.ServiceTracker; + +import calculator.dosgi.CalculatorService; +import calculator.dosgi.operations.AddService; +import calculator.dosgi.operations.DivideService; +import calculator.dosgi.operations.MultiplyService; +import calculator.dosgi.operations.SubtractService; + +/** + * An implementation of the Calculator service. + */ +public class CalculatorServiceImpl implements CalculatorService { + private ServiceTracker remoteServices; + private ServiceTracker localServices; + + public CalculatorServiceImpl() { + super(); + } + + public CalculatorServiceImpl(BundleContext context) { + super(); + Filter remoteFilter = null, localFilter = null; + try { + remoteFilter = + context.createFilter("(&(" + OBJECTCLASS + "=calculator.dosgi.operations.*) (service.imported=*))"); + localFilter = + context.createFilter("(&(" + OBJECTCLASS + "=calculator.dosgi.operations.*) (!(service.imported=*)))"); + } catch (InvalidSyntaxException e) { + e.printStackTrace(); + } + this.remoteServices = new ServiceTracker(context, remoteFilter, null); + remoteServices.open(); + this.localServices = new ServiceTracker(context, localFilter, null); + localServices.open(); + } + + private T getService(Class cls) { + try { + // Wait for 10 seconds until the remote services are imported + remoteServices.waitForService(10000); + } catch (InterruptedException e) { + throw new IllegalStateException(cls.getSimpleName() + " is not available"); + } + Object[] remoteObjects = remoteServices.getServices(); + if (remoteObjects != null) { + for (Object s : remoteObjects) { + if (cls.isInstance(s)) { + System.out.println("Remote service: " + s); + return cls.cast(s); + } + } + } + Object[] localObjects = localServices.getServices(); + if (localObjects != null) { + for (Object s : localObjects) { + if (cls.isInstance(s)) { + System.out.println("Local service: " + s); + return cls.cast(s); + } + } + } + throw new IllegalStateException(cls.getSimpleName() + " is not available"); + } + + public double add(double n1, double n2) { + return getService(AddService.class).add(n1, n2); + } + + public double subtract(double n1, double n2) { + return getService(SubtractService.class).subtract(n1, n2); + } + + public double multiply(double n1, double n2) { + return getService(MultiplyService.class).multiply(n1, n2); + } + + public double divide(double n1, double n2) { + return getService(DivideService.class).divide(n1, n2); + } +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/src/main/java/calculator/dosgi/operations/AddService.java b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/src/main/java/calculator/dosgi/operations/AddService.java new file mode 100644 index 0000000000..971500782f --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/src/main/java/calculator/dosgi/operations/AddService.java @@ -0,0 +1,31 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT 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.dosgi.operations; + +import org.oasisopen.sca.annotation.Remotable; + +/** + * The interface for the add service + */ +@Remotable +public interface AddService { + + double add(double n1, double n2); + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/src/main/java/calculator/dosgi/operations/DivideService.java b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/src/main/java/calculator/dosgi/operations/DivideService.java new file mode 100644 index 0000000000..49b8a1c0bf --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/src/main/java/calculator/dosgi/operations/DivideService.java @@ -0,0 +1,31 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT 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.dosgi.operations; + +import org.oasisopen.sca.annotation.Remotable; + +/** + * The interface for the divide service + */ +@Remotable +public interface DivideService { + + double divide(double n1, double n2); + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/src/main/java/calculator/dosgi/operations/MultiplyService.java b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/src/main/java/calculator/dosgi/operations/MultiplyService.java new file mode 100644 index 0000000000..f4e59d12ea --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/src/main/java/calculator/dosgi/operations/MultiplyService.java @@ -0,0 +1,31 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT 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.dosgi.operations; + +import org.oasisopen.sca.annotation.Remotable; + +/** + * The interface for the multiply service + */ +@Remotable +public interface MultiplyService { + + double multiply(double n1, double n2); + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/src/main/java/calculator/dosgi/operations/SubtractService.java b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/src/main/java/calculator/dosgi/operations/SubtractService.java new file mode 100644 index 0000000000..bfb9b820f7 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/src/main/java/calculator/dosgi/operations/SubtractService.java @@ -0,0 +1,31 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT 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.dosgi.operations; + +import org.oasisopen.sca.annotation.Remotable; + +/** + * The interface for the subtract service + */ +@Remotable +public interface SubtractService { + + double subtract(double n1, double n2); + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/src/main/java/calculator/rmi/OperationsRMIServer.java b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/src/main/java/calculator/rmi/OperationsRMIServer.java new file mode 100644 index 0000000000..a4fc52694e --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/src/main/java/calculator/rmi/OperationsRMIServer.java @@ -0,0 +1,93 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT 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.rmi; + +import java.io.Serializable; +import java.rmi.Remote; +import java.rmi.RemoteException; +import java.rmi.registry.LocateRegistry; +import java.rmi.registry.Registry; +import java.rmi.server.UnicastRemoteObject; + +/** + * + */ +public class OperationsRMIServer implements OperationsRemote, Serializable { + + private static final long serialVersionUID = 6081008315263103012L; + private transient Registry registry; + + public OperationsRMIServer() throws RemoteException { + super(); + } + + public double add(double n1, double n2) { + return n1 + n2; + } + + public double subtract(double n1, double n2) { + return n1 - n2; + } + + public double divide(double n1, double n2) { + return n1 / n2; + } + + public double multiply(double n1, double n2) { + return n1 * n2; + } + + public void start() throws RemoteException { + Thread thread = new Thread() { + public void run() { + try { + System.out.println("Starting the RMI server for calculator operations..."); + Remote stub = UnicastRemoteObject.exportObject(OperationsRMIServer.this); + registry = LocateRegistry.createRegistry(8085); + registry.bind("AddService", stub); + registry.bind("SubtractService", stub); + registry.bind("MultiplyService", stub); + registry.bind("DivideService", stub); + System.out.println("RMI server for calculator operations is now started."); + } catch (Exception e) { + e.printStackTrace(); + } + } + }; + thread.start(); + } + + public void stop() { + if (registry != null) { + try { + registry.unbind("AddService"); + registry.unbind("SubtractService"); + registry.unbind("MultiplyService"); + registry.unbind("DivideService"); + UnicastRemoteObject.unexportObject(this, false); + UnicastRemoteObject.unexportObject(registry, false); + registry = null; + } catch (Exception e) { + e.printStackTrace(); + } + } + } + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/src/main/java/calculator/rmi/OperationsRMIServer_Stub.java b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/src/main/java/calculator/rmi/OperationsRMIServer_Stub.java new file mode 100644 index 0000000000..a813dfb6f3 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/src/main/java/calculator/rmi/OperationsRMIServer_Stub.java @@ -0,0 +1,132 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +// Stub class generated by rmic, do not edit. +// Contents subject to change without notice. +package calculator.rmi; + +public final class OperationsRMIServer_Stub extends java.rmi.server.RemoteStub implements calculator.rmi.OperationsRemote { + private static final long serialVersionUID = 2; + + private static java.lang.reflect.Method $method_add_0; + private static java.lang.reflect.Method $method_divide_1; + private static java.lang.reflect.Method $method_multiply_2; + private static java.lang.reflect.Method $method_subtract_3; + + static { + try { + $method_add_0 = + calculator.rmi.OperationsRemote.class.getMethod("add", new java.lang.Class[] {double.class, double.class}); + $method_divide_1 = + calculator.rmi.OperationsRemote.class.getMethod("divide", + new java.lang.Class[] {double.class, double.class}); + $method_multiply_2 = + calculator.rmi.OperationsRemote.class.getMethod("multiply", new java.lang.Class[] {double.class, + double.class}); + $method_subtract_3 = + calculator.rmi.OperationsRemote.class.getMethod("subtract", new java.lang.Class[] {double.class, + double.class}); + } catch (java.lang.NoSuchMethodException e) { + throw new java.lang.NoSuchMethodError("stub class initialization failed"); + } + } + + // constructors + public OperationsRMIServer_Stub(java.rmi.server.RemoteRef ref) { + super(ref); + } + + // methods from remote interfaces + + // implementation of add(double, double) + public double add(double $param_double_1, double $param_double_2) throws java.rmi.RemoteException { + try { + Object $result = + ref.invoke(this, + $method_add_0, + new java.lang.Object[] {new java.lang.Double($param_double_1), + new java.lang.Double($param_double_2)}, + 864055858262779977L); + return ((java.lang.Double)$result).doubleValue(); + } catch (java.lang.RuntimeException e) { + throw e; + } catch (java.rmi.RemoteException e) { + throw e; + } catch (java.lang.Exception e) { + throw new java.rmi.UnexpectedException("undeclared checked exception", e); + } + } + + // implementation of divide(double, double) + public double divide(double $param_double_1, double $param_double_2) throws java.rmi.RemoteException { + try { + Object $result = + ref.invoke(this, + $method_divide_1, + new java.lang.Object[] {new java.lang.Double($param_double_1), + new java.lang.Double($param_double_2)}, + 8097593626497421928L); + return ((java.lang.Double)$result).doubleValue(); + } catch (java.lang.RuntimeException e) { + throw e; + } catch (java.rmi.RemoteException e) { + throw e; + } catch (java.lang.Exception e) { + throw new java.rmi.UnexpectedException("undeclared checked exception", e); + } + } + + // implementation of multiply(double, double) + public double multiply(double $param_double_1, double $param_double_2) throws java.rmi.RemoteException { + try { + Object $result = + ref.invoke(this, + $method_multiply_2, + new java.lang.Object[] {new java.lang.Double($param_double_1), + new java.lang.Double($param_double_2)}, + -346155016949350695L); + return ((java.lang.Double)$result).doubleValue(); + } catch (java.lang.RuntimeException e) { + throw e; + } catch (java.rmi.RemoteException e) { + throw e; + } catch (java.lang.Exception e) { + throw new java.rmi.UnexpectedException("undeclared checked exception", e); + } + } + + // implementation of subtract(double, double) + public double subtract(double $param_double_1, double $param_double_2) throws java.rmi.RemoteException { + try { + Object $result = + ref.invoke(this, + $method_subtract_3, + new java.lang.Object[] {new java.lang.Double($param_double_1), + new java.lang.Double($param_double_2)}, + -610707357620578750L); + return ((java.lang.Double)$result).doubleValue(); + } catch (java.lang.RuntimeException e) { + throw e; + } catch (java.rmi.RemoteException e) { + throw e; + } catch (java.lang.Exception e) { + throw new java.rmi.UnexpectedException("undeclared checked exception", e); + } + } +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/src/main/java/calculator/rmi/OperationsRemote.java b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/src/main/java/calculator/rmi/OperationsRemote.java new file mode 100644 index 0000000000..955e386ad8 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/src/main/java/calculator/rmi/OperationsRemote.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 calculator.rmi; + +import java.rmi.Remote; +import java.rmi.RemoteException; + +/** + * RMI Remote interface + */ +public interface OperationsRemote extends Remote { + double add(double n1, double n2) throws RemoteException; + + double subtract(double n1, double n2) throws RemoteException; + + double multiply(double n1, double n2) throws RemoteException; + + double divide(double n1, double n2) throws RemoteException; + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/src/main/resources/META-INF/sca-contribution.xml b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/src/main/resources/META-INF/sca-contribution.xml new file mode 100644 index 0000000000..b48c048000 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/src/main/resources/META-INF/sca-contribution.xml @@ -0,0 +1,24 @@ + + + + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/src/test/java/calculator/dosgi/test/CalculatorNode.java b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/src/test/java/calculator/dosgi/test/CalculatorNode.java new file mode 100644 index 0000000000..565a314d85 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/src/test/java/calculator/dosgi/test/CalculatorNode.java @@ -0,0 +1,43 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package calculator.dosgi.test; + +import org.apache.tuscany.sca.node.equinox.launcher.NodeLauncher; + +/** + * + */ +public class CalculatorNode { + + /** + * @param args + */ + public static void main(String[] args) { + if (args.length == 0) { + args = new String[] {"-bundles"}; + } + try { + NodeLauncher.main(args); + } catch (Exception e) { + e.printStackTrace(); + } + } + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/src/test/java/calculator/dosgi/test/CalculatorOSGiNodeTestCase.java b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/src/test/java/calculator/dosgi/test/CalculatorOSGiNodeTestCase.java new file mode 100644 index 0000000000..2f37da0707 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-calculator/src/test/java/calculator/dosgi/test/CalculatorOSGiNodeTestCase.java @@ -0,0 +1,152 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT 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.dosgi.test; + +import static calculator.dosgi.test.OSGiTestUtils.bundleStatus; + +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.Reader; +import java.net.URL; + +import org.apache.tuscany.sca.node.equinox.launcher.EquinoxHost; +import org.junit.AfterClass; +import org.junit.Assert; +import org.junit.BeforeClass; +import org.junit.Test; +import org.osgi.framework.Bundle; +import org.osgi.framework.BundleContext; +import org.osgi.framework.Constants; +import org.osgi.framework.ServiceReference; + +import calculator.dosgi.CalculatorService; +import calculator.rmi.OperationsRMIServer; + +/** + * + */ +public class CalculatorOSGiNodeTestCase { + private static EquinoxHost host; + private static BundleContext context; + private static Bundle calculatorBundle; + private static OperationsRMIServer rmiServer; + + /** + * @throws java.lang.Exception + */ + @BeforeClass + public static void setUpBeforeClass() throws Exception { + try { + rmiServer = new OperationsRMIServer(); + rmiServer.start(); + + host = new EquinoxHost(); + context = host.start(); + + for (Bundle b : context.getBundles()) { + System.out.println(b); + // debug to print out exported packages + // handy if you want to find aplit packages + //Object exports = b.getHeaders().get(Constants.EXPORT_PACKAGE); + //if (exports != null){ + // System.out.println(exports.toString()); + //} + if (b.getSymbolicName().equals("org.eclipse.equinox.ds") || b.getSymbolicName() + .startsWith("org.apache.tuscany.sca.")) { + try { + if (b.getHeaders().get(Constants.FRAGMENT_HOST) == null) { + // Start the non-fragment bundle + b.start(); + } + } catch (Exception e) { + e.printStackTrace(); + } + System.out.println(bundleStatus(b, false)); + } else { + System.out.println(bundleStatus(b, false)); + } + if ("calculator.dosgi".equals(b.getSymbolicName())) { + calculatorBundle = b; + } + } + + if (calculatorBundle != null) { + calculatorBundle.start(); + System.out.println(bundleStatus(calculatorBundle, false)); + } + + } catch (Exception e) { + e.printStackTrace(); + throw e; + } + } + + @Test + public void testOSGi() { + ServiceReference ref = + calculatorBundle.getBundleContext().getServiceReference(CalculatorService.class.getName()); + Assert.assertNotNull(ref); + Object service = context.getService(ref); + Assert.assertNotNull(service); + CalculatorService calculator = OSGiTestUtils.cast(service, CalculatorService.class); + System.out.println("2.0 + 1.0 = " + calculator.add(2.0, 1.0)); + System.out.println("2.0 - 1.0 = " + calculator.subtract(2.0, 1.0)); + System.out.println("2.0 * 1.0 = " + calculator.multiply(2.0, 1.0)); + System.out.println("2.0 / 1.0 = " + calculator.divide(2.0, 1.0)); + } + + @Test + /** + * Test the Web service exposed by the Calculator + */ + public void testWS() throws Exception { + URL url = new URL("http://localhost:8086/CalculatorService?wsdl"); + InputStream is = url.openStream(); + Reader reader = new InputStreamReader(is); + char[] content = new char[10240]; // 10k + int len = 0; + while (true) { + int size = reader.read(content, len, content.length - len); + if (size < 0) { + break; + } + len += size; + } + Assert.assertTrue(len > 0); + String str = new String(content, 0, len); + System.out.println(str); + Assert.assertTrue(str.indexOf(" + * @param obj + * @param cls + * @return + */ + public static T cast(Object obj, Class cls) { + if (cls.isInstance(obj)) { + return cls.cast(obj); + } else { + return cls.cast(Proxy.newProxyInstance(cls.getClassLoader(), + new Class[] {cls}, + new InvocationHandlerImpl(obj))); + } + } +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator-operations/LICENSE b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator-operations/LICENSE new file mode 100644 index 0000000000..6e529a25c4 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator-operations/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/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator-operations/META-INF/MANIFEST.MF b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator-operations/META-INF/MANIFEST.MF new file mode 100644 index 0000000000..cea4e2ff79 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator-operations/META-INF/MANIFEST.MF @@ -0,0 +1,23 @@ +Manifest-Version: 1.0 +Export-Package: calculator.dosgi.operations;version="1.0.1" +Bundle-Version: 1.0.0 +Bundle-Name: calculator.dosgi.dynamic.operations +Bundle-Activator: calculator.dosgi.operations.impl.OperationsActivator +Bundle-ManifestVersion: 2 +Import-Package: calculator.dosgi.operations;version="[1.0.1,1.0.1]", + org.oasisopen.sca.annotation;version="2.0.0", + org.osgi.framework, + org.osgi.service.component;resolution:=optional, + org.osgi.service.packageadmin +Bundle-SymbolicName: calculator.dosgi.dynamic.operations +Bundle-Vendor: The Apache Software Foundation +Bundle-ActivationPolicy: lazy +Eclipse-LazyStart: true +Bundle-License: http://www.apache.org/licenses/LICENSE-2.0.txt +Bundle-DocURL: http://www.apache.org/ +Service-Component-Disabled: OSGI-INF/add-component.xml, + OSGI-INF/subtract-component.xml, + OSGI-INF/multiply-component.xml, + OSGI-INF/divide-component.xml +Bundle-RequiredExecutionEnvironment: J2SE-1.5,JavaSE-1.6 +SCA-Configuration: OSGI-INF/sca-config/*.xml diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator-operations/NOTICE b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator-operations/NOTICE new file mode 100644 index 0000000000..9ddba06a32 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator-operations/NOTICE @@ -0,0 +1,6 @@ +${pom.name} +Copyright (c) 2005 - 2010 The Apache Software Foundation + +This product includes software developed by +The Apache Software Foundation (http://www.apache.org/). + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator-operations/OSGI-INF/add-component.xml b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator-operations/OSGI-INF/add-component.xml new file mode 100644 index 0000000000..99845257ff --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator-operations/OSGI-INF/add-component.xml @@ -0,0 +1,25 @@ + + + + + + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator-operations/OSGI-INF/blueprint/operations-module.xml b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator-operations/OSGI-INF/blueprint/operations-module.xml new file mode 100644 index 0000000000..f6b5f4690e --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator-operations/OSGI-INF/blueprint/operations-module.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator-operations/OSGI-INF/divide-component.xml b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator-operations/OSGI-INF/divide-component.xml new file mode 100644 index 0000000000..322d4daf2f --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator-operations/OSGI-INF/divide-component.xml @@ -0,0 +1,25 @@ + + + + + + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator-operations/OSGI-INF/multiply-component.xml b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator-operations/OSGI-INF/multiply-component.xml new file mode 100644 index 0000000000..b9ca777bd8 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator-operations/OSGI-INF/multiply-component.xml @@ -0,0 +1,25 @@ + + + + + + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator-operations/OSGI-INF/sca-config/operations-config.xml b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator-operations/OSGI-INF/sca-config/operations-config.xml new file mode 100644 index 0000000000..1965b571a9 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator-operations/OSGI-INF/sca-config/operations-config.xml @@ -0,0 +1,29 @@ + + + + + + + + + \ No newline at end of file diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator-operations/OSGI-INF/subtract-component.xml b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator-operations/OSGI-INF/subtract-component.xml new file mode 100644 index 0000000000..1472f5a976 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator-operations/OSGI-INF/subtract-component.xml @@ -0,0 +1,25 @@ + + + + + + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator-operations/README b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator-operations/README new file mode 100644 index 0000000000..77a4cbae9e --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator-operations/README @@ -0,0 +1,196 @@ +Distributed OSGi Calculator Sample +================================== +This sample implements a distributed calculator using Distributed OSGi (RFC 119) over SCA. + +The README in the /samples directory provides +general instructions about building and running samples. (where +distribution-unpack-dir is the directory in which you unpacked the tuscany +binary distribution archive). Take a look there first (noting at you read it that this sample +is not a new style sample). + +On Windows, run +java -jar ..\..\modules\osgi-3.5.0-v20090520.jar -configuration ..\..\features\configuration -clean -console + +On *Unix, run +java -jar ../../modules/osgi-3.5.0-v20090520.jar -configuration ../../features/configuration -clean -console + +You should see the osgi console: + +osgi> + +You can run "ss" command under the osgi> to see the status of the bundles. +osgi> ss + +Then you can install and start the calculator.dosgi bundle: + +osgi> install file:./target/sample-dosgi-dynamic-calculator-operations.jar +Bundle id is 198 + +osgi> start 198 +Nov 4, 2009 5:16:51 PM calculator.dosgi.operations.impl.OperationsActivator star +t +INFO: Starting calculator.dosgi.dynamic.operations_1.0.0 [198] +Nov 4, 2009 5:16:51 PM calculator.dosgi.operations.impl.OperationsActivator star +t +INFO: Registering calculator.dosgi.operations.AddService +Nov 4, 2009 5:16:51 PM org.apache.tuscany.sca.node.impl.NodeImpl start +INFO: Starting node: urn:osgi.service.d3cadb93-e9b9-4486-87eb-07ece11888f6 domai +n: tuscany.apache.org +Nov 4, 2009 5:16:51 PM org.apache.tuscany.sca.host.rmi.DefaultRMIHost registerSe +rvice +INFO: RMI service registered: rmi://localhost:8085/AddService +Nov 4, 2009 5:16:51 PM org.apache.tuscany.sca.core.assembly.impl.EndpointRegistr +yImpl addEndpoint +INFO: Add endpoint - (@8144744)Endpoint: URI = osgi.service.d3cadb93-e9b9-4486- +87eb-07ece11888f6#service-binding(AddService/Add) +Nov 4, 2009 5:16:51 PM calculator.dosgi.operations.impl.OperationsActivator star +t +INFO: Registering calculator.dosgi.operations.SubtractService +Nov 4, 2009 5:16:51 PM org.apache.tuscany.sca.node.impl.NodeImpl start +INFO: Starting node: urn:osgi.service.b6259ccc-6ae4-41f0-b61b-c5a8c7f42b35 domai +n: tuscany.apache.org +Nov 4, 2009 5:16:51 PM org.apache.tuscany.sca.host.rmi.DefaultRMIHost registerSe +rvice +INFO: RMI service registered: rmi://localhost:8085/SubtractService +Nov 4, 2009 5:16:51 PM org.apache.tuscany.sca.core.assembly.impl.EndpointRegistr +yImpl addEndpoint +INFO: Add endpoint - (@30229114)Endpoint: URI = osgi.service.b6259ccc-6ae4-41f0 +-b61b-c5a8c7f42b35#service-binding(SubtractService/Subtract) +Nov 4, 2009 5:16:51 PM calculator.dosgi.operations.impl.OperationsActivator star +t +INFO: Registering calculator.dosgi.operations.MultiplyService +Nov 4, 2009 5:16:51 PM org.apache.tuscany.sca.node.impl.NodeImpl start +INFO: Starting node: urn:osgi.service.8469c64c-9a28-47b3-bc4a-c5fa8d471057 domai +n: tuscany.apache.org +Nov 4, 2009 5:16:51 PM org.apache.tuscany.sca.host.rmi.DefaultRMIHost registerSe +rvice +INFO: RMI service registered: rmi://localhost:8085/MultiplyService +Nov 4, 2009 5:16:51 PM org.apache.tuscany.sca.core.assembly.impl.EndpointRegistr +yImpl addEndpoint +INFO: Add endpoint - (@3312704)Endpoint: URI = osgi.service.8469c64c-9a28-47b3- +bc4a-c5fa8d471057#service-binding(MultiplyService/Multiply) +Nov 4, 2009 5:16:51 PM calculator.dosgi.operations.impl.OperationsActivator star +t +INFO: Registering calculator.dosgi.operations.DivideService +Nov 4, 2009 5:16:51 PM org.apache.tuscany.sca.node.impl.NodeImpl start +INFO: Starting node: urn:osgi.service.b43555f0-9509-444e-b22a-06d347ab7e98 domai +n: tuscany.apache.org +Nov 4, 2009 5:16:51 PM org.apache.tuscany.sca.host.rmi.DefaultRMIHost registerSe +rvice +INFO: RMI service registered: rmi://localhost:8085/DivideService +Nov 4, 2009 5:16:51 PM org.apache.tuscany.sca.core.assembly.impl.EndpointRegistr +yImpl addEndpoint +INFO: Add endpoint - (@8010288)Endpoint: URI = osgi.service.b43555f0-9509-444e- +b22a-06d347ab7e98#service-binding(DivideService/Divide) +Nov 4, 2009 5:16:51 PM calculator.dosgi.operations.impl.OperationsActivator getB +undle +INFO: calculator.dosgi.operations.AddService is loaded by bundle: calculator.dos +gi.dynamic.operations + +osgi> + +To stop the bundle: + +osgi> stop 198 +Nov 4, 2009 5:18:43 PM org.apache.tuscany.sca.node.impl.NodeImpl stop +INFO: Stopping node: urn:osgi.service.b43555f0-9509-444e-b22a-06d347ab7e98 +Nov 4, 2009 5:18:43 PM org.apache.tuscany.sca.core.assembly.impl.EndpointRegistr +yImpl endpointRemoved +INFO: Remove endpoint - (@8010288)Endpoint: URI = osgi.service.b43555f0-9509-44 +4e-b22a-06d347ab7e98#service-binding(DivideService/Divide) +Nov 4, 2009 5:18:43 PM org.apache.tuscany.sca.host.rmi.DefaultRMIHost unregister +Service +INFO: RMI service unregistered: rmi://localhost:8085/DivideService +Nov 4, 2009 5:18:43 PM calculator.dosgi.operations.impl.OperationsActivator stop + +INFO: Stopping calculator.dosgi.dynamic.operations_1.0.0 [198] +Nov 4, 2009 5:18:43 PM org.apache.tuscany.sca.node.impl.NodeImpl stop +INFO: Stopping node: urn:osgi.service.d3cadb93-e9b9-4486-87eb-07ece11888f6 +Nov 4, 2009 5:18:43 PM org.apache.tuscany.sca.core.assembly.impl.EndpointRegistr +yImpl endpointRemoved +INFO: Remove endpoint - (@8144744)Endpoint: URI = osgi.service.d3cadb93-e9b9-44 +86-87eb-07ece11888f6#service-binding(AddService/Add) +Nov 4, 2009 5:18:43 PM org.apache.tuscany.sca.host.rmi.DefaultRMIHost unregister +Service +INFO: RMI service unregistered: rmi://localhost:8085/AddService +Nov 4, 2009 5:18:43 PM org.apache.tuscany.sca.node.impl.NodeImpl stop +INFO: Stopping node: urn:osgi.service.b6259ccc-6ae4-41f0-b61b-c5a8c7f42b35 +Nov 4, 2009 5:18:43 PM org.apache.tuscany.sca.core.assembly.impl.EndpointRegistr +yImpl endpointRemoved +INFO: Remove endpoint - (@30229114)Endpoint: URI = osgi.service.b6259ccc-6ae4-4 +1f0-b61b-c5a8c7f42b35#service-binding(SubtractService/Subtract) +Nov 4, 2009 5:18:43 PM org.apache.tuscany.sca.host.rmi.DefaultRMIHost unregister +Service +INFO: RMI service unregistered: rmi://localhost:8085/SubtractService +Nov 4, 2009 5:18:43 PM org.apache.tuscany.sca.node.impl.NodeImpl stop +INFO: Stopping node: urn:osgi.service.8469c64c-9a28-47b3-bc4a-c5fa8d471057 +Nov 4, 2009 5:18:43 PM org.apache.tuscany.sca.core.assembly.impl.EndpointRegistr +yImpl endpointRemoved +INFO: Remove endpoint - (@3312704)Endpoint: URI = osgi.service.8469c64c-9a28-47 +b3-bc4a-c5fa8d471057#service-binding(MultiplyService/Multiply) +Nov 4, 2009 5:18:43 PM org.apache.tuscany.sca.host.rmi.DefaultRMIHost unregister +Service +INFO: RMI service unregistered: rmi://localhost:8085/MultiplyService +Nov 4, 2009 5:18:43 PM org.apache.tuscany.sca.node.impl.NodeImpl stop +INFO: Stopping node: urn:osgi.service.b43555f0-9509-444e-b22a-06d347ab7e98 + +osgi> + +To exit the console, run: +osgi> exit + +Sample Overview +--------------- +The application consists of two OSGi bundles: + * The calculator bundle: It provides the calculator service. The service is implemented by a java class that + consumes other services to perform the “add”, “subtract”, “multiply” and “divide” operations. + * The operations bundle: It provides the add/subtract/multiply/divide services. + (See ../samples/dosgi-dynamic-calculator-operations) + + +dosgi-dynamic-calculator-operations/ + src/ + main/ + java/ + calculator/ + dosgi/ + operations/ + AddService.java - Interface for Add + SubtractService.java - Interface for Subtract + MultiplyService.java - Interface for Multiply + DivideService.java - Interface for Divide + impl/ + OperationsActivator.java - OSGi bundle activator + AddServiceImpl.java - Implementation for Add + SubtractServiceImpl.java - Implementation for Subtract + MultiplyServiceImpl.java - Implementation for Multiply + DivideServiceImpl.java - Implementation for Divide + resources/ + META-INF/ + sca-contribution.xml + OSGI-INF/ + sca-config/ + operations-config.xml - The SCA configuration file for OSGi remote services + test/ + java/ + src/ + calculator/ + dosgi/ + operations/ + test/ + OperationsOSGiNodeTestCase.java - The JUNIT test case that tests this bundle using a RMI client + + META-INF/ + MANIFEST.MF - The OSGi manifest for this bundle + pom.xml - the Maven build file + + + +Building And Running The Test Case Using Maven +------------------------------------------- +With either the binary or source distributions the sample can be built and run +using Maven as follows. + +cd dosgi-dynamic-calculator-operations +mvn + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator-operations/pom.xml b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator-operations/pom.xml new file mode 100644 index 0000000000..9dabe88970 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator-operations/pom.xml @@ -0,0 +1,148 @@ + + + + 4.0.0 + + org.apache.tuscany.sca + tuscany-sca + 2.0-M5.1 + ../../pom.xml + + + sample-dosgi-dynamic-calculator-operations + Apache Tuscany SCA OSGi Remote Services Dynamic Caculator Operations Sample + + + + org.apache.tuscany.sca + tuscany-feature-ejava + 2.0-M5.1 + pom + + + + org.apache.tuscany.sca + tuscany-node-launcher-equinox + 2.0-M5.1 + test + + + + org.apache.tuscany.sca + tuscany-node-impl-osgi + 2.0-M5.1 + runtime + + + + org.eclipse.osgi + services + 3.2.0-v20090520-1800 + test + + + + + org.eclipse.equinox + ds + 1.1.0-v20090601 + test + + + + org.eclipse.equinox + util + 1.0.100-v20090520-1800 + test + + + + junit + junit + 4.8.1 + test + + + + + + ${artifactId} + + + maven-eclipse-plugin + 2.5.1 + + + org.eclipse.pde.ManifestBuilder + org.eclipse.jdt.core.javabuilder + + + org.eclipse.jdt.core.javanature + org.eclipse.pde.PluginNature + + + org.eclipse.jdt.launching.JRE_CONTAINER + + + + + + + maven-jar-plugin + + + ${basedir}/META-INF/MANIFEST.MF + + + + + + org.apache.tuscany.maven.plugins + maven-osgi-junit-plugin + 1.0 + + + org.apache.tuscany.sca + tuscany-node-launcher-equinox + ${pom.version} + + + + + osgi-test + test + + test + + + + + osgi.configuration.area + ${project.build.directory}/equinox + + + + + + + + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator-operations/src/main/java/calculator/dosgi/operations/AddService.java b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator-operations/src/main/java/calculator/dosgi/operations/AddService.java new file mode 100644 index 0000000000..971500782f --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator-operations/src/main/java/calculator/dosgi/operations/AddService.java @@ -0,0 +1,31 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT 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.dosgi.operations; + +import org.oasisopen.sca.annotation.Remotable; + +/** + * The interface for the add service + */ +@Remotable +public interface AddService { + + double add(double n1, double n2); + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator-operations/src/main/java/calculator/dosgi/operations/DivideService.java b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator-operations/src/main/java/calculator/dosgi/operations/DivideService.java new file mode 100644 index 0000000000..49b8a1c0bf --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator-operations/src/main/java/calculator/dosgi/operations/DivideService.java @@ -0,0 +1,31 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT 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.dosgi.operations; + +import org.oasisopen.sca.annotation.Remotable; + +/** + * The interface for the divide service + */ +@Remotable +public interface DivideService { + + double divide(double n1, double n2); + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator-operations/src/main/java/calculator/dosgi/operations/MultiplyService.java b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator-operations/src/main/java/calculator/dosgi/operations/MultiplyService.java new file mode 100644 index 0000000000..f4e59d12ea --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator-operations/src/main/java/calculator/dosgi/operations/MultiplyService.java @@ -0,0 +1,31 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT 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.dosgi.operations; + +import org.oasisopen.sca.annotation.Remotable; + +/** + * The interface for the multiply service + */ +@Remotable +public interface MultiplyService { + + double multiply(double n1, double n2); + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator-operations/src/main/java/calculator/dosgi/operations/SubtractService.java b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator-operations/src/main/java/calculator/dosgi/operations/SubtractService.java new file mode 100644 index 0000000000..bfb9b820f7 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator-operations/src/main/java/calculator/dosgi/operations/SubtractService.java @@ -0,0 +1,31 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT 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.dosgi.operations; + +import org.oasisopen.sca.annotation.Remotable; + +/** + * The interface for the subtract service + */ +@Remotable +public interface SubtractService { + + double subtract(double n1, double n2); + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator-operations/src/main/java/calculator/dosgi/operations/impl/AddServiceImpl.java b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator-operations/src/main/java/calculator/dosgi/operations/impl/AddServiceImpl.java new file mode 100644 index 0000000000..66b2977241 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator-operations/src/main/java/calculator/dosgi/operations/impl/AddServiceImpl.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 calculator.dosgi.operations.impl; + +import java.util.logging.Level; +import java.util.logging.Logger; + +import calculator.dosgi.operations.AddService; + +/** + * An implementation of the Add service + */ +public class AddServiceImpl implements AddService { + + public double add(double n1, double n2) { + Logger logger = Logger.getLogger("calculator"); + logger.log(Level.INFO, "Adding " + n1 + " and " + n2); + return n1 + n2; + } + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator-operations/src/main/java/calculator/dosgi/operations/impl/DivideServiceImpl.java b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator-operations/src/main/java/calculator/dosgi/operations/impl/DivideServiceImpl.java new file mode 100644 index 0000000000..a3c21b2b96 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator-operations/src/main/java/calculator/dosgi/operations/impl/DivideServiceImpl.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 calculator.dosgi.operations.impl; + +import java.util.logging.Level; +import java.util.logging.Logger; + +import calculator.dosgi.operations.DivideService; + +/** + * An implementation of the Divide service. + */ +public class DivideServiceImpl implements DivideService { + + public double divide(double n1, double n2) { + Logger logger = Logger.getLogger("calculator"); + logger.log(Level.INFO, "Dividing " + n1 + " with " + n2); + return n1 / n2; + } + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator-operations/src/main/java/calculator/dosgi/operations/impl/MultiplyServiceImpl.java b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator-operations/src/main/java/calculator/dosgi/operations/impl/MultiplyServiceImpl.java new file mode 100644 index 0000000000..7922d2d392 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator-operations/src/main/java/calculator/dosgi/operations/impl/MultiplyServiceImpl.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 calculator.dosgi.operations.impl; + +import java.util.logging.Level; +import java.util.logging.Logger; + +import calculator.dosgi.operations.MultiplyService; + +/** + * An implementation of the Multiply service. + */ +public class MultiplyServiceImpl implements MultiplyService { + + public double multiply(double n1, double n2) { + Logger logger = Logger.getLogger("calculator"); + logger.log(Level.INFO, "Multiplying " + n1 + " with " + n2); + return n1 * n2; + } + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator-operations/src/main/java/calculator/dosgi/operations/impl/OperationsActivator.java b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator-operations/src/main/java/calculator/dosgi/operations/impl/OperationsActivator.java new file mode 100644 index 0000000000..f75cc6444e --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator-operations/src/main/java/calculator/dosgi/operations/impl/OperationsActivator.java @@ -0,0 +1,94 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT 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.dosgi.operations.impl; + +import java.util.Dictionary; +import java.util.Hashtable; +import java.util.logging.Logger; + +import org.osgi.framework.Bundle; +import org.osgi.framework.BundleActivator; +import org.osgi.framework.BundleContext; +import org.osgi.framework.ServiceReference; +import org.osgi.service.packageadmin.PackageAdmin; + +import calculator.dosgi.operations.AddService; +import calculator.dosgi.operations.DivideService; +import calculator.dosgi.operations.MultiplyService; +import calculator.dosgi.operations.SubtractService; + +/** + * + */ +public class OperationsActivator implements BundleActivator { + private Logger logger = Logger.getLogger(OperationsActivator.class.getName()); + + public void start(BundleContext context) throws Exception { + logger.info("Starting " + context.getBundle()); + + Dictionary props = new Hashtable(); + props.put("service.exported.configs", new String[] {"org.osgi.sca"}); + props.put("service.exported.interfaces", new String[] {"*"}); + + logger.info("Registering " + AddService.class.getName()); + props.put("sca.service", "AddComponent#service-name(Add)"); + props.put("org.osgi.sca.bindings", new String[] {"{http://sample}Add"}); + context.registerService(AddService.class.getName(), new AddServiceImpl(), props); + + logger.info("Registering " + SubtractService.class.getName()); + props.put("sca.service", "SubtractComponent#service-name(Subtract)"); + props.put("org.osgi.sca.bindings", new String[] {"{http://sample}Subtract"}); + context.registerService(SubtractService.class.getName(), new SubtractServiceImpl(), props); + + logger.info("Registering " + MultiplyService.class.getName()); + props.put("sca.service", "MultiplyComponent#service-name(Multiply)"); + props.put("org.osgi.sca.bindings", new String[] {"{http://sample}Multiply"}); + context.registerService(MultiplyService.class.getName(), new MultiplyServiceImpl(), props); + + logger.info("Registering " + DivideService.class.getName()); + props.put("sca.service", "DivideComponent#service-name(Divide)"); + props.put("org.osgi.sca.bindings", new String[] {"{http://sample}Divide"}); + context.registerService(DivideService.class.getName(), new DivideServiceImpl(), props); + + getBundle(context, AddService.class); + } + + public void stop(BundleContext context) throws Exception { + logger.info("Stopping " + context.getBundle()); + // Registered services will be automatically unregistered + } + + private Bundle getBundle(BundleContext bundleContext, Class cls) { + PackageAdmin packageAdmin = null; + // PackageAdmin is used to resolve bundles + ServiceReference ref = bundleContext.getServiceReference("org.osgi.service.packageadmin.PackageAdmin"); + if (ref != null) { + packageAdmin = (PackageAdmin)bundleContext.getService(ref); + Bundle bundle = packageAdmin.getBundle(cls); + if (bundle != null) { + logger.info(cls.getName() + " is loaded by bundle: " + bundle.getSymbolicName()); + } + bundleContext.ungetService(ref); + return bundle; + } + return null; + } + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator-operations/src/main/java/calculator/dosgi/operations/impl/SubtractServiceImpl.java b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator-operations/src/main/java/calculator/dosgi/operations/impl/SubtractServiceImpl.java new file mode 100644 index 0000000000..4bbe83b14f --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator-operations/src/main/java/calculator/dosgi/operations/impl/SubtractServiceImpl.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 calculator.dosgi.operations.impl; + +import java.util.logging.Level; +import java.util.logging.Logger; + +import calculator.dosgi.operations.SubtractService; + +/** + * An implementation of the subtract service. + */ +public class SubtractServiceImpl implements SubtractService { + + public double subtract(double n1, double n2) { + Logger logger = Logger.getLogger("calculator"); + logger.log(Level.INFO, "Subtracting " + n1 + " from " + n2); + return n1 - n2; + } + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator-operations/src/test/java/calculator/dosgi/operations/test/OSGiTestUtils.java b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator-operations/src/test/java/calculator/dosgi/operations/test/OSGiTestUtils.java new file mode 100644 index 0000000000..cd92989da1 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator-operations/src/test/java/calculator/dosgi/operations/test/OSGiTestUtils.java @@ -0,0 +1,105 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT 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.dosgi.operations.test; + +import java.lang.reflect.InvocationHandler; +import java.lang.reflect.Method; +import java.lang.reflect.Proxy; + +import org.osgi.framework.Bundle; + +/** + * + * Utility class to create OSGi bundles + * + * @version $Rev$ $Date$ + */ +public class OSGiTestUtils { + private static class InvocationHandlerImpl implements InvocationHandler { + private Object instance; + + public InvocationHandlerImpl(Object instance) { + super(); + this.instance = instance; + } + + public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { + Method m = instance.getClass().getMethod(method.getName(), method.getParameterTypes()); + return m.invoke(instance, args); + } + + } + + /** + * Returns a string representation of the given bundle. + * + * @param b + * @param verbose + * @return + */ + public static String bundleStatus(Bundle bundle, boolean verbose) { + StringBuffer sb = new StringBuffer(); + sb.append(bundle.getBundleId()).append(" ").append(bundle.getSymbolicName()); + int s = bundle.getState(); + if ((s & Bundle.UNINSTALLED) != 0) { + sb.append(" UNINSTALLED"); + } + if ((s & Bundle.INSTALLED) != 0) { + sb.append(" INSTALLED"); + } + if ((s & Bundle.RESOLVED) != 0) { + sb.append(" RESOLVED"); + } + if ((s & Bundle.STARTING) != 0) { + sb.append(" STARTING"); + } + if ((s & Bundle.STOPPING) != 0) { + sb.append(" STOPPING"); + } + if ((s & Bundle.ACTIVE) != 0) { + sb.append(" ACTIVE"); + } + + if (verbose) { + sb.append(" ").append(bundle.getLocation()); + sb.append(" ").append(bundle.getHeaders()); + } + return sb.toString(); + } + + /** + * A utility to cast the object to the given interface. If the class for the object + * is loaded by a different classloader, a proxy will be created. + * + * @param + * @param obj + * @param cls + * @return + */ + public static T cast(Object obj, Class cls) { + if (cls.isInstance(obj)) { + return cls.cast(obj); + } else { + return cls.cast(Proxy.newProxyInstance(cls.getClassLoader(), + new Class[] {cls}, + new InvocationHandlerImpl(obj))); + } + } +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator-operations/src/test/java/calculator/dosgi/operations/test/OperationsNode.java b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator-operations/src/test/java/calculator/dosgi/operations/test/OperationsNode.java new file mode 100644 index 0000000000..02007c385c --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator-operations/src/test/java/calculator/dosgi/operations/test/OperationsNode.java @@ -0,0 +1,43 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package calculator.dosgi.operations.test; + +import org.apache.tuscany.sca.node.equinox.launcher.NodeLauncher; + +/** + * + */ +public class OperationsNode { + + /** + * @param args + */ + public static void main(String[] args) { + if (args.length == 0) { + args = new String[] {"-bundles"}; + } + try { + NodeLauncher.main(args); + } catch (Exception e) { + e.printStackTrace(); + } + } + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator-operations/src/test/java/calculator/dosgi/operations/test/OperationsOSGiNodeTestCase.java b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator-operations/src/test/java/calculator/dosgi/operations/test/OperationsOSGiNodeTestCase.java new file mode 100644 index 0000000000..eee64bf86f --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator-operations/src/test/java/calculator/dosgi/operations/test/OperationsOSGiNodeTestCase.java @@ -0,0 +1,104 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT 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.dosgi.operations.test; + +import static calculator.dosgi.operations.test.OSGiTestUtils.bundleStatus; + +import java.rmi.registry.LocateRegistry; +import java.rmi.registry.Registry; + +import org.apache.tuscany.sca.node.equinox.launcher.EquinoxHost; +import org.junit.AfterClass; +import org.junit.Assert; +import org.junit.BeforeClass; +import org.junit.Test; +import org.osgi.framework.Bundle; +import org.osgi.framework.BundleContext; +import org.osgi.framework.Constants; + +import calculator.dosgi.operations.AddService; + +/** + * + */ +public class OperationsOSGiNodeTestCase { + private static EquinoxHost host; + private static BundleContext context; + private static Bundle operationsBundle; + + /** + * @throws java.lang.Exception + */ + @BeforeClass + public static void setUpBeforeClass() throws Exception { + try { + host = new EquinoxHost(); + context = host.start(); + + for (Bundle b : context.getBundles()) { + if (b.getSymbolicName().equals("org.eclipse.equinox.ds") || b.getSymbolicName() + .startsWith("org.apache.tuscany.sca.")) { + try { + if (b.getHeaders().get(Constants.FRAGMENT_HOST) == null) { + // Start the non-fragment bundle + b.start(); + } + } catch (Exception e) { + e.printStackTrace(); + } + System.out.println(bundleStatus(b, false)); + } + if ("calculator.dosgi.dynamic.operations".equals(b.getSymbolicName())) { + operationsBundle = b; + } + } + + if (operationsBundle != null) { + operationsBundle.start(); + System.out.println(bundleStatus(operationsBundle, false)); + } + + } catch (Exception e) { + e.printStackTrace(); + throw e; + } + } + + @Test + public void testOSGi() throws Exception { + Registry registry = LocateRegistry.getRegistry(8085); + Object add = registry.lookup("AddService"); + AddService addService = OSGiTestUtils.cast(add, AddService.class); + double sum = addService.add(1.0, 2.0); + Assert.assertEquals(3.0, sum, 0.0); + } + + /** + * @throws java.lang.Exception + */ + @AfterClass + public static void tearDownAfterClass() throws Exception { + if (host != null) { + host.stop(); + context = null; + } + } + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator/LICENSE b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator/LICENSE new file mode 100644 index 0000000000..6e529a25c4 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator/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/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator/META-INF/MANIFEST.MF b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator/META-INF/MANIFEST.MF new file mode 100644 index 0000000000..6ce24a4a32 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator/META-INF/MANIFEST.MF @@ -0,0 +1,23 @@ +Manifest-Version: 1.0 +Export-Package: calculator.dosgi;version="1.0.1", + calculator.dosgi.operations;version="1.0.1" +Bundle-Version: 1.0.0 +Bundle-Name: calculator.dosgi.dynamic +Bundle-Activator: calculator.dosgi.impl.CalculatorActivator +Bundle-ManifestVersion: 2 +Import-Package: org.oasisopen.sca.annotation;version="2.0.0", + org.osgi.framework, + org.osgi.service.component;resolution:=optional, + org.osgi.service.packageadmin, + org.osgi.util.tracker +Bundle-SymbolicName: calculator.dosgi.dynamic +Bundle-Vendor: The Apache Software Foundation +Bundle-ActivationPolicy: lazy +Eclipse-LazyStart: true +Bundle-License: http://www.apache.org/licenses/LICENSE-2.0.txt +Bundle-DocURL: http://www.apache.org/ +Service-Component-Disabled: OSGI-INF/calculator-component.xml +Bundle-RequiredExecutionEnvironment: J2SE-1.5,JavaSE-1.6 +SCA-Configuration: OSGI-INF/sca-config/calculator-config.xml +Remote-Service: OSGI-INF/remote-service/*.xml + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator/NOTICE b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator/NOTICE new file mode 100644 index 0000000000..9ddba06a32 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator/NOTICE @@ -0,0 +1,6 @@ +${pom.name} +Copyright (c) 2005 - 2010 The Apache Software Foundation + +This product includes software developed by +The Apache Software Foundation (http://www.apache.org/). + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator/OSGI-INF/blueprint/calculator-module.xml b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator/OSGI-INF/blueprint/calculator-module.xml new file mode 100644 index 0000000000..fd834e12ef --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator/OSGI-INF/blueprint/calculator-module.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator/OSGI-INF/calculator-component.xml b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator/OSGI-INF/calculator-component.xml new file mode 100644 index 0000000000..5daaa59aae --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator/OSGI-INF/calculator-component.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator/OSGI-INF/remote-service/calculator-service-descriptions.xml b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator/OSGI-INF/remote-service/calculator-service-descriptions.xml new file mode 100644 index 0000000000..ded82797b5 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator/OSGI-INF/remote-service/calculator-service-descriptions.xml @@ -0,0 +1,61 @@ + + + + + + + + + + + + + {http://sample}Add + + + + + + + + + + + {http://sample}Subtract + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator/OSGI-INF/sca-config/calculator-config.xml b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator/OSGI-INF/sca-config/calculator-config.xml new file mode 100644 index 0000000000..f10b577e87 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator/OSGI-INF/sca-config/calculator-config.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator/README b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator/README new file mode 100644 index 0000000000..e8d311298e --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator/README @@ -0,0 +1,145 @@ +Distributed OSGi Calculator Sample +================================== +This sample implements a distributed calculator using Distributed OSGi (RFC 119) over SCA. + +The README in the /samples directory provides +general instructions about building and running samples. (where +distribution-unpack-dir is the directory in which you unpacked the tuscany +binary distribution archive). Take a look there first (noting at you read it that this sample +is not a new style sample). + +On Windows, run +java -jar ..\..\modules\osgi-3.5.0-v20090520.jar -configuration ..\..\features\configuration -clean -console + +On *Unix, run +java -jar ../../modules/osgi-3.5.0-v20090520.jar -configuration ../../features/configuration -clean -console + +You should see the osgi console: + +osgi> + +osgi> Jun 22, 2009 1:32:27 PM org.apache.tuscany.sca.extensibility.equinox.EquinoxServiceDiscoveryActivator start +INFO: Equinox-based service discoverer is now configured. + +You can run "ss" command under the osgi> to see the status of the bundles. +osgi> ss + +Then you can install and start the calculator.dosgi bundle: + +osgi> install file:./target/sample-dosgi-dynamic-calculator.jar +Bundle id is 198 + +osgi> start 198 +Nov 4, 2009 5:20:21 PM calculator.dosgi.impl.CalculatorActivator start +INFO: Starting calculator.dosgi.dynamic_1.0.0 [198] +Nov 4, 2009 5:20:21 PM calculator.dosgi.impl.CalculatorActivator start +INFO: Registering calculator.dosgi.CalculatorService +Nov 4, 2009 5:20:21 PM org.apache.tuscany.sca.node.impl.NodeImpl start +INFO: Starting node: urn:osgi.service.d5a06834-ae15-42b3-9287-71fe6537c869 domai +n: tuscany.apache.org +log4j:WARN No appenders could be found for logger (org.apache.axiom.om.util.StAX +Utils). +log4j:WARN Please initialize the log4j system properly. +Nov 4, 2009 5:20:24 PM org.mortbay.log.Slf4jLog info +INFO: Logging to org.slf4j.impl.JDK14LoggerAdapter(org.mortbay.log) via org.mort +bay.log.Slf4jLog +Nov 4, 2009 5:20:25 PM org.apache.tuscany.sca.http.jetty.JettyLogger info +INFO: jetty-6.1.x +Nov 4, 2009 5:20:25 PM org.apache.tuscany.sca.http.jetty.JettyLogger info +INFO: Started SelectChannelConnector@0.0.0.0:8086 +Nov 4, 2009 5:20:25 PM org.apache.tuscany.sca.http.jetty.JettyServer addServletM +apping +INFO: Added Servlet mapping: http://rfengt61p:8086/CalculatorService +Nov 4, 2009 5:20:25 PM org.apache.tuscany.sca.core.assembly.impl.EndpointRegistr +yImpl addEndpoint +INFO: Add endpoint - (@23394516)Endpoint: URI = osgi.service.d5a06834-ae15-42b3 +-9287-71fe6537c869#service-binding(CalculatorService/Calculator) +Nov 4, 2009 5:20:25 PM calculator.dosgi.impl.CalculatorActivator getBundle +INFO: calculator.dosgi.operations.AddService is loaded by bundle: calculator.dos +gi.dynamic + +You can point your browser to http://localhost:8086/CalculatorService?wsdl to see +the WSDL. + +You can also use the WebService Explorer from Eclipse WTP to test the Web Service. + +To stop the bundle: + +osgi> stop 198 +Nov 4, 2009 5:21:16 PM org.apache.tuscany.sca.node.impl.NodeImpl stop +INFO: Stopping node: urn:osgi.service.d5a06834-ae15-42b3-9287-71fe6537c869 +Nov 4, 2009 5:21:16 PM org.apache.tuscany.sca.core.assembly.impl.EndpointRegistr +yImpl endpointRemoved +INFO: Remove endpoint - (@23394516)Endpoint: URI = osgi.service.d5a06834-ae15-4 +2b3-9287-71fe6537c869#service-binding(CalculatorService/Calculator) +Nov 4, 2009 5:21:16 PM org.apache.tuscany.sca.http.jetty.JettyServer removeServl +etMapping +INFO: Removed Servlet mapping: /CalculatorService +Nov 4, 2009 5:21:16 PM calculator.dosgi.impl.CalculatorActivator stop +INFO: Stopping calculator.dosgi.dynamic_1.0.0 [198] +Nov 4, 2009 5:21:16 PM org.apache.tuscany.sca.node.impl.NodeImpl stop +INFO: Stopping node: urn:osgi.service.d5a06834-ae15-42b3-9287-71fe6537c869 + +To exit the console, run: +osgi> exit + +Sample Overview +--------------- +The application consists of two OSGi bundles: + * The calculator bundle: It provides the calculator service. The service is implemented by a java class that + consumes other services to perform the “add”, “subtract”, “multiply” and “divide” operations. + * The operations bundle: It provides the add/subtract/multiply/divide services. + (See ../samples/dosgi-dynamic-calculator-operations) + + +dosgi-dynamic-calculator/ + src/ + main/ + java/ + calculator/ + dosgi/ + CalculatorService.java - The interface for Calculator service + impl/ + CalculatorActivator.java - OSGi bundle activator for Calculator bundle + CalculatorServiceDSImpl.java - OSGi declarative service based implementation + CalculatorServiceImpl.java - Basic OSGi implementation + operations/ + AddService.java - Interface for Add + SubtractService.java - Interface for Subtract + MultiplyService.java - Interface for Multiply + DivideService.java - Interface for Divide + rmi/ + OperationsRemote.java - RMI remote interface for operations + OperationsRMIServer_Stub.java - RMI stub + OperationsRMIServer.java - RMI server implementation of the operations + resources/ + META-INF/ + sca-contribution.xml + OSGI-INF/ + sca-config/ + calculator-config.xml - The SCA configuration file for OSGi remote services + remote-service/ + calculator-service-descriptions.xml - The OSGi remote service endpoint descriptions + test/ + java/ + src/ + calculator/ + dosgi/ + test/ + CalculatorOSGiNodeTestCase.java - The JUNIT test case that tests this bundle against a RMI service + + META-INF/ + MANIFEST.MF - The OSGi manifest for this bundle + dosig-calculator.png - a pictorial representation of the sample + pom.xml - the Maven build file + + + +Building And Running The Test Case Using Maven +------------------------------------------- +With either the binary or source distributions the sample can be built and run +using Maven as follows. + +cd dosgi-calculator +mvn + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator/dosgi-calculator.png b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator/dosgi-calculator.png new file mode 100644 index 0000000000..805baa54d2 Binary files /dev/null and b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator/dosgi-calculator.png differ diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator/pom.xml b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator/pom.xml new file mode 100644 index 0000000000..5232d65f03 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator/pom.xml @@ -0,0 +1,153 @@ + + + + 4.0.0 + + org.apache.tuscany.sca + tuscany-sca + 2.0-M5.1 + ../../pom.xml + + + sample-dosgi-dynamic-calculator + Apache Tuscany SCA OSGi Remote Services Dynamic Caculator Sample + + + + org.apache.tuscany.sca + tuscany-feature-ejava + 2.0-M5.1 + pom + + + org.apache.tuscany.sca + tuscany-feature-webservice + 2.0-M5.1 + pom + runtime + + + org.apache.tuscany.sca + tuscany-node-launcher-equinox + 2.0-M5.1 + test + + + + org.apache.tuscany.sca + tuscany-node-impl-osgi + 2.0-M5.1 + runtime + + + + org.eclipse.osgi + services + 3.2.0-v20090520-1800 + + + + junit + junit + 4.8.1 + test + + + + + org.eclipse.equinox + ds + 1.1.0-v20090601 + test + + + + org.eclipse.equinox + util + 1.0.100-v20090520-1800 + test + + + + + + ${artifactId} + + + maven-eclipse-plugin + 2.5.1 + + + org.eclipse.pde.ManifestBuilder + org.eclipse.jdt.core.javabuilder + + + org.eclipse.jdt.core.javanature + org.eclipse.pde.PluginNature + + + org.eclipse.jdt.launching.JRE_CONTAINER + + + + + + + maven-jar-plugin + + + ${basedir}/META-INF/MANIFEST.MF + + + + + + org.apache.tuscany.maven.plugins + maven-osgi-junit-plugin + 1.0 + + + org.apache.tuscany.sca + tuscany-node-launcher-equinox + ${pom.version} + + + + + osgi-test + test + + test + + + + + osgi.configuration.area + ${project.build.directory}/equinox + + + + + + + + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator/src/main/java/calculator/dosgi/CalculatorService.java b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator/src/main/java/calculator/dosgi/CalculatorService.java new file mode 100644 index 0000000000..cc562b7c2f --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator/src/main/java/calculator/dosgi/CalculatorService.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 calculator.dosgi; + +import org.oasisopen.sca.annotation.Remotable; + +/** + * The Calculator service interface. + */ +@Remotable +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/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator/src/main/java/calculator/dosgi/impl/CalculatorActivator.java b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator/src/main/java/calculator/dosgi/impl/CalculatorActivator.java new file mode 100644 index 0000000000..6228afcd53 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator/src/main/java/calculator/dosgi/impl/CalculatorActivator.java @@ -0,0 +1,78 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT 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.dosgi.impl; + +import java.util.Dictionary; +import java.util.Hashtable; +import java.util.logging.Logger; + +import org.osgi.framework.Bundle; +import org.osgi.framework.BundleActivator; +import org.osgi.framework.BundleContext; +import org.osgi.framework.ServiceReference; +import org.osgi.service.packageadmin.PackageAdmin; + +import calculator.dosgi.CalculatorService; +import calculator.dosgi.operations.AddService; + +/** + * + */ +public class CalculatorActivator implements BundleActivator { + private Logger logger = Logger.getLogger(CalculatorActivator.class.getName()); + + private Bundle getBundle(BundleContext bundleContext, Class cls) { + PackageAdmin packageAdmin = null; + // PackageAdmin is used to resolve bundles + ServiceReference ref = bundleContext.getServiceReference("org.osgi.service.packageadmin.PackageAdmin"); + if (ref != null) { + packageAdmin = (PackageAdmin)bundleContext.getService(ref); + Bundle bundle = packageAdmin.getBundle(cls); + if (bundle != null) { + logger.info(cls.getName() + " is loaded by bundle: " + bundle.getSymbolicName()); + } + bundleContext.ungetService(ref); + return bundle; + } + return null; + } + + public void start(BundleContext context) throws Exception { + logger.info("Starting " + context.getBundle()); + Dictionary props = new Hashtable(); + props.put("sca.service", "CalculatorComponent#service-name(Calculator)"); + props.put("calculator", "Calculator"); + props.put("service.exported.configs", new String[] {"org.osgi.sca"}); + props.put("org.osgi.sca.bindings", new String[] {"{http://sample}Calculator"}); + props.put("service.exported.interfaces", new String[] {"*"}); + logger.info("Registering " + CalculatorService.class.getName()); + CalculatorService calculator = new CalculatorServiceImpl(context); + context.registerService(CalculatorService.class.getName(), calculator, props); + + getBundle(context, AddService.class); + + } + + public void stop(BundleContext context) throws Exception { + logger.info("Stopping " + context.getBundle()); + // Registered services will be automatically unregistered + } + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator/src/main/java/calculator/dosgi/impl/CalculatorServiceDSImpl.java b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator/src/main/java/calculator/dosgi/impl/CalculatorServiceDSImpl.java new file mode 100644 index 0000000000..5f9db16ca9 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator/src/main/java/calculator/dosgi/impl/CalculatorServiceDSImpl.java @@ -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. + */ +package calculator.dosgi.impl; + +import org.osgi.service.component.ComponentContext; + +import calculator.dosgi.CalculatorService; +import calculator.dosgi.operations.AddService; +import calculator.dosgi.operations.DivideService; +import calculator.dosgi.operations.MultiplyService; +import calculator.dosgi.operations.SubtractService; + +/** + * An implementation of the Calculator service. + */ +public class CalculatorServiceDSImpl implements CalculatorService { + private AddService addService; + private SubtractService subtractService; + private MultiplyService multiplyService; + private DivideService divideService; + + public CalculatorServiceDSImpl() { + super(); + System.out.println("CalculatorServiceDSImpl()"); + } + + protected void activate(ComponentContext context) { + System.out.println("Activating " + context); + } + + protected void deactivate(ComponentContext context) { + System.out.println("Deactivating " + context); + } + + /* + * The following setters can be used for DS injection + */ + public void setAddService(AddService addService) { + System.out.println("setAddService()"); + this.addService = addService; + } + + public void setSubtractService(SubtractService subtractService) { + this.subtractService = subtractService; + } + + public void setDivideService(DivideService divideService) { + this.divideService = divideService; + } + + public void setMultiplyService(MultiplyService multiplyService) { + this.multiplyService = multiplyService; + } + + /* + * The following setters can be used for DS injection + */ + public void unsetAddService(AddService addService) { + System.out.println("unsetAddService()"); + this.addService = null; + } + + public void unsetSubtractService(SubtractService subtractService) { + this.subtractService = null; + } + + public void unsetDivideService(DivideService divideService) { + this.divideService = null; + } + + public void unsetMultiplyService(MultiplyService multiplyService) { + this.multiplyService = null; + } + private T getService(Class cls) { + for (Object s : new Object[] {addService, subtractService, multiplyService, divideService}) { + if (cls.isInstance(s)) { + return cls.cast(s); + } + } + throw new IllegalStateException(cls.getSimpleName() + " is not available"); + } + + public double add(double n1, double n2) { + return getService(AddService.class).add(n1, n2); + } + + public double subtract(double n1, double n2) { + return getService(SubtractService.class).subtract(n1, n2); + } + + public double multiply(double n1, double n2) { + return getService(MultiplyService.class).multiply(n1, n2); + } + + public double divide(double n1, double n2) { + return getService(DivideService.class).divide(n1, n2); + } +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator/src/main/java/calculator/dosgi/impl/CalculatorServiceImpl.java b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator/src/main/java/calculator/dosgi/impl/CalculatorServiceImpl.java new file mode 100644 index 0000000000..aa09b27139 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator/src/main/java/calculator/dosgi/impl/CalculatorServiceImpl.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 calculator.dosgi.impl; + +import static org.osgi.framework.Constants.OBJECTCLASS; + +import java.util.HashMap; +import java.util.Map; + +import org.osgi.framework.BundleContext; +import org.osgi.framework.Filter; +import org.osgi.framework.InvalidSyntaxException; +import org.osgi.util.tracker.ServiceTracker; + +import calculator.dosgi.CalculatorService; +import calculator.dosgi.operations.AddService; +import calculator.dosgi.operations.DivideService; +import calculator.dosgi.operations.MultiplyService; +import calculator.dosgi.operations.SubtractService; + +/** + * An implementation of the Calculator service. + */ +public class CalculatorServiceImpl implements CalculatorService { + private Map, ServiceTracker> remoteServices = new HashMap, ServiceTracker>(); + + public CalculatorServiceImpl() { + super(); + } + + public CalculatorServiceImpl(BundleContext context) { + super(); + for (Class cls : new Class[] {AddService.class, SubtractService.class, MultiplyService.class, + DivideService.class}) { + Filter remoteFilter = null; + try { + remoteFilter = + context.createFilter("(&(" + OBJECTCLASS + "=" + cls.getName() + ") (service.imported=*))"); + } catch (InvalidSyntaxException e) { + e.printStackTrace(); + } + ServiceTracker tracker = new ServiceTracker(context, remoteFilter, null); + this.remoteServices.put(cls, tracker); + tracker.open(); + } + } + + private T getService(Class cls) { + ServiceTracker tracker = remoteServices.get(cls); + try { + // Wait for 10 seconds until the remote services are imported + tracker.waitForService(10000); + } catch (InterruptedException e) { + throw new IllegalStateException(cls.getSimpleName() + " is not available"); + } + Object[] remoteObjects = tracker.getServices(); + if (remoteObjects != null) { + for (Object s : remoteObjects) { + if (cls.isInstance(s)) { + System.out.println("Remote service: " + s); + return cls.cast(s); + } + } + } + throw new IllegalStateException(cls.getSimpleName() + " is not available"); + } + + public double add(double n1, double n2) { + return getService(AddService.class).add(n1, n2); + } + + public double subtract(double n1, double n2) { + return getService(SubtractService.class).subtract(n1, n2); + } + + public double multiply(double n1, double n2) { + return getService(MultiplyService.class).multiply(n1, n2); + } + + public double divide(double n1, double n2) { + return getService(DivideService.class).divide(n1, n2); + } +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator/src/main/java/calculator/dosgi/operations/AddService.java b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator/src/main/java/calculator/dosgi/operations/AddService.java new file mode 100644 index 0000000000..971500782f --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator/src/main/java/calculator/dosgi/operations/AddService.java @@ -0,0 +1,31 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT 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.dosgi.operations; + +import org.oasisopen.sca.annotation.Remotable; + +/** + * The interface for the add service + */ +@Remotable +public interface AddService { + + double add(double n1, double n2); + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator/src/main/java/calculator/dosgi/operations/DivideService.java b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator/src/main/java/calculator/dosgi/operations/DivideService.java new file mode 100644 index 0000000000..49b8a1c0bf --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator/src/main/java/calculator/dosgi/operations/DivideService.java @@ -0,0 +1,31 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT 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.dosgi.operations; + +import org.oasisopen.sca.annotation.Remotable; + +/** + * The interface for the divide service + */ +@Remotable +public interface DivideService { + + double divide(double n1, double n2); + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator/src/main/java/calculator/dosgi/operations/MultiplyService.java b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator/src/main/java/calculator/dosgi/operations/MultiplyService.java new file mode 100644 index 0000000000..f4e59d12ea --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator/src/main/java/calculator/dosgi/operations/MultiplyService.java @@ -0,0 +1,31 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT 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.dosgi.operations; + +import org.oasisopen.sca.annotation.Remotable; + +/** + * The interface for the multiply service + */ +@Remotable +public interface MultiplyService { + + double multiply(double n1, double n2); + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator/src/main/java/calculator/dosgi/operations/SubtractService.java b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator/src/main/java/calculator/dosgi/operations/SubtractService.java new file mode 100644 index 0000000000..bfb9b820f7 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator/src/main/java/calculator/dosgi/operations/SubtractService.java @@ -0,0 +1,31 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT 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.dosgi.operations; + +import org.oasisopen.sca.annotation.Remotable; + +/** + * The interface for the subtract service + */ +@Remotable +public interface SubtractService { + + double subtract(double n1, double n2); + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator/src/main/java/calculator/rmi/OperationsRMIServer.java b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator/src/main/java/calculator/rmi/OperationsRMIServer.java new file mode 100644 index 0000000000..a4fc52694e --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator/src/main/java/calculator/rmi/OperationsRMIServer.java @@ -0,0 +1,93 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT 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.rmi; + +import java.io.Serializable; +import java.rmi.Remote; +import java.rmi.RemoteException; +import java.rmi.registry.LocateRegistry; +import java.rmi.registry.Registry; +import java.rmi.server.UnicastRemoteObject; + +/** + * + */ +public class OperationsRMIServer implements OperationsRemote, Serializable { + + private static final long serialVersionUID = 6081008315263103012L; + private transient Registry registry; + + public OperationsRMIServer() throws RemoteException { + super(); + } + + public double add(double n1, double n2) { + return n1 + n2; + } + + public double subtract(double n1, double n2) { + return n1 - n2; + } + + public double divide(double n1, double n2) { + return n1 / n2; + } + + public double multiply(double n1, double n2) { + return n1 * n2; + } + + public void start() throws RemoteException { + Thread thread = new Thread() { + public void run() { + try { + System.out.println("Starting the RMI server for calculator operations..."); + Remote stub = UnicastRemoteObject.exportObject(OperationsRMIServer.this); + registry = LocateRegistry.createRegistry(8085); + registry.bind("AddService", stub); + registry.bind("SubtractService", stub); + registry.bind("MultiplyService", stub); + registry.bind("DivideService", stub); + System.out.println("RMI server for calculator operations is now started."); + } catch (Exception e) { + e.printStackTrace(); + } + } + }; + thread.start(); + } + + public void stop() { + if (registry != null) { + try { + registry.unbind("AddService"); + registry.unbind("SubtractService"); + registry.unbind("MultiplyService"); + registry.unbind("DivideService"); + UnicastRemoteObject.unexportObject(this, false); + UnicastRemoteObject.unexportObject(registry, false); + registry = null; + } catch (Exception e) { + e.printStackTrace(); + } + } + } + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator/src/main/java/calculator/rmi/OperationsRMIServer_Stub.java b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator/src/main/java/calculator/rmi/OperationsRMIServer_Stub.java new file mode 100644 index 0000000000..a813dfb6f3 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator/src/main/java/calculator/rmi/OperationsRMIServer_Stub.java @@ -0,0 +1,132 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +// Stub class generated by rmic, do not edit. +// Contents subject to change without notice. +package calculator.rmi; + +public final class OperationsRMIServer_Stub extends java.rmi.server.RemoteStub implements calculator.rmi.OperationsRemote { + private static final long serialVersionUID = 2; + + private static java.lang.reflect.Method $method_add_0; + private static java.lang.reflect.Method $method_divide_1; + private static java.lang.reflect.Method $method_multiply_2; + private static java.lang.reflect.Method $method_subtract_3; + + static { + try { + $method_add_0 = + calculator.rmi.OperationsRemote.class.getMethod("add", new java.lang.Class[] {double.class, double.class}); + $method_divide_1 = + calculator.rmi.OperationsRemote.class.getMethod("divide", + new java.lang.Class[] {double.class, double.class}); + $method_multiply_2 = + calculator.rmi.OperationsRemote.class.getMethod("multiply", new java.lang.Class[] {double.class, + double.class}); + $method_subtract_3 = + calculator.rmi.OperationsRemote.class.getMethod("subtract", new java.lang.Class[] {double.class, + double.class}); + } catch (java.lang.NoSuchMethodException e) { + throw new java.lang.NoSuchMethodError("stub class initialization failed"); + } + } + + // constructors + public OperationsRMIServer_Stub(java.rmi.server.RemoteRef ref) { + super(ref); + } + + // methods from remote interfaces + + // implementation of add(double, double) + public double add(double $param_double_1, double $param_double_2) throws java.rmi.RemoteException { + try { + Object $result = + ref.invoke(this, + $method_add_0, + new java.lang.Object[] {new java.lang.Double($param_double_1), + new java.lang.Double($param_double_2)}, + 864055858262779977L); + return ((java.lang.Double)$result).doubleValue(); + } catch (java.lang.RuntimeException e) { + throw e; + } catch (java.rmi.RemoteException e) { + throw e; + } catch (java.lang.Exception e) { + throw new java.rmi.UnexpectedException("undeclared checked exception", e); + } + } + + // implementation of divide(double, double) + public double divide(double $param_double_1, double $param_double_2) throws java.rmi.RemoteException { + try { + Object $result = + ref.invoke(this, + $method_divide_1, + new java.lang.Object[] {new java.lang.Double($param_double_1), + new java.lang.Double($param_double_2)}, + 8097593626497421928L); + return ((java.lang.Double)$result).doubleValue(); + } catch (java.lang.RuntimeException e) { + throw e; + } catch (java.rmi.RemoteException e) { + throw e; + } catch (java.lang.Exception e) { + throw new java.rmi.UnexpectedException("undeclared checked exception", e); + } + } + + // implementation of multiply(double, double) + public double multiply(double $param_double_1, double $param_double_2) throws java.rmi.RemoteException { + try { + Object $result = + ref.invoke(this, + $method_multiply_2, + new java.lang.Object[] {new java.lang.Double($param_double_1), + new java.lang.Double($param_double_2)}, + -346155016949350695L); + return ((java.lang.Double)$result).doubleValue(); + } catch (java.lang.RuntimeException e) { + throw e; + } catch (java.rmi.RemoteException e) { + throw e; + } catch (java.lang.Exception e) { + throw new java.rmi.UnexpectedException("undeclared checked exception", e); + } + } + + // implementation of subtract(double, double) + public double subtract(double $param_double_1, double $param_double_2) throws java.rmi.RemoteException { + try { + Object $result = + ref.invoke(this, + $method_subtract_3, + new java.lang.Object[] {new java.lang.Double($param_double_1), + new java.lang.Double($param_double_2)}, + -610707357620578750L); + return ((java.lang.Double)$result).doubleValue(); + } catch (java.lang.RuntimeException e) { + throw e; + } catch (java.rmi.RemoteException e) { + throw e; + } catch (java.lang.Exception e) { + throw new java.rmi.UnexpectedException("undeclared checked exception", e); + } + } +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator/src/main/java/calculator/rmi/OperationsRemote.java b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator/src/main/java/calculator/rmi/OperationsRemote.java new file mode 100644 index 0000000000..955e386ad8 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator/src/main/java/calculator/rmi/OperationsRemote.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 calculator.rmi; + +import java.rmi.Remote; +import java.rmi.RemoteException; + +/** + * RMI Remote interface + */ +public interface OperationsRemote extends Remote { + double add(double n1, double n2) throws RemoteException; + + double subtract(double n1, double n2) throws RemoteException; + + double multiply(double n1, double n2) throws RemoteException; + + double divide(double n1, double n2) throws RemoteException; + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator/src/test/java/calculator/dosgi/test/CalculatorNode.java b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator/src/test/java/calculator/dosgi/test/CalculatorNode.java new file mode 100644 index 0000000000..565a314d85 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator/src/test/java/calculator/dosgi/test/CalculatorNode.java @@ -0,0 +1,43 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package calculator.dosgi.test; + +import org.apache.tuscany.sca.node.equinox.launcher.NodeLauncher; + +/** + * + */ +public class CalculatorNode { + + /** + * @param args + */ + public static void main(String[] args) { + if (args.length == 0) { + args = new String[] {"-bundles"}; + } + try { + NodeLauncher.main(args); + } catch (Exception e) { + e.printStackTrace(); + } + } + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator/src/test/java/calculator/dosgi/test/CalculatorOSGiNodeTestCase.java b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator/src/test/java/calculator/dosgi/test/CalculatorOSGiNodeTestCase.java new file mode 100644 index 0000000000..4015c7bbc2 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/dosgi-dynamic-calculator/src/test/java/calculator/dosgi/test/CalculatorOSGiNodeTestCase.java @@ -0,0 +1,144 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT 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.dosgi.test; + +import static calculator.dosgi.test.OSGiTestUtils.bundleStatus; + +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.Reader; +import java.net.URL; + +import org.apache.tuscany.sca.node.equinox.launcher.EquinoxHost; +import org.junit.AfterClass; +import org.junit.Assert; +import org.junit.BeforeClass; +import org.junit.Test; +import org.osgi.framework.Bundle; +import org.osgi.framework.BundleContext; +import org.osgi.framework.Constants; +import org.osgi.framework.ServiceReference; + +import calculator.dosgi.CalculatorService; +import calculator.rmi.OperationsRMIServer; + +/** + * + */ +public class CalculatorOSGiNodeTestCase { + private static EquinoxHost host; + private static BundleContext context; + private static Bundle calculatorBundle; + private static OperationsRMIServer rmiServer; + + /** + * @throws java.lang.Exception + */ + @BeforeClass + public static void setUpBeforeClass() throws Exception { + try { + rmiServer = new OperationsRMIServer(); + rmiServer.start(); + + host = new EquinoxHost(); + context = host.start(); + + for (Bundle b : context.getBundles()) { + System.out.println(b); + if (b.getSymbolicName().equals("org.eclipse.equinox.ds") || b.getSymbolicName() + .startsWith("org.apache.tuscany.sca.")) { + try { + if (b.getHeaders().get(Constants.FRAGMENT_HOST) == null) { + // Start the non-fragment bundle + b.start(); + } + } catch (Exception e) { + e.printStackTrace(); + } + System.out.println(bundleStatus(b, false)); + } + if ("calculator.dosgi.dynamic".equals(b.getSymbolicName())) { + calculatorBundle = b; + } + } + + if (calculatorBundle != null) { + calculatorBundle.start(); + System.out.println(bundleStatus(calculatorBundle, false)); + } + + } catch (Exception e) { + e.printStackTrace(); + throw e; + } + } + + @Test + public void testOSGi() { + ServiceReference ref = + calculatorBundle.getBundleContext().getServiceReference(CalculatorService.class.getName()); + Assert.assertNotNull(ref); + Object service = context.getService(ref); + Assert.assertNotNull(service); + CalculatorService calculator = OSGiTestUtils.cast(service, CalculatorService.class); + System.out.println("2.0 + 1.0 = " + calculator.add(2.0, 1.0)); + System.out.println("2.0 - 1.0 = " + calculator.subtract(2.0, 1.0)); + System.out.println("2.0 * 1.0 = " + calculator.multiply(2.0, 1.0)); + System.out.println("2.0 / 1.0 = " + calculator.divide(2.0, 1.0)); + } + + @Test + /** + * Test the Web service exposed by the Calculator + */ + public void testWS() throws Exception { + URL url = new URL("http://localhost:8086/CalculatorService?wsdl"); + InputStream is = url.openStream(); + Reader reader = new InputStreamReader(is); + char[] content = new char[10240]; // 10k + int len = 0; + while (true) { + int size = reader.read(content, len, content.length - len); + if (size < 0) { + break; + } + len += size; + } + Assert.assertTrue(len > 0); + String str = new String(content, 0, len); + System.out.println(str); + Assert.assertTrue(str.indexOf(" + * @param obj + * @param cls + * @return + */ + public static T cast(Object obj, Class cls) { + if (cls.isInstance(obj)) { + return cls.cast(obj); + } else { + return cls.cast(Proxy.newProxyInstance(cls.getClassLoader(), + new Class[] {cls}, + new InvocationHandlerImpl(obj))); + } + } +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-bpel/README b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-bpel/README new file mode 100644 index 0000000000..533743ebf6 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-bpel/README @@ -0,0 +1,153 @@ +Hello World BPEL Sample +====================================== +This sample demonstrates an SCA service implemented by a BPEL process. + +The README in the /samples directory provides +general instructions about building and running samples. (where +distribution-unpack-dir is the directory in which you unpacked the tuscany +binary distribution archive). Take a look there first (noting at you read it that this sample +is not a new style sample). + +If you just want to run it to see what happens open a command prompt, navigate +to this sample directory, and do + +ant compile run + +OR if you don't have ant, on Windows do + +mkdir target\classes +mkdir target\wsdl2java-source +java -cp ..\..\lib\tuscany-sca-manifest.jar org.apache.tuscany.sdo.generate.XSD2JavaGenerator -targetDirectory target/wsdl2java-source -prefix HelloWorld -noContainment -noUnsettable src/main/resources/helloworld.wsdl +java -cp ..\..\lib\tuscany-sca-manifest.jar org.apache.tuscany.tools.wsdl2java.generate.WSDL2JavaGenerator -targetDirectory target/wsdl2java-source src/main/resources/helloworld.wsdl +unzip ..\..\lib\ode-dao-jpa-ojpa-derby-1.1.zip -d target\database +javac -d target\classes -cp target\classes;..\..\lib\tuscany-sca-manifest.jar -sourcepath src\main\java;target\wsdl2java-source -target 1.5 -g -source 1.5 src\main\java\helloworld\BPELClient.java +copy src\main\resources\* target\classes +java -cp ..\..\lib\tuscany-sca-manifest.jar;target\classes;target\database helloworld.BPELClient + +and on *nix do + +mkdir target/classes +mkdir target/wsdl2java-source +java -cp ../../lib/tuscany-sca-manifest.jar org.apache.tuscany.sdo.generate.XSD2JavaGenerator -targetDirectory target/wsdl2java-source -prefix HelloWorld -noContainment -noUnsettable src/main/resources/helloworld.wsdl +java -cp ../../lib/tuscany-sca-manifest.jar org.apache.tuscany.tools.wsdl2java.generate.WSDL2JavaGenerator -targetDirectory target/wsdl2java-source src/main/resources/helloworld.wsdl +unzip ../../lib/ode-dao-jpa-ojpa-derby-1.1.zip -d target/database +javac -d target/classes -cp target/classes;../../lib/tuscany-sca-manifest.jar -sourcepath src/main/java;target/wsdl2java-source -target 1.5 -g -source 1.5 src/main/java/helloworld/BPELClient.java +cp src/main/resources/* target/classes +java -cp ../../lib/tuscany-sca-manifest.jar:target/classes:target/database helloworld.BPELClient + +The sample will start an embedded BPEL engine, deploy a process and invoke it. + +Sample Overview +--------------- +The sample provides a single component that is wired to a service with a +web service binding. + +helloworld-bpel/ + src/ + main/ + java/ + helloworld/ + BPELClient.java - client application for + BEPELHelloWorldComponent + + resources/ + deploy.xml - ODE deployment descriptor + helloworld.bpel - helloworld bpel process + helloworld.componentType - helloworld bpel service description + helloworld.composite - the SCA assembly for this sample + helloworld.wsdl - the service description that describes + the bpel process + log4j.properties - logging configuration + + test/ + java/ + helloworld/ + BPELHelloWorldTestCase.java - JUnit test case + helloworld-bpel.png - a pictorial representation of the + sample .composite file + build.xml - the Ant build file + pom.xml - the Maven build file + +Building And Running The Sample Using Ant +----------------------------------------- + +With the binary distribution the sample can be built and run using Ant as +follows + +cd helloworld-bpel +ant compile +ant run + + +You should see the following output from the run target. + +run: + [java] Starting BPELHelloWorldComponent + [java] >>> Deploying : D:\temp\SCA1.1-RC1\tuscany-sca-1.1-incubating\samples\helloworld-bpel\target\classes + [java] ::arg:::::: + [java] Hello + [java] ::message:: + [java] Hello + [java] Status: RESPONSE + [java] Response: + [java] Hello World + [java] Hello World + [java] Stopping BPELHelloWorldComponent + [java] Stopped !!! + +BUILD SUCCESSFUL +Total time: 36 seconds + +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. When using Maven, a simple test is present that exercise +the same logic as the client to invoke the BPEl process. + +cd helloworld-bpel +mvn + +You should see the following output from the test phase. + +- + +------------------------------------------------------- + T E S T S +------------------------------------------------------- +Running helloworld.BPELHelloWorldTestCase +Starting BPELHelloWorldComponent +>>> Deploying : D:\dev\Opensource\Apache\Tuscany\source\java-sca-1.1\samples\helloworld-bpel\target\classes +::arg:::::: +Hello +::message:: +Hello +Status: RESPONSE +Response: +Hello World +Stopping BPELHelloWorldComponent +Stopped !!! +Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 18.656 sec + +Results : + +Tests run: 1, Failures: 0, Errors: 0, Skipped: 0 + +[INFO] [jar:jar] +[INFO] Building jar: D:\dev\Opensource\Apache\Tuscany\source\java-sca-1.1\samples\helloworld-bpel\target\sample-helloworld-bpel.jar +[INFO] [install:install] +[INFO] Installing D:\dev\Opensource\Apache\Tuscany\source\java-sca-1.1\samples\helloworld-bpel\target\sample-helloworld-bpel.jar to C:\Documents and Settings\lresend +e\.m2\repository\org\apache\tuscany\sca\sample-helloworld-bpel\1.1-incubating-SNAPSHOT\sample-helloworld-bpel-1.1-incubating-SNAPSHOT.jar +[INFO] ------------------------------------------------------------------------ +[INFO] BUILD SUCCESSFUL +[INFO] ------------------------------------------------------------------------ +[INFO] Total time: 53 seconds +[INFO] Finished at: Sun Jan 13 09:54:39 PST 2008 +[INFO] Final Memory: 24M/43M +[INFO] ------------------------------------------------------------------------ + + +This shows that the Junit test cases have run successfully. diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-bpel/build.xml b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-bpel/build.xml new file mode 100644 index 0000000000..008953e63b --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-bpel/build.xml @@ -0,0 +1,95 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-bpel/helloworld-bpel.png b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-bpel/helloworld-bpel.png new file mode 100644 index 0000000000..5f53a3c5d1 Binary files /dev/null and b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-bpel/helloworld-bpel.png differ diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-bpel/helloworld-bpel.svg b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-bpel/helloworld-bpel.svg new file mode 100644 index 0000000000..5a98f1a07c --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-bpel/helloworld-bpel.svg @@ -0,0 +1,179 @@ + + + + + + + + + + image/svg+xml + + + + + + + + helloworldws + + HelloWorldServiceComponent + + HelloWorldWebService + + implementation.bpel helloworld.bpel + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-bpel/pom.xml b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-bpel/pom.xml new file mode 100644 index 0000000000..c06b033e17 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-bpel/pom.xml @@ -0,0 +1,76 @@ + + + + 4.0.0 + + org.apache.tuscany.sca + tuscany-sca + 2.0-M5.1 + ../../pom.xml + + + zip + sample-helloworld-bpel + Apache Tuscany SCA Sample HelloWorld BPEL + + + + org.apache.tuscany.sca + tuscany-sca-api + 2.0-M5.1 + provided + + + junit + junit + 4.8.1 + test + + + + + ${artifactId} + + + + + org.apache.tuscany.maven.plugins + maven-zip-plugin + alpha2 + true + + + + + org.apache.tuscany.maven.plugins + maven-tuscany-plugin + 2.0-M5.1 + + + org.apache.tuscany.sca.shades + tuscany-bpel + 2.0-M5.1 + + + + + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-bpel/src/main/java/helloworld/Hello.java b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-bpel/src/main/java/helloworld/Hello.java new file mode 100644 index 0000000000..dbd3854d7c --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-bpel/src/main/java/helloworld/Hello.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 helloworld; + +import org.oasisopen.sca.annotation.Remotable; + +@Remotable +public interface Hello { + + String hello(String name); + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-bpel/src/main/resources/META-INF/sca-contribution.xml b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-bpel/src/main/resources/META-INF/sca-contribution.xml new file mode 100644 index 0000000000..4a56523adb --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-bpel/src/main/resources/META-INF/sca-contribution.xml @@ -0,0 +1,23 @@ + + + + + \ No newline at end of file diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-bpel/src/main/resources/helloworld.bpel b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-bpel/src/main/resources/helloworld.bpel new file mode 100644 index 0000000000..d58768adfa --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-bpel/src/main/resources/helloworld.bpel @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + concat($helloMessage.TestPart/test:arg0/text(), ' World') + + + + + + + + + Dummy + + + + + + + + $helloMessageResponse.TestResponse/test:messageResponse + + + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-bpel/src/main/resources/helloworld.composite b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-bpel/src/main/resources/helloworld.composite new file mode 100644 index 0000000000..08350e8417 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-bpel/src/main/resources/helloworld.composite @@ -0,0 +1,29 @@ + + + + + + + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-bpel/src/main/resources/helloworld.wsdl b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-bpel/src/main/resources/helloworld.wsdl new file mode 100644 index 0000000000..cf966264ef --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-bpel/src/main/resources/helloworld.wsdl @@ -0,0 +1,94 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-bpel/src/main/resources/log4j.properties b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-bpel/src/main/resources/log4j.properties new file mode 100644 index 0000000000..8649a71550 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-bpel/src/main/resources/log4j.properties @@ -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. +# + +# Set root logger level to WARN and its only appender to CONSOLE +log4j.rootLogger=OFF, CONSOLE + +# log4j properties to work with commandline tools. +log4j.category.org.mortbay=OFF +log4j.category.org.hibernate.type=OFF +log4j.category.org.objectweb=OFF +log4j.category.org.apache.ode.sql=OFF +log4j.category.org.apache.ode.axis2=OFF +log4j.category.org.apache.ode.bpel.engine=OFF +log4j.category.org.apache.ode.daohib.bpel.CorrelatorDaoImpl=OFF +log4j.category.org.apache.ode.bpel.epr=OFF +log4j.category.org.apache.openjpa.kernel=OFF + +# Console appender +log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender +log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout +log4j.appender.CONSOLE.layout.ConversionPattern=%p - %C{1}.%M(%L) | %m%n \ No newline at end of file diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-scaclient/pom.xml b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-scaclient/pom.xml new file mode 100644 index 0000000000..f29a86a9a9 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-scaclient/pom.xml @@ -0,0 +1,69 @@ + + + + 4.0.0 + + org.apache.tuscany.sca + tuscany-sca + 2.0-M5.1 + ../../pom.xml + + + sample-helloworld-scaclient + Apache Tuscany SCA Sample Helloworld SCAClient + + + + + org.apache.tuscany.sca.shades + tuscany-base + 2.0-M5.1 + + + + junit + junit + 4.8.1 + test + + + + + + ${artifactId} + + + org.codehaus.mojo + exec-maven-plugin + 1.1.1 + + + + java + + + + + sample.HelloworldSCAClient + + + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-scaclient/src/main/java/sample/Helloworld.java b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-scaclient/src/main/java/sample/Helloworld.java new file mode 100644 index 0000000000..f4e8c50448 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-scaclient/src/main/java/sample/Helloworld.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 sample; + +import org.oasisopen.sca.annotation.Remotable; + +@Remotable +public interface Helloworld { + + String sayHello(String name); + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-scaclient/src/main/java/sample/HelloworldSCAClient.java b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-scaclient/src/main/java/sample/HelloworldSCAClient.java new file mode 100644 index 0000000000..c2c9c4e44e --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-scaclient/src/main/java/sample/HelloworldSCAClient.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 sample; + +import java.net.URI; + +import org.oasisopen.sca.NoSuchDomainException; +import org.oasisopen.sca.NoSuchServiceException; +import org.oasisopen.sca.client.SCAClientFactory; + +public class HelloworldSCAClient { + + public static void main(String[] args) throws NoSuchDomainException, NoSuchServiceException { + + String domainURI = "default"; + String name = "world"; + + if (args.length == 2) { + domainURI= args[0]; + name = args[1]; + } else if (args.length == 1) { + domainURI= args[0]; + } + + System.out.println("using domain uri: " + domainURI); + System.out.println("using name: " + name); + + SCAClientFactory factory = SCAClientFactory.newInstance(URI.create(domainURI)); + Helloworld service = factory.getService(Helloworld.class, "HelloworldComponent"); + + System.out.println("Calling HelloworldComponent.sayHello(\"" + name + "\")"); + System.out.println(service.sayHello(name)); + } + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-scaclient/src/test/java/sample/HelloworldTestCase.java b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-scaclient/src/test/java/sample/HelloworldTestCase.java new file mode 100644 index 0000000000..13e08de692 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-scaclient/src/test/java/sample/HelloworldTestCase.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 sample; + +import static org.junit.Assert.assertEquals; + +import org.junit.Test; + +public class HelloworldTestCase { + + @Test + public void testSayHello() { + HelloworldSCAClient helloworld = new HelloworldSCAClient(); +// assertEquals("Hello Petra", helloworld.sayHello("Petra")); + } + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-spring/pom.xml b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-spring/pom.xml new file mode 100644 index 0000000000..05b43c67d8 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-spring/pom.xml @@ -0,0 +1,67 @@ + + + + 4.0.0 + + org.apache.tuscany.sca + tuscany-sca + 2.0-M5.1 + ../../pom.xml + + + sample-helloworld-spring + Apache Tuscany SCA Sample HelloWorld using Spring + + + + org.apache.tuscany.sca + tuscany-sca-api + 2.0-M5.1 + provided + + + junit + junit + 4.8.1 + test + + + + + ${artifactId} + + + + + org.apache.tuscany.maven.plugins + maven-tuscany-plugin + 2.0-M5.1 + + + org.apache.tuscany.sca.shades + tuscany-spring + 2.0-M5.1 + + + + + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-spring/src/main/java/sample/Helloworld.java b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-spring/src/main/java/sample/Helloworld.java new file mode 100644 index 0000000000..f4e8c50448 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-spring/src/main/java/sample/Helloworld.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 sample; + +import org.oasisopen.sca.annotation.Remotable; + +@Remotable +public interface Helloworld { + + String sayHello(String name); + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-spring/src/main/java/sample/HelloworldImpl.java b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-spring/src/main/java/sample/HelloworldImpl.java new file mode 100644 index 0000000000..ac03ea3ca6 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-spring/src/main/java/sample/HelloworldImpl.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 sample; + + +public class HelloworldImpl implements Helloworld { + + public String sayHello(String name) { + return "Hello " + name; + } + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-spring/src/main/resources/META-INF/sca-contribution.xml b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-spring/src/main/resources/META-INF/sca-contribution.xml new file mode 100644 index 0000000000..552d100638 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-spring/src/main/resources/META-INF/sca-contribution.xml @@ -0,0 +1,23 @@ + + + + + \ No newline at end of file diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-spring/src/main/resources/helloworld-context.xml b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-spring/src/main/resources/helloworld-context.xml new file mode 100644 index 0000000000..89b2cfb6f5 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-spring/src/main/resources/helloworld-context.xml @@ -0,0 +1,30 @@ + + + + + + + + \ No newline at end of file diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-spring/src/main/resources/helloworld.composite b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-spring/src/main/resources/helloworld.composite new file mode 100644 index 0000000000..33895dde25 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-spring/src/main/resources/helloworld.composite @@ -0,0 +1,29 @@ + + + + + + + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-spring/src/test/java/sample/HelloworldTestCase.java b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-spring/src/test/java/sample/HelloworldTestCase.java new file mode 100644 index 0000000000..7e679ec0e9 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-spring/src/test/java/sample/HelloworldTestCase.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 sample; + +import static org.junit.Assert.assertEquals; + +import org.junit.Test; + +public class HelloworldTestCase { + + @Test + public void testSayHello() { + HelloworldImpl helloworld = new HelloworldImpl(); + assertEquals("Hello Petra", helloworld.sayHello("Petra")); + } + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-ws-sdo/README b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-ws-sdo/README new file mode 100644 index 0000000000..be947b1923 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-ws-sdo/README @@ -0,0 +1,214 @@ +Hello World Web Service References using SDO Sample +=================================================== +This sample demonstrates an SCA reference that uses a web service binding which works with SDO. + +The README in the samples directory (the directory above this) provides +general instructions about building and running samples. Take a look there +first. + +To run this sample +------------------ +This sample is dependent on helloworld-ws-service. Open a command prompt to start +the service. If you are running ant do the following: + +cd helloworld-ws-service +ant run + +if you don't have ant, issue one of the following commands for windows or *nix: + +java -cp ..\..\lib\tuscany-sca-manifest.jar;target\sample-helloworld-ws-service.jar helloworld.HelloWorldServer + +and on *nix do + +java -cp ../../lib/tuscany-sca-manifest.jar:target/sample-helloworld-ws-service.jar helloworld.HelloWorldServer + +You should see the following output: + +Buildfile: build.xml + +run-server: + [java] log4j:WARN No appenders could be found for logger (org.apache.axiom. +om.util.StAXUtils). + [java] log4j:WARN Please initialize the log4j system properly. + [java] Aug 24, 2007 11:17:33 AM org.apache.catalina.core.StandardEngine sta +rt + [java] INFO: Starting Servlet Engine: Apache Tomcat/6.0.10 + [java] Aug 24, 2007 11:17:34 AM org.apache.catalina.startup.ContextConfig d +efaultWebConfig + [java] INFO: No default web.xml + [java] Aug 24, 2007 11:17:34 AM org.apache.catalina.startup.DigesterFactory + register + [java] WARNING: Could not get url for /javax/servlet/jsp/resources/jsp_2_0. +xsd + [java] Aug 24, 2007 11:17:34 AM org.apache.catalina.startup.DigesterFactory + register + [java] WARNING: Could not get url for /javax/servlet/jsp/resources/web-jspt +aglibrary_1_1.dtd + [java] Aug 24, 2007 11:17:34 AM org.apache.catalina.startup.DigesterFactory + register + [java] WARNING: Could not get url for /javax/servlet/jsp/resources/web-jspt +aglibrary_1_2.dtd + [java] Aug 24, 2007 11:17:34 AM org.apache.catalina.startup.DigesterFactory + register + [java] WARNING: Could not get url for /javax/servlet/jsp/resources/web-jspt +aglibrary_2_0.xsd + [java] Aug 24, 2007 11:17:34 AM org.apache.catalina.startup.DigesterFactory + register + [java] WARNING: Could not get url for /javax/servlet/resources/j2ee_web_ser +vices_1_1.xsd + [java] Aug 24, 2007 11:17:34 AM org.apache.coyote.http11.Http11Protocol ini +t + [java] INFO: Initializing Coyote HTTP/1.1 on http-8085 + [java] Aug 24, 2007 11:17:34 AM org.apache.coyote.http11.Http11Protocol sta +rt + [java] INFO: Starting Coyote HTTP/1.1 on http-8085 + [java] Aug 24, 2007 11:17:34 AM org.apache.tuscany.sca.http.tomcat.TomcatSe +rver addServletMapping + [java] INFO: Added Servlet mapping: http://localhost:8085/HelloWorldService + + [java] HelloWorld server started (press enter to shutdown) + +The server is now ready. + + +Now, open another command window to run the client. + +cd helloworld-ws-sdo +ant run + +OR if you don't have ant, on Windows do + +java -cp ..\..\lib\tuscany-sca-manifest.jar;target\sample-helloworld-ws-sdo.jar helloworld.HelloWorldClient + +and on *nix do + +java -cp ../../lib/tuscany-sca-manifest.jar:target/sample-helloworld-ws-sdo.jar helloworl.HelloWorldClient + +You should be able to see the following result: + +Buildfile: build.xml + +run: + [java] log4j:WARN No appenders could be found for logger (org.apache.axiom. +om.util.StAXUtils). + [java] log4j:WARN Please initialize the log4j system properly. + [java] Injected helloWorldService + [java] Called getGreetings + [java] Hello David Haney + +BUILD SUCCESSFUL +Total time: 9 seconds + + +Sample Overview +--------------- +The sample provides a single component that is wired to a reference with a +web service binding. The binding refers to WSDL that identifies the service +exposed by the helloworld-ws-service sample. + +helloworld-ws-sdo/ + src/ + main/ + java/ + helloworld/ + HelloWorldService.java - interface description for + HelloWorldServiceComponent + HelloWorldServiceComponent.java - component implementation + HelloWorldClient.java - starts the SCA Runtime and + deploys the helloworldwsclient + .composite. It then calls the + HelloWorldServiceComponent + resources/ + wsdl + helloworld.wsdl - the service description that the + SCA reference uses to bind to service. + + test/ + java/ + helloworld/ + HelloWorldClientTestCase.java - JUnit test case + helloworld-ws-sdo.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 +----------------------------------------- +You can build and run the sample with the binary distribution using Ant. +Make sure that you have started helloworld-ws-service which this sample is dependent on +in a separate command window. You can either follow the instruction at the begining of this +sample file or if you want to build and run the service, follow the README under helloworld-ws-service. + +Now, let's build and run helloworld-ws-sdo sample: + +cd helloworld-ws-sdo +ant +ant run + +You should see the following output from the run target. + +run: + [java] log4j:WARN No appenders could be found for logger (org.apache.axiom. +om.util.StAXUtils). + [java] log4j:WARN Please initialize the log4j system properly. + [java] Injected helloWorldService + [java] Called getGreetings + [java] Hello World + +Building And Running The Sample Using Maven +------------------------------------------- +You can build and run the sample with either the binary or source distributions using Maven. Please note that you do not need to start helloworld-ws-service in this case since Maven does this for you. + +cd helloworld-ws-sdo +mvn + +You should see the following output from the test phase. + +------------------------------------------------------- + T E S T S +------------------------------------------------------- +Running helloworld.HelloWorldClientTestCase +log4j:WARN No appenders could be found for logger (org.apache.axiom.om.util.StAX +Utils). +log4j:WARN Please initialize the log4j system properly. +log4j:WARN No appenders could be found for logger (org.apache.axiom.om.util.StAX +Utils). +log4j:WARN Please initialize the log4j system properly. +Aug 23, 2007 2:27:32 PM org.apache.catalina.core.StandardEngine start +INFO: Starting Servlet Engine: Apache Tomcat/6.0.10 +Aug 23, 2007 2:27:32 PM org.apache.catalina.startup.ContextConfig defaultWebConf +ig +INFO: No default web.xml +Aug 23, 2007 2:27:32 PM org.apache.catalina.startup.DigesterFactory register +WARNING: Could not get url for /javax/servlet/jsp/resources/jsp_2_0.xsd +Aug 23, 2007 2:27:32 PM org.apache.catalina.startup.DigesterFactory register +WARNING: Could not get url for /javax/servlet/jsp/resources/web-jsptaglibrary_1_ +1.dtd +Aug 23, 2007 2:27:32 PM org.apache.catalina.startup.DigesterFactory register +WARNING: Could not get url for /javax/servlet/jsp/resources/web-jsptaglibrary_1_ +2.dtd +Aug 23, 2007 2:27:32 PM org.apache.catalina.startup.DigesterFactory register +WARNING: Could not get url for /javax/servlet/jsp/resources/web-jsptaglibrary_2_ +0.xsd +Aug 23, 2007 2:27:32 PM org.apache.catalina.startup.DigesterFactory register +WARNING: Could not get url for /javax/servlet/resources/j2ee_web_services_1_1.xs +d +Aug 23, 2007 2:27:32 PM org.apache.coyote.http11.Http11Protocol init +INFO: Initializing Coyote HTTP/1.1 on http-8085 +Aug 23, 2007 2:27:32 PM org.apache.coyote.http11.Http11Protocol start +INFO: Starting Coyote HTTP/1.1 on http-8085 +Aug 23, 2007 2:27:32 PM org.apache.tuscany.sca.http.tomcat.TomcatServer addServl +etMapping +INFO: Added Servlet mapping: http://localhost:8085/HelloWorldService +Injected helloWorldService +Called getGreetings +Aug 23, 2007 2:27:34 PM org.apache.coyote.http11.Http11Protocol destroy +INFO: Stopping Coyote HTTP/1.1 on http-8085 +Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 8.502 sec + +Results : + +Tests run: 1, Failures: 0, Errors: 0, Skipped: 0 + + +This shows that the Junit test cases have run successfully. diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-ws-sdo/build.xml b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-ws-sdo/build.xml new file mode 100644 index 0000000000..401315d424 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-ws-sdo/build.xml @@ -0,0 +1,101 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-ws-sdo/helloworld-ws-sdo.png b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-ws-sdo/helloworld-ws-sdo.png new file mode 100644 index 0000000000..bd2bba41db Binary files /dev/null and b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-ws-sdo/helloworld-ws-sdo.png differ diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-ws-sdo/maven-eclipse.xml b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-ws-sdo/maven-eclipse.xml new file mode 100644 index 0000000000..3adfca89f4 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-ws-sdo/maven-eclipse.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-ws-sdo/pom.xml b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-ws-sdo/pom.xml new file mode 100644 index 0000000000..1dbe48716f --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-ws-sdo/pom.xml @@ -0,0 +1,180 @@ + + + + 4.0.0 + + org.apache.tuscany.sca + tuscany-sca + 2.0-M5.1 + ../../pom.xml + + sample-helloworld-ws-sdo + Apache Tuscany SCA Sample HelloWorld Web Service SDO + + + + org.apache.tuscany.sca + tuscany-node-api + 2.0-M5.1 + + + + org.apache.tuscany.sca + tuscany-node-impl + 2.0-M5.1 + runtime + + + org.apache.tuscany.sca + tuscany-implementation-java-runtime + 2.0-M5.1 + runtime + + + + org.apache.tuscany.sca + tuscany-binding-ws-runtime-axis2 + 2.0-M5.1 + runtime + + + + org.apache.tuscany.sdo + tuscany-sdo-lib + 1.1.1 + + + org.apache.tuscany.sdo + tuscany-sdo-impl + 1.1.1 + + + backport-util-concurrent + backport-util-concurrent + + + + + backport-util-concurrent + backport-util-concurrent + 3.1 + + + org.apache.tuscany.sca + tuscany-databinding-sdo + 2.0-M5.1 + compile + + + + org.apache.tuscany.sca + tuscany-host-jetty + 2.0-M5.1 + runtime + + + + junit + junit + 4.5 + test + + + + + + ${artifactId} + + + + + + org.apache.tuscany.maven.plugins + maven-tuscany-plugin + 2.0-M5.1 + + + org.apache.tuscany.sca + tuscany-databinding-sdo + 2.0-M5.1 + + + + + + org.codehaus.mojo + build-helper-maven-plugin + 1.0 + + + add-source + generate-sources + + add-test-source + + + + target/sdo-source + + + + + + + org.apache.tuscany.sdo + tuscany-sdo-plugin + 1.1.1 + + + generate-helloworld-sdo + generate-sources + + ${basedir}/src/main/resources/wsdl/helloworld.wsdl + helloworld + Helloworld + true + true + true + + + generate + + + + generate-helloworld-sdo1 + generate-sources + + ${basedir}/src/main/resources/test.xsd + model.sdo + Entity + true + true + true + + + generate + + + + + + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-ws-sdo/src/main/java/helloworld/HelloWorldClient.java b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-ws-sdo/src/main/java/helloworld/HelloWorldClient.java new file mode 100644 index 0000000000..ebc270811f --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-ws-sdo/src/main/java/helloworld/HelloWorldClient.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 helloworld; + +import org.apache.tuscany.sca.node.Contribution; +import org.apache.tuscany.sca.node.ContributionLocationHelper; +import org.apache.tuscany.sca.node.Node; +import org.apache.tuscany.sca.node.NodeFactory; + +/** + * This client program shows how to create an SCA runtime, start it, locate the + * HelloWorld service and invoke it. + */ +public class HelloWorldClient { + + public final static void main(String[] args) throws Exception { + + NodeFactory factory = NodeFactory.newInstance(); + String contribution = ContributionLocationHelper.getContributionLocation(HelloWorldClient.class); + Node node = + factory.createNode("helloworldwsclient.composite", new Contribution("helloworld", contribution)).start(); + + HelloWorldService helloWorldService = node.getService(HelloWorldService.class, "HelloWorldServiceComponent"); + + Name name = HelloworldFactory.INSTANCE.createName(); + + name.setFirst("David"); + name.setLast("Haney"); + + String value = helloWorldService.getGreetings(name); + System.out.println(value); + + node.stop(); + } +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-ws-sdo/src/main/java/helloworld/HelloWorldImpl.java b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-ws-sdo/src/main/java/helloworld/HelloWorldImpl.java new file mode 100644 index 0000000000..c42a4d59c3 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-ws-sdo/src/main/java/helloworld/HelloWorldImpl.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 helloworld; + +import org.oasisopen.sca.annotation.Service; + +/** + * This class implements the HelloWorld service. + */ +@Service(HelloWorldService.class) +public class HelloWorldImpl implements HelloWorldService { + + public String getGreetings(Name name) { + return "Hello " + name.getFirst() + " " + name.getLast(); + } + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-ws-sdo/src/main/java/helloworld/HelloWorldServer.java b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-ws-sdo/src/main/java/helloworld/HelloWorldServer.java new file mode 100644 index 0000000000..ff5cb4ceda --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-ws-sdo/src/main/java/helloworld/HelloWorldServer.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 helloworld; + +import java.io.IOException; + +import org.apache.tuscany.sca.node.Contribution; +import org.apache.tuscany.sca.node.ContributionLocationHelper; +import org.apache.tuscany.sca.node.Node; +import org.apache.tuscany.sca.node.NodeFactory; + +/** + * This server program shows how to create an SCA runtime, and start it which + * activates the helloworld Web service endpoint. + */ +public class HelloWorldServer { + + public static void main(String[] args) { + + NodeFactory factory = NodeFactory.newInstance(); + String contribution = ContributionLocationHelper.getContributionLocation(HelloWorldServer.class); + Node node = factory.createNode("helloworldws.composite", new Contribution("helloworld", contribution)).start(); + + try { + System.out.println("HelloWorld server started (press enter to shutdown)"); + System.in.read(); + } catch (IOException e) { + e.printStackTrace(); + } + + node.stop(); + System.out.println("HelloWorld server stopped"); + } + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-ws-sdo/src/main/java/helloworld/HelloWorldService.java b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-ws-sdo/src/main/java/helloworld/HelloWorldService.java new file mode 100644 index 0000000000..fa257a0605 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-ws-sdo/src/main/java/helloworld/HelloWorldService.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 helloworld; + +import javax.xml.ws.RequestWrapper; +import javax.xml.ws.ResponseWrapper; + +import org.oasisopen.sca.annotation.Remotable; + +/** + * The interface for the helloworld service + */ +@Remotable +public interface HelloWorldService { + @RequestWrapper(className="helloworld.getGreetings") + @ResponseWrapper(className="helloworld.getGreetingsResponse") + public String getGreetings(Name name); +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-ws-sdo/src/main/java/helloworld/HelloWorldServiceComponent.java b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-ws-sdo/src/main/java/helloworld/HelloWorldServiceComponent.java new file mode 100644 index 0000000000..711eef63b5 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-ws-sdo/src/main/java/helloworld/HelloWorldServiceComponent.java @@ -0,0 +1,42 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package helloworld; + +/** + * The HelloWorld service implementation + */ +public class HelloWorldServiceComponent implements HelloWorldService { + + HelloWorldService helloWorldService; + + public String getGreetings(Name name) { + System.out.println("Called getGreetings"); + return helloWorldService.getGreetings(name); + } + + public HelloWorldService getHelloWorldService() { + System.out.println("Got Injected helloWorldService"); + return helloWorldService; + } + + public void setHelloWorldService(HelloWorldService helloWorldService) { + System.out.println("Injected helloWorldService"); + this.helloWorldService = helloWorldService; + } +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-ws-sdo/src/main/java/services/bcircle/BioTestCase.java b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-ws-sdo/src/main/java/services/bcircle/BioTestCase.java new file mode 100644 index 0000000000..d222d77b3b --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-ws-sdo/src/main/java/services/bcircle/BioTestCase.java @@ -0,0 +1,59 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT 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.bcircle; + +import model.sdo.EntityFactory; +import model.sdo.Laboratory; + +import org.apache.tuscany.sca.node.Contribution; +import org.apache.tuscany.sca.node.ContributionLocationHelper; +import org.apache.tuscany.sca.node.Node; +import org.apache.tuscany.sca.node.NodeFactory; + +public class BioTestCase { + + /** + * @param args + */ + public static void main(String[] args) { + BiochemicalCircle biochemicalCircl = new BiochemicalCircleImpl(); + Laboratory lab2 = biochemicalCircl.getLaboratory("Lab2"); //This invocation without use SCA works ok. + + NodeFactory factory = NodeFactory.newInstance(); + String contribution = ContributionLocationHelper.getContributionLocation(BioTestCase.class); + Node node = + factory.createNode("resources/clinicalLaboratory.composite", new Contribution("clinical", contribution)) + .start(); + + BiochemicalCircle biochemicalCircle = node.getService(BiochemicalCircle.class, "BiochemicalCircleComponent"); + + Laboratory lab = EntityFactory.INSTANCE.createLaboratory(); + lab.setName("lab2"); + biochemicalCircle.setLaboratory(lab); // this invocation works ok too + + lab = biochemicalCircle.getLaboratory("Lab2"); // here I have an exception posted below. + + //here I wait a moment before close scaDomain + System.out.println(lab.getName()); + + node.stop(); + + } +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-ws-sdo/src/main/java/services/bcircle/BiochemicalCircle.java b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-ws-sdo/src/main/java/services/bcircle/BiochemicalCircle.java new file mode 100644 index 0000000000..a988a4156c --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-ws-sdo/src/main/java/services/bcircle/BiochemicalCircle.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.bcircle; + +import org.oasisopen.sca.annotation.Remotable; + +@Remotable +public interface BiochemicalCircle { + void setLaboratory(model.sdo.Laboratory lab); + + model.sdo.Laboratory getLaboratory(String name); +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-ws-sdo/src/main/java/services/bcircle/BiochemicalCircleImpl.java b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-ws-sdo/src/main/java/services/bcircle/BiochemicalCircleImpl.java new file mode 100644 index 0000000000..b609f58373 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-ws-sdo/src/main/java/services/bcircle/BiochemicalCircleImpl.java @@ -0,0 +1,40 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package services.bcircle; +import model.sdo.EntityFactory; +import model.sdo.Laboratory; + +import org.oasisopen.sca.annotation.Service; + + +@Service(BiochemicalCircle.class) +public class BiochemicalCircleImpl implements BiochemicalCircle{ + public Laboratory getLaboratory(String name) { + + Laboratory lab = EntityFactory.INSTANCE.createLaboratory(); + lab.setName("Main Laboratory"); + return lab; + } + + public void setLaboratory(Laboratory lab) { + //sad method + System.out.println(lab.getName()); + } +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-ws-sdo/src/main/resources/META-INF/sca-contribution.xml b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-ws-sdo/src/main/resources/META-INF/sca-contribution.xml new file mode 100644 index 0000000000..f8b2a60f6a --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-ws-sdo/src/main/resources/META-INF/sca-contribution.xml @@ -0,0 +1,28 @@ + + + + + + + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-ws-sdo/src/main/resources/helloworldws.composite b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-ws-sdo/src/main/resources/helloworldws.composite new file mode 100644 index 0000000000..46c819d08c --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-ws-sdo/src/main/resources/helloworldws.composite @@ -0,0 +1,31 @@ + + + + + + + + + + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-ws-sdo/src/main/resources/helloworldwsclient.composite b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-ws-sdo/src/main/resources/helloworldwsclient.composite new file mode 100644 index 0000000000..65b0e294a8 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-ws-sdo/src/main/resources/helloworldwsclient.composite @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-ws-sdo/src/main/resources/logging.properties b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-ws-sdo/src/main/resources/logging.properties new file mode 100644 index 0000000000..3dca310cdb --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-ws-sdo/src/main/resources/logging.properties @@ -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. +# +# $Rev$ $Date$ +# + +# Custom logging configuration for Tuscany samples +# By default, only INFO level logging is enabled and ALL messages get sent to the console +# For more messages from the runtime, uncomment specific settings at the end of this file +handlers = java.util.logging.ConsoleHandler +java.util.logging.ConsoleHandler.level = ALL +java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter +.level=INFO + +# Uncomment the next setting to get all Tuscany messages (this will be a lot) +#org.apache.tuscany.level=FINEST diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-ws-sdo/src/main/resources/resources/clinicalLaboratory.composite b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-ws-sdo/src/main/resources/resources/clinicalLaboratory.composite new file mode 100644 index 0000000000..0451cee24c --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-ws-sdo/src/main/resources/resources/clinicalLaboratory.composite @@ -0,0 +1,34 @@ + + + + + + + + + + + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-ws-sdo/src/main/resources/test.xsd b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-ws-sdo/src/main/resources/test.xsd new file mode 100644 index 0000000000..7fd9aa0013 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-ws-sdo/src/main/resources/test.xsd @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-ws-sdo/src/main/resources/wsdl/helloworld.wsdl b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-ws-sdo/src/main/resources/wsdl/helloworld.wsdl new file mode 100644 index 0000000000..882819110f --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-ws-sdo/src/main/resources/wsdl/helloworld.wsdl @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-ws-sdo/src/test/java/helloworld/HelloWorldClientTestCase.java b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-ws-sdo/src/test/java/helloworld/HelloWorldClientTestCase.java new file mode 100644 index 0000000000..3918f9a4a5 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-ws-sdo/src/test/java/helloworld/HelloWorldClientTestCase.java @@ -0,0 +1,85 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT 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 helloworld; + +import junit.framework.Assert; + +import org.apache.tuscany.sca.node.Contribution; +import org.apache.tuscany.sca.node.ContributionLocationHelper; +import org.apache.tuscany.sca.node.Node; +import org.apache.tuscany.sca.node.NodeFactory; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +/** + * Test case for helloworld web service client + */ +public class HelloWorldClientTestCase { + + private HelloWorldService helloWorldService; + private static Node node; + + private TestCaseRunner server; + + @Before + public void startClient() throws Exception { + try { + + NodeFactory factory = NodeFactory.newInstance(); + String contribution = ContributionLocationHelper.getContributionLocation(HelloWorldClient.class); + node = + factory.createNode("helloworldwsclient.composite", new Contribution("helloworld", contribution)) + .start(); + + helloWorldService = node.getService(HelloWorldService.class, "HelloWorldServiceComponent"); + + server = new TestCaseRunner(HelloWorldTestServer.class); + server.before(); + + } catch (Throwable e) { + e.printStackTrace(); + } + } + + @Test + public void testWSClient() throws Exception { + Name name = HelloworldFactory.INSTANCE.createName(); + name.setFirst("John"); + name.setLast("Smith"); + String msg = helloWorldService.getGreetings(name); + Assert.assertEquals("Hello John Smith", msg); + } + + @After + public void stopClient() throws Exception { + server.after(); + node.stop(); + } + + public static void main(String[] args) throws Exception { + HelloWorldClientTestCase test = new HelloWorldClientTestCase(); + test.startClient(); + test.testWSClient(); + + System.in.read(); + } + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-ws-sdo/src/test/java/helloworld/HelloWorldTestServer.java b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-ws-sdo/src/test/java/helloworld/HelloWorldTestServer.java new file mode 100644 index 0000000000..98487ad88b --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-ws-sdo/src/test/java/helloworld/HelloWorldTestServer.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 helloworld; + +import java.io.IOException; +import java.net.Socket; + +import org.apache.tuscany.sca.node.Contribution; +import org.apache.tuscany.sca.node.ContributionLocationHelper; +import org.apache.tuscany.sca.node.Node; +import org.apache.tuscany.sca.node.NodeFactory; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +/** + * Starts up the SCA runtime which starts listening for service requests + */ +public class HelloWorldTestServer { + + private Node node; + + @Before + public void startServer() throws Exception { + try { + + NodeFactory factory = NodeFactory.newInstance(); + String contribution = ContributionLocationHelper.getContributionLocation(HelloWorldService.class); + node = factory.createNode("helloworldws.composite", new Contribution("helloworld", contribution)).start(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Test + public void testPing() throws IOException { + new Socket("127.0.0.1", 8085); + } + + @After + public void stopServer() throws Exception { + node.stop(); + } + + public static void main(String[] args) throws Exception { + + HelloWorldTestServer test = new HelloWorldTestServer(); + test.startServer(); + } + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-ws-sdo/src/test/java/helloworld/TestCaseRunner.java b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-ws-sdo/src/test/java/helloworld/TestCaseRunner.java new file mode 100644 index 0000000000..b6b4ed2254 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld-ws-sdo/src/test/java/helloworld/TestCaseRunner.java @@ -0,0 +1,329 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT 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 helloworld; + +import java.lang.annotation.Annotation; +import java.lang.reflect.Constructor; +import java.lang.reflect.Method; +import java.net.URL; +import java.net.URLClassLoader; +import java.security.AccessController; +import java.security.PrivilegedAction; +import java.util.Arrays; +import java.util.HashSet; +import java.util.Set; + +/** + * A helper class that can be used to run an SCA JUnit test case. The test case will run in an isolated class loader. + * + * @version $Rev$ $Date$ + */ +public class TestCaseRunner { + + private ClassLoader classLoader; + private Class testSuiteClass; + private Object testSuite; + private Class testResultClass; + private Class testCaseClass; + private Object testCase; + + private Class beforeAnnotation; + private Class beforeClassAnnotation; + private Class afterAnnotation; + private Class afterClassAnnotation; + private Class junit4AdapterClass; + private Class junit3TestCaseClass; + + /** + * Constructs a new TestCase runner. + * + * @param testClass + */ + public TestCaseRunner(Class testClass, String... isolatedClasses) { + try { + ClassLoader tccl = setupClassLoader(testClass, isolatedClasses); + + try { + // Thread.currentThread().setContextClassLoader(classLoader); + // Allow privileged access to set class loader. Requires RuntimePermission + // setContextClassLoader in security policy. + final ClassLoader finalClassLoader = classLoader; + AccessController.doPrivileged(new PrivilegedAction() { + public Object run() { + Thread.currentThread().setContextClassLoader(finalClassLoader); + return null; + } + }); + + testCaseClass = Class.forName(testClass.getName(), true, classLoader); + testCase = testCaseClass.newInstance(); + ClassLoader testClassLoader = testCaseClass.getClassLoader(); + + junit3TestCaseClass = Class.forName("junit.framework.TestCase", true, testClassLoader); + + testSuiteClass = Class.forName("junit.framework.TestSuite", true, testClassLoader); + Constructor testSuiteConstructor = testSuiteClass.getConstructor(Class.class); + testSuite = testSuiteConstructor.newInstance(testCaseClass); + + testResultClass = Class.forName("junit.framework.TestResult", true, testClassLoader); + + try { + beforeAnnotation = Class.forName("org.junit.Before", true, testClassLoader); + afterAnnotation = Class.forName("org.junit.After", true, testClassLoader); + beforeClassAnnotation = Class.forName("org.junit.BeforeClass", true, testClassLoader); + afterClassAnnotation = Class.forName("org.junit.AfterClass", true, testClassLoader); + junit4AdapterClass = Class.forName("junit.framework.JUnit4TestAdapter", true, testClassLoader); + } catch (Exception e) { + // Unexpected + throw new AssertionError(e); + } + } catch (Throwable e) { + e.printStackTrace(); + } finally { + // Thread.currentThread().setContextClassLoader(tccl); + // Allow privileged access to set class loader. Requires RuntimePermission + // setContextClassLoader in security policy. + final ClassLoader finaltccl = tccl; + AccessController.doPrivileged(new PrivilegedAction() { + public Object run() { + Thread.currentThread().setContextClassLoader(finaltccl); + return null; + } + }); + } + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + private ClassLoader setupClassLoader(Class testClass, String... isolatedClasses) { + ClassLoader tccl = Thread.currentThread().getContextClassLoader(); + classLoader = testClass.getClassLoader(); + if (classLoader instanceof URLClassLoader) { + URL[] urls = ((URLClassLoader)classLoader).getURLs(); + classLoader = new ClassLoaderImpl(urls, classLoader, isolatedClasses); + } else if (classLoader == tccl || classLoader.getParent() == tccl) { + classLoader = new URLClassLoader(new URL[0], classLoader); + } else { + classLoader = tccl; + } + return tccl; + } + + /** + * Run the test case + */ + public void run() { + ClassLoader tccl = Thread.currentThread().getContextClassLoader(); + try { + // Thread.currentThread().setContextClassLoader(classLoader); + // Allow privileged access to set class loader. Requires RuntimePermission + // setContextClassLoader in security policy. + final ClassLoader finalClassLoader = classLoader; + AccessController.doPrivileged(new PrivilegedAction() { + public Object run() { + Thread.currentThread().setContextClassLoader(finalClassLoader); + return null; + } + }); + + if (junit3TestCaseClass.isAssignableFrom(testCaseClass)) { + Object testResult = testResultClass.newInstance(); + Method runMethod = testSuiteClass.getMethod("run", testResultClass); + runMethod.invoke(testSuite, testResult); + } else { + Object junit4Adapter = junit4AdapterClass.getConstructor(Class.class).newInstance(testCaseClass); + Object testResult = testResultClass.newInstance(); + Method runMethod = junit4AdapterClass.getMethod("run", testResultClass); + runMethod.invoke(junit4Adapter, testResult); + } + } catch (Exception e) { + throw new RuntimeException(e); + } finally { + // Thread.currentThread().setContextClassLoader(tccl); + // Allow privileged access to set class loader. Requires RuntimePermission + // setContextClassLoader in security policy. + final ClassLoader finaltccl = tccl; + AccessController.doPrivileged(new PrivilegedAction() { + public Object run() { + Thread.currentThread().setContextClassLoader(finaltccl); + return null; + } + }); + } + } + + /** + * Invoke the setUp method + */ + public void setUp() { + execute("setUp"); + } + + /** + * Invoke the before methods + */ + public void before() { + execute(beforeAnnotation); + } + + /** + * Invoke the beforeClass methods + */ + public void beforeClass() { + execute(beforeClassAnnotation); + } + + /** + * Invoke the tearDown method + */ + public void tearDown() { + execute("tearDown"); + } + + /** + * Invoke the after methods + */ + public void after() { + execute(afterAnnotation); + } + + /** + * Invoke the afterClass methods + */ + public void afterClass() { + execute(afterClassAnnotation); + } + + /** + * Invoke the specified test method. + */ + public void run(String methodName) { + execute(methodName); + } + + /** + * Invoke the methods annotated with the specified annotation. + */ + private void execute(Class annotationClass) { + if (annotationClass == null) { + throw new RuntimeException(new NoSuchMethodException()); + } + ClassLoader tccl = Thread.currentThread().getContextClassLoader(); + try { + // Thread.currentThread().setContextClassLoader(classLoader); + // Allow privileged access to set class loader. Requires RuntimePermission + // setContextClassLoader in security policy. + final ClassLoader finalClassLoader = classLoader; + AccessController.doPrivileged(new PrivilegedAction() { + public Object run() { + Thread.currentThread().setContextClassLoader(finalClassLoader); + return null; + } + }); + + for (Method method : testCaseClass.getDeclaredMethods()) { + for (Annotation annotation : method.getAnnotations()) { + if (annotation.annotationType() == annotationClass) { + method.invoke(testCase); + } + } + } + } catch (Exception e) { + throw new RuntimeException(e); + } finally { + // Thread.currentThread().setContextClassLoader(tccl); + // Allow privileged access to set class loader. Requires RuntimePermission + // setContextClassLoader in security policy. + final ClassLoader finaltccl = tccl; + AccessController.doPrivileged(new PrivilegedAction() { + public Object run() { + Thread.currentThread().setContextClassLoader(finaltccl); + return null; + } + }); + } + } + + /** + * Invoke the specified method + */ + private void execute(String methodName) { + ClassLoader tccl = Thread.currentThread().getContextClassLoader(); + try { + // Thread.currentThread().setContextClassLoader(classLoader); + // Allow privileged access to set class loader. Requires RuntimePermission + // setContextClassLoader in security policy. + final ClassLoader finalClassLoader = classLoader; + AccessController.doPrivileged(new PrivilegedAction() { + public Object run() { + Thread.currentThread().setContextClassLoader(finalClassLoader); + return null; + } + }); + Method setUpMethod = testCaseClass.getDeclaredMethod(methodName); + setUpMethod.setAccessible(true); + setUpMethod.invoke(testCase); + } catch (Exception e) { + throw new RuntimeException(e); + } finally { + // Thread.currentThread().setContextClassLoader(tccl); + // Allow privileged access to set class loader. Requires RuntimePermission + // setContextClassLoader in security policy. + final ClassLoader finaltccl = tccl; + AccessController.doPrivileged(new PrivilegedAction() { + public Object run() { + Thread.currentThread().setContextClassLoader(finaltccl); + return null; + } + }); + } + } + + public static class ClassLoaderImpl extends URLClassLoader { + private Set isolatedClasses = new HashSet(); + + /** + * @param urls + * @param parent + */ + public ClassLoaderImpl(URL[] urls, ClassLoader parent, String... sharedClasses) { + super(urls, parent); + this.isolatedClasses.addAll(Arrays.asList(sharedClasses)); + } + + @Override + protected synchronized Class loadClass(String name, boolean resolve) throws ClassNotFoundException { + if (!isolatedClasses.contains(name)) { + return super.loadClass(name, resolve); + } else { + Class cls = findLoadedClass(name); + if (cls == null) { + cls = findClass(name); + } + if (resolve) { + resolveClass(cls); + } + return cls; + } + } + + } + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/helloworld/README b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld/README new file mode 100644 index 0000000000..ed0f1d0ce4 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld/README @@ -0,0 +1,7 @@ +The README in the /samples directory provides +general instructions about building and running samples. (where +distribution-unpack-dir is the directory in which you unpacked the tuscany +binary distribution archive). Take a look there first (noting at you read it that this sample +is not a new style sample). + +TODO - finish this \ No newline at end of file diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/helloworld/pom.xml b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld/pom.xml new file mode 100644 index 0000000000..b3b0fc3e14 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld/pom.xml @@ -0,0 +1,58 @@ + + + + 4.0.0 + + org.apache.tuscany.sca + tuscany-sca + 2.0-M5.1 + ../../pom.xml + + + jar + sample-helloworld + Apache Tuscany SCA Sample Helloworld + + + + org.apache.tuscany.sca + tuscany-sca-api + 2.0-M5.1 + provided + + + junit + junit + 4.8.1 + test + + + + + ${artifactId} + + + org.apache.tuscany.maven.plugins + maven-tuscany-plugin + 2.0-M5.1 + + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/helloworld/src/main/java/sample/Helloworld.java b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld/src/main/java/sample/Helloworld.java new file mode 100644 index 0000000000..f4e8c50448 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld/src/main/java/sample/Helloworld.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 sample; + +import org.oasisopen.sca.annotation.Remotable; + +@Remotable +public interface Helloworld { + + String sayHello(String name); + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/helloworld/src/main/java/sample/HelloworldImpl.java b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld/src/main/java/sample/HelloworldImpl.java new file mode 100644 index 0000000000..5bf6a94505 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld/src/main/java/sample/HelloworldImpl.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 sample; + +public class HelloworldImpl implements Helloworld { + + public String sayHello(String name) { + System.out.println("HelloworldImpl.sayHello " + name); + return "Hello " + name; + } + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/helloworld/src/main/resources/META-INF/sca-contribution.xml b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld/src/main/resources/META-INF/sca-contribution.xml new file mode 100644 index 0000000000..91b0c8fa6f --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld/src/main/resources/META-INF/sca-contribution.xml @@ -0,0 +1,23 @@ + + + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/helloworld/src/main/resources/helloworld.composite b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld/src/main/resources/helloworld.composite new file mode 100644 index 0000000000..324395c246 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld/src/main/resources/helloworld.composite @@ -0,0 +1,29 @@ + + + + + + + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/helloworld/src/test/java/sample/HelloworldTestCase.java b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld/src/test/java/sample/HelloworldTestCase.java new file mode 100644 index 0000000000..7e679ec0e9 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/helloworld/src/test/java/sample/HelloworldTestCase.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 sample; + +import static org.junit.Assert.assertEquals; + +import org.junit.Test; + +public class HelloworldTestCase { + + @Test + public void testSayHello() { + HelloworldImpl helloworld = new HelloworldImpl(); + assertEquals("Hello Petra", helloworld.sayHello("Petra")); + } + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/launcher-command-line/README b/sca-java-2.x/tags/2.0-M5.1/samples/launcher-command-line/README new file mode 100644 index 0000000000..bf963ea98e --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/launcher-command-line/README @@ -0,0 +1,13 @@ +To execute a sample contribution from the command line + +on Windows, from a command prompt in the samples directory, run the command ... + +..\bin\tuscany.bat "contribution-name" + +for example + +..\bin\tuscany.bat contribution-binding-sca-calculator + +or on *nix platforms, from a shell prompt in the samples directory, run the command ... + +../bin/tuscany.sh contribution-binding-sca-calculator diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/launcher-embedded-jse/README b/sca-java-2.x/tags/2.0-M5.1/samples/launcher-embedded-jse/README new file mode 100644 index 0000000000..359e5d134d --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/launcher-embedded-jse/README @@ -0,0 +1,20 @@ +JSE Sample Launcher +=================== + +This directory contains a sample java launcher for the +tuscany sample contributions. sample contributions. + +The README file in the /samples directory provides +general instructions about building and running sample contributions using the +tuscany sample launchers ( where distribution-unpack-dir is the directory in which you +unpacked the tuscany binary distribution archive) + +To use this sample JSE launcher with ant excute the command + +ant run- + +where run- is one of the targets in the build.xml file + +To use this sample launcher to run all of the contributions as junit test cases, +execute the command "mvn" in the launcher directory. + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/launcher-embedded-jse/build.xml b/sca-java-2.x/tags/2.0-M5.1/samples/launcher-embedded-jse/build.xml new file mode 100644 index 0000000000..89987056d2 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/launcher-embedded-jse/build.xml @@ -0,0 +1,119 @@ + + + + + + + + ${tuscany.home} + + + + + + + + + + + + + + + + + + + + + + + + + Please use 'ant run-name-of-sample-contribution-to-run' for example, try one of + 'ant run-contribution-binding-sca-calculator' + 'ant run-contribution-binding-ws-calculator' + 'ant run-contribution-binding-rmi-calculator' + 'ant run-contribution-implementation-java-calculator' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/launcher-embedded-jse/pom.xml b/sca-java-2.x/tags/2.0-M5.1/samples/launcher-embedded-jse/pom.xml new file mode 100644 index 0000000000..16274169d8 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/launcher-embedded-jse/pom.xml @@ -0,0 +1,76 @@ + + + + 4.0.0 + + org.apache.tuscany.sca + tuscany-sca + 2.0-M5.1 + ../../pom.xml + + sample-launcher-embedded-jse + Apache Tuscany SCA Sample Launcher Embedded JSE + + + + org.apache.tuscany.sca + tuscany-feature-api + pom + 2.0-M5.1 + + + + org.apache.tuscany.sca + tuscany-feature-core + pom + 2.0-M5.1 + + + + org.apache.tuscany.sca + tuscany-feature-webservice + pom + 2.0-M5.1 + + + + org.apache.tuscany.sca + tuscany-feature-ejava + pom + 2.0-M5.1 + + + + junit + junit + 4.8.1 + test + + + + + + ${artifactId} + + + + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/launcher-embedded-jse/src/main/java/calculator/CalculatorService.java b/sca-java-2.x/tags/2.0-M5.1/samples/launcher-embedded-jse/src/main/java/calculator/CalculatorService.java new file mode 100644 index 0000000000..12d80ffd1c --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/launcher-embedded-jse/src/main/java/calculator/CalculatorService.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 calculator; + +import org.oasisopen.sca.annotation.Remotable; + + +/** + * The Calculator service interface. + */ +@Remotable +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/sca-java-2.x/tags/2.0-M5.1/samples/launcher-embedded-jse/src/main/java/launcher/RuntimeIntegration.java b/sca-java-2.x/tags/2.0-M5.1/samples/launcher-embedded-jse/src/main/java/launcher/RuntimeIntegration.java new file mode 100644 index 0000000000..fdff16c12c --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/launcher-embedded-jse/src/main/java/launcher/RuntimeIntegration.java @@ -0,0 +1,43 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package launcher; + +import org.apache.tuscany.sca.node.Contribution; +import org.apache.tuscany.sca.node.Node; +import org.apache.tuscany.sca.node.NodeFactory; + + +/** + * Base JSE launcher function + */ +public class RuntimeIntegration { + + + public Node startNode(Contribution... contributions){ + Node node = NodeFactory.newInstance().createNode(contributions); + node.start(); + return node; + } + + public void stopNode(Node node){ + node.stop(); + } + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/launcher-embedded-jse/src/main/java/launcher/SampleJSELauncher.java b/sca-java-2.x/tags/2.0-M5.1/samples/launcher-embedded-jse/src/main/java/launcher/SampleJSELauncher.java new file mode 100644 index 0000000000..9a4a73c556 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/launcher-embedded-jse/src/main/java/launcher/SampleJSELauncher.java @@ -0,0 +1,150 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT 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 launcher; + +import org.apache.tuscany.sca.node.Contribution; +import org.apache.tuscany.sca.node.Node; + +import calculator.CalculatorService; + + +/** + * This client program shows how to create an embedded SCA runtime, load a contribution, + * start it and, in some cases, locate and invoke an SCA component + */ +public class SampleJSELauncher extends RuntimeIntegration { + + protected boolean waitBeforeStopping = false; + + public static void main(String[] args) throws Exception { + + // get the contribution name from the 1st argument it there is one + String contribution = null; + + if (args == null || args.length != 1){ + System.out.println("Please provide the name of the sample contribution to run as a parameter"); + System.out.println("Running binding-sca-calculator by default"); + contribution = "contribution-binding-sca-calculator"; + } else { + contribution = args[0]; + } + + // assume that more than one argument means that the caller wants to + // keep the SCA application running while other clients use the services + boolean waitBeforeStopping = false; + + if (args != null && args.length > 1 && args[1].equals("waitBeforeStopping")){ + waitBeforeStopping = true; + } + + SampleJSELauncher launcher = new SampleJSELauncher(waitBeforeStopping); + + if (contribution.equals("contribution-binding-sca-calculator")){ + launcher.launchBindingSCACalculator(); + } else if (contribution.equals("contribution-binding-ws-calculator")){ + launcher.launchBindingWSCalculator(); + } else if (contribution.equals("contribution-binding-rmi-calculator")){ + launcher.launchBindingRMICalculator(); + } else if (contribution.equals("contribution-implementation-java-calculator")){ + launcher.launchImplementationJavaCalculator(); + } else { + System.out.println("Sample contribution " + contribution + "not found"); + } + + } + + public SampleJSELauncher(boolean waitBeforeStopping){ + this.waitBeforeStopping = waitBeforeStopping; + } + + /** + * Wait for user input. Allows us to keep the Tuscany runtime and the SCA application + * running while other clients access the services provided + */ + public void waitBeforeStopping(){ + if (waitBeforeStopping){ + try { + System.out.println("Press key to continue"); + int input = System.in.read(); + } catch (Exception ex) { + // do nothing + } + } + } + + /** + * The contribution-binding-sca-calculator contribution includes a client component + * that calls the CalculatorServiceComponent from an operation marked by @Init. + */ + public void launchBindingSCACalculator(){ + Node node = startNode(new Contribution("c1", "../binding-sca/contribution-calculator/target/sample-contribution-binding-sca-calculator.jar")); + waitBeforeStopping(); + stopNode(node); + } + + /* + * Using a Tuscany specific mechanism for getting at local service proxies + */ + public void launchBindingWSCalculator(){ + Node node = startNode(new Contribution("c1", "../contribution-binding-ws-calculator/target/classes")); + + CalculatorService calculator = node.getService(CalculatorService.class, "CalculatorServiceComponent"); + // TODO - could use JUnit assertions but don't want to have to handle JUnit dependency from Ant script + double result = calculator.add(3, 2); + System.out.println("3 + 2 = " + result); + if (result != 5.0){ + throw new SampleLauncherException(); + } + + waitBeforeStopping(); + stopNode(node); + } + + /* + * Using a Tuscany specific mechanism for getting at local service proxies + */ + public void launchBindingRMICalculator(){ + Node node1 = startNode(new Contribution("c1", "../binding-rmi/contribution-calculator-service/target/classes")); + Node node2 = startNode(new Contribution("c1", "../binding-rmi/contribution-calculator-reference/target/classes")); + + CalculatorService calculator = node2.getService(CalculatorService.class, "CalculatorServiceComponent"); + // TODO - could use JUnit assertions but don't want to have to handle JUnit dependency from Ant script + double result = calculator.add(3, 2); + System.out.println("3 + 2 = " + result); + if (result != 5.0){ + throw new SampleLauncherException(); + } + + waitBeforeStopping(); + stopNode(node2); + stopNode(node1); + } + + /** + * The contribution-binding-sca-calculator contribution includes a client component + * that calls the CalculatorServiceComponent from an operation marked by @Init. + */ + public void launchImplementationJavaCalculator(){ + Node node = startNode(new Contribution("c1", "../contribution-implementation-java-calculator/target/classes")); + waitBeforeStopping(); + stopNode(node); + } + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/launcher-embedded-jse/src/main/java/launcher/SampleLauncherException.java b/sca-java-2.x/tags/2.0-M5.1/samples/launcher-embedded-jse/src/main/java/launcher/SampleLauncherException.java new file mode 100644 index 0000000000..f2ed3d421d --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/launcher-embedded-jse/src/main/java/launcher/SampleLauncherException.java @@ -0,0 +1,42 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package launcher; + +/** + * This exception signals problems in the management of SCA component execution. + */ +public class SampleLauncherException extends RuntimeException { + /** + * Constructs a SampleLauncherException with no detail message. + */ + public SampleLauncherException() { + super(); + } + + /** + * Constructs a SampleLauncherException with the specified detail + * message. + * + * @param message the detail message + */ + public SampleLauncherException(String message) { + super(message); + } + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/launcher-embedded-jse/src/test/java/launcher/LauncherTestCase.java b/sca-java-2.x/tags/2.0-M5.1/samples/launcher-embedded-jse/src/test/java/launcher/LauncherTestCase.java new file mode 100644 index 0000000000..3c2acbcc46 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/launcher-embedded-jse/src/test/java/launcher/LauncherTestCase.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 launcher; + +import org.junit.Test; + +/** + * Test sample contributions. + */ +public class LauncherTestCase { + + @Test + public void testContributionBindingSCACalculator() throws Exception { + SampleJSELauncher.main(new String[] {"contribution-binding-sca-calculator"}); + } + + @Test + public void testContributionBindingWSCalculator() throws Exception { + SampleJSELauncher.main(new String[] {"contribution-binding-ws-calculator"}); + } + + @Test + public void testContributionBindingRMICalculator() throws Exception { + SampleJSELauncher.main(new String[] {"contribution-binding-rmi-calculator"}); + } + + @Test + public void testContributionImplementationJavaCalculator() throws Exception { + SampleJSELauncher.main(new String[] {"contribution-implementation-java-calculator"}); + } +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/launcher-embedded-osgi/README b/sca-java-2.x/tags/2.0-M5.1/samples/launcher-embedded-osgi/README new file mode 100644 index 0000000000..01d277ae09 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/launcher-embedded-osgi/README @@ -0,0 +1,20 @@ +OSGI Sample Launcher +=================== + +This directory contains a sample launcher for the running the +tuscany sample contributions in an OSGI environment. + +The README file in the /samples directory provides +general instructions about building and running sample contributions using the +tuscany sample launchers. ( where +distribution-unpack-dir is the directory in which you unpacked the tuscany +binary distribution archive) + +To use this sample OSGI launcher with ant excute the command + +ant run- + +where run- is one of the targets in the build.xml file + +To use this sample launcher to run all of the contributions as junit test cases, +execute the command "mvn" in the launcher directory. diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/launcher-embedded-osgi/build.xml b/sca-java-2.x/tags/2.0-M5.1/samples/launcher-embedded-osgi/build.xml new file mode 100644 index 0000000000..f08d19e472 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/launcher-embedded-osgi/build.xml @@ -0,0 +1,94 @@ + + + + + + + ${tuscany.home} + + + + + + + + + + + + + + + + + + + + + + + + + Please use 'ant run-name-of-sample-contribution-to-run' for example, try one of + 'ant run-contribution-binding-sca-calculator' + + + + + + + + + + + + + + + and ant run + + + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/launcher-embedded-osgi/pom.xml b/sca-java-2.x/tags/2.0-M5.1/samples/launcher-embedded-osgi/pom.xml new file mode 100644 index 0000000000..7ed4af1267 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/launcher-embedded-osgi/pom.xml @@ -0,0 +1,76 @@ + + + + 4.0.0 + + org.apache.tuscany.sca + tuscany-sca + 2.0-M5.1 + ../../pom.xml + + sample-launcher-embedded-osgi + Apache Tuscany SCA Sample Launcher Embedded OSGi + + + + org.apache.tuscany.sca + tuscany-feature-api + pom + 2.0-M5.1 + + + + org.apache.tuscany.sca + tuscany-feature-core + pom + 2.0-M5.1 + + + + org.apache.tuscany.sca + tuscany-feature-webservice + pom + 2.0-M5.1 + + + + org.apache.tuscany.sca + tuscany-feature-ejava + pom + 2.0-M5.1 + + + + junit + junit + 4.8.1 + test + + + + + + ${artifactId} + + + + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/launcher-embedded-osgi/src/main/java/calculator/CalculatorService.java b/sca-java-2.x/tags/2.0-M5.1/samples/launcher-embedded-osgi/src/main/java/calculator/CalculatorService.java new file mode 100644 index 0000000000..12d80ffd1c --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/launcher-embedded-osgi/src/main/java/calculator/CalculatorService.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 calculator; + +import org.oasisopen.sca.annotation.Remotable; + + +/** + * The Calculator service interface. + */ +@Remotable +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/sca-java-2.x/tags/2.0-M5.1/samples/launcher-embedded-osgi/src/main/java/launcher/RuntimeIntegration.java b/sca-java-2.x/tags/2.0-M5.1/samples/launcher-embedded-osgi/src/main/java/launcher/RuntimeIntegration.java new file mode 100644 index 0000000000..f4a2f0780c --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/launcher-embedded-osgi/src/main/java/launcher/RuntimeIntegration.java @@ -0,0 +1,61 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT 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 launcher; + +import org.apache.tuscany.sca.node.Contribution; +import org.apache.tuscany.sca.node.Node; +import org.apache.tuscany.sca.node.equinox.launcher.LauncherException; +import org.apache.tuscany.sca.node.equinox.launcher.NodeLauncher; + + +/** + * OSGi launcher function + */ +public class RuntimeIntegration { + + public Node startNode(Contribution... contributions){ + NodeLauncher launcher = NodeLauncher.newInstance(); + + // TODO - why do we have 3 different versions of the Contribution class? + org.apache.tuscany.sca.node.equinox.launcher.Contribution equinoxContributions[] = + new org.apache.tuscany.sca.node.equinox.launcher.Contribution[contributions.length]; + int i = 0; + for (Contribution inContrib : contributions) { + org.apache.tuscany.sca.node.equinox.launcher.Contribution outContrib = + new org.apache.tuscany.sca.node.equinox.launcher.Contribution(inContrib.getURI(), inContrib.getLocation()); + equinoxContributions[i] = outContrib; + i++; + } + Node node = null; + + try { + node = launcher.createNode(null, equinoxContributions); + } catch (LauncherException ex) { + throw new SampleLauncherException(ex.getMessage()); + } + node.start(); + return node; + } + + public void stopNode(Node node){ + node.stop(); + } + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/launcher-embedded-osgi/src/main/java/launcher/SampleJSELauncher.java b/sca-java-2.x/tags/2.0-M5.1/samples/launcher-embedded-osgi/src/main/java/launcher/SampleJSELauncher.java new file mode 100644 index 0000000000..e506f982de --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/launcher-embedded-osgi/src/main/java/launcher/SampleJSELauncher.java @@ -0,0 +1,89 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package launcher; + +import java.net.URI; + +import org.apache.tuscany.sca.node.Contribution; +import org.apache.tuscany.sca.node.Node; +import org.oasisopen.sca.NoSuchDomainException; +import org.oasisopen.sca.NoSuchServiceException; +import org.oasisopen.sca.client.SCAClientFactory; + +import calculator.CalculatorService; + + +/** + * This client program shows how to create an embedded SCA runtime, start it, + * and locate and invoke a SCA component + */ +public class SampleJSELauncher extends RuntimeIntegration { + + public static void main(String[] args) throws Exception { + SampleJSELauncher launcher = new SampleJSELauncher(); + + String contribution = null; + + if (args == null || args.length != 1){ + System.out.println("Please provide the name of the sample contribution to run as a parameter"); + System.out.println("Running binding-sca-calculator by default"); + contribution = "contribution-binding-sca-calculator"; + } else { + contribution = args[0]; + } + + if (contribution.equals("contribution-binding-sca-calculator")){ + launcher.launchBindingSCACalculator(); + } else if (contribution.equals("contribution-binding-ws-calculator")){ + launcher.launchBindingWSCalculator(); + } else { + System.out.println("Sample contribution " + contribution + "not found"); + } + + } + + /** + * The contribution-binding-sca-calculator contribution includes a client component + * that calls the CalculatorServiceComponent from an operation marked by @Init. + */ + public void launchBindingSCACalculator(){ + Node node = startNode(new Contribution("c1", "../binding-sca/contribution-calculator/target/sample-contribution-binding-sca-calculator.jar")); + + stopNode(node); + } + + /* + * Using a Tuscany specific mechanism for getting at local service proxies + */ + public void launchBindingWSCalculator() throws NoSuchDomainException, NoSuchServiceException{ + Node node = startNode(new Contribution("c1", "../contribution-binding-ws-calculator/target/sample-contribution-binding-ws-calculator.jar")); + + CalculatorService calculator = node.getService(CalculatorService.class, "CalculatorServiceComponent"); + + double result = calculator.add(3, 2); + System.out.println("3 + 2 = " + result); + if (result != 5.0){ + throw new SampleLauncherException(); + } + + stopNode(node); + } + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/launcher-embedded-osgi/src/main/java/launcher/SampleLauncherException.java b/sca-java-2.x/tags/2.0-M5.1/samples/launcher-embedded-osgi/src/main/java/launcher/SampleLauncherException.java new file mode 100644 index 0000000000..f2ed3d421d --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/launcher-embedded-osgi/src/main/java/launcher/SampleLauncherException.java @@ -0,0 +1,42 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package launcher; + +/** + * This exception signals problems in the management of SCA component execution. + */ +public class SampleLauncherException extends RuntimeException { + /** + * Constructs a SampleLauncherException with no detail message. + */ + public SampleLauncherException() { + super(); + } + + /** + * Constructs a SampleLauncherException with the specified detail + * message. + * + * @param message the detail message + */ + public SampleLauncherException(String message) { + super(message); + } + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/launcher-embedded-osgi/src/test/java/launcher/LauncherTestCase.java b/sca-java-2.x/tags/2.0-M5.1/samples/launcher-embedded-osgi/src/test/java/launcher/LauncherTestCase.java new file mode 100644 index 0000000000..7b72ec7aee --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/launcher-embedded-osgi/src/test/java/launcher/LauncherTestCase.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 launcher; + +import org.junit.Test; + + + +/** + * Test the Calculator composition. + */ +public class LauncherTestCase { + + @Test + public void testContributionBindingSCACalculator() throws Exception { + SampleJSELauncher.main(new String[] {"contribution-binding-sca-calculator"}); + } + + @Test + public void testContributionBindingWSCalculator() throws Exception { + SampleJSELauncher.main(new String[] {"contribution-binding-ws-calculator"}); + } +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/launcher-maven/README b/sca-java-2.x/tags/2.0-M5.1/samples/launcher-maven/README new file mode 100644 index 0000000000..ff976c3515 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/launcher-maven/README @@ -0,0 +1,18 @@ +To execute a sample contribution from Maven + +look for contributions that have the following configuration in their pom.xml file: + + + org.apache.tuscany.maven.plugins + maven-tuscany-plugin + 2.0-SNAPSHOT + + +For contributions that have this, for example, binding-sca/contribution-calculator, do the following + +cd samples/binding-sca/contribution-calculator +mvn tuscany:run + +This will launch the contribution in the Tuscany runtime and then wait. At this point you can use +other clients to send messages to services that the running SCA applcation exposes, +for example, try calculator-scaclient. diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/logging.properties b/sca-java-2.x/tags/2.0-M5.1/samples/logging.properties new file mode 100644 index 0000000000..cf452e7812 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/logging.properties @@ -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. +# + +handlers= java.util.logging.ConsoleHandler + +.level = INFO + +java.util.logging.ConsoleHandler.level = FINE +java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter + +org.apache.tuscany.sca.level = INFO diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/pom.xml b/sca-java-2.x/tags/2.0-M5.1/samples/pom.xml new file mode 100644 index 0000000000..ee8cd25fcb --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/pom.xml @@ -0,0 +1,98 @@ + + + + 4.0.0 + + org.apache.tuscany.sca + tuscany-sca + 2.0-M5.1 + ../pom.xml + + tuscany-samples + pom + Apache Tuscany SCA Samples + + + + default + + true + + + calculator-osgi + dosgi-calculator + dosgi-calculator-operations + dosgi-dynamic-calculator + dosgi-dynamic-calculator-operations + calculator-scaclient + helloworld + helloworld-scaclient + + + + helloworld-bpel + helloworld-spring + store + store-webapp + webapps/helloworld + webapps/helloworld-bpel + webapps/helloworld-jaxrs + webapps/helloworld-jms + webapps/helloworld-js-client + webapps/helloworld-jsp + webapps/helloworld-stripes + webapps/helloworld-servlet + + + + binding-rmi + binding-sca + contribution-binding-ws-calculator + contribution-implementation-java-calculator + + + + + + + + + launcher-embedded-jse + launcher-embedded-osgi + + + + + + + + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/store-webapp/README b/sca-java-2.x/tags/2.0-M5.1/samples/store-webapp/README new file mode 100644 index 0000000000..46e71bf51e --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/store-webapp/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://tuscany.apache.org/getting-started-with-tuscany.html + +or + +http://tuscany.apache.org/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/sca-java-2.x/tags/2.0-M5.1/samples/store-webapp/pom.xml b/sca-java-2.x/tags/2.0-M5.1/samples/store-webapp/pom.xml new file mode 100644 index 0000000000..41448c6547 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/store-webapp/pom.xml @@ -0,0 +1,84 @@ + + + + 4.0.0 + + org.apache.tuscany.sca + tuscany-sca + 2.0-M5.1 + ../pom.xml + + sample-store-webapp + war + Apache Tuscany SCA Sample Getting Started Online Store as WebApp + + + + org.apache.tuscany.sca + tuscany-host-webapp + 2.0-M5.1 + + + + org.apache.tuscany.sca + tuscany-data-api + 2.0-M5.1 + + + + org.apache.tuscany.sca + tuscany-feature-web20 + pom + 2.0-M5.1 + + + + junit + junit + 4.8.1 + test + + + + + + ${artifactId} + + + org.codehaus.mojo + tomcat-maven-plugin + 1.0-beta-1 + + + + tomcat + + /${artifactId} + + + + org.mortbay.jetty + maven-jetty-plugin + 6.1.18 + + + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/store-webapp/src/main/java/services/Cart.java b/sca-java-2.x/tags/2.0-M5.1/samples/store-webapp/src/main/java/services/Cart.java new file mode 100644 index 0000000000..3fb5439bc3 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/store-webapp/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.oasisopen.sca.annotation.Remotable; + +@Remotable +public interface Cart extends Collection { + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/store-webapp/src/main/java/services/Catalog.java b/sca-java-2.x/tags/2.0-M5.1/samples/store-webapp/src/main/java/services/Catalog.java new file mode 100644 index 0000000000..b5e504fe11 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/store-webapp/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.oasisopen.sca.annotation.Remotable; + +@Remotable +public interface Catalog { + Item[] get(); +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/store-webapp/src/main/java/services/CurrencyConverter.java b/sca-java-2.x/tags/2.0-M5.1/samples/store-webapp/src/main/java/services/CurrencyConverter.java new file mode 100644 index 0000000000..a064f3dd69 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/store-webapp/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.oasisopen.sca.annotation.Remotable; + +@Remotable +public interface CurrencyConverter { + public double getConversion(String fromCurrenycCode, String toCurrencyCode, double amount); + + public String getCurrencySymbol(String currencyCode); +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/store-webapp/src/main/java/services/CurrencyConverterImpl.java b/sca-java-2.x/tags/2.0-M5.1/samples/store-webapp/src/main/java/services/CurrencyConverterImpl.java new file mode 100644 index 0000000000..c354aed447 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/store-webapp/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/sca-java-2.x/tags/2.0-M5.1/samples/store-webapp/src/main/java/services/FruitsCatalogImpl.java b/sca-java-2.x/tags/2.0-M5.1/samples/store-webapp/src/main/java/services/FruitsCatalogImpl.java new file mode 100644 index 0000000000..d132a24b00 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/store-webapp/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.oasisopen.sca.annotation.Init; +import org.oasisopen.sca.annotation.Property; +import org.oasisopen.sca.annotation.Reference; + +public class FruitsCatalogImpl implements Catalog { + + @Property + public String currencyCode = "USD"; + + @Reference + public CurrencyConverter currencyConverter; + + private List catalog = new ArrayList(); + + @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/sca-java-2.x/tags/2.0-M5.1/samples/store-webapp/src/main/java/services/Item.java b/sca-java-2.x/tags/2.0-M5.1/samples/store-webapp/src/main/java/services/Item.java new file mode 100644 index 0000000000..27abd4f016 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/store-webapp/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/sca-java-2.x/tags/2.0-M5.1/samples/store-webapp/src/main/java/services/ShoppingCartImpl.java b/sca-java-2.x/tags/2.0-M5.1/samples/store-webapp/src/main/java/services/ShoppingCartImpl.java new file mode 100644 index 0000000000..698614212d --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/store-webapp/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.oasisopen.sca.annotation.Init; +import org.oasisopen.sca.annotation.Scope; + +@Scope("COMPOSITE") +public class ShoppingCartImpl implements Cart, Total { + + private Map cart; + + @Init + public void init() { + cart = new HashMap(); + } + + public Entry[] getAll() { + Entry[] entries = new Entry[cart.size()]; + int i = 0; + for (Map.Entry e: cart.entrySet()) { + entries[i++] = new Entry(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[] query(String queryString) { + List> entries = new ArrayList>(); + if (queryString.startsWith("name=")) { + String name = queryString.substring(5); + for (Map.Entry e: cart.entrySet()) { + Item item = e.getValue(); + if (item.getName().equals(name)) { + entries.add(new Entry(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/sca-java-2.x/tags/2.0-M5.1/samples/store-webapp/src/main/java/services/Total.java b/sca-java-2.x/tags/2.0-M5.1/samples/store-webapp/src/main/java/services/Total.java new file mode 100644 index 0000000000..b77cc1c7ac --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/store-webapp/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.oasisopen.sca.annotation.Remotable; + +@Remotable +public interface Total { + + String getTotal(); + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/store-webapp/src/main/resources/store.composite b/sca-java-2.x/tags/2.0-M5.1/samples/store-webapp/src/main/resources/store.composite new file mode 100644 index 0000000000..7a07b89903 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/store-webapp/src/main/resources/store.composite @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + USD + + + + + + + + + + + + + + + + + + + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/store-webapp/src/main/webapp/META-INF/sca-contribution.xml b/sca-java-2.x/tags/2.0-M5.1/samples/store-webapp/src/main/webapp/META-INF/sca-contribution.xml new file mode 100644 index 0000000000..cdda6bbcad --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/store-webapp/src/main/webapp/META-INF/sca-contribution.xml @@ -0,0 +1,23 @@ + + + + + \ No newline at end of file diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/store-webapp/src/main/webapp/WEB-INF/geronimo-web.xml b/sca-java-2.x/tags/2.0-M5.1/samples/store-webapp/src/main/webapp/WEB-INF/geronimo-web.xml new file mode 100644 index 0000000000..b353a6e759 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/store-webapp/src/main/webapp/WEB-INF/geronimo-web.xml @@ -0,0 +1,50 @@ + + + + + + org.apache.tuscany + sample-store-webapp + 1.0 + car + + + + + org.apache.axiom + org.apache.axis2 + org.apache.commons + org.jdom + + + + /sample-store-secure-webapp + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/store-webapp/src/main/webapp/WEB-INF/web.xml b/sca-java-2.x/tags/2.0-M5.1/samples/store-webapp/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000000..bf3fe972ca --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/store-webapp/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,36 @@ + + + + sample-store-webapp + + + tuscany + org.apache.tuscany.sca.host.webapp.TuscanyServletFilter + + + + tuscany + /* + + + + store.html + + \ No newline at end of file diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/store-webapp/src/main/webapp/store.html b/sca-java-2.x/tags/2.0-M5.1/samples/store-webapp/src/main/webapp/store.html new file mode 100644 index 0000000000..7fa2e07d5a --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/store-webapp/src/main/webapp/store.html @@ -0,0 +1,163 @@ + + + +Store + + + + + + + + + +

Store

+
+

Catalog

+
+
+
+ +
+ +
+ +

Your Shopping Cart

+
+
+
+
+
+ + + (feed) +
+
+ + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/store-webapp/store.png b/sca-java-2.x/tags/2.0-M5.1/samples/store-webapp/store.png new file mode 100644 index 0000000000..da413edeee Binary files /dev/null and b/sca-java-2.x/tags/2.0-M5.1/samples/store-webapp/store.png differ diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/store-webapp/store.svg b/sca-java-2.x/tags/2.0-M5.1/samples/store-webapp/store.svg new file mode 100644 index 0000000000..74f8ecd36d --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/store-webapp/store.svg @@ -0,0 +1,304 @@ + + + + + + + + + + image/svg+xml + + + + + + + + store + ufs + + ShoppingCart + + CurrencyConverter + + + + + + + + + + CurrenyCode HTTP JSONRPC Atom + + Catalog + + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/store/README b/sca-java-2.x/tags/2.0-M5.1/samples/store/README new file mode 100644 index 0000000000..d31e4c59b7 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/store/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://tuscany.apache.org/getting-started-with-tuscany.html + +or + +http://tuscany.apache.org/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/sca-java-2.x/tags/2.0-M5.1/samples/store/build.xml b/sca-java-2.x/tags/2.0-M5.1/samples/store/build.xml new file mode 100644 index 0000000000..bd36a0d398 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/store/build.xml @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/store/pom.xml b/sca-java-2.x/tags/2.0-M5.1/samples/store/pom.xml new file mode 100644 index 0000000000..9a39199fbe --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/store/pom.xml @@ -0,0 +1,70 @@ + + + + 4.0.0 + + org.apache.tuscany.sca + tuscany-sca + 2.0-M5.1 + ../pom.xml + + sample-store + Apache Tuscany SCA Sample Getting Started Online Store + + + + org.apache.tuscany.sca + tuscany-node-impl + 2.0-M5.1 + + + + org.apache.tuscany.sca + tuscany-data-api + 2.0-M5.1 + + + + org.apache.tuscany.sca + tuscany-feature-web20 + pom + 2.0-M5.1 + + + + net.sourceforge.htmlunit + htmlunit + 2.6 + test + + + + junit + junit + 4.8.1 + test + + + + + ${artifactId} + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/store/src/main/java/launch/Launch.java b/sca-java-2.x/tags/2.0-M5.1/samples/store/src/main/java/launch/Launch.java new file mode 100644 index 0000000000..8e4b5839e4 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/store/src/main/java/launch/Launch.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 launch; + +import org.apache.tuscany.sca.node.Contribution; +import org.apache.tuscany.sca.node.ContributionLocationHelper; +import org.apache.tuscany.sca.node.Node; +import org.apache.tuscany.sca.node.NodeFactory; + +public class Launch { + public static void main(String[] args) throws Exception { + System.out.println("Starting ..."); + String contribution = ContributionLocationHelper.getContributionLocation(Launch.class); + Node node = NodeFactory.newInstance().createNode("store.composite", new Contribution("test", contribution)); + node.start(); + System.out.println("store.composite ready for big business !!!"); + System.in.read(); + System.out.println("Stopping ..."); + node.stop(); + System.out.println(); + } +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/store/src/main/java/services/Cart.java b/sca-java-2.x/tags/2.0-M5.1/samples/store/src/main/java/services/Cart.java new file mode 100644 index 0000000000..3fb5439bc3 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/store/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.oasisopen.sca.annotation.Remotable; + +@Remotable +public interface Cart extends Collection { + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/store/src/main/java/services/Catalog.java b/sca-java-2.x/tags/2.0-M5.1/samples/store/src/main/java/services/Catalog.java new file mode 100644 index 0000000000..b5e504fe11 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/store/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.oasisopen.sca.annotation.Remotable; + +@Remotable +public interface Catalog { + Item[] get(); +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/store/src/main/java/services/CurrencyConverter.java b/sca-java-2.x/tags/2.0-M5.1/samples/store/src/main/java/services/CurrencyConverter.java new file mode 100644 index 0000000000..a064f3dd69 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/store/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.oasisopen.sca.annotation.Remotable; + +@Remotable +public interface CurrencyConverter { + public double getConversion(String fromCurrenycCode, String toCurrencyCode, double amount); + + public String getCurrencySymbol(String currencyCode); +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/store/src/main/java/services/CurrencyConverterImpl.java b/sca-java-2.x/tags/2.0-M5.1/samples/store/src/main/java/services/CurrencyConverterImpl.java new file mode 100644 index 0000000000..c354aed447 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/store/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/sca-java-2.x/tags/2.0-M5.1/samples/store/src/main/java/services/FruitsCatalogImpl.java b/sca-java-2.x/tags/2.0-M5.1/samples/store/src/main/java/services/FruitsCatalogImpl.java new file mode 100644 index 0000000000..d132a24b00 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/store/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.oasisopen.sca.annotation.Init; +import org.oasisopen.sca.annotation.Property; +import org.oasisopen.sca.annotation.Reference; + +public class FruitsCatalogImpl implements Catalog { + + @Property + public String currencyCode = "USD"; + + @Reference + public CurrencyConverter currencyConverter; + + private List catalog = new ArrayList(); + + @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/sca-java-2.x/tags/2.0-M5.1/samples/store/src/main/java/services/Item.java b/sca-java-2.x/tags/2.0-M5.1/samples/store/src/main/java/services/Item.java new file mode 100644 index 0000000000..fe32cfc828 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/store/src/main/java/services/Item.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 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/sca-java-2.x/tags/2.0-M5.1/samples/store/src/main/java/services/ShoppingCartImpl.java b/sca-java-2.x/tags/2.0-M5.1/samples/store/src/main/java/services/ShoppingCartImpl.java new file mode 100644 index 0000000000..698614212d --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/store/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.oasisopen.sca.annotation.Init; +import org.oasisopen.sca.annotation.Scope; + +@Scope("COMPOSITE") +public class ShoppingCartImpl implements Cart, Total { + + private Map cart; + + @Init + public void init() { + cart = new HashMap(); + } + + public Entry[] getAll() { + Entry[] entries = new Entry[cart.size()]; + int i = 0; + for (Map.Entry e: cart.entrySet()) { + entries[i++] = new Entry(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[] query(String queryString) { + List> entries = new ArrayList>(); + if (queryString.startsWith("name=")) { + String name = queryString.substring(5); + for (Map.Entry e: cart.entrySet()) { + Item item = e.getValue(); + if (item.getName().equals(name)) { + entries.add(new Entry(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/sca-java-2.x/tags/2.0-M5.1/samples/store/src/main/java/services/Total.java b/sca-java-2.x/tags/2.0-M5.1/samples/store/src/main/java/services/Total.java new file mode 100644 index 0000000000..b77cc1c7ac --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/store/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.oasisopen.sca.annotation.Remotable; + +@Remotable +public interface Total { + + String getTotal(); + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/store/src/main/resources/store.composite b/sca-java-2.x/tags/2.0-M5.1/samples/store/src/main/resources/store.composite new file mode 100644 index 0000000000..9c3b79c508 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/store/src/main/resources/store.composite @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + USD + + + + + + + + + + + + + + + + + + + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/store/src/main/resources/uiservices/store.html b/sca-java-2.x/tags/2.0-M5.1/samples/store/src/main/resources/uiservices/store.html new file mode 100644 index 0000000000..000f1f891f --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/store/src/main/resources/uiservices/store.html @@ -0,0 +1,162 @@ + + + +Store + + + + + + + + + +

Store

+
+

Catalog

+
+
+
+ +
+ +
+ +

Your Shopping Cart

+
+
+
+
+
+ + + (feed) +
+
+ + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/store/src/test/java/client/Shopper.java b/sca-java-2.x/tags/2.0-M5.1/samples/store/src/test/java/client/Shopper.java new file mode 100644 index 0000000000..4e2fa63493 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/store/src/test/java/client/Shopper.java @@ -0,0 +1,29 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package client; + +import org.oasisopen.sca.annotation.Remotable; + +@Remotable +public interface Shopper { + + String shop(String itemName, int quantity); + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/store/src/test/java/client/ShopperImpl.java b/sca-java-2.x/tags/2.0-M5.1/samples/store/src/test/java/client/ShopperImpl.java new file mode 100644 index 0000000000..05b1800d4f --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/store/src/test/java/client/ShopperImpl.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 client; + +import org.apache.tuscany.sca.data.collection.NotFoundException; +import org.oasisopen.sca.annotation.Reference; + +import services.Cart; +import services.Catalog; +import services.Item; +import services.Total; + +public class ShopperImpl implements Shopper { + + @Reference + public Catalog catalog; + + @Reference + public Cart shoppingCart; + + @Reference + public Total shoppingTotal; + + public String shop(String itemName, int quantity) { + + Item[] items = catalog.get(); + for (Item item: items) { + if (item.getName().startsWith(itemName)) { + + try { + shoppingCart.delete(""); + } catch (NotFoundException e) { + // ignore + } + + for (int i = 0; i < quantity; i++) { + shoppingCart.post("item" + i, item); + } + + return shoppingTotal.getTotal(); + } + } + + return ""; + } + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/store/src/test/java/store/StoreTestCase.java b/sca-java-2.x/tags/2.0-M5.1/samples/store/src/test/java/store/StoreTestCase.java new file mode 100644 index 0000000000..883aaa76f6 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/store/src/test/java/store/StoreTestCase.java @@ -0,0 +1,117 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT 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; + +import java.io.IOException; +import java.net.MalformedURLException; + +import junit.framework.Assert; + +import org.apache.tuscany.sca.node.Contribution; +import org.apache.tuscany.sca.node.ContributionLocationHelper; +import org.apache.tuscany.sca.node.Node; +import org.apache.tuscany.sca.node.NodeFactory; +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.Ignore; +import org.junit.Test; + +import client.Shopper; + +import com.gargoylesoftware.htmlunit.BrowserVersion; +import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException; +import com.gargoylesoftware.htmlunit.NicelyResynchronizingAjaxController; +import com.gargoylesoftware.htmlunit.WebClient; +import com.gargoylesoftware.htmlunit.html.HtmlCheckBoxInput; +import com.gargoylesoftware.htmlunit.html.HtmlForm; +import com.gargoylesoftware.htmlunit.html.HtmlPage; + + +/** + * Test the store-merger. + * + * @version $Rev$ $Date$ + */ +public class StoreTestCase { + private static Node nodeStore; + + @BeforeClass + public static void setUp() throws Exception { + String storeLocation = ContributionLocationHelper.getContributionLocation("store.composite"); + String storeClientLocation = ContributionLocationHelper.getContributionLocation("store-client.composite"); + + nodeStore = NodeFactory.newInstance().createNode(new Contribution("store", storeLocation), new Contribution("storeClient", storeClientLocation)); + nodeStore.start(); + } + + @AfterClass + public static void tearDown() throws Exception { + nodeStore.stop(); + } + + @Test + @Ignore + public void testWaitForInput() { + try { + System.out.println("press enter to continue)"); + System.in.read(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + @Test + public void testShop() { + Shopper shopper = nodeStore.getService(Shopper.class, "StoreClient"); + + String total = shopper.shop("Orange", 5); + System.out.println("Total: " + total); + + Assert.assertEquals("$17.75", total); + + } + + @Test + public void testStoreWidget() throws FailingHttpStatusCodeException, MalformedURLException, IOException { + WebClient webClient = new WebClient(BrowserVersion.FIREFOX_3); + webClient.setRedirectEnabled(true); + webClient.setThrowExceptionOnScriptError(false); + //webClient.waitForBackgroundJavaScript(100000); + //webClient.waitForBackgroundJavaScriptStartingBefore(100000); + webClient.setAjaxController(new NicelyResynchronizingAjaxController()); + + HtmlPage page = (HtmlPage) webClient.getPage("http://localhost:8080/store/store.html"); + + HtmlForm form = (HtmlForm) page.getFormByName("catalogForm"); + + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + } + + HtmlCheckBoxInput catalogItems = (HtmlCheckBoxInput) form.getInputByName("items"); + + System.out.println(">>>" + catalogItems.getAttribute("value")); + Assert.assertEquals("Apple - $2.99", catalogItems.getAttribute("value")); + + webClient.closeAllWindows(); + } + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/store/src/test/resources/store-client.composite b/sca-java-2.x/tags/2.0-M5.1/samples/store/src/test/resources/store-client.composite new file mode 100644 index 0000000000..c9abe8e996 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/store/src/test/resources/store-client.composite @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/store/store.png b/sca-java-2.x/tags/2.0-M5.1/samples/store/store.png new file mode 100644 index 0000000000..da413edeee Binary files /dev/null and b/sca-java-2.x/tags/2.0-M5.1/samples/store/store.png differ diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/store/store.svg b/sca-java-2.x/tags/2.0-M5.1/samples/store/store.svg new file mode 100644 index 0000000000..74f8ecd36d --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/store/store.svg @@ -0,0 +1,304 @@ + + + + + + + + + + image/svg+xml + + + + + + + + store + ufs + + ShoppingCart + + CurrencyConverter + + + + + + + + + + CurrenyCode HTTP JSONRPC Atom + + Catalog + + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-bpel/README b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-bpel/README new file mode 100644 index 0000000000..828aadb0f1 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-bpel/README @@ -0,0 +1,7 @@ +The README in the /samples directory provides +general instructions about building and running samples. (where +distribution-unpack-dir is the directory in which you unpacked the tuscany +binary distribution archive). Take a look there first (noting at you read it that this sample +is not a new style sample). + +TODO - finish \ No newline at end of file diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-bpel/pom.xml b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-bpel/pom.xml new file mode 100644 index 0000000000..5fddd14270 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-bpel/pom.xml @@ -0,0 +1,160 @@ + + + + + 4.0.0 + + org.apache.tuscany.sca + tuscany-sca + 2.0-M5.1 + ../../pom.xml + + + sample-helloworld-bpel-webapp + war + Apache Tuscany SCA Sample Helloworld BPEL + + + 2.0-M5.1 + 6.1.18 + + + + + + org.apache.tuscany.sca + tuscany-sca-api + ${tuscany.version} + + + + org.apache.tuscany.sca + tuscany-implementation-web-runtime + ${tuscany.version} + runtime + + + + org.apache.tuscany.sca + tuscany-implementation-bpel-runtime + ${tuscany.version} + runtime + + + + + junit + junit + 4.8.1 + test + + + + + org.mortbay.jetty + jetty + ${jetty.version} + provided + + + org.mortbay.jetty + jetty-util + ${jetty.version} + provided + + + org.mortbay.jetty + jetty-management + ${jetty.version} + provided + + + + + helloworld-bpel + + + + org.apache.maven.plugins + maven-dependency-plugin + + + unpack + compile + + unpack + + + + + org.apache.ode + ode-dao-jpa-ojpa-derby + 1.1.1 + zip + false + ${project.build.directory}/classes + **/* + + + + + + + + + org.mortbay.jetty + maven-jetty-plugin + 6.1.18 + + helloworld-bpel + foo + 9999 + + + + start-jetty + process-test-classes + + run + + + 0 + true + + + 8085 + + + + + + stop-jetty + prepare-package + + stop + + + + + + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-bpel/src/main/java/sample/HelloworldService.java b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-bpel/src/main/java/sample/HelloworldService.java new file mode 100644 index 0000000000..c1a50d9be5 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-bpel/src/main/java/sample/HelloworldService.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 sample; + +import org.oasisopen.sca.annotation.Remotable; + +@Remotable +public interface HelloworldService { + + String hello(String name); + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-bpel/src/main/resources/helloworld.bpel b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-bpel/src/main/resources/helloworld.bpel new file mode 100644 index 0000000000..f1e8895f76 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-bpel/src/main/resources/helloworld.bpel @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + concat('Hello ', $myVar.TestPart/test:message/text()) + + + + $tmpVar + $myVar.TestPart/test:message + + + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-bpel/src/main/resources/helloworld.wsdl b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-bpel/src/main/resources/helloworld.wsdl new file mode 100644 index 0000000000..46cf381577 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-bpel/src/main/resources/helloworld.wsdl @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-bpel/src/main/webapp/WEB-INF/web.composite b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-bpel/src/main/webapp/WEB-INF/web.composite new file mode 100644 index 0000000000..3d36adadeb --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-bpel/src/main/webapp/WEB-INF/web.composite @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-bpel/src/main/webapp/WEB-INF/web.xml b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-bpel/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000000..bf01a7b759 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-bpel/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,41 @@ + + + + + helloworld-bpel + + + tuscany.helloworld-bpel + org.apache.tuscany.sca.host.webapp.TuscanyServletFilter + + + + tuscany.helloworld-bpel + /* + + + + hello.jsp + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-bpel/src/main/webapp/hello.jsp b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-bpel/src/main/webapp/hello.jsp new file mode 100644 index 0000000000..c52d7b1cb2 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-bpel/src/main/webapp/hello.jsp @@ -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. +--%> +<%@ page contentType="text/html;charset=UTF-8" language="java" %> +<%@ taglib uri="http://www.osoa.org/sca/sca_jsp.tld" prefix="sca" %> + + + + + + +

helloworld-bpel

+ + Calling HelloworldService sayHello("world") returns: + +

+ + <%= service.hello("world") %> + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jaxrs/README b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jaxrs/README new file mode 100644 index 0000000000..828aadb0f1 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jaxrs/README @@ -0,0 +1,7 @@ +The README in the /samples directory provides +general instructions about building and running samples. (where +distribution-unpack-dir is the directory in which you unpacked the tuscany +binary distribution archive). Take a look there first (noting at you read it that this sample +is not a new style sample). + +TODO - finish \ No newline at end of file diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jaxrs/pom.xml b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jaxrs/pom.xml new file mode 100644 index 0000000000..7b96841b3b --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jaxrs/pom.xml @@ -0,0 +1,118 @@ + + + + 4.0.0 + + org.apache.tuscany.sca + tuscany-sca + 2.0-M5.1 + ../../pom.xml + + + sample-helloworld-jaxrs-webapp + war + Apache Tuscany SCA Sample Helloworld JAX-RS + + + + + + org.apache.tuscany.sca.shades + tuscany-base-nodep + 2.0-M5.1 + + + + + org.apache.wink + wink-common + 1.1.1-incubating + + + + org.apache.wink + wink-server + 1.1.1-incubating + + + + org.slf4j + slf4j-api + 1.6.0 + + + + junit + junit + 4.8.1 + test + + + + net.sourceforge.htmlunit + htmlunit + 2.6 + test + + + + + + helloworld-jaxrs + + + org.mortbay.jetty + maven-jetty-plugin + 6.1.18 + + helloworld-jaxrs + foo + 9999 + + + + start-jetty + process-test-classes + + run + + + 0 + true + + + 8085 + + + + + + stop-jetty + prepare-package + + stop + + + + + + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jaxrs/src/main/java/sample/HelloWorldResource.java b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jaxrs/src/main/java/sample/HelloWorldResource.java new file mode 100644 index 0000000000..42625b8a78 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jaxrs/src/main/java/sample/HelloWorldResource.java @@ -0,0 +1,68 @@ +/******************************************************************************* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT 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 sample; + +import java.util.Date; + +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; + +import org.oasisopen.sca.annotation.Reference; + +/** + * Simple example - Hello World! + *

+ * The SDK dispatches HTTP requests for URI + * http://[host]:[port]/helloworld-jaxrs/rest/world, where + * helloworld-jaxrs is the context root, to this class. A simple + * plain text entry is returned in HTTP response. + *

+ * The service document is available at URI + * http://[host]:[port]/helloworld-jaxrs/rest but it is empty because + * this simple demo doesn't contain any collection of resources. + *

+ * This resource must be registered within a JAX-RS application, this example + * uses the default usage of application /WEB-INF/application + */ +@Path("/world") +public class HelloWorldResource { + + @Reference + protected HelloworldService service; + + + /** + * This method is called by the SDK for HTTP GET method requests where the + * Accept header allows the Atom media type application/atom+xml. A + * SyndEntry is created with basic information. Serialization of the + * SyndEntry to Atom entry is performed by the SDK automatically. The + * default status code of 200 (OK) is returned in the response. + * + * @return SyndEntry of the requested resource + */ + @GET + @Produces("text/plain") + public String getClichedMessage() { + return service == null ? "SCA reference not injected" : service.sayHello("World"); + } + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jaxrs/src/main/java/sample/HelloworldService.java b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jaxrs/src/main/java/sample/HelloworldService.java new file mode 100644 index 0000000000..123774b936 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jaxrs/src/main/java/sample/HelloworldService.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 sample; + +public interface HelloworldService { + + String sayHello(String name); + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jaxrs/src/main/java/sample/HelloworldServiceImpl.java b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jaxrs/src/main/java/sample/HelloworldServiceImpl.java new file mode 100644 index 0000000000..66cef71a25 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jaxrs/src/main/java/sample/HelloworldServiceImpl.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 sample; + + +public class HelloworldServiceImpl implements HelloworldService { + + public String sayHello(String name) { + return "Hello " + name; + } + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jaxrs/src/main/webapp/WEB-INF/application b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jaxrs/src/main/webapp/WEB-INF/application new file mode 100644 index 0000000000..8ce781d6c8 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jaxrs/src/main/webapp/WEB-INF/application @@ -0,0 +1,14 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to you under the Apache License, Version +# 2.0 (the "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 Unless required by +# applicable law or agreed to in writing, software distributed under the +# License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR +# CONDITIONS OF ANY KIND, either express or implied. See the License for +# the specific language governing permissions and limitations under the +# License. +sample.HelloWorldResource \ No newline at end of file diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jaxrs/src/main/webapp/WEB-INF/web.composite b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jaxrs/src/main/webapp/WEB-INF/web.composite new file mode 100644 index 0000000000..7ff71519e9 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jaxrs/src/main/webapp/WEB-INF/web.composite @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jaxrs/src/main/webapp/WEB-INF/web.xml b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jaxrs/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000000..3c5726a818 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jaxrs/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,49 @@ + + + + + Apache Tuscany Helloworld JAX-RS Sample + + + org.apache.tuscany.sca.host.webapp.TuscanyContextListener + + + + restSdkService + org.apache.wink.server.internal.servlet.RestServlet + + applicationConfigLocation + /WEB-INF/application + + + + deploymentConfiguration + org.apache.tuscany.sca.wink.TuscanyDeploymentConfiguration + + + + restSdkService + /rest/* + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jaxrs/src/test/java/itest/HelloworldTestCase.java b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jaxrs/src/test/java/itest/HelloworldTestCase.java new file mode 100644 index 0000000000..ffe5dd3b2b --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jaxrs/src/test/java/itest/HelloworldTestCase.java @@ -0,0 +1,46 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT 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 itest; + +import static org.junit.Assert.assertEquals; + +import java.io.IOException; +import java.net.MalformedURLException; +import java.util.Iterator; + +import org.junit.Test; + +import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException; +import com.gargoylesoftware.htmlunit.TextPage; +import com.gargoylesoftware.htmlunit.WebClient; +import com.gargoylesoftware.htmlunit.html.HtmlElement; +import com.gargoylesoftware.htmlunit.html.HtmlParagraph; + +/** + */ +public class HelloworldTestCase { + + @Test + public void testA() throws FailingHttpStatusCodeException, MalformedURLException, IOException { + TextPage page = (TextPage)new WebClient().getPage("http://localhost:8085/helloworld-jaxrs/rest/world"); + assertEquals("Hello World", page.getContent()); + } + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jms/README b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jms/README new file mode 100644 index 0000000000..88bbe9adcb --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jms/README @@ -0,0 +1,131 @@ +JMS HelloWorld Sample +===================== +This sample demonstrates a simple webapp containing a hello world style client +and service using the JMS binding for request-response style messaging. + +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/helloworld-jms.war ) +to you web application server. Alternatevly, the sample pom.xml is configured +with the Jetty plugin so you can run the it with Jetty by simply doing "mvn jetty:run". + +Once the web app is deployed use your browser to visit the following URL; + +http://localhost:8080/helloworld-jms + +The port and hostname will of course vary depending on your local installation. + +Configuring the JMS resources +----------------------------- + +The sample requires JMS resources be manually configured in the server environment, these are: + +- a JMS connection factory named "ConnectionFactory" +- a JMS queue named "HelloWorldService" + +See the following for how to define these resources depending on the application server being used: + +Tuscany with embedded ActiveMQ broker +------------------------------------- + + +Apache Tomcat +------------- + +No configuration is necessary for Tomcat as the sample WAR includes everything pre-configured to run +an ActiveMQ embedded JMS broker and to configure the JMS resources in JNDI. + +The JNDI resources are configured in the META-INF/comtext.xml file, for more information on running +ActiveMQ in Tomcat see: http://activemq.apache.org/tomcat.html + + +Apache Geronimo +--------------- + +For Apache Geronimo 2.0.1 (2.0.2 fails to define JMS resources for me) + +Logon to the Geronimo Server Console (http://localhost:8080/console, uid system, pswd manager) + +In the Console Navigation on the left under Services click JMS Resources + +At the bottom of the JMS Resources panel click under Create a new JMS Resource Group click For ActiveMQ + +In Resource Group Name enter "MyRGN" and click next + +At JMS Resource Group click Add Connection Factory + +For JMS Factory Type choose javax.jms.ConnectionFactory and click Next + +In Connection Factory Name enter "ConnectionFactory" and click Next + +Click Add destination + +For JMS Destination Type choose javax.jms.Queue and click Next + +Enter "HelloWorldService" for both Message Destination Name and PhysicalName and click Next + +Click Deploy Now + +Thats it, you're done. + + +WebSphere +--------- + +To define the JMS resources in a new WebSphere Application Server 6.1 installation: + +1) First define a Service integration bus: + +Logon to the WebSphere Integrated Solutions Console (http://localhost:9060/ibm/console) + +On the Left hand menu expand Service integration, and click on Buses. + +In the Buses panel click on New + +Enter a name for the bus, eg MyBus, and click Next, and then click Finish and Save the changes. + +In the Buses panel click on MyBus + +Find the Topology secion and click on Bus members + +Click on Add, leave the defaults and click Next, Next, Next, Finish, and Save the changes. + +Restart WebSphere and when back up logon back on to the Integrated Solutions Console + +2) Now define the JMS rescources + +On the Left hand menu expand Resources, and JMS and click on Connection Facotories. + +In the Connection factories panel click New. + +Leave the Default messaging provider and click OK + +Enter "ConnectionFactory" in the Name and JNDI name and in the Bus name in the Connection pane choose MyBus and click OK + +On the Left hand menu in JMS click on Queues + +In the Queues panel click New, accept the defaults and click OK + +Enter "HelloWorldService" for the Name and JNDI name and in the Bus name in the Connection pane choose MyBus, +and then in the Queue name drop down list choose "Create SIB destination" + +In the Set queue attributes panel enter "HelloWorldService" for the Identifier and click Next, Next, and Finish + +That should take you back to the Queues panel where you can click OK to create the new JMS queue. + +Save the changes + +Restart WebSphere and you're done. + + + +Others... +--------- + + + + \ No newline at end of file diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jms/pom.xml b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jms/pom.xml new file mode 100644 index 0000000000..a97551ae8b --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jms/pom.xml @@ -0,0 +1,96 @@ + + + + 4.0.0 + + org.apache.tuscany.sca + tuscany-sca + 2.0-M5.1 + ../../pom.xml + + + sample-helloworld-jms-webapp + war + Apache Tuscany SCA Sample JMS HelloWorld in a WebApp + + + + + org.apache.tuscany.sca.shades + tuscany-base + 2.0-M5.1 + + + org.apache.tuscany.sca.shades + tuscany-jms + 2.0-M5.1 + + + + org.apache.activemq + activemq-core + 5.3.0 + runtime + + + + + + helloworld-jms + + + org.mortbay.jetty + maven-jetty-plugin + 6.1.18 + + helloworld-jms + foo + 9999 + + + + start-jetty + process-test-classes + + run + + + 0 + true + + + 8085 + + + + + + stop-jetty + prepare-package + + stop + + + + + + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jms/src/main/java/sample/HelloWorldClient.java b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jms/src/main/java/sample/HelloWorldClient.java new file mode 100644 index 0000000000..f209f11605 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jms/src/main/java/sample/HelloWorldClient.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 sample; + +/** + * The HelloWorld client implementation + */ +public class HelloWorldClient implements HelloWorldService { + + HelloWorldService helloWorldRef; + + public String sayHello(String name) { + System.out.println("HelloWorldClient.sayHello " + name); + return helloWorldRef.sayHello(name); + } + + public void setHelloWorldRef(HelloWorldService helloWorldRef) { + System.out.println("HelloWorldClient.setHelloWorldService " + helloWorldRef); + this.helloWorldRef = helloWorldRef; + } +} \ No newline at end of file diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jms/src/main/java/sample/HelloWorldService.java b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jms/src/main/java/sample/HelloWorldService.java new file mode 100644 index 0000000000..df2a852161 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jms/src/main/java/sample/HelloWorldService.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 sample; + +import org.oasisopen.sca.annotation.Remotable; + +/** + * The interface for the helloworld service + */ +@Remotable +public interface HelloWorldService { + public String sayHello(String name); +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jms/src/main/java/sample/HelloWorldServiceImpl.java b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jms/src/main/java/sample/HelloWorldServiceImpl.java new file mode 100644 index 0000000000..c09af51e23 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jms/src/main/java/sample/HelloWorldServiceImpl.java @@ -0,0 +1,31 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT 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 sample; + +/** + * This class implements the HelloWorld service. + */ +public class HelloWorldServiceImpl implements HelloWorldService { + + public String sayHello(String name) { + System.out.println("HelloWorldServiceImpl.sayHello " + name); + return "Hello " + name; + } + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jms/src/main/webapp/META-INF/context.xml b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jms/src/main/webapp/META-INF/context.xml new file mode 100644 index 0000000000..7575edfc29 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jms/src/main/webapp/META-INF/context.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jms/src/main/webapp/WEB-INF/jetty-env.xml b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jms/src/main/webapp/WEB-INF/jetty-env.xml new file mode 100644 index 0000000000..a8cd27f6c6 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jms/src/main/webapp/WEB-INF/jetty-env.xml @@ -0,0 +1,48 @@ + + + + + + + + + + + ConnectionFactory + + + vm://localhost?broker.persistent=false + + + + + + HelloWorldService + + + DEMO + + + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jms/src/main/webapp/WEB-INF/web.composite b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jms/src/main/webapp/WEB-INF/web.composite new file mode 100644 index 0000000000..c51985bc30 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jms/src/main/webapp/WEB-INF/web.composite @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jms/src/main/webapp/WEB-INF/web.xml b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jms/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000000..86710435ae --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jms/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,66 @@ + + + + + + + Apache Tuscany JMS Web Service Sample + + + tuscany + org.apache.tuscany.sca.host.webapp.TuscanyServletFilter + + + + tuscany + /* + + + + hello.jsp + + + + + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jms/src/main/webapp/hello.jsp b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jms/src/main/webapp/hello.jsp new file mode 100644 index 0000000000..9ae037f2c2 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jms/src/main/webapp/hello.jsp @@ -0,0 +1,41 @@ +<%-- + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT 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 contentType="text/html;charset=UTF-8" language="java" %> +<%@ taglib uri="http://www.osoa.org/sca/sca_jsp.tld" prefix="sca" %> + + + + +HelloWorld JMS sample + + + +If this sample is working correctly you should see "Hello World" on the next line... +

+<%= service.sayHello("world") %> +

+If you do not see "Hello World" on the line above then there has been a problem. +

+The sample requires JMS resources be manually configured in the server environment, these are: +a JMS connection factory named "ConnectionFactory", and a destination queues named "HelloWorldService". +See the sample README file for more information. + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-js-client/README b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-js-client/README new file mode 100644 index 0000000000..828aadb0f1 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-js-client/README @@ -0,0 +1,7 @@ +The README in the /samples directory provides +general instructions about building and running samples. (where +distribution-unpack-dir is the directory in which you unpacked the tuscany +binary distribution archive). Take a look there first (noting at you read it that this sample +is not a new style sample). + +TODO - finish \ No newline at end of file diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-js-client/pom.xml b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-js-client/pom.xml new file mode 100644 index 0000000000..63a00a64a8 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-js-client/pom.xml @@ -0,0 +1,104 @@ + + + + 4.0.0 + + org.apache.tuscany.sca + tuscany-sca + 2.0-M5.1 + ../../pom.xml + + + sample-helloworld-js-client-webapp + war + Apache Tuscany SCA Sample Helloworld Javascript Client + + + + + org.apache.tuscany.sca.shades + tuscany-base + 2.0-M5.1 + + + + org.apache.tuscany.sca.shades + tuscany-json-nodep + 2.0-M5.1 + + + + junit + junit + 4.8.1 + test + + + + net.sourceforge.htmlunit + htmlunit + 2.6 + test + + + + + + helloworld-js-client + + + org.mortbay.jetty + maven-jetty-plugin + 6.1.18 + + helloworld-js-client + foo + 9999 + + + + start-jetty + process-test-classes + + run + + + 0 + true + + + 8085 + + + + + + stop-jetty + prepare-package + + stop + + + + + + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-js-client/src/main/java/sample/HelloworldService.java b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-js-client/src/main/java/sample/HelloworldService.java new file mode 100644 index 0000000000..123774b936 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-js-client/src/main/java/sample/HelloworldService.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 sample; + +public interface HelloworldService { + + String sayHello(String name); + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-js-client/src/main/java/sample/HelloworldServiceImpl.java b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-js-client/src/main/java/sample/HelloworldServiceImpl.java new file mode 100644 index 0000000000..66cef71a25 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-js-client/src/main/java/sample/HelloworldServiceImpl.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 sample; + + +public class HelloworldServiceImpl implements HelloworldService { + + public String sayHello(String name) { + return "Hello " + name; + } + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-js-client/src/main/webapp/WEB-INF/web.composite b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-js-client/src/main/webapp/WEB-INF/web.composite new file mode 100644 index 0000000000..d41a8535e2 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-js-client/src/main/webapp/WEB-INF/web.composite @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-js-client/src/main/webapp/WEB-INF/web.xml b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-js-client/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000000..babeb7b203 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-js-client/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,41 @@ + + + + + Apache Tuscany Helloworld JSP Sample + + + tuscany + org.apache.tuscany.sca.host.webapp.TuscanyServletFilter + + + + tuscany + /* + + + + hello.html + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-js-client/src/main/webapp/hello.html b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-js-client/src/main/webapp/hello.html new file mode 100644 index 0000000000..12024cc4d3 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-js-client/src/main/webapp/hello.html @@ -0,0 +1,51 @@ + + + + + Apache Tuscany Helloworld Javascript Client Sample + + + + + + + + + +

Apache Tuscany Helloworld Javascript Client Sample

+ + + + + +
+ + + \ No newline at end of file diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-js-client/src/test/java/itest/HelloworldTestCase.java b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-js-client/src/test/java/itest/HelloworldTestCase.java new file mode 100644 index 0000000000..099b442050 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-js-client/src/test/java/itest/HelloworldTestCase.java @@ -0,0 +1,75 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package itest; + +import static org.junit.Assert.assertTrue; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLConnection; +import java.net.URLEncoder; + +import org.junit.Test; + +/** + * Verfiy the serverside code is working, not sure how to easily itest the browser javascript code + */ +public class HelloworldTestCase { + + @Test + public void testA() throws MalformedURLException, IOException { + + URL url = new URL("http://localhost:8085/helloworld-js-client/org.oasisopen.sca.componentContext.js/foo/call/plaincall/service.sayHello.dwr"); + URLConnection conn = url.openConnection(); + conn.setDoOutput(true); + OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream()); + + // to find this run the sample through TCPMON to capture the messages + + String data = URLEncoder.encode("callCount", "UTF-8") + "=" + URLEncoder.encode("1", "UTF-8"); + data += "&" + URLEncoder.encode("page", "UTF-8") + "=" + URLEncoder.encode("/helloworld-js-client/", "UTF-8"); + data += "&" + URLEncoder.encode("httpSessionId", "UTF-8") + "=" + URLEncoder.encode("", "UTF-8"); + data += "&" + URLEncoder.encode("scriptSessionId", "UTF-8") + "=" + URLEncoder.encode("A023DA664E56F075491BE1B87B37B02671", "UTF-8"); + data += "&" + URLEncoder.encode("c0-scriptName", "UTF-8") + "=" + URLEncoder.encode("service", "UTF-8"); + data += "&" + URLEncoder.encode("c0-methodName", "UTF-8") + "=" + URLEncoder.encode("sayHello", "UTF-8"); + data += "&" + URLEncoder.encode("c0-id", "UTF-8") + "=" + URLEncoder.encode("0", "UTF-8"); + data += "&" + URLEncoder.encode("c0-param0", "UTF-8") + "=" + URLEncoder.encode("string:petra", "UTF-8"); + data += "&" + URLEncoder.encode("batchId", "UTF-8") + "=" + URLEncoder.encode("0", "UTF-8"); + + wr.write(data); + wr.flush(); + + BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream())); + rd.readLine(); // throw 'allowScriptTagRemoting is false.'; + rd.readLine(); //#DWR-INSERT + rd.readLine(); //#DWR-REPLY + String line = rd.readLine(); // dwr.engine._remoteHandleCallback('0','0',"Hello petra"); + wr.close(); + rd.close(); + + assertTrue(line.endsWith("\"Hello petra\");")); + + } + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jsf/pom.xml b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jsf/pom.xml new file mode 100644 index 0000000000..bc2b59f7d4 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jsf/pom.xml @@ -0,0 +1,99 @@ + + + + 4.0.0 + + org.apache.tuscany.sca + tuscany-sca + 2.0-M5.1 + ../../pom.xml + + + sample-helloworld-jsf-webapp + Apache Tuscany SCA Sample Helloworld JSF + war + + + + + org.apache.tuscany.sca + tuscany-sca-api + 2.0-M5.1 + compile + + + + org.apache.tuscany.sca + tuscany-implementation-web-runtime + 2.0-M5.1 + runtime + + + + org.apache.tuscany.sca + tuscany-myfaces + 2.0-M5.1 + runtime + + + + + + helloworld-jsf + + + org.mortbay.jetty + maven-jetty-plugin + 6.1.18 + + helloworld-jsf + foo + 9999 + + + + start-jetty + process-test-classes + + run + + + 0 + true + + + 8085 + + + + + + stop-jetty + prepare-package + + stop + + + + + + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jsf/src/main/java/sample/HelloWorldController.java b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jsf/src/main/java/sample/HelloWorldController.java new file mode 100644 index 0000000000..9c9f541997 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jsf/src/main/java/sample/HelloWorldController.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 sample; + +import org.oasisopen.sca.annotation.Reference; + +/** + * + */ +public class HelloWorldController { + + @Reference + protected HelloworldService service; + + private String name; + + public HelloWorldController() { + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + /** + * Method that is backed to a submit button of a form. + */ + public String send() { + if (service == null) { + name = "reference not injected!"; + } else { + name = service.sayHello(name); + } + return "success"; + } + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jsf/src/main/java/sample/HelloworldService.java b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jsf/src/main/java/sample/HelloworldService.java new file mode 100644 index 0000000000..53ff7a5ca1 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jsf/src/main/java/sample/HelloworldService.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 sample; + +public interface HelloworldService { + + String sayHello(String name); + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jsf/src/main/java/sample/HelloworldServiceImpl.java b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jsf/src/main/java/sample/HelloworldServiceImpl.java new file mode 100644 index 0000000000..23925d6c69 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jsf/src/main/java/sample/HelloworldServiceImpl.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 sample; + +public class HelloworldServiceImpl implements HelloworldService { + + public String sayHello(String name) { + return "Hello " + name; + } + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jsf/src/main/webapp/WEB-INF/faces-config.xml b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jsf/src/main/webapp/WEB-INF/faces-config.xml new file mode 100644 index 0000000000..99cee9faeb --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jsf/src/main/webapp/WEB-INF/faces-config.xml @@ -0,0 +1,51 @@ + + + + + + + helloWorld + sample.HelloWorldController + request + + + + + /helloWorld.jsp + + success + /page2.jsp + + + + + + /page2.jsp + + back + /helloWorld.jsp + + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jsf/src/main/webapp/WEB-INF/web.composite b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jsf/src/main/webapp/WEB-INF/web.composite new file mode 100644 index 0000000000..8976adde3c --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jsf/src/main/webapp/WEB-INF/web.composite @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jsf/src/main/webapp/WEB-INF/web.xml b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jsf/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000000..fecbd7c79b --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jsf/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,191 @@ + + + + + MyProject web.xml + + + + org.apache.tuscany.sca.host.webapp.TuscanyContextListener + + + org.apache.myfaces.config.annotation.LifecycleProvider + org.apache.tuscany.sca.myfaces.TuscanyAnnotationLifecycleProvider + + + + + State saving method: "client" or "server" (= default) + See JSF Specification 2.5.3 + javax.faces.STATE_SAVING_METHOD + client + + + Only applicable if state saving method is "server" (= default). + Defines the amount (default = 20) of the latest views are stored in session. + org.apache.myfaces.NUMBER_OF_VIEWS_IN_SESSION + 20 + + + Only applicable if state saving method is "server" (= default). + If true (default) the state will be serialized to a byte stream before it + is written to the session. + If false the state will not be serialized to a byte stream. + org.apache.myfaces.SERIALIZE_STATE_IN_SESSION + true + + + Only applicable if state saving method is "server" (= default) and if + org.apache.myfaces.SERIALIZE_STATE_IN_SESSION is true (= default) + If true (default) the serialized state will be compressed before it + is written to the session. If false the state will not be compressed. + org.apache.myfaces.COMPRESS_STATE_IN_SESSION + true + + + This parameter tells MyFaces if javascript code should be allowed in the + rendered HTML output. + If javascript is allowed, command_link anchors will have javascript code + that submits the corresponding form. + If javascript is not allowed, the state saving info and nested parameters + will be added as url parameters. + Default: "true" + org.apache.myfaces.ALLOW_JAVASCRIPT + true + + + org.apache.myfaces.DETECT_JAVASCRIPT + false + + + If true, rendered HTML code will be formatted, so that it is "human readable". + i.e. additional line separators and whitespace will be written, that do not + influence the HTML code. + Default: "true" + org.apache.myfaces.PRETTY_HTML + true + + + If true, a javascript function will be rendered that is able to restore the + former vertical scroll on every request. Convenient feature if you have pages + with long lists and you do not want the browser page to always jump to the top + if you trigger a link or button action that stays on the same page. + Default: "false" + org.apache.myfaces.AUTO_SCROLL + true + + + + Used for encrypting view state. Only relevant for client side + state saving. See MyFaces wiki/web site documentation for instructions + on how to configure an application for diffenent encryption strengths. + + org.apache.myfaces.SECRET + NzY1NDMyMTA= + + + + + Validate managed beans, navigation rules and ensure that forms are not nested. + + org.apache.myfaces.VALIDATE + true + + + + + Treat readonly same as if disabled attribute was set for select elements. + + org.apache.myfaces.READONLY_AS_DISABLED_FOR_SELECTS + true + + + + + Use the defined class as the class which will be called when a resource is added to the + ExtensionFilter handling. Using StreamingAddResource here helps with performance. If you want to add + custom components and want to use the ExtensionFilter, you need to provide your custom implementation here. + + org.apache.myfaces.ADD_RESOURCE_CLASS + org.apache.myfaces.renderkit.html.util.DefaultAddResource + + + + + Virtual path in the URL which triggers loading of resources for the MyFaces extended components + in the ExtensionFilter. + + org.apache.myfaces.RESOURCE_VIRTUAL_PATH + /faces/myFacesExtensionResource + + + + + Check if the extensions-filter has been properly configured. + + org.apache.myfaces.CHECK_EXTENSIONS_FILTER + true + + + + + Define partial state saving as true/false. + + javax.faces.PARTIAL_STATE_SAVING_METHOD + false + + + + + org.apache.myfaces.webapp.StartupServletContextListener + + + + + Faces Servlet + javax.faces.webapp.FacesServlet + 1 + + + + + Faces Servlet + *.jsf + + + + + index.jsp + index.html + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jsf/src/main/webapp/helloWorld.jsp b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jsf/src/main/webapp/helloWorld.jsp new file mode 100644 index 0000000000..189c142c99 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jsf/src/main/webapp/helloWorld.jsp @@ -0,0 +1,40 @@ + + +<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %> +<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%> + + + + Apache Tuscany Helloworld JSF sample + + +

Apache Tuscany Helloworld JSF sample

+ + + + + + + + + + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jsf/src/main/webapp/index.jsp b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jsf/src/main/webapp/index.jsp new file mode 100644 index 0000000000..5ca296e115 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jsf/src/main/webapp/index.jsp @@ -0,0 +1,23 @@ + + +<%@ page session="false"%> +<% +response.sendRedirect("helloWorld.jsf"); +%> diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jsf/src/main/webapp/page2.jsp b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jsf/src/main/webapp/page2.jsp new file mode 100644 index 0000000000..89259021c7 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jsf/src/main/webapp/page2.jsp @@ -0,0 +1,38 @@ + + +<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %> +<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%> + + + Apache Tuscany Helloworld JSF sample + + +

Apache Tuscany Helloworld JSF sample

+ + + +
+ + + +
+
+ + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jsp/README b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jsp/README new file mode 100644 index 0000000000..828aadb0f1 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jsp/README @@ -0,0 +1,7 @@ +The README in the /samples directory provides +general instructions about building and running samples. (where +distribution-unpack-dir is the directory in which you unpacked the tuscany +binary distribution archive). Take a look there first (noting at you read it that this sample +is not a new style sample). + +TODO - finish \ No newline at end of file diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jsp/pom.xml b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jsp/pom.xml new file mode 100644 index 0000000000..42110cf72d --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jsp/pom.xml @@ -0,0 +1,98 @@ + + + + 4.0.0 + + org.apache.tuscany.sca + tuscany-sca + 2.0-M5.1 + ../../pom.xml + + + sample-helloworld-jsp-webapp + war + Apache Tuscany SCA Sample Helloworld JSP + + + + + org.apache.tuscany.sca.shades + tuscany-base + 2.0-M5.1 + + + + junit + junit + 4.8.1 + test + + + + net.sourceforge.htmlunit + htmlunit + 2.6 + test + + + + + + helloworld-jsp + + + org.mortbay.jetty + maven-jetty-plugin + 6.1.18 + + helloworld-jsp + foo + 9999 + + + + start-jetty + process-test-classes + + run + + + 0 + true + + + 8085 + + + + + + stop-jetty + prepare-package + + stop + + + + + + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jsp/src/main/java/sample/HelloworldService.java b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jsp/src/main/java/sample/HelloworldService.java new file mode 100644 index 0000000000..53ff7a5ca1 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jsp/src/main/java/sample/HelloworldService.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 sample; + +public interface HelloworldService { + + String sayHello(String name); + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jsp/src/main/java/sample/HelloworldServiceImpl.java b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jsp/src/main/java/sample/HelloworldServiceImpl.java new file mode 100644 index 0000000000..a22c095f29 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jsp/src/main/java/sample/HelloworldServiceImpl.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 sample; + + +public class HelloworldServiceImpl implements HelloworldService { + + public String sayHello(String name) { + return "Hello " + name; + } + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jsp/src/main/webapp/WEB-INF/web.composite b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jsp/src/main/webapp/WEB-INF/web.composite new file mode 100644 index 0000000000..8976adde3c --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jsp/src/main/webapp/WEB-INF/web.composite @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jsp/src/main/webapp/WEB-INF/web.xml b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jsp/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000000..fa1f7ad7b9 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jsp/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,41 @@ + + + + + Apache Tuscany Helloworld JSP Sample + + + tuscany + org.apache.tuscany.sca.host.webapp.TuscanyServletFilter + + + + tuscany + /* + + + + hello.jsp + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jsp/src/main/webapp/hello.jsp b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jsp/src/main/webapp/hello.jsp new file mode 100644 index 0000000000..ffd01cca73 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jsp/src/main/webapp/hello.jsp @@ -0,0 +1,37 @@ + + +<%@ page contentType="text/html;charset=UTF-8" language="java" %> +<%@ taglib uri="http://www.osoa.org/sca/sca_jsp.tld" prefix="sca" %> + + + + + + +

Apache Tuscany Helloworld JSP Sample

+ + Calling HelloworldService sayHello("world") returns: + +

+ + <%= service.sayHello("world") %> + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jsp/src/test/java/itest/HelloworldTestCase.java b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jsp/src/test/java/itest/HelloworldTestCase.java new file mode 100644 index 0000000000..665957b0eb --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-jsp/src/test/java/itest/HelloworldTestCase.java @@ -0,0 +1,53 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT 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 itest; + +import static org.junit.Assert.assertEquals; + +import java.io.IOException; +import java.net.MalformedURLException; +import java.util.Iterator; + +import org.junit.Test; + +import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException; +import com.gargoylesoftware.htmlunit.WebClient; +import com.gargoylesoftware.htmlunit.html.HtmlElement; +import com.gargoylesoftware.htmlunit.html.HtmlPage; +import com.gargoylesoftware.htmlunit.html.HtmlParagraph; + +/** + */ +public class HelloworldTestCase { + + @Test + public void testA() throws FailingHttpStatusCodeException, MalformedURLException, IOException { + HtmlPage page = (HtmlPage)new WebClient().getPage("http://localhost:8085/helloworld-jsp"); + Iterator ss = page.getAllHtmlChildElements().iterator(); + while(ss.hasNext()) { + HtmlElement htmlElement = (HtmlElement) ss.next(); + if( htmlElement instanceof HtmlParagraph) { + assertEquals("Hello world", htmlElement.asText()); + break; + } + } + } + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-servlet/README b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-servlet/README new file mode 100644 index 0000000000..828aadb0f1 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-servlet/README @@ -0,0 +1,7 @@ +The README in the /samples directory provides +general instructions about building and running samples. (where +distribution-unpack-dir is the directory in which you unpacked the tuscany +binary distribution archive). Take a look there first (noting at you read it that this sample +is not a new style sample). + +TODO - finish \ No newline at end of file diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-servlet/pom.xml b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-servlet/pom.xml new file mode 100644 index 0000000000..b59d4861b8 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-servlet/pom.xml @@ -0,0 +1,105 @@ + + + + 4.0.0 + + org.apache.tuscany.sca + tuscany-sca + 2.0-M5.1 + ../../pom.xml + + + sample-helloworld-servlet-webapp + war + Apache Tuscany SCA Sample Helloworld Servlet + + + + + org.apache.tuscany.sca.shades + tuscany-base-nodep + 2.0-M5.1 + + + + javax.servlet + servlet-api + 2.5 + provided + + + + junit + junit + 4.8.1 + test + + + + net.sourceforge.htmlunit + htmlunit + 2.6 + test + + + + + + helloworld-servlet + + + org.mortbay.jetty + maven-jetty-plugin + 6.1.18 + + helloworld-servlet + foo + 9999 + + + + start-jetty + process-test-classes + + run + + + 0 + true + + + 8085 + + + + + + stop-jetty + prepare-package + + stop + + + + + + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-servlet/src/main/java/sample/HelloworldService.java b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-servlet/src/main/java/sample/HelloworldService.java new file mode 100644 index 0000000000..2e43e09897 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-servlet/src/main/java/sample/HelloworldService.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 sample; + +public interface HelloworldService { + + String sayHello(String name); + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-servlet/src/main/java/sample/HelloworldServiceImpl.java b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-servlet/src/main/java/sample/HelloworldServiceImpl.java new file mode 100644 index 0000000000..9e79276704 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-servlet/src/main/java/sample/HelloworldServiceImpl.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 sample; + +public class HelloworldServiceImpl implements HelloworldService { + + public String sayHello(String name) { + return "Hello " + name; + } + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-servlet/src/main/java/sample/HelloworldServlet.java b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-servlet/src/main/java/sample/HelloworldServlet.java new file mode 100644 index 0000000000..bb72c50f6a --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-servlet/src/main/java/sample/HelloworldServlet.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 sample; + +import java.io.IOException; +import java.io.Writer; + +import javax.servlet.ServletConfig; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.oasisopen.sca.ComponentContext; +import org.oasisopen.sca.annotation.Reference; + +/** + */ +public class HelloworldServlet extends HttpServlet { + private static final long serialVersionUID = 1L; + + @Reference + protected HelloworldService service; + + @Override + public void init(ServletConfig servletConfig) throws ServletException { + if (service == null) { + System.out.println("HelloworldServlet reference injection failed, using ComponentContext"); + ComponentContext cc = (ComponentContext)servletConfig.getServletContext().getAttribute("org.oasisopen.sca.ComponentContext"); + service = cc.getService(HelloworldService.class, "service"); + } + } + + @Override + protected void service(HttpServletRequest request, HttpServletResponse response) throws IOException { + + String name = request.getParameter("name"); + String greeting = service.sayHello(name); + + Writer out = response.getWriter(); + out.write("Apache Tuscany Helloworld Servlet Sample"); + out.write("

Apache Tuscany Helloworld Servlet Sample

"); + out.write("
Result: " + greeting); + out.write(""); + out.flush(); + out.close(); + } +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-servlet/src/main/webapp/WEB-INF/web.composite b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-servlet/src/main/webapp/WEB-INF/web.composite new file mode 100644 index 0000000000..8976adde3c --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-servlet/src/main/webapp/WEB-INF/web.composite @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-servlet/src/main/webapp/WEB-INF/web.xml b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-servlet/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000000..a91b3fc96b --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-servlet/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,44 @@ + + + + + Apache Tuscany Helloworld Servlet Sample + + org.apache.tuscany.sca.host.webapp.TuscanyContextListener + + + HelloworldServlet + sample.HelloworldServlet + + + + HelloworldServlet + /HelloworldServlet + + + + hello.html + + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-servlet/src/main/webapp/hello.html b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-servlet/src/main/webapp/hello.html new file mode 100644 index 0000000000..c4484916aa --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-servlet/src/main/webapp/hello.html @@ -0,0 +1,46 @@ + + + + +Apache Tuscany Helloworld Servlet Sample + + + + +

Apache Tuscany Helloworld Servlet Sample

+ +
+ + + + + + + + +
Enter your name: + +
+ +
+
+ + + \ No newline at end of file diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-servlet/src/test/java/itest/HelloworldTestCase.java b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-servlet/src/test/java/itest/HelloworldTestCase.java new file mode 100644 index 0000000000..61d722da1f --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-servlet/src/test/java/itest/HelloworldTestCase.java @@ -0,0 +1,55 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package itest; +import static org.junit.Assert.assertTrue; + +import java.io.IOException; +import java.net.MalformedURLException; + +import org.junit.Test; + +import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException; +import com.gargoylesoftware.htmlunit.WebClient; +import com.gargoylesoftware.htmlunit.html.HtmlButton; +import com.gargoylesoftware.htmlunit.html.HtmlForm; +import com.gargoylesoftware.htmlunit.html.HtmlInput; +import com.gargoylesoftware.htmlunit.html.HtmlPage; + +/** + */ +public class HelloworldTestCase { + + @Test + public void testA() throws FailingHttpStatusCodeException, MalformedURLException, IOException { + HtmlPage page = (HtmlPage)new WebClient().getPage("http://localhost:8085/helloworld-servlet"); + + HtmlForm form = (HtmlForm) page.getForms().get(0); + + HtmlInput textField = form.getInputByName("name"); + textField.setValueAttribute("petra"); + + HtmlButton button = (HtmlButton) form.getButtonsByName("submit").get(0); + + HtmlPage pageResponse = (HtmlPage) button.click(); + + assertTrue(pageResponse.getWebResponse().getContentAsString().endsWith("Hello petra")); + } + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-stripes/pom.xml b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-stripes/pom.xml new file mode 100644 index 0000000000..7a9231ea67 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-stripes/pom.xml @@ -0,0 +1,112 @@ + + + + 4.0.0 + + org.apache.tuscany.sca + tuscany-sca + 2.0-M5.1 + ../../pom.xml + + + sample-helloworld-stripes-webapp + war + Apache Tuscany SCA Sample Helloworld using Stripes + + + + + + org.apache.tuscany.sca.shades + tuscany-base + 2.0-M5.1 + + + + + net.sourceforge.stripes + stripes + 1.5.2 + + + + taglibs + standard + 1.1.2 + + + + junit + junit + 4.8.1 + test + + + + net.sourceforge.htmlunit + htmlunit + 2.6 + test + + + + + + helloworld-stripes + + + org.mortbay.jetty + maven-jetty-plugin + 6.1.18 + + helloworld-stripes + foo + 9999 + + + + start-jetty + process-test-classes + + run + + + 0 + true + + + 8085 + + + + + + stop-jetty + prepare-package + + stop + + + + + + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-stripes/src/main/java/mystripes/action/BaseActionBean.java b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-stripes/src/main/java/mystripes/action/BaseActionBean.java new file mode 100644 index 0000000000..0ab02682ac --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-stripes/src/main/java/mystripes/action/BaseActionBean.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 mystripes.action; + +import net.sourceforge.stripes.action.ActionBean; +import net.sourceforge.stripes.action.ActionBeanContext; + +public class BaseActionBean implements ActionBean { + private ActionBeanContext context; + + public ActionBeanContext getContext() { + return context; + } + public void setContext(ActionBeanContext context) { + this.context = context; + } +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-stripes/src/main/java/mystripes/action/HomeActionBean.java b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-stripes/src/main/java/mystripes/action/HomeActionBean.java new file mode 100644 index 0000000000..0385c92369 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-stripes/src/main/java/mystripes/action/HomeActionBean.java @@ -0,0 +1,45 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT 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 mystripes.action; + +import net.sourceforge.stripes.action.DefaultHandler; +import net.sourceforge.stripes.action.ForwardResolution; +import net.sourceforge.stripes.action.Resolution; +import net.sourceforge.stripes.action.UrlBinding; + +import org.oasisopen.sca.annotation.Reference; + +import sample.HelloworldService; + +@UrlBinding("/Home.htm") +public class HomeActionBean extends BaseActionBean { + + @Reference + HelloworldService service; + + @DefaultHandler + public Resolution view() { + return new ForwardResolution("/WEB-INF/jsp/home.jsp"); + } + + public String getHello() { + return service.sayHello("world"); + } + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-stripes/src/main/java/sample/HelloworldService.java b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-stripes/src/main/java/sample/HelloworldService.java new file mode 100644 index 0000000000..53ff7a5ca1 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-stripes/src/main/java/sample/HelloworldService.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 sample; + +public interface HelloworldService { + + String sayHello(String name); + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-stripes/src/main/java/sample/HelloworldServiceImpl.java b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-stripes/src/main/java/sample/HelloworldServiceImpl.java new file mode 100644 index 0000000000..a22c095f29 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-stripes/src/main/java/sample/HelloworldServiceImpl.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 sample; + + +public class HelloworldServiceImpl implements HelloworldService { + + public String sayHello(String name) { + return "Hello " + name; + } + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-stripes/src/main/resources/StripesResources.properties b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-stripes/src/main/resources/StripesResources.properties new file mode 100644 index 0000000000..902842a19e --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-stripes/src/main/resources/StripesResources.properties @@ -0,0 +1,73 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +# Resource strings used by the tag when there are no nested tags +stripes.errors.header=
Please fix the following errors:
    +stripes.errors.beforeError=
  1. +stripes.errors.afterError=
  2. +stripes.errors.footer=
+ +# Resource strings used by the tag when displaying errors for a +# specific field (e.g. ). If not supplied the +# values above will be used instead. +stripes.fieldErrors.header= +stripes.fieldErrors.beforeError= +stripes.fieldErrors.afterError=
+stripes.fieldErrors.footer= + +# Resource strings used by the stripes:messages tag +stripes.messages.header=
    +stripes.messages.beforeMessage=
  • +stripes.messages.afterMessage=
  • +stripes.messages.footer=
+ +# Validation error messages produced by Stripes' built-in converter classes. These +# are default error messages and can be overridden on per-field and per-form levels. +# Using the 'invalidNumber' error for a field 'age' of a form posting to +# '/user/Profile.action', the keys looked for (in order) would be: +# 1: /user/Profile.action.age.invalidNumber +# 2: /user/Profile.action.age.errorMessage +# 3: age.errorMessage +# 4: /user/Profile.action.invalidNumber +# 5: converter.number.invalidNumber +converter.number.invalidNumber=The value ({1}) entered in field {0} must be a valid number +converter.byte.outOfRange=The value ({1}) entered in field {0} was out of the range {2} to {3} +converter.short.outOfRange=The value ({1}) entered in field {0} was out of the range {2} to {3} +converter.integer.outOfRange=The value ({1}) entered in field {0} was out of the range {2} to {3} +converter.float.outOfRange=The value ({1}) entered in field {0} was out of the range {2} to {3} +converter.enum.notAnEnumeratedValue=The value "{1}" is not a valid value for field {0} +converter.date.invalidDate=The value ({1}) entered in field {0} must be a valid date +converter.email.invalidEmail=The value ({1}) entered is not a valid email address +converter.creditCard.invalidCreditCard=The value ({1}) entered is not a valid credit card number + +# Validation error messages produced by Stripes' annotation based validations. These +# are default error messages and can be overridden on per-field and per-form levels. +# Using the 'valueNotPresent' required field error for a field 'username' of a form +# posting to '/user/Register.action', the keys looked for (in order) would be: +# 1: /user/Register.action.username.valueNotPresent +# 2: /user/Register.action.username.errorMessage +# 3: username.errorMessage +# 4: /user/Register.action.valueNotPresent +# 5: validation.required.valueNotPresent +validation.required.valueNotPresent={0} is a required field +validation.minlength.valueTooShort={0} must be at least {2} characters long +validation.maxlength.valueTooLong={0} must be no more than {2} characters long +validation.minvalue.valueBelowMinimum=The minimum allowed value for {0} is {2} +validation.maxvalue.valueAboveMaximum=The maximum allowed value for {0} is {2} +validation.mask.valueDoesNotMatch={1} is not a valid {0} +validation.expression.valueFailedExpression=The value supplied ({1}) for field {0} is invalid +validation.file.postBodyTooBig=Total upload size of {3} KB exceeds the maximum size of {2} KB diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-stripes/src/main/resources/log4j.properties b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-stripes/src/main/resources/log4j.properties new file mode 100644 index 0000000000..2741999098 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-stripes/src/main/resources/log4j.properties @@ -0,0 +1,48 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +# log4j.properties + +# Set up a logger to the console +log4j.appender.stdout=org.apache.log4j.ConsoleAppender +log4j.appender.stdout.layout=org.apache.log4j.PatternLayout +log4j.appender.stdout.layout.ConversionPattern=[%d{HH:mm:ss}] %-5p %c %x - %m%n + +# Use this to only see log messages beyond a certain threshold in the console +#log4j.appender.stdout.Threshold=WARN + +# Set up a logger to a log file +log4j.appender.logfile=org.apache.log4j.DailyRollingFileAppender +log4j.appender.logfile.layout=org.apache.log4j.PatternLayout +log4j.appender.logfile.layout.ConversionPattern=[%d{HH:mm:ss}] %-5p %c %x - %m%n +log4j.appender.logfile.File=${user.home}/stripesquick.log +log4j.appender.logfile.DatePattern='.'yyyy-MM-dd + +# Use this to only see log messages beyond a certain threshold in the log file +#log4j.appender.logfile.Threshold=WARN + +# Logger settings +log4j.rootLogger=INFO, stdout, logfile + +# Valid levels are TRACE, DEBUG, INFO, WARN, ERROR, FATAL +# Change to TRACE or DEBUG to see more log messages +log4j.logger.net.sourceforge.stripes=WARN +log4j.logger.org.stripesbook.quickstart=INFO +log4j.logger.org.mortbay.log=INFO +log4j.logger.org=WARN +log4j.logger.com=WARN +log4j.logger.net=WARN diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-stripes/src/main/webapp/WEB-INF/jsp/home.jsp b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-stripes/src/main/webapp/WEB-INF/jsp/home.jsp new file mode 100644 index 0000000000..0681c1f2bf --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-stripes/src/main/webapp/WEB-INF/jsp/home.jsp @@ -0,0 +1,26 @@ + +<%@ include file="/WEB-INF/jsp/taglibs.jsp" %> + + + +

sayHello returns: ${actionBean.hello}

+

Congratulations, you've set up a Stripes SCA project!

+
+
diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-stripes/src/main/webapp/WEB-INF/jsp/layout.jsp b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-stripes/src/main/webapp/WEB-INF/jsp/layout.jsp new file mode 100644 index 0000000000..d0fb716b80 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-stripes/src/main/webapp/WEB-INF/jsp/layout.jsp @@ -0,0 +1,39 @@ + +<%@ include file="/WEB-INF/jsp/taglibs.jsp" %> + + + + + + + ${title} + + + + + +
+ + +
+ + + +
\ No newline at end of file diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-stripes/src/main/webapp/WEB-INF/jsp/taglibs.jsp b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-stripes/src/main/webapp/WEB-INF/jsp/taglibs.jsp new file mode 100644 index 0000000000..f85602fcfa --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-stripes/src/main/webapp/WEB-INF/jsp/taglibs.jsp @@ -0,0 +1,29 @@ + +<%-- Stripes TLD --%> +<%@ taglib prefix="s" uri="http://stripes.sourceforge.net/stripes.tld" %> +<%@ taglib prefix="sdyn" uri="http://stripes.sourceforge.net/stripes-dynattr.tld" %> + +<%-- JSTL TLDs --%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> + +<%-- This is so that you can conveniently refer to the context path with ${contextPath} --%> + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-stripes/src/main/webapp/WEB-INF/web.composite b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-stripes/src/main/webapp/WEB-INF/web.composite new file mode 100644 index 0000000000..8976adde3c --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-stripes/src/main/webapp/WEB-INF/web.composite @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-stripes/src/main/webapp/WEB-INF/web.xml b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-stripes/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000000..f01584cc2f --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-stripes/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,61 @@ + + + + + Apache Tuscany Helloworld Stripes Sample + + + org.apache.tuscany.sca.host.webapp.TuscanyContextListener + + + + StripesFilter + net.sourceforge.stripes.controller.StripesFilter + + ActionResolver.Packages + mystripes.action + + + Extension.Packages + org.apache.tuscany.sca.stripes + + + + + DispatcherServlet + net.sourceforge.stripes.controller.DispatcherServlet + 1 + + + + StripesFilter + DispatcherServlet + REQUEST + FORWARD + + + + DispatcherServlet + *.htm + + + + index.html + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-stripes/src/main/webapp/index.html b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-stripes/src/main/webapp/index.html new file mode 100644 index 0000000000..c79d29e6a5 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-stripes/src/main/webapp/index.html @@ -0,0 +1,24 @@ + + + + + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-stripes/src/test/java/README b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-stripes/src/test/java/README new file mode 100644 index 0000000000..828aadb0f1 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-stripes/src/test/java/README @@ -0,0 +1,7 @@ +The README in the /samples directory provides +general instructions about building and running samples. (where +distribution-unpack-dir is the directory in which you unpacked the tuscany +binary distribution archive). Take a look there first (noting at you read it that this sample +is not a new style sample). + +TODO - finish \ No newline at end of file diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-stripes/src/test/java/itest/HelloworldTestCase.java b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-stripes/src/test/java/itest/HelloworldTestCase.java new file mode 100644 index 0000000000..7f4359fa43 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld-stripes/src/test/java/itest/HelloworldTestCase.java @@ -0,0 +1,53 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT 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 itest; + +import static org.junit.Assert.assertEquals; + +import java.io.IOException; +import java.net.MalformedURLException; +import java.util.Iterator; + +import org.junit.Test; + +import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException; +import com.gargoylesoftware.htmlunit.WebClient; +import com.gargoylesoftware.htmlunit.html.HtmlElement; +import com.gargoylesoftware.htmlunit.html.HtmlPage; +import com.gargoylesoftware.htmlunit.html.HtmlParagraph; + +/** + */ +public class HelloworldTestCase { + + @Test + public void testA() throws FailingHttpStatusCodeException, MalformedURLException, IOException { + HtmlPage page = (HtmlPage)new WebClient().getPage("http://localhost:8085/helloworld-stripes"); + Iterator ss = page.getAllHtmlChildElements().iterator(); + while(ss.hasNext()) { + HtmlElement htmlElement = (HtmlElement) ss.next(); + if( htmlElement instanceof HtmlParagraph) { + assertEquals("sayHello returns: Hello world", htmlElement.asText()); + break; + } + } + } + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld/README b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld/README new file mode 100644 index 0000000000..828aadb0f1 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld/README @@ -0,0 +1,7 @@ +The README in the /samples directory provides +general instructions about building and running samples. (where +distribution-unpack-dir is the directory in which you unpacked the tuscany +binary distribution archive). Take a look there first (noting at you read it that this sample +is not a new style sample). + +TODO - finish \ No newline at end of file diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld/pom.xml b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld/pom.xml new file mode 100644 index 0000000000..1226b769b7 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld/pom.xml @@ -0,0 +1,118 @@ + + + + 4.0.0 + + org.apache.tuscany.sca + tuscany-sca + 2.0-M5.1 + ../../pom.xml + + + sample-helloworld-webapp + Apache Tuscany SCA Sample Helloworld + war + + + + + org.apache.tuscany.sca.shades + tuscany-base-nodep + 2.0-M5.1 + + + + junit + junit + 4.8.1 + test + + + + + + helloworld + + + + org.apache.maven.plugins + maven-dependency-plugin + + + copy + compile + + copy + + + + + org.apache.tuscany.sca + sample-helloworld + ${pom.version} + + src/main/webapp/WEB-INF/sca-contributions + + + + + + + + + org.mortbay.jetty + maven-jetty-plugin + 6.1.18 + + helloworld + foo + 9999 + + + + start-jetty + process-test-classes + + run + + + src/test/resources/test-web.xml + 0 + true + + + 8085 + + + + + + stop-jetty + prepare-package + + stop + + + + + + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld/src/main/webapp/WEB-INF/web.xml b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000000..85aed34b26 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,47 @@ + + + + + Apache Tuscany Helloworld Sample + + + contributions + /WEB-INF/sca-contributions + + + + org.apache.tuscany.sca.config + uri:default + + + + tuscany + org.apache.tuscany.sca.host.webapp.TuscanyServletFilter + + + + tuscany + /* + + + diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld/src/test/java/itest/Helloworld.java b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld/src/test/java/itest/Helloworld.java new file mode 100644 index 0000000000..f1ccf0b1ba --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld/src/test/java/itest/Helloworld.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 itest; + +import org.oasisopen.sca.annotation.Remotable; + +@Remotable +public interface Helloworld { + String sayHello(String name); +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld/src/test/java/itest/HelloworldTestCaseFIXME.java b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld/src/test/java/itest/HelloworldTestCaseFIXME.java new file mode 100644 index 0000000000..c1c2c6aae0 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld/src/test/java/itest/HelloworldTestCaseFIXME.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 itest; + +import static org.junit.Assert.assertEquals; + +import java.net.URI; + +import org.junit.Test; +import org.oasisopen.sca.NoSuchDomainException; +import org.oasisopen.sca.NoSuchServiceException; +import org.oasisopen.sca.client.SCAClientFactory; + +/** + */ +public class HelloworldTestCaseFIXME { + + @Test + public void testHelloworld() throws NoSuchDomainException, NoSuchServiceException { +// TODO: need to fix the config URI so it works properly +// SCAClientFactory factory = SCAClientFactory.newInstance(URI.create("uri:default?remote=127.0.0.1:54321")); + SCAClientFactory factory = SCAClientFactory.newInstance(URI.create("tuscany:default?remotes=192.168.1.64")); + Helloworld helloworld = factory.getService(Helloworld.class, "HelloworldComponent"); + assertEquals("Hello World", helloworld.sayHello("World")); + } + +} diff --git a/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld/src/test/resources/test-web.xml b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld/src/test/resources/test-web.xml new file mode 100644 index 0000000000..a68aa28698 --- /dev/null +++ b/sca-java-2.x/tags/2.0-M5.1/samples/webapps/helloworld/src/test/resources/test-web.xml @@ -0,0 +1,30 @@ + + + + + + org.apache.tuscany.sca.config + uri:default?bind=127.0.0.1:54321 + + + -- cgit v1.2.3