You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by sl...@apache.org on 2008/06/07 12:52:10 UTC
svn commit: r664316 [2/2] - in /incubator/tuscany/java/sca: itest/
itest/late-reference-resolution/ itest/late-reference-resolution/src/
itest/late-reference-resolution/src/main/
itest/late-reference-resolution/src/main/java/ itest/late-reference-resol...
Added: incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/endpointresolver/DefaultEndpointResolverFactoryExtensionPoint.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/endpointresolver/DefaultEndpointResolverFactoryExtensionPoint.java?rev=664316&view=auto
==============================================================================
--- incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/endpointresolver/DefaultEndpointResolverFactoryExtensionPoint.java (added)
+++ incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/endpointresolver/DefaultEndpointResolverFactoryExtensionPoint.java Sat Jun 7 03:52:09 2008
@@ -0,0 +1,184 @@
+/*
+ * 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.endpointresolver;
+
+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.Endpoint;
+import org.apache.tuscany.sca.assembly.Implementation;
+import org.apache.tuscany.sca.core.ExtensionPointRegistry;
+import org.apache.tuscany.sca.extensibility.ServiceDeclaration;
+import org.apache.tuscany.sca.extensibility.ServiceDiscovery;
+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.
+ *
+ * @version $Rev$ $Date$
+ */
+public class DefaultEndpointResolverFactoryExtensionPoint implements EndpointResolverFactoryExtensionPoint {
+
+ private ExtensionPointRegistry registry;
+ private final Map<Class<?>, EndpointResolverFactory> endpointResolverFactories = new HashMap<Class<?>, EndpointResolverFactory>();
+ private boolean loaded;
+
+ /**
+ * The default constructor. Does nothing.
+ *
+ */
+ public DefaultEndpointResolverFactoryExtensionPoint(ExtensionPointRegistry registry) {
+ this.registry = registry;
+ }
+
+ /**
+ * Add an endpoint resolver factory.
+ *
+ * @param endpointResolverFactory The resolver factory
+ */
+ public void addEndpointResolverFactory(EndpointResolverFactory endpointResolverFactory){
+ endpointResolverFactories.put(endpointResolverFactory.getModelType(), endpointResolverFactory);
+ }
+
+ /**
+ * Remove a endpoint resolver factory.
+ *
+ * @param endpointResolverFactory The endpoint resolver factory
+ */
+ public void removeEndpointResolverFactory(EndpointResolverFactory endpointResolverFactory){
+ endpointResolverFactories.remove(endpointResolverFactory.getModelType());
+ }
+
+ /**
+ * Returns the provider factory associated with the given model type.
+ * @param modelType A model type
+ * @return The provider factory associated with the given model type
+ */
+ public EndpointResolverFactory getEndpointResolverFactory(Class<?> modelType) {
+ loadProviderFactories();
+
+ Class<?>[] classes = modelType.getInterfaces();
+ for (Class<?> c : classes) {
+ EndpointResolverFactory factory = endpointResolverFactories.get(c);
+ if (factory != null) {
+ return factory;
+ }
+ }
+ return endpointResolverFactories.get(modelType);
+ }
+
+
+ /**
+ * Load provider factories declared under META-INF/services.
+ * @param registry
+ */
+ private void loadProviderFactories() {
+ if (loaded)
+ return;
+
+ // Get the provider factory service declarations
+ Set<ServiceDeclaration> factoryDeclarations;
+ ServiceDiscovery serviceDiscovery = ServiceDiscovery.getInstance();
+ try {
+ factoryDeclarations = serviceDiscovery.getServiceDeclarations(EndpointResolverFactory.class);
+ } catch (Exception e) {
+ throw new IllegalStateException(e);
+ }
+
+ // Get the extension point
+ EndpointResolverFactoryExtensionPoint factoryExtensionPoint =
+ registry.getExtensionPoint(EndpointResolverFactoryExtensionPoint.class);
+ List<EndpointResolverFactory> factories = new ArrayList<EndpointResolverFactory>();
+
+ for (ServiceDeclaration factoryDeclaration : factoryDeclarations) {
+ Map<String, String> attributes = factoryDeclaration.getAttributes();
+
+ // Find the model type that identifies this resolver
+ String modelTypeName = attributes.get("model");
+
+ // Create a provider factory wrapper and register it
+ EndpointResolverFactory factory =
+ new LazyEndpointResolverFactory(registry, modelTypeName, factoryDeclaration);
+ factoryExtensionPoint.addEndpointResolverFactory(factory);
+ factories.add(factory);
+ }
+
+ loaded = true;
+ }
+
+ /**
+ * A wrapper around an endpoint provider factory allowing lazy
+ * loading and initialization of endpoint providers.
+ */
+ private class LazyEndpointResolverFactory implements EndpointResolverFactory {
+ private ExtensionPointRegistry registry;
+ private String modelTypeName;
+ private ServiceDeclaration providerClass;
+ private EndpointResolverFactory factory;
+ private Class modelType;
+
+ private LazyEndpointResolverFactory(ExtensionPointRegistry registry,
+ String modelTypeName,
+ ServiceDeclaration providerClass) {
+ this.registry = registry;
+ this.modelTypeName = modelTypeName;
+ this.providerClass = providerClass;
+ }
+
+ @SuppressWarnings("unchecked")
+ private EndpointResolverFactory getFactory() {
+ if (factory == null) {
+ try {
+ Class<EndpointResolverFactory> factoryClass = (Class<EndpointResolverFactory>)providerClass.loadClass();
+ Constructor<EndpointResolverFactory> constructor =
+ factoryClass.getConstructor(ExtensionPointRegistry.class);
+ factory = constructor.newInstance(registry);
+ } catch (Exception e) {
+ throw new IllegalStateException(e);
+ }
+ }
+ return factory;
+ }
+
+ public EndpointResolver createEndpointResolver(Endpoint endpoint, Binding binding) {
+ return getFactory().createEndpointResolver(endpoint, binding);
+ }
+
+ public Class getModelType() {
+ if (modelType == null) {
+ try {
+ modelType = providerClass.loadClass(modelTypeName);
+ } catch (Exception e) {
+ throw new IllegalStateException(e);
+ }
+ }
+ return modelType;
+ }
+
+ }
+
+}
Propchange: incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/endpointresolver/DefaultEndpointResolverFactoryExtensionPoint.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/endpointresolver/DefaultEndpointResolverFactoryExtensionPoint.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/endpointresolver/EndpointResolver.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/endpointresolver/EndpointResolver.java?rev=664316&view=auto
==============================================================================
--- incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/endpointresolver/EndpointResolver.java (added)
+++ incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/endpointresolver/EndpointResolver.java Sat Jun 7 03:52:09 2008
@@ -0,0 +1,55 @@
+/*
+ * 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.endpointresolver;
+
+
+/**
+ * A reference binding implementation can options implement this
+ * interface to tie into the Tuscany SCA runtime
+ *
+ * @version $Rev$ $Date$
+ */
+public interface EndpointResolver {
+
+ /**
+ * This method will be invoked when the endpoint is
+ * activated. It gives the resolver the opportunity
+ * to do any set up ready for when it is asked to
+ * resolve the endpoint when a message arrives
+ */
+ void start();
+
+ /**
+ * This method will be invoked when the endpoint is
+ * to be resolved. The resolver will attempt to resolve the
+ * endpoint against available services. The resolvers extending
+ * this interface will provide environment or binding specific
+ * resolution processing
+ */
+ void resolve();
+
+ /**
+ * This method will be invoked when the endpont is
+ * deactivated. It gives the resolver the opportunity
+ * to take and required resolver shutdown actions
+ */
+ void stop();
+
+}
Propchange: incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/endpointresolver/EndpointResolver.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/endpointresolver/EndpointResolver.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/endpointresolver/EndpointResolverFactory.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/endpointresolver/EndpointResolverFactory.java?rev=664316&view=auto
==============================================================================
--- incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/endpointresolver/EndpointResolverFactory.java (added)
+++ incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/endpointresolver/EndpointResolverFactory.java Sat Jun 7 03:52:09 2008
@@ -0,0 +1,44 @@
+/*
+ * 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.endpointresolver;
+
+import org.apache.tuscany.sca.assembly.Binding;
+import org.apache.tuscany.sca.assembly.Endpoint;
+
+/**
+ * A factory for creating the runtime artifacts that resolve endpoints.
+ *
+ * @version $Rev$ $Date$
+ */
+public interface EndpointResolverFactory <M>{
+
+ /**
+ * Creates a new endpoint resolver for the given component,
+ * reference and binding.
+ *
+ * @param component The runtime component
+ * @param reference The reference on the runtime component
+ * @param enpoint The endpoint assembly model object
+ * @return The endpoint provider
+ */
+ EndpointResolver createEndpointResolver(Endpoint endpoint, Binding binding);
+
+ Class<M> getModelType();
+}
Propchange: incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/endpointresolver/EndpointResolverFactory.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/endpointresolver/EndpointResolverFactory.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/endpointresolver/EndpointResolverFactoryExtensionPoint.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/endpointresolver/EndpointResolverFactoryExtensionPoint.java?rev=664316&view=auto
==============================================================================
--- incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/endpointresolver/EndpointResolverFactoryExtensionPoint.java (added)
+++ incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/endpointresolver/EndpointResolverFactoryExtensionPoint.java Sat Jun 7 03:52:09 2008
@@ -0,0 +1,57 @@
+/*
+ * 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.endpointresolver;
+
+import java.util.List;
+
+
+/**
+ * An extension point for resolver factories. Holds all of the resolver
+ * factories from loaded extension points. Allows a resolver factory
+ * to be located based on a given model type. Hence the runtime can
+ * generate endpoint resolvers from the in memory assembly model.
+ *
+ * @version $Rev$ $Date$
+ */
+public interface EndpointResolverFactoryExtensionPoint {
+
+
+ /**
+ * Add an endpoint resolver factory.
+ *
+ * @param endpointResolverFactory The resolver factory
+ */
+ void addEndpointResolverFactory(EndpointResolverFactory endpointResolverFactory);
+
+ /**
+ * Remove a endpoint resolver factory.
+ *
+ * @param endpointResolverFactory The endpoint resolver factory
+ */
+ void removeEndpointResolverFactory(EndpointResolverFactory endpointResolverFactory);
+
+ /**
+ * Returns the endpoint resolver factory associated with the given binding type.
+ * @param bindingType A binding type
+ * @return The endpoint resolver factory associated with the given binding type
+ */
+ EndpointResolverFactory getEndpointResolverFactory(Class<?> bindingType);
+
+}
Propchange: incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/endpointresolver/EndpointResolverFactoryExtensionPoint.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/endpointresolver/EndpointResolverFactoryExtensionPoint.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
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?rev=664316&r1=664315&r2=664316&view=diff
==============================================================================
--- 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 Sat Jun 7 03:52:09 2008
@@ -111,7 +111,6 @@
if (loaded)
return;
- loadProviderFactories(EndpointProviderFactory.class);
loadProviderFactories(BindingProviderFactory.class);
loadProviderFactories(ImplementationProviderFactory.class);
loadProviderFactories(PolicyProviderFactory.class);
@@ -173,15 +172,6 @@
new LazyPolicyProviderFactory(registry, modelTypeName, factoryDeclaration);
factoryExtensionPoint.addProviderFactory(factory);
factories.add(factory);
- } else if (factoryClass == EndpointProviderFactory.class) {
- // Load a policy provider factory
- String modelTypeName = attributes.get("model");
-
- // Create a provider factory wrapper and register it
- EndpointProviderFactory factory =
- new LazyEndpointProviderFactory(registry, modelTypeName, factoryDeclaration);
- factoryExtensionPoint.addProviderFactory(factory);
- factories.add(factory);
}
}
return factories;
@@ -369,56 +359,5 @@
}
}
-
- /**
- * A wrapper around an endpoint provider factory allowing lazy
- * loading and initialization of endpoint providers.
- */
- private class LazyEndpointProviderFactory implements EndpointProviderFactory {
- private ExtensionPointRegistry registry;
- private String modelTypeName;
- private ServiceDeclaration providerClass;
- private EndpointProviderFactory factory;
- private Class modelType;
-
- private LazyEndpointProviderFactory(ExtensionPointRegistry registry,
- String modelTypeName,
- ServiceDeclaration providerClass) {
- this.registry = registry;
- this.modelTypeName = modelTypeName;
- this.providerClass = providerClass;
- }
-
- @SuppressWarnings("unchecked")
- private EndpointProviderFactory getFactory() {
- if (factory == null) {
- try {
- Class<EndpointProviderFactory> factoryClass = (Class<EndpointProviderFactory>)providerClass.loadClass();
- Constructor<EndpointProviderFactory> constructor =
- factoryClass.getConstructor(ExtensionPointRegistry.class);
- factory = constructor.newInstance(registry);
- } catch (Exception e) {
- throw new IllegalStateException(e);
- }
- }
- return factory;
- }
-
- public EndpointProvider createEndpointProvider(Endpoint endpoint) {
- return getFactory().createEndpointProvider(endpoint);
- }
-
- public Class getModelType() {
- if (modelType == null) {
- try {
- modelType = providerClass.loadClass(modelTypeName);
- } catch (Exception e) {
- throw new IllegalStateException(e);
- }
- }
- return modelType;
- }
-
- }
}
Modified: incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/runtime/RuntimeComponentReference.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/runtime/RuntimeComponentReference.java?rev=664316&r1=664315&r2=664316&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/runtime/RuntimeComponentReference.java (original)
+++ incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/runtime/RuntimeComponentReference.java Sat Jun 7 03:52:09 2008
@@ -24,9 +24,9 @@
import org.apache.tuscany.sca.assembly.Binding;
import org.apache.tuscany.sca.assembly.ComponentReference;
import org.apache.tuscany.sca.assembly.Endpoint;
+import org.apache.tuscany.sca.endpointresolver.EndpointResolver;
import org.apache.tuscany.sca.interfacedef.Operation;
import org.apache.tuscany.sca.invocation.Invoker;
-import org.apache.tuscany.sca.provider.EndpointProvider;
import org.apache.tuscany.sca.provider.PolicyProvider;
import org.apache.tuscany.sca.provider.ReferenceBindingProvider;
@@ -72,22 +72,22 @@
void setBindingProvider(Binding binding, ReferenceBindingProvider bindingProvider);
/**
- * Returns the endpoint provider associated with this
+ * Returns the endpoint resolver associated with this
* component reference and the given endpoint.
*
* @param endpont The assembly model endpoint
- * @return The enpoint provider
+ * @return The enpoint resolver
*/
- EndpointProvider getEndpointProvider(Endpoint endpoint);
+ EndpointResolver getEndpointResolver(Endpoint endpoint);
/**
- * Sets the endpoint provider associated with this
+ * Sets the endpoint resolver associated with this
* component reference and the given endpoint.
*
* @param binding The assembly model binding
* @param bindingProvider The runtime reference binding provider
*/
- void setEndpointProvider(Endpoint endpoint, EndpointProvider endpointProvider);
+ void setEndpointResolver(Endpoint endpoint, EndpointResolver endpointResolver);
/**
* Add a policy provider for the given binding to the reference
Added: incubator/tuscany/java/sca/modules/core-spi/src/main/resources/META-INF/services/org.apache.tuscany.sca.endpointresolver.EndpointResolverFactoryExtensionPoint
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core-spi/src/main/resources/META-INF/services/org.apache.tuscany.sca.endpointresolver.EndpointResolverFactoryExtensionPoint?rev=664316&view=auto
==============================================================================
--- incubator/tuscany/java/sca/modules/core-spi/src/main/resources/META-INF/services/org.apache.tuscany.sca.endpointresolver.EndpointResolverFactoryExtensionPoint (added)
+++ incubator/tuscany/java/sca/modules/core-spi/src/main/resources/META-INF/services/org.apache.tuscany.sca.endpointresolver.EndpointResolverFactoryExtensionPoint Sat Jun 7 03:52:09 2008
@@ -0,0 +1,18 @@
+# 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.
+
+org.apache.tuscany.sca.endpointresolver.DefaultEndpointResolverFactoryExtensionPoint
Modified: incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/CompositeActivatorImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/CompositeActivatorImpl.java?rev=664316&r1=664315&r2=664316&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/CompositeActivatorImpl.java (original)
+++ incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/CompositeActivatorImpl.java Sat Jun 7 03:52:09 2008
@@ -49,13 +49,14 @@
import org.apache.tuscany.sca.core.scope.ScopeContainer;
import org.apache.tuscany.sca.core.scope.ScopeRegistry;
import org.apache.tuscany.sca.core.scope.ScopedRuntimeComponent;
+import org.apache.tuscany.sca.endpointresolver.EndpointResolver;
+import org.apache.tuscany.sca.endpointresolver.EndpointResolverFactory;
+import org.apache.tuscany.sca.endpointresolver.EndpointResolverFactoryExtensionPoint;
import org.apache.tuscany.sca.interfacedef.InterfaceContract;
import org.apache.tuscany.sca.interfacedef.InterfaceContractMapper;
import org.apache.tuscany.sca.interfacedef.java.JavaInterfaceFactory;
import org.apache.tuscany.sca.invocation.MessageFactory;
import org.apache.tuscany.sca.provider.BindingProviderFactory;
-import org.apache.tuscany.sca.provider.EndpointProvider;
-import org.apache.tuscany.sca.provider.EndpointProviderFactory;
import org.apache.tuscany.sca.provider.ImplementationProvider;
import org.apache.tuscany.sca.provider.ImplementationProviderFactory;
import org.apache.tuscany.sca.provider.PolicyProvider;
@@ -85,6 +86,7 @@
private final WorkScheduler workScheduler;
private final RuntimeWireProcessor wireProcessor;
private final ProviderFactoryExtensionPoint providerFactories;
+ private final EndpointResolverFactoryExtensionPoint endpointResolverFactories;
private final RequestContextFactory requestContextFactory;
private final ProxyFactory proxyFactory;
@@ -114,6 +116,7 @@
RequestContextFactory requestContextFactory,
ProxyFactory proxyFactory,
ProviderFactoryExtensionPoint providerFactories,
+ EndpointResolverFactoryExtensionPoint endpointResolverFactories,
StAXArtifactProcessorExtensionPoint processors,
ConversationManager conversationManager) {
this.assemblyFactory = assemblyFactory;
@@ -123,6 +126,7 @@
this.workScheduler = workScheduler;
this.wireProcessor = wireProcessor;
this.providerFactories = providerFactories;
+ this.endpointResolverFactories = endpointResolverFactories;
this.javaInterfaceFactory = javaInterfaceFactory;
this.requestContextFactory = requestContextFactory;
this.proxyFactory = proxyFactory;
@@ -147,7 +151,7 @@
// way the builder is written it's difficult to get at it
endpoint.setSourceComponent(component);
- addEndpointProvider(component, ref, endpoint);
+ addEndpointResolver(component, ref, endpoint);
}
}
@@ -202,37 +206,35 @@
* @param reference
* @param binding
*/
- private EndpointProvider addEndpointProvider(RuntimeComponent component,
+ private EndpointResolver addEndpointResolver(RuntimeComponent component,
RuntimeComponentReference reference,
Endpoint endpoint){
- // only create provides for unresolved endpoint currently
+ // only create endpoint resolvers for unresolved endpoints currently
// this will also prevent a wire from being created later
if (!endpoint.isUnresolved()){
return null;
}
- EndpointProviderFactory providerFactory =
- (EndpointProviderFactory)providerFactories.getProviderFactory(endpoint.getClass());
+ // This souldn't happen as the endpoint resolver extension point is in core-spi but
+ // just in case returning null here will mean that no wire is created and calling
+ // the reference will fail with NPE
+ if (endpointResolverFactories == null){
+ return null;
+ }
- if (providerFactory != null) {
+ EndpointResolverFactory<Endpoint> resolverFactory =
+ (EndpointResolverFactory<Endpoint>)endpointResolverFactories.getEndpointResolverFactory(endpoint.getClass());
+
+ if (resolverFactory != null) {
@SuppressWarnings("unchecked")
- EndpointProvider endpointProvider =
- providerFactory.createEndpointProvider(endpoint);
- if (endpointProvider != null) {
- ((RuntimeComponentReference)reference).setEndpointProvider(endpoint, endpointProvider);
+ EndpointResolver endpointResolver =
+ resolverFactory.createEndpointResolver(endpoint, null);
+ if (endpointResolver != null) {
+ ((RuntimeComponentReference)reference).setEndpointResolver(endpoint, endpointResolver);
}
- /* TODO - should this get done here for endpoints or in the endpoint itself?
- for (PolicyProviderFactory f : providerFactories.getPolicyProviderFactories()) {
- PolicyProvider policyProvider = f.createReferencePolicyProvider(component, reference, binding);
- if (policyProvider != null) {
- reference.addPolicyProvider(binding, policyProvider);
- }
- }
- */
-
- return endpointProvider;
+ return endpointResolver;
} else {
// TODO - for the time being allow the lack of an endpoint provider to be the
// switch to turn off endpoint processing
@@ -300,7 +302,7 @@
private void addReferenceEndpointWire(Component component, ComponentReference reference, Endpoint endpoint) {
// only deal with unresolved endpoints as, to prevent breaking changes, targets that are resolved
// at build time are still represented as bindings in the binding list
- if (((RuntimeComponentReference)reference).getEndpointProvider(endpoint) == null){
+ if (((RuntimeComponentReference)reference).getEndpointResolver(endpoint) == null){
// no endpoint provider has previously been created so don't create the
// wire
return;
@@ -573,28 +575,27 @@
}
RuntimeComponentReference runtimeRef = ((RuntimeComponentReference)reference);
runtimeRef.setComponent(runtimeComponent);
- for (Binding binding : reference.getBindings()) {
- final ReferenceBindingProvider bindingProvider = runtimeRef.getBindingProvider(binding);
- if (bindingProvider != null) {
- // Allow bindings to add shutdown hooks. Requires RuntimePermission shutdownHooks in policy.
+
+ for (Endpoint endpoint : reference.getEndpoints()) {
+ final EndpointResolver endpointResolver = runtimeRef.getEndpointResolver(endpoint);
+ if (endpointResolver != null) {
+ // Allow endpoint resolvers to do any startup reference manipulation
AccessController.doPrivileged(new PrivilegedAction<Object>() {
public Object run() {
- bindingProvider.start();
+ endpointResolver.start();
return null;
}
});
}
}
- for (Endpoint endpoint : reference.getEndpoints()) {
- final EndpointProvider endpointProvider = runtimeRef.getEndpointProvider(endpoint);
- if (endpointProvider != null) {
- // Allow endpoints to add shutdown hooks. Requires RuntimePermission shutdownHooks in policy.
- // TODO - do we need to allow this for endpoints. Leave as is for now
- // doesn't seem to be done this way if a provider is started
- // at wire creation time?
+
+ for (Binding binding : reference.getBindings()) {
+ final ReferenceBindingProvider bindingProvider = runtimeRef.getBindingProvider(binding);
+ if (bindingProvider != null) {
+ // Allow bindings to add shutdown hooks. Requires RuntimePermission shutdownHooks in policy.
AccessController.doPrivileged(new PrivilegedAction<Object>() {
public Object run() {
- endpointProvider.start();
+ bindingProvider.start();
return null;
}
});
@@ -684,6 +685,7 @@
logger.fine("Starting component reference: " + component.getURI() + "#" + reference.getName());
}
RuntimeComponentReference runtimeRef = ((RuntimeComponentReference)reference);
+
for (Binding binding : reference.getBindings()) {
final ReferenceBindingProvider bindingProvider = runtimeRef.getBindingProvider(binding);
if (bindingProvider != null) {
@@ -695,22 +697,20 @@
}
});
}
- }
+ }
+
for (Endpoint endpoint : reference.getEndpoints()) {
- final EndpointProvider endpointProvider = runtimeRef.getEndpointProvider(endpoint);
- if (endpointProvider != null) {
- // Allow endpoints to add shutdown hooks. Requires RuntimePermission shutdownHooks in policy.
- // TODO - do we need to allow this for endpoints. Leave as is for now
- // doesn't seem to be done this way if a provider is started
- // at wire creation time?
+ final EndpointResolver endpointResolver = runtimeRef.getEndpointResolver(endpoint);
+ if (endpointResolver != null) {
+ // Allow endpoint resolvers to do any shutdown reference manipulation
AccessController.doPrivileged(new PrivilegedAction<Object>() {
public Object run() {
- endpointProvider.stop();
+ endpointResolver.stop();
return null;
}
});
}
- }
+ }
}
Implementation implementation = component.getImplementation();
if (implementation instanceof Composite) {
Modified: incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/EndpointWireImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/EndpointWireImpl.java?rev=664316&r1=664315&r2=664316&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/EndpointWireImpl.java (original)
+++ incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/EndpointWireImpl.java Sat Jun 7 03:52:09 2008
@@ -24,11 +24,11 @@
import org.apache.tuscany.sca.assembly.Endpoint;
import org.apache.tuscany.sca.assembly.Reference;
+import org.apache.tuscany.sca.endpointresolver.EndpointResolver;
import org.apache.tuscany.sca.interfacedef.InterfaceContract;
import org.apache.tuscany.sca.interfacedef.Operation;
import org.apache.tuscany.sca.invocation.InvocationChain;
import org.apache.tuscany.sca.invocation.Message;
-import org.apache.tuscany.sca.provider.EndpointProvider;
import org.apache.tuscany.sca.provider.ReferenceBindingProvider;
import org.apache.tuscany.sca.runtime.EndpointReference;
import org.apache.tuscany.sca.runtime.RuntimeComponent;
@@ -44,7 +44,7 @@
private Endpoint endpoint;
private CompositeActivatorImpl compositeActivator;
- private EndpointProvider endpointProvider;
+ private EndpointResolver endpointResolver;
private EndpointReference source;
private RuntimeWire wire;
@@ -70,7 +70,7 @@
sourceContract);
RuntimeComponentReference runtimeRef = ((RuntimeComponentReference)endpoint.getSourceComponentReference());
- endpointProvider = runtimeRef.getEndpointProvider(endpoint);
+ endpointResolver = runtimeRef.getEndpointResolver(endpoint);
}
@@ -81,7 +81,7 @@
// this method should locate a viable target service and complete the
// endpoint configuration
- endpointProvider.start();
+ endpointResolver.resolve();
if (endpoint.isUnresolved()){
throw new ServiceUnavailableException("Unable to resolve service for component: " +
Modified: incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/RuntimeComponentReferenceImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/RuntimeComponentReferenceImpl.java?rev=664316&r1=664315&r2=664316&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/RuntimeComponentReferenceImpl.java (original)
+++ incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/RuntimeComponentReferenceImpl.java Sat Jun 7 03:52:09 2008
@@ -26,10 +26,10 @@
import org.apache.tuscany.sca.assembly.Binding;
import org.apache.tuscany.sca.assembly.Endpoint;
import org.apache.tuscany.sca.assembly.impl.ComponentReferenceImpl;
+import org.apache.tuscany.sca.endpointresolver.EndpointResolver;
import org.apache.tuscany.sca.interfacedef.Operation;
import org.apache.tuscany.sca.invocation.InvocationChain;
import org.apache.tuscany.sca.invocation.Invoker;
-import org.apache.tuscany.sca.provider.EndpointProvider;
import org.apache.tuscany.sca.provider.PolicyProvider;
import org.apache.tuscany.sca.provider.ReferenceBindingProvider;
import org.apache.tuscany.sca.runtime.RuntimeComponent;
@@ -45,8 +45,8 @@
private ArrayList<RuntimeWire> wires;
private HashMap<Binding, ReferenceBindingProvider> bindingProviders =
new HashMap<Binding, ReferenceBindingProvider>();
- private HashMap<Endpoint, EndpointProvider> endpointProviders =
- new HashMap<Endpoint, EndpointProvider>();
+ private HashMap<Endpoint, EndpointResolver> endpointResolvers =
+ new HashMap<Endpoint, EndpointResolver>();
private HashMap<Binding, List<PolicyProvider>> policyProviders = new HashMap<Binding, List<PolicyProvider>>();
private RuntimeComponent component;
@@ -80,12 +80,12 @@
bindingProviders.put(binding, bindingProvider);
}
- public EndpointProvider getEndpointProvider(Endpoint endpoint){
- return endpointProviders.get(endpoint);
+ public EndpointResolver getEndpointResolver(Endpoint endpoint){
+ return endpointResolvers.get(endpoint);
}
- public void setEndpointProvider(Endpoint endpoint, EndpointProvider endpointProvider){
- endpointProviders.put(endpoint, endpointProvider);
+ public void setEndpointResolver(Endpoint endpoint, EndpointResolver endpointResolver){
+ endpointResolvers.put(endpoint, endpointResolver);
}
public Invoker getInvoker(Binding binding, Operation operation) {
Added: incubator/tuscany/java/sca/modules/endpoint/src/main/java/org/apache/tuscany/sca/endpoint/impl/EndpointResolverFactoryImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/endpoint/src/main/java/org/apache/tuscany/sca/endpoint/impl/EndpointResolverFactoryImpl.java?rev=664316&view=auto
==============================================================================
--- incubator/tuscany/java/sca/modules/endpoint/src/main/java/org/apache/tuscany/sca/endpoint/impl/EndpointResolverFactoryImpl.java (added)
+++ incubator/tuscany/java/sca/modules/endpoint/src/main/java/org/apache/tuscany/sca/endpoint/impl/EndpointResolverFactoryImpl.java Sat Jun 7 03:52:09 2008
@@ -0,0 +1,49 @@
+/*
+ * 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.endpoint.impl;
+
+import org.apache.tuscany.sca.assembly.Binding;
+import org.apache.tuscany.sca.assembly.Endpoint;
+import org.apache.tuscany.sca.core.ExtensionPointRegistry;
+import org.apache.tuscany.sca.endpointresolver.EndpointResolver;
+import org.apache.tuscany.sca.endpointresolver.EndpointResolverFactory;
+
+/**
+ * The factory for creating endpoint Binding providers
+ *
+ * @version $Rev$ $Date$
+ */
+public class EndpointResolverFactoryImpl implements EndpointResolverFactory<Endpoint> {
+
+ private ExtensionPointRegistry extensionPoints;
+
+ public EndpointResolverFactoryImpl(ExtensionPointRegistry extensionPoints) {
+ this.extensionPoints = extensionPoints;
+ }
+
+ public EndpointResolver createEndpointResolver(Endpoint endpoint, Binding binding) {
+
+ return new EndpointResolverImpl(extensionPoints, endpoint);
+ }
+
+ public Class<Endpoint> getModelType() {
+ return Endpoint.class;
+ }
+}
Propchange: incubator/tuscany/java/sca/modules/endpoint/src/main/java/org/apache/tuscany/sca/endpoint/impl/EndpointResolverFactoryImpl.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/tuscany/java/sca/modules/endpoint/src/main/java/org/apache/tuscany/sca/endpoint/impl/EndpointResolverFactoryImpl.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: incubator/tuscany/java/sca/modules/endpoint/src/main/java/org/apache/tuscany/sca/endpoint/impl/EndpointResolverImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/endpoint/src/main/java/org/apache/tuscany/sca/endpoint/impl/EndpointResolverImpl.java?rev=664316&view=auto
==============================================================================
--- incubator/tuscany/java/sca/modules/endpoint/src/main/java/org/apache/tuscany/sca/endpoint/impl/EndpointResolverImpl.java (added)
+++ incubator/tuscany/java/sca/modules/endpoint/src/main/java/org/apache/tuscany/sca/endpoint/impl/EndpointResolverImpl.java Sat Jun 7 03:52:09 2008
@@ -0,0 +1,106 @@
+/*
+ * 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.endpoint.impl;
+
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.logging.Logger;
+
+import org.apache.tuscany.sca.assembly.Binding;
+import org.apache.tuscany.sca.assembly.Endpoint;
+import org.apache.tuscany.sca.core.ExtensionPointRegistry;
+import org.apache.tuscany.sca.endpointresolver.EndpointResolver;
+import org.apache.tuscany.sca.endpointresolver.EndpointResolverFactory;
+import org.apache.tuscany.sca.endpointresolver.EndpointResolverFactoryExtensionPoint;
+
+
+/**
+ * The endpoint resolver allows unresolved endpoints to be plumbed into
+ * the runtime start and message send processing as a hook to late resolution
+ * of target services
+ *
+ * @version $Rev$ $Date$
+ */
+public class EndpointResolverImpl implements EndpointResolver {
+
+ private final static Logger logger = Logger.getLogger(EndpointResolverImpl.class.getName());
+
+ private Endpoint endpoint;
+ private List<EndpointResolver> endpointResolvers = new ArrayList<EndpointResolver>();
+
+ public EndpointResolverImpl(ExtensionPointRegistry extensionPoints,
+ Endpoint endpoint) {
+ this.endpoint = endpoint;
+
+ EndpointResolverFactoryExtensionPoint resolverFactories =
+ extensionPoints.getExtensionPoint(EndpointResolverFactoryExtensionPoint.class);
+
+ for (Binding binding : endpoint.getCandidateBindings()){
+ EndpointResolverFactory resolverFactory = resolverFactories.getEndpointResolverFactory(binding.getClass());
+
+ // if the binding in question has a endpoint resolver factory they try and
+ // create an endpoint resolver
+ if (resolverFactory != null){
+ EndpointResolver resolver = resolverFactory.createEndpointResolver(endpoint, binding);
+
+ if (resolver != null){
+ endpointResolvers.add(resolver);
+ }
+ }
+ }
+ }
+
+ public void start(){
+ // do nothing
+ }
+
+ public void stop(){
+ // do nothing
+ }
+
+ public void resolve() {
+ if (endpoint.isUnresolved()){
+ // Resolve the endpoint binding here
+
+ // first do any general resolution that's required
+
+ // ask the bindings to resolve the endpoint one by one
+ for (EndpointResolver resolver : endpointResolvers){
+ resolver.resolve();
+ if (endpoint.isUnresolved() != true){
+ break;
+ }
+ }
+
+ if (endpoint.isUnresolved() != true){
+ // If we have to build the endpoint because we are matching
+ // intents and policies then we do that now. If the binding
+ // is just configured by setting its uri we can just do local binding
+ // configuration here
+
+ // EndpointBuilderImpl.build(endpoint);
+ } else {
+ // raise an exception saying the endpoint can't be resolved
+ }
+ }
+ }
+
+}
Propchange: incubator/tuscany/java/sca/modules/endpoint/src/main/java/org/apache/tuscany/sca/endpoint/impl/EndpointResolverImpl.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/tuscany/java/sca/modules/endpoint/src/main/java/org/apache/tuscany/sca/endpoint/impl/EndpointResolverImpl.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: incubator/tuscany/java/sca/modules/endpoint/src/main/resources/META-INF/services/org.apache.tuscany.sca.endpointresolver.EndpointResolverFactory
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/endpoint/src/main/resources/META-INF/services/org.apache.tuscany.sca.endpointresolver.EndpointResolverFactory?rev=664316&view=auto
==============================================================================
--- incubator/tuscany/java/sca/modules/endpoint/src/main/resources/META-INF/services/org.apache.tuscany.sca.endpointresolver.EndpointResolverFactory (added)
+++ incubator/tuscany/java/sca/modules/endpoint/src/main/resources/META-INF/services/org.apache.tuscany.sca.endpointresolver.EndpointResolverFactory Sat Jun 7 03:52:09 2008
@@ -0,0 +1,19 @@
+# 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.
+
+# Implementation class for the binding extension
+org.apache.tuscany.sca.endpoint.impl.EndpointResolverFactoryImpl;model=org.apache.tuscany.sca.assembly.Endpoint
Modified: incubator/tuscany/java/sca/modules/endpoint/src/test/java/org/apace/tuscany/sca/binding/sca/EndpointTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/endpoint/src/test/java/org/apace/tuscany/sca/binding/sca/EndpointTestCase.java?rev=664316&r1=664315&r2=664316&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/endpoint/src/test/java/org/apace/tuscany/sca/binding/sca/EndpointTestCase.java (original)
+++ incubator/tuscany/java/sca/modules/endpoint/src/test/java/org/apace/tuscany/sca/binding/sca/EndpointTestCase.java Sat Jun 7 03:52:09 2008
@@ -52,13 +52,13 @@
import org.apache.tuscany.sca.core.UtilityExtensionPoint;
import org.apache.tuscany.sca.core.assembly.CompositeActivator;
import org.apache.tuscany.sca.core.assembly.RuntimeAssemblyFactory;
-import org.apache.tuscany.sca.endpoint.impl.EndpointProviderFactoryImpl;
+import org.apache.tuscany.sca.endpoint.impl.EndpointResolverFactoryImpl;
+import org.apache.tuscany.sca.endpointresolver.EndpointResolver;
+import org.apache.tuscany.sca.endpointresolver.EndpointResolverFactory;
import org.apache.tuscany.sca.interfacedef.InterfaceContractMapper;
import org.apache.tuscany.sca.monitor.Monitor;
import org.apache.tuscany.sca.monitor.MonitorFactory;
import org.apache.tuscany.sca.policy.IntentAttachPointTypeFactory;
-import org.apache.tuscany.sca.provider.EndpointProvider;
-import org.apache.tuscany.sca.provider.EndpointProviderFactory;
import org.junit.BeforeClass;
import org.junit.Test;
@@ -194,12 +194,13 @@
Endpoint endpoint = ref.getEndpoints().get(0);
- EndpointProviderFactory factory = new EndpointProviderFactoryImpl(extensionPoints);
+ EndpointResolverFactory<Endpoint> factory = new EndpointResolverFactoryImpl(extensionPoints);
- EndpointProvider endpointProvider = factory.createEndpointProvider(endpoint);
+ EndpointResolver endpointResolver = factory.createEndpointResolver(endpoint, null);
- Assert.assertNotNull(endpointProvider);
-
+ Assert.assertNotNull(endpointResolver);
+
+
} catch(Exception ex) {
ex.printStackTrace();
System.out.println(ex.toString());
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?rev=664316&r1=664315&r2=664316&view=diff
==============================================================================
--- 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 Sat Jun 7 03:52:09 2008
@@ -28,6 +28,7 @@
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLOutputFactory;
+
import org.apache.tuscany.sca.assembly.AssemblyFactory;
import org.apache.tuscany.sca.assembly.Composite;
import org.apache.tuscany.sca.assembly.EndpointFactory;
@@ -78,6 +79,7 @@
import org.apache.tuscany.sca.core.scope.ScopeRegistryImpl;
import org.apache.tuscany.sca.core.scope.StatelessScopeContainerFactory;
import org.apache.tuscany.sca.definitions.SCADefinitions;
+import org.apache.tuscany.sca.endpointresolver.EndpointResolverFactoryExtensionPoint;
import org.apache.tuscany.sca.interfacedef.InterfaceContractMapper;
import org.apache.tuscany.sca.interfacedef.java.JavaInterfaceFactory;
import org.apache.tuscany.sca.invocation.MessageFactory;
@@ -131,6 +133,10 @@
// Create a provider factory extension point
ProviderFactoryExtensionPoint providerFactories =
registry.getExtensionPoint(ProviderFactoryExtensionPoint.class);
+
+ // Create a endpoint resolver factory extension point
+ EndpointResolverFactoryExtensionPoint endpointResolverFactories =
+ registry.getExtensionPoint(EndpointResolverFactoryExtensionPoint.class);
JavaInterfaceFactory javaInterfaceFactory =
registry.getExtensionPoint(ModelFactoryExtensionPoint.class).getFactory(JavaInterfaceFactory.class);
@@ -144,7 +150,7 @@
CompositeActivator compositeActivator =
new CompositeActivatorImpl(assemblyFactory, messageFactory, javaInterfaceFactory, scaBindingFactory,
mapper, scopeRegistry, workScheduler, wireProcessor, requestContextFactory,
- proxyFactory, providerFactories, processors, conversationManager);
+ proxyFactory, providerFactories, endpointResolverFactories, processors, conversationManager);
return compositeActivator;
}
Added: incubator/tuscany/java/sca/modules/runtime-tomcat/src/main/java/org/apache/tuscany/sca/runtime/tomcat/EndpointResolverFactoryImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/runtime-tomcat/src/main/java/org/apache/tuscany/sca/runtime/tomcat/EndpointResolverFactoryImpl.java?rev=664316&view=auto
==============================================================================
--- incubator/tuscany/java/sca/modules/runtime-tomcat/src/main/java/org/apache/tuscany/sca/runtime/tomcat/EndpointResolverFactoryImpl.java (added)
+++ incubator/tuscany/java/sca/modules/runtime-tomcat/src/main/java/org/apache/tuscany/sca/runtime/tomcat/EndpointResolverFactoryImpl.java Sat Jun 7 03:52:09 2008
@@ -0,0 +1,49 @@
+/*
+ * 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.runtime.tomcat;
+
+import org.apache.tuscany.sca.assembly.Binding;
+import org.apache.tuscany.sca.assembly.Endpoint;
+import org.apache.tuscany.sca.core.ExtensionPointRegistry;
+import org.apache.tuscany.sca.endpointresolver.EndpointResolver;
+import org.apache.tuscany.sca.endpointresolver.EndpointResolverFactory;
+
+/**
+ * The factory for creating endpoint Binding providers
+ *
+ * @version $Rev$ $Date$
+ */
+public class EndpointResolverFactoryImpl implements EndpointResolverFactory<Endpoint> {
+
+ private ExtensionPointRegistry extensionPoints;
+
+ public EndpointResolverFactoryImpl(ExtensionPointRegistry extensionPoints) {
+ this.extensionPoints = extensionPoints;
+ }
+
+ public EndpointResolver createEndpointResolver(Endpoint endpoint, Binding binding) {
+
+ return new EndpointResolverImpl(extensionPoints, endpoint);
+ }
+
+ public Class<Endpoint> getModelType() {
+ return Endpoint.class;
+ }
+}
Propchange: incubator/tuscany/java/sca/modules/runtime-tomcat/src/main/java/org/apache/tuscany/sca/runtime/tomcat/EndpointResolverFactoryImpl.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/tuscany/java/sca/modules/runtime-tomcat/src/main/java/org/apache/tuscany/sca/runtime/tomcat/EndpointResolverFactoryImpl.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: incubator/tuscany/java/sca/modules/runtime-tomcat/src/main/java/org/apache/tuscany/sca/runtime/tomcat/EndpointResolverImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/runtime-tomcat/src/main/java/org/apache/tuscany/sca/runtime/tomcat/EndpointResolverImpl.java?rev=664316&view=auto
==============================================================================
--- incubator/tuscany/java/sca/modules/runtime-tomcat/src/main/java/org/apache/tuscany/sca/runtime/tomcat/EndpointResolverImpl.java (added)
+++ incubator/tuscany/java/sca/modules/runtime-tomcat/src/main/java/org/apache/tuscany/sca/runtime/tomcat/EndpointResolverImpl.java Sat Jun 7 03:52:09 2008
@@ -0,0 +1,131 @@
+/*
+ * 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.runtime.tomcat;
+
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.logging.Logger;
+
+import org.apache.catalina.core.StandardContext;
+import org.apache.tuscany.sca.assembly.Binding;
+import org.apache.tuscany.sca.assembly.Component;
+import org.apache.tuscany.sca.assembly.Endpoint;
+import org.apache.tuscany.sca.assembly.builder.DefaultEndpointBuilder;
+import org.apache.tuscany.sca.core.ExtensionPointRegistry;
+import org.apache.tuscany.sca.endpointresolver.EndpointResolver;
+import org.apache.tuscany.sca.endpointresolver.EndpointResolverFactory;
+import org.apache.tuscany.sca.endpointresolver.EndpointResolverFactoryExtensionPoint;
+import org.apache.tuscany.sca.host.embedded.SCADomain;
+import org.apache.tuscany.sca.host.embedded.impl.DefaultSCADomain;
+import org.apache.tuscany.sca.host.webapp.WebAppServletHost;
+import org.apache.tuscany.sca.monitor.Monitor;
+import org.apache.tuscany.sca.monitor.Problem;
+
+
+/**
+ * The endpoint resolver allows unresolved endpoints to be plumbed into
+ * the runtime start and message send processing as a hook to late resolution
+ * of target services
+ *
+ * @version $Rev$ $Date$
+ */
+public class EndpointResolverImpl implements EndpointResolver {
+
+ private final static Logger logger = Logger.getLogger(EndpointResolverImpl.class.getName());
+
+ private Endpoint endpoint;
+ private List<EndpointResolver> endpointResolvers = new ArrayList<EndpointResolver>();
+
+ public EndpointResolverImpl(ExtensionPointRegistry extensionPoints,
+ Endpoint endpoint) {
+ this.endpoint = endpoint;
+
+ EndpointResolverFactoryExtensionPoint resolverFactories =
+ extensionPoints.getExtensionPoint(EndpointResolverFactoryExtensionPoint.class);
+
+ for (Binding binding : endpoint.getCandidateBindings()){
+ EndpointResolverFactory resolverFactory = resolverFactories.getEndpointResolverFactory(binding.getClass());
+
+ // if the binding in question has a endpoint resolver factory they try and
+ // create an endpoint resolver
+ if (resolverFactory != null){
+ EndpointResolver resolver = resolverFactory.createEndpointResolver(endpoint, binding);
+
+ if (resolver != null){
+ endpointResolvers.add(resolver);
+ }
+ }
+ }
+ }
+
+ public void start(){
+ // do nothing
+ }
+
+ public void resolve() {
+ if (endpoint.isUnresolved()){
+ logger.info("resolving endpoint: " + endpoint.getTargetName());
+
+ Component target = findTarget();
+ if (target != null) {
+ logger.info("endpoint target found: " + endpoint.getTargetName() + " component " + target);
+ resolveEndpoint(target);
+ } else {
+ logger.info("endpoint target not found: " + endpoint.getTargetName());
+ }
+
+ }
+ }
+
+ protected void resolveEndpoint(Component targetComponent) {
+
+ endpoint.setTargetComponent(targetComponent);
+ endpoint.setTargetComponentService(targetComponent.getServices().get(0)); // TODO real service
+
+ DefaultEndpointBuilder ebi = new DefaultEndpointBuilder(new Monitor() {
+ public void problem(Problem problem) {
+ logger.warning(problem.toString());
+ }});
+
+ ebi.build(endpoint);
+ }
+
+ protected Component findTarget() {
+ for (StandardContext sc : TuscanyHost.scaApps) {
+ SCADomain scaDomain = (SCADomain)sc.getServletContext().getAttribute(WebAppServletHost.SCA_DOMAIN_ATTRIBUTE);
+ if (scaDomain != null) {
+ Component component = ((DefaultSCADomain)scaDomain).getComponent(endpoint.getTargetName());
+ if ( component != null) {
+ return component;
+ }
+ }
+ }
+ return null;
+ }
+
+ public void stop() {
+ if (!endpoint.isUnresolved()){
+ // Currently the CompositeActivator stop() should take care of the providers and
+ // wires that have been added.
+ }
+ }
+
+}
Propchange: incubator/tuscany/java/sca/modules/runtime-tomcat/src/main/java/org/apache/tuscany/sca/runtime/tomcat/EndpointResolverImpl.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/tuscany/java/sca/modules/runtime-tomcat/src/main/java/org/apache/tuscany/sca/runtime/tomcat/EndpointResolverImpl.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: incubator/tuscany/java/sca/modules/runtime-tomcat/src/main/resources/META-INF/services/org.apache.tuscany.sca.endpointresolver.EndpointResolverFactory
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/runtime-tomcat/src/main/resources/META-INF/services/org.apache.tuscany.sca.endpointresolver.EndpointResolverFactory?rev=664316&view=auto
==============================================================================
--- incubator/tuscany/java/sca/modules/runtime-tomcat/src/main/resources/META-INF/services/org.apache.tuscany.sca.endpointresolver.EndpointResolverFactory (added)
+++ incubator/tuscany/java/sca/modules/runtime-tomcat/src/main/resources/META-INF/services/org.apache.tuscany.sca.endpointresolver.EndpointResolverFactory Sat Jun 7 03:52:09 2008
@@ -0,0 +1,19 @@
+# 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.
+
+# Implementation class for the binding extension
+org.apache.tuscany.sca.endpoint.impl.EndpointResolverFactoryImpl;model=org.apache.tuscany.sca.assembly.Endpoint