You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by rf...@apache.org on 2010/02/13 02:19:33 UTC

svn commit: r909678 - in /tuscany/sca-java-2.x/trunk/modules: assembly-xml/src/test/java/org/apache/tuscany/sca/assembly/xml/ contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/ core-spi/src/main/java/org/apache/tuscany/sca/runtim...

Author: rfeng
Date: Sat Feb 13 01:19:32 2010
New Revision: 909678

URL: http://svn.apache.org/viewvc?rev=909678&view=rev
Log:
Start to make extension points/extensions configurable from NodeFactory/ServiceDiscovery

Modified:
    tuscany/sca-java-2.x/trunk/modules/assembly-xml/src/test/java/org/apache/tuscany/sca/assembly/xml/ReadDocumentTestCase.java
    tuscany/sca-java-2.x/trunk/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/DefaultValidationSchemaExtensionPoint.java
    tuscany/sca-java-2.x/trunk/modules/core-spi/src/main/java/org/apache/tuscany/sca/runtime/DefaultDomainRegistryFactoryExtensionPoint.java
    tuscany/sca-java-2.x/trunk/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ServiceDiscovery.java
    tuscany/sca-java-2.x/trunk/modules/extensibility/src/test/java/org/apache/tuscany/sca/extensibility/ServiceDiscoveryTestCase.java
    tuscany/sca-java-2.x/trunk/modules/node-api/src/main/java/org/apache/tuscany/sca/node/NodeFactory.java
    tuscany/sca-java-2.x/trunk/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/NodeFactoryImpl.java
    tuscany/sca-java-2.x/trunk/modules/node-impl/src/test/java/org/apache/tuscany/sca/node/impl/NodeImplTestCase.java

Modified: tuscany/sca-java-2.x/trunk/modules/assembly-xml/src/test/java/org/apache/tuscany/sca/assembly/xml/ReadDocumentTestCase.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/assembly-xml/src/test/java/org/apache/tuscany/sca/assembly/xml/ReadDocumentTestCase.java?rev=909678&r1=909677&r2=909678&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/assembly-xml/src/test/java/org/apache/tuscany/sca/assembly/xml/ReadDocumentTestCase.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/assembly-xml/src/test/java/org/apache/tuscany/sca/assembly/xml/ReadDocumentTestCase.java Sat Feb 13 01:19:32 2010
@@ -24,6 +24,7 @@
 
 import java.net.URI;
 import java.net.URL;
+import java.util.HashMap;
 
 import javax.xml.XMLConstants;
 import javax.xml.parsers.SAXParserFactory;
@@ -128,7 +129,7 @@
     @Test
     public void testReadImplementation() throws Exception {
         ExtensionPointRegistry registry = new DefaultExtensionPointRegistry();
-        ValidationSchemaExtensionPoint schemas = new DefaultValidationSchemaExtensionPoint(registry);
+        ValidationSchemaExtensionPoint schemas = new DefaultValidationSchemaExtensionPoint(registry, new HashMap<String, String>());
         schemas.addSchema(getClass().getClassLoader().getResource(TUSCANY_11_XSD).toString());
         XMLInputFactory validatingInputFactory = new DefaultValidatingXMLInputFactory(inputFactory, schemas);
         DefaultFactoryExtensionPoint factories = new DefaultFactoryExtensionPoint(registry);
@@ -157,7 +158,7 @@
     public void testReadBinding() throws Exception {
 
         ExtensionPointRegistry registry = new DefaultExtensionPointRegistry();
-        ValidationSchemaExtensionPoint schemas = new DefaultValidationSchemaExtensionPoint(registry);
+        ValidationSchemaExtensionPoint schemas = new DefaultValidationSchemaExtensionPoint(registry, new HashMap<String, String>());
         schemas.addSchema(getClass().getClassLoader().getResource(TUSCANY_11_XSD).toString());
         XMLInputFactory validatingInputFactory = new DefaultValidatingXMLInputFactory(inputFactory, schemas);
         DefaultFactoryExtensionPoint factories = new DefaultFactoryExtensionPoint(registry);

Modified: tuscany/sca-java-2.x/trunk/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/DefaultValidationSchemaExtensionPoint.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/DefaultValidationSchemaExtensionPoint.java?rev=909678&r1=909677&r2=909678&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/DefaultValidationSchemaExtensionPoint.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/DefaultValidationSchemaExtensionPoint.java Sat Feb 13 01:19:32 2010
@@ -26,6 +26,7 @@
 import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
+import java.util.Map;
 
 import org.apache.tuscany.sca.core.ExtensionPointRegistry;
 import org.apache.tuscany.sca.extensibility.ServiceDeclaration;
@@ -41,9 +42,15 @@
     private boolean loaded;
     private ExtensionPointRegistry registry;
     
-    public DefaultValidationSchemaExtensionPoint(ExtensionPointRegistry registry) {
+    public DefaultValidationSchemaExtensionPoint(ExtensionPointRegistry registry, Map<String, String> attributes) {
         super();
         this.registry = registry;
+        if (attributes != null) {
+            String attr = attributes.get("enabled");
+            if (attr != null) {
+                enabled = Boolean.parseBoolean(attr);
+            }
+        }
     }
     
     public void addSchema(String uri) {

Modified: tuscany/sca-java-2.x/trunk/modules/core-spi/src/main/java/org/apache/tuscany/sca/runtime/DefaultDomainRegistryFactoryExtensionPoint.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/core-spi/src/main/java/org/apache/tuscany/sca/runtime/DefaultDomainRegistryFactoryExtensionPoint.java?rev=909678&r1=909677&r2=909678&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/core-spi/src/main/java/org/apache/tuscany/sca/runtime/DefaultDomainRegistryFactoryExtensionPoint.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/core-spi/src/main/java/org/apache/tuscany/sca/runtime/DefaultDomainRegistryFactoryExtensionPoint.java Sat Feb 13 01:19:32 2010
@@ -44,9 +44,13 @@
     /**
      * @param registry
      */
-    public DefaultDomainRegistryFactoryExtensionPoint(ExtensionPointRegistry registry) {
+    public DefaultDomainRegistryFactoryExtensionPoint(ExtensionPointRegistry registry, Map<String, String> attributes) {
         super();
         this.registry = registry;
+        // Populate the domainRegistryMapping
+        domainRegistryMapping.putAll(attributes);
+        domainRegistryMapping.remove("class");
+        domainRegistryMapping.remove("ranking");
     }
 
     public void addDomainRegistryFactory(DomainRegistryFactory factory) {

Modified: tuscany/sca-java-2.x/trunk/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ServiceDiscovery.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ServiceDiscovery.java?rev=909678&r1=909677&r2=909678&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ServiceDiscovery.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ServiceDiscovery.java Sat Feb 13 01:19:32 2010
@@ -24,12 +24,13 @@
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Comparator;
+import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
-import org.apache.tuscany.sca.extensibility.impl.ClassLoaderDelegate;
 import org.apache.tuscany.sca.extensibility.impl.LDAPFilter;
 
 /**
@@ -44,6 +45,7 @@
     private final static Logger logger = Logger.getLogger(ServiceDiscovery.class.getName());
     private final static ServiceDiscovery INSTANCE = new ServiceDiscovery();
 
+    private final Map<String, Map<String, String>> serviceAttributes = new HashMap<String, Map<String, String>>();
     private ServiceDiscoverer discoverer;
 
     private ServiceDiscovery() {
@@ -98,6 +100,15 @@
 
     public Collection<ServiceDeclaration> getServiceDeclarations(String name, boolean byRanking) throws IOException {
         Collection<ServiceDeclaration> declarations = getServiceDiscoverer().getServiceDeclarations(name);
+        // Check if any of the service declarations has attributes that are overrided
+        if (!serviceAttributes.isEmpty()) {
+            for (ServiceDeclaration declaration : declarations) {
+                Map<String, String> attrs = getAttributes(name);
+                if (attrs != null) {
+                    declaration.getAttributes().putAll(attrs);
+                }
+            }
+        }
         if (!byRanking) {
             return declarations;
         }
@@ -237,5 +248,37 @@
     public ClassLoader getContextClassLoader() {
         return discoverer.getContextClassLoader();
     }
+    
+    /**
+     * Set the attributes for a given service type
+     * @param serviceType
+     * @param attributes
+     */
+    public void setAttribute(String serviceType, Map<String, String> attributes) {
+        serviceAttributes.put(serviceType, attributes);
+    }
+
+    /**
+     * Set an attribute to the given value for a service type
+     * @param serviceType The service type
+     * @param attribute The attribute name
+     * @param value The attribute value
+     */
+    public void setAttribute(String serviceType, String attribute, String value) {
+        Map<String, String> attributes = serviceAttributes.get(serviceType);
+        if (attributes == null) {
+            attributes = new HashMap<String, String>();
+            serviceAttributes.put(serviceType, attributes);
+        }
+        attributes.put(attribute, value);
+    }
 
+    /**
+     * Return a map of attributes for a given service type
+     * @param serviceType
+     * @return
+     */
+    public Map<String, String> getAttributes(String serviceType) {
+        return serviceAttributes.get(serviceType);
+    }
 }

Modified: tuscany/sca-java-2.x/trunk/modules/extensibility/src/test/java/org/apache/tuscany/sca/extensibility/ServiceDiscoveryTestCase.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/extensibility/src/test/java/org/apache/tuscany/sca/extensibility/ServiceDiscoveryTestCase.java?rev=909678&r1=909677&r2=909678&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/extensibility/src/test/java/org/apache/tuscany/sca/extensibility/ServiceDiscoveryTestCase.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/extensibility/src/test/java/org/apache/tuscany/sca/extensibility/ServiceDiscoveryTestCase.java Sat Feb 13 01:19:32 2010
@@ -65,6 +65,20 @@
         Assert.assertEquals("org.apache.tuscany.sca.extensibility.test.Test2Impl", sd1.getClassName());
         Assert.assertEquals("org.apache.tuscany.sca.extensibility.test.TestImpl", sd2.getClassName());
     }
+    
+    @Test
+    /**
+     * Test if the external attributes override the one in the META-INF/services/<SPI>
+     */
+    public void testAttributes() throws Exception {
+        ServiceDiscovery serviceDiscovery = ServiceDiscovery.getInstance(new ContextClassLoaderServiceDiscoverer());
+        serviceDiscovery.setAttribute(TestInterface.class.getName(), "attr", "value");
+        serviceDiscovery.setAttribute(TestInterface.class.getName(), "attr1", "value1");
+        for (ServiceDeclaration sd : serviceDiscovery.getServiceDeclarations(TestInterface.class)) {
+            Assert.assertEquals("value1", sd.getAttributes().get("attr1"));
+            Assert.assertEquals("value", sd.getAttributes().get("attr"));
+        }
+    }
 
     @Test
     public void testFilter() throws Exception {

Modified: tuscany/sca-java-2.x/trunk/modules/node-api/src/main/java/org/apache/tuscany/sca/node/NodeFactory.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/node-api/src/main/java/org/apache/tuscany/sca/node/NodeFactory.java?rev=909678&r1=909677&r2=909678&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/node-api/src/main/java/org/apache/tuscany/sca/node/NodeFactory.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/node-api/src/main/java/org/apache/tuscany/sca/node/NodeFactory.java Sat Feb 13 01:19:32 2010
@@ -32,6 +32,7 @@
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
+import java.util.Map;
 
 import org.apache.tuscany.sca.node.configuration.DefaultNodeConfigurationFactory;
 import org.apache.tuscany.sca.node.configuration.NodeConfiguration;
@@ -57,9 +58,10 @@
     private static final String SCA_CONTRIBUTION_GENERATED_META = "META-INF/sca-contribution-generated.xml";
 
     protected static NodeFactory instance;
+    protected static Class<?> factoryImplClass;
 
     protected static void setNodeFactory(NodeFactory factory) {
-        NodeFactory.instance = factory;
+        instance = factory;
     }
 
     public static class NodeProxy implements Node {
@@ -151,11 +153,11 @@
      *
      * @return the SCA node factory
      */
-    public static NodeFactory getInstance() {
-        if (NodeFactory.instance == null) {
-            NodeFactory.instance = newInstance();
+    public synchronized static NodeFactory getInstance() {
+        if (instance == null) {
+            instance = newInstance();
         }
-        return NodeFactory.instance;
+        return instance;
     }
 
     /**
@@ -166,34 +168,58 @@
     public static NodeFactory newInstance() {
         NodeFactory nodeFactory = null;
         try {
+            Class<?> factoryClass = getFactoryImplClass();
+            nodeFactory = (NodeFactory)factoryClass.newInstance();
+
+        } catch (Exception e) {
+            throw new ServiceRuntimeException(e);
+        }
+        return nodeFactory;
+    }
+
+    public static NodeFactory newInstance(Map<String, Map<String, String>> attributes) {
+        NodeFactory nodeFactory = null;
+        try {
+            Class<?> factoryClass = getFactoryImplClass();
+            nodeFactory = (NodeFactory)factoryClass.newInstance();
+            nodeFactory.configure(attributes);
+        } catch (Exception e) {
+            throw new ServiceRuntimeException(e);
+        }
+        return nodeFactory;
+    }
+
+    /**
+     * Configure the NodeFactory instance
+     * @param attributes
+     */
+    protected void configure(Map<String, Map<String, String>> attributes) {
+    }
+    
+    private synchronized static Class<?> getFactoryImplClass() throws Exception {
+        if (factoryImplClass == null) {
             // Use reflection APIs to call ServiceDiscovery to avoid hard dependency to tuscany-extensibility
             try {
                 Class<?> discoveryClass = Class.forName("org.apache.tuscany.sca.extensibility.ServiceDiscovery");
                 Object instance = discoveryClass.getMethod("getInstance").invoke(null);
                 Object factoryDeclaration =
-                    discoveryClass.getMethod("getServiceDeclaration", Class.class).invoke(instance,
-                                                                                          NodeFactory.class);
+                    discoveryClass.getMethod("getServiceDeclaration", Class.class).invoke(instance, NodeFactory.class);
                 if (factoryDeclaration != null) {
-                    Class<?> factoryImplClass =
+                    factoryImplClass =
                         (Class<?>)factoryDeclaration.getClass().getMethod("loadClass").invoke(factoryDeclaration);
-                    nodeFactory = (NodeFactory)factoryImplClass.newInstance();
                 }
             } catch (ClassNotFoundException e) {
                 // Ignore
             }
 
-            if (nodeFactory == null) {
+            if (factoryImplClass == null) {
                 // Fail back to default impl
                 String className = "org.apache.tuscany.sca.node.impl.NodeFactoryImpl";
 
-                Class<?> cls = Class.forName(className);
-                nodeFactory = (NodeFactory)cls.newInstance();
+                factoryImplClass = Class.forName(className);
             }
-
-        } catch (Exception e) {
-            throw new ServiceRuntimeException(e);
         }
-        return nodeFactory;
+        return factoryImplClass;
     }
 
     /**

Modified: tuscany/sca-java-2.x/trunk/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/NodeFactoryImpl.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/NodeFactoryImpl.java?rev=909678&r1=909677&r2=909678&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/NodeFactoryImpl.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/NodeFactoryImpl.java Sat Feb 13 01:19:32 2010
@@ -67,6 +67,7 @@
 import org.apache.tuscany.sca.core.invocation.ProxyFactory;
 import org.apache.tuscany.sca.core.invocation.ProxyFactoryExtensionPoint;
 import org.apache.tuscany.sca.deployment.Deployer;
+import org.apache.tuscany.sca.extensibility.ServiceDiscovery;
 import org.apache.tuscany.sca.monitor.Monitor;
 import org.apache.tuscany.sca.monitor.MonitorFactory;
 import org.apache.tuscany.sca.monitor.Problem;
@@ -210,6 +211,11 @@
     }
 
     public ExtensionPointRegistry getExtensionPoints() {
+        if (registry == null) {
+            // Create extension point registry
+            registry = createExtensionPointRegistry();
+            registry.start();
+        }        
         return registry;
     }
 
@@ -219,11 +225,7 @@
         }
         long start = currentTimeMillis();
 
-        if (registry == null) {
-            // Create extension point registry
-            registry = createExtensionPointRegistry();
-            registry.start();
-        }
+        getExtensionPoints();
         
         // Use the runtime-enabled assembly factory
         FactoryExtensionPoint modelFactories = registry.getExtensionPoint(FactoryExtensionPoint.class);
@@ -461,5 +463,14 @@
             return buf.toString();
         }
     }
+
+    @Override
+    protected void configure(Map<String, Map<String, String>> attributes) {
+        ServiceDiscovery discovery = getExtensionPoints().getServiceDiscovery();
+        for (Map.Entry<String, Map<String, String>> e : attributes.entrySet()) {
+            discovery.setAttribute(e.getKey(), e.getValue());
+        }
+        super.configure(attributes);
+    }
     
 }

Modified: tuscany/sca-java-2.x/trunk/modules/node-impl/src/test/java/org/apache/tuscany/sca/node/impl/NodeImplTestCase.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/node-impl/src/test/java/org/apache/tuscany/sca/node/impl/NodeImplTestCase.java?rev=909678&r1=909677&r2=909678&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/node-impl/src/test/java/org/apache/tuscany/sca/node/impl/NodeImplTestCase.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/node-impl/src/test/java/org/apache/tuscany/sca/node/impl/NodeImplTestCase.java Sat Feb 13 01:19:32 2010
@@ -25,12 +25,16 @@
 import java.io.StringReader;
 import java.net.MalformedURLException;
 import java.net.URI;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 import org.apache.tuscany.sca.assembly.Endpoint;
+import org.apache.tuscany.sca.contribution.processor.ValidationSchemaExtensionPoint;
 import org.apache.tuscany.sca.node.Contribution;
 import org.apache.tuscany.sca.node.Node;
 import org.apache.tuscany.sca.node.NodeFactory;
+import org.apache.tuscany.sca.runtime.DomainRegistryFactoryExtensionPoint;
 import org.junit.Assert;
 import org.junit.Test;
 
@@ -115,4 +119,26 @@
         Assert.assertEquals("Hello, Node", hw.hello("Node"));
         node.stop();
     }
+    
+    @Test
+    public void testNodeFactoryAttributes() {
+        Map<String, Map<String, String>> attrs = new HashMap<String, Map<String, String>>();
+        Map<String, String> map = new HashMap<String, String>();
+        map.put("enabled", "false");
+        attrs.put(ValidationSchemaExtensionPoint.class.getName(), map);
+
+        Map<String, String> map2 = new HashMap<String, String>();
+        map2.put("urn:MyDomain", "multicast://200.0.0.100:50000/MyDomain");
+        attrs.put(DomainRegistryFactoryExtensionPoint.class.getName(), map2);
+
+        NodeFactoryImpl factory = (NodeFactoryImpl)NodeFactory.newInstance(attrs);
+        Assert.assertFalse(factory.getExtensionPoints().getExtensionPoint(ValidationSchemaExtensionPoint.class)
+            .isEnabled());
+
+        DomainRegistryFactoryExtensionPoint domainRegistryFactoryExtensionPoint =
+            factory.getExtensionPoints().getExtensionPoint(DomainRegistryFactoryExtensionPoint.class);
+        Map<String, String> mapping = domainRegistryFactoryExtensionPoint.getDomainRegistryMapping();
+        Assert.assertEquals(1, mapping.size());
+        Assert.assertEquals("multicast://200.0.0.100:50000/MyDomain", mapping.get("urn:MyDomain"));
+    }
 }