diff options
author | jsdelfino <jsdelfino@13f79535-47bb-0310-9956-ffa450edef68> | 2008-09-15 00:26:00 +0000 |
---|---|---|
committer | jsdelfino <jsdelfino@13f79535-47bb-0310-9956-ffa450edef68> | 2008-09-15 00:26:00 +0000 |
commit | d5f1d093fe6fa491cdec392dca7137639e98d149 (patch) | |
tree | b98c79d8231a2617ee1dce43b1782d30d93686bc /branches/sca-android/itest/osgi-tuscany | |
parent | f4e3e383071b6947d56794d9af5e9e6438aa3235 (diff) |
Pulled a recent revision of trunk into the sca-android branch, to apply the android patches from JIRA TUSCANY-2440 to it.
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@695318 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'branches/sca-android/itest/osgi-tuscany')
44 files changed, 4773 insertions, 0 deletions
diff --git a/branches/sca-android/itest/osgi-tuscany/osgi-tuscany-test/pom.xml b/branches/sca-android/itest/osgi-tuscany/osgi-tuscany-test/pom.xml new file mode 100644 index 0000000000..fa1ace68ac --- /dev/null +++ b/branches/sca-android/itest/osgi-tuscany/osgi-tuscany-test/pom.xml @@ -0,0 +1,99 @@ +<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-itest</artifactId>
+ <version>1.4-SNAPSHOT</version>
+ <relativePath>../../pom.xml</relativePath>
+ </parent>
+ <artifactId>itest-osgi-tuscany-test</artifactId>
+ <name>Apache Tuscany OSGi-Based Tuscany Runtime Tests</name>
+
+ <dependencies>
+
+ <dependency>
+ <groupId>org.eclipse</groupId>
+ <artifactId>osgi</artifactId>
+ <version>3.3.2.R33x_v20080105</version>
+ </dependency>
+
+
+<!-- Uncomment this section and comment out the Equinox dependency above to run tests using Felix.
+
+ <dependency>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>org.apache.felix.main</artifactId>
+ <version>1.0.4</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>org.apache.felix.configadmin</artifactId>
+ <version>1.0.1</version>
+ <exclusions>
+ <exclusion>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>javax.servlet</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>org.apache.felix.scr</artifactId>
+ <version>1.0.2</version>
+ </dependency>
+
+End Felix dependencies -->
+
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>4.2</version>
+ <scope>test</scope>
+ </dependency>
+
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <configuration>
+ <forkMode>pertest</forkMode>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+
+ <repositories>
+ <repository>
+ <id>ops4j-repository</id>
+ <url>http://repository.ops4j.org/maven2</url>
+ <snapshots>
+ <enabled>false</enabled>
+ </snapshots>
+ </repository>
+ </repositories>
+
+</project>
diff --git a/branches/sca-android/itest/osgi-tuscany/osgi-tuscany-test/src/main/java/org/apache/tuscany/sca/test/osgi/runtime/impl/EquinoxTestRuntime.java b/branches/sca-android/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/branches/sca-android/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/branches/sca-android/itest/osgi-tuscany/osgi-tuscany-test/src/main/java/org/apache/tuscany/sca/test/osgi/runtime/impl/FelixTestRuntime.java b/branches/sca-android/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/branches/sca-android/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<BundleActivator> activators = new ArrayList<BundleActivator>();
+
+ 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/branches/sca-android/itest/osgi-tuscany/osgi-tuscany-test/src/main/java/org/apache/tuscany/sca/test/osgi/runtime/impl/OSGiTestRuntime.java b/branches/sca-android/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/branches/sca-android/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/branches/sca-android/itest/osgi-tuscany/osgi-tuscany-test/src/main/java/org/apache/tuscany/sca/test/util/OSGiRuntimeLoader.java b/branches/sca-android/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/branches/sca-android/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/branches/sca-android/itest/osgi-tuscany/osgi-tuscany-test/src/main/java/org/apache/tuscany/sca/test/util/TuscanyLoader.java b/branches/sca-android/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/branches/sca-android/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/branches/sca-android/itest/osgi-tuscany/osgi-tuscany-test/src/test/java/org/apache/tuscany/sca/test/osgi/harness/OSGiTuscanyNonOSGiTestHarness.java b/branches/sca-android/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/branches/sca-android/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<String> 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<String> testCaseSet = new HashSet<String>(); + 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/branches/sca-android/itest/osgi-tuscany/osgi-tuscany-test/src/test/java/org/apache/tuscany/sca/test/osgi/harness/OSGiTuscanyTestHarness.java b/branches/sca-android/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/branches/sca-android/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/branches/sca-android/itest/osgi-tuscany/osgi-tuscany-test/src/test/java/org/apache/tuscany/sca/test/osgi/tuscany/CalculatorImplementationPoliciesTestCase.java b/branches/sca-android/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/branches/sca-android/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/branches/sca-android/itest/osgi-tuscany/osgi-tuscany-test/src/test/java/org/apache/tuscany/sca/test/osgi/tuscany/CalculatorRmiTestCase.java b/branches/sca-android/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/branches/sca-android/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/branches/sca-android/itest/osgi-tuscany/osgi-tuscany-test/src/test/java/org/apache/tuscany/sca/test/osgi/tuscany/CalculatorScriptTestCase.java b/branches/sca-android/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/branches/sca-android/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/branches/sca-android/itest/osgi-tuscany/osgi-tuscany-test/src/test/java/org/apache/tuscany/sca/test/osgi/tuscany/CallbackWsClientTestCase.java b/branches/sca-android/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/branches/sca-android/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/branches/sca-android/itest/osgi-tuscany/osgi-tuscany-test/src/test/java/org/apache/tuscany/sca/test/osgi/tuscany/CallbackWsServiceTestCase.java b/branches/sca-android/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/branches/sca-android/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/branches/sca-android/itest/osgi-tuscany/osgi-tuscany-test/src/test/java/org/apache/tuscany/sca/test/osgi/tuscany/HelloworldWsServiceJmsTestCase.java b/branches/sca-android/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/branches/sca-android/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/branches/sca-android/itest/osgi-tuscany/osgi-tuscany-test/src/test/java/org/apache/tuscany/sca/test/osgi/tuscany/HelloworldWsServiceSecureTestCase.java b/branches/sca-android/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/branches/sca-android/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/branches/sca-android/itest/osgi-tuscany/osgi-tuscany-test/src/test/java/org/apache/tuscany/sca/test/osgi/tuscany/HelloworldWsServiceTestCase.java b/branches/sca-android/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/branches/sca-android/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/branches/sca-android/itest/osgi-tuscany/osgi-tuscany-test/src/test/java/org/apache/tuscany/sca/test/osgi/tuscany/NonOSGiSamplesTestCase.java b/branches/sca-android/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/branches/sca-android/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/branches/sca-android/itest/osgi-tuscany/osgi-tuscany-test/src/test/java/org/apache/tuscany/sca/test/osgi/tuscany/OSGiSupplyChainTestCase.java b/branches/sca-android/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/branches/sca-android/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/branches/sca-android/itest/osgi-tuscany/osgi-tuscany-test/src/test/java/org/apache/tuscany/sca/test/osgi/tuscany/OSGiTuscanyRuntimeTestCase.java b/branches/sca-android/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/branches/sca-android/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/branches/sca-android/itest/osgi-tuscany/osgi-tuscany-test/src/test/java/org/apache/tuscany/sca/test/osgi/tuscany/TuscanySampleExtensionsTestCase.java b/branches/sca-android/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/branches/sca-android/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/branches/sca-android/itest/osgi-tuscany/osgi-tuscany-test/src/test/java/org/apache/tuscany/sca/test/osgi/tuscany/TuscanySamplesUsingOldDomainTestCase.java b/branches/sca-android/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/branches/sca-android/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/branches/sca-android/itest/osgi-tuscany/osgi-tuscany-test/src/test/resources/META-INF/MANIFEST.MF b/branches/sca-android/itest/osgi-tuscany/osgi-tuscany-test/src/test/resources/META-INF/MANIFEST.MF new file mode 100644 index 0000000000..8985947286 --- /dev/null +++ b/branches/sca-android/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/branches/sca-android/itest/osgi-tuscany/osgi-tuscany-test/src/test/resources/felix/felix.config.properties b/branches/sca-android/itest/osgi-tuscany/osgi-tuscany-test/src/test/resources/felix/felix.config.properties new file mode 100644 index 0000000000..6a38f48c4a --- /dev/null +++ b/branches/sca-android/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/branches/sca-android/itest/osgi-tuscany/pom.xml b/branches/sca-android/itest/osgi-tuscany/pom.xml new file mode 100644 index 0000000000..0da4f09d61 --- /dev/null +++ b/branches/sca-android/itest/osgi-tuscany/pom.xml @@ -0,0 +1,39 @@ +<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-itest</artifactId>
+ <version>1.4-SNAPSHOT</version>
+ <relativePath>../pom.xml</relativePath>
+ </parent>
+ <artifactId>itest-osgi-tuscany</artifactId>
+ <packaging>pom</packaging>
+ <name>Apache Tuscany OSGi-based Tuscany Runtime Integration Tests</name>
+
+ <modules>
+ <module>test-bundles</module>
+ <module>tuscany-versioned</module>
+ <module>tuscany-osgi-installer</module>
+ <module>osgi-tuscany-test</module>
+ </modules>
+
+</project>
diff --git a/branches/sca-android/itest/osgi-tuscany/test-bundles/build-bundles.xml b/branches/sca-android/itest/osgi-tuscany/test-bundles/build-bundles.xml new file mode 100644 index 0000000000..c7ea66863f --- /dev/null +++ b/branches/sca-android/itest/osgi-tuscany/test-bundles/build-bundles.xml @@ -0,0 +1,31 @@ +<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<project name="OSGiBundleCreator">
+
+ <target name="create-bundles">
+
+ <jar jarfile="${jar.dir}/${jar.file.name}" manifest="${files.dir}/${manifest.file.name}" >
+ <fileset dir="${files.dir}" includes="${files.list}">
+ </fileset>
+ </jar>
+ </target>
+
+
+</project>
diff --git a/branches/sca-android/itest/osgi-tuscany/test-bundles/pom.xml b/branches/sca-android/itest/osgi-tuscany/test-bundles/pom.xml new file mode 100644 index 0000000000..b53beea930 --- /dev/null +++ b/branches/sca-android/itest/osgi-tuscany/test-bundles/pom.xml @@ -0,0 +1,124 @@ +<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-itest</artifactId>
+ <version>1.4-SNAPSHOT</version>
+ <relativePath>../../pom.xml</relativePath>
+ </parent>
+ <artifactId>itest-osgi-tuscany-test-bundles</artifactId>
+ <name>Apache Tuscany OSGi-Based Tuscany Runtime Test Bundles</name>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-sca-api</artifactId>
+ <version>1.4-SNAPSHOT</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-host-embedded</artifactId>
+ <version>1.4-SNAPSHOT</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>org.apache.felix.main</artifactId>
+ <version>1.0.4</version>
+ </dependency>
+
+
+ </dependencies>
+
+ <build>
+ <finalName>itest-osgi-tuscany-test-bundles</finalName>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-antrun-plugin</artifactId>
+ <version>1.1</version>
+
+ <dependencies>
+ <dependency>
+ <groupId>ant</groupId>
+ <artifactId>ant-trax</artifactId>
+ <version>1.6.5</version>
+ </dependency>
+ </dependencies>
+
+ <executions>
+ <execution>
+ <id>create-bundles</id>
+ <phase>generate-test-sources</phase>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ <configuration>
+ <tasks>
+ <ant antfile="./build-bundles.xml" target="create-bundles">
+ <property name="jar.dir" value="target" />
+ <property name="files.dir" value="target/classes" />
+ <property name="jar.file.name" value="SupplyChain.jar" />
+ <property name="manifest.file.name" value="META-INF/SupplyChain.mf" />
+ <property name="files.list"
+ value="supplychain/customer/* \
+ supplychain/retailer/* \
+ supplychain/warehouse/* \
+ supplychain/shipper/* \
+ supplychain/supplychain.composite \
+ META-INF/sca-contribution.xml" />
+
+ </ant>
+ <ant antfile="./build-bundles.xml" target="create-bundles">
+ <property name="jar.dir" value="target" />
+ <property name="files.dir" value="target/classes" />
+ <property name="jar.file.name" value="SupplyChainClient.jar" />
+ <property name="manifest.file.name" value="META-INF/SupplyChainClient.mf" />
+ <property name="files.list"
+ value="supplychain/client/*" />
+ </ant>
+ <ant antfile="./build-bundles.xml" target="create-bundles">
+ <property name="jar.dir" value="target" />
+ <property name="files.dir" value="target/classes" />
+ <property name="jar.file.name" value="SupplyChainWS.jar" />
+ <property name="manifest.file.name" value="META-INF/SupplyChain.mf" />
+ <property name="files.list"
+ value="supplychain/customer/* \
+ supplychain/retailer/* \
+ supplychain/warehouse/* \
+ supplychain/shipper/* \
+ supplychain/ws/supplychain.composite \
+ supplychain/ws/Customer.wsdl \
+ META-INF/sca-contribution.xml" />
+
+ </ant>
+
+ </tasks>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+
+</project>
diff --git a/branches/sca-android/itest/osgi-tuscany/test-bundles/src/main/java/supplychain/client/SupplyChainClient.java b/branches/sca-android/itest/osgi-tuscany/test-bundles/src/main/java/supplychain/client/SupplyChainClient.java new file mode 100644 index 0000000000..0ac96b35a3 --- /dev/null +++ b/branches/sca-android/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/branches/sca-android/itest/osgi-tuscany/test-bundles/src/main/java/supplychain/customer/Customer.java b/branches/sca-android/itest/osgi-tuscany/test-bundles/src/main/java/supplychain/customer/Customer.java new file mode 100644 index 0000000000..a3aa2531fc --- /dev/null +++ b/branches/sca-android/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/branches/sca-android/itest/osgi-tuscany/test-bundles/src/main/java/supplychain/customer/JavaCustomerComponentImpl.java b/branches/sca-android/itest/osgi-tuscany/test-bundles/src/main/java/supplychain/customer/JavaCustomerComponentImpl.java new file mode 100644 index 0000000000..5f1342c40b --- /dev/null +++ b/branches/sca-android/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/branches/sca-android/itest/osgi-tuscany/test-bundles/src/main/java/supplychain/retailer/JavaRetailerComponentImpl.java b/branches/sca-android/itest/osgi-tuscany/test-bundles/src/main/java/supplychain/retailer/JavaRetailerComponentImpl.java new file mode 100644 index 0000000000..f5708dec40 --- /dev/null +++ b/branches/sca-android/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/branches/sca-android/itest/osgi-tuscany/test-bundles/src/main/java/supplychain/retailer/Retailer.java b/branches/sca-android/itest/osgi-tuscany/test-bundles/src/main/java/supplychain/retailer/Retailer.java new file mode 100644 index 0000000000..17b342f8dd --- /dev/null +++ b/branches/sca-android/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/branches/sca-android/itest/osgi-tuscany/test-bundles/src/main/java/supplychain/shipper/JavaShipperComponentImpl.java b/branches/sca-android/itest/osgi-tuscany/test-bundles/src/main/java/supplychain/shipper/JavaShipperComponentImpl.java new file mode 100644 index 0000000000..afaf7aea02 --- /dev/null +++ b/branches/sca-android/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/branches/sca-android/itest/osgi-tuscany/test-bundles/src/main/java/supplychain/shipper/Shipper.java b/branches/sca-android/itest/osgi-tuscany/test-bundles/src/main/java/supplychain/shipper/Shipper.java new file mode 100644 index 0000000000..cd204ebc2e --- /dev/null +++ b/branches/sca-android/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/branches/sca-android/itest/osgi-tuscany/test-bundles/src/main/java/supplychain/warehouse/JavaWarehouseComponentImpl.java b/branches/sca-android/itest/osgi-tuscany/test-bundles/src/main/java/supplychain/warehouse/JavaWarehouseComponentImpl.java new file mode 100644 index 0000000000..ca720085c5 --- /dev/null +++ b/branches/sca-android/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/branches/sca-android/itest/osgi-tuscany/test-bundles/src/main/java/supplychain/warehouse/Warehouse.java b/branches/sca-android/itest/osgi-tuscany/test-bundles/src/main/java/supplychain/warehouse/Warehouse.java new file mode 100644 index 0000000000..b4807b80d1 --- /dev/null +++ b/branches/sca-android/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/branches/sca-android/itest/osgi-tuscany/test-bundles/src/main/resources/META-INF/SupplyChain.mf b/branches/sca-android/itest/osgi-tuscany/test-bundles/src/main/resources/META-INF/SupplyChain.mf new file mode 100644 index 0000000000..f71d822bbe --- /dev/null +++ b/branches/sca-android/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/branches/sca-android/itest/osgi-tuscany/test-bundles/src/main/resources/META-INF/SupplyChainClient.mf b/branches/sca-android/itest/osgi-tuscany/test-bundles/src/main/resources/META-INF/SupplyChainClient.mf new file mode 100644 index 0000000000..13a3c9b82a --- /dev/null +++ b/branches/sca-android/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/branches/sca-android/itest/osgi-tuscany/test-bundles/src/main/resources/META-INF/sca-contribution.xml b/branches/sca-android/itest/osgi-tuscany/test-bundles/src/main/resources/META-INF/sca-contribution.xml new file mode 100644 index 0000000000..b524abc2a6 --- /dev/null +++ b/branches/sca-android/itest/osgi-tuscany/test-bundles/src/main/resources/META-INF/sca-contribution.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<contribution xmlns="http://www.osoa.org/xmlns/sca/1.0"
+ targetNamespace="http://supplychain"
+ xmlns:supplychain="http://supplychain">
+
+ <deployable composite="supplychain:supplychain"/>
+
+</contribution>
diff --git a/branches/sca-android/itest/osgi-tuscany/test-bundles/src/main/resources/supplychain/supplychain.composite b/branches/sca-android/itest/osgi-tuscany/test-bundles/src/main/resources/supplychain/supplychain.composite new file mode 100644 index 0000000000..5be79b741a --- /dev/null +++ b/branches/sca-android/itest/osgi-tuscany/test-bundles/src/main/resources/supplychain/supplychain.composite @@ -0,0 +1,48 @@ +<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
+ xmlns:tuscany="http://tuscany.apache.org/xmlns/sca/1.0"
+ targetNamespace="http://supplychain"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:sp="http://supplychain"
+ name="supplychain">
+
+ <component name="CustomerComponent">
+ <implementation.java class="supplychain.customer.JavaCustomerComponentImpl" />
+ <reference name="retailer" target="RetailerComponent" />
+ </component>
+
+ <component name="RetailerComponent">
+ <implementation.java class="supplychain.retailer.JavaRetailerComponentImpl" />
+ <reference name="warehouse" target="WarehouseComponent"/>
+ </component>
+
+ <component name="WarehouseComponent">
+ <implementation.java class="supplychain.warehouse.JavaWarehouseComponentImpl" />
+ <reference name="shipper" target="ShipperComponent" />
+ </component>
+
+ <component name="ShipperComponent">
+ <implementation.java class="supplychain.shipper.JavaShipperComponentImpl" />
+ <reference name="customer" target="CustomerComponent" />
+ </component>
+
+
+</composite>
diff --git a/branches/sca-android/itest/osgi-tuscany/test-bundles/src/main/resources/supplychain/ws/Customer.wsdl b/branches/sca-android/itest/osgi-tuscany/test-bundles/src/main/resources/supplychain/ws/Customer.wsdl new file mode 100644 index 0000000000..8549ca3409 --- /dev/null +++ b/branches/sca-android/itest/osgi-tuscany/test-bundles/src/main/resources/supplychain/ws/Customer.wsdl @@ -0,0 +1,135 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. +--> +<wsdl:definitions targetNamespace="http://supplychain" + xmlns:axis2ns1="http://supplychain" + xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" + xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" + xmlns:ns1="http://supplychain" + xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" + xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"> + <wsdl:types xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"> + <xs:schema attributeFormDefault="unqualified" + elementFormDefault="qualified" + targetNamespace="http://supplychain" + xmlns:ns="http://supplychain" xmlns:xs="http://www.w3.org/2001/XMLSchema"> + <xs:element name="outstandingOrderCount"> + <xs:complexType> + <xs:sequence/> + </xs:complexType> + </xs:element> + <xs:element name="outstandingOrderCountResponse"> + <xs:complexType> + <xs:sequence> + <xs:element name="return" type="xs:int"/> + </xs:sequence> + </xs:complexType> + </xs:element> + <xs:element name="notifyShipment"> + <xs:complexType> + <xs:sequence> + <xs:element name="param0" type="xs:string"/> + </xs:sequence> + </xs:complexType> + </xs:element> + <xs:element name="notifyShipmentResponse"> + <xs:complexType> + <xs:sequence/> + </xs:complexType> + </xs:element> + <xs:element name="purchaseGoods"> + <xs:complexType> + <xs:sequence/> + </xs:complexType> + </xs:element> + <xs:element name="purchaseGoodsResponse"> + <xs:complexType> + <xs:sequence/> + </xs:complexType> + </xs:element> + </xs:schema> + </wsdl:types> + <wsdl:message name="outstandingOrderCountRequest" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"> + <wsdl:part element="ns1:outstandingOrderCount" name="part1" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"/> + </wsdl:message> + <wsdl:message name="outstandingOrderCountResponseMessage" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"> + <wsdl:part element="ns1:outstandingOrderCountResponse" name="part1" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"/> + </wsdl:message> + <wsdl:message name="notifyShipmentRequest" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"> + <wsdl:part element="ns1:notifyShipment" name="part1" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"/> + </wsdl:message> + <wsdl:message name="notifyShipmentResponseMessage" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"> + <wsdl:part element="ns1:notifyShipmentResponse" name="part1" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"/> + </wsdl:message> + <wsdl:message name="purchaseGoodsRequest" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"> + <wsdl:part element="ns1:purchaseGoods" name="part1" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"/> + </wsdl:message> + <wsdl:message name="purchaseGoodsResponseMessage" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"> + <wsdl:part element="ns1:purchaseGoodsResponse" name="part1" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"/> + </wsdl:message> + <wsdl:portType name="Customer" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"> + <wsdl:operation name="outstandingOrderCount" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"> + <wsdl:input message="axis2ns1:outstandingOrderCountRequest" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"/> + <wsdl:output + message="axis2ns1:outstandingOrderCountResponseMessage" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"/> + </wsdl:operation> + <wsdl:operation name="notifyShipment" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"> + <wsdl:input message="axis2ns1:notifyShipmentRequest" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"/> + </wsdl:operation> + <wsdl:operation name="purchaseGoods" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"> + <wsdl:input message="axis2ns1:purchaseGoodsRequest" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"/> + <wsdl:output message="axis2ns1:purchaseGoodsResponseMessage" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"/> + </wsdl:operation> + </wsdl:portType> + <wsdl:binding name="CustomerBinding" type="axis2ns1:Customer" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"> + <soap:binding style="document" + transport="http://schemas.xmlsoap.org/soap/http" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"/> + <wsdl:operation name="outstandingOrderCount" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"> + <soap:operation soapAction="urn:outstandingOrderCount" + style="document" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"/> + <wsdl:input xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"> + <soap:body namespace="http://supplychain" use="literal" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"/> + </wsdl:input> + <wsdl:output xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"> + <soap:body namespace="http://supplychain" use="literal" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"/> + </wsdl:output> + </wsdl:operation> + <wsdl:operation name="notifyShipment" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"> + <soap:operation soapAction="urn:notifyShipment" style="document" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"/> + <wsdl:input xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"> + <soap:body namespace="http://supplychain" use="literal" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"/> + </wsdl:input> + </wsdl:operation> + <wsdl:operation name="purchaseGoods" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"> + <soap:operation soapAction="urn:purchaseGoods" style="document" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"/> + <wsdl:input xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"> + <soap:body namespace="http://supplychain" use="literal" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"/> + </wsdl:input> + </wsdl:operation> + </wsdl:binding> + + <wsdl:service name="CustomerWebService" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"> + <wsdl:port binding="axis2ns1:CustomerBinding" + name="CustomerPort" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"> + <soap:address + location="http://localhost:8085/services/Customer" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"/> + </wsdl:port> + </wsdl:service> + +</wsdl:definitions> diff --git a/branches/sca-android/itest/osgi-tuscany/test-bundles/src/main/resources/supplychain/ws/supplychain.composite b/branches/sca-android/itest/osgi-tuscany/test-bundles/src/main/resources/supplychain/ws/supplychain.composite new file mode 100644 index 0000000000..88d1e72efc --- /dev/null +++ b/branches/sca-android/itest/osgi-tuscany/test-bundles/src/main/resources/supplychain/ws/supplychain.composite @@ -0,0 +1,55 @@ +<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
+ xmlns:tuscany="http://tuscany.apache.org/xmlns/sca/1.0"
+ targetNamespace="http://supplychain"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:sp="http://supplychain"
+ name="supplychain">
+
+ <component name="CustomerComponent">
+ <implementation.java class="supplychain.customer.JavaCustomerComponentImpl" />
+ <reference name="retailer" target="RetailerComponent" />
+ <service name="Customer">
+ <interface.wsdl interface="http://supplychain#wsdl.interface(Customer)" />
+ <binding.ws wsdlElement="http://supplychain#wsdl.port(CustomerWebService/CustomerPort)"/>
+ </service>
+ </component>
+
+ <component name="RetailerComponent">
+ <implementation.java class="supplychain.retailer.JavaRetailerComponentImpl" />
+ <reference name="warehouse" target="WarehouseComponent"/>
+ </component>
+
+ <component name="WarehouseComponent">
+ <implementation.java class="supplychain.warehouse.JavaWarehouseComponentImpl" />
+ <reference name="shipper" target="ShipperComponent" />
+ </component>
+
+ <component name="ShipperComponent">
+ <implementation.java class="supplychain.shipper.JavaShipperComponentImpl" />
+ <reference name="customer">
+ <interface.wsdl interface="http://supplychain#wsdl.interface(Customer)" />
+ <binding.ws wsdlElement="http://supplychain#wsdl.port(CustomerWebService/CustomerPort)"/>
+ </reference>
+ </component>
+
+
+</composite>
diff --git a/branches/sca-android/itest/osgi-tuscany/tuscany-osgi-installer/pom.xml b/branches/sca-android/itest/osgi-tuscany/tuscany-osgi-installer/pom.xml new file mode 100644 index 0000000000..ea1c78fa2a --- /dev/null +++ b/branches/sca-android/itest/osgi-tuscany/tuscany-osgi-installer/pom.xml @@ -0,0 +1,671 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. +--> +<project> + <modelVersion>4.0.0</modelVersion> + <parent> + <groupId>org.apache.tuscany.sca</groupId> + <artifactId>tuscany-itest</artifactId> + <version>1.4-SNAPSHOT</version> + <relativePath>../../pom.xml</relativePath> + </parent> + <artifactId>itest-osgi-tuscany-installer</artifactId> + <name>Apache Tuscany OSGi - Tuscany Installer Bundle</name> + + <properties> + <maven.test.skip>true</maven.test.skip> + <tuscany.version>${pom.version}</tuscany.version> + </properties> + <dependencies> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-monitor-logging</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-assembly</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-assembly-xml</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-assembly-xsd</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-binding-dwr</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-binding-ejb-runtime</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-binding-atom</artifactId> + <version>${pom.version}</version> + </dependency> +<!-- + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-binding-atom-abdera</artifactId> + <version>${pom.version}</version> + </dependency> +--> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-binding-feed</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-binding-rss</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-binding-rss-rome</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-binding-http-runtime</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-binding-jms-runtime</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>org.apache.activemq</groupId> + <artifactId>apache-activemq</artifactId> + <version>4.1.1</version> + <exclusions> + <exclusion> + <groupId>commons-httpclient</groupId> + <artifactId>commons-httpclient</artifactId> + </exclusion> + <exclusion> + <groupId>commons-fileupload</groupId> + <artifactId>commons-fileupload</artifactId> + </exclusion> + <exclusion> + <groupId>commons-beanutils</groupId> + <artifactId>commons-beanutils</artifactId> + </exclusion> + <exclusion> + <groupId>org.apache.activemq</groupId> + <artifactId>activemq-console</artifactId> + </exclusion> + <exclusion> + <groupId>org.apache.activemq</groupId> + <artifactId>activemq-core</artifactId> + </exclusion> + <exclusion> + <groupId>org.apache.activemq</groupId> + <artifactId>activemq-optional</artifactId> + </exclusion> + <exclusion> + <groupId>org.apache.activemq</groupId> + <artifactId>activemq-web</artifactId> + </exclusion> + <exclusion> + <groupId>org.apache.activemq</groupId> + <artifactId>activemq-web-demo</artifactId> + </exclusion> + <exclusion> + <groupId>org.apache.activemq</groupId> + <artifactId>activemq-jaas</artifactId> + </exclusion> + <exclusion> + <groupId>org.apache.geronimo.specs</groupId> + <artifactId>geronimo-j2ee-connector_1.5_spec</artifactId> + </exclusion> + <exclusion> + <groupId>org.apache.geronimo.specs</groupId> + <artifactId>geronimo-j2ee-jacc_1.0_spec</artifactId> + </exclusion> + <exclusion> + <groupId>org.apache.geronimo.specs</groupId> + <artifactId>geronimo-jms_1.1_spec</artifactId> + </exclusion> + <exclusion> + <groupId>org.apache.geronimo.specs</groupId> + <artifactId>geronimo-jsp_2.0_spec</artifactId> + </exclusion> + <exclusion> + <groupId>org.apache.geronimo.specs</groupId> + <artifactId>geronimo-j2ee-management_1.0_spec</artifactId> + </exclusion> + <exclusion> + <groupId>org.mortbay.jetty</groupId> + <artifactId>servlet-api-2.5</artifactId> + </exclusion> + <exclusion> + <groupId>org.mortbay.jetty</groupId> + <artifactId>jetty</artifactId> + </exclusion> + <exclusion> + <groupId>org.mortbay.jetty</groupId> + <artifactId>jetty-util</artifactId> + </exclusion> + <exclusion> + <groupId>xerces</groupId> + <artifactId>xercesImpl</artifactId> + </exclusion> + <exclusion> + <groupId>backport-util-concurrent</groupId> + <artifactId>backport-util-concurrent</artifactId> + </exclusion> + <exclusion> + <groupId>activesoap</groupId> + <artifactId>jaxp-api</artifactId> + </exclusion> + <exclusion> + <groupId>activemq</groupId> + <artifactId>jmdns</artifactId> + </exclusion> + <exclusion> + <groupId>jrms</groupId> + <artifactId>jrms</artifactId> + </exclusion> + <exclusion> + <groupId>xerces</groupId> + <artifactId>xmlParserAPIs</artifactId> + </exclusion> + <exclusion> + <groupId>xstream</groupId> + <artifactId>xstream</artifactId> + </exclusion> + <exclusion> + <groupId>xmlpull</groupId> + <artifactId>xmlpull</artifactId> + </exclusion> + <exclusion> + <groupId>mx4j</groupId> + <artifactId>mx4j</artifactId> + </exclusion> + <exclusion> + <groupId>mx4j</groupId> + <artifactId>mx4j-remote</artifactId> + </exclusion> + </exclusions> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-binding-jsonrpc-runtime</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-binding-notification</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-binding-rmi</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-binding-sca</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-binding-sca-axis2</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-binding-sca-xml</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-binding-ws</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-binding-ws-axis2</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-binding-ws-xml</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-contribution</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-contribution-groovy</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-contribution-impl</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-contribution-java</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-contribution-namespace</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-core</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-core-databinding</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-core-spi</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-databinding</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-databinding-axiom</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-databinding-fastinfoset</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-databinding-jaxb</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-databinding-sdo</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-databinding-sdo-axiom</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-databinding-xmlbeans</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-databinding-xstream</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-host-embedded</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-host-http</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-host-rmi</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-host-webapp</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-host-jetty</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-interface</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-interface-java</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-interface-java-xml</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-interface-wsdl</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-interface-wsdl-xml</artifactId> + <version>${pom.version}</version> + </dependency> +<!-- + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-implementation-bpel</artifactId> + <version>${pom.version}</version> + <exclusions> + <exclusion> + <groupId>ant</groupId> + <artifactId>ant</artifactId> + </exclusion> + </exclusions> + </dependency> +--> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-implementation-das</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-implementation-ejb</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-implementation-ejb</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-implementation-java</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-implementation-java-xml</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-implementation-java-runtime</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-implementation-node</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-implementation-node-runtime</artifactId> + <version>${pom.version}</version> + <exclusions> + <exclusion> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-host-tomcat</artifactId> + </exclusion> + </exclusions> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-implementation-osgi</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-implementation-resource-runtime</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-implementation-script</artifactId> + <version>${pom.version}</version> + <exclusions> + <exclusion> + <groupId>groovy</groupId> + <artifactId>groovy-all-minimal</artifactId> + </exclusion> + </exclusions> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-implementation-spring</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-implementation-xquery</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-implementation-widget-runtime</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-node-api</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-node-impl</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-node-launcher</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-policy</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-policy-logging</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-policy-security</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-policy-xml</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-definitions</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-workspace</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-domain-manager</artifactId> + <version>${pom.version}</version> + <exclusions> + <exclusion> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-host-tomcat</artifactId> + </exclusion> + </exclusions> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-workspace-impl</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-workspace-xml</artifactId> + <version>${pom.version}</version> + </dependency> +<!-- + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-java2wsdl</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-wsdl2java</artifactId> + <version>${pom.version}</version> + </dependency> +--> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-sca-api</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>org.apache.tuscany.sdo</groupId> + <artifactId>tuscany-sdo-impl</artifactId> + <version>1.1.1</version> + <exclusions> + <exclusion> + <groupId>org.codehaus.woodstox</groupId> + <artifactId>wstx-asl</artifactId> + </exclusion> + </exclusions> + </dependency> + <dependency> + <groupId>org.apache.tuscany.sdo</groupId> + <artifactId>tuscany-sdo-tools</artifactId> + <version>1.1.1</version> + </dependency> + + <dependency> + <groupId>com.sun.xml.bind</groupId> + <artifactId>jaxb-impl</artifactId> + <version>2.1.6</version> + <exclusions> + <exclusion> + <groupId>javax.xml.stream</groupId> + <artifactId>stax-api</artifactId> + </exclusion> + </exclusions> + </dependency> + <dependency> + <groupId>commons-lang</groupId> + <artifactId>commons-lang</artifactId> + <version>2.1</version> + </dependency> + <dependency> + <groupId>commons-cli</groupId> + <artifactId>commons-cli</artifactId> + <version>1.0</version> + <exclusions> + <exclusion> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + </exclusion> + </exclusions> + </dependency> + <dependency> + <groupId>org.easymock</groupId> + <artifactId>easymock</artifactId> + <version>2.2</version> + </dependency> + </dependencies> + + + <build> + + <plugins> + + <plugin> + <artifactId>maven-dependency-plugin</artifactId> + <configuration> + <cpFile>${project.build.directory}/classes/org/apache/tuscany/sca/installer/.classpath</cpFile> + <includeScope>runtime</includeScope> + </configuration> + <executions> + <execution> + <id>build-classpath</id> + <phase>compile</phase> + <goals> + <goal>build-classpath</goal> + </goals> + </execution> + </executions> + </plugin> + + + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-jar-plugin</artifactId> + <configuration> + <finalName>tuscany-sca-osgi-installer</finalName> + <archive> + <manifest> + <addClasspath>true</addClasspath> + </manifest> + <manifestEntries> + + <Bundle-Version>2.0</Bundle-Version> + <Bundle-SymbolicName>org.apache.tuscany.sca.installer</Bundle-SymbolicName> + <Bundle-Description>${pom.name}</Bundle-Description> + <Import-Package>org.osgi.framework</Import-Package> + <Export-Package>org.apache.tuscany.sca.installer</Export-Package> + <Bundle-Activator>org.apache.tuscany.sca.installer.InstallerBundleActivator</Bundle-Activator> +kage> + </manifestEntries> + </archive> + </configuration> + </plugin> + + </plugins> + </build> + +</project> diff --git a/branches/sca-android/itest/osgi-tuscany/tuscany-osgi-installer/src/main/java/org/apache/tuscany/sca/installer/InstallerBundleActivator.java b/branches/sca-android/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/branches/sca-android/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<Bundle> tuscanyBundles = new ArrayList<Bundle>(); + + 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<String> installedBundleSet = new HashSet<String>(); + 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<File> tuscanyJars = new HashSet<File>(); + HashSet<File> thirdPartyJars = new HashSet<File>(); + + + 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<File> jarSet = new HashSet<File>(); + 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<File> tuscanyJars, + HashSet<File> 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<String> 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<File> 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<String> getPackagesInJar(String bundleName, JarInputStream jar) throws Exception { + HashSet<String> packages = new HashSet<String>(); + 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<String> 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/branches/sca-android/itest/osgi-tuscany/tuscany-versioned/pom.xml b/branches/sca-android/itest/osgi-tuscany/tuscany-versioned/pom.xml new file mode 100644 index 0000000000..88c5fae221 --- /dev/null +++ b/branches/sca-android/itest/osgi-tuscany/tuscany-versioned/pom.xml @@ -0,0 +1,644 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. +--> +<project> + <modelVersion>4.0.0</modelVersion> + <parent> + <groupId>org.apache.tuscany.sca</groupId> + <artifactId>tuscany-itest</artifactId> + <version>1.4-SNAPSHOT</version> + <relativePath>../../pom.xml</relativePath> + </parent> + <artifactId>itest-osgi-tuscany-versioned</artifactId> + <name>Apache Tuscany OSGi - Versioned Tuscany Bundles</name> + + <properties> + <maven.test.skip>true</maven.test.skip> + <tuscany.version>${pom.version}</tuscany.version> + + </properties> + <dependencies> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-monitor-logging</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-assembly</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-assembly-xml</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-assembly-xsd</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-binding-dwr</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-binding-ejb-runtime</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-binding-atom</artifactId> + <version>${pom.version}</version> + </dependency> +<!-- + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-binding-atom-abdera</artifactId> + <version>${pom.version}</version> + </dependency> +--> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-binding-feed</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-binding-rss</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-binding-rss-rome</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-binding-http-runtime</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-binding-jms-runtime</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>org.apache.activemq</groupId> + <artifactId>apache-activemq</artifactId> + <version>4.1.1</version> + <exclusions> + <exclusion> + <groupId>commons-httpclient</groupId> + <artifactId>commons-httpclient</artifactId> + </exclusion> + <exclusion> + <groupId>commons-fileupload</groupId> + <artifactId>commons-fileupload</artifactId> + </exclusion> + <exclusion> + <groupId>commons-beanutils</groupId> + <artifactId>commons-beanutils</artifactId> + </exclusion> + <exclusion> + <groupId>org.apache.activemq</groupId> + <artifactId>activemq-console</artifactId> + </exclusion> + <exclusion> + <groupId>org.apache.activemq</groupId> + <artifactId>activemq-core</artifactId> + </exclusion> + <exclusion> + <groupId>org.apache.activemq</groupId> + <artifactId>activemq-optional</artifactId> + </exclusion> + <exclusion> + <groupId>org.apache.activemq</groupId> + <artifactId>activemq-web</artifactId> + </exclusion> + <exclusion> + <groupId>org.apache.activemq</groupId> + <artifactId>activemq-web-demo</artifactId> + </exclusion> + <exclusion> + <groupId>org.apache.activemq</groupId> + <artifactId>activemq-jaas</artifactId> + </exclusion> + <exclusion> + <groupId>org.apache.geronimo.specs</groupId> + <artifactId>geronimo-j2ee-connector_1.5_spec</artifactId> + </exclusion> + <exclusion> + <groupId>org.apache.geronimo.specs</groupId> + <artifactId>geronimo-j2ee-jacc_1.0_spec</artifactId> + </exclusion> + <exclusion> + <groupId>org.apache.geronimo.specs</groupId> + <artifactId>geronimo-jms_1.1_spec</artifactId> + </exclusion> + <exclusion> + <groupId>org.apache.geronimo.specs</groupId> + <artifactId>geronimo-jsp_2.0_spec</artifactId> + </exclusion> + <exclusion> + <groupId>org.apache.geronimo.specs</groupId> + <artifactId>geronimo-j2ee-management_1.0_spec</artifactId> + </exclusion> + <exclusion> + <groupId>org.mortbay.jetty</groupId> + <artifactId>servlet-api-2.5</artifactId> + </exclusion> + <exclusion> + <groupId>org.mortbay.jetty</groupId> + <artifactId>jetty</artifactId> + </exclusion> + <exclusion> + <groupId>org.mortbay.jetty</groupId> + <artifactId>jetty-util</artifactId> + </exclusion> + <exclusion> + <groupId>xerces</groupId> + <artifactId>xercesImpl</artifactId> + </exclusion> + <exclusion> + <groupId>backport-util-concurrent</groupId> + <artifactId>backport-util-concurrent</artifactId> + </exclusion> + <exclusion> + <groupId>activesoap</groupId> + <artifactId>jaxp-api</artifactId> + </exclusion> + <exclusion> + <groupId>activemq</groupId> + <artifactId>jmdns</artifactId> + </exclusion> + <exclusion> + <groupId>jrms</groupId> + <artifactId>jrms</artifactId> + </exclusion> + <exclusion> + <groupId>xerces</groupId> + <artifactId>xmlParserAPIs</artifactId> + </exclusion> + <exclusion> + <groupId>xstream</groupId> + <artifactId>xstream</artifactId> + </exclusion> + <exclusion> + <groupId>xmlpull</groupId> + <artifactId>xmlpull</artifactId> + </exclusion> + <exclusion> + <groupId>mx4j</groupId> + <artifactId>mx4j</artifactId> + </exclusion> + <exclusion> + <groupId>mx4j</groupId> + <artifactId>mx4j-remote</artifactId> + </exclusion> + </exclusions> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-binding-jsonrpc-runtime</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-binding-notification</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-binding-rmi</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-binding-sca</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-binding-sca-axis2</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-binding-sca-xml</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-binding-ws</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-binding-ws-axis2</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-binding-ws-xml</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-contribution</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-contribution-groovy</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-contribution-impl</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-contribution-java</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-contribution-namespace</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-core</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-core-databinding</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-core-spi</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-databinding</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-databinding-axiom</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-databinding-fastinfoset</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-databinding-jaxb</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-databinding-sdo</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-databinding-sdo-axiom</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-databinding-xmlbeans</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-databinding-xstream</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-host-embedded</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-host-http</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-host-rmi</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-host-webapp</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-host-jetty</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-interface</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-interface-java</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-interface-java-xml</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-interface-wsdl</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-interface-wsdl-xml</artifactId> + <version>${pom.version}</version> + </dependency> +<!-- + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-implementation-bpel</artifactId> + <version>${pom.version}</version> + <exclusions> + <exclusion> + <groupId>ant</groupId> + <artifactId>ant</artifactId> + </exclusion> + </exclusions> + </dependency> +--> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-implementation-das</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-implementation-ejb</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-implementation-ejb</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-implementation-java</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-implementation-java-xml</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-implementation-java-runtime</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-implementation-node</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-implementation-node-runtime</artifactId> + <version>${pom.version}</version> + <exclusions> + <exclusion> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-host-tomcat</artifactId> + </exclusion> + </exclusions> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-implementation-osgi</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-implementation-resource-runtime</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-implementation-script</artifactId> + <version>${pom.version}</version> + <exclusions> + <exclusion> + <groupId>groovy</groupId> + <artifactId>groovy-all-minimal</artifactId> + </exclusion> + </exclusions> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-implementation-spring</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-implementation-xquery</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-implementation-widget-runtime</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-node-api</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-node-impl</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-node-launcher</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-policy</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-policy-logging</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-policy-security</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-policy-xml</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-definitions</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-workspace</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-domain-manager</artifactId> + <version>${pom.version}</version> + <exclusions> + <exclusion> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-host-tomcat</artifactId> + </exclusion> + </exclusions> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-workspace-impl</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-workspace-xml</artifactId> + <version>${pom.version}</version> + </dependency> +<!-- + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-java2wsdl</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-wsdl2java</artifactId> + <version>${pom.version}</version> + </dependency> +--> + <dependency> + <groupId>${pom.groupId}</groupId> + <artifactId>tuscany-sca-api</artifactId> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>org.apache.tuscany.sdo</groupId> + <artifactId>tuscany-sdo-impl</artifactId> + <version>1.1-incubating</version> + <exclusions> + <exclusion> + <groupId>org.codehaus.woodstox</groupId> + <artifactId>wstx-asl</artifactId> + </exclusion> + </exclusions> + </dependency> + <dependency> + <groupId>org.apache.tuscany.sdo</groupId> + <artifactId>tuscany-sdo-tools</artifactId> + <version>1.1-incubating</version> + </dependency> + + <dependency> + <groupId>com.sun.xml.bind</groupId> + <artifactId>jaxb-impl</artifactId> + <version>2.1.6</version> + <exclusions> + <exclusion> + <groupId>javax.xml.stream</groupId> + <artifactId>stax-api</artifactId> + </exclusion> + </exclusions> + </dependency> + <dependency> + <groupId>commons-lang</groupId> + <artifactId>commons-lang</artifactId> + <version>2.1</version> + </dependency> + <dependency> + <groupId>commons-cli</groupId> + <artifactId>commons-cli</artifactId> + <version>1.0</version> + <exclusions> + <exclusion> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + </exclusion> + </exclusions> + </dependency> + <dependency> + <groupId>org.easymock</groupId> + <artifactId>easymock</artifactId> + <version>2.2</version> + </dependency> + </dependencies> + + + <build> + <plugins> + <plugin> + <groupId>org.apache.tuscany.sca</groupId> + <artifactId>tuscany-maven-bundle-plugin</artifactId> + <version>1.4-SNAPSHOT</version> + <extensions>true</extensions> + <executions> + <execution> + <goals> + <goal>execute</goal> + </goals> + </execution> + </executions> + </plugin> + + + </plugins> + </build> + +</project> |