From b099739d69690535623b126b37f47bfdfecf040f Mon Sep 17 00:00:00 2001 From: rfeng Date: Wed, 20 May 2009 16:46:55 +0000 Subject: Refactoring a few methods on the ServiceDiscover Adding an OSGi service registry based ExtensionPointRegistry implementation git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@776759 13f79535-47bb-0310-9956-ffa450edef68 --- .../DefaultCompositeBuilderExtensionPoint.java | 20 ++--- ...DefaultStAXArtifactProcessorExtensionPoint.java | 4 +- ...efaultStAXAttributeProcessorExtensionPoint.java | 4 +- .../DefaultURLArtifactProcessorExtensionPoint.java | 3 +- .../DefaultValidationSchemaExtensionPoint.java | 4 +- .../processor/ExtendedArtifactProcessor.java | 1 - .../DefaultModelResolverExtensionPoint.java | 4 +- .../DefaultContributionScannerExtensionPoint.java | 4 +- .../DefaultContextFactoryExtensionPoint.java | 2 +- .../DefaultDefinitionsProviderExtensionPoint.java | 4 +- .../DefaultProviderFactoryExtensionPoint.java | 4 +- ...efaultContextFactoryExtensionPointTestCase.java | 1 - .../sca/core/invocation/impl/PhaseManager.java | 3 +- .../DefaultDataBindingExtensionPoint.java | 4 +- .../DefaultTransformerExtensionPoint.java | 4 +- .../javabeans/DOMNode2JavaBeanTransformer.java | 1 + .../sca/databinding/impl/DataBindingTestCase.java | 3 +- .../xml/DefaultDefinitionsExtensionPoint.java | 4 +- .../extensibility-equinox/META-INF/MANIFEST.MF | 4 +- .../equinox/EquinoxServiceDiscoverer.java | 13 +++- .../equinox/OSGiExtensionPointRegistry.java | 86 ++++++++++++++++++++++ .../equinox/EquinoxServiceDiscovererTestCase.java | 8 +- .../sca/core/DefaultExtensionPointRegistry.java | 52 ++++++++----- .../sca/core/DefaultFactoryExtensionPoint.java | 2 +- .../core/DefaultModuleActivatorExtensionPoint.java | 25 ++++--- .../sca/core/DefaultUtilityExtensionPoint.java | 2 +- .../ContextClassLoaderServiceDiscoverer.java | 22 +++--- .../sca/extensibility/ServiceDiscoverer.java | 6 +- .../sca/extensibility/ServiceDiscovery.java | 45 +++++++---- ...ontextClassLoaderServiceDiscovererTestCase.java | 20 ++--- .../java/DefaultJavaInterfaceFactory.java | 4 +- .../sca/interfacedef/java/JavaInterface.java | 1 + .../interfacedef/java/impl/JavaInterfaceImpl.java | 1 + .../org/apache/tuscany/sca/node/NodeFactory.java | 15 ++-- .../modules/node-impl-osgi/META-INF/MANIFEST.MF | 1 + java/sca/modules/node-impl-osgi/pom.xml | 1 - .../sca/node/osgi/impl/OSGiNodeFactoryImpl.java | 6 ++ .../tuscany/sca/node/impl/NodeFactoryImpl.java | 14 ++-- .../DefaultContributionBuilderExtensionPoint.java | 4 +- 39 files changed, 271 insertions(+), 135 deletions(-) create mode 100644 java/sca/modules/extensibility-equinox/src/main/java/org/apache/tuscany/sca/extensibility/equinox/OSGiExtensionPointRegistry.java (limited to 'java/sca/modules') diff --git a/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/DefaultCompositeBuilderExtensionPoint.java b/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/DefaultCompositeBuilderExtensionPoint.java index d9b9763475..80b95189ec 100644 --- a/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/DefaultCompositeBuilderExtensionPoint.java +++ b/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/DefaultCompositeBuilderExtensionPoint.java @@ -6,23 +6,23 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations - * under the License. + * under the License. */ package org.apache.tuscany.sca.assembly.builder; import java.lang.reflect.Constructor; +import java.util.Collection; import java.util.HashMap; import java.util.Map; -import java.util.Set; import org.apache.tuscany.sca.assembly.Composite; import org.apache.tuscany.sca.core.ExtensionPointRegistry; @@ -68,14 +68,14 @@ public class DefaultCompositeBuilderExtensionPoint implements CompositeBuilderEx private synchronized void loadBuilders() { if (loaded) return; - + FactoryExtensionPoint factories = registry.getExtensionPoint(FactoryExtensionPoint.class); - + UtilityExtensionPoint utils = registry.getExtensionPoint(UtilityExtensionPoint.class); InterfaceContractMapper mapper = utils.getUtility(InterfaceContractMapper.class); - + // Get the provider factory service declarations - Set builderDeclarations; + Collection builderDeclarations; ServiceDiscovery serviceDiscovery = ServiceDiscovery.getInstance(); try { builderDeclarations = serviceDiscovery.getServiceDeclarations(CompositeBuilder.class.getName()); @@ -113,11 +113,11 @@ public class DefaultCompositeBuilderExtensionPoint implements CompositeBuilderEx this.factories = factories; this.mapper = mapper; } - + public String getID() { return id; } - + public void build(Composite composite, Definitions definitions, Monitor monitor) throws CompositeBuilderException { getBuilder().build(composite, definitions, monitor); } diff --git a/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/DefaultStAXArtifactProcessorExtensionPoint.java b/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/DefaultStAXArtifactProcessorExtensionPoint.java index d1443f1162..0d2c7714ee 100644 --- a/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/DefaultStAXArtifactProcessorExtensionPoint.java +++ b/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/DefaultStAXArtifactProcessorExtensionPoint.java @@ -20,8 +20,8 @@ package org.apache.tuscany.sca.contribution.processor; import java.io.IOException; import java.lang.reflect.Constructor; +import java.util.Collection; import java.util.Map; -import java.util.Set; import javax.xml.namespace.QName; import javax.xml.stream.XMLInputFactory; @@ -162,7 +162,7 @@ public class DefaultStAXArtifactProcessorExtensionPoint extends return; // Get the processor service declarations - Set processorDeclarations; + Collection processorDeclarations; try { processorDeclarations = ServiceDiscovery.getInstance().getServiceDeclarations(StAXArtifactProcessor.class.getName()); diff --git a/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/DefaultStAXAttributeProcessorExtensionPoint.java b/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/DefaultStAXAttributeProcessorExtensionPoint.java index 789752fd17..314f8ebf07 100644 --- a/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/DefaultStAXAttributeProcessorExtensionPoint.java +++ b/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/DefaultStAXAttributeProcessorExtensionPoint.java @@ -20,8 +20,8 @@ package org.apache.tuscany.sca.contribution.processor; import java.io.IOException; import java.lang.reflect.Constructor; +import java.util.Collection; import java.util.Map; -import java.util.Set; import javax.xml.namespace.QName; import javax.xml.stream.XMLInputFactory; @@ -156,7 +156,7 @@ public class DefaultStAXAttributeProcessorExtensionPoint extends return; // Get the processor service declarations - Set processorDeclarations; + Collection processorDeclarations; try { processorDeclarations = ServiceDiscovery.getInstance().getServiceDeclarations(StAXAttributeProcessor.class.getName()); diff --git a/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/DefaultURLArtifactProcessorExtensionPoint.java b/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/DefaultURLArtifactProcessorExtensionPoint.java index fc04d7494b..3c7c2f1430 100644 --- a/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/DefaultURLArtifactProcessorExtensionPoint.java +++ b/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/DefaultURLArtifactProcessorExtensionPoint.java @@ -27,7 +27,6 @@ import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Map; -import java.util.Set; import java.util.regex.Pattern; import javax.xml.stream.XMLInputFactory; @@ -227,7 +226,7 @@ public class DefaultURLArtifactProcessorExtensionPoint extends return; // Get the processor service declarations - Set processorDeclarations; + Collection processorDeclarations; try { processorDeclarations = ServiceDiscovery.getInstance().getServiceDeclarations(URLArtifactProcessor.class.getName()); diff --git a/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/DefaultValidationSchemaExtensionPoint.java b/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/DefaultValidationSchemaExtensionPoint.java index d278aae06a..920afbef5a 100644 --- a/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/DefaultValidationSchemaExtensionPoint.java +++ b/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/DefaultValidationSchemaExtensionPoint.java @@ -23,9 +23,9 @@ import java.io.FileNotFoundException; import java.io.IOException; import java.net.URL; import java.util.ArrayList; +import java.util.Collection; import java.util.Collections; import java.util.List; -import java.util.Set; import org.apache.tuscany.sca.extensibility.ServiceDeclaration; import org.apache.tuscany.sca.extensibility.ServiceDiscovery; @@ -57,7 +57,7 @@ public class DefaultValidationSchemaExtensionPoint implements ValidationSchemaEx return; // Get the schema declarations - Set schemaDeclarations; + Collection schemaDeclarations; try { schemaDeclarations = ServiceDiscovery.getInstance() diff --git a/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/ExtendedArtifactProcessor.java b/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/ExtendedArtifactProcessor.java index ba8844b41a..98d3fcca88 100644 --- a/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/ExtendedArtifactProcessor.java +++ b/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/ExtendedArtifactProcessor.java @@ -18,7 +18,6 @@ */ package org.apache.tuscany.sca.contribution.processor; -import org.apache.tuscany.sca.contribution.processor.ContributionResolveException; import org.apache.tuscany.sca.contribution.resolver.ModelResolver; /** diff --git a/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/resolver/DefaultModelResolverExtensionPoint.java b/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/resolver/DefaultModelResolverExtensionPoint.java index 33e252830a..7cbf8d5528 100644 --- a/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/resolver/DefaultModelResolverExtensionPoint.java +++ b/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/resolver/DefaultModelResolverExtensionPoint.java @@ -19,9 +19,9 @@ package org.apache.tuscany.sca.contribution.resolver; import java.io.IOException; +import java.util.Collection; import java.util.HashMap; import java.util.Map; -import java.util.Set; import org.apache.tuscany.sca.extensibility.ServiceDeclaration; import org.apache.tuscany.sca.extensibility.ServiceDiscovery; @@ -95,7 +95,7 @@ public class DefaultModelResolverExtensionPoint implements ModelResolverExtensio loadedResolvers = new HashMap(); // Get the model resolver service declarations - Set modelResolverDeclarations; + Collection modelResolverDeclarations; try { modelResolverDeclarations = ServiceDiscovery.getInstance().getServiceDeclarations(ModelResolver.class.getName()); } catch (IOException e) { diff --git a/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/scanner/DefaultContributionScannerExtensionPoint.java b/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/scanner/DefaultContributionScannerExtensionPoint.java index 163f887bbc..2a288e1708 100644 --- a/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/scanner/DefaultContributionScannerExtensionPoint.java +++ b/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/scanner/DefaultContributionScannerExtensionPoint.java @@ -22,10 +22,10 @@ package org.apache.tuscany.sca.contribution.scanner; import java.io.IOException; import java.lang.reflect.Constructor; import java.net.URL; +import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.Set; import org.apache.tuscany.sca.contribution.processor.ContributionReadException; import org.apache.tuscany.sca.extensibility.ServiceDeclaration; @@ -62,7 +62,7 @@ public class DefaultContributionScannerExtensionPoint implements ContributionSca return; // Get the scanner service declarations - Set scannerDeclarations; + Collection scannerDeclarations; try { scannerDeclarations = ServiceDiscovery.getInstance().getServiceDeclarations(ContributionScanner.class.getName()); } catch (IOException e) { diff --git a/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/context/DefaultContextFactoryExtensionPoint.java b/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/context/DefaultContextFactoryExtensionPoint.java index 7a35036f03..3c4be9cd55 100644 --- a/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/context/DefaultContextFactoryExtensionPoint.java +++ b/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/context/DefaultContextFactoryExtensionPoint.java @@ -94,7 +94,7 @@ public class DefaultContextFactoryExtensionPoint implements ContextFactoryExtens // Dynamically load a factory class declared under META-INF/services try { - ServiceDeclaration factoryDeclaration = ServiceDiscovery.getInstance().getFirstServiceDeclaration(factoryInterface.getName()); + ServiceDeclaration factoryDeclaration = ServiceDiscovery.getInstance().getServiceDeclaration(factoryInterface.getName()); if (factoryDeclaration != null) { Class factoryClass = factoryDeclaration.loadClass(); diff --git a/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/provider/DefaultDefinitionsProviderExtensionPoint.java b/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/provider/DefaultDefinitionsProviderExtensionPoint.java index fc1c2ed5af..b68a485e55 100644 --- a/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/provider/DefaultDefinitionsProviderExtensionPoint.java +++ b/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/provider/DefaultDefinitionsProviderExtensionPoint.java @@ -21,8 +21,8 @@ package org.apache.tuscany.sca.provider; import java.lang.reflect.Constructor; import java.util.ArrayList; +import java.util.Collection; import java.util.List; -import java.util.Set; import org.apache.tuscany.sca.core.ExtensionPointRegistry; import org.apache.tuscany.sca.extensibility.ServiceDeclaration; @@ -63,7 +63,7 @@ public class DefaultDefinitionsProviderExtensionPoint implements return; } // Get the provider service declarations - Set defnProviderDecls; + Collection defnProviderDecls; DefinitionsProvider aProvider = null; Class providerClass = null; Constructor constructor = null; diff --git a/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/provider/DefaultProviderFactoryExtensionPoint.java b/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/provider/DefaultProviderFactoryExtensionPoint.java index 518927939f..84e000ab10 100644 --- a/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/provider/DefaultProviderFactoryExtensionPoint.java +++ b/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/provider/DefaultProviderFactoryExtensionPoint.java @@ -21,10 +21,10 @@ package org.apache.tuscany.sca.provider; import java.lang.reflect.Constructor; import java.util.ArrayList; +import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.Set; import org.apache.tuscany.sca.assembly.Binding; import org.apache.tuscany.sca.assembly.Implementation; @@ -128,7 +128,7 @@ public class DefaultProviderFactoryExtensionPoint implements ProviderFactoryExte private List loadProviderFactories(Class factoryClass) { // Get the provider factory service declarations - Set factoryDeclarations; + Collection factoryDeclarations; ServiceDiscovery serviceDiscovery = ServiceDiscovery.getInstance(); try { factoryDeclarations = serviceDiscovery.getServiceDeclarations(factoryClass.getName()); diff --git a/java/sca/modules/core-spi/src/test/java/org/apache/tuscany/sca/context/DefaultContextFactoryExtensionPointTestCase.java b/java/sca/modules/core-spi/src/test/java/org/apache/tuscany/sca/context/DefaultContextFactoryExtensionPointTestCase.java index 3a27569a3b..6486a5ed4f 100644 --- a/java/sca/modules/core-spi/src/test/java/org/apache/tuscany/sca/context/DefaultContextFactoryExtensionPointTestCase.java +++ b/java/sca/modules/core-spi/src/test/java/org/apache/tuscany/sca/context/DefaultContextFactoryExtensionPointTestCase.java @@ -20,7 +20,6 @@ package org.apache.tuscany.sca.context; import org.apache.tuscany.sca.core.DefaultExtensionPointRegistry; import org.apache.tuscany.sca.core.ExtensionPointRegistry; - import org.junit.Assert; import org.junit.Test; diff --git a/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/impl/PhaseManager.java b/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/impl/PhaseManager.java index 602958ab5e..c9024fecef 100644 --- a/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/impl/PhaseManager.java +++ b/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/impl/PhaseManager.java @@ -39,6 +39,7 @@ import static org.apache.tuscany.sca.invocation.Phase.SERVICE_POLICY; import java.io.IOException; import java.util.ArrayList; +import java.util.Collection; import java.util.HashMap; import java.util.HashSet; import java.util.List; @@ -173,7 +174,7 @@ public class PhaseManager { } init(); - Set services; + Collection services; try { services = ServiceDiscovery.getInstance().getServiceDeclarations(pattern); } catch (IOException e) { diff --git a/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DefaultDataBindingExtensionPoint.java b/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DefaultDataBindingExtensionPoint.java index 6ebfc29121..c8ad274316 100644 --- a/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DefaultDataBindingExtensionPoint.java +++ b/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DefaultDataBindingExtensionPoint.java @@ -21,10 +21,10 @@ package org.apache.tuscany.sca.databinding; import java.io.IOException; import java.lang.reflect.Constructor; import java.util.ArrayList; +import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.Set; import java.util.logging.Level; import java.util.logging.Logger; @@ -103,7 +103,7 @@ public class DefaultDataBindingExtensionPoint implements DataBindingExtensionPoi return; // Get the databinding service declarations - Set dataBindingDeclarations; + Collection dataBindingDeclarations; try { dataBindingDeclarations = ServiceDiscovery.getInstance().getServiceDeclarations(DataBinding.class.getName()); } catch (IOException e) { diff --git a/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DefaultTransformerExtensionPoint.java b/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DefaultTransformerExtensionPoint.java index 2583270b3d..fc8b89c5b9 100644 --- a/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DefaultTransformerExtensionPoint.java +++ b/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DefaultTransformerExtensionPoint.java @@ -21,9 +21,9 @@ package org.apache.tuscany.sca.databinding; import java.io.IOException; import java.lang.reflect.Constructor; import java.util.ArrayList; +import java.util.Collection; import java.util.List; import java.util.Map; -import java.util.Set; import java.util.logging.Level; import java.util.logging.Logger; @@ -112,7 +112,7 @@ public class DefaultTransformerExtensionPoint implements TransformerExtensionPoi private synchronized void loadTransformers(Class transformerClass) { // Get the transformer service declarations - Set transformerDeclarations; + Collection transformerDeclarations; try { transformerDeclarations = ServiceDiscovery.getInstance().getServiceDeclarations(transformerClass.getName()); diff --git a/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/DOMNode2JavaBeanTransformer.java b/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/DOMNode2JavaBeanTransformer.java index 2f95c2a9c6..f86d1b29e0 100644 --- a/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/DOMNode2JavaBeanTransformer.java +++ b/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/DOMNode2JavaBeanTransformer.java @@ -21,6 +21,7 @@ package org.apache.tuscany.sca.databinding.javabeans; import java.util.ArrayList; import java.util.Iterator; import java.util.List; + import javax.xml.namespace.QName; import org.w3c.dom.Document; diff --git a/java/sca/modules/databinding/src/test/java/org/apache/tuscany/sca/databinding/impl/DataBindingTestCase.java b/java/sca/modules/databinding/src/test/java/org/apache/tuscany/sca/databinding/impl/DataBindingTestCase.java index 9f5ead2ea5..c5d6dbbcc1 100644 --- a/java/sca/modules/databinding/src/test/java/org/apache/tuscany/sca/databinding/impl/DataBindingTestCase.java +++ b/java/sca/modules/databinding/src/test/java/org/apache/tuscany/sca/databinding/impl/DataBindingTestCase.java @@ -18,10 +18,11 @@ */ package org.apache.tuscany.sca.databinding.impl; +import static org.junit.Assert.assertEquals; + import java.lang.reflect.Method; import org.apache.tuscany.sca.databinding.annotation.DataBinding; -import static org.junit.Assert.assertEquals; /** * diff --git a/java/sca/modules/definitions-xml/src/main/java/org/apache/tuscany/sca/definitions/xml/DefaultDefinitionsExtensionPoint.java b/java/sca/modules/definitions-xml/src/main/java/org/apache/tuscany/sca/definitions/xml/DefaultDefinitionsExtensionPoint.java index 1fb9cf8fdc..aa244ba274 100644 --- a/java/sca/modules/definitions-xml/src/main/java/org/apache/tuscany/sca/definitions/xml/DefaultDefinitionsExtensionPoint.java +++ b/java/sca/modules/definitions-xml/src/main/java/org/apache/tuscany/sca/definitions/xml/DefaultDefinitionsExtensionPoint.java @@ -24,8 +24,8 @@ import java.io.IOException; import java.net.URI; import java.net.URL; import java.util.ArrayList; +import java.util.Collection; import java.util.List; -import java.util.Set; import java.util.logging.Level; import java.util.logging.Logger; @@ -72,7 +72,7 @@ public class DefaultDefinitionsExtensionPoint implements DefinitionsExtensionPoi return; // Get the definitions declarations - Set definitionsDeclarations; + Collection definitionsDeclarations; try { definitionsDeclarations = ServiceDiscovery.getInstance().getServiceDeclarations(DEFINITIONS_FILE); } catch (IOException e) { diff --git a/java/sca/modules/extensibility-equinox/META-INF/MANIFEST.MF b/java/sca/modules/extensibility-equinox/META-INF/MANIFEST.MF index 15d36e331c..06764168e6 100644 --- a/java/sca/modules/extensibility-equinox/META-INF/MANIFEST.MF +++ b/java/sca/modules/extensibility-equinox/META-INF/MANIFEST.MF @@ -16,9 +16,11 @@ Bundle-ManifestVersion: 2 Bundle-Description: Apache Tuscany SCA Extensibility for Eclipse Equin ox Bundle-License: http://www.apache.org/licenses/LICENSE-2.0.txt -Import-Package: org.apache.tuscany.sca.extensibility;version="2.0.0", +Import-Package: org.apache.tuscany.sca.core;version="2.0.0", + org.apache.tuscany.sca.extensibility;version="2.0.0", org.eclipse.core.runtime.adaptor;resolution:=optional, org.osgi.framework;version="1.4" Bundle-SymbolicName: org.apache.tuscany.sca.extensibility.equinox Bundle-DocURL: http://www.apache.org/ Bundle-RequiredExecutionEnvironment: J2SE-1.5,JavaSE-1.6 +Export-Package: org.apache.tuscany.sca.extensibility.equinox;version="2.0.0" 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 7e2d39f182..930b308dfc 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 @@ -28,6 +28,7 @@ import java.security.AccessController; import java.security.PrivilegedAction; import java.security.PrivilegedActionException; import java.security.PrivilegedExceptionAction; +import java.util.Collection; import java.util.Enumeration; import java.util.HashMap; import java.util.HashSet; @@ -117,6 +118,10 @@ public class EquinoxServiceDiscoverer implements ServiceDiscoverer { return sb.toString(); } + public Bundle getBundle() { + return bundle; + } + } /** @@ -186,8 +191,8 @@ public class EquinoxServiceDiscoverer implements ServiceDiscoverer { return attributes; } - public ServiceDeclaration getFirstServiceDeclaration(String name) throws IOException { - Set declarations = getServiceDeclarations(name); + public ServiceDeclaration getServiceDeclaration(String name) throws IOException { + Collection declarations = getServiceDeclarations(name); if (declarations.isEmpty()) { return null; } else { @@ -195,9 +200,9 @@ public class EquinoxServiceDiscoverer implements ServiceDiscoverer { } } - public Set getServiceDeclarations(String serviceName) throws IOException { + public Collection getServiceDeclarations(String serviceName) throws IOException { boolean debug = logger.isLoggable(Level.FINE); - Set descriptors = new HashSet(); + Collection descriptors = new HashSet(); // http://java.sun.com/j2se/1.5.0/docs/api/javax/xml/xpath/XPathFactory.html boolean isPropertyFile = "javax.xml.xpath.XPathFactory".equals(serviceName); diff --git a/java/sca/modules/extensibility-equinox/src/main/java/org/apache/tuscany/sca/extensibility/equinox/OSGiExtensionPointRegistry.java b/java/sca/modules/extensibility-equinox/src/main/java/org/apache/tuscany/sca/extensibility/equinox/OSGiExtensionPointRegistry.java new file mode 100644 index 0000000000..07bf4dc18e --- /dev/null +++ b/java/sca/modules/extensibility-equinox/src/main/java/org/apache/tuscany/sca/extensibility/equinox/OSGiExtensionPointRegistry.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.extensibility.equinox; + +import java.util.Dictionary; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +import org.apache.tuscany.sca.core.DefaultExtensionPointRegistry; +import org.apache.tuscany.sca.extensibility.ServiceDeclaration; +import org.osgi.framework.BundleContext; +import org.osgi.framework.ServiceReference; +import org.osgi.framework.ServiceRegistration; + +/** + * + */ +public class OSGiExtensionPointRegistry extends DefaultExtensionPointRegistry { + private Map, ServiceRegistration> services = new ConcurrentHashMap, ServiceRegistration>(); + private BundleContext bundleContext; + + public OSGiExtensionPointRegistry(BundleContext bundleContext) { + super(); + this.bundleContext = bundleContext; + } + + @Override + protected Object findExtensionPoint(Class extensionPointType) { + ServiceRegistration registration = services.get(extensionPointType); + if (registration != null) { + ServiceReference ref = registration.getReference(); + if (ref != null) { + return ref.getBundle().getBundleContext().getService(ref); + } + } + /* + else { + ServiceReference ref = bundleContext.getServiceReference(extensionPointType.getName()); + if (ref != null) { + return bundleContext.getService(ref); + } + } + */ + return null; + } + + @Override + protected void registerExtensionPoint(Class i, Object extensionPoint, ServiceDeclaration declaration) { + BundleContext context = bundleContext; + if (declaration instanceof EquinoxServiceDiscoverer.ServiceDeclarationImpl) { + EquinoxServiceDiscoverer.ServiceDeclarationImpl declarationImpl = + (EquinoxServiceDiscoverer.ServiceDeclarationImpl)declaration; + context = declarationImpl.getBundle().getBundleContext(); + } + Dictionary props = new java.util.Hashtable(); + ServiceRegistration registration = context.registerService(i.getName(), extensionPoint, props); + services.put(i, registration); + } + + @Override + protected void unregisterExtensionPoint(Class i) { + ServiceRegistration registration = services.get(i); + if (registration != null) { + registration.unregister(); + } + services.remove(i); + } + +} 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 642bad0b2b..8010ead253 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 @@ -26,8 +26,8 @@ import java.io.IOException; import java.io.InputStream; import java.lang.reflect.Method; import java.util.ArrayList; +import java.util.Collection; import java.util.List; -import java.util.Set; import java.util.jar.JarInputStream; import java.util.jar.Manifest; @@ -134,7 +134,7 @@ public class EquinoxServiceDiscovererTestCase { @Test public void testDiscovery() throws IOException { - Set descriptors = discoverer.getServiceDeclarations("test.TestService"); + Collection descriptors = discoverer.getServiceDeclarations("test.TestService"); Assert.assertEquals(1, descriptors.size()); descriptors = discoverer.getServiceDeclarations("notthere"); Assert.assertEquals(0, descriptors.size()); @@ -142,9 +142,9 @@ public class EquinoxServiceDiscovererTestCase { @Test public void testDiscoveryFirst() throws IOException { - ServiceDeclaration descriptor = discoverer.getFirstServiceDeclaration("test.TestService"); + ServiceDeclaration descriptor = discoverer.getServiceDeclaration("test.TestService"); Assert.assertNotNull(descriptor); - descriptor = discoverer.getFirstServiceDeclaration("notthere"); + descriptor = discoverer.getServiceDeclaration("notthere"); Assert.assertNull(descriptor); } diff --git a/java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/core/DefaultExtensionPointRegistry.java b/java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/core/DefaultExtensionPointRegistry.java index 12979723b1..3ed134dcec 100644 --- a/java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/core/DefaultExtensionPointRegistry.java +++ b/java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/core/DefaultExtensionPointRegistry.java @@ -6,15 +6,15 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations - * under the License. + * under the License. */ package org.apache.tuscany.sca.core; @@ -41,9 +41,9 @@ import org.apache.tuscany.sca.extensibility.ServiceDiscovery; */ public class DefaultExtensionPointRegistry implements ExtensionPointRegistry { private Map, Object> extensionPoints = new HashMap, Object>(); - + /** - * Constructs a new registry. + * Constructs a new registry. */ public DefaultExtensionPointRegistry() { } @@ -56,17 +56,25 @@ public class DefaultExtensionPointRegistry implements ExtensionPointRegistry { * * @throws IllegalArgumentException if extensionPoint is null */ - public void addExtensionPoint(Object extensionPoint) { + public synchronized void addExtensionPoint(Object extensionPoint) { + addExtensionPoint(extensionPoint, null); + } + + public synchronized void addExtensionPoint(Object extensionPoint, ServiceDeclaration declaration) { if (extensionPoint == null) { throw new IllegalArgumentException("Cannot register null as an ExtensionPoint"); } Set> interfaces = getAllInterfaces(extensionPoint.getClass()); for (Class i : interfaces) { - extensionPoints.put(i, extensionPoint); + registerExtensionPoint(i, extensionPoint, declaration); } } - + + protected void registerExtensionPoint(Class i, Object extensionPoint, ServiceDeclaration declaration) { + extensionPoints.put(i, extensionPoint); + } + private Constructor getConstructor(Constructor[] constructors, Class[] paramTypes) { for (Constructor c : constructors) { Class[] types = c.getParameterTypes(); @@ -94,20 +102,20 @@ public class DefaultExtensionPointRegistry implements ExtensionPointRegistry { * * @throws IllegalArgumentException if extensionPointType is null */ - public T getExtensionPoint(Class extensionPointType) { + public synchronized T getExtensionPoint(Class extensionPointType) { if (extensionPointType == null) { throw new IllegalArgumentException("Cannot lookup ExtensionPoint of type null"); } - Object extensionPoint = extensionPoints.get(extensionPointType); + Object extensionPoint = findExtensionPoint(extensionPointType); if (extensionPoint == null) { - - // Dynamically load an extension point class declared under META-INF/services + + // Dynamically load an extension point class declared under META-INF/services try { - ServiceDeclaration extensionPointDeclaration = ServiceDiscovery.getInstance().getFirstServiceDeclaration(extensionPointType.getName()); + ServiceDeclaration extensionPointDeclaration = ServiceDiscovery.getInstance().getServiceDeclaration(extensionPointType.getName()); if (extensionPointDeclaration != null) { Class extensionPointClass = extensionPointDeclaration.loadClass(); - + // Construct the extension point Constructor[] constructors = extensionPointClass.getConstructors(); Constructor constructor = getConstructor(constructors, new Class[] {ExtensionPointRegistry.class}); @@ -122,9 +130,9 @@ public class DefaultExtensionPointRegistry implements ExtensionPointRegistry { "No valid constructor is found for " + extensionPointClass); } } - + // Cache the loaded extension point - addExtensionPoint(extensionPoint); + addExtensionPoint(extensionPoint, extensionPointDeclaration); } } catch (InvocationTargetException e) { throw new IllegalArgumentException(e); @@ -141,6 +149,10 @@ public class DefaultExtensionPointRegistry implements ExtensionPointRegistry { return extensionPointType.cast(extensionPoint); } + protected Object findExtensionPoint(Class extensionPointType) { + return extensionPoints.get(extensionPointType); + } + /** * Remove an extension point based on the interface that it implements * @@ -148,17 +160,21 @@ public class DefaultExtensionPointRegistry implements ExtensionPointRegistry { * * @throws IllegalArgumentException if extensionPoint is null */ - public void removeExtensionPoint(Object extensionPoint) { + public synchronized void removeExtensionPoint(Object extensionPoint) { if (extensionPoint == null) { throw new IllegalArgumentException("Cannot remove null as an ExtensionPoint"); } Set> interfaces = getAllInterfaces(extensionPoint.getClass()); for (Class i : interfaces) { - extensionPoints.remove(i); + unregisterExtensionPoint(i); } } + protected void unregisterExtensionPoint(Class i) { + extensionPoints.remove(i); + } + /** * Returns the set of interfaces implemented by the given class and its * ancestors or a blank set if none diff --git a/java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/core/DefaultFactoryExtensionPoint.java b/java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/core/DefaultFactoryExtensionPoint.java index 80c4e2b69d..54d0d118bb 100644 --- a/java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/core/DefaultFactoryExtensionPoint.java +++ b/java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/core/DefaultFactoryExtensionPoint.java @@ -109,7 +109,7 @@ public class DefaultFactoryExtensionPoint implements FactoryExtensionPoint { // Dynamically load a factory class declared under META-INF/services try { ServiceDeclaration factoryDeclaration = - ServiceDiscovery.getInstance().getFirstServiceDeclaration(factoryInterface.getName()); + ServiceDiscovery.getInstance().getServiceDeclaration(factoryInterface.getName()); if (factoryDeclaration != null) { Class factoryClass = factoryDeclaration.loadClass(); try { diff --git a/java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/core/DefaultModuleActivatorExtensionPoint.java b/java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/core/DefaultModuleActivatorExtensionPoint.java index f5aced9b50..c19949d77f 100644 --- a/java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/core/DefaultModuleActivatorExtensionPoint.java +++ b/java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/core/DefaultModuleActivatorExtensionPoint.java @@ -6,23 +6,23 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations - * under the License. + * under the License. */ package org.apache.tuscany.sca.core; import java.io.IOException; import java.util.ArrayList; +import java.util.Collection; import java.util.List; -import java.util.Set; import org.apache.tuscany.sca.extensibility.ServiceDeclaration; import org.apache.tuscany.sca.extensibility.ServiceDiscovery; @@ -35,9 +35,9 @@ import org.apache.tuscany.sca.extensibility.ServiceDiscovery; public class DefaultModuleActivatorExtensionPoint implements ModuleActivatorExtensionPoint { private List activators = new ArrayList(); private boolean loadedActivators; - + /** - * Constructs a new extension point. + * Constructs a new extension point. */ public DefaultModuleActivatorExtensionPoint() { } @@ -45,12 +45,12 @@ public class DefaultModuleActivatorExtensionPoint implements ModuleActivatorExte public void addModuleActivator(ModuleActivator activator) { activators.add(activator); } - + public List getModuleActivators() { loadModuleActivators(); return activators; } - + public void removeModuleActivator(Object activator) { activators.remove(activator); } @@ -63,13 +63,14 @@ public class DefaultModuleActivatorExtensionPoint implements ModuleActivatorExte return; // Get the activator service declarations - Set activatorDeclarations; + Collection activatorDeclarations; try { - activatorDeclarations = ServiceDiscovery.getInstance().getServiceDeclarations(ModuleActivator.class.getName()); + // Load the module activators by ranking + activatorDeclarations = ServiceDiscovery.getInstance().getServiceDeclarations(ModuleActivator.class.getName(), true); } catch (IOException e) { throw new IllegalStateException(e); } - + // Load and instantiate module activators for (ServiceDeclaration activatorDeclaration: activatorDeclarations) { ModuleActivator activator; @@ -85,7 +86,7 @@ public class DefaultModuleActivatorExtensionPoint implements ModuleActivatorExte } addModuleActivator(activator); } - + loadedActivators = true; } diff --git a/java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/core/DefaultUtilityExtensionPoint.java b/java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/core/DefaultUtilityExtensionPoint.java index fd85c5afa0..e059a55ad0 100644 --- a/java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/core/DefaultUtilityExtensionPoint.java +++ b/java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/core/DefaultUtilityExtensionPoint.java @@ -153,7 +153,7 @@ public class DefaultUtilityExtensionPoint implements UtilityExtensionPoint { // Dynamically load a utility class declared under META-INF/services/"utilityType" try { - ServiceDeclaration utilityDeclaration =ServiceDiscovery.getInstance().getFirstServiceDeclaration(utilityType.getName()); + ServiceDeclaration utilityDeclaration =ServiceDiscovery.getInstance().getServiceDeclaration(utilityType.getName()); if (utilityDeclaration != null) { Class utilityClass = utilityDeclaration.loadClass(); diff --git a/java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ContextClassLoaderServiceDiscoverer.java b/java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ContextClassLoaderServiceDiscoverer.java index 41764f35b9..13f967c053 100644 --- a/java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ContextClassLoaderServiceDiscoverer.java +++ b/java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ContextClassLoaderServiceDiscoverer.java @@ -6,15 +6,15 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations - * under the License. + * under the License. */ package org.apache.tuscany.sca.extensibility; @@ -30,13 +30,13 @@ import java.security.AccessController; import java.security.PrivilegedAction; import java.security.PrivilegedActionException; import java.security.PrivilegedExceptionAction; +import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.List; 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; @@ -129,7 +129,7 @@ public class ContextClassLoaderServiceDiscoverer 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 */ @@ -161,8 +161,8 @@ public class ContextClassLoaderServiceDiscoverer implements ServiceDiscoverer { return attributes; } - public ServiceDeclaration getFirstServiceDeclaration(String name) throws IOException { - Set declarations = getServiceDeclarations(name); + public ServiceDeclaration getServiceDeclaration(String name) throws IOException { + Collection declarations = getServiceDeclarations(name); if (declarations.isEmpty()) { return null; } else { @@ -170,8 +170,8 @@ public class ContextClassLoaderServiceDiscoverer implements ServiceDiscoverer { } } - public Set getServiceDeclarations(String serviceName) { - Set descriptors = new HashSet(); + public Collection getServiceDeclarations(String serviceName) { + Collection descriptors = new HashSet(); // http://java.sun.com/j2se/1.5.0/docs/api/javax/xml/xpath/XPathFactory.html boolean isPropertyFile = "javax.xml.xpath.XPathFactory".equals(serviceName); @@ -192,9 +192,9 @@ public class ContextClassLoaderServiceDiscoverer implements ServiceDiscoverer { URLConnection connection = url.openConnection(); // TUSCANY-2539 // Don't cache connections by default to stop Tuscany locking contribution jar files - // done here as this is one of the first places we open a stream and the only way to + // done here as this is one of the first places we open a stream and the only way to // set the default is to set it on an instance of URLConnection - connection.setDefaultUseCaches(false); + connection.setDefaultUseCaches(false); connection.setUseCaches(false); return url.openStream(); } diff --git a/java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ServiceDiscoverer.java b/java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ServiceDiscoverer.java index 6adf083411..9b939e8228 100644 --- a/java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ServiceDiscoverer.java +++ b/java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ServiceDiscoverer.java @@ -20,7 +20,7 @@ package org.apache.tuscany.sca.extensibility; import java.io.IOException; -import java.util.Set; +import java.util.Collection; /** * A SPI that allows different implementations of discovering service declarations @@ -34,7 +34,7 @@ public interface ServiceDiscoverer { * @return set of service declarations * @throws IOException */ - public Set getServiceDeclarations(String name) throws IOException; + public Collection getServiceDeclarations(String name) throws IOException; /** * Get first service declaration class for the given interface @@ -44,6 +44,6 @@ public interface ServiceDiscoverer { * @throws IOException * @throws ClassNotFoundException */ - public ServiceDeclaration getFirstServiceDeclaration(String name) throws IOException; + public ServiceDeclaration getServiceDeclaration(String name) throws IOException; } diff --git a/java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ServiceDiscovery.java b/java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ServiceDiscovery.java index 131c2b5041..3857151bec 100644 --- a/java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ServiceDiscovery.java +++ b/java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ServiceDiscovery.java @@ -21,11 +21,10 @@ package org.apache.tuscany.sca.extensibility; import java.io.IOException; import java.util.ArrayList; +import java.util.Collection; import java.util.Collections; import java.util.Comparator; import java.util.List; -import java.util.Set; -import java.util.logging.Logger; /** * Service discovery for Tuscany based on J2SE Jar service provider spec. @@ -36,8 +35,6 @@ import java.util.logging.Logger; * @version $Rev$ $Date$ */ public final class ServiceDiscovery implements ServiceDiscoverer { - private static final Logger logger = Logger.getLogger(ServiceDiscovery.class.getName()); - private final static ServiceDiscovery INSTANCE = new ServiceDiscovery(); private ServiceDiscoverer discoverer; @@ -60,7 +57,7 @@ public final class ServiceDiscovery implements ServiceDiscoverer { return discoverer; } try { - //FIXME Remove that upside-down dependency + // FIXME: This is a hack to trigger the activation of the extensibility-equinox bundle in OSGi Class.forName("org.apache.tuscany.sca.extensibility.equinox.EquinoxServiceDiscoverer"); if (discoverer != null) { return discoverer; @@ -78,26 +75,46 @@ public final class ServiceDiscovery implements ServiceDiscoverer { discoverer = sd; } - public Set getServiceDeclarations(String name) throws IOException { - Set services = getServiceDiscoverer().getServiceDeclarations(name); - return services; + public Collection getServiceDeclarations(String name) throws IOException { + return getServiceDeclarations(name, false); + } + + public Collection getServiceDeclarations(String name, boolean byRanking) throws IOException { + Collection declarations = getServiceDiscoverer().getServiceDeclarations(name); + if (!byRanking) { + return declarations; + } + if (!declarations.isEmpty()) { + List declarationList = new ArrayList(declarations); + Collections.sort(declarationList, ServiceComparator.DESCENDING_ORDER); + return declarationList; + } else { + return Collections.emptyList(); + } } - public ServiceDeclaration getFirstServiceDeclaration(final String name) throws IOException { + /** + * Get the service declaration. If there are more than one services, the one with highest ranking will + * be returned. + */ + public ServiceDeclaration getServiceDeclaration(final String name) throws IOException { // ServiceDeclaration service = getServiceDiscoverer().getFirstServiceDeclaration(name); // return service; - Set declarations = getServiceDeclarations(name); + Collection declarations = getServiceDeclarations(name); if (!declarations.isEmpty()) { List declarationList = new ArrayList(declarations); - Collections.sort(declarationList, ServiceComparator.INSTANCE); - return declarationList.get(declarationList.size() - 1); + Collections.sort(declarationList, ServiceComparator.DESCENDING_ORDER); + return declarationList.get(0); } else { return null; } } + /** + * Compare service declarations by ranking + */ private static class ServiceComparator implements Comparator { - private final static ServiceComparator INSTANCE = new ServiceComparator(); + private final static Comparator DESCENDING_ORDER = new ServiceComparator(); public int compare(ServiceDeclaration o1, ServiceDeclaration o2) { int rank1 = 0; @@ -110,7 +127,7 @@ public final class ServiceDiscovery implements ServiceDiscoverer { if (r2 != null) { rank2 = Integer.parseInt(r2); } - return rank1 - rank2; + return rank2 - rank1; // descending } } diff --git a/java/sca/modules/extensibility/src/test/java/org/apache/tuscany/sca/extensibility/ContextClassLoaderServiceDiscovererTestCase.java b/java/sca/modules/extensibility/src/test/java/org/apache/tuscany/sca/extensibility/ContextClassLoaderServiceDiscovererTestCase.java index cfab64bef7..c0aac21596 100644 --- a/java/sca/modules/extensibility/src/test/java/org/apache/tuscany/sca/extensibility/ContextClassLoaderServiceDiscovererTestCase.java +++ b/java/sca/modules/extensibility/src/test/java/org/apache/tuscany/sca/extensibility/ContextClassLoaderServiceDiscovererTestCase.java @@ -6,21 +6,21 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations - * under the License. + * under the License. */ package org.apache.tuscany.sca.extensibility; import java.io.IOException; -import java.util.Set; +import java.util.Collection; import org.junit.AfterClass; import org.junit.Assert; @@ -43,26 +43,26 @@ public class ContextClassLoaderServiceDiscovererTestCase { @Test public void testDiscovery() { - Set discriptors = + Collection discriptors = discover.getServiceDeclarations("org.apache.tuscany.sca.core.ModuleActivatorExtensionPoint"); Assert.assertEquals(1, discriptors.size()); discriptors = discover.getServiceDeclarations("notthere"); Assert.assertEquals(0, discriptors.size()); } - + @Test public void testDiscoveryFirst() throws IOException { ServiceDeclaration descriptor = - discover.getFirstServiceDeclaration("org.apache.tuscany.sca.core.ModuleActivatorExtensionPoint"); + discover.getServiceDeclaration("org.apache.tuscany.sca.core.ModuleActivatorExtensionPoint"); Assert.assertNotNull(descriptor); - descriptor = discover.getFirstServiceDeclaration("notthere"); + descriptor = discover.getServiceDeclaration("notthere"); Assert.assertNull(descriptor); } - + @Test public void testXPathFactory() { - Set discriptors = discover.getServiceDeclarations("javax.xml.xpath.XPathFactory"); + Collection discriptors = discover.getServiceDeclarations("javax.xml.xpath.XPathFactory"); if (!discriptors.isEmpty()) { ServiceDeclaration d = discriptors.iterator().next(); Assert.assertNotNull(d.getClassName()); diff --git a/java/sca/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/DefaultJavaInterfaceFactory.java b/java/sca/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/DefaultJavaInterfaceFactory.java index 97513fefd9..41cf08d771 100644 --- a/java/sca/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/DefaultJavaInterfaceFactory.java +++ b/java/sca/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/DefaultJavaInterfaceFactory.java @@ -19,8 +19,8 @@ package org.apache.tuscany.sca.interfacedef.java; import java.io.IOException; +import java.util.Collection; import java.util.List; -import java.util.Set; import org.apache.tuscany.sca.core.FactoryExtensionPoint; import org.apache.tuscany.sca.extensibility.ServiceDeclaration; @@ -68,7 +68,7 @@ public class DefaultJavaInterfaceFactory extends JavaInterfaceFactoryImpl implem } // Get the databinding service declarations - Set visitorDeclarations; + Collection visitorDeclarations; try { visitorDeclarations = ServiceDiscovery.getInstance().getServiceDeclarations(JavaInterfaceVisitor.class.getName()); } catch (IOException e) { diff --git a/java/sca/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/JavaInterface.java b/java/sca/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/JavaInterface.java index 9c09ef50c2..0a2edb02c7 100644 --- a/java/sca/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/JavaInterface.java +++ b/java/sca/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/JavaInterface.java @@ -19,6 +19,7 @@ package org.apache.tuscany.sca.interfacedef.java; import javax.xml.namespace.QName; + import org.apache.tuscany.sca.assembly.Base; import org.apache.tuscany.sca.interfacedef.Interface; diff --git a/java/sca/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/impl/JavaInterfaceImpl.java b/java/sca/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/impl/JavaInterfaceImpl.java index 42e45317b7..294127910f 100644 --- a/java/sca/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/impl/JavaInterfaceImpl.java +++ b/java/sca/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/impl/JavaInterfaceImpl.java @@ -19,6 +19,7 @@ package org.apache.tuscany.sca.interfacedef.java.impl; import javax.xml.namespace.QName; + import org.apache.tuscany.sca.interfacedef.impl.InterfaceImpl; import org.apache.tuscany.sca.interfacedef.java.JavaInterface; diff --git a/java/sca/modules/node-api/src/main/java/org/apache/tuscany/sca/node/NodeFactory.java b/java/sca/modules/node-api/src/main/java/org/apache/tuscany/sca/node/NodeFactory.java index c9d4efe451..a4b3c6e84d 100644 --- a/java/sca/modules/node-api/src/main/java/org/apache/tuscany/sca/node/NodeFactory.java +++ b/java/sca/modules/node-api/src/main/java/org/apache/tuscany/sca/node/NodeFactory.java @@ -160,8 +160,6 @@ public abstract class NodeFactory extends DefaultNodeConfigurationFactory { return nodeFactory; } - NodeFactory scaNodeFactory = null; - try { // final ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); // Use reflection APIs to call ServiceDiscovery to avoid hard dependency to tuscany-extensibility @@ -169,14 +167,13 @@ public abstract class NodeFactory extends DefaultNodeConfigurationFactory { Class discoveryClass = Class.forName("org.apache.tuscany.sca.extensibility.ServiceDiscovery"); Object instance = discoveryClass.getMethod("getInstance").invoke(null); Object factoryDeclaration = - discoveryClass.getMethod("getFirstServiceDeclaration", String.class).invoke(instance, - NodeFactory.class - .getName()); + discoveryClass.getMethod("getServiceDeclaration", String.class).invoke(instance, + NodeFactory.class.getName()); if (factoryDeclaration != null) { Class factoryImplClass = (Class)factoryDeclaration.getClass().getMethod("loadClass").invoke(factoryDeclaration); - scaNodeFactory = (NodeFactory)factoryImplClass.newInstance(); - return scaNodeFactory; + nodeFactory = (NodeFactory)factoryImplClass.newInstance(); + return nodeFactory; } } catch (ClassNotFoundException e) { // Ignore @@ -186,8 +183,8 @@ public abstract class NodeFactory extends DefaultNodeConfigurationFactory { String className = "org.apache.tuscany.sca.node.impl.NodeFactoryImpl"; Class cls = Class.forName(className); - scaNodeFactory = (NodeFactory)cls.newInstance(); - return scaNodeFactory; + nodeFactory = (NodeFactory)cls.newInstance(); + return nodeFactory; } catch (Exception e) { throw new ServiceRuntimeException(e); diff --git a/java/sca/modules/node-impl-osgi/META-INF/MANIFEST.MF b/java/sca/modules/node-impl-osgi/META-INF/MANIFEST.MF index e055ec9afe..9ef9fb5a07 100644 --- a/java/sca/modules/node-impl-osgi/META-INF/MANIFEST.MF +++ b/java/sca/modules/node-impl-osgi/META-INF/MANIFEST.MF @@ -21,6 +21,7 @@ Import-Package: javax.xml.namespace, org.apache.tuscany.sca.definitions;version="2.0.0", org.apache.tuscany.sca.definitions.util;version="2.0.0", org.apache.tuscany.sca.definitions.xml;version="2.0.0", + org.apache.tuscany.sca.extensibility.equinox;version="2.0.0", org.apache.tuscany.sca.implementation.node;version="2.0.0", org.apache.tuscany.sca.monitor;version="2.0.0", org.apache.tuscany.sca.node;version="2.0.0", diff --git a/java/sca/modules/node-impl-osgi/pom.xml b/java/sca/modules/node-impl-osgi/pom.xml index 5e84c4c2bd..1987a833e1 100644 --- a/java/sca/modules/node-impl-osgi/pom.xml +++ b/java/sca/modules/node-impl-osgi/pom.xml @@ -74,7 +74,6 @@ org.apache.tuscany.sca tuscany-extensibility-equinox 2.0-SNAPSHOT - runtime diff --git a/java/sca/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/node/osgi/impl/OSGiNodeFactoryImpl.java b/java/sca/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/node/osgi/impl/OSGiNodeFactoryImpl.java index 1a4befb3e3..4dfa7ace90 100644 --- a/java/sca/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/node/osgi/impl/OSGiNodeFactoryImpl.java +++ b/java/sca/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/node/osgi/impl/OSGiNodeFactoryImpl.java @@ -25,6 +25,7 @@ import java.util.Dictionary; import java.util.Hashtable; import org.apache.tuscany.sca.core.ExtensionPointRegistry; +import org.apache.tuscany.sca.extensibility.equinox.OSGiExtensionPointRegistry; import org.apache.tuscany.sca.node.configuration.NodeConfiguration; import org.apache.tuscany.sca.node.configuration.NodeConfigurationFactory; import org.apache.tuscany.sca.node.impl.NodeFactoryImpl; @@ -104,4 +105,9 @@ public class OSGiNodeFactoryImpl extends NodeFactoryImpl { return configuration.getExtensions().get(0); } + @Override + protected ExtensionPointRegistry createExtensionPointRegistry() { + return new OSGiExtensionPointRegistry(bundleContext); + } + } diff --git a/java/sca/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/NodeFactoryImpl.java b/java/sca/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/NodeFactoryImpl.java index 51a1a6579c..6bca9fc9e7 100644 --- a/java/sca/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/NodeFactoryImpl.java +++ b/java/sca/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/NodeFactoryImpl.java @@ -149,7 +149,7 @@ public class NodeFactoryImpl extends NodeFactory { * @throws Exception */ private T getFactory(Class factory) throws Exception { - ServiceDeclaration sd = ServiceDiscovery.getInstance().getFirstServiceDeclaration(factory.getName()); + ServiceDeclaration sd = ServiceDiscovery.getInstance().getServiceDeclaration(factory.getName()); if (sd != null) { return factory.cast(sd.loadClass().newInstance()); } else { @@ -188,9 +188,9 @@ public class NodeFactoryImpl extends NodeFactory { node.destroy(); } nodes.clear(); - // Stop the runtime modules - for (ModuleActivator moduleActivator : moduleActivators) { - moduleActivator.stop(extensionPoints); + // Stop the runtime modules in the reverse order + for (int i = moduleActivators.size() - 1; i >= 0; i--) { + moduleActivators.get(i).stop(extensionPoints); } // Stop and destroy the work manager @@ -356,7 +356,7 @@ public class NodeFactoryImpl extends NodeFactory { long start = currentTimeMillis(); // Create extension point registry - extensionPoints = new DefaultExtensionPointRegistry(); + extensionPoints = createExtensionPointRegistry(); // Enable schema validation only of the logger level is FINE or higher ValidationSchemaExtensionPoint schemas = @@ -471,6 +471,10 @@ public class NodeFactoryImpl extends NodeFactory { } } + protected ExtensionPointRegistry createExtensionPointRegistry() { + return new DefaultExtensionPointRegistry(); + } + Composite configureNode(NodeConfiguration configuration) throws Exception { List contributions = new ArrayList(); diff --git a/java/sca/modules/workspace/src/main/java/org/apache/tuscany/sca/workspace/builder/DefaultContributionBuilderExtensionPoint.java b/java/sca/modules/workspace/src/main/java/org/apache/tuscany/sca/workspace/builder/DefaultContributionBuilderExtensionPoint.java index 8ce6f53f20..c94601be67 100644 --- a/java/sca/modules/workspace/src/main/java/org/apache/tuscany/sca/workspace/builder/DefaultContributionBuilderExtensionPoint.java +++ b/java/sca/modules/workspace/src/main/java/org/apache/tuscany/sca/workspace/builder/DefaultContributionBuilderExtensionPoint.java @@ -20,9 +20,9 @@ package org.apache.tuscany.sca.workspace.builder; import java.lang.reflect.Constructor; +import java.util.Collection; import java.util.HashMap; import java.util.Map; -import java.util.Set; import org.apache.tuscany.sca.contribution.Contribution; import org.apache.tuscany.sca.core.ExtensionPointRegistry; @@ -70,7 +70,7 @@ public class DefaultContributionBuilderExtensionPoint implements ContributionBui FactoryExtensionPoint factories = registry.getExtensionPoint(FactoryExtensionPoint.class); // Get the provider factory service declarations - Set builderDeclarations; + Collection builderDeclarations; ServiceDiscovery serviceDiscovery = ServiceDiscovery.getInstance(); try { builderDeclarations = serviceDiscovery.getServiceDeclarations(ContributionBuilder.class.getName()); -- cgit v1.2.3