From 074cc3cff2f00457318bd322a6bd58f65686ae5c Mon Sep 17 00:00:00 2001 From: nash Date: Tue, 16 Nov 2010 10:40:14 +0000 Subject: Tag for 1.6.1-RC2 git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@1035578 13f79535-47bb-0310-9956-ffa450edef68 --- .../itest/osgi-tuscany/osgi-tuscany-test/pom.xml | 99 +++ .../test/osgi/runtime/impl/EquinoxTestRuntime.java | 92 +++ .../test/osgi/runtime/impl/FelixTestRuntime.java | 163 +++++ .../test/osgi/runtime/impl/OSGiTestRuntime.java | 163 +++++ .../tuscany/sca/test/util/OSGiRuntimeLoader.java | 86 +++ .../tuscany/sca/test/util/TuscanyLoader.java | 136 +++++ .../harness/OSGiTuscanyNonOSGiTestHarness.java | 109 ++++ .../test/osgi/harness/OSGiTuscanyTestHarness.java | 243 ++++++++ .../CalculatorImplementationPoliciesTestCase.java | 61 ++ .../test/osgi/tuscany/CalculatorRmiTestCase.java | 62 ++ .../osgi/tuscany/CalculatorScriptTestCase.java | 63 ++ .../osgi/tuscany/CallbackWsClientTestCase.java | 61 ++ .../osgi/tuscany/CallbackWsServiceTestCase.java | 61 ++ .../tuscany/HelloworldWsServiceJmsTestCase.java | 61 ++ .../tuscany/HelloworldWsServiceSecureTestCase.java | 61 ++ .../osgi/tuscany/HelloworldWsServiceTestCase.java | 61 ++ .../test/osgi/tuscany/NonOSGiSamplesTestCase.java | 85 +++ .../test/osgi/tuscany/OSGiSupplyChainTestCase.java | 71 +++ .../osgi/tuscany/OSGiTuscanyRuntimeTestCase.java | 137 +++++ .../tuscany/TuscanySampleExtensionsTestCase.java | 93 +++ .../TuscanySamplesUsingOldDomainTestCase.java | 80 +++ .../src/test/resources/META-INF/MANIFEST.MF | 14 + .../test/resources/felix/felix.config.properties | 45 ++ .../tags/1.6.1-RC2/itest/osgi-tuscany/pom.xml | 39 ++ .../osgi-tuscany/test-bundles/build-bundles.xml | 31 + .../itest/osgi-tuscany/test-bundles/pom.xml | 124 ++++ .../java/supplychain/client/SupplyChainClient.java | 115 ++++ .../main/java/supplychain/customer/Customer.java | 37 ++ .../customer/JavaCustomerComponentImpl.java | 61 ++ .../retailer/JavaRetailerComponentImpl.java | 59 ++ .../main/java/supplychain/retailer/Retailer.java | 28 + .../shipper/JavaShipperComponentImpl.java | 50 ++ .../src/main/java/supplychain/shipper/Shipper.java | 28 + .../warehouse/JavaWarehouseComponentImpl.java | 49 ++ .../main/java/supplychain/warehouse/Warehouse.java | 28 + .../src/main/resources/META-INF/SupplyChain.mf | 12 + .../main/resources/META-INF/SupplyChainClient.mf | 21 + .../main/resources/META-INF/sca-contribution.xml | 26 + .../resources/supplychain/supplychain.composite | 48 ++ .../main/resources/supplychain/ws/Customer.wsdl | 135 +++++ .../resources/supplychain/ws/supplychain.composite | 55 ++ .../osgi-tuscany/tuscany-osgi-installer/pom.xml | 671 +++++++++++++++++++++ .../sca/installer/InstallerBundleActivator.java | 405 +++++++++++++ .../itest/osgi-tuscany/tuscany-versioned/pom.xml | 644 ++++++++++++++++++++ 44 files changed, 4773 insertions(+) create mode 100644 sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/osgi-tuscany-test/pom.xml create mode 100644 sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/osgi-tuscany-test/src/main/java/org/apache/tuscany/sca/test/osgi/runtime/impl/EquinoxTestRuntime.java create mode 100644 sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/osgi-tuscany-test/src/main/java/org/apache/tuscany/sca/test/osgi/runtime/impl/FelixTestRuntime.java create mode 100644 sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/osgi-tuscany-test/src/main/java/org/apache/tuscany/sca/test/osgi/runtime/impl/OSGiTestRuntime.java create mode 100644 sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/osgi-tuscany-test/src/main/java/org/apache/tuscany/sca/test/util/OSGiRuntimeLoader.java create mode 100644 sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/osgi-tuscany-test/src/main/java/org/apache/tuscany/sca/test/util/TuscanyLoader.java create mode 100644 sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/osgi-tuscany-test/src/test/java/org/apache/tuscany/sca/test/osgi/harness/OSGiTuscanyNonOSGiTestHarness.java create mode 100644 sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/osgi-tuscany-test/src/test/java/org/apache/tuscany/sca/test/osgi/harness/OSGiTuscanyTestHarness.java create mode 100644 sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/osgi-tuscany-test/src/test/java/org/apache/tuscany/sca/test/osgi/tuscany/CalculatorImplementationPoliciesTestCase.java create mode 100644 sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/osgi-tuscany-test/src/test/java/org/apache/tuscany/sca/test/osgi/tuscany/CalculatorRmiTestCase.java create mode 100644 sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/osgi-tuscany-test/src/test/java/org/apache/tuscany/sca/test/osgi/tuscany/CalculatorScriptTestCase.java create mode 100644 sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/osgi-tuscany-test/src/test/java/org/apache/tuscany/sca/test/osgi/tuscany/CallbackWsClientTestCase.java create mode 100644 sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/osgi-tuscany-test/src/test/java/org/apache/tuscany/sca/test/osgi/tuscany/CallbackWsServiceTestCase.java create mode 100644 sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/osgi-tuscany-test/src/test/java/org/apache/tuscany/sca/test/osgi/tuscany/HelloworldWsServiceJmsTestCase.java create mode 100644 sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/osgi-tuscany-test/src/test/java/org/apache/tuscany/sca/test/osgi/tuscany/HelloworldWsServiceSecureTestCase.java create mode 100644 sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/osgi-tuscany-test/src/test/java/org/apache/tuscany/sca/test/osgi/tuscany/HelloworldWsServiceTestCase.java create mode 100644 sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/osgi-tuscany-test/src/test/java/org/apache/tuscany/sca/test/osgi/tuscany/NonOSGiSamplesTestCase.java create mode 100644 sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/osgi-tuscany-test/src/test/java/org/apache/tuscany/sca/test/osgi/tuscany/OSGiSupplyChainTestCase.java create mode 100644 sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/osgi-tuscany-test/src/test/java/org/apache/tuscany/sca/test/osgi/tuscany/OSGiTuscanyRuntimeTestCase.java create mode 100644 sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/osgi-tuscany-test/src/test/java/org/apache/tuscany/sca/test/osgi/tuscany/TuscanySampleExtensionsTestCase.java create mode 100644 sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/osgi-tuscany-test/src/test/java/org/apache/tuscany/sca/test/osgi/tuscany/TuscanySamplesUsingOldDomainTestCase.java create mode 100644 sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/osgi-tuscany-test/src/test/resources/META-INF/MANIFEST.MF create mode 100644 sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/osgi-tuscany-test/src/test/resources/felix/felix.config.properties create mode 100644 sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/pom.xml create mode 100644 sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/test-bundles/build-bundles.xml create mode 100644 sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/test-bundles/pom.xml create mode 100644 sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/test-bundles/src/main/java/supplychain/client/SupplyChainClient.java create mode 100644 sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/test-bundles/src/main/java/supplychain/customer/Customer.java create mode 100644 sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/test-bundles/src/main/java/supplychain/customer/JavaCustomerComponentImpl.java create mode 100644 sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/test-bundles/src/main/java/supplychain/retailer/JavaRetailerComponentImpl.java create mode 100644 sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/test-bundles/src/main/java/supplychain/retailer/Retailer.java create mode 100644 sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/test-bundles/src/main/java/supplychain/shipper/JavaShipperComponentImpl.java create mode 100644 sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/test-bundles/src/main/java/supplychain/shipper/Shipper.java create mode 100644 sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/test-bundles/src/main/java/supplychain/warehouse/JavaWarehouseComponentImpl.java create mode 100644 sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/test-bundles/src/main/java/supplychain/warehouse/Warehouse.java create mode 100644 sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/test-bundles/src/main/resources/META-INF/SupplyChain.mf create mode 100644 sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/test-bundles/src/main/resources/META-INF/SupplyChainClient.mf create mode 100644 sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/test-bundles/src/main/resources/META-INF/sca-contribution.xml create mode 100644 sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/test-bundles/src/main/resources/supplychain/supplychain.composite create mode 100644 sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/test-bundles/src/main/resources/supplychain/ws/Customer.wsdl create mode 100644 sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/test-bundles/src/main/resources/supplychain/ws/supplychain.composite create mode 100644 sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/tuscany-osgi-installer/pom.xml create mode 100644 sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/tuscany-osgi-installer/src/main/java/org/apache/tuscany/sca/installer/InstallerBundleActivator.java create mode 100644 sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/tuscany-versioned/pom.xml (limited to 'sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany') diff --git a/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/osgi-tuscany-test/pom.xml b/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/osgi-tuscany-test/pom.xml new file mode 100644 index 0000000000..1ca1d61911 --- /dev/null +++ b/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/osgi-tuscany-test/pom.xml @@ -0,0 +1,99 @@ + + + + 4.0.0 + + org.apache.tuscany.sca + tuscany-itest + 1.6.1 + ../../pom.xml + + itest-osgi-tuscany-test + Apache Tuscany OSGi-Based Tuscany Runtime Tests + + + + + org.eclipse + osgi + 3.3.2.R33x_v20080105 + + + + + + + junit + junit + 4.5 + test + + + + + + + + org.apache.maven.plugins + maven-surefire-plugin + + pertest + + + + + + + + ops4j-repository + http://repository.ops4j.org/maven2 + + false + + + + + diff --git a/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/osgi-tuscany-test/src/main/java/org/apache/tuscany/sca/test/osgi/runtime/impl/EquinoxTestRuntime.java b/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/osgi-tuscany-test/src/main/java/org/apache/tuscany/sca/test/osgi/runtime/impl/EquinoxTestRuntime.java new file mode 100644 index 0000000000..2e3137239e --- /dev/null +++ b/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/osgi-tuscany-test/src/main/java/org/apache/tuscany/sca/test/osgi/runtime/impl/EquinoxTestRuntime.java @@ -0,0 +1,92 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.tuscany.sca.test.osgi.runtime.impl; + +import java.lang.reflect.Method; + +import org.osgi.framework.BundleContext; + +public class EquinoxTestRuntime extends OSGiTestRuntime { + + + private static BundleContext bundleContext; + + private static EquinoxTestRuntime instance; + + private static Class eclipseStarterClass; + + public static OSGiTestRuntime getInstance() throws Exception { + if (instance == null) { + eclipseStarterClass = EquinoxTestRuntime.class.getClassLoader().loadClass("org.eclipse.core.runtime.adaptor.EclipseStarter"); + EquinoxTestRuntime runtime = new EquinoxTestRuntime(); + instance = runtime; + } + return instance; + } + + + protected BundleContext startRuntime() throws Exception { + + if (bundleContext != null) + return bundleContext; + + Method startupMethod = eclipseStarterClass.getMethod("startup", String [].class, Runnable.class); + + System.setProperty("org.osgi.framework.system.packages", getSystemPackages()); + // Equinox version 3.2 upwards have a startup method which returns BundleContext + bundleContext = (BundleContext) startupMethod.invoke(null, + new String[] {/*"-clean", */"-console", "-configuration", "target/configuration"}, + null ); + + return bundleContext; + + } + + @Override + public BundleContext getBundleContext() { + return bundleContext; + } + + @Override + protected void setBundleContext(BundleContext bundleContext) { + super.setBundleContext(bundleContext); + EquinoxTestRuntime.bundleContext = bundleContext; + } + + @Override + public void shutdown() throws Exception { + + if (bundleContext == null) + return; + bundleContext = null; + instance = null; + if (eclipseStarterClass != null) { + Method shutdownMethod = eclipseStarterClass.getMethod("shutdown"); + try { + shutdownMethod.invoke(eclipseStarterClass); + } catch (Exception e) { + // Ignore errors. + } + } + super.shutdown(); + } + + + +} diff --git a/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/osgi-tuscany-test/src/main/java/org/apache/tuscany/sca/test/osgi/runtime/impl/FelixTestRuntime.java b/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/osgi-tuscany-test/src/main/java/org/apache/tuscany/sca/test/osgi/runtime/impl/FelixTestRuntime.java new file mode 100644 index 0000000000..0dafffdb8c --- /dev/null +++ b/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/osgi-tuscany-test/src/main/java/org/apache/tuscany/sca/test/osgi/runtime/impl/FelixTestRuntime.java @@ -0,0 +1,163 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.tuscany.sca.test.osgi.runtime.impl; + +import java.io.File; +import java.lang.reflect.Constructor; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Properties; + +import org.osgi.framework.Bundle; +import org.osgi.framework.BundleActivator; +import org.osgi.framework.BundleContext; + +public class FelixTestRuntime extends OSGiTestRuntime implements BundleActivator { + + private static BundleContext bundleContext; + + private static FelixTestRuntime instance; + + private static Bundle felix; + + + public static OSGiTestRuntime getInstance() throws Exception { + if (instance == null) { + + FelixTestRuntime runtime = new FelixTestRuntime(); + instance = runtime; + } + return instance; + } + + +// private void deleteDirectory(File dir) { +// File[] files = dir.listFiles(); +// for (int i = 0; i < files.length; i++) { +// if (files[i].isDirectory()) +// deleteDirectory(files[i]); +// else { +// files[i].delete(); +// } +// } +// dir.delete(); +// +// } + +// private void deleteProfile() { +// String profileDirName = System.getProperty("felix.cache.profiledir"); +// if (profileDirName == null) profileDirName = ".felix"; +// File profileDir = new File(profileDirName); +// if (profileDir.isDirectory()) +// deleteDirectory(profileDir); +// else +// profileDir.delete(); +// } + + protected BundleContext startRuntime() throws Exception { + + if (bundleContext != null) + return bundleContext; + + ClassLoader cl = this.getClass().getClassLoader(); + Class felixMainClass = cl.loadClass("org.apache.felix.main.Main"); + Class felixClass = cl.loadClass("org.apache.felix.framework.Felix"); + Method propsMethod = felixMainClass.getMethod("loadConfigProperties"); + Properties props = (Properties)propsMethod.invoke(null); + + //deleteProfile(); + // Create profile directory + String profileDirName = System.getProperty("felix.cache.profiledir"); + if (profileDirName == null) profileDirName = ".felix"; + File profileDir = new File(profileDirName); + profileDir.mkdir(); + + props.put("felix.cache.profiledir", profileDir.getAbsolutePath()); + props.put("felix.embedded.execution", "true"); + String systemPackages = getSystemPackages() + + ", org.apache.felix.main"; + + + props.put("org.osgi.framework.system.packages", systemPackages); + + Constructor felixConstructor = felixClass.getConstructor(Map.class, List.class); + List activators = new ArrayList(); + + Class autoActivatorClass = cl.loadClass("org.apache.felix.main.AutoActivator"); + Constructor autoActivatorConstructor = autoActivatorClass.getConstructor(Map.class); + BundleActivator autoActivator = (BundleActivator)autoActivatorConstructor.newInstance(props); + activators.add(autoActivator); + felix = (Bundle)felixConstructor.newInstance(props, activators); + felix.start(); + bundleContext = felix.getBundleContext(); + + return bundleContext; + + } + + public void start(BundleContext context) throws Exception { + + bundleContext = context; + synchronized (this) { + this.notify(); + } + } + + public void stop(BundleContext context) throws Exception { + bundleContext = null; + } + + + + @Override + public BundleContext getBundleContext() { + return bundleContext; + } + + @Override + protected void setBundleContext(BundleContext bundleContext) { + super.setBundleContext(bundleContext); + FelixTestRuntime.bundleContext = bundleContext; + } + + + @Override + public void shutdown() throws Exception { + + if (bundleContext == null) + return; + + bundleContext = null; + instance = null; + + felix.stop(); + int retries = 50; + synchronized (felix) { + while (retries-- > 0 && felix.getState() != Bundle.UNINSTALLED) { + felix.wait(100); + } + } + + super.shutdown(); + } + + +} diff --git a/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/osgi-tuscany-test/src/main/java/org/apache/tuscany/sca/test/osgi/runtime/impl/OSGiTestRuntime.java b/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/osgi-tuscany-test/src/main/java/org/apache/tuscany/sca/test/osgi/runtime/impl/OSGiTestRuntime.java new file mode 100644 index 0000000000..6356718fe5 --- /dev/null +++ b/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/osgi-tuscany-test/src/main/java/org/apache/tuscany/sca/test/osgi/runtime/impl/OSGiTestRuntime.java @@ -0,0 +1,163 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.tuscany.sca.test.osgi.runtime.impl; + +import java.lang.reflect.Method; + +import org.osgi.framework.BundleContext; +import org.osgi.framework.BundleException; + +public abstract class OSGiTestRuntime { + + public abstract BundleContext getBundleContext(); + + protected abstract BundleContext startRuntime() throws Exception; + + private static OSGiTestRuntime instance; + + private BundleContext bundleContext; + + + /** + * System property org.apache.tuscany.implementation.osgi.runtime.OSGiRuntime can be set to the + * name of the OSGiRuntime class (eg. EquinoxRuntime). If set, start this runtime and return the + * system bundlecontext. If not set, start Felix from the classpath. + * + * @throws BundleException + */ + public synchronized static OSGiTestRuntime findRuntime() throws Exception { + if (instance != null) { + return instance; + } + String runtimeClassName = System.getProperty(OSGiTestRuntime.class.getName()); + + if (instance != null) + return instance; + + if (runtimeClassName != null) { + try { + Class runtimeClass = OSGiTestRuntime.class.getClassLoader().loadClass(runtimeClassName); + Method method = runtimeClass.getMethod("getInstance"); + instance = (OSGiTestRuntime) method.invoke(null); + return instance; + + } catch (Exception e) { + throw new BundleException("Could not start OSGi runtime " + runtimeClassName, e); + } + } + + try { + instance = EquinoxTestRuntime.getInstance(); + } catch (Throwable e) { + instance = FelixTestRuntime.getInstance(); + } + + return instance; + + } + + + public synchronized static OSGiTestRuntime getRuntime() throws Exception { + + instance = findRuntime(); + + if (instance != null) { + + if (instance.bundleContext == null) { + instance.startRuntime(); + instance.bundleContext = instance.getBundleContext(); + } + return instance; + } + return instance; + } + + + public void shutdown() throws Exception { + + bundleContext = null; + if (this == instance) + instance = null; + } + + protected void setBundleContext(BundleContext bundleContext) { + this.bundleContext = bundleContext; + } + + + /** + * @return the instance + */ + public synchronized static void stop() throws Exception { + if (instance != null) { + instance.shutdown(); + instance = null; + } + } + + + /** + * @return the list of packages to be exported by the system bundle + */ + protected String getSystemPackages() { + String systemPackages = + "org.osgi.framework; version=1.3.0," + + "org.osgi.service.packageadmin; version=1.2.0, " + + "org.osgi.service.startlevel; version=1.0.0, " + + "org.osgi.service.url; version=1.0.0, " + + "org.osgi.util.tracker; version=1.3.2, " + + "javax.xml, " + + "javax.xml.datatype, " + + "javax.xml.namespace, " + + "javax.xml.parsers, " + + "javax.xml.transform, " + + "javax.xml.transform.dom, " + + "javax.xml.transform.sax, " + + "javax.xml.transform.stream, " + + "javax.xml.validation, " + + "javax.xml.xpath, " + + "javax.sql," + + "org.w3c.dom, " + + "org.w3c.dom.bootstrap, " + + "org.w3c.dom.ls, " + + "org.xml.sax, " + + "org.xml.sax.ext, " + + "org.xml.sax.helpers, " + + "javax.security.auth, " + + "javax.security.auth.login, " + + "javax.security.auth.callback, " + + "javax.security.cert, " + + "javax.naming, " + + "javax.naming.spi, " + + "javax.naming.directory, " + + "javax.management, " + + "javax.imageio, " + + "sun.misc, " + + "javax.net, " + + "javax.net.ssl, " + + "javax.crypto, " + + "javax.rmi, " + + "javax.transaction, " + + "javax.transaction.xa"; + + return systemPackages; + + } + +} diff --git a/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/osgi-tuscany-test/src/main/java/org/apache/tuscany/sca/test/util/OSGiRuntimeLoader.java b/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/osgi-tuscany-test/src/main/java/org/apache/tuscany/sca/test/util/OSGiRuntimeLoader.java new file mode 100644 index 0000000000..c9f77b71cf --- /dev/null +++ b/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/osgi-tuscany-test/src/main/java/org/apache/tuscany/sca/test/util/OSGiRuntimeLoader.java @@ -0,0 +1,86 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.tuscany.sca.test.util; + +import org.apache.tuscany.sca.test.osgi.runtime.impl.OSGiTestRuntime; + + + +/** + * OSGi Test Utils : Set up OSGi runtime + */ +public class OSGiRuntimeLoader { + + public static OSGiTestRuntime startOSGiTestRuntime() throws Exception { + + setUpFelixTestRuntime(); + + + System.setProperty("felix.cache.profiledir", "target/.felix.test"); + + OSGiTestRuntime osgiRuntime = OSGiTestRuntime.getRuntime(); + + System.setProperty("felix.cache.profiledir", ".felix"); + + return osgiRuntime; + + } + + public static void setUpOSGiTestRuntime() throws Exception { + + setUpFelixTestRuntime(); + + } + + + private static void setUpFelixTestRuntime() throws Exception { + + String felixConfigFileName = "file:target/test-classes/felix/felix.config.properties"; + + System.setProperty("felix.config.properties", felixConfigFileName); + + System.setProperty("felix.service.urlhandlers", "false"); + + + try { + Class felixMainClass = OSGiRuntimeLoader.class.getClassLoader().loadClass("org.apache.felix.main.Main"); + String felixDir = felixMainClass.getProtectionDomain().getCodeSource().getLocation().getPath(); + int index = 0; + if ((index = felixDir.indexOf("/org.apache.felix.main")) >= 0) { + felixDir = felixDir.substring(0, index); + System.setProperty("FELIX_DIR", felixDir); + } + + } catch (Throwable e) { + // Ignore + } + + + } + + public static void shutdownOSGiRuntime() { + try { + OSGiTestRuntime.stop(); + + } catch (Exception e) { + // Ignore + } + } + +} diff --git a/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/osgi-tuscany-test/src/main/java/org/apache/tuscany/sca/test/util/TuscanyLoader.java b/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/osgi-tuscany-test/src/main/java/org/apache/tuscany/sca/test/util/TuscanyLoader.java new file mode 100644 index 0000000000..1fba0d6dcd --- /dev/null +++ b/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/osgi-tuscany-test/src/main/java/org/apache/tuscany/sca/test/util/TuscanyLoader.java @@ -0,0 +1,136 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.tuscany.sca.test.util; + + +import java.io.File; +import java.io.FilenameFilter; +import java.lang.reflect.Method; + +import org.osgi.framework.Bundle; +import org.osgi.framework.BundleContext; +import org.osgi.framework.BundleException; + +/** + * Load Tuscany into an OSGi runtime + * + */ +public class TuscanyLoader { + + private static final String tuscanyInstallerDir = "../tuscany-osgi-installer"; + private static final String tuscanyInstallerJar = "tuscany-sca-osgi-installer.jar"; + + // 5-bundle version of Tuscany + private static final String scaApiDir = "../sca-api"; + private static final String tuscanySpiDir = "../tuscany-spi"; + private static final String tuscanyRuntimeDir = "../tuscany-runtime"; + private static final String tuscanyExtensionsDir = "../tuscany-extensions"; + private static final String thirdPartyDir = "../tuscany-3rdparty"; + + private static String findBundle(String subDirName, final String jarPrefix) throws Exception { + + File dir = new File(subDirName + "/target"); + if (dir.exists() && dir.isDirectory()) { + File[] files = dir.listFiles(new FilenameFilter() { + + public boolean accept(File dir, String name) { + return name.endsWith(".jar") && (jarPrefix == null || name.startsWith(jarPrefix)); + } + + }); + + if (files != null && files.length > 0) + return files[0].toURI().toURL().toString(); + } + return null; + } + + public static Bundle loadTuscanyIntoOSGi(BundleContext bundleContext) throws Exception { + + String tuscanyInstallerBundleName = new File(tuscanyInstallerDir + "/target/" + tuscanyInstallerJar).toURI().toURL().toString(); + Bundle tuscanyInstallerBundle = bundleContext.installBundle(tuscanyInstallerBundleName); + tuscanyInstallerBundle.start(); + Bundle[] bundles = bundleContext.getBundles(); + Bundle tuscanyRuntimeBundle = tuscanyInstallerBundle; + for (Bundle bundle : bundles) { + if ("org.apache.tuscany.sca.osgi.runtime".equals(bundle.getSymbolicName())) { + tuscanyRuntimeBundle = bundle; + break; + } + } + setThreadContextClassLoader(tuscanyRuntimeBundle); + + return tuscanyRuntimeBundle; + } + + /** + * Load four Tuscany bundles (API, Core-SPI, Runtime, Extensions) and combined third party bundle + * + * @param bundleContext + */ + public static Bundle load5BundleTuscanyIntoOSGi(BundleContext bundleContext) throws Exception { + + + String thirdPartyBundleName = findBundle(thirdPartyDir, null); + Bundle thirdPartyBundle = bundleContext.installBundle(thirdPartyBundleName); + thirdPartyBundle.start(); + + + String scaApiBundleName = findBundle(scaApiDir, null); + Bundle scaApiBundle = bundleContext.installBundle(scaApiBundleName); + scaApiBundle.start(); + + String tuscanySpiBundleName = findBundle(tuscanySpiDir, null); + Bundle tuscanySpiBundle = bundleContext.installBundle(tuscanySpiBundleName); + + String tuscanyRuntimeBundleName = findBundle(tuscanyRuntimeDir, null); + Bundle tuscanyRuntimeBundle = bundleContext.installBundle(tuscanyRuntimeBundleName); + + String tuscanyExtensionsBundleName = findBundle(tuscanyExtensionsDir, null); + Bundle tuscanyExtensionsBundle = bundleContext.installBundle(tuscanyExtensionsBundleName); + + + tuscanySpiBundle.start(); + tuscanyExtensionsBundle.start(); + + setThreadContextClassLoader(tuscanyRuntimeBundle); + return tuscanyRuntimeBundle; + + } + + + // Tuscany runtime is started on a different thread when previously cached bundle is used. + // Set this thread's TCCL to the one used by the runtime. + public static void setThreadContextClassLoader(Bundle tuscanyRuntimeBundle) throws BundleException { + if (tuscanyRuntimeBundle != null) { + + try { + Class runtimeClass = tuscanyRuntimeBundle.loadClass("org.apache.tuscany.sca.osgi.runtime.OSGiRuntime"); + Method getRuntimeMethod = runtimeClass.getMethod("findRuntime"); + Object runtime = getRuntimeMethod.invoke(runtimeClass); + Method getTCCLMethod = runtimeClass.getMethod("getContextClassLoader"); + ClassLoader runtimeTCCL = (ClassLoader) getTCCLMethod.invoke(runtime); + Thread.currentThread().setContextClassLoader(runtimeTCCL); + + } catch (Throwable e) { + } + } + } + +} diff --git a/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/osgi-tuscany-test/src/test/java/org/apache/tuscany/sca/test/osgi/harness/OSGiTuscanyNonOSGiTestHarness.java b/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/osgi-tuscany-test/src/test/java/org/apache/tuscany/sca/test/osgi/harness/OSGiTuscanyNonOSGiTestHarness.java new file mode 100644 index 0000000000..8bf7a1fb2f --- /dev/null +++ b/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/osgi-tuscany-test/src/test/java/org/apache/tuscany/sca/test/osgi/harness/OSGiTuscanyNonOSGiTestHarness.java @@ -0,0 +1,109 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.tuscany.sca.test.osgi.harness; + +import java.io.File; +import java.lang.reflect.Method; +import java.net.URL; +import java.net.URLClassLoader; +import java.util.HashSet; + +import junit.framework.Assert; + +import org.apache.tuscany.sca.test.util.TuscanyLoader; + +/* + * Test Tuscany running in an OSGi container + * This harness runs Tuscany samples outside OSGi with Tuscany running in OSGi + */ +public class OSGiTuscanyNonOSGiTestHarness extends OSGiTuscanyTestHarness { + + public void runTest(String... testDirs) throws Exception { + + String mainTestDir = testDirs[0]; + + File testDir = new File(mainTestDir + "/target/test-classes"); + if (!testDir.exists()) { + System.err.println("Test directory " + testDir + " does not exist"); + return; + } + + System.out.println("Run tests from : " + mainTestDir); + + long startTime = System.currentTimeMillis(); + + String[] dirs = new String[testDirs.length + 2]; + int i = 0; + dirs[i++] = mainTestDir + "/target/test-classes"; + dirs[i++] = "target/test-classes"; + for (int j = 0; j < testDirs.length; j++) { + dirs[i++] = testDirs[j] + "/target/classes"; + } + + tuscanyRuntime = TuscanyLoader.loadTuscanyIntoOSGi(getBundleContext()); + long endTime = System.currentTimeMillis(); + + System.out.println("Loaded Tuscany, time taken = " + (endTime - startTime) + " ms"); + + URL[] dirURLs = new URL[dirs.length]; + for (int j = 0; j < dirs.length; j++) { + dirURLs[j] = new File(dirs[j]).toURI().toURL(); + } + ClassLoader testClassLoader = new URLClassLoader(dirURLs, Thread.currentThread().getContextClassLoader()); + Thread.currentThread().setContextClassLoader(testClassLoader); + + Class testClass = testClassLoader.loadClass(this.getClass().getName()); + Method testMethod = testClass.getMethod("runAllTestsFromDirs", ClassLoader.class, String[].class); + Object testObject = testClass.newInstance(); + testMethod.invoke(testObject, testClassLoader, dirs); + + } + + public void getTestCases(File dir, String prefix, HashSet testCaseSet) { + File[] files = dir.listFiles(); + for (File file : files) { + if (file.isDirectory()) { + String newPrefix = prefix == null ? file.getName() : prefix + "." + file.getName(); + getTestCases(file, newPrefix, testCaseSet); + } else if (file.getName().endsWith("TestCase.class")) { + String name = file.getName(); + name = name.substring(0, name.length() - 6); // remove .class + name = (prefix == null) ? name : prefix + "." + name; + + testCaseSet.add(name); + } + } + } + + public void runAllTestsFromDirs(ClassLoader testClassLoader, String[] testDirs) throws Exception { + + int failures = 0; + HashSet testCaseSet = new HashSet(); + for (String testDir : testDirs) { + getTestCases(new File(testDir), null, testCaseSet); + } + for (String className : testCaseSet) { + Class testClass = testClassLoader.loadClass(className); + failures += runTestCase(testClass).getFailureCount(); + } + + Assert.assertEquals(0, failures); + + } +} diff --git a/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/osgi-tuscany-test/src/test/java/org/apache/tuscany/sca/test/osgi/harness/OSGiTuscanyTestHarness.java b/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/osgi-tuscany-test/src/test/java/org/apache/tuscany/sca/test/osgi/harness/OSGiTuscanyTestHarness.java new file mode 100644 index 0000000000..ba9b7007b4 --- /dev/null +++ b/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/osgi-tuscany-test/src/test/java/org/apache/tuscany/sca/test/osgi/harness/OSGiTuscanyTestHarness.java @@ -0,0 +1,243 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.tuscany.sca.test.osgi.harness; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.lang.reflect.Method; +import java.net.URL; +import java.util.Enumeration; +import java.util.jar.JarOutputStream; +import java.util.jar.Manifest; +import java.util.zip.ZipEntry; + +import junit.framework.Assert; +import junit.framework.AssertionFailedError; + +import org.apache.tuscany.sca.test.osgi.runtime.impl.OSGiTestRuntime; +import org.apache.tuscany.sca.test.util.OSGiRuntimeLoader; +import org.apache.tuscany.sca.test.util.TuscanyLoader; +import org.junit.runner.JUnitCore; +import org.junit.runner.Request; +import org.junit.runner.Result; +import org.junit.runner.notification.Failure; +import org.osgi.framework.Bundle; +import org.osgi.framework.BundleContext; + +/* + * Test Tuscany running in an OSGi container + * Harness can be used to run Tuscany samples with Tuscany running in OSGi + */ +public class OSGiTuscanyTestHarness { + + private OSGiTestRuntime osgiRuntime; + protected Bundle tuscanyRuntime; + private BundleContext bundleContext; + private Bundle testBundle; + + public void setUp() throws Exception { + + osgiRuntime = OSGiRuntimeLoader.startOSGiTestRuntime(); + bundleContext = osgiRuntime.getBundleContext(); + + // Uninstall any previously installed test bundles + for (Bundle bundle : bundleContext.getBundles()) { + if ("org.apache.tuscany.sca.test.samples".equals(bundle.getSymbolicName())) { + bundle.uninstall(); + } + } + } + + public void tearDown() throws Exception { + if (tuscanyRuntime != null) { + tuscanyRuntime.stop(); + } + OSGiRuntimeLoader.shutdownOSGiRuntime(); + } + + public BundleContext getBundleContext() { + return bundleContext; + } + + public void runTest(String... testDirs) throws Exception { + + String mainTestDir = testDirs[0]; + + File testDir = new File(mainTestDir + "/target/test-classes"); + if (!testDir.exists()) { + System.err.println("Test directory " + testDir + " does not exist"); + return; + } + + System.out.println("Run tests from : " + mainTestDir); + + long startTime = System.currentTimeMillis(); + + tuscanyRuntime = TuscanyLoader.loadTuscanyIntoOSGi(bundleContext); + + String[] dirs = new String[testDirs.length + 2]; + int i = 0; + dirs[i++] = mainTestDir + "/target/test-classes"; + dirs[i++] = "target/test-classes"; + for (int j = 0; j < testDirs.length; j++) { + dirs[i++] = testDirs[j] + "/target/classes"; + } + + String manifestFile = "target/test-classes/META-INF/MANIFEST.MF"; + + testBundle = createAndInstallBundle("file:" + mainTestDir + "/target/classes", // Bundle location: used to get File URLs for DefaultSCADomain + manifestFile, // Test bundle manifest file + dirs // Directory entries to be added to bundle + ); + + long endTime = System.currentTimeMillis(); + + System.out.println("Loaded Tuscany, time taken = " + (endTime - startTime) + " ms"); + + testBundle.start(); + + Class testClass = testBundle.loadClass(this.getClass().getName()); + Method testMethod = testClass.getMethod("runAllTestsFromBundle", Bundle.class); + Object testObject = testClass.newInstance(); + testMethod.invoke(testObject, testBundle); + + testBundle.stop(); + testBundle.uninstall(); + } + + // Create and install a bundle with the specified manifest file + // The bundle contains all files from the list of directories specified + public Bundle createAndInstallBundle(String bundleLocation, String manifestFileName, String[] dirNames) + throws Exception { + + ByteArrayOutputStream out = new ByteArrayOutputStream(); + + File manifestFile = new File(manifestFileName); + Manifest manifest = new Manifest(); + manifest.read(new FileInputStream(manifestFile)); + manifest.getMainAttributes().putValue("Bundle-Version", + (String)tuscanyRuntime.getHeaders().get("Bundle-Version")); + + JarOutputStream jarOut = new JarOutputStream(out, manifest); + + for (int i = 0; i < dirNames.length; i++) { + File dir = new File(dirNames[i]); + addFilesToJar(dir, dirNames[i], jarOut); + } + + jarOut.close(); + out.close(); + + ByteArrayInputStream inStream = new ByteArrayInputStream(out.toByteArray()); + return bundleContext.installBundle(bundleLocation, inStream); + + } + + // Add all the files from a build directory into a jar file + // This method is used to create bundles on the fly + private void addFilesToJar(File dir, String rootDirName, JarOutputStream jarOut) throws Exception { + + if (dir.getName().equals(".svn")) + return; + + File[] files = dir.listFiles(); + + if (files == null) + return; + + for (int i = 0; i < files.length; i++) { + + if (files[i].isDirectory()) { + addFilesToJar(files[i], rootDirName, jarOut); + } + if (files[i].getName().endsWith("MANIFEST.MF")) + continue; + + String entryName = files[i].getPath().substring(rootDirName.length() + 1); + entryName = entryName.replaceAll("\\\\", "/"); + if (files[i].isDirectory()) { + entryName += "/"; + } + ZipEntry ze = new ZipEntry(entryName); + + try { + jarOut.putNextEntry(ze); + FileInputStream file = new FileInputStream(files[i]); + byte[] fileContents = new byte[file.available()]; + file.read(fileContents); + jarOut.write(fileContents); + } catch (Exception e) { + // Ignore duplicate entry errors + } + } + } + + public void runAllTestsFromBundle(Bundle bundle) throws Exception { + int failures = 0; + Enumeration entries = bundle.findEntries("/", "*TestCase.class", true); + while (entries.hasMoreElements()) { + URL entry = (URL)entries.nextElement(); + String className = entry.getFile(); + className = className.substring(1, className.length() - 6); // remove leading / and trailing .class + className = className.replaceAll("/", "."); + Class testClass = bundle.loadClass(className); + failures += runTestCase(testClass).getFailureCount(); + } + + Assert.assertEquals(0, failures); + + } + + public Result runTestCase(Class testClass) throws Exception { + + if (testClass.getName().endsWith("TestCase") && !testClass.getName() + .startsWith("org.apache.tuscany.sca.test.osgi.")) { + JUnitCore core = new JUnitCore(); + System.out.println("Running test " + testClass.getName() + " "); + Result result = core.run(Request.aClass(testClass)); + // long duration = result.getRunTime(); + int runs = result.getRunCount(); + int failures = 0, errors = 0; + int ignores = result.getIgnoreCount(); + + for (Failure f : result.getFailures()) { + if (f.getException() instanceof AssertionFailedError) { + failures++; + } else { + errors++; + } + } + + System.out.println("Test Runs: " + runs + + ", Failures: " + + failures + + ", Errors: " + + errors + + ", Ignores: " + + ignores); + + return result; + + } + return new Result(); + + } +} diff --git a/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/osgi-tuscany-test/src/test/java/org/apache/tuscany/sca/test/osgi/tuscany/CalculatorImplementationPoliciesTestCase.java b/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/osgi-tuscany-test/src/test/java/org/apache/tuscany/sca/test/osgi/tuscany/CalculatorImplementationPoliciesTestCase.java new file mode 100644 index 0000000000..85397195bd --- /dev/null +++ b/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/osgi-tuscany-test/src/test/java/org/apache/tuscany/sca/test/osgi/tuscany/CalculatorImplementationPoliciesTestCase.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 org.apache.tuscany.sca.test.osgi.tuscany; + + +import org.apache.tuscany.sca.test.osgi.harness.OSGiTuscanyTestHarness; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +/* + * Test Tuscany running in an OSGi container + * + * Run samples-calculator-implementation-policies + */ +public class CalculatorImplementationPoliciesTestCase { + + + private OSGiTuscanyTestHarness testHarness; + + @Before + public void setUp() throws Exception { + + testHarness = new OSGiTuscanyTestHarness(); + testHarness.setUp(); + } + + + @After + public void tearDown() throws Exception { + + if (testHarness != null) { + testHarness.tearDown(); + } + } + + + @Test + public void runTest() throws Exception { + + testHarness.runTest("../../../samples/" + "calculator-implementation-policies"); + + } + +} diff --git a/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/osgi-tuscany-test/src/test/java/org/apache/tuscany/sca/test/osgi/tuscany/CalculatorRmiTestCase.java b/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/osgi-tuscany-test/src/test/java/org/apache/tuscany/sca/test/osgi/tuscany/CalculatorRmiTestCase.java new file mode 100644 index 0000000000..9346fb8ed2 --- /dev/null +++ b/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/osgi-tuscany-test/src/test/java/org/apache/tuscany/sca/test/osgi/tuscany/CalculatorRmiTestCase.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 org.apache.tuscany.sca.test.osgi.tuscany; + + +import org.apache.tuscany.sca.test.osgi.harness.OSGiTuscanyTestHarness; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +/* + * Test Tuscany running in an OSGi container + * + * Run samples-calculator-rmi-reference and samples-calculator-rmi-service + */ +public class CalculatorRmiTestCase { + + + private OSGiTuscanyTestHarness testHarness; + + @Before + public void setUp() throws Exception { + + testHarness = new OSGiTuscanyTestHarness(); + testHarness.setUp(); + } + + + @After + public void tearDown() throws Exception { + + if (testHarness != null) { + testHarness.tearDown(); + } + } + + + @Test + public void runTest() throws Exception { + + testHarness.runTest("../../../samples/" + "calculator-rmi-reference"); + testHarness.runTest("../../../samples/" + "calculator-rmi-service"); + + } + +} diff --git a/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/osgi-tuscany-test/src/test/java/org/apache/tuscany/sca/test/osgi/tuscany/CalculatorScriptTestCase.java b/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/osgi-tuscany-test/src/test/java/org/apache/tuscany/sca/test/osgi/tuscany/CalculatorScriptTestCase.java new file mode 100644 index 0000000000..501cded48d --- /dev/null +++ b/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/osgi-tuscany-test/src/test/java/org/apache/tuscany/sca/test/osgi/tuscany/CalculatorScriptTestCase.java @@ -0,0 +1,63 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.tuscany.sca.test.osgi.tuscany; + + +import org.apache.tuscany.sca.test.osgi.harness.OSGiTuscanyTestHarness; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +/* + * Test Tuscany running in an OSGi container + * + * Run samples-calculator-script + */ +public class CalculatorScriptTestCase { + + + private OSGiTuscanyTestHarness testHarness; + + @Before + public void setUp() throws Exception { + + testHarness = new OSGiTuscanyTestHarness(); + testHarness.setUp(); + + System.setProperty("python.cachedir", "target/cachedir"); + } + + + @After + public void tearDown() throws Exception { + + if (testHarness != null) { + testHarness.tearDown(); + } + } + + + @Test + public void runTest() throws Exception { + + testHarness.runTest("../../../samples/" + "calculator-script"); + + } + +} diff --git a/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/osgi-tuscany-test/src/test/java/org/apache/tuscany/sca/test/osgi/tuscany/CallbackWsClientTestCase.java b/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/osgi-tuscany-test/src/test/java/org/apache/tuscany/sca/test/osgi/tuscany/CallbackWsClientTestCase.java new file mode 100644 index 0000000000..687335b3c4 --- /dev/null +++ b/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/osgi-tuscany-test/src/test/java/org/apache/tuscany/sca/test/osgi/tuscany/CallbackWsClientTestCase.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 org.apache.tuscany.sca.test.osgi.tuscany; + + +import org.apache.tuscany.sca.test.osgi.harness.OSGiTuscanyTestHarness; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +/* + * Test Tuscany running in an OSGi container + * + * Run samples-callback-ws + */ +public class CallbackWsClientTestCase { + + + private OSGiTuscanyTestHarness testHarness; + + @Before + public void setUp() throws Exception { + + testHarness = new OSGiTuscanyTestHarness(); + testHarness.setUp(); + } + + + @After + public void tearDown() throws Exception { + + if (testHarness != null) { + testHarness.tearDown(); + } + } + + + @Test + public void runTest() throws Exception { + + testHarness.runTest("../../../samples/" + "callback-ws-client", + "../../../samples/" + "callback-ws-service"); + } + +} diff --git a/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/osgi-tuscany-test/src/test/java/org/apache/tuscany/sca/test/osgi/tuscany/CallbackWsServiceTestCase.java b/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/osgi-tuscany-test/src/test/java/org/apache/tuscany/sca/test/osgi/tuscany/CallbackWsServiceTestCase.java new file mode 100644 index 0000000000..f605e024ba --- /dev/null +++ b/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/osgi-tuscany-test/src/test/java/org/apache/tuscany/sca/test/osgi/tuscany/CallbackWsServiceTestCase.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 org.apache.tuscany.sca.test.osgi.tuscany; + + +import org.apache.tuscany.sca.test.osgi.harness.OSGiTuscanyTestHarness; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +/* + * Test Tuscany running in an OSGi container + * + * Run samples-callback-ws + */ +public class CallbackWsServiceTestCase { + + + private OSGiTuscanyTestHarness testHarness; + + @Before + public void setUp() throws Exception { + + testHarness = new OSGiTuscanyTestHarness(); + testHarness.setUp(); + } + + + @After + public void tearDown() throws Exception { + + if (testHarness != null) { + testHarness.tearDown(); + } + } + + + @Test + public void runTest() throws Exception { + + testHarness.runTest("../../../samples/" + "callback-ws-service"); + + } + +} diff --git a/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/osgi-tuscany-test/src/test/java/org/apache/tuscany/sca/test/osgi/tuscany/HelloworldWsServiceJmsTestCase.java b/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/osgi-tuscany-test/src/test/java/org/apache/tuscany/sca/test/osgi/tuscany/HelloworldWsServiceJmsTestCase.java new file mode 100644 index 0000000000..4f5640960b --- /dev/null +++ b/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/osgi-tuscany-test/src/test/java/org/apache/tuscany/sca/test/osgi/tuscany/HelloworldWsServiceJmsTestCase.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 org.apache.tuscany.sca.test.osgi.tuscany; + + +import org.apache.tuscany.sca.test.osgi.harness.OSGiTuscanyTestHarness; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +/* + * Test Tuscany running in an OSGi container + * + * Run samples-helloworld-ws-service-jms + */ +public class HelloworldWsServiceJmsTestCase { + + + private OSGiTuscanyTestHarness testHarness; + + @Before + public void setUp() throws Exception { + + testHarness = new OSGiTuscanyTestHarness(); + testHarness.setUp(); + } + + + @After + public void tearDown() throws Exception { + + if (testHarness != null) { + testHarness.tearDown(); + } + } + + + @Test + public void runTest() throws Exception { + + testHarness.runTest("../../../samples/" + "helloworld-ws-service-jms"); + + } + +} diff --git a/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/osgi-tuscany-test/src/test/java/org/apache/tuscany/sca/test/osgi/tuscany/HelloworldWsServiceSecureTestCase.java b/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/osgi-tuscany-test/src/test/java/org/apache/tuscany/sca/test/osgi/tuscany/HelloworldWsServiceSecureTestCase.java new file mode 100644 index 0000000000..9a491304bf --- /dev/null +++ b/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/osgi-tuscany-test/src/test/java/org/apache/tuscany/sca/test/osgi/tuscany/HelloworldWsServiceSecureTestCase.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 org.apache.tuscany.sca.test.osgi.tuscany; + + +import org.apache.tuscany.sca.test.osgi.harness.OSGiTuscanyTestHarness; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +/* + * Test Tuscany running in an OSGi container + * + * Run samples-helloworld-ws-service-secure + */ +public class HelloworldWsServiceSecureTestCase { + + + private OSGiTuscanyTestHarness testHarness; + + @Before + public void setUp() throws Exception { + + testHarness = new OSGiTuscanyTestHarness(); + testHarness.setUp(); + } + + + @After + public void tearDown() throws Exception { + + if (testHarness != null) { + testHarness.tearDown(); + } + } + + + @Test + public void runTest() throws Exception { + + testHarness.runTest("../../../samples/" + "helloworld-ws-service-secure"); + + } + +} diff --git a/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/osgi-tuscany-test/src/test/java/org/apache/tuscany/sca/test/osgi/tuscany/HelloworldWsServiceTestCase.java b/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/osgi-tuscany-test/src/test/java/org/apache/tuscany/sca/test/osgi/tuscany/HelloworldWsServiceTestCase.java new file mode 100644 index 0000000000..2e0b49e693 --- /dev/null +++ b/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/osgi-tuscany-test/src/test/java/org/apache/tuscany/sca/test/osgi/tuscany/HelloworldWsServiceTestCase.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 org.apache.tuscany.sca.test.osgi.tuscany; + + +import org.apache.tuscany.sca.test.osgi.harness.OSGiTuscanyTestHarness; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +/* + * Test Tuscany running in an OSGi container + * + * Run samples-helloworld-ws-service + */ +public class HelloworldWsServiceTestCase { + + + private OSGiTuscanyTestHarness testHarness; + + @Before + public void setUp() throws Exception { + + testHarness = new OSGiTuscanyTestHarness(); + testHarness.setUp(); + } + + + @After + public void tearDown() throws Exception { + + if (testHarness != null) { + testHarness.tearDown(); + } + } + + + @Test + public void runTest() throws Exception { + + testHarness.runTest("../../../samples/" + "helloworld-ws-service"); + + } + +} diff --git a/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/osgi-tuscany-test/src/test/java/org/apache/tuscany/sca/test/osgi/tuscany/NonOSGiSamplesTestCase.java b/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/osgi-tuscany-test/src/test/java/org/apache/tuscany/sca/test/osgi/tuscany/NonOSGiSamplesTestCase.java new file mode 100644 index 0000000000..eac9979f56 --- /dev/null +++ b/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/osgi-tuscany-test/src/test/java/org/apache/tuscany/sca/test/osgi/tuscany/NonOSGiSamplesTestCase.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 org.apache.tuscany.sca.test.osgi.tuscany; + + +import org.apache.tuscany.sca.test.osgi.harness.OSGiTuscanyNonOSGiTestHarness; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +/* + * Test Tuscany running in an OSGi container + * + * Run samples which use old domain code + */ +public class NonOSGiSamplesTestCase { + + + private static String[] SAMPLES = { + "binding-notification-consumer", + "binding-notification-producer", + "calculator", + "implementation-composite", + "implementation-notification", + "loanapplication", + "simple-bigbank", + "simple-callback", + "supplychain", + "calculator-implementation-policies", + "calculator-rmi-reference", + "calculator-rmi-service", + "callback-ws-service", + "helloworld-ws-service-jms", + "helloworld-ws-service-secure", + "helloworld-ws-service" + + }; + + + private OSGiTuscanyNonOSGiTestHarness testHarness; + + @Before + public void setUp() throws Exception { + + testHarness = new OSGiTuscanyNonOSGiTestHarness(); + testHarness.setUp(); + } + + + @After + public void tearDown() throws Exception { + + if (testHarness != null) { + testHarness.tearDown(); + testHarness = null; + } + } + + + @Test + public void runTestsOutsideOSGi() throws Exception { + + for (String testDir : SAMPLES) { + testHarness.runTest("../../../samples/" + testDir); + } + } + + +} diff --git a/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/osgi-tuscany-test/src/test/java/org/apache/tuscany/sca/test/osgi/tuscany/OSGiSupplyChainTestCase.java b/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/osgi-tuscany-test/src/test/java/org/apache/tuscany/sca/test/osgi/tuscany/OSGiSupplyChainTestCase.java new file mode 100644 index 0000000000..62c0eef16d --- /dev/null +++ b/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/osgi-tuscany-test/src/test/java/org/apache/tuscany/sca/test/osgi/tuscany/OSGiSupplyChainTestCase.java @@ -0,0 +1,71 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.tuscany.sca.test.osgi.tuscany; + + +import org.apache.tuscany.sca.test.osgi.harness.OSGiTuscanyTestHarness; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.osgi.framework.Bundle; +import org.osgi.framework.BundleContext; + +/* + * Test Tuscany running in an OSGi container + * + * Run samples-osgi-supplychain + */ +public class OSGiSupplyChainTestCase { + + + private OSGiTuscanyTestHarness testHarness; + + @Before + public void setUp() throws Exception { + + testHarness = new OSGiTuscanyTestHarness(); + testHarness.setUp(); + } + + + @After + public void tearDown() throws Exception { + + BundleContext bundleContext = testHarness.getBundleContext(); + if (bundleContext != null) { + Bundle[] bundles = bundleContext.getBundles(); + for (Bundle bundle : bundles) { + if (bundle.getSymbolicName() != null && bundle.getSymbolicName().contains("supplychain")) + bundle.uninstall(); + } + } + if (testHarness != null) { + testHarness.tearDown(); + } + } + + + @Test + public void runTest() throws Exception { + + testHarness.runTest("../../../samples/" + "osgi-supplychain"); + + } + +} diff --git a/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/osgi-tuscany-test/src/test/java/org/apache/tuscany/sca/test/osgi/tuscany/OSGiTuscanyRuntimeTestCase.java b/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/osgi-tuscany-test/src/test/java/org/apache/tuscany/sca/test/osgi/tuscany/OSGiTuscanyRuntimeTestCase.java new file mode 100644 index 0000000000..155dd368a3 --- /dev/null +++ b/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/osgi-tuscany-test/src/test/java/org/apache/tuscany/sca/test/osgi/tuscany/OSGiTuscanyRuntimeTestCase.java @@ -0,0 +1,137 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.tuscany.sca.test.osgi.tuscany; + + +import java.io.File; +import java.lang.reflect.Method; +import java.net.URL; + +import junit.framework.Assert; + +import org.apache.tuscany.sca.test.osgi.runtime.impl.OSGiTestRuntime; +import org.apache.tuscany.sca.test.util.OSGiRuntimeLoader; +import org.apache.tuscany.sca.test.util.TuscanyLoader; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.osgi.framework.Bundle; +import org.osgi.framework.BundleContext; +import org.osgi.framework.ServiceReference; + +/* + * Test Tuscany running inside OSGi + */ +public class OSGiTuscanyRuntimeTestCase { + + private OSGiTestRuntime osgiRuntime; + private Bundle tuscanyRuntime; + + + @Before + public void setUp() throws Exception { + + osgiRuntime = OSGiRuntimeLoader.startOSGiTestRuntime(); + BundleContext bundleContext = osgiRuntime.getBundleContext(); + + // Uninstall any previously installed test bundles + for (Bundle bundle : bundleContext.getBundles()) { + String bundleName = bundle.getSymbolicName(); + if (bundleName != null && + (bundleName.equals("org.apache.tuscany.sca.test.samples")|| + bundleName.startsWith("supplychain"))) { + bundle.uninstall(); + } + } + } + + + @After + public void tearDown() throws Exception { + + if (tuscanyRuntime != null) { + tuscanyRuntime.stop(); + } + OSGiRuntimeLoader.shutdownOSGiRuntime(); + } + + + + @Test + public void startTuscanyRuntimeInOSGi() throws Exception { + + tuscanyRuntime = TuscanyLoader.loadTuscanyIntoOSGi(osgiRuntime.getBundleContext()); + Assert.assertNotNull(tuscanyRuntime); + Bundle[] bundles = osgiRuntime.getBundleContext().getBundles(); + Bundle runtimeBundle = null; + for (Bundle bundle : bundles) { + if ("org.apache.tuscany.sca.osgi.runtime".equals(bundle.getSymbolicName())) { + runtimeBundle = bundle; + break; + } + } + Assert.assertNotNull(runtimeBundle); + Class clazz = runtimeBundle.loadClass("org.apache.tuscany.sca.osgi.runtime.OSGiRuntime"); + Assert.assertNotNull(clazz); + + } + + @Test + public void testOSGiTuscany_ImplementationJava() throws Exception { + testOSGiTuscanyUsingOSGiClient("SupplyChain.jar"); + } + + @Test + public void testOSGiTuscany_BindingWS() throws Exception { + testOSGiTuscanyUsingOSGiClient("SupplyChainWS.jar"); + } + + + private void testOSGiTuscanyUsingOSGiClient(String contributionJarName) throws Exception { + + tuscanyRuntime = TuscanyLoader.loadTuscanyIntoOSGi(osgiRuntime.getBundleContext()); + + String folderName = "../test-bundles/target/"; + String supplychainJarName = contributionJarName; + String supplychainClientJarName = "SupplyChainClient.jar"; + URL supplyChainURL = new File(folderName + supplychainJarName).toURI().toURL(); + URL supplyChainClientURL = new File(folderName + supplychainClientJarName).toURI().toURL(); + + Bundle supplyChainBundle = osgiRuntime.getBundleContext().installBundle(supplyChainURL.toString()); + supplyChainBundle.start(); + Bundle clientBundle = osgiRuntime.getBundleContext().installBundle(supplyChainClientURL.toString()); + clientBundle.start(); + + String clientClassName = "supplychain.client.SupplyChainClient"; + Class clientClass = clientBundle.loadClass(clientClassName); + ServiceReference testServiceRef = clientBundle.getBundleContext().getServiceReference(clientClassName); + Object testService = clientBundle.getBundleContext().getService(testServiceRef); + + Method m = clientClass.getMethod("runTest", String.class); + m.invoke(testService, contributionJarName); + + System.out.println("OSGi Client test completed successfully."); + + supplyChainBundle.uninstall(); + clientBundle.uninstall(); + } + + + +} diff --git a/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/osgi-tuscany-test/src/test/java/org/apache/tuscany/sca/test/osgi/tuscany/TuscanySampleExtensionsTestCase.java b/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/osgi-tuscany-test/src/test/java/org/apache/tuscany/sca/test/osgi/tuscany/TuscanySampleExtensionsTestCase.java new file mode 100644 index 0000000000..b45c062761 --- /dev/null +++ b/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/osgi-tuscany-test/src/test/java/org/apache/tuscany/sca/test/osgi/tuscany/TuscanySampleExtensionsTestCase.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 org.apache.tuscany.sca.test.osgi.tuscany; + + +import org.apache.tuscany.sca.test.osgi.harness.OSGiTuscanyTestHarness; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +/* + * Test Tuscany running in an OSGi container + * + * Run samples which use provide Tuscany extensions + */ +public class TuscanySampleExtensionsTestCase { + + private OSGiTuscanyTestHarness testHarness; + + @Before + public void setUp() throws Exception { + + testHarness = new OSGiTuscanyTestHarness(); + testHarness.setUp(); + } + + + @After + public void tearDown() throws Exception { + + if (testHarness != null) { + testHarness.tearDown(); + testHarness = null; + } + } + + + @Test + public void testBindingEchoExtension() throws Exception { + + testHarness.runTest("../../../samples/" + "binding-echo-extension"); + } + + @Test + public void testBindingEcho() throws Exception { + + testHarness.runTest("../../../samples/" + "binding-echo", "../../../samples/" + "binding-echo-extension"); + + } + + @Test + public void testDataBindingEcho() throws Exception { + + testHarness.runTest("../../../samples/" + "databinding-echo", "../../../samples/" + "binding-echo-extension"); + + } + + @Test + public void testImplementationCrudExtension() throws Exception { + + testHarness.runTest("../../../samples/" + "implementation-crud-extension"); + } + + @Test + public void testImplementationCrud() throws Exception { + + testHarness.runTest("../../../samples/" + "implementation-crud", "../../../samples/" + "implementation-crud-extension"); + + } + + @Test + public void testImplementationPojoExtension() throws Exception { + + testHarness.runTest("../../../samples/" + "implementation-pojo-extension"); + } + +} diff --git a/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/osgi-tuscany-test/src/test/java/org/apache/tuscany/sca/test/osgi/tuscany/TuscanySamplesUsingOldDomainTestCase.java b/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/osgi-tuscany-test/src/test/java/org/apache/tuscany/sca/test/osgi/tuscany/TuscanySamplesUsingOldDomainTestCase.java new file mode 100644 index 0000000000..c2dae9eb97 --- /dev/null +++ b/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/osgi-tuscany-test/src/test/java/org/apache/tuscany/sca/test/osgi/tuscany/TuscanySamplesUsingOldDomainTestCase.java @@ -0,0 +1,80 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.tuscany.sca.test.osgi.tuscany; + + +import org.apache.tuscany.sca.test.osgi.harness.OSGiTuscanyTestHarness; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +/* + * Test Tuscany running in an OSGi container + * + * Run samples which use old domain code + */ +public class TuscanySamplesUsingOldDomainTestCase { + + + private static String[] SAMPLES = { + + "binding-notification-consumer", + "binding-notification-producer", + "calculator", + "implementation-composite", + "implementation-notification", + "loanapplication", + "quote-xquery", + "simple-bigbank", + "simple-callback", + "supplychain" + + }; + + + private OSGiTuscanyTestHarness testHarness; + + @Before + public void setUp() throws Exception { + + testHarness = new OSGiTuscanyTestHarness(); + testHarness.setUp(); + } + + + @After + public void tearDown() throws Exception { + + if (testHarness != null) { + testHarness.tearDown(); + testHarness = null; + } + } + + + @Test + public void runTestsUsingOldDomainCode() throws Exception { + + for (String testDir : SAMPLES) { + testHarness.runTest("../../../samples/" + testDir); + } + } + + +} diff --git a/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/osgi-tuscany-test/src/test/resources/META-INF/MANIFEST.MF b/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/osgi-tuscany-test/src/test/resources/META-INF/MANIFEST.MF new file mode 100644 index 0000000000..8985947286 --- /dev/null +++ b/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/osgi-tuscany-test/src/test/resources/META-INF/MANIFEST.MF @@ -0,0 +1,14 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: tuscany.sca.samples +Bundle-SymbolicName: org.apache.tuscany.sca.test.samples +Bundle-Version: 1.0.0 +Bundle-Localization: plugin +Import-Package: org.osgi.framework, + junit.framework, + org.junit, + org.apache.tuscany.sca.host.embedded, + org.osoa.sca, + org.osoa.sca.annotations, + org.apache.tuscany.sca.databinding.annotation +DynamicImport-Package: * diff --git a/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/osgi-tuscany-test/src/test/resources/felix/felix.config.properties b/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/osgi-tuscany-test/src/test/resources/felix/felix.config.properties new file mode 100644 index 0000000000..6a38f48c4a --- /dev/null +++ b/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/osgi-tuscany-test/src/test/resources/felix/felix.config.properties @@ -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. +# +# +# Framework config properties. +# +org.osgi.framework.system.packages=org.osgi.framework; version=1.3.0, \ + org.osgi.service.packageadmin; version=1.2.0, \ + org.osgi.service.startlevel; version=1.0.0, \ + org.osgi.service.url; version=1.0.0 \ + org.osgi.util.tracker; version=1.3.2 + + +felix.auto.start.1= \ + "file://${FELIX_DIR}/org.apache.felix.scr/1.0.2/org.apache.felix.scr-1.0.2.jar" + +# "file://${FELIX_DIR}/org.apache.felix.configadmin/1.0.1/org.apache.felix.configadmin-1.0.1.jar" +# "file://${FELIX_DIR}/org.apache.felix.shell/1.0.1/org.apache.felix.shell-1.0.1.jar" \ +# "file://${FELIX_DIR}/org.apache.felix.shell.tui/1.0.1/org.apache.felix.shell.tui-1.0.1.jar" \ +# "file://${FELIX_DIR}/org.apache.felix.bundlerepository/1.0.3/org.apache.felix.bundlerepository-1.0.3.jar" \ + + +felix.startlevel.framework=1 +felix.startlevel.bundle=1 + +# +# Bundle config properties. +# +org.osgi.service.http.port=8080 +obr.shell.telnet=on diff --git a/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/pom.xml b/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/pom.xml new file mode 100644 index 0000000000..6bea4cc1cb --- /dev/null +++ b/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/pom.xml @@ -0,0 +1,39 @@ + + + + 4.0.0 + + org.apache.tuscany.sca + tuscany-itest + 1.6.1 + ../pom.xml + + itest-osgi-tuscany + pom + Apache Tuscany OSGi-based Tuscany Runtime Integration Tests + + + test-bundles + tuscany-versioned + tuscany-osgi-installer + osgi-tuscany-test + + + diff --git a/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/test-bundles/build-bundles.xml b/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/test-bundles/build-bundles.xml new file mode 100644 index 0000000000..c7ea66863f --- /dev/null +++ b/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/test-bundles/build-bundles.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + diff --git a/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/test-bundles/pom.xml b/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/test-bundles/pom.xml new file mode 100644 index 0000000000..1cd39be6a1 --- /dev/null +++ b/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/test-bundles/pom.xml @@ -0,0 +1,124 @@ + + + + 4.0.0 + + org.apache.tuscany.sca + tuscany-itest + 1.6.1 + ../../pom.xml + + itest-osgi-tuscany-test-bundles + Apache Tuscany OSGi-Based Tuscany Runtime Test Bundles + + + + org.apache.tuscany.sca + tuscany-sca-api + 1.6.1 + + + + org.apache.tuscany.sca + tuscany-host-embedded + 1.6.1 + + + + org.apache.felix + org.apache.felix.main + 1.0.4 + + + + + + + itest-osgi-tuscany-test-bundles + + + org.apache.maven.plugins + maven-antrun-plugin + 1.1 + + + + ant + ant-trax + 1.6.5 + + + + + + create-bundles + generate-test-sources + + run + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/test-bundles/src/main/java/supplychain/client/SupplyChainClient.java b/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/test-bundles/src/main/java/supplychain/client/SupplyChainClient.java new file mode 100644 index 0000000000..0ac96b35a3 --- /dev/null +++ b/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/test-bundles/src/main/java/supplychain/client/SupplyChainClient.java @@ -0,0 +1,115 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package supplychain.client; + + +import java.io.File; +import java.net.URL; +import java.util.Hashtable; + + +import org.apache.tuscany.sca.assembly.Composite; +import org.apache.tuscany.sca.contribution.Contribution; +import org.apache.tuscany.sca.contribution.service.ContributionService; +import org.apache.tuscany.sca.host.embedded.impl.EmbeddedSCADomain; +import org.osgi.framework.BundleActivator; +import org.osgi.framework.BundleContext; + + + +import supplychain.customer.Customer; + +/** + * SupplyChain test client + */ +public class SupplyChainClient implements BundleActivator { + + private EmbeddedSCADomain scaDomain; + private Customer customer; + + + + public void start(BundleContext context) throws Exception { + + context.registerService(SupplyChainClient.class.getName(), this, new Hashtable()); + + } + + public void stop(BundleContext context) throws Exception { + + } + + protected void setUp(String contributionJarName) throws Exception { + + scaDomain = new EmbeddedSCADomain(EmbeddedSCADomain.class.getClassLoader(), "http://localhost"); + scaDomain.start(); + ContributionService contributionService = scaDomain.getContributionService(); + String folderName = "../test-bundles/target/"; + String supplychainJarName = contributionJarName; + URL supplyChainURL = new File(folderName + supplychainJarName).toURI().toURL(); + + Contribution contribution = contributionService.contribute("SupplyChain", supplyChainURL, false); + for (Composite deployable : contribution.getDeployables() ) { + scaDomain.getDomainComposite().getIncludes().add(deployable); + scaDomain.buildComposite(deployable); + } + + for (Composite deployable : contribution.getDeployables() ) { + scaDomain.getCompositeActivator().activate(deployable); + scaDomain.getCompositeActivator().start(deployable); + } + customer = scaDomain.getService(Customer.class, "CustomerComponent"); + } + + protected void tearDown() throws Exception { + if (scaDomain != null) { + scaDomain.close(); + scaDomain = null; + } + } + + + public void runTest(String contributionJarName) throws Exception { + + try { + setUp(contributionJarName); + customer.purchaseGoods(); + int retries = 10; + int outstandingCount = 1; + while (retries-- > 0) { + + outstandingCount = customer.outstandingOrderCount(); + if (outstandingCount == 0) + break; + else + Thread.sleep(100); + } + if (outstandingCount != 0) + throw new RuntimeException("Orders not processed on time"); + + } finally { + + tearDown(); + } + + + } + + +} diff --git a/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/test-bundles/src/main/java/supplychain/customer/Customer.java b/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/test-bundles/src/main/java/supplychain/customer/Customer.java new file mode 100644 index 0000000000..a3aa2531fc --- /dev/null +++ b/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/test-bundles/src/main/java/supplychain/customer/Customer.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 supplychain.customer; + +import org.osoa.sca.annotations.OneWay; +import org.osoa.sca.annotations.Remotable; + +/** + * This is the business interface of the Customer service component. + */ +@Remotable +public interface Customer { + + public void purchaseGoods(); + + @OneWay + public void notifyShipment(String order); + + public int outstandingOrderCount(); + +} diff --git a/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/test-bundles/src/main/java/supplychain/customer/JavaCustomerComponentImpl.java b/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/test-bundles/src/main/java/supplychain/customer/JavaCustomerComponentImpl.java new file mode 100644 index 0000000000..5f1342c40b --- /dev/null +++ b/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/test-bundles/src/main/java/supplychain/customer/JavaCustomerComponentImpl.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 supplychain.customer; + +import org.osoa.sca.annotations.Reference; +import org.osoa.sca.annotations.Scope; +import org.osoa.sca.annotations.Service; + +import supplychain.retailer.Retailer; + +/** + * This class implements the Customer service component (POJO implementation). + */ +@Service(Customer.class) +@Scope("COMPOSITE") +public class JavaCustomerComponentImpl implements Customer { + + private static int outstandingOrderCount; + + private Retailer retailer; + + public JavaCustomerComponentImpl() { + } + + @Reference + public void setRetailer(Retailer retailer) { + this.retailer = retailer; + } + + public void purchaseGoods() { + outstandingOrderCount++; + retailer.submitOrder("Order"); + } + + public void notifyShipment(String order) { + outstandingOrderCount--; + System.out.print("Work thread " + Thread.currentThread() + " - "); + System.out.println(order); + } + + public int outstandingOrderCount() { + return outstandingOrderCount; + } + +} diff --git a/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/test-bundles/src/main/java/supplychain/retailer/JavaRetailerComponentImpl.java b/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/test-bundles/src/main/java/supplychain/retailer/JavaRetailerComponentImpl.java new file mode 100644 index 0000000000..f5708dec40 --- /dev/null +++ b/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/test-bundles/src/main/java/supplychain/retailer/JavaRetailerComponentImpl.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 supplychain.retailer; + + +import org.osoa.sca.annotations.Reference; +import org.osoa.sca.annotations.Scope; +import org.osoa.sca.annotations.Service; + +import supplychain.warehouse.Warehouse; + +/** + * This class implements the Retailer service component (POJO implementation). + */ +@Service(Retailer.class) +@Scope("STATELESS") +public class JavaRetailerComponentImpl implements Retailer { + + private Warehouse warehouse; + + public JavaRetailerComponentImpl() { + } + + @Reference + public void setWarehouse(Warehouse warehouse) { + this.warehouse = warehouse; + } + + + public Warehouse getWarehouse() { + return warehouse; + } + + public void submitOrder(String order) { + + warehouse.fulfillOrder(order + ", submitted"); + + } + + + + +} diff --git a/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/test-bundles/src/main/java/supplychain/retailer/Retailer.java b/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/test-bundles/src/main/java/supplychain/retailer/Retailer.java new file mode 100644 index 0000000000..17b342f8dd --- /dev/null +++ b/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/test-bundles/src/main/java/supplychain/retailer/Retailer.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 supplychain.retailer; + +/** + * This is the business interface of the Retailer service component. + */ +public interface Retailer { + + public void submitOrder(String order); + +} diff --git a/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/test-bundles/src/main/java/supplychain/shipper/JavaShipperComponentImpl.java b/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/test-bundles/src/main/java/supplychain/shipper/JavaShipperComponentImpl.java new file mode 100644 index 0000000000..afaf7aea02 --- /dev/null +++ b/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/test-bundles/src/main/java/supplychain/shipper/JavaShipperComponentImpl.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 supplychain.shipper; + + +import org.osoa.sca.annotations.Reference; +import org.osoa.sca.annotations.Scope; +import org.osoa.sca.annotations.Service; + +import supplychain.customer.Customer; + +/** + * This class implements the Shipper service component (POJO implementation). + */ +@Service(Shipper.class) +@Scope("COMPOSITE") +public class JavaShipperComponentImpl implements Shipper { + + private Customer customer; + + public JavaShipperComponentImpl() { + } + + @Reference + public void setCustomer(Customer customer) { + this.customer = customer; + } + + public void processShipment(String order) { + customer.notifyShipment(order + ", shipped"); + } + + +} diff --git a/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/test-bundles/src/main/java/supplychain/shipper/Shipper.java b/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/test-bundles/src/main/java/supplychain/shipper/Shipper.java new file mode 100644 index 0000000000..cd204ebc2e --- /dev/null +++ b/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/test-bundles/src/main/java/supplychain/shipper/Shipper.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 supplychain.shipper; + +/** + * This is the business interface of the Shipper service component. + */ +public interface Shipper { + + public void processShipment(String order); + +} diff --git a/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/test-bundles/src/main/java/supplychain/warehouse/JavaWarehouseComponentImpl.java b/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/test-bundles/src/main/java/supplychain/warehouse/JavaWarehouseComponentImpl.java new file mode 100644 index 0000000000..ca720085c5 --- /dev/null +++ b/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/test-bundles/src/main/java/supplychain/warehouse/JavaWarehouseComponentImpl.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 supplychain.warehouse; + +import org.osoa.sca.annotations.Reference; +import org.osoa.sca.annotations.Scope; +import org.osoa.sca.annotations.Service; + +import supplychain.shipper.Shipper; + +/** + * This class implements the Warehouse service component (POJO implementation). + */ +@Service(Warehouse.class) +@Scope("STATELESS") +public class JavaWarehouseComponentImpl implements Warehouse { + + private Shipper shipper; + + public JavaWarehouseComponentImpl() { + } + + @Reference + public void setShipper(Shipper shipper) { + this.shipper = shipper; + } + + public void fulfillOrder(String order) { + shipper.processShipment(order + ", fulfilled"); + } + + +} diff --git a/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/test-bundles/src/main/java/supplychain/warehouse/Warehouse.java b/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/test-bundles/src/main/java/supplychain/warehouse/Warehouse.java new file mode 100644 index 0000000000..b4807b80d1 --- /dev/null +++ b/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/test-bundles/src/main/java/supplychain/warehouse/Warehouse.java @@ -0,0 +1,28 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package supplychain.warehouse; + +/** + * This is the business interface of the Warehouse service component. + */ +public interface Warehouse { + + public void fulfillOrder(String order); + +} diff --git a/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/test-bundles/src/main/resources/META-INF/SupplyChain.mf b/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/test-bundles/src/main/resources/META-INF/SupplyChain.mf new file mode 100644 index 0000000000..f71d822bbe --- /dev/null +++ b/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/test-bundles/src/main/resources/META-INF/SupplyChain.mf @@ -0,0 +1,12 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: SupplyChain +Bundle-SymbolicName: supplychain.SupplyChain +Bundle-Version: 1.0.0 +Bundle-Localization: plugin +Import-Package: org.osgi.framework, + org.osoa.sca, + org.osoa.sca.annotations, + javax.xml.bind.annotation +Export-Package: supplychain.customer, supplychain + diff --git a/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/test-bundles/src/main/resources/META-INF/SupplyChainClient.mf b/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/test-bundles/src/main/resources/META-INF/SupplyChainClient.mf new file mode 100644 index 0000000000..13a3c9b82a --- /dev/null +++ b/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/test-bundles/src/main/resources/META-INF/SupplyChainClient.mf @@ -0,0 +1,21 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: SupplyChainClient +Bundle-SymbolicName: supplychain.SupplyChainClient +Bundle-Version: 1.0.0 +Bundle-Localization: plugin +Import-Package: org.osgi.framework, + supplychain.customer, supplychain, + org.apache.tuscany.sca.host.embedded, + org.apache.tuscany.sca.host.embedded.impl, + org.apache.tuscany.sca.assembly, + org.apache.tuscany.sca.contribution, + org.apache.tuscany.sca.contribution.service, + org.apache.tuscany.sca.core.assembly, + org.apache.tuscany.sca.assembly.builder, + org.osoa.sca, + org.osoa.sca.annotations, + javax.xml.bind.annotation +Export-Package: supplychain.client +Bundle-Activator: supplychain.client.SupplyChainClient + diff --git a/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/test-bundles/src/main/resources/META-INF/sca-contribution.xml b/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/test-bundles/src/main/resources/META-INF/sca-contribution.xml new file mode 100644 index 0000000000..b524abc2a6 --- /dev/null +++ b/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/test-bundles/src/main/resources/META-INF/sca-contribution.xml @@ -0,0 +1,26 @@ + + + + + + + diff --git a/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/test-bundles/src/main/resources/supplychain/supplychain.composite b/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/test-bundles/src/main/resources/supplychain/supplychain.composite new file mode 100644 index 0000000000..5be79b741a --- /dev/null +++ b/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/test-bundles/src/main/resources/supplychain/supplychain.composite @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/test-bundles/src/main/resources/supplychain/ws/Customer.wsdl b/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/test-bundles/src/main/resources/supplychain/ws/Customer.wsdl new file mode 100644 index 0000000000..8549ca3409 --- /dev/null +++ b/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/test-bundles/src/main/resources/supplychain/ws/Customer.wsdl @@ -0,0 +1,135 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/test-bundles/src/main/resources/supplychain/ws/supplychain.composite b/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/test-bundles/src/main/resources/supplychain/ws/supplychain.composite new file mode 100644 index 0000000000..88d1e72efc --- /dev/null +++ b/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/test-bundles/src/main/resources/supplychain/ws/supplychain.composite @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/tuscany-osgi-installer/pom.xml b/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/tuscany-osgi-installer/pom.xml new file mode 100644 index 0000000000..2e4b2e2297 --- /dev/null +++ b/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/tuscany-osgi-installer/pom.xml @@ -0,0 +1,671 @@ + + + + 4.0.0 + + org.apache.tuscany.sca + tuscany-itest + 1.6.1 + ../../pom.xml + + itest-osgi-tuscany-installer + Apache Tuscany OSGi - Tuscany Installer Bundle + + + true + ${pom.version} + + + + ${pom.groupId} + tuscany-monitor + ${pom.version} + + + ${pom.groupId} + tuscany-assembly + ${pom.version} + + + ${pom.groupId} + tuscany-assembly-xml + ${pom.version} + + + ${pom.groupId} + tuscany-assembly-xsd + ${pom.version} + + + ${pom.groupId} + tuscany-binding-dwr + ${pom.version} + + + ${pom.groupId} + tuscany-binding-ejb-runtime + ${pom.version} + + + ${pom.groupId} + tuscany-binding-atom + ${pom.version} + + + + ${pom.groupId} + tuscany-binding-feed + ${pom.version} + + + ${pom.groupId} + tuscany-binding-rss + ${pom.version} + + + ${pom.groupId} + tuscany-binding-rss-rome + ${pom.version} + + + ${pom.groupId} + tuscany-binding-http-runtime + ${pom.version} + + + ${pom.groupId} + tuscany-binding-jms-runtime + ${pom.version} + + + org.apache.activemq + apache-activemq + 4.1.1 + + + commons-httpclient + commons-httpclient + + + commons-fileupload + commons-fileupload + + + commons-beanutils + commons-beanutils + + + org.apache.activemq + activemq-console + + + org.apache.activemq + activemq-core + + + org.apache.activemq + activemq-optional + + + org.apache.activemq + activemq-web + + + org.apache.activemq + activemq-web-demo + + + org.apache.activemq + activemq-jaas + + + org.apache.geronimo.specs + geronimo-j2ee-connector_1.5_spec + + + org.apache.geronimo.specs + geronimo-j2ee-jacc_1.0_spec + + + org.apache.geronimo.specs + geronimo-jms_1.1_spec + + + org.apache.geronimo.specs + geronimo-jsp_2.0_spec + + + org.apache.geronimo.specs + geronimo-j2ee-management_1.0_spec + + + org.mortbay.jetty + servlet-api-2.5 + + + org.mortbay.jetty + jetty + + + org.mortbay.jetty + jetty-util + + + xerces + xercesImpl + + + backport-util-concurrent + backport-util-concurrent + + + activesoap + jaxp-api + + + activemq + jmdns + + + jrms + jrms + + + xerces + xmlParserAPIs + + + xstream + xstream + + + xmlpull + xmlpull + + + mx4j + mx4j + + + mx4j + mx4j-remote + + + + + ${pom.groupId} + tuscany-binding-jsonrpc-runtime + ${pom.version} + + + ${pom.groupId} + tuscany-binding-notification + ${pom.version} + + + ${pom.groupId} + tuscany-binding-rmi-runtime + ${pom.version} + + + ${pom.groupId} + tuscany-binding-sca + ${pom.version} + + + ${pom.groupId} + tuscany-binding-sca-axis2 + ${pom.version} + + + ${pom.groupId} + tuscany-binding-sca-xml + ${pom.version} + + + ${pom.groupId} + tuscany-binding-ws + ${pom.version} + + + ${pom.groupId} + tuscany-binding-ws-axis2 + ${pom.version} + + + ${pom.groupId} + tuscany-binding-ws-xml + ${pom.version} + + + ${pom.groupId} + tuscany-contribution + ${pom.version} + + + ${pom.groupId} + tuscany-contribution-groovy + ${pom.version} + + + ${pom.groupId} + tuscany-contribution-impl + ${pom.version} + + + ${pom.groupId} + tuscany-contribution-java + ${pom.version} + + + ${pom.groupId} + tuscany-contribution-namespace + ${pom.version} + + + ${pom.groupId} + tuscany-core + ${pom.version} + + + ${pom.groupId} + tuscany-core-databinding + ${pom.version} + + + ${pom.groupId} + tuscany-core-spi + ${pom.version} + + + ${pom.groupId} + tuscany-databinding + ${pom.version} + + + ${pom.groupId} + tuscany-databinding-axiom + ${pom.version} + + + ${pom.groupId} + tuscany-databinding-fastinfoset + ${pom.version} + + + ${pom.groupId} + tuscany-databinding-jaxb + ${pom.version} + + + ${pom.groupId} + tuscany-databinding-sdo + ${pom.version} + + + ${pom.groupId} + tuscany-databinding-sdo-axiom + ${pom.version} + + + ${pom.groupId} + tuscany-databinding-xmlbeans + ${pom.version} + + + ${pom.groupId} + tuscany-databinding-xstream + ${pom.version} + + + ${pom.groupId} + tuscany-host-embedded + ${pom.version} + + + ${pom.groupId} + tuscany-host-http + ${pom.version} + + + ${pom.groupId} + tuscany-host-rmi + ${pom.version} + + + ${pom.groupId} + tuscany-host-webapp + ${pom.version} + + + ${pom.groupId} + tuscany-host-jetty + ${pom.version} + + + ${pom.groupId} + tuscany-interface + ${pom.version} + + + ${pom.groupId} + tuscany-interface-java + ${pom.version} + + + ${pom.groupId} + tuscany-interface-java-xml + ${pom.version} + + + ${pom.groupId} + tuscany-interface-wsdl + ${pom.version} + + + ${pom.groupId} + tuscany-interface-wsdl-xml + ${pom.version} + + + + ${pom.groupId} + tuscany-implementation-das + ${pom.version} + + + ${pom.groupId} + tuscany-implementation-ejb + ${pom.version} + + + ${pom.groupId} + tuscany-implementation-ejb + ${pom.version} + + + ${pom.groupId} + tuscany-implementation-java + ${pom.version} + + + ${pom.groupId} + tuscany-implementation-java-xml + ${pom.version} + + + ${pom.groupId} + tuscany-implementation-java-runtime + ${pom.version} + + + ${pom.groupId} + tuscany-implementation-node + ${pom.version} + + + ${pom.groupId} + tuscany-implementation-node-runtime + ${pom.version} + + + ${pom.groupId} + tuscany-host-tomcat + + + + + ${pom.groupId} + tuscany-implementation-osgi + ${pom.version} + + + ${pom.groupId} + tuscany-implementation-resource-runtime + ${pom.version} + + + ${pom.groupId} + tuscany-implementation-script + ${pom.version} + + + groovy + groovy-all-minimal + + + + + ${pom.groupId} + tuscany-implementation-spring + ${pom.version} + + + ${pom.groupId} + tuscany-implementation-xquery + ${pom.version} + + + ${pom.groupId} + tuscany-implementation-widget-runtime + ${pom.version} + + + ${pom.groupId} + tuscany-node-api + ${pom.version} + + + ${pom.groupId} + tuscany-node-impl + ${pom.version} + + + ${pom.groupId} + tuscany-node-launcher + ${pom.version} + + + ${pom.groupId} + tuscany-policy + ${pom.version} + + + ${pom.groupId} + tuscany-policy-logging + ${pom.version} + + + ${pom.groupId} + tuscany-policy-security + ${pom.version} + + + ${pom.groupId} + tuscany-policy-xml + ${pom.version} + + + ${pom.groupId} + tuscany-definitions + ${pom.version} + + + ${pom.groupId} + tuscany-workspace + ${pom.version} + + + ${pom.groupId} + tuscany-domain-manager + ${pom.version} + + + ${pom.groupId} + tuscany-host-tomcat + + + + + ${pom.groupId} + tuscany-workspace-impl + ${pom.version} + + + ${pom.groupId} + tuscany-workspace-xml + ${pom.version} + + + + ${pom.groupId} + tuscany-sca-api + ${pom.version} + + + org.apache.tuscany.sdo + tuscany-sdo-impl + 1.1.1 + + + org.codehaus.woodstox + wstx-asl + + + + + org.apache.tuscany.sdo + tuscany-sdo-tools + 1.1.1 + + + + com.sun.xml.bind + jaxb-impl + 2.1.6 + + + javax.xml.stream + stax-api + + + + + commons-lang + commons-lang + 2.1 + + + commons-cli + commons-cli + 1.0 + + + junit + junit + + + + + org.easymock + easymock + 2.2 + + + + + + + + + + maven-dependency-plugin + + ${project.build.directory}/classes/org/apache/tuscany/sca/installer/.classpath + runtime + + + + build-classpath + compile + + build-classpath + + + + + + + + org.apache.maven.plugins + maven-jar-plugin + + tuscany-sca-osgi-installer + + + true + + + + 2.0 + org.apache.tuscany.sca.installer + ${pom.name} + org.osgi.framework + org.apache.tuscany.sca.installer + org.apache.tuscany.sca.installer.InstallerBundleActivator +kage> + + + + + + + + + diff --git a/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/tuscany-osgi-installer/src/main/java/org/apache/tuscany/sca/installer/InstallerBundleActivator.java b/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/tuscany-osgi-installer/src/main/java/org/apache/tuscany/sca/installer/InstallerBundleActivator.java new file mode 100644 index 0000000000..0c26477a43 --- /dev/null +++ b/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/tuscany-osgi-installer/src/main/java/org/apache/tuscany/sca/installer/InstallerBundleActivator.java @@ -0,0 +1,405 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.tuscany.sca.installer; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.jar.Attributes; +import java.util.jar.JarInputStream; +import java.util.jar.JarOutputStream; +import java.util.jar.Manifest; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import java.util.zip.ZipEntry; + +import org.osgi.framework.Bundle; +import org.osgi.framework.BundleActivator; +import org.osgi.framework.BundleContext; + +/** + * Bundle activator which installs Tuscany modules and 3rd party jars into an OSGi runtime. + * + */ +public class InstallerBundleActivator implements BundleActivator { + + private ArrayList tuscanyBundles = new ArrayList(); + + private static final String[] immutableJars = { + "bcprov" + }; + + private static final String[] tuscanyModulesToIgnore = { + "node2-launcher-webapp", + "implementation-node-runtime", // uses node2 + "saxon", + "runtime", + "runtime-webapp", + "runtime-tomcat", + "runtime-war", + "host-webapp", + "host-tomcat", + "policy-transaction", + "implementation-bpel", + "binding-ejb", + "implementation-ejb", + "implementation-ejb-xml", + + }; + + private static final String[] rebundleJars = { + "org.apache.tuscany.sca.3rdparty.org.apache.tuscany.sdo", // Recreate export statements + }; + + public void start(BundleContext bundleContext) throws Exception { + + String tuscanyHome = System.getProperty("TUSCANY_HOME"); + if (tuscanyHome == null) { + File homeDir = new File("../tuscany-versioned/target/classes"); + if (homeDir.exists()) { + tuscanyHome = homeDir.getCanonicalPath(); + } + } + + System.out.println("Installing Tuscany from TUSCANY_HOME=" + tuscanyHome); + installVersionedTuscanyIntoOSGi(bundleContext, tuscanyHome); + } + + public void stop(BundleContext bundleContext) throws Exception { + + for (Bundle bundle : tuscanyBundles) { + try { + bundle.stop(); + } catch (Exception e) { + // Ignore error + } + } + } + + private void installVersionedTuscanyIntoOSGi(BundleContext bundleContext, String tuscanyHome) { + + try { + Bundle[] installedBundles = bundleContext.getBundles(); + HashSet installedBundleSet = new HashSet(); + for (Bundle bundle : installedBundles) { + if (bundle.getSymbolicName() != null) + installedBundleSet.add(bundle.getSymbolicName()); + } + + // FIXME: SDO bundles dont have the correct dependencies + System.setProperty("commonj.sdo.impl.HelperProvider", "org.apache.tuscany.sdo.helper.HelperProviderImpl"); + + HashSet tuscanyJars = new HashSet(); + HashSet thirdPartyJars = new HashSet(); + + + File tuscanyInstallDir = new File(tuscanyHome).getCanonicalFile(); + findBundles(bundleContext, tuscanyInstallDir, tuscanyJars, thirdPartyJars); + + + for (File bundleFile : thirdPartyJars) { + + String bundleName = bundleFile.getName(); + if (bundleName.startsWith("org.apache.felix")) + continue; + + boolean installed = false; + for (String name : rebundleJars) { + if (bundleName.startsWith(name)) { + rebundleAndInstall(bundleContext, tuscanyInstallDir, bundleFile); + installed = true; + } + } + if (installed) + continue; + + bundleContext.installBundle(bundleFile.toURI().toURL().toString()); + + } + + Bundle osgiRuntimeBundle = null; + for (File bundleFile : tuscanyJars) { + Bundle bundle = bundleContext.installBundle(bundleFile.toURI().toURL().toString()); + if ("org.apache.tuscany.sca.osgi.runtime".equals(bundle.getSymbolicName())) + osgiRuntimeBundle = bundle; + } + if (osgiRuntimeBundle != null) + osgiRuntimeBundle.start(); + + } catch (Exception e) { + e.printStackTrace(); + } + } + + private void rebundleAndInstall(BundleContext bundleContext, File tuscanyInstallDir, File bundleFile) throws Exception { + String bundleSymbolicName = bundleFile.getName(); + if (bundleSymbolicName.endsWith(".jar")) bundleSymbolicName = bundleSymbolicName.substring(0, bundleSymbolicName.length()-4); + + String bundleLocation = bundleFile.toURI().toURL().toString(); + InputStream bundleManifestStream = updateBundleManifest(bundleFile, bundleSymbolicName); + HashSet jarSet = new HashSet(); + jarSet.add(bundleFile); + + File newBundleFile = new File(tuscanyInstallDir, "org.apache.tuscany.sca." + bundleFile.getName()); + createAndInstallBundle(bundleContext, bundleLocation, newBundleFile, bundleManifestStream, jarSet); + bundleManifestStream.close(); + } + + + private void findBundles(BundleContext bundleContext, + File tuscanyInstallDir, + HashSet tuscanyJars, + HashSet thirdPartyJars) + throws IOException + { + + File[] jars = tuscanyInstallDir.listFiles(); + for (File jar : jars) { + String jarName = jar.getName(); + if (!jarName.endsWith(".jar")) + continue; + + if (!jarName.startsWith("org.apache.tuscany.sca")||jarName.startsWith("org.apache.tuscany.sca.3rdparty")) { + if (jarName.endsWith(".jar")) + { + thirdPartyJars.add(jar); + } + } else { + boolean installTuscanyJar = true; + for (String name : tuscanyModulesToIgnore) { + name = name.replaceAll("-", "."); + if (jarName.startsWith("org.apache.tuscany.sca." + name)) { + installTuscanyJar = false; + break; + } + } + if (installTuscanyJar) + tuscanyJars.add(jar); + } + } + } + + + private InputStream updateBundleManifest(File jarFile, String bundleSymbolicName) throws Exception { + + if (!jarFile.exists()) + return null; + JarInputStream jar = new JarInputStream(new FileInputStream(jarFile)); + Manifest manifest = jar.getManifest(); + if (manifest == null) { + ZipEntry ze; + while ((ze = jar.getNextEntry()) != null) { + if (ze.getName().equals("META-INF/MANIFEST.MF")) + break; + } + if (ze != null) { + byte[] bytes = new byte[(int)ze.getSize()]; + jar.read(bytes); + manifest = new Manifest(new ByteArrayInputStream(bytes)); + } + } + if (manifest == null) { + manifest = new Manifest(); + } + + String bundleName = jarFile.getName(); + boolean isImmutableJar = false; + for (String immutableJar : immutableJars) { + if (bundleName.startsWith(immutableJar)) { + isImmutableJar = true; + break; + } + } + Attributes attributes = manifest.getMainAttributes(); + if (isImmutableJar) + attributes.putValue("Bundle-ClassPath", bundleName); + + + attributes.remove(new Attributes.Name("Require-Bundle")); + attributes.putValue("DynamicImport-Package", "*"); + + // Existing export statements in bundles may contain versions, so they should be used as is + // SDO exports are not sufficient, and should be changed + if (attributes.getValue("Export-Package") == null || bundleName.startsWith("org.apache.tuscany.sca.3rdparty.org.apache.tuscany.sdo.tuscany-sdo-impl")) { + + HashSet packages = getPackagesInJar(bundleName, jar); + String version = getJarVersion(bundleName); + + attributes.putValue("Export-Package", packagesToString(packages, version)); + attributes.putValue("Import-Package", packagesToString(packages, null)); + } + + ByteArrayOutputStream out = new ByteArrayOutputStream(); + manifest.write(out); + ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray()); + out.close(); + + return in; + + } + + public Bundle createAndInstallBundle(BundleContext bundleContext, + String bundleLocation, + File bundleFile, + InputStream manifestStream, + final HashSet thirdPartyJars) throws Exception { + + ByteArrayOutputStream out = new ByteArrayOutputStream(); + + Manifest manifest = new Manifest(); + manifest.read(manifestStream); + + StringBuilder bundleClassPath = new StringBuilder("."); + for (File jar : thirdPartyJars) { + bundleClassPath.append(','); + bundleClassPath.append(jar.getName()); + } + + if (thirdPartyJars.size() > 1) + manifest.getMainAttributes().putValue("Bundle-ClassPath", bundleClassPath.toString()); + + JarOutputStream jarOut = new JarOutputStream(out, manifest); + + String classpath = manifest.getMainAttributes().getValue("Bundle-ClassPath"); + boolean embed = classpath != null && !classpath.trim().equals("."); + for (File jarFile : thirdPartyJars) { + if (embed) + addFileToJar(jarFile, jarOut); + else { + copyJar(jarFile, jarOut); + } + } + + jarOut.close(); + out.close(); + + Bundle bundle; + if (System.getenv("TUSCANY_OSGI_DEBUG") != null) { + FileOutputStream fileOut = new FileOutputStream(bundleFile); + fileOut.write(out.toByteArray()); + bundle = bundleContext.installBundle(bundleFile.toURL().toString()); + + } else { + ByteArrayInputStream inStream = new ByteArrayInputStream(out.toByteArray()); + bundle = bundleContext.installBundle(bundleLocation, inStream); + inStream.close(); + } + return bundle; + + } + + private void addFileToJar(File file, JarOutputStream jarOut) throws Exception { + + ZipEntry ze = new ZipEntry(file.getName()); + + try { + jarOut.putNextEntry(ze); + FileInputStream inStream = new FileInputStream(file); + byte[] fileContents = new byte[inStream.available()]; + inStream.read(fileContents); + jarOut.write(fileContents); + } catch (Exception e) { + e.printStackTrace(); + } + } + + + private void copyJar(File file, JarOutputStream jarOut) throws Exception { + + try { + JarInputStream jarIn = new JarInputStream(new FileInputStream(file)); + ZipEntry ze; + byte[] readBuf = new byte[1000]; + int bytesRead; + while ((ze = jarIn.getNextEntry()) != null) { + if (ze.getName().equals("META-INF/MANIFEST.MF")) + continue; + jarOut.putNextEntry(ze); + while ((bytesRead = jarIn.read(readBuf)) > 0) { + jarOut.write(readBuf, 0, bytesRead); + } + } + jarIn.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + private HashSet getPackagesInJar(String bundleName, JarInputStream jar) throws Exception { + HashSet packages = new HashSet(); + ZipEntry entry; + while ((entry = jar.getNextEntry()) != null) { + String entryName = entry.getName(); + if (!entry.isDirectory() && entryName != null && entryName.length() > 0 && + !entryName.startsWith(".") && !entryName.startsWith("META-INF") && + entryName.lastIndexOf("/") > 0) { + String pkg = entryName.substring(0, entryName.lastIndexOf("/")).replace('/', '.'); + packages.add(pkg); + + } + } + // FIXME: Split package + if (bundleName.startsWith("axis2-adb")) + packages.remove("org.apache.axis2.util"); + else if (bundleName.startsWith("axis2-codegen")) { + packages.remove("org.apache.axis2.wsdl"); + packages.remove("org.apache.axis2.wsdl.util"); + } + else if (bundleName.startsWith("bsf-all")) + packages.remove("org.mozilla.javascript"); + + return packages; + } + + private String packagesToString(HashSet packages, String version) { + + StringBuilder pkgBuf = new StringBuilder(); + for (String pkg : packages) { + if (pkgBuf.length() >0) pkgBuf.append(','); + pkgBuf.append(pkg); + if (version != null) { + pkgBuf.append(";version=\""); + pkgBuf.append(version); + pkgBuf.append('\"'); + } + } + return pkgBuf.toString(); + } + + private String getJarVersion(String bundleName) { + Pattern pattern = Pattern.compile("-([0-9.]+)"); + Matcher matcher = pattern.matcher(bundleName); + String version = "1.0.0"; + if (matcher.find()) { + version = matcher.group(); + if (version.endsWith(".")) + version = version.substring(1, version.length()-1); + else + version = version.substring(1); + } + return version; + } + +} diff --git a/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/tuscany-versioned/pom.xml b/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/tuscany-versioned/pom.xml new file mode 100644 index 0000000000..c4fce4515d --- /dev/null +++ b/sca-java-1.x/tags/1.6.1-RC2/itest/osgi-tuscany/tuscany-versioned/pom.xml @@ -0,0 +1,644 @@ + + + + 4.0.0 + + org.apache.tuscany.sca + tuscany-itest + 1.6.1 + ../../pom.xml + + itest-osgi-tuscany-versioned + Apache Tuscany OSGi - Versioned Tuscany Bundles + + + true + ${pom.version} + + + + + ${pom.groupId} + tuscany-monitor + ${pom.version} + + + ${pom.groupId} + tuscany-assembly + ${pom.version} + + + ${pom.groupId} + tuscany-assembly-xml + ${pom.version} + + + ${pom.groupId} + tuscany-assembly-xsd + ${pom.version} + + + ${pom.groupId} + tuscany-binding-dwr + ${pom.version} + + + ${pom.groupId} + tuscany-binding-ejb-runtime + ${pom.version} + + + ${pom.groupId} + tuscany-binding-atom + ${pom.version} + + + + ${pom.groupId} + tuscany-binding-feed + ${pom.version} + + + ${pom.groupId} + tuscany-binding-rss + ${pom.version} + + + ${pom.groupId} + tuscany-binding-rss-rome + ${pom.version} + + + ${pom.groupId} + tuscany-binding-http-runtime + ${pom.version} + + + ${pom.groupId} + tuscany-binding-jms-runtime + ${pom.version} + + + org.apache.activemq + apache-activemq + 4.1.1 + + + commons-httpclient + commons-httpclient + + + commons-fileupload + commons-fileupload + + + commons-beanutils + commons-beanutils + + + org.apache.activemq + activemq-console + + + org.apache.activemq + activemq-core + + + org.apache.activemq + activemq-optional + + + org.apache.activemq + activemq-web + + + org.apache.activemq + activemq-web-demo + + + org.apache.activemq + activemq-jaas + + + org.apache.geronimo.specs + geronimo-j2ee-connector_1.5_spec + + + org.apache.geronimo.specs + geronimo-j2ee-jacc_1.0_spec + + + org.apache.geronimo.specs + geronimo-jms_1.1_spec + + + org.apache.geronimo.specs + geronimo-jsp_2.0_spec + + + org.apache.geronimo.specs + geronimo-j2ee-management_1.0_spec + + + org.mortbay.jetty + servlet-api-2.5 + + + org.mortbay.jetty + jetty + + + org.mortbay.jetty + jetty-util + + + xerces + xercesImpl + + + backport-util-concurrent + backport-util-concurrent + + + activesoap + jaxp-api + + + activemq + jmdns + + + jrms + jrms + + + xerces + xmlParserAPIs + + + xstream + xstream + + + xmlpull + xmlpull + + + mx4j + mx4j + + + mx4j + mx4j-remote + + + + + ${pom.groupId} + tuscany-binding-jsonrpc-runtime + ${pom.version} + + + ${pom.groupId} + tuscany-binding-notification + ${pom.version} + + + ${pom.groupId} + tuscany-binding-rmi-runtime + ${pom.version} + + + ${pom.groupId} + tuscany-binding-sca + ${pom.version} + + + ${pom.groupId} + tuscany-binding-sca-axis2 + ${pom.version} + + + ${pom.groupId} + tuscany-binding-sca-xml + ${pom.version} + + + ${pom.groupId} + tuscany-binding-ws + ${pom.version} + + + ${pom.groupId} + tuscany-binding-ws-axis2 + ${pom.version} + + + ${pom.groupId} + tuscany-binding-ws-xml + ${pom.version} + + + ${pom.groupId} + tuscany-contribution + ${pom.version} + + + ${pom.groupId} + tuscany-contribution-groovy + ${pom.version} + + + ${pom.groupId} + tuscany-contribution-impl + ${pom.version} + + + ${pom.groupId} + tuscany-contribution-java + ${pom.version} + + + ${pom.groupId} + tuscany-contribution-namespace + ${pom.version} + + + ${pom.groupId} + tuscany-core + ${pom.version} + + + ${pom.groupId} + tuscany-core-databinding + ${pom.version} + + + ${pom.groupId} + tuscany-core-spi + ${pom.version} + + + ${pom.groupId} + tuscany-databinding + ${pom.version} + + + ${pom.groupId} + tuscany-databinding-axiom + ${pom.version} + + + ${pom.groupId} + tuscany-databinding-fastinfoset + ${pom.version} + + + ${pom.groupId} + tuscany-databinding-jaxb + ${pom.version} + + + ${pom.groupId} + tuscany-databinding-sdo + ${pom.version} + + + ${pom.groupId} + tuscany-databinding-sdo-axiom + ${pom.version} + + + ${pom.groupId} + tuscany-databinding-xmlbeans + ${pom.version} + + + ${pom.groupId} + tuscany-databinding-xstream + ${pom.version} + + + ${pom.groupId} + tuscany-host-embedded + ${pom.version} + + + ${pom.groupId} + tuscany-host-http + ${pom.version} + + + ${pom.groupId} + tuscany-host-rmi + ${pom.version} + + + ${pom.groupId} + tuscany-host-webapp + ${pom.version} + + + ${pom.groupId} + tuscany-host-jetty + ${pom.version} + + + ${pom.groupId} + tuscany-interface + ${pom.version} + + + ${pom.groupId} + tuscany-interface-java + ${pom.version} + + + ${pom.groupId} + tuscany-interface-java-xml + ${pom.version} + + + ${pom.groupId} + tuscany-interface-wsdl + ${pom.version} + + + ${pom.groupId} + tuscany-interface-wsdl-xml + ${pom.version} + + + + ${pom.groupId} + tuscany-implementation-das + ${pom.version} + + + ${pom.groupId} + tuscany-implementation-ejb + ${pom.version} + + + ${pom.groupId} + tuscany-implementation-ejb + ${pom.version} + + + ${pom.groupId} + tuscany-implementation-java + ${pom.version} + + + ${pom.groupId} + tuscany-implementation-java-xml + ${pom.version} + + + ${pom.groupId} + tuscany-implementation-java-runtime + ${pom.version} + + + ${pom.groupId} + tuscany-implementation-node + ${pom.version} + + + ${pom.groupId} + tuscany-implementation-node-runtime + ${pom.version} + + + ${pom.groupId} + tuscany-host-tomcat + + + + + ${pom.groupId} + tuscany-implementation-osgi + ${pom.version} + + + ${pom.groupId} + tuscany-implementation-resource-runtime + ${pom.version} + + + ${pom.groupId} + tuscany-implementation-script + ${pom.version} + + + groovy + groovy-all-minimal + + + + + ${pom.groupId} + tuscany-implementation-spring + ${pom.version} + + + ${pom.groupId} + tuscany-implementation-xquery + ${pom.version} + + + ${pom.groupId} + tuscany-implementation-widget-runtime + ${pom.version} + + + ${pom.groupId} + tuscany-node-api + ${pom.version} + + + ${pom.groupId} + tuscany-node-impl + ${pom.version} + + + ${pom.groupId} + tuscany-node-launcher + ${pom.version} + + + ${pom.groupId} + tuscany-policy + ${pom.version} + + + ${pom.groupId} + tuscany-policy-logging + ${pom.version} + + + ${pom.groupId} + tuscany-policy-security + ${pom.version} + + + ${pom.groupId} + tuscany-policy-xml + ${pom.version} + + + ${pom.groupId} + tuscany-definitions + ${pom.version} + + + ${pom.groupId} + tuscany-workspace + ${pom.version} + + + ${pom.groupId} + tuscany-domain-manager + ${pom.version} + + + ${pom.groupId} + tuscany-host-tomcat + + + + + ${pom.groupId} + tuscany-workspace-impl + ${pom.version} + + + ${pom.groupId} + tuscany-workspace-xml + ${pom.version} + + + + ${pom.groupId} + tuscany-sca-api + ${pom.version} + + + org.apache.tuscany.sdo + tuscany-sdo-impl + 1.1-incubating + + + org.codehaus.woodstox + wstx-asl + + + + + org.apache.tuscany.sdo + tuscany-sdo-tools + 1.1-incubating + + + + com.sun.xml.bind + jaxb-impl + 2.1.6 + + + javax.xml.stream + stax-api + + + + + commons-lang + commons-lang + 2.1 + + + commons-cli + commons-cli + 1.0 + + + junit + junit + + + + + org.easymock + easymock + 2.2 + + + + + + + + org.apache.tuscany.sca + tuscany-maven-bundle-plugin + 1.6.1 + true + + + + execute + + + + + + + + + + -- cgit v1.2.3