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 2007/06/21 02:40:01 UTC
svn commit: r549306 -
/incubator/tuscany/java/sca/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/
Author: jsdelfino
Date: Wed Jun 20 17:40:00 2007
New Revision: 549306
URL: http://svn.apache.org/viewvc?view=rev&rev=549306
Log:
Added support for lazy loading and initialization of artifact processors and provider factories.
Added:
incubator/tuscany/java/sca/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/LazyBindingProviderFactory.java (with props)
incubator/tuscany/java/sca/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/LazyImplementationProviderFactory.java (with props)
incubator/tuscany/java/sca/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/LazyStAXArtifactProcessor.java (with props)
incubator/tuscany/java/sca/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/LazyURLArtifactProcessor.java (with props)
Modified:
incubator/tuscany/java/sca/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/ReallySmallRuntime.java
incubator/tuscany/java/sca/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/ReallySmallRuntimeBuilder.java
Added: incubator/tuscany/java/sca/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/LazyBindingProviderFactory.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/LazyBindingProviderFactory.java?view=auto&rev=549306
==============================================================================
--- incubator/tuscany/java/sca/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/LazyBindingProviderFactory.java (added)
+++ incubator/tuscany/java/sca/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/LazyBindingProviderFactory.java Wed Jun 20 17:40:00 2007
@@ -0,0 +1,91 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.tuscany.sca.host.embedded.impl;
+
+import java.lang.ref.WeakReference;
+import java.lang.reflect.Constructor;
+
+import org.apache.tuscany.sca.assembly.Binding;
+import org.apache.tuscany.sca.core.ExtensionPointRegistry;
+import org.apache.tuscany.sca.provider.BindingProviderFactory;
+import org.apache.tuscany.sca.provider.ReferenceBindingProvider;
+import org.apache.tuscany.sca.provider.ServiceBindingProvider;
+import org.apache.tuscany.sca.runtime.RuntimeComponent;
+import org.apache.tuscany.sca.runtime.RuntimeComponentReference;
+import org.apache.tuscany.sca.runtime.RuntimeComponentService;
+
+/**
+ * A wrapper around an implementation provider factory allowing lazy
+ * loading and initialization of implementation providers.
+ *
+ * @version $Rev$ $Date$
+ */
+public class LazyBindingProviderFactory implements BindingProviderFactory {
+
+ private ExtensionPointRegistry registry;
+ private String modelTypeName;
+ private WeakReference<ClassLoader> classLoader;
+ private String className;
+ private BindingProviderFactory factory;
+ private Class modelType;
+
+ LazyBindingProviderFactory(ExtensionPointRegistry registry, String modelTypeName, ClassLoader classLoader, String className) {
+ this.registry = registry;
+ this.modelTypeName = modelTypeName;
+ this.classLoader = new WeakReference<ClassLoader>(classLoader);
+ this.className = className;
+ }
+
+ @SuppressWarnings("unchecked")
+ private BindingProviderFactory getFactory() {
+ if (factory == null) {
+ try {
+ Class<BindingProviderFactory> factoryClass = (Class<BindingProviderFactory>)Class.forName(className, true, classLoader.get());
+ 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 {
+ modelType = Class.forName(modelTypeName, true, classLoader.get());
+ } catch (Exception e) {
+ throw new IllegalStateException(e);
+ }
+ }
+ return modelType;
+ }
+
+}
Propchange: incubator/tuscany/java/sca/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/LazyBindingProviderFactory.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/tuscany/java/sca/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/LazyBindingProviderFactory.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: incubator/tuscany/java/sca/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/LazyImplementationProviderFactory.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/LazyImplementationProviderFactory.java?view=auto&rev=549306
==============================================================================
--- incubator/tuscany/java/sca/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/LazyImplementationProviderFactory.java (added)
+++ incubator/tuscany/java/sca/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/LazyImplementationProviderFactory.java Wed Jun 20 17:40:00 2007
@@ -0,0 +1,83 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.tuscany.sca.host.embedded.impl;
+
+import java.lang.ref.WeakReference;
+import java.lang.reflect.Constructor;
+
+import org.apache.tuscany.sca.assembly.Implementation;
+import org.apache.tuscany.sca.core.ExtensionPointRegistry;
+import org.apache.tuscany.sca.provider.ImplementationProvider;
+import org.apache.tuscany.sca.provider.ImplementationProviderFactory;
+import org.apache.tuscany.sca.runtime.RuntimeComponent;
+
+/**
+ * A wrapper around an implementation provider factory allowing lazy
+ * loading and initialization of implementation providers.
+ *
+ * @version $Rev$ $Date$
+ */
+public class LazyImplementationProviderFactory implements ImplementationProviderFactory {
+
+ private ExtensionPointRegistry registry;
+ private String modelTypeName;
+ private WeakReference<ClassLoader> classLoader;
+ private String className;
+ private ImplementationProviderFactory factory;
+ private Class modelType;
+
+ LazyImplementationProviderFactory(ExtensionPointRegistry registry, String modelTypeName, ClassLoader classLoader, String className) {
+ this.registry = registry;
+ this.modelTypeName = modelTypeName;
+ this.classLoader = new WeakReference<ClassLoader>(classLoader);
+ this.className = className;
+ }
+
+ @SuppressWarnings("unchecked")
+ private ImplementationProviderFactory getFactory() {
+ if (factory == null) {
+ try {
+ Class<ImplementationProviderFactory> factoryClass = (Class<ImplementationProviderFactory>)Class.forName(className, true, classLoader.get());
+ 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 {
+ modelType = Class.forName(modelTypeName, true, classLoader.get());
+ } catch (Exception e) {
+ throw new IllegalStateException(e);
+ }
+ }
+ return modelType;
+ }
+
+}
Propchange: incubator/tuscany/java/sca/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/LazyImplementationProviderFactory.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/tuscany/java/sca/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/LazyImplementationProviderFactory.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: incubator/tuscany/java/sca/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/LazyStAXArtifactProcessor.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/LazyStAXArtifactProcessor.java?view=auto&rev=549306
==============================================================================
--- incubator/tuscany/java/sca/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/LazyStAXArtifactProcessor.java (added)
+++ incubator/tuscany/java/sca/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/LazyStAXArtifactProcessor.java Wed Jun 20 17:40:00 2007
@@ -0,0 +1,120 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.tuscany.sca.host.embedded.impl;
+
+import java.lang.ref.WeakReference;
+import java.lang.reflect.Constructor;
+
+import javax.xml.namespace.QName;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
+import javax.xml.stream.XMLStreamWriter;
+
+import org.apache.tuscany.sca.assembly.AssemblyFactory;
+import org.apache.tuscany.sca.assembly.xml.DefaultBeanModelProcessor;
+import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor;
+import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
+import org.apache.tuscany.sca.contribution.service.ContributionReadException;
+import org.apache.tuscany.sca.contribution.service.ContributionResolveException;
+import org.apache.tuscany.sca.contribution.service.ContributionWriteException;
+import org.apache.tuscany.sca.core.ExtensionPointRegistry;
+import org.apache.tuscany.sca.core.ModelFactoryExtensionPoint;
+import org.apache.tuscany.sca.policy.PolicyFactory;
+
+/**
+ * A wrapper around an Artifact processor class allowing lazy loading and
+ * initialization of artifact processors.
+ *
+ * @version $Rev$ $Date$
+ */
+class LazyStAXArtifactProcessor implements StAXArtifactProcessor {
+
+ private ExtensionPointRegistry registry;
+ private QName artifactType;
+ private String modelTypeName;
+ private WeakReference<ClassLoader> classLoader;
+ private String className;
+ private StAXArtifactProcessor processor;
+ private Class modelType;
+
+ LazyStAXArtifactProcessor(ExtensionPointRegistry registry, QName artifactType, String modelTypeName, ClassLoader classLoader, String className) {
+ this.registry = registry;
+ this.artifactType = artifactType;
+ this.modelTypeName = modelTypeName;
+ this.classLoader = new WeakReference<ClassLoader>(classLoader);
+ this.className = className;
+ }
+
+ public QName getArtifactType() {
+ return artifactType;
+ }
+
+ @SuppressWarnings("unchecked")
+ private StAXArtifactProcessor getProcessor() {
+ if (processor == null) {
+
+ if (className.equals(DefaultBeanModelProcessor.class.getName())) {
+
+ // Specific initialization for the DefaultBeanModelProcessor
+ ModelFactoryExtensionPoint modelFactories = registry.getExtensionPoint(ModelFactoryExtensionPoint.class);
+ AssemblyFactory assemblyFactory = modelFactories.getFactory(AssemblyFactory.class);
+ PolicyFactory policyFactory = modelFactories.getFactory(PolicyFactory.class);
+ processor = new DefaultBeanModelProcessor(assemblyFactory, policyFactory, artifactType, getModelType());
+ } else {
+
+ // Load and instanciate the processor class
+ try {
+ Class<StAXArtifactProcessor> processorClass = (Class<StAXArtifactProcessor>)Class.forName(className, true, classLoader.get());
+ Constructor<StAXArtifactProcessor> constructor = processorClass.getConstructor(ExtensionPointRegistry.class);
+ processor = constructor.newInstance(registry);
+ } catch (Exception e) {
+ throw new IllegalStateException(e);
+ }
+ }
+ }
+ return processor;
+ }
+
+ public Object read(XMLStreamReader inputSource) throws ContributionReadException, XMLStreamException {
+ return getProcessor().read(inputSource);
+ }
+
+ @SuppressWarnings("unchecked")
+ public void write(Object model, XMLStreamWriter outputSource) throws ContributionWriteException, XMLStreamException {
+ getProcessor().write(model, outputSource);
+ }
+
+ public Class getModelType() {
+ if (modelType == null) {
+ try {
+ modelType = Class.forName(modelTypeName, true, classLoader.get());
+ } catch (Exception e) {
+ throw new IllegalStateException(e);
+ }
+ }
+ return modelType;
+ }
+
+ @SuppressWarnings("unchecked")
+ public void resolve(Object model, ModelResolver resolver) throws ContributionResolveException {
+ getProcessor().resolve(model, resolver);
+ }
+
+}
Propchange: incubator/tuscany/java/sca/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/LazyStAXArtifactProcessor.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/tuscany/java/sca/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/LazyStAXArtifactProcessor.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: incubator/tuscany/java/sca/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/LazyURLArtifactProcessor.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/LazyURLArtifactProcessor.java?view=auto&rev=549306
==============================================================================
--- incubator/tuscany/java/sca/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/LazyURLArtifactProcessor.java (added)
+++ incubator/tuscany/java/sca/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/LazyURLArtifactProcessor.java Wed Jun 20 17:40:00 2007
@@ -0,0 +1,95 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.tuscany.sca.host.embedded.impl;
+
+import java.lang.ref.WeakReference;
+import java.lang.reflect.Constructor;
+import java.net.URI;
+import java.net.URL;
+
+import org.apache.tuscany.sca.contribution.processor.URLArtifactProcessor;
+import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
+import org.apache.tuscany.sca.contribution.service.ContributionReadException;
+import org.apache.tuscany.sca.contribution.service.ContributionResolveException;
+import org.apache.tuscany.sca.core.ExtensionPointRegistry;
+
+/**
+ * A wrapper around an Artifact processor class allowing lazy loading and
+ * initialization of artifact processors.
+ *
+ * @version $Rev$ $Date$
+ */
+class LazyURLArtifactProcessor implements URLArtifactProcessor {
+
+ private ExtensionPointRegistry registry;
+ private String artifactType;
+ private String modelTypeName;
+ private WeakReference<ClassLoader> classLoader;
+ private String className;
+ private URLArtifactProcessor processor;
+ private Class modelType;
+
+ LazyURLArtifactProcessor(ExtensionPointRegistry registry, String artifactType, String modelTypeName, ClassLoader classLoader, String className) {
+ this.registry = registry;
+ this.artifactType = artifactType;
+ this.modelTypeName = modelTypeName;
+ this.classLoader = new WeakReference<ClassLoader>(classLoader);
+ this.className = className;
+ }
+
+ public String getArtifactType() {
+ return artifactType;
+ }
+
+ @SuppressWarnings("unchecked")
+ private URLArtifactProcessor getProcessor() {
+ if (processor == null) {
+ try {
+ Class<URLArtifactProcessor> processorClass = (Class<URLArtifactProcessor>)Class.forName(className, true, classLoader.get());
+ Constructor<URLArtifactProcessor> constructor = processorClass.getConstructor(ExtensionPointRegistry.class);
+ processor = constructor.newInstance(registry);
+ } catch (Exception e) {
+ throw new IllegalStateException(e);
+ }
+ }
+ return processor;
+ }
+
+ public Object read(URL contributionURL, URI artifactURI, URL artifactURL) throws ContributionReadException {
+ return getProcessor().read(contributionURL, artifactURI, artifactURL);
+ }
+
+ public Class getModelType() {
+ if (modelType == null) {
+ try {
+ modelType = Class.forName(modelTypeName, true, classLoader.get());
+ } catch (Exception e) {
+ throw new IllegalStateException(e);
+ }
+ }
+ return modelType;
+ }
+
+ @SuppressWarnings("unchecked")
+ public void resolve(Object model, ModelResolver resolver) throws ContributionResolveException {
+ getProcessor().resolve(model, resolver);
+ }
+
+}
Propchange: incubator/tuscany/java/sca/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/LazyURLArtifactProcessor.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/tuscany/java/sca/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/LazyURLArtifactProcessor.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
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=549306&r1=549305&r2=549306
==============================================================================
--- 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 Wed Jun 20 17:40:00 2007
@@ -19,13 +19,25 @@
package org.apache.tuscany.sca.host.embedded.impl;
+import java.io.IOException;
+import java.util.ArrayList;
import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import javax.xml.namespace.QName;
import org.apache.tuscany.sca.assembly.AssemblyFactory;
import org.apache.tuscany.sca.assembly.DefaultSCABindingFactory;
import org.apache.tuscany.sca.assembly.SCABindingFactory;
+import org.apache.tuscany.sca.assembly.xml.Constants;
import org.apache.tuscany.sca.contribution.ContributionFactory;
import org.apache.tuscany.sca.contribution.impl.ContributionFactoryImpl;
+import org.apache.tuscany.sca.contribution.processor.ArtifactProcessor;
+import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor;
+import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessorExtensionPoint;
+import org.apache.tuscany.sca.contribution.processor.URLArtifactProcessor;
+import org.apache.tuscany.sca.contribution.processor.URLArtifactProcessorExtensionPoint;
import org.apache.tuscany.sca.contribution.service.ContributionService;
import org.apache.tuscany.sca.core.DefaultExtensionPointRegistry;
import org.apache.tuscany.sca.core.DefaultModelFactoryExtensionPoint;
@@ -43,6 +55,10 @@
import org.apache.tuscany.sca.invocation.MessageFactory;
import org.apache.tuscany.sca.policy.DefaultPolicyFactory;
import org.apache.tuscany.sca.policy.PolicyFactory;
+import org.apache.tuscany.sca.provider.BindingProviderFactory;
+import org.apache.tuscany.sca.provider.ImplementationProviderFactory;
+import org.apache.tuscany.sca.provider.ProviderFactory;
+import org.apache.tuscany.sca.provider.ProviderFactoryExtensionPoint;
import org.apache.tuscany.sca.scope.ScopeRegistry;
public class ReallySmallRuntime {
@@ -111,8 +127,19 @@
scopeRegistry,
workManager);
+ // Load the runtime modules
+ modules = loadModules(registry, classLoader);
+
// Start the runtime modules
- modules = startModules(registry, classLoader);
+ startModules(registry, modules);
+
+ // Load the artifact processor extensions
+ loadArtifactProcessors(registry, classLoader, URLArtifactProcessor.class);
+ loadArtifactProcessors(registry, classLoader, StAXArtifactProcessor.class);
+
+ // Load the provider factory extensions
+ loadProviderFactories(registry, classLoader, BindingProviderFactory.class);
+ loadProviderFactories(registry, classLoader, ImplementationProviderFactory.class);
}
@@ -147,8 +174,7 @@
}
@SuppressWarnings("unchecked")
- private List<ModuleActivator> startModules(ExtensionPointRegistry registry, ClassLoader classLoader)
- throws ActivationException {
+ private List<ModuleActivator> loadModules(ExtensionPointRegistry registry, ClassLoader classLoader) {
// Load and instantiate the modules found on the classpath
List<ModuleActivator> modules = ReallySmallRuntimeBuilder.getServices(classLoader, ModuleActivator.class);
@@ -160,13 +186,110 @@
}
}
}
+ return modules;
+ }
+
+ private void startModules(ExtensionPointRegistry registry, List<ModuleActivator> modules) throws ActivationException {
// Start all the extension modules
for (ModuleActivator activator : modules) {
activator.start(registry);
}
+ }
- return modules;
+ private List<ArtifactProcessor> loadArtifactProcessors(ExtensionPointRegistry registry, ClassLoader classLoader, Class<?> processorClass) {
+
+ // Get the processor service declarations
+ Set<String> processorDeclarations;
+ try {
+ processorDeclarations = ReallySmallRuntimeBuilder.getServiceClassNames(classLoader, processorClass.getName());
+ } catch (IOException e) {
+ throw new IllegalStateException(e);
+ }
+
+ // Get the target extension points
+ StAXArtifactProcessorExtensionPoint staxProcessors = registry.getExtensionPoint(StAXArtifactProcessorExtensionPoint.class);
+ URLArtifactProcessorExtensionPoint urlProcessors = registry.getExtensionPoint(URLArtifactProcessorExtensionPoint.class);
+ List<ArtifactProcessor> processors = new ArrayList<ArtifactProcessor>();
+
+ for (String processorDeclaration: processorDeclarations) {
+ Map<String, String> attributes = ReallySmallRuntimeBuilder.parseServiceDeclaration(processorDeclaration);
+ String className = attributes.get("class");
+
+ // Load a StAX artifact processor
+ if (processorClass == StAXArtifactProcessor.class) {
+ QName artifactType = null;
+ String qname = attributes.get("type");
+ if (qname != null) {
+ int h = qname.indexOf('#');
+ if (h == -1) {
+ artifactType = new QName(Constants.SCA10_NS, qname);
+ } else {
+ artifactType = new QName(qname.substring(0, h), qname.substring(h+1));
+ }
+ }
+
+ String modelTypeName = attributes.get("model");
+
+ // Create a processor wrapper and register it
+ StAXArtifactProcessor processor = new LazyStAXArtifactProcessor(registry, artifactType, modelTypeName, classLoader, className);
+ staxProcessors.addArtifactProcessor(processor);
+ processors.add(processor);
+
+ } else if (processorClass == URLArtifactProcessor.class) {
+
+ String artifactType = attributes.get("type");
+ String modelTypeName = attributes.get("model");
+
+ // Create a processor wrapper and register it
+ URLArtifactProcessor processor = new LazyURLArtifactProcessor(registry, artifactType, modelTypeName, classLoader, className);
+ urlProcessors.addArtifactProcessor(processor);
+ processors.add(processor);
+
+ }
+ }
+ return processors;
+ }
+
+ private List<ProviderFactory> loadProviderFactories(ExtensionPointRegistry registry, ClassLoader classLoader, Class<?> factoryClass) {
+
+ // Get the processor service declarations
+ Set<String> factoryDeclarations;
+ try {
+ factoryDeclarations = ReallySmallRuntimeBuilder.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 = ReallySmallRuntimeBuilder.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) {
Modified: incubator/tuscany/java/sca/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/ReallySmallRuntimeBuilder.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/ReallySmallRuntimeBuilder.java?view=diff&rev=549306&r1=549305&r2=549306
==============================================================================
--- incubator/tuscany/java/sca/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/ReallySmallRuntimeBuilder.java (original)
+++ incubator/tuscany/java/sca/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/ReallySmallRuntimeBuilder.java Wed Jun 20 17:40:00 2007
@@ -26,9 +26,12 @@
import java.net.URL;
import java.util.ArrayList;
import java.util.Enumeration;
+import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
+import java.util.Map;
import java.util.Set;
+import java.util.StringTokenizer;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLOutputFactory;
@@ -218,7 +221,7 @@
* @return A class name which extends/implements the service class
* @throws IOException
*/
- private static Set<String> getServiceClassNames(ClassLoader classLoader, String name) throws IOException {
+ public static Set<String> getServiceClassNames(ClassLoader classLoader, String name) throws IOException {
Set<String> set = new HashSet<String>();
Enumeration<URL> urls = classLoader.getResources("META-INF/services/" + name);
while (urls.hasMoreElements()) {
@@ -276,6 +279,33 @@
throw new IllegalStateException(e);
}
return instances;
+ }
+
+ /**
+ * Parse a service declaration in the form class;attr=value,attr=value and
+ * return a map of attributes
+ * @param declaration
+ * @return a map of attributes
+ */
+ public static Map<String, String> parseServiceDeclaration(String declaration) {
+ Map<String, String> attributes = new HashMap<String, String>();
+ StringTokenizer tokens = new StringTokenizer(declaration);
+ String className = tokens.nextToken(";");
+ if (className != null) {
+ attributes.put("class", className);
+ }
+ for (;;) {
+ if (!tokens.hasMoreTokens())
+ break;
+ String key = tokens.nextToken("=").substring(1);
+ if (key == null)
+ break;
+ String value = tokens.nextToken(",").substring(1);
+ if (value == null)
+ break;
+ attributes.put(key, value);
+ }
+ return attributes;
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org