diff options
author | rfeng <rfeng@13f79535-47bb-0310-9956-ffa450edef68> | 2009-07-31 01:59:16 +0000 |
---|---|---|
committer | rfeng <rfeng@13f79535-47bb-0310-9956-ffa450edef68> | 2009-07-31 01:59:16 +0000 |
commit | 12b7cae9bf154e509f3769404f090ce15d1e3b77 (patch) | |
tree | 977637aa0761eab5fc3f4725157d430dc3c310d0 /java/sca/modules/extensibility-equinox | |
parent | 3ed44524c6e7fa0646329412ac04fa9bef3fd942 (diff) |
Enhance the service discovery by testing the types
Add more test cases
Improve the syntax parsing for service declarations
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@799486 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'java/sca/modules/extensibility-equinox')
3 files changed, 17 insertions, 41 deletions
diff --git a/java/sca/modules/extensibility-equinox/src/main/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscoverer.java b/java/sca/modules/extensibility-equinox/src/main/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscoverer.java index 930b308dfc..61bba30719 100644 --- a/java/sca/modules/extensibility-equinox/src/main/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscoverer.java +++ b/java/sca/modules/extensibility-equinox/src/main/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscoverer.java @@ -19,6 +19,8 @@ package org.apache.tuscany.sca.extensibility.equinox; +import static org.apache.tuscany.sca.extensibility.ServiceDeclarationParser.parseDeclaration; + import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; @@ -35,7 +37,6 @@ import java.util.HashSet; import java.util.Map; import java.util.Properties; import java.util.Set; -import java.util.StringTokenizer; import java.util.logging.Level; import java.util.logging.Logger; @@ -122,6 +123,15 @@ public class EquinoxServiceDiscoverer implements ServiceDiscoverer { return bundle; } + public boolean isAssignableTo(Class<?> serviceType) { + try { + loadClass(); + } catch (ClassNotFoundException e) { + // Ignore + } + return (javaClass != null && serviceType.isAssignableFrom(javaClass)); + } + } /** @@ -156,40 +166,6 @@ public class EquinoxServiceDiscoverer implements ServiceDiscoverer { } - /** - * Parse a service declaration in the form class;attr=value,attr=value and - * return a map of attributes - * - * @param declaration - * @return a map of attributes - */ - private static Map<String, String> parseServiceDeclaration(String declaration) { - Map<String, String> attributes = new HashMap<String, String>(); - int index = declaration.indexOf(';'); - if (index != -1) { - attributes.put("class", declaration.substring(0, index).trim()); - declaration = declaration.substring(index); - } else { - int j = declaration.indexOf('='); - if (j == -1) { - attributes.put("class", declaration.trim()); - return attributes; - } else { - declaration = ";" + declaration; - } - } - StringTokenizer tokens = new StringTokenizer(declaration); - for (; tokens.hasMoreTokens();) { - String key = tokens.nextToken("=").substring(1).trim(); - if (key == null) - break; - String value = tokens.nextToken(",").substring(1).trim(); - if (value == null) - break; - attributes.put(key, value); - } - return attributes; - } public ServiceDeclaration getServiceDeclaration(String name) throws IOException { Collection<ServiceDeclaration> declarations = getServiceDeclarations(name); @@ -285,7 +261,7 @@ public class EquinoxServiceDiscoverer implements ServiceDiscoverer { attributes.put(key, value); attributes.put("uri", key); } - attributes.put("class", value); + attributes.putAll(parseDeclaration(value)); ServiceDeclarationImpl descriptor = new ServiceDeclarationImpl(bundle, url, value, attributes); descriptors.add(descriptor); } @@ -306,7 +282,7 @@ public class EquinoxServiceDiscoverer implements ServiceDiscoverer { logger.fine("Registering service provider: " + reg); } - Map<String, String> attributes = parseServiceDeclaration(reg); + Map<String, String> attributes = parseDeclaration(reg); String className = attributes.get("class"); if (className == null) { // Add a unique class name to prevent equals() from returning true diff --git a/java/sca/modules/extensibility-equinox/src/main/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscoveryActivator.java b/java/sca/modules/extensibility-equinox/src/main/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscoveryActivator.java index d5d7b92022..a9a0d6d3f6 100644 --- a/java/sca/modules/extensibility-equinox/src/main/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscoveryActivator.java +++ b/java/sca/modules/extensibility-equinox/src/main/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscoveryActivator.java @@ -19,8 +19,6 @@ package org.apache.tuscany.sca.extensibility.equinox; -import java.util.logging.Logger; - import org.apache.tuscany.sca.extensibility.ServiceDiscovery; import org.osgi.framework.BundleActivator; import org.osgi.framework.BundleContext; @@ -31,12 +29,12 @@ import org.osgi.framework.BundleContext; * @version $Rev$ $Date$ */ public class EquinoxServiceDiscoveryActivator implements BundleActivator { - private static final Logger logger = Logger.getLogger(EquinoxServiceDiscoveryActivator.class.getName()); + // private static final Logger logger = Logger.getLogger(EquinoxServiceDiscoveryActivator.class.getName()); public void start(BundleContext context) throws Exception { EquinoxServiceDiscoverer discoverer = new EquinoxServiceDiscoverer(context); ServiceDiscovery.getInstance().setServiceDiscoverer(discoverer); - logger.info("Equinox-based service discoverer is now configured."); + // logger.info("Equinox-based service discoverer is now configured."); } public void stop(BundleContext context) throws Exception { diff --git a/java/sca/modules/extensibility-equinox/src/test/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscovererTestCase.java b/java/sca/modules/extensibility-equinox/src/test/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscovererTestCase.java index 2ed3cfd82c..deb4221f4f 100644 --- a/java/sca/modules/extensibility-equinox/src/test/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscovererTestCase.java +++ b/java/sca/modules/extensibility-equinox/src/test/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscovererTestCase.java @@ -108,6 +108,7 @@ public class EquinoxServiceDiscovererTestCase { for (Bundle b : bundles) { b.start(); System.out.println("Started "+b.getSymbolicName() + " [" + getState(b) + "]"); + /* // Get the Platform.getExtensionRegistry() if ("org.eclipse.core.runtime".equals(b.getSymbolicName())) { // The Platform class loaded by the bundle is different that the one @@ -117,6 +118,7 @@ public class EquinoxServiceDiscovererTestCase { Object reg = m.invoke(cls); System.out.println(reg); } + */ } } |