diff options
author | slaws <slaws@13f79535-47bb-0310-9956-ffa450edef68> | 2009-03-20 15:07:53 +0000 |
---|---|---|
committer | slaws <slaws@13f79535-47bb-0310-9956-ffa450edef68> | 2009-03-20 15:07:53 +0000 |
commit | b272cfd554a84b0537fe0de5dbfde41f8da3f688 (patch) | |
tree | fa6351e48c704693e605fcfc9e57bed57a9f5099 /java/sca/modules/core | |
parent | fce6ad4c30b15b4284a94e7a00e084bf18748cf2 (diff) |
Remove the old Endpoint support. It has been replaced by Endpoint2/EndpointReference2. The old EndpointReference is still waiting to be removed.
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@756512 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'java/sca/modules/core')
7 files changed, 7 insertions, 1756 deletions
diff --git a/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/impl/CompositeActivatorImpl.java b/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/impl/CompositeActivatorImpl.java deleted file mode 100644 index 67edf3ab9d..0000000000 --- a/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/impl/CompositeActivatorImpl.java +++ /dev/null @@ -1,1072 +0,0 @@ -/* - * 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.core.assembly.impl; - -import java.security.AccessController; -import java.security.PrivilegedAction; -import java.util.List; -import java.util.logging.Level; -import java.util.logging.Logger; - -import org.apache.tuscany.sca.assembly.AssemblyFactory; -import org.apache.tuscany.sca.assembly.Binding; -import org.apache.tuscany.sca.assembly.Component; -import org.apache.tuscany.sca.assembly.ComponentReference; -import org.apache.tuscany.sca.assembly.ComponentService; -import org.apache.tuscany.sca.assembly.Composite; -import org.apache.tuscany.sca.assembly.CompositeService; -import org.apache.tuscany.sca.assembly.Endpoint; -import org.apache.tuscany.sca.assembly.Implementation; -import org.apache.tuscany.sca.assembly.OptimizableBinding; -import org.apache.tuscany.sca.assembly.Reference; -import org.apache.tuscany.sca.assembly.Service; -import org.apache.tuscany.sca.context.ComponentContextFactory; -import org.apache.tuscany.sca.context.ContextFactoryExtensionPoint; -import org.apache.tuscany.sca.context.PropertyValueFactory; -import org.apache.tuscany.sca.context.RequestContextFactory; -import org.apache.tuscany.sca.core.ExtensionPointRegistry; -import org.apache.tuscany.sca.core.FactoryExtensionPoint; -import org.apache.tuscany.sca.core.UtilityExtensionPoint; -import org.apache.tuscany.sca.core.assembly.ActivationException; -import org.apache.tuscany.sca.core.assembly.CompositeActivator; -import org.apache.tuscany.sca.core.context.CompositeContext; -import org.apache.tuscany.sca.core.context.impl.CompositeContextImpl; -import org.apache.tuscany.sca.core.conversation.ConversationManager; -import org.apache.tuscany.sca.core.invocation.ExtensibleWireProcessor; -import org.apache.tuscany.sca.core.invocation.ProxyFactory; -import org.apache.tuscany.sca.core.scope.Scope; -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.core.scope.impl.ConversationalScopeContainer; -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.ImplementationProvider; -import org.apache.tuscany.sca.provider.ImplementationProviderFactory; -import org.apache.tuscany.sca.provider.PolicyProvider; -import org.apache.tuscany.sca.provider.PolicyProviderFactory; -import org.apache.tuscany.sca.provider.ProviderFactoryExtensionPoint; -import org.apache.tuscany.sca.provider.ReferenceBindingProvider; -import org.apache.tuscany.sca.provider.ServiceBindingProvider; -import org.apache.tuscany.sca.runtime.EndpointReference; -import org.apache.tuscany.sca.runtime.RuntimeComponent; -import org.apache.tuscany.sca.runtime.RuntimeComponentContext; -import org.apache.tuscany.sca.runtime.RuntimeComponentReference; -import org.apache.tuscany.sca.runtime.RuntimeComponentService; -import org.apache.tuscany.sca.runtime.RuntimeWire; -import org.apache.tuscany.sca.runtime.RuntimeWireProcessor; -import org.apache.tuscany.sca.runtime.RuntimeWireProcessorExtensionPoint; -import org.apache.tuscany.sca.work.WorkScheduler; - -/** - * @version $Rev$ $Date$ - */ -public class CompositeActivatorImpl implements CompositeActivator { - private static final Logger logger = Logger.getLogger(CompositeActivatorImpl.class.getName()); - - private final AssemblyFactory assemblyFactory; - private final MessageFactory messageFactory; - private final InterfaceContractMapper interfaceContractMapper; - private final ScopeRegistry scopeRegistry; - private final WorkScheduler workScheduler; - private final RuntimeWireProcessor wireProcessor; - private final ProviderFactoryExtensionPoint providerFactories; - private final EndpointResolverFactoryExtensionPoint endpointResolverFactories; - - private final ComponentContextFactory componentContextFactory; - private final RequestContextFactory requestContextFactory; - private final ProxyFactory proxyFactory; - private final JavaInterfaceFactory javaInterfaceFactory; - private final PropertyValueFactory propertyValueFactory; - - private final ConversationManager conversationManager; - - private final CompositeContext compositeContext; - - private Composite domainComposite; - - public CompositeActivatorImpl(ExtensionPointRegistry extensionPoints) { - this.compositeContext = new CompositeContextImpl(extensionPoints); - FactoryExtensionPoint factories = extensionPoints.getExtensionPoint(FactoryExtensionPoint.class); - this.assemblyFactory = factories.getFactory(AssemblyFactory.class); - this.messageFactory = factories.getFactory(MessageFactory.class); - UtilityExtensionPoint utilities = extensionPoints.getExtensionPoint(UtilityExtensionPoint.class); - this.interfaceContractMapper = utilities.getUtility(InterfaceContractMapper.class); - this.scopeRegistry = utilities.getUtility(ScopeRegistry.class); - this.workScheduler = utilities.getUtility(WorkScheduler.class); - this.wireProcessor = new ExtensibleWireProcessor(extensionPoints.getExtensionPoint(RuntimeWireProcessorExtensionPoint.class)); - this.providerFactories = extensionPoints.getExtensionPoint(ProviderFactoryExtensionPoint.class); - this.endpointResolverFactories = extensionPoints.getExtensionPoint(EndpointResolverFactoryExtensionPoint.class); - this.javaInterfaceFactory = compositeContext.getJavaInterfaceFactory(); - this.propertyValueFactory = factories.getFactory(PropertyValueFactory.class); - ContextFactoryExtensionPoint contextFactories = extensionPoints.getExtensionPoint(ContextFactoryExtensionPoint.class); - this.componentContextFactory = contextFactories.getFactory(ComponentContextFactory.class); - this.requestContextFactory = contextFactories.getFactory(RequestContextFactory.class); - proxyFactory = compositeContext.getProxyFactory(); - this.conversationManager = compositeContext.getConversationManager(); - } - - /** - * @see org.apache.tuscany.sca.core.assembly.CompositeActivator#activate(org.apache.tuscany.sca.runtime.RuntimeComponent, org.apache.tuscany.sca.runtime.RuntimeComponentReference) - */ - public void activate(RuntimeComponent component, RuntimeComponentReference ref) { - if (logger.isLoggable(Level.FINE)) { - logger.fine("Activating component reference: " + component.getURI() + "#" + ref.getName()); - } - resolveTargets(ref); - for (Binding binding : ref.getBindings()) { - addReferenceBindingProvider(component, ref, binding); - } - - for (Endpoint endpoint : ref.getEndpoints()){ - // TODO - source component should be set in the builder but the - // way the builder is written it's difficult to get at it - endpoint.setSourceComponent(component); - - addEndpointResolver(component, ref, endpoint); - } - } - - public void start(RuntimeComponent component, RuntimeComponentReference ref) { - synchronized (ref) { - resolveTargets(ref); - for (Binding binding : ref.getBindings()) { - ReferenceBindingProvider provider = ref.getBindingProvider(binding); - if (provider == null) { - provider = addReferenceBindingProvider(component, ref, binding); - } - if (provider != null) { - provider.start(); - } - addReferenceWire(component, ref, binding); - } - - // targets now have an endpoint representation. We can use this to - // look for unresolved endpoints using dummy wires for late resolution - for (Endpoint endpoint : ref.getEndpoints()){ - addReferenceEndpointWire(component, ref, endpoint); - } - } - } - - public void stop(Component component, ComponentReference reference) { - if (logger.isLoggable(Level.FINE)) { - logger.fine("Stopping component reference: " + component.getURI() + "#" + reference.getName()); - } - RuntimeComponentReference runtimeRef = ((RuntimeComponentReference)reference); - for (Binding binding : reference.getBindings()) { - ReferenceBindingProvider bindingProvider = runtimeRef.getBindingProvider(binding); - if (bindingProvider != null) { - bindingProvider.stop(); - } - } - } - - public void deactivate(RuntimeComponent component, RuntimeComponentReference ref) { - if (logger.isLoggable(Level.FINE)) { - logger.fine("Deactivating component reference: " + component.getURI() + "#" + ref.getName()); - } - removeReferenceWires(ref); - for (Binding binding : ref.getBindings()) { - removeReferenceBindingProvider(component, ref, binding); - } - - } - - /** - * @param component - * @param reference - * @param binding - */ - private EndpointResolver addEndpointResolver(RuntimeComponent component, - RuntimeComponentReference reference, - Endpoint endpoint){ - - // only create endpoint resolvers for unresolved endpoints currently - // this will also prevent a wire from being created later - if (!endpoint.isUnresolved()){ - return null; - } - - // 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; - } - - EndpointResolverFactory<Endpoint> resolverFactory = - (EndpointResolverFactory<Endpoint>)endpointResolverFactories.getEndpointResolverFactory(endpoint.getClass()); - - if (resolverFactory != null) { - EndpointResolver endpointResolver = - resolverFactory.createEndpointResolver(endpoint, null); - if (endpointResolver != null) { - ((RuntimeComponentReference)reference).setEndpointResolver(endpoint, endpointResolver); - } - - return endpointResolver; - } else { - // TODO - for the time being allow the lack of an endpoint provider to be the - // switch to turn off endpoint processing - return null; - //throw new IllegalStateException("Endpoint provider factory not found for class: " + endpoint.getClass().getName()); - } - } - - public void addReferenceBindingProviderForEndpoint(Endpoint endpoint){ - addReferenceBindingProvider((RuntimeComponent)endpoint.getSourceComponent(), - (RuntimeComponentReference)endpoint.getSourceComponentReference(), - endpoint.getSourceBinding()); - } - - /** - * @param component - * @param reference - * @param binding - */ - private ReferenceBindingProvider addReferenceBindingProvider(RuntimeComponent component, - RuntimeComponentReference reference, - Binding binding) { - BindingProviderFactory providerFactory = - (BindingProviderFactory)providerFactories.getProviderFactory(binding.getClass()); - if (providerFactory != null) { - @SuppressWarnings("unchecked") - ReferenceBindingProvider bindingProvider = - providerFactory.createReferenceBindingProvider((RuntimeComponent)component, - (RuntimeComponentReference)reference, - binding); - if (bindingProvider != null) { - ((RuntimeComponentReference)reference).setBindingProvider(binding, bindingProvider); - } - for (PolicyProviderFactory f : providerFactories.getPolicyProviderFactories()) { - PolicyProvider policyProvider = f.createReferencePolicyProvider(component, reference, binding); - if (policyProvider != null) { - reference.addPolicyProvider(binding, policyProvider); - } - } - - return bindingProvider; - } else { - throw new IllegalStateException("Provider factory not found for class: " + binding.getClass().getName()); - } - } - - /** - * @param reference - */ - private void resolveTargets(RuntimeComponentReference reference) { - // The code that used to be here to resolved unresolved targets is now - // at the bottom of BaseWireBuilder.connectComponentReferences() - } - - /** - * Create the runtime wires for a reference endpoint. Currently this method - * only deals with the late binding case and creates a dummy wire that - * will use the Endpoint to resolve the target at the point when the - * wire chains are created. - * - * @param component - * @param reference - * @param binding - */ - 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).getEndpointResolver(endpoint) == null){ - // no endpoint provider has previously been created so don't create the - // wire - return; - } - - // TODO: TUSCANY-2580: avoid NPE if the InterfaceCOntract is null - Reference ctref = endpoint.getSourceComponentReference().getReference(); - if (ctref != null && ctref.getInterfaceContract() == null) { - ctref.setInterfaceContract(reference.getInterfaceContract()); - } - - RuntimeWire wire = new EndpointWireImpl(endpoint, this); - - RuntimeComponentReference runtimeRef = (RuntimeComponentReference)reference; - runtimeRef.getRuntimeWires().add(wire); - } - - - /** - * Create the runtime wires for a reference binding - * - * @param component - * @param reference - * @param binding - */ - private void addReferenceWire(Component component, ComponentReference reference, Binding binding) { - if (!(reference instanceof RuntimeComponentReference)) { - return; - } - - // create wire if binding has an endpoint - Component targetComponent = null; - ComponentService targetComponentService = null; - Binding targetBinding = null; - - if (binding instanceof OptimizableBinding) { - OptimizableBinding endpoint = (OptimizableBinding)binding; - targetComponent = endpoint.getTargetComponent(); - targetComponentService = endpoint.getTargetComponentService(); - targetBinding = endpoint.getTargetBinding(); - // FIXME: TUSCANY-2136, For unresolved binding, don't add wire. Is it the right solution? - if (!reference.isCallback() && binding.getURI() == null && targetComponentService == null) { - return; - } - } - - // create a forward wire, either static or dynamic - addReferenceWire(component, reference, binding, targetComponent, targetComponentService, targetBinding); - - /* - // if static forward wire (not from self-reference), try to create a static callback wire - if (targetComponentService != null && !reference.getName().startsWith("$self$.")) { - ComponentReference callbackReference = targetComponentService.getCallbackReference(); - if (callbackReference != null) { - Binding callbackBinding = null; - Binding callbackServiceBinding = null; - // select a service callback binding that can be wired back to this component - for (Binding refBinding : callbackReference.getBindings()) { - // first look for a callback binding whose name matches the target binding name - if (refBinding.getName().equals(targetBinding.getName())) { - callbackBinding = refBinding; - break; - } - } - // see if there is a matching reference callback binding - if (callbackBinding != null) { - callbackServiceBinding = reference.getCallbackService().getBinding(callbackBinding.getClass()); - } - // if there isn't an end-to-end match, try again based on target binding type - if (callbackBinding == null || callbackServiceBinding == null) { - callbackBinding = callbackReference.getBinding(targetBinding.getClass()); - if (callbackBinding != null) { - callbackServiceBinding = reference.getCallbackService().getBinding(callbackBinding.getClass()); - } - } - if (callbackBinding != null && callbackServiceBinding != null) { - // end-to-end match, so create a static callback wire as well as the static forward wire - - addReferenceWire(targetComponent, callbackReference, callbackBinding, component, reference - .getCallbackService(), callbackServiceBinding); - } else { - // no end-to-end match, so do not create a static callback wire - } - } - } - */ - } - - public void addReferenceWireForEndpoint(Endpoint endpoint){ - addReferenceWire(endpoint.getSourceComponent(), - endpoint.getSourceComponentReference(), - endpoint.getSourceBinding(), - endpoint.getTargetComponent(), - endpoint.getTargetComponentService(), - endpoint.getTargetBinding()); - } - /** - * Create a reference wire for a forward call or a callback - * @param reference - * @param service - * @param serviceBinding - * @param component - * @param referenceBinding - */ - private RuntimeWire addReferenceWire(Component refComponent, - ComponentReference reference, - Binding refBinding, - Component serviceComponent, - ComponentService service, - Binding serviceBinding) { - RuntimeComponentReference runtimeRef = (RuntimeComponentReference)reference; - InterfaceContract bindingContract = getInterfaceContract(reference, refBinding); - - // Use the interface contract of the reference on the component type - Reference componentTypeRef = reference.getReference(); - - InterfaceContract sourceContract; - if (componentTypeRef == null || componentTypeRef.getInterfaceContract() == null) { - sourceContract = reference.getInterfaceContract(); - } else { - sourceContract = componentTypeRef.getInterfaceContract(); - } - - sourceContract = sourceContract.makeUnidirectional(false); - - EndpointReference wireSource = - new EndpointReferenceImpl((RuntimeComponent)refComponent, reference, refBinding, sourceContract); - ComponentService callbackService = reference.getCallbackService(); - if (callbackService != null) { - // select a reference callback binding to pass with invocations on this wire - Binding callbackBinding = null; - for (Binding binding : callbackService.getBindings()) { - // first look for a callback binding whose name matches the reference binding name - if (refBinding.getName().startsWith(binding.getName())) { - callbackBinding = binding; - break; - } - } - // if no callback binding found, try again based on reference binding type - if (callbackBinding == null) { - callbackBinding = callbackService.getBinding(refBinding.getClass()); - } - InterfaceContract callbackContract = callbackService.getInterfaceContract(); - EndpointReference callbackEndpoint = - new EndpointReferenceImpl((RuntimeComponent)refComponent, callbackService, callbackBinding, - callbackContract); - wireSource.setCallbackEndpoint(callbackEndpoint); - } - - EndpointReference wireTarget = - new EndpointReferenceImpl((RuntimeComponent)serviceComponent, service, serviceBinding, bindingContract); - - // TUSCANY-2029 - We should use the URI of the serviceBinding because the target may be a Component in a - // nested composite. - if (serviceBinding != null) { - wireTarget.setURI(serviceBinding.getURI()); - } - - RuntimeWire wire = - new RuntimeWireImpl(wireSource, wireTarget, interfaceContractMapper, workScheduler, wireProcessor, - messageFactory, conversationManager); - runtimeRef.getRuntimeWires().add(wire); - - return wire; - } - - private void addImplementationProvider(RuntimeComponent component, Implementation implementation) { - ImplementationProviderFactory providerFactory = - (ImplementationProviderFactory)providerFactories.getProviderFactory(implementation.getClass()); - if (providerFactory != null) { - @SuppressWarnings("unchecked") - ImplementationProvider implementationProvider = - providerFactory.createImplementationProvider(component, implementation); - if (implementationProvider != null) { - component.setImplementationProvider(implementationProvider); - } - } else { - throw new IllegalStateException("Provider factory not found for class: " + implementation.getClass() - .getName()); - } - for (PolicyProviderFactory f : providerFactories.getPolicyProviderFactories()) { - PolicyProvider policyProvider = f.createImplementationPolicyProvider(component, implementation); - if (policyProvider != null) { - component.addPolicyProvider(policyProvider); - } - } - - } - - private void removeImplementationProvider(RuntimeComponent component) { - component.setImplementationProvider(null); - component.getPolicyProviders().clear(); - } - - /** - * @param component - * @param service - * @param binding - */ - private ServiceBindingProvider addServiceBindingProvider(RuntimeComponent component, - RuntimeComponentService service, - Binding binding) { - BindingProviderFactory providerFactory = - (BindingProviderFactory)providerFactories.getProviderFactory(binding.getClass()); - if (providerFactory != null) { - @SuppressWarnings("unchecked") - ServiceBindingProvider bindingProvider = - providerFactory.createServiceBindingProvider((RuntimeComponent)component, - (RuntimeComponentService)service, - binding); - if (bindingProvider != null) { - ((RuntimeComponentService)service).setBindingProvider(binding, bindingProvider); - } - for (PolicyProviderFactory f : providerFactories.getPolicyProviderFactories()) { - PolicyProvider policyProvider = f.createServicePolicyProvider(component, service, binding); - if (policyProvider != null) { - service.addPolicyProvider(binding, policyProvider); - } - } - return bindingProvider; - } else { - throw new IllegalStateException("Provider factory not found for class: " + binding.getClass().getName()); - } - } - - private void removeServiceBindingProvider(RuntimeComponent component, - RuntimeComponentService service, - Binding binding) { - service.setBindingProvider(binding, null); - for (Binding b : service.getBindings()) { - List<PolicyProvider> pps = service.getPolicyProviders(b); - if (pps != null) { - pps.clear(); - } - } - } - - private void removeReferenceBindingProvider(RuntimeComponent component, - RuntimeComponentReference reference, - Binding binding) { - reference.setBindingProvider(binding, null); - for (Binding b : reference.getBindings()) { - List<PolicyProvider> pps = reference.getPolicyProviders(b); - if (pps != null) { - pps.clear(); - } - } - } - - public void start(Composite composite) { - if (logger.isLoggable(Level.FINE)) { - logger.fine("Starting composite: " + composite.getName()); - } - for (Component component : composite.getComponents()) { - start(component); - } - } - - public void stop(Composite composite) { - if (logger.isLoggable(Level.FINE)) { - logger.fine("Stopping composite: " + composite.getName()); - } - for (final Component component : composite.getComponents()) { - stop(component); - } - } - - public void start(Component component) { - if (logger.isLoggable(Level.FINE)) { - logger.fine("Starting component: " + component.getURI()); - } - RuntimeComponent runtimeComponent = ((RuntimeComponent)component); - if(runtimeComponent.isStarted()) { - return; - } - - configureComponentContext(runtimeComponent); - - for (ComponentReference reference : component.getReferences()) { - if (logger.isLoggable(Level.FINE)) { - logger.fine("Starting component reference: " + component.getURI() + "#" + reference.getName()); - } - RuntimeComponentReference runtimeRef = ((RuntimeComponentReference)reference); - runtimeRef.setComponent(runtimeComponent); - - 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() { - endpointResolver.start(); - return null; - } - }); - } - } - - 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() { - bindingProvider.start(); - return null; - } - }); - } - } - } - - for (ComponentService service : component.getServices()) { - if (logger.isLoggable(Level.FINE)) { - logger.fine("Starting component service: " + component.getURI() + "#" + service.getName()); - } - RuntimeComponentService runtimeService = (RuntimeComponentService)service; - for (Binding binding : service.getBindings()) { - final ServiceBindingProvider bindingProvider = runtimeService.getBindingProvider(binding); - if (bindingProvider != null) { - // bindingProvider.start(); - // Allow bindings to add shutdown hooks. Requires RuntimePermission shutdownHooks in policy. - AccessController.doPrivileged(new PrivilegedAction<Object>() { - public Object run() { - bindingProvider.start(); - return null; - } - }); - } - } - } - - Implementation implementation = component.getImplementation(); - if (implementation instanceof Composite) { - start((Composite)implementation); - } else { - ImplementationProvider implementationProvider = runtimeComponent.getImplementationProvider(); - if (implementationProvider != null) { - implementationProvider.start(); - } - } - - if (component instanceof ScopedRuntimeComponent) { - ScopedRuntimeComponent scopedRuntimeComponent = (ScopedRuntimeComponent)component; - if (scopedRuntimeComponent.getScopeContainer() != null) { - scopedRuntimeComponent.getScopeContainer().start(); - } - } - - runtimeComponent.setStarted(true); - } - - /** - * @param runtimeComponent - */ - public void configureComponentContext(RuntimeComponent runtimeComponent) { - RuntimeComponentContext componentContext = (RuntimeComponentContext) componentContextFactory.createComponentContext(runtimeComponent); - runtimeComponent.setComponentContext(componentContext); - } - - /** - * Stop a component - */ - public void stop(Component component) { - if (!((RuntimeComponent)component).isStarted()) { - return; - } - if (logger.isLoggable(Level.FINE)) { - logger.fine("Stopping component: " + component.getURI()); - } - for (ComponentService service : component.getServices()) { - if (logger.isLoggable(Level.FINE)) { - logger.fine("Stopping component service: " + component.getURI() + "#" + service.getName()); - } - for (Binding binding : service.getBindings()) { - final ServiceBindingProvider bindingProvider = ((RuntimeComponentService)service).getBindingProvider(binding); - if (bindingProvider != null) { - // Allow bindings to read properties. Requires PropertyPermission read in security policy. - AccessController.doPrivileged(new PrivilegedAction<Object>() { - public Object run() { - bindingProvider.stop(); - return null; - } - }); - } - } - } - for (ComponentReference reference : component.getReferences()) { - if (logger.isLoggable(Level.FINE)) { - 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) { - // Allow bindings to read properties. Requires PropertyPermission read in security policy. - AccessController.doPrivileged(new PrivilegedAction<Object>() { - public Object run() { - bindingProvider.stop(); - return null; - } - }); - } - } - - for (Endpoint endpoint : reference.getEndpoints()) { - 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() { - endpointResolver.stop(); - return null; - } - }); - } - } - } - Implementation implementation = component.getImplementation(); - if (implementation instanceof Composite) { - stop((Composite)implementation); - } else { - final ImplementationProvider implementationProvider = ((RuntimeComponent)component).getImplementationProvider(); - if (implementationProvider != null) { - // Allow bindings to read properties. Requires PropertyPermission read in security policy. - AccessController.doPrivileged(new PrivilegedAction<Object>() { - public Object run() { - implementationProvider.stop(); - return null; - } - }); - } - } - - if (component instanceof ScopedRuntimeComponent) { - ScopedRuntimeComponent runtimeComponent = (ScopedRuntimeComponent)component; - if (runtimeComponent.getScopeContainer() != null && - runtimeComponent.getScopeContainer().getLifecycleState() != ScopeContainer.STOPPED) { - runtimeComponent.getScopeContainer().stop(); - } - } - - ((RuntimeComponent)component).setStarted(false); - } - - /** - * Get the effective interface contract for a reference binding - * - * @param reference - * @param binding - * @return - */ - private InterfaceContract getInterfaceContract(ComponentReference reference, Binding binding) { - InterfaceContract interfaceContract = reference.getInterfaceContract(); - ReferenceBindingProvider provider = ((RuntimeComponentReference)reference).getBindingProvider(binding); - if (provider != null) { - InterfaceContract bindingContract = provider.getBindingInterfaceContract(); - if (bindingContract != null) { - interfaceContract = bindingContract; - } - } - return interfaceContract.makeUnidirectional(false); - } - - /** - * Remove the runtime wires for a reference binding - * @param reference - */ - private void removeReferenceWires(ComponentReference reference) { - if (!(reference instanceof RuntimeComponentReference)) { - return; - } - // [rfeng] Comment out the following statements to avoid the on-demand activation - // RuntimeComponentReference runtimeRef = (RuntimeComponentReference)reference; - // runtimeRef.getRuntimeWires().clear(); - } - - /** - * Get the effective interface contract for the service binding - * - * @param service - * @param binding - * @return - */ - private InterfaceContract getInterfaceContract(ComponentService service, Binding binding) { - InterfaceContract interfaceContract = service.getInterfaceContract(); - - ServiceBindingProvider provider = ((RuntimeComponentService)service).getBindingProvider(binding); - if (provider != null) { - InterfaceContract bindingContract = provider.getBindingInterfaceContract(); - if (bindingContract != null) { - interfaceContract = bindingContract; - } - } - return interfaceContract.makeUnidirectional(false); - } - - /** - * Remove runtime wires for a service binding - * - * @param component - * @param service - */ - private void removeServiceWires(ComponentService service) { - if (!(service instanceof RuntimeComponentService)) { - return; - } - RuntimeComponentService runtimeService = (RuntimeComponentService)service; - runtimeService.getRuntimeWires().clear(); - } - - /** - * Create a service wire for a forward call or a callback - * @param service - * @param serviceBinding - * @param reference - * @param component - * @param referenceBinding - */ - private RuntimeWire addServiceWire(Component serviceComponent, ComponentService service, Binding serviceBinding) { - if (!(service instanceof RuntimeComponentService)) { - return null; - } - RuntimeComponentService runtimeService = (RuntimeComponentService)service; - - // FIXME: [rfeng] We might need a better way to get the impl interface contract - Service targetService = service.getService(); - if (targetService == null) { - targetService = service; - } - InterfaceContract targetContract = targetService.getInterfaceContract().makeUnidirectional(false); - - InterfaceContract sourceContract = getInterfaceContract(service, serviceBinding); - - EndpointReference wireSource = new EndpointReferenceImpl(null, null, serviceBinding, sourceContract); - - EndpointReference wireTarget = - new EndpointReferenceImpl((RuntimeComponent)serviceComponent, (RuntimeComponentService)service, - serviceBinding, targetContract); - - RuntimeWire wire = - new RuntimeWireImpl(wireSource, wireTarget, interfaceContractMapper, workScheduler, wireProcessor, - messageFactory, conversationManager); - runtimeService.getRuntimeWires().add(wire); - - return wire; - } - - public void activate(RuntimeComponent component, RuntimeComponentService service) { - if (service.getService() == null) { - if (logger.isLoggable(Level.WARNING)) { - logger.warning("Skipping component service not defined in the component type: " + component.getURI() - + "#" - + service.getName()); - } - return; - } - if (service.getService() instanceof CompositeService) { - return; - } - if (logger.isLoggable(Level.FINE)) { - logger.fine("Activating component service: " + component.getURI() + "#" + service.getName()); - } - - for (Binding binding : service.getBindings()) { - addServiceBindingProvider(component, service, binding); - addServiceWire(component, service, binding); - } - } - - public void deactivate(RuntimeComponent component, RuntimeComponentService service) { - if (logger.isLoggable(Level.FINE)) { - logger.fine("Deactivating component service: " + component.getURI() + "#" + service.getName()); - } - removeServiceWires(service); - for (Binding binding : service.getBindings()) { - removeServiceBindingProvider(component, service, binding); - } - } - - private void addScopeContainer(Component component) { - if (!(component instanceof ScopedRuntimeComponent)) { - return; - } - ScopedRuntimeComponent runtimeComponent = (ScopedRuntimeComponent)component; - ScopeContainer scopeContainer = scopeRegistry.getScopeContainer(runtimeComponent); - if (scopeContainer != null && scopeContainer.getScope() == Scope.CONVERSATION) { - conversationManager.addListener((ConversationalScopeContainer)scopeContainer); - } - runtimeComponent.setScopeContainer(scopeContainer); - } - - private void removeScopeContainer(Component component) { - if (!(component instanceof ScopedRuntimeComponent)) { - return; - } - ScopedRuntimeComponent runtimeComponent = (ScopedRuntimeComponent)component; - ScopeContainer scopeContainer = runtimeComponent.getScopeContainer(); - if(scopeContainer != null && scopeContainer.getScope() == Scope.CONVERSATION) { - conversationManager.removeListener((ConversationalScopeContainer) scopeContainer); - } - runtimeComponent.setScopeContainer(null); - } - - public void activateComponent(Component component) - throws ActivationException { - try { - if (logger.isLoggable(Level.FINE)) { - logger.fine("Activating component: " + component.getURI()); - } - - Implementation implementation = component.getImplementation(); - if (implementation instanceof Composite) { - activate((Composite) implementation); - } else if (implementation != null) { - addImplementationProvider((RuntimeComponent) component, - implementation); - addScopeContainer(component); - } - - for (ComponentService service : component.getServices()) { - activate((RuntimeComponent) component, - (RuntimeComponentService) service); - } - - for (ComponentReference reference : component.getReferences()) { - activate((RuntimeComponent) component, - (RuntimeComponentReference) reference); - } - } catch (Exception e) { - throw new ActivationException(e); - } - } - - public void deactivateComponent(Component component) - throws ActivationException { - try { - if (logger.isLoggable(Level.FINE)) { - logger.fine("Deactivating component: " + component.getURI()); - } - for (ComponentService service : component.getServices()) { - deactivate((RuntimeComponent) component, - (RuntimeComponentService) service); - } - - for (ComponentReference reference : component.getReferences()) { - deactivate((RuntimeComponent) component, - (RuntimeComponentReference) reference); - } - - Implementation implementation = component.getImplementation(); - if (implementation instanceof Composite) { - deactivate((Composite) implementation); - } else if (implementation != null) { - removeImplementationProvider((RuntimeComponent) component); - removeScopeContainer(component); - } - } catch (Exception e) { - throw new ActivationException(e); - } - } - - public void activate(Composite composite) throws ActivationException { - try { - if (logger.isLoggable(Level.FINE)) { - logger.fine("Activating composite: " + composite.getName()); - } - for (Component component : composite.getComponents()) { - if (logger.isLoggable(Level.FINE)) { - logger.fine("Activating component: " + component.getURI()); - } - - Implementation implementation = component.getImplementation(); - if (implementation instanceof Composite) { - activate((Composite)implementation); - } else if (implementation != null) { - addImplementationProvider((RuntimeComponent)component, implementation); - addScopeContainer(component); - } - - for (ComponentService service : component.getServices()) { - activate((RuntimeComponent)component, (RuntimeComponentService)service); - } - - for (ComponentReference reference : component.getReferences()) { - activate((RuntimeComponent)component, (RuntimeComponentReference)reference); - } - } - } catch (Exception e) { - throw new ActivationException(e); - } - } - - public void deactivate(Composite composite) throws ActivationException { - try { - if (logger.isLoggable(Level.FINE)) { - logger.fine("Deactivating composite: " + composite.getName()); - } - for (Component component : composite.getComponents()) { - if (logger.isLoggable(Level.FINE)) { - logger.fine("Deactivating component: " + component.getURI()); - } - for (ComponentService service : component.getServices()) { - deactivate((RuntimeComponent)component, (RuntimeComponentService)service); - } - - for (ComponentReference reference : component.getReferences()) { - deactivate((RuntimeComponent)component, (RuntimeComponentReference)reference); - } - - Implementation implementation = component.getImplementation(); - if (implementation instanceof Composite) { - deactivate((Composite)implementation); - } else if (implementation != null) { - removeImplementationProvider((RuntimeComponent)component); - removeScopeContainer(component); - } - } - } catch (Exception e) { - throw new ActivationException(e); - } - } - - /** - * @return the referenceHelper - */ - public CompositeContext getCompositeContext() { - return compositeContext; - } - - /** - * @return the domainComposite - */ - public Composite getDomainComposite() { - return domainComposite; - } - - /** - * @param domainComposite the domainComposite to set - */ - public void setDomainComposite(Composite domainComposite) { - this.domainComposite = domainComposite; - } - - public Component resolve(String componentURI) { - for (Composite composite : domainComposite.getIncludes()) { - Component component = resolve(composite, componentURI); - if (component != null) { - return component; - } - } - return null; - } - - public Component resolve(Composite composite, String componentURI) { - for (Component component : composite.getComponents()) { - String uri = component.getURI(); - if (uri.equals(componentURI)) { - return component; - } - if (componentURI.startsWith(uri)) { - Implementation implementation = component.getImplementation(); - if (!(implementation instanceof Composite)) { - return null; - } - return resolve((Composite)implementation, componentURI); - } - } - return null; - } - -} diff --git a/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/impl/CompositeActivatorImpl2.java b/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/impl/CompositeActivatorImpl2.java index f36c0ce301..de304ac3b5 100644 --- a/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/impl/CompositeActivatorImpl2.java +++ b/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/impl/CompositeActivatorImpl2.java @@ -55,7 +55,6 @@ 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.core.scope.impl.ConversationalScopeContainer; -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; @@ -90,7 +89,6 @@ public class CompositeActivatorImpl2 implements CompositeActivator { private final WorkScheduler workScheduler; private final RuntimeWireProcessor wireProcessor; private final ProviderFactoryExtensionPoint providerFactories; - private final EndpointResolverFactoryExtensionPoint endpointResolverFactories; private final ComponentContextFactory componentContextFactory; private final RequestContextFactory requestContextFactory; @@ -115,7 +113,6 @@ public class CompositeActivatorImpl2 implements CompositeActivator { this.workScheduler = utilities.getUtility(WorkScheduler.class); this.wireProcessor = new ExtensibleWireProcessor(extensionPoints.getExtensionPoint(RuntimeWireProcessorExtensionPoint.class)); this.providerFactories = extensionPoints.getExtensionPoint(ProviderFactoryExtensionPoint.class); - this.endpointResolverFactories = extensionPoints.getExtensionPoint(EndpointResolverFactoryExtensionPoint.class); this.javaInterfaceFactory = compositeContext.getJavaInterfaceFactory(); this.propertyValueFactory = factories.getFactory(PropertyValueFactory.class); ContextFactoryExtensionPoint contextFactories = extensionPoints.getExtensionPoint(ContextFactoryExtensionPoint.class); diff --git a/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/impl/EndpointWireImpl.java b/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/impl/EndpointWireImpl.java deleted file mode 100644 index 1e11c7062e..0000000000 --- a/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/impl/EndpointWireImpl.java +++ /dev/null @@ -1,191 +0,0 @@ -/* - * 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.core.assembly.impl; - -import java.lang.reflect.InvocationTargetException; -import java.util.List; - -import org.apache.tuscany.sca.assembly.Endpoint; -import org.apache.tuscany.sca.assembly.EndpointReference2; -import org.apache.tuscany.sca.assembly.Reference; -import org.apache.tuscany.sca.core.assembly.CompositeActivator; -import org.apache.tuscany.sca.core.invocation.impl.InvocationChainImpl; -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.ReferenceBindingProvider; -import org.apache.tuscany.sca.runtime.EndpointReference; -import org.apache.tuscany.sca.runtime.RuntimeComponent; -import org.apache.tuscany.sca.runtime.RuntimeComponentReference; -import org.apache.tuscany.sca.runtime.RuntimeWire; -import org.oasisopen.sca.ServiceUnavailableException; - -/** - * @version $Rev$ $Date$ - */ -public class EndpointWireImpl implements RuntimeWire { - - private Endpoint endpoint; - private CompositeActivatorImpl compositeActivator; - - private EndpointResolver endpointResolver; - private EndpointReference source; - private RuntimeWire wire; - private InvocationChain binidngInvocationChain; - - /** - * @param endpoint - */ - public EndpointWireImpl(Endpoint endpoint, CompositeActivator compositeActivator) { - super(); - this.endpoint = endpoint; - // TODO - improve the SPI to get rid of this cast - this.compositeActivator = (CompositeActivatorImpl)compositeActivator; - - // store source configuration as we have most of this now. We don't though know what the - // target is yet. - Reference componentTypeRef = endpoint.getSourceComponentReference().getReference(); - InterfaceContract sourceContract = - componentTypeRef == null ? endpoint.getSourceComponentReference().getInterfaceContract() : componentTypeRef.getInterfaceContract(); - sourceContract = sourceContract.makeUnidirectional(false); - - source = new EndpointReferenceImpl((RuntimeComponent)endpoint.getSourceComponent(), - endpoint.getSourceComponentReference(), - null, - sourceContract); - - RuntimeComponentReference runtimeRef = ((RuntimeComponentReference)endpoint.getSourceComponentReference()); - endpointResolver = runtimeRef.getEndpointResolver(endpoint); - - } - - public synchronized List<InvocationChain> getInvocationChains() { - // where late binding happens. Find the endpoint provider and - // ask it to do the endpoint resolution. - if (endpoint.isUnresolved()){ - - // this method should locate a viable target service and complete the - // endpoint configuration - endpointResolver.resolve(); - - if (endpoint.isUnresolved()){ - throw new ServiceUnavailableException("Unable to resolve service for component: " + - endpoint.getSourceComponent().getName() + - " reference: " + - endpoint.getSourceComponentReference().getName() + - " target: " + - endpoint.getTargetName()); - } - } - - if (wire == null){ - RuntimeComponentReference runtimeRef = ((RuntimeComponentReference)endpoint.getSourceComponentReference()); - - // add the resolved binding into the reference - runtimeRef.getBindings().add(endpoint.getSourceBinding()); - - // add a binding provider into the reference for the resolved binding - compositeActivator.addReferenceBindingProviderForEndpoint(endpoint); - - // extract the binding provider that has been created - ReferenceBindingProvider bindingProvider = runtimeRef.getBindingProvider(endpoint.getSourceBinding()); - - // start the binding provider - bindingProvider.start(); - - // create the wire - compositeActivator.addReferenceWireForEndpoint(endpoint); - - // extract the wire that has been created - wire = runtimeRef.getRuntimeWire(endpoint.getSourceBinding()); - } - - return wire.getInvocationChains(); - } - - public InvocationChain getInvocationChain(Operation operation) { - if (wire ==null){ - return null; - } else { - return wire.getInvocationChain(operation); - } - } - - public Object invoke(Message msg) throws InvocationTargetException { - // not called as the endpoint wire only appears on the reference side - return null; - } - - public Object invoke(Operation operation, Object[] args) throws InvocationTargetException { - // not called as the endpoint wire only appears on the reference side - return null; - } - - public Object invoke(Operation operation, Message msg) throws InvocationTargetException { - // not called as the endpoint wire only appears on the reference side - return null; - } - - - public EndpointReference getSource() { - return source; - } - - public EndpointReference getTarget() { - return null; - } - - public void setTarget(EndpointReference target) { - } - - public void rebuild() { - } - - public synchronized InvocationChain getBindingInvocationChain() { - if (binidngInvocationChain == null) { - if (source instanceof RuntimeComponentReference) { - binidngInvocationChain = new InvocationChainImpl(null, null, true); - } else { - binidngInvocationChain = new InvocationChainImpl(null, null, false); - } - } - return binidngInvocationChain; - } - - // TODO: TUSCANY-2580: give RuntimeComponentReferenceImpl a way to get at the endpoint - public Endpoint getEndpoint() { - return endpoint; - } - - /** - * @see java.lang.Object#clone() - */ - @Override - public Object clone() throws CloneNotSupportedException { - EndpointWireImpl copy = (EndpointWireImpl)super.clone(); - return copy; - } - - public EndpointReference2 getEndpointReference(){ - return null; - } -} diff --git a/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/impl/RuntimeComponentReferenceImpl.java b/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/impl/RuntimeComponentReferenceImpl.java index 994094ab23..dbdba54dc0 100644 --- a/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/impl/RuntimeComponentReferenceImpl.java +++ b/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/impl/RuntimeComponentReferenceImpl.java @@ -24,10 +24,8 @@ import java.util.HashMap; import java.util.List; import org.apache.tuscany.sca.assembly.Binding; -import org.apache.tuscany.sca.assembly.Endpoint; import org.apache.tuscany.sca.assembly.EndpointReference2; 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; @@ -45,9 +43,7 @@ import org.apache.tuscany.sca.runtime.RuntimeWire; public class RuntimeComponentReferenceImpl extends ComponentReferenceImpl implements RuntimeComponentReference { private ArrayList<RuntimeWire> wires; private HashMap<Binding, ReferenceBindingProvider> bindingProviders = - new HashMap<Binding, ReferenceBindingProvider>(); - private HashMap<Endpoint, EndpointResolver> endpointResolvers = - new HashMap<Endpoint, EndpointResolver>(); + new HashMap<Binding, ReferenceBindingProvider>(); private HashMap<Binding, List<PolicyProvider>> policyProviders = new HashMap<Binding, List<PolicyProvider>>(); private RuntimeComponent component; @@ -93,14 +89,6 @@ public class RuntimeComponentReferenceImpl extends ComponentReferenceImpl implem bindingProviders.put(binding, bindingProvider); } - public EndpointResolver getEndpointResolver(Endpoint endpoint){ - return endpointResolvers.get(endpoint); - } - - public void setEndpointResolver(Endpoint endpoint, EndpointResolver endpointResolver){ - endpointResolvers.put(endpoint, endpointResolver); - } - public Invoker getInvoker(Binding binding, Operation operation) { RuntimeWire wire = getRuntimeWire(binding); if (wire == null) { diff --git a/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/impl/RuntimeWireImpl.java b/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/impl/RuntimeWireImpl.java deleted file mode 100644 index a9ff97d770..0000000000 --- a/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/impl/RuntimeWireImpl.java +++ /dev/null @@ -1,466 +0,0 @@ -/* - * 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.core.assembly.impl; - -import java.lang.reflect.InvocationTargetException; -import java.util.ArrayList; -import java.util.List; - -import org.apache.tuscany.sca.assembly.Binding; -import org.apache.tuscany.sca.assembly.Component; -import org.apache.tuscany.sca.assembly.ComponentReference; -import org.apache.tuscany.sca.assembly.ComponentService; -import org.apache.tuscany.sca.assembly.Contract; -import org.apache.tuscany.sca.assembly.EndpointReference2; -import org.apache.tuscany.sca.core.conversation.ConversationManager; -import org.apache.tuscany.sca.core.invocation.NonBlockingInterceptor; -import org.apache.tuscany.sca.core.invocation.RuntimeWireInvoker; -import org.apache.tuscany.sca.core.invocation.impl.InvocationChainImpl; -import org.apache.tuscany.sca.interfacedef.InterfaceContract; -import org.apache.tuscany.sca.interfacedef.InterfaceContractMapper; -import org.apache.tuscany.sca.interfacedef.Operation; -import org.apache.tuscany.sca.invocation.Interceptor; -import org.apache.tuscany.sca.invocation.InvocationChain; -import org.apache.tuscany.sca.invocation.Invoker; -import org.apache.tuscany.sca.invocation.Message; -import org.apache.tuscany.sca.invocation.MessageFactory; -import org.apache.tuscany.sca.invocation.Phase; -import org.apache.tuscany.sca.provider.ImplementationProvider; -import org.apache.tuscany.sca.provider.PolicyProvider; -import org.apache.tuscany.sca.provider.PolicyProviderRRB; -import org.apache.tuscany.sca.provider.ReferenceBindingProvider; -import org.apache.tuscany.sca.provider.ReferenceBindingProviderRRB; -import org.apache.tuscany.sca.provider.ServiceBindingProvider; -import org.apache.tuscany.sca.provider.ServiceBindingProviderRRB; -import org.apache.tuscany.sca.runtime.EndpointReference; -import org.apache.tuscany.sca.runtime.RuntimeComponent; -import org.apache.tuscany.sca.runtime.RuntimeComponentReference; -import org.apache.tuscany.sca.runtime.RuntimeComponentService; -import org.apache.tuscany.sca.runtime.RuntimeWire; -import org.apache.tuscany.sca.runtime.RuntimeWireProcessor; -import org.apache.tuscany.sca.work.WorkScheduler; -import org.oasisopen.sca.ServiceRuntimeException; - -/** - * @version $Rev$ $Date$ - */ -public class RuntimeWireImpl implements RuntimeWire { - private EndpointReference wireSource; - private EndpointReference wireTarget; - - private transient RuntimeWireProcessor wireProcessor; - private transient InterfaceContractMapper interfaceContractMapper; - private transient WorkScheduler workScheduler; - private transient MessageFactory messageFactory; - private transient ConversationManager conversationManager; - private transient RuntimeWireInvoker invoker; - - // the following is a very simple cache that avoids re-cloning a wire - // when consecutive callbacks to the same endpoint are made - private EndpointReference lastCallback; - private RuntimeWire cachedWire; - private boolean wireReserved; - private RuntimeWireImpl clonedFrom; - - private List<InvocationChain> chains; - private InvocationChain bindingInvocationChain; - - /** - * @param source - * @param target - * @param interfaceContractMapper - * @param workScheduler - * @param wireProcessor - * @param messageFactory - * @param conversationManager - */ - public RuntimeWireImpl(EndpointReference source, - EndpointReference target, - InterfaceContractMapper interfaceContractMapper, - WorkScheduler workScheduler, - RuntimeWireProcessor wireProcessor, - MessageFactory messageFactory, - ConversationManager conversationManager) { - super(); - this.wireSource = source; - this.wireTarget = target; - this.interfaceContractMapper = interfaceContractMapper; - this.workScheduler = workScheduler; - this.wireProcessor = wireProcessor; - this.messageFactory = messageFactory; - this.conversationManager = conversationManager; - this.invoker = new RuntimeWireInvoker(this.messageFactory, this.conversationManager, this); - } - - public synchronized List<InvocationChain> getInvocationChains() { - if (chains == null) { - initInvocationChains(); - } - return chains; - } - - public synchronized InvocationChain getBindingInvocationChain() { - if (bindingInvocationChain == null) { - Contract source = wireSource.getContract(); - if (source instanceof RuntimeComponentReference) { - bindingInvocationChain = new InvocationChainImpl(null, null, true); - initReferenceBindingInvocationChains(); - } else { - bindingInvocationChain = new InvocationChainImpl(null, null, false); - initServiceBindingInvocationChains(); - } - } - return bindingInvocationChain; - } - - public InvocationChain getInvocationChain(Operation operation) { - for (InvocationChain chain : getInvocationChains()) { - Operation op = null; - if (wireSource.getContract() != null) { - // Reference chain - op = chain.getSourceOperation(); - } else { - // Service chain - op = chain.getTargetOperation(); - } - if (interfaceContractMapper.isCompatible(operation, op, op.getInterface().isRemotable())) { - return chain; - } - } - return null; - } - - public Object invoke(Message msg) throws InvocationTargetException { - return getBindingInvocationChain().getHeadInvoker().invoke(msg); - } - - public Object invoke(Operation operation, Object[] args) throws InvocationTargetException { - Message msg = messageFactory.createMessage(); - msg.setBody(args); - return invoker.invoke(operation, msg); - } - - public Object invoke(Operation operation, Message msg) throws InvocationTargetException { - return invoker.invoke(operation, msg); - } - - /** - * Initialize the invocation chains - */ - private void initInvocationChains() { - chains = new ArrayList<InvocationChain>(); - InterfaceContract sourceContract = wireSource.getInterfaceContract(); - InterfaceContract targetContract = wireTarget.getInterfaceContract(); - - Contract source = wireSource.getContract(); - if (source instanceof RuntimeComponentReference) { - // It's the reference wire - RuntimeComponentReference reference = (RuntimeComponentReference)wireSource.getContract(); - Binding refBinding = wireSource.getBinding(); - for (Operation operation : sourceContract.getInterface().getOperations()) { - Operation targetOperation = interfaceContractMapper.map(targetContract.getInterface(), operation); - if (targetOperation == null) { - throw new ServiceRuntimeException("No matching operation for " + operation.getName() - + " is found in reference " - + wireSource.getComponent().getURI() - + "#" - + reference.getName()); - } - InvocationChain chain = new InvocationChainImpl(operation, targetOperation, true); - if (operation.isNonBlocking()) { - addNonBlockingInterceptor(reference, refBinding, chain); - } - addReferenceBindingInterceptor(reference, refBinding, chain, operation); - chains.add(chain); - } - - } else { - // It's the service wire - RuntimeComponentService service = (RuntimeComponentService)wireTarget.getContract(); - RuntimeComponent serviceComponent = wireTarget.getComponent(); - Binding serviceBinding = wireTarget.getBinding(); - for (Operation operation : sourceContract.getInterface().getOperations()) { - Operation targetOperation = interfaceContractMapper.map(targetContract.getInterface(), operation); - if (targetOperation == null) { - throw new ServiceRuntimeException("No matching operation for " + operation.getName() - + " is found in service " - + serviceComponent.getURI() - + "#" - + service.getName()); - } - InvocationChain chain = new InvocationChainImpl(operation, targetOperation, false); - if (operation.isNonBlocking()) { - addNonBlockingInterceptor(service, serviceBinding, chain); - } - addServiceBindingInterceptor(service, serviceBinding, chain, operation); - addImplementationInterceptor(serviceComponent, service, chain, targetOperation); - chains.add(chain); - } - - } - wireProcessor.process(this); - } - - private void initReferenceBindingInvocationChains() { - RuntimeComponentReference reference = (RuntimeComponentReference)wireSource.getContract(); - Binding referenceBinding = wireSource.getBinding(); - - // add the binding interceptors to the reference binding wire - ReferenceBindingProvider provider = reference.getBindingProvider(referenceBinding); - if ((provider != null) && - (provider instanceof ReferenceBindingProviderRRB)){ - ((ReferenceBindingProviderRRB)provider).configureBindingChain(this); - } - - // add the policy interceptors to the service binding wire - // find out which policies are active - List<PolicyProvider> pps = ((RuntimeComponentReference)reference).getPolicyProviders(referenceBinding); - if (pps != null) { - for (PolicyProvider p : pps) { - if (p instanceof PolicyProviderRRB) { - Interceptor interceptor = ((PolicyProviderRRB)p).createBindingInterceptor(); - if (interceptor != null) { - bindingInvocationChain.addInterceptor(p.getPhase(), interceptor); - } - } - } - } - } - - private void initServiceBindingInvocationChains() { - RuntimeComponentService service = (RuntimeComponentService)wireTarget.getContract(); - Binding serviceBinding = wireTarget.getBinding(); - - // add the binding interceptors to the service binding wire - ServiceBindingProvider provider = service.getBindingProvider(serviceBinding); - if ((provider != null) && - (provider instanceof ServiceBindingProviderRRB)){ - ((ServiceBindingProviderRRB)provider).configureBindingChain(this); - } - - // add the policy interceptors to the service binding wire - List<PolicyProvider> pps = ((RuntimeComponentService)service).getPolicyProviders(serviceBinding); - if (pps != null) { - for (PolicyProvider p : pps) { - if (p instanceof PolicyProviderRRB) { - Interceptor interceptor = ((PolicyProviderRRB)p).createBindingInterceptor(); - if (interceptor != null) { - bindingInvocationChain.addInterceptor(p.getPhase(), interceptor); - } - } - } - } - - - // TODO - add something on the end of the wire to invoke the - // invocation chain. Need to split out the runtime - // wire invoker into conversation, callback interceptors etc - bindingInvocationChain.addInvoker(invoker); - - } - - public EndpointReference getSource() { - return wireSource; - } - - public EndpointReference getTarget() { - return wireTarget; - } - - public void setTarget(EndpointReference target) { - if (this.wireTarget != target) { - rebuild(); - } - this.wireTarget = target; - } - - public void rebuild() { - this.chains = null; - } - - /** - * Add the interceptor for a reference binding - * - * @param reference - * @param binding - * @param chain - * @param operation - */ - private void addReferenceBindingInterceptor(ComponentReference reference, - Binding binding, - InvocationChain chain, - Operation operation) { - ReferenceBindingProvider provider = ((RuntimeComponentReference)reference).getBindingProvider(binding); - if (provider != null) { - Invoker invoker = provider.createInvoker(operation); - if (invoker != null) { - chain.addInvoker(invoker); - } - } - List<PolicyProvider> pps = ((RuntimeComponentReference)reference).getPolicyProviders(binding); - if (pps != null) { - for (PolicyProvider p : pps) { - Interceptor interceptor = p.createInterceptor(operation); - if (interceptor != null) { - chain.addInterceptor(p.getPhase(), p.createInterceptor(operation)); - } - } - } - } - - /** - * Add the interceptor for a binding - * - * @param reference - * @param binding - * @param chain - * @param operation - */ - private void addServiceBindingInterceptor(ComponentService service, - Binding binding, - InvocationChain chain, - Operation operation) { - List<PolicyProvider> pps = ((RuntimeComponentService)service).getPolicyProviders(binding); - if (pps != null) { - for (PolicyProvider p : pps) { - Interceptor interceptor = p.createInterceptor(operation); - if (interceptor != null) { - chain.addInterceptor(p.getPhase(), p.createInterceptor(operation)); - } - } - } - } - - /** - * Add a non-blocking interceptor if the reference binding needs it - * - * @param reference - * @param binding - * @param chain - */ - private void addNonBlockingInterceptor(ComponentReference reference, Binding binding, InvocationChain chain) { - ReferenceBindingProvider provider = ((RuntimeComponentReference)reference).getBindingProvider(binding); - if (provider != null) { - boolean supportsOneWayInvocation = provider.supportsOneWayInvocation(); - if (!supportsOneWayInvocation) { - chain.addInterceptor(Phase.REFERENCE, new NonBlockingInterceptor(workScheduler)); - } - } - } - - /** - * Add a non-blocking interceptor if the service binding needs it - * - * @param service - * @param binding - * @param chain - */ - private void addNonBlockingInterceptor(ComponentService service, Binding binding, InvocationChain chain) { - ServiceBindingProvider provider = ((RuntimeComponentService)service).getBindingProvider(binding); - if (provider != null) { - if (!provider.supportsOneWayInvocation()) { - chain.addInterceptor(Phase.SERVICE, new NonBlockingInterceptor(workScheduler)); - } - } - } - - /** - * Add the interceptor for a component implementation - * - * @param component - * @param service - * @param chain - * @param operation - */ - private void addImplementationInterceptor(Component component, - ComponentService service, - InvocationChain chain, - Operation operation) { - ImplementationProvider provider = ((RuntimeComponent)component).getImplementationProvider(); - if (provider != null) { - Invoker invoker = null; - invoker = provider.createInvoker((RuntimeComponentService)service, operation); - chain.addInvoker(invoker); - } - List<PolicyProvider> pps = ((RuntimeComponent)component).getPolicyProviders(); - if (pps != null) { - for (PolicyProvider p : pps) { - Interceptor interceptor = p.createInterceptor(operation); - if (interceptor != null) { - chain.addInterceptor(p.getPhase(), p.createInterceptor(operation)); - } - } - } - } - - /** - * @see java.lang.Object#clone() - */ - @Override - public Object clone() throws CloneNotSupportedException { - RuntimeWireImpl copy = (RuntimeWireImpl)super.clone(); - copy.wireSource = (EndpointReference)wireSource.clone(); - copy.wireTarget = (EndpointReference)wireTarget.clone(); - copy.invoker = new RuntimeWireInvoker(copy.messageFactory, copy.conversationManager, copy); - copy.cachedWire = null; // TUSCANY-2630 - return copy; - } - - /** - * @return the conversationManager - */ - public ConversationManager getConversationManager() { - return conversationManager; - } - - public synchronized RuntimeWire lookupCache(EndpointReference callback) { - if (lastCallback != null && callback.getURI().equals(lastCallback.getURI()) && !wireReserved) { - wireReserved = true; - return cachedWire; - } else { - return null; - } - } - - public synchronized void addToCache(EndpointReference callback, RuntimeWire clonedWire) { - ((RuntimeWireImpl)clonedWire).setClonedFrom(this); - lastCallback = callback; - cachedWire = clonedWire; - wireReserved = true; - } - - public synchronized void releaseClonedWire(RuntimeWire wire) { - if (cachedWire == wire) { - wireReserved = false; - } - } - - public synchronized void releaseWire() { - clonedFrom.releaseClonedWire(this); - } - - private void setClonedFrom(RuntimeWireImpl wire) { - clonedFrom = wire; - } - - public EndpointReference2 getEndpointReference(){ - return null; - } -} diff --git a/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/context/impl/CallableReferenceImpl.java b/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/context/impl/CallableReferenceImpl.java index 17984b9ef9..205ad6a62c 100644 --- a/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/context/impl/CallableReferenceImpl.java +++ b/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/context/impl/CallableReferenceImpl.java @@ -38,7 +38,7 @@ import org.apache.tuscany.sca.assembly.SCABinding; import org.apache.tuscany.sca.assembly.Service; import org.apache.tuscany.sca.assembly.builder.BindingBuilderExtension; import org.apache.tuscany.sca.core.assembly.CompositeActivator; -import org.apache.tuscany.sca.core.assembly.impl.CompositeActivatorImpl; +import org.apache.tuscany.sca.core.assembly.impl.CompositeActivatorImpl2; import org.apache.tuscany.sca.core.assembly.impl.EndpointReferenceImpl; import org.apache.tuscany.sca.core.assembly.impl.ReferenceParametersImpl; import org.apache.tuscany.sca.core.context.CallableReferenceExt; @@ -118,6 +118,7 @@ public class CallableReferenceImpl<B> implements CallableReferenceExt<B> { this.component = component; this.reference = reference; this.binding = binding; + // FIXME: The SCA Specification is not clear how we should handle multiplicity // for CallableReference if (this.binding == null) { @@ -127,15 +128,10 @@ public class CallableReferenceImpl<B> implements CallableReferenceExt<B> { // TODO: TUSCANY-2580: if the refernece doesn't have a binding yet then instead of NPE use a candidate one if its avaialable if (reference.getBindings() != null && reference.getBindings().size() > 0) { this.binding = this.reference.getBindings().get(0); - } else { - this.binding = this.reference.getEndpoints().get(0).getCandidateBindings().get(0); - if (this.reference.getEndpoints().get(0).getInterfaceContract() == null) { - this.reference.getEndpoints().get(0).setInterfaceContract(reference.getInterfaceContract()); - } - } + } } - // TODO - EPR - If not binding specified assume default binding and find the enpoint reference + // TODO - EPR - If no binding specified assume default binding and find the endpoint reference // related to it for (EndpointReference2 endpointReference : this.reference.getEndpointReferences()){ if ((endpointReference.getBinding() != null) && @@ -464,7 +460,7 @@ public class CallableReferenceImpl<B> implements CallableReferenceExt<B> { if (conversation != null) { refParams.setConversationID(conversation.getConversationID()); } - return ((CompositeActivatorImpl)compositeActivator).getCompositeContext().toXML(component, clonedRef); + return ((CompositeActivatorImpl2)compositeActivator).getCompositeContext().toXML(component, clonedRef); } else { return scdl; } diff --git a/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/impl/CallbackReferenceImpl.java b/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/impl/CallbackReferenceImpl.java index a0882c153f..301771d879 100644 --- a/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/impl/CallbackReferenceImpl.java +++ b/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/impl/CallbackReferenceImpl.java @@ -31,7 +31,6 @@ import org.apache.tuscany.sca.assembly.EndpointReference2; import org.apache.tuscany.sca.assembly.OptimizableBinding;
import org.apache.tuscany.sca.core.assembly.impl.EndpointReferenceImpl;
import org.apache.tuscany.sca.core.assembly.impl.RuntimeComponentReferenceImpl;
-import org.apache.tuscany.sca.core.assembly.impl.RuntimeWireImpl;
import org.apache.tuscany.sca.core.assembly.impl.RuntimeWireImpl2;
import org.apache.tuscany.sca.core.context.CompositeContext;
import org.apache.tuscany.sca.core.context.impl.CallableReferenceImpl;
@@ -277,7 +276,7 @@ public class CallbackReferenceImpl<B> extends CallableReferenceImpl<B> { // FIXME: Is this the best way to do this?
final RuntimeWire cbWire = ((RuntimeComponentService) targetService).getRuntimeWires().get(0);
try {
- this.wire = (RuntimeWireImpl) cbWire.clone();
+ this.wire = (RuntimeWireImpl2) cbWire.clone();
} catch (CloneNotSupportedException e) {
throw new IOException(e.toString());
}
|