You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by js...@apache.org on 2008/10/29 01:23:03 UTC

svn commit: r708744 - in /tuscany/branches/sca-equinox/modules/extensibility/src/main/java/org/apache/tuscany/sca: core/DefaultFactoryExtensionPoint.java extensibility/ServiceDiscovery.java

Author: jsdelfino
Date: Tue Oct 28 17:23:03 2008
New Revision: 708744

URL: http://svn.apache.org/viewvc?rev=708744&view=rev
Log:
Fixed algorithm used to discover and instantiate factories as it wouldn't work with abstract factories like WSDLFactory for example. Removed unused methods.

Modified:
    tuscany/branches/sca-equinox/modules/extensibility/src/main/java/org/apache/tuscany/sca/core/DefaultFactoryExtensionPoint.java
    tuscany/branches/sca-equinox/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ServiceDiscovery.java

Modified: tuscany/branches/sca-equinox/modules/extensibility/src/main/java/org/apache/tuscany/sca/core/DefaultFactoryExtensionPoint.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-equinox/modules/extensibility/src/main/java/org/apache/tuscany/sca/core/DefaultFactoryExtensionPoint.java?rev=708744&r1=708743&r2=708744&view=diff
==============================================================================
--- tuscany/branches/sca-equinox/modules/extensibility/src/main/java/org/apache/tuscany/sca/core/DefaultFactoryExtensionPoint.java (original)
+++ tuscany/branches/sca-equinox/modules/extensibility/src/main/java/org/apache/tuscany/sca/core/DefaultFactoryExtensionPoint.java Tue Oct 28 17:23:03 2008
@@ -85,14 +85,6 @@
         }
     }
     
-    private ClassLoader getContextClassLoader() {
-        return AccessController.doPrivileged(new PrivilegedAction<ClassLoader>() {
-            public ClassLoader run() {
-                return Thread.currentThread().getContextClassLoader();
-            }
-        });
-    }
-
     private ClassLoader setContextClassLoader(final ClassLoader classLoader) {
         return AccessController.doPrivileged(new PrivilegedAction<ClassLoader>() {
             public ClassLoader run() {
@@ -119,30 +111,18 @@
                 if (factoryDeclaration != null) {
                     Class<?> factoryClass = factoryDeclaration.loadClass();
                     try {
-                        if (!factoryInterface.isInterface() && Modifier.isAbstract(factoryInterface.getModifiers())) {
-                            try {
-                                Method newInstanceMethod = factoryInterface.getDeclaredMethod("newInstance");
-                                ClassLoader tccl = setContextClassLoader(factoryClass.getClassLoader());
-                                try {
-                                    factory = newInstanceMethod.invoke(null);
-                                    factories.put(factoryInterface, factory);
-                                    return  factoryInterface.cast(factory);
-                                } finally {
-                                    setContextClassLoader(tccl);
-                                }
-                            } catch (NoSuchMethodException e) {
-                                // Ignore
-                            }
-                        }
+                        
                         // Default empty constructor
                         Constructor<?> constructor = factoryClass.getConstructor();
                         factory = constructor.newInstance();
                     } catch (NoSuchMethodException e) {
                         try {
+
                             // Constructor taking the model factory extension point
                             Constructor<?> constructor = factoryClass.getConstructor(FactoryExtensionPoint.class);
                             factory = constructor.newInstance(this);
                         } catch (NoSuchMethodException e1) {
+
                             // Constructor taking the extension point registry
                             Constructor<?> constructor = factoryClass.getConstructor(ExtensionPointRegistry.class);
                             factory = constructor.newInstance(extensionPointRegistry);
@@ -151,12 +131,39 @@
 
                     // Cache the loaded factory
                     factories.put(factoryInterface, factory);
+                    
+                    return  factoryInterface.cast(factory);
+                    
+                } else {
+                    
+                    // If the input interface is an abstract class
+                    if (!factoryInterface.isInterface() && Modifier.isAbstract(factoryInterface.getModifiers())) {
+                        Method newInstanceMethod = factoryInterface.getDeclaredMethod("newInstance");
+                        ClassLoader tccl = setContextClassLoader(factoryInterface.getClassLoader());
+                        try {
+                            
+                            // Create a new instance
+                            factory = newInstanceMethod.invoke(null);
+                            
+                            // Cache the factory
+                            factories.put(factoryInterface, factory);
+                            
+                            return  factoryInterface.cast(factory);
+                        } finally {
+                            setContextClassLoader(tccl);
+                        }
+                    } else {
+                        
+                        // Sorry no factory found
+                        return null;
+                    }
                 }
             } catch (Exception e) {
                 throw new IllegalArgumentException(e);
             }
+        } else {
+            return factoryInterface.cast(factory);
         }
-        return factoryInterface.cast(factory);
     }
 
 }

Modified: tuscany/branches/sca-equinox/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ServiceDiscovery.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-equinox/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ServiceDiscovery.java?rev=708744&r1=708743&r2=708744&view=diff
==============================================================================
--- tuscany/branches/sca-equinox/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ServiceDiscovery.java (original)
+++ tuscany/branches/sca-equinox/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ServiceDiscovery.java Tue Oct 28 17:23:03 2008
@@ -85,17 +85,4 @@
         return service;
     }
     
-    public Object newFactoryClassInstance(String name) {
-        try {
-            ServiceDeclaration declaration = getFirstServiceDeclaration(name);
-            if (declaration == null) {
-                return null;
-            }
-            Class<?> factoryClass = declaration.loadClass();
-            return factoryClass.newInstance();
-        } catch (Exception e) {
-            throw new IllegalArgumentException(e);
-        }
-    }
-
 }