Author: jsdelfino
Date: Mon Aug 13 21:46:00 2007
New Revision: 565619
URL: http://svn.apache.org/viewvc?view=rev&rev=565619
Log:
Moved logic to populate ProviderFactory extension point out of embedded host.
Removed:
incubator/tuscany/java/sca/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/LazyBindingProviderFactory.java
incubator/tuscany/java/sca/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/LazyImplementationProviderFactory.java
Modified:
incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/core/DefaultExtensionPointRegistry.java
incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/provider/DefaultProviderFactoryExtensionPoint.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/core/DefaultExtensionPointRegistry.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/core/DefaultExtensionPointRegistry.java?view=diff&rev=565619&r1=565618&r2=565619
==============================================================================
---
incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/core/DefaultExtensionPointRegistry.java
(original)
+++
incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/core/DefaultExtensionPointRegistry.java
Mon Aug 13 21:46:00 2007
@@ -81,7 +81,12 @@
Constructor constructor =
extensionPointClass.getConstructor(ModelFactoryExtensionPoint.class);
extensionPoint =
constructor.newInstance(getExtensionPoint(ModelFactoryExtensionPoint.class));
} catch (NoSuchMethodException e2) {
- throw new IllegalArgumentException(e2);
+ try {
+ Constructor constructor =
extensionPointClass.getConstructor(ExtensionPointRegistry.class);
+ extensionPoint = constructor.newInstance(this);
+ } catch (NoSuchMethodException e3) {
+ throw new IllegalArgumentException(e3);
+ }
}
}
Modified:
incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/provider/DefaultProviderFactoryExtensionPoint.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/provider/DefaultProviderFactoryExtensionPoint.java?view=diff&rev=565619&r1=565618&r2=565619
==============================================================================
---
incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/provider/DefaultProviderFactoryExtensionPoint.java
(original)
+++
incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/provider/DefaultProviderFactoryExtensionPoint.java
Mon Aug 13 21:46:00 2007
@@ -19,8 +19,21 @@
package org.apache.tuscany.sca.provider;
+import java.io.IOException;
+import java.lang.reflect.Constructor;
+import java.util.ArrayList;
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;
+import org.apache.tuscany.sca.core.ExtensionPointRegistry;
+import org.apache.tuscany.sca.interfacedef.impl.TempServiceDeclarationUtil;
+import org.apache.tuscany.sca.runtime.RuntimeComponent;
+import org.apache.tuscany.sca.runtime.RuntimeComponentReference;
+import org.apache.tuscany.sca.runtime.RuntimeComponentService;
/**
* Default implementation of a provider factory extension point.
@@ -29,14 +42,16 @@
*/
public class DefaultProviderFactoryExtensionPoint implements
ProviderFactoryExtensionPoint {
- protected final Map<Class<?>, ProviderFactory> providerFactories =
- new HashMap<Class<?>, ProviderFactory>();
+ private ExtensionPointRegistry registry;
+ private final Map<Class<?>, ProviderFactory> providerFactories = new
HashMap<Class<?>, ProviderFactory>();
+ private boolean loaded;
/**
* The default constructor. Does nothing.
*
*/
- public DefaultProviderFactoryExtensionPoint() {
+ public DefaultProviderFactoryExtensionPoint(ExtensionPointRegistry
registry) {
+ this.registry = registry;
}
/**
@@ -63,6 +78,8 @@
* @return The provider factory associated with the given model type
*/
public ProviderFactory getProviderFactory(Class<?> modelType) {
+ loadProviderFactories();
+
Class<?>[] classes = modelType.getInterfaces();
for (Class<?> c : classes) {
ProviderFactory factory = providerFactories.get(c);
@@ -71,6 +88,177 @@
}
}
return providerFactories.get(modelType);
+ }
+
+ /**
+ * Load provider factories declared under META-INF/services.
+ * @param registry
+ */
+ private void loadProviderFactories() {
+ if (loaded)
+ return;
+
+ loadProviderFactories(BindingProviderFactory.class);
+ loadProviderFactories(ImplementationProviderFactory.class);
+
+ loaded = true;
+ }
+
+ /**
+ * Load provider factories declared under META-INF/services.
+ * @param registry
+ * @param factoryClass
+ * @return
+ */
+ private List<ProviderFactory> loadProviderFactories(Class<?> factoryClass)
{
+
+ // Get the provider factory service declarations
+ Set<String> factoryDeclarations;
+ try {
+ ClassLoader classLoader = factoryClass.getClassLoader();
+ factoryDeclarations =
TempServiceDeclarationUtil.getServiceClassNames(classLoader,
factoryClass.getName());
+ } catch (IOException e) {
+ throw new IllegalStateException(e);
+ }
+
+ // Get the target extension point
+ ProviderFactoryExtensionPoint factoryExtensionPoint =
registry.getExtensionPoint(ProviderFactoryExtensionPoint.class);
+ List<ProviderFactory> factories = new ArrayList<ProviderFactory>();
+
+ for (String factoryDeclaration: factoryDeclarations) {
+ Map<String, String> attributes =
TempServiceDeclarationUtil.parseServiceDeclaration(factoryDeclaration);
+ String className = attributes.get("class");
+
+ // Load an implementation provider factory
+ if (factoryClass == ImplementationProviderFactory.class) {
+ String modelTypeName = attributes.get("model");
+
+ // Create a provider factory wrapper and register it
+ ImplementationProviderFactory factory = new
LazyImplementationProviderFactory(registry, modelTypeName, className);
+ factoryExtensionPoint.addProviderFactory(factory);
+ factories.add(factory);
+
+ } else if (factoryClass == BindingProviderFactory.class) {
+
+ // Load a binding provider factory
+ String modelTypeName = attributes.get("model");
+
+ // Create a provider factory wrapper and register it
+ BindingProviderFactory factory = new
LazyBindingProviderFactory(registry, modelTypeName, className);
+ factoryExtensionPoint.addProviderFactory(factory);
+ factories.add(factory);
+ }
+ }
+ return factories;
+ }
+
+ /**
+ * A wrapper around an implementation provider factory allowing lazy
+ * loading and initialization of implementation providers.
+ */
+ private static class LazyBindingProviderFactory implements
BindingProviderFactory {
+
+ private ExtensionPointRegistry registry;
+ private String modelTypeName;
+ private String className;
+ private BindingProviderFactory factory;
+ private Class modelType;
+
+ private LazyBindingProviderFactory(ExtensionPointRegistry registry,
String modelTypeName, String className) {
+ this.registry = registry;
+ this.modelTypeName = modelTypeName;
+ this.className = className;
+ }
+
+ @SuppressWarnings("unchecked")
+ private BindingProviderFactory getFactory() {
+ if (factory == null) {
+ try {
+ ClassLoader classLoader =
BindingProviderFactory.class.getClassLoader();
+ Class<BindingProviderFactory> factoryClass =
(Class<BindingProviderFactory>)Class.forName(className, true, classLoader);
+ Constructor<BindingProviderFactory> constructor =
factoryClass.getConstructor(ExtensionPointRegistry.class);
+ factory = constructor.newInstance(registry);
+ } catch (Exception e) {
+ throw new IllegalStateException(e);
+ }
+ }
+ return factory;
+ }
+
+ @SuppressWarnings("unchecked")
+ public ReferenceBindingProvider
createReferenceBindingProvider(RuntimeComponent component,
RuntimeComponentReference reference, Binding binding) {
+ return getFactory().createReferenceBindingProvider(component,
reference, binding);
+ }
+
+ @SuppressWarnings("unchecked")
+ public ServiceBindingProvider
createServiceBindingProvider(RuntimeComponent component,
RuntimeComponentService service, Binding binding) {
+ return getFactory().createServiceBindingProvider(component,
service, binding);
+ }
+
+ public Class getModelType() {
+ if (modelType == null) {
+ try {
+ ClassLoader classLoader =
BindingProviderFactory.class.getClassLoader();
+ modelType = Class.forName(modelTypeName, true,
classLoader);
+ } catch (Exception e) {
+ throw new IllegalStateException(e);
+ }
+ }
+ return modelType;
+ }
+
+ }
+
+ /**
+ * A wrapper around an implementation provider factory allowing lazy
+ * loading and initialization of implementation providers.
+ */
+ private class LazyImplementationProviderFactory implements
ImplementationProviderFactory {
+
+ private ExtensionPointRegistry registry;
+ private String modelTypeName;
+ private String className;
+ private ImplementationProviderFactory factory;
+ private Class modelType;
+
+ private LazyImplementationProviderFactory(ExtensionPointRegistry
registry, String modelTypeName, String className) {
+ this.registry = registry;
+ this.modelTypeName = modelTypeName;
+ this.className = className;
+ }
+
+ @SuppressWarnings("unchecked")
+ private ImplementationProviderFactory getFactory() {
+ if (factory == null) {
+ try {
+ ClassLoader classLoader =
ImplementationProviderFactory.class.getClassLoader();
+ Class<ImplementationProviderFactory> factoryClass =
(Class<ImplementationProviderFactory>)Class.forName(className, true,
classLoader);
+ Constructor<ImplementationProviderFactory> constructor =
factoryClass.getConstructor(ExtensionPointRegistry.class);
+ factory = constructor.newInstance(registry);
+ } catch (Exception e) {
+ throw new IllegalStateException(e);
+ }
+ }
+ return factory;
+ }
+
+ @SuppressWarnings("unchecked")
+ public ImplementationProvider
createImplementationProvider(RuntimeComponent component, Implementation
Implementation) {
+ return getFactory().createImplementationProvider(component,
Implementation);
+ }
+
+ public Class getModelType() {
+ if (modelType == null) {
+ try {
+ ClassLoader classLoader =
ImplementationProviderFactory.class.getClassLoader();
+ modelType = Class.forName(modelTypeName, true,
classLoader);
+ } catch (Exception e) {
+ throw new IllegalStateException(e);
+ }
+ }
+ return modelType;
+ }
+
}
}
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?view=diff&rev=565619&r1=565618&r2=565619
==============================================================================
---
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 Aug 13 21:46:00 2007
@@ -134,11 +134,6 @@
// Start the runtime modules
startModules(registry, modules);
-
- // Load the provider factory extensions
- loadProviderFactories(registry, classLoader,
BindingProviderFactory.class);
- loadProviderFactories(registry, classLoader,
ImplementationProviderFactory.class);
-
}
public void stop() throws ActivationException {
@@ -206,47 +201,6 @@
for (ModuleActivator activator : modules) {
activator.start(registry);
}
- }
-
- private List<ProviderFactory> loadProviderFactories(ExtensionPointRegistry
registry, ClassLoader classLoader, Class<?> factoryClass) {
-
- // Get the provider factory service declarations
- Set<String> factoryDeclarations;
- try {
- factoryDeclarations =
TempServiceDeclarationUtil.getServiceClassNames(classLoader,
factoryClass.getName());
- } catch (IOException e) {
- throw new IllegalStateException(e);
- }
-
- // Get the target extension point
- ProviderFactoryExtensionPoint factoryExtensionPoint =
registry.getExtensionPoint(ProviderFactoryExtensionPoint.class);
- List<ProviderFactory> factories = new ArrayList<ProviderFactory>();
-
- for (String factoryDeclaration: factoryDeclarations) {
- Map<String, String> attributes =
TempServiceDeclarationUtil.parseServiceDeclaration(factoryDeclaration);
- String className = attributes.get("class");
-
- // Load an implementation provider factory
- if (factoryClass == ImplementationProviderFactory.class) {
- String modelTypeName = attributes.get("model");
-
- // Create a provider factory wrapper and register it
- ImplementationProviderFactory factory = new
LazyImplementationProviderFactory(registry, modelTypeName, classLoader,
className);
- factoryExtensionPoint.addProviderFactory(factory);
- factories.add(factory);
-
- } else if (factoryClass == BindingProviderFactory.class) {
-
- // Load a binding provider factory
- String modelTypeName = attributes.get("model");
-
- // Create a provider factory wrapper and register it
- BindingProviderFactory factory = new
LazyBindingProviderFactory(registry, modelTypeName, classLoader, className);
- factoryExtensionPoint.addProviderFactory(factory);
- factories.add(factory);
- }
- }
- return factories;
}
private void stopModules(ExtensionPointRegistry registry,
List<ModuleActivator> modules) {
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]