You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by an...@apache.org on 2008/04/21 13:16:10 UTC

svn commit: r650101 - in /incubator/tuscany/java/sca/modules: core-spi/src/main/java/org/apache/tuscany/sca/context/ core-spi/src/test/java/org/apache/tuscany/sca/context/ host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/

Author: antelder
Date: Mon Apr 21 04:16:02 2008
New Revision: 650101

URL: http://svn.apache.org/viewvc?rev=650101&view=rev
Log:
TUSCANY-2246: Apply patch from Greg Dritschler to Update DefaultContextFactoryExtensionPoint to use ServiceDiscovery

Modified:
    incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/context/DefaultContextFactoryExtensionPoint.java
    incubator/tuscany/java/sca/modules/core-spi/src/test/java/org/apache/tuscany/sca/context/DefaultContextFactoryExtensionPointTestCase.java
    incubator/tuscany/java/sca/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/ReallySmallRuntime.java

Modified: incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/context/DefaultContextFactoryExtensionPoint.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/context/DefaultContextFactoryExtensionPoint.java?rev=650101&r1=650100&r2=650101&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/context/DefaultContextFactoryExtensionPoint.java (original)
+++ incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/context/DefaultContextFactoryExtensionPoint.java Mon Apr 21 04:16:02 2008
@@ -19,8 +19,13 @@
 
 package org.apache.tuscany.sca.context;
 
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Method;
 import java.util.HashMap;
 
+import org.apache.tuscany.sca.core.ExtensionPointRegistry;
+import org.apache.tuscany.sca.extensibility.ServiceDiscovery;
+
 /**
  * Default implementation of a model factory extension point.
  *
@@ -33,6 +38,12 @@
      */
     private HashMap<Class<?>, Object> factories = new HashMap<Class<?>, Object>();
 
+    private ExtensionPointRegistry registry;
+
+    public DefaultContextFactoryExtensionPoint(ExtensionPointRegistry registry) {
+        this.registry = registry;
+    }
+
     /**
      * Add a model factory extension.
      *
@@ -79,6 +90,26 @@
         }
 
         Object factory = factories.get(factoryInterface);
+        if (factory == null) {
+
+            // Dynamically load a factory class declared under META-INF/services
+            try {
+                Class<?> factoryClass = ServiceDiscovery.getInstance().loadFirstServiceClass(factoryInterface);
+                if (factoryClass != null) {
+            
+                    // Default empty constructor
+                    Constructor<?> constructor = factoryClass.getConstructor(ExtensionPointRegistry.class);
+                    factory = constructor.newInstance(registry);
+            
+                    // Cache the loaded factory
+                    addFactory(factory);
+                }
+            } catch (Exception e) {
+                throw new IllegalArgumentException(e);
+            }
+
+        }
+
         return factoryInterface.cast(factory);
     }
 }

Modified: incubator/tuscany/java/sca/modules/core-spi/src/test/java/org/apache/tuscany/sca/context/DefaultContextFactoryExtensionPointTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core-spi/src/test/java/org/apache/tuscany/sca/context/DefaultContextFactoryExtensionPointTestCase.java?rev=650101&r1=650100&r2=650101&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/core-spi/src/test/java/org/apache/tuscany/sca/context/DefaultContextFactoryExtensionPointTestCase.java (original)
+++ incubator/tuscany/java/sca/modules/core-spi/src/test/java/org/apache/tuscany/sca/context/DefaultContextFactoryExtensionPointTestCase.java Mon Apr 21 04:16:02 2008
@@ -18,6 +18,9 @@
  */
 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;
 
@@ -68,8 +71,10 @@
         FactoryWithOneInterface factory1 = new FactoryWithOneInterface();
         FactoryWithTwoInterfaces factory2 = new FactoryWithTwoInterfaces();
 
+        ExtensionPointRegistry registry = new DefaultExtensionPointRegistry();
+
         // Register the factories
-        DefaultContextFactoryExtensionPoint ctxFactory = new DefaultContextFactoryExtensionPoint();
+        DefaultContextFactoryExtensionPoint ctxFactory = new DefaultContextFactoryExtensionPoint(registry);
         ctxFactory.addFactory(factory1);
         ctxFactory.addFactory(factory2);
 
@@ -90,7 +95,9 @@
      */
     @Test
     public void testAddingNullFactory() {
-        DefaultContextFactoryExtensionPoint ctxFactory = new DefaultContextFactoryExtensionPoint();
+
+        ExtensionPointRegistry registry = new DefaultExtensionPointRegistry();
+        DefaultContextFactoryExtensionPoint ctxFactory = new DefaultContextFactoryExtensionPoint(registry);
         try {
             ctxFactory.addFactory(null);
             Assert.fail("Should have thrown IllegalArgumentException");
@@ -104,7 +111,8 @@
      */
     @Test
     public void testRemovingNullFactory() {
-        DefaultContextFactoryExtensionPoint ctxFactory = new DefaultContextFactoryExtensionPoint();
+        ExtensionPointRegistry registry = new DefaultExtensionPointRegistry();
+        DefaultContextFactoryExtensionPoint ctxFactory = new DefaultContextFactoryExtensionPoint(registry);
         try {
             ctxFactory.removeFactory(null);
             Assert.fail("Should have thrown IllegalArgumentException");
@@ -118,7 +126,8 @@
      */
     @Test
     public void testGetNullFactory() {
-        DefaultContextFactoryExtensionPoint ctxFactory = new DefaultContextFactoryExtensionPoint();
+        ExtensionPointRegistry registry = new DefaultExtensionPointRegistry();
+        DefaultContextFactoryExtensionPoint ctxFactory = new DefaultContextFactoryExtensionPoint(registry);
         try {
             ctxFactory.getFactory(null);
             Assert.fail("Should have thrown IllegalArgumentException");
@@ -134,7 +143,8 @@
      * @param factoryInterfaces The list of interfaces implemented by the factory
      */
     private void addGetRemoveFactory(Object factory, Class<?>[] factoryInterfaces) {
-        DefaultContextFactoryExtensionPoint ctxFactory = new DefaultContextFactoryExtensionPoint();
+        ExtensionPointRegistry registry = new DefaultExtensionPointRegistry();
+        DefaultContextFactoryExtensionPoint ctxFactory = new DefaultContextFactoryExtensionPoint(registry);
 
         // Make sure factory not already present
         for (Class<?> iface : factoryInterfaces) {

Modified: incubator/tuscany/java/sca/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/ReallySmallRuntime.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/ReallySmallRuntime.java?rev=650101&r1=650100&r2=650101&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/ReallySmallRuntime.java (original)
+++ incubator/tuscany/java/sca/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/ReallySmallRuntime.java Mon Apr 21 04:16:02 2008
@@ -106,7 +106,7 @@
         ModelFactoryExtensionPoint factories = registry.getExtensionPoint(ModelFactoryExtensionPoint.class);
         
         // Create context factory extension point
-        ContextFactoryExtensionPoint contextFactories = new DefaultContextFactoryExtensionPoint();
+        ContextFactoryExtensionPoint contextFactories = new DefaultContextFactoryExtensionPoint(registry);
         registry.addExtensionPoint(contextFactories);
         
         // Create Message factory



---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org