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);
- }
- }
-
}