From bf06eae38c29f648bb1b443ea8ea525c61bb630b Mon Sep 17 00:00:00 2001 From: rfeng Date: Wed, 18 Nov 2009 19:06:40 +0000 Subject: Rename the methods on RuntimeEndpoint/RuntimeEndpointReference Defer the unmarshalling of XML into endpoint/endpointReference git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@881883 13f79535-47bb-0310-9956-ffa450edef68 --- .../atom/provider/AtomServiceBindingProvider.java | 2 +- .../jsonrpc/provider/JSONRPCServiceServlet.java | 2 +- .../RuntimeSCAReferenceBindingProvider.java | 4 +- .../provider/RuntimeSCAServiceBindingProvider.java | 2 +- .../wire/DataBindingRuntimeWireProcessor.java | 4 +- .../tuscany/sca/context/CompositeContext.java | 18 ++- .../tuscany/sca/runtime/EndpointSerializer.java | 13 +- .../tuscany/sca/runtime/RuntimeEndpoint.java | 2 +- .../sca/runtime/RuntimeEndpointReference.java | 2 +- .../core/assembly/impl/CompositeActivatorImpl.java | 4 +- .../core/assembly/impl/EndpointSerializerImpl.java | 25 ++-- .../core/assembly/impl/RuntimeEndpointImpl.java | 130 ++++++++++--------- .../impl/RuntimeEndpointReferenceImpl.java | 144 +++++++++++---------- .../bpel/ode/ODEExternalService.java | 2 +- .../ode/provider/BPELImplementationProvider.java | 8 +- .../invocation/JavaComponentContextProvider.java | 2 +- .../org/apache/tuscany/sca/node/impl/NodeImpl.java | 2 + 17 files changed, 193 insertions(+), 173 deletions(-) (limited to 'java') diff --git a/java/sca/modules/binding-atom-runtime/src/main/java/org/apache/tuscany/sca/binding/atom/provider/AtomServiceBindingProvider.java b/java/sca/modules/binding-atom-runtime/src/main/java/org/apache/tuscany/sca/binding/atom/provider/AtomServiceBindingProvider.java index d7d2b083db..155d07ae86 100644 --- a/java/sca/modules/binding-atom-runtime/src/main/java/org/apache/tuscany/sca/binding/atom/provider/AtomServiceBindingProvider.java +++ b/java/sca/modules/binding-atom-runtime/src/main/java/org/apache/tuscany/sca/binding/atom/provider/AtomServiceBindingProvider.java @@ -64,7 +64,7 @@ class AtomServiceBindingProvider implements ServiceBindingProvider { this.mediator = mediator; // TUSCANY-3166 - this.serviceContract = endpoint.getServiceInterfaceContract(); + this.serviceContract = endpoint.getComponentTypeServiceInterfaceContract(); } public InterfaceContract getBindingInterfaceContract() { diff --git a/java/sca/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/provider/JSONRPCServiceServlet.java b/java/sca/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/provider/JSONRPCServiceServlet.java index 9034e24485..2b4bd2fed6 100644 --- a/java/sca/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/provider/JSONRPCServiceServlet.java +++ b/java/sca/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/provider/JSONRPCServiceServlet.java @@ -290,7 +290,7 @@ public class JSONRPCServiceServlet extends JSONRPCServlet { method = method.substring(method.lastIndexOf(".") + 1); } - List operations = endpoint.getServiceInterfaceContract().getInterface().getOperations(); + List operations = endpoint.getComponentTypeServiceInterfaceContract().getInterface().getOperations(); //componentService.getBindingProvider(binding).getBindingInterfaceContract().getInterface().getOperations(); diff --git a/java/sca/modules/binding-sca-runtime/src/main/java/org/apache/tuscany/sca/binding/sca/provider/RuntimeSCAReferenceBindingProvider.java b/java/sca/modules/binding-sca-runtime/src/main/java/org/apache/tuscany/sca/binding/sca/provider/RuntimeSCAReferenceBindingProvider.java index 47c16335a5..22b1e5bd99 100644 --- a/java/sca/modules/binding-sca-runtime/src/main/java/org/apache/tuscany/sca/binding/sca/provider/RuntimeSCAReferenceBindingProvider.java +++ b/java/sca/modules/binding-sca-runtime/src/main/java/org/apache/tuscany/sca/binding/sca/provider/RuntimeSCAReferenceBindingProvider.java @@ -164,9 +164,9 @@ public class RuntimeSCAReferenceBindingProvider implements ReferenceBindingProvi // Check if there is a target RuntimeEndpoint endpoint = (RuntimeEndpoint)endpointReference.getTargetEndpoint(); if (endpoint != null) { - return endpoint.getServiceInterfaceContract(); + return endpoint.getComponentTypeServiceInterfaceContract(); } else { - return endpointReference.getReferenceInterfaceContract(); + return endpointReference.getComponentTypeReferenceInterfaceContract(); } } } diff --git a/java/sca/modules/binding-sca-runtime/src/main/java/org/apache/tuscany/sca/binding/sca/provider/RuntimeSCAServiceBindingProvider.java b/java/sca/modules/binding-sca-runtime/src/main/java/org/apache/tuscany/sca/binding/sca/provider/RuntimeSCAServiceBindingProvider.java index 15a2385c92..500b4ba304 100644 --- a/java/sca/modules/binding-sca-runtime/src/main/java/org/apache/tuscany/sca/binding/sca/provider/RuntimeSCAServiceBindingProvider.java +++ b/java/sca/modules/binding-sca-runtime/src/main/java/org/apache/tuscany/sca/binding/sca/provider/RuntimeSCAServiceBindingProvider.java @@ -118,7 +118,7 @@ public class RuntimeSCAServiceBindingProvider implements ServiceBindingProvider if (distributedProvider != null) { return distributedProvider.getBindingInterfaceContract(); } else { - return endpoint.getServiceInterfaceContract(); + return endpoint.getComponentTypeServiceInterfaceContract(); } } diff --git a/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/wire/DataBindingRuntimeWireProcessor.java b/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/wire/DataBindingRuntimeWireProcessor.java index 5a6f9739ef..d4018e22a7 100644 --- a/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/wire/DataBindingRuntimeWireProcessor.java +++ b/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/wire/DataBindingRuntimeWireProcessor.java @@ -148,7 +148,7 @@ public class DataBindingRuntimeWireProcessor implements RuntimeWireProcessor { public void process(RuntimeEndpoint endpoint) { InterfaceContract sourceContract = endpoint.getBindingInterfaceContract(); - InterfaceContract targetContract = endpoint.getServiceInterfaceContract(); + InterfaceContract targetContract = endpoint.getComponentTypeServiceInterfaceContract(); if (targetContract == null) { targetContract = sourceContract; } @@ -184,7 +184,7 @@ public class DataBindingRuntimeWireProcessor implements RuntimeWireProcessor { } public void process(RuntimeEndpointReference endpointReference) { - InterfaceContract sourceContract = endpointReference.getReferenceInterfaceContract(); + InterfaceContract sourceContract = endpointReference.getComponentTypeReferenceInterfaceContract(); InterfaceContract targetContract = endpointReference.getBindingInterfaceContract(); if (targetContract == null) { targetContract = sourceContract; diff --git a/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/context/CompositeContext.java b/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/context/CompositeContext.java index a55de8f20e..6e3bedc205 100644 --- a/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/context/CompositeContext.java +++ b/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/context/CompositeContext.java @@ -34,6 +34,7 @@ import org.apache.tuscany.sca.runtime.RuntimeComponentContext; * @version $Rev$ $Date$ */ public class CompositeContext { + protected final static InheritableThreadLocal context = new InheritableThreadLocal(); protected ExtensionPointRegistry extensionPointRegistry; protected EndpointRegistry endpointRegistry; protected ComponentContextFactory componentContextFactory; @@ -73,8 +74,12 @@ public class CompositeContext { public static CompositeContext getCurrentCompositeContext() { RuntimeComponent component = getCurrentComponent(); if (component != null) { - RuntimeComponentContext context = component.getComponentContext(); - return context.getCompositeContext(); + RuntimeComponentContext componentContext = component.getComponentContext(); + return componentContext.getCompositeContext(); + } + CompositeContext compositeContext = context.get(); + if (compositeContext != null) { + return compositeContext; } return null; } @@ -111,5 +116,12 @@ public class CompositeContext { public Composite getDomainComposite() { return domainComposite; } - + + public static void setThreadCompositeContext(CompositeContext value) { + context.set(value); + } + + public static void removeCompositeContext() { + context.remove(); + } } diff --git a/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/runtime/EndpointSerializer.java b/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/runtime/EndpointSerializer.java index a16d8e14f7..981872fdfa 100644 --- a/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/runtime/EndpointSerializer.java +++ b/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/runtime/EndpointSerializer.java @@ -19,8 +19,6 @@ package org.apache.tuscany.sca.runtime; -import java.io.IOException; - import org.apache.tuscany.sca.assembly.Endpoint; import org.apache.tuscany.sca.assembly.EndpointReference; @@ -28,8 +26,11 @@ import org.apache.tuscany.sca.assembly.EndpointReference; * A utility to seralize/deserialize Endpoint/EndpointReference objects */ public interface EndpointSerializer { - EndpointReference readEndpointReference(String xml) throws IOException; - String write(EndpointReference endpointReference) throws IOException; - Endpoint readEndpoint(String xml) throws IOException; - String write(Endpoint endpoint) throws IOException; + EndpointReference readEndpointReference(String xml); + + String write(EndpointReference endpointReference); + + Endpoint readEndpoint(String xml); + + String write(Endpoint endpoint); } diff --git a/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/runtime/RuntimeEndpoint.java b/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/runtime/RuntimeEndpoint.java index 2a4cf4fc84..178f184c1f 100644 --- a/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/runtime/RuntimeEndpoint.java +++ b/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/runtime/RuntimeEndpoint.java @@ -54,5 +54,5 @@ public interface RuntimeEndpoint extends Endpoint, Invocable, Serializable { * code can process. * @return The target component type service interface contract */ - InterfaceContract getServiceInterfaceContract(); + InterfaceContract getComponentTypeServiceInterfaceContract(); } diff --git a/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/runtime/RuntimeEndpointReference.java b/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/runtime/RuntimeEndpointReference.java index d6f8431d48..58e453ed37 100644 --- a/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/runtime/RuntimeEndpointReference.java +++ b/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/runtime/RuntimeEndpointReference.java @@ -53,7 +53,7 @@ public interface RuntimeEndpointReference extends EndpointReference, Invocable, * implementation code uses to make the outbound call. * @return The source component type reference interface contract */ - InterfaceContract getReferenceInterfaceContract(); + InterfaceContract getComponentTypeReferenceInterfaceContract(); boolean isOutOfDate(); void rebuild(); 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 index 4b1fd203fc..58ffb0f9b9 100644 --- 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 @@ -513,14 +513,14 @@ public class CompositeActivatorImpl implements CompositeActivator { epr.bind(compositeContext); ComponentReference reference = endpointReference.getReference(); - InterfaceContract sourceContract = epr.getReferenceInterfaceContract(); + InterfaceContract sourceContract = epr.getComponentTypeReferenceInterfaceContract(); // TODO - EPR - interface contract seems to be null in the implementation.web // case. Not introspecting the CT properly? if (sourceContract == null){ // TODO - Can't do this with move of matching to wire // take the contract from the service to which the reference is connected - sourceContract = ((RuntimeEndpoint) endpointReference.getTargetEndpoint()).getServiceInterfaceContract(); + sourceContract = ((RuntimeEndpoint) endpointReference.getTargetEndpoint()).getComponentTypeServiceInterfaceContract(); reference.setInterfaceContract(sourceContract); } diff --git a/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/impl/EndpointSerializerImpl.java b/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/impl/EndpointSerializerImpl.java index 6eb392f084..abe0fdd78b 100644 --- a/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/impl/EndpointSerializerImpl.java +++ b/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/impl/EndpointSerializerImpl.java @@ -19,7 +19,6 @@ package org.apache.tuscany.sca.core.assembly.impl; -import java.io.IOException; import java.io.StringReader; import java.io.StringWriter; @@ -36,6 +35,7 @@ import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessorExtens import org.apache.tuscany.sca.core.ExtensionPointRegistry; import org.apache.tuscany.sca.core.FactoryExtensionPoint; import org.apache.tuscany.sca.runtime.EndpointSerializer; +import org.oasisopen.sca.ServiceRuntimeException; public class EndpointSerializerImpl implements EndpointSerializer { private ExtensionPointRegistry registry; @@ -55,25 +55,18 @@ public class EndpointSerializerImpl implements EndpointSerializer { refProcessor = processors.getProcessor(EndpointReference.class); } - - public Endpoint readEndpoint(String xml) throws IOException { + public Endpoint readEndpoint(String xml) { try { XMLStreamReader reader = inputFactory.createXMLStreamReader(new StringReader(xml)); Endpoint result = processor.read(reader, new ProcessorContext(registry)); reader.close(); return result; } catch (Exception e) { - throw wrap(e); + throw new ServiceRuntimeException(e); } } - private IOException wrap(Exception e) { - IOException ex = new IOException(e.getMessage()); - ex.initCause(e); - return ex; - } - - public String write(Endpoint endpoint) throws IOException { + public String write(Endpoint endpoint) { StringWriter sw = new StringWriter(); try { XMLStreamWriter writer = outputFactory.createXMLStreamWriter(sw); @@ -82,22 +75,22 @@ public class EndpointSerializerImpl implements EndpointSerializer { writer.close(); return sw.toString(); } catch (Exception e) { - throw wrap(e); + throw new ServiceRuntimeException(e); } } - public EndpointReference readEndpointReference(String xml) throws IOException { + public EndpointReference readEndpointReference(String xml) { try { XMLStreamReader reader = inputFactory.createXMLStreamReader(new StringReader(xml)); EndpointReference result = refProcessor.read(reader, new ProcessorContext(registry)); reader.close(); return result; } catch (Exception e) { - throw wrap(e); + throw new ServiceRuntimeException(e); } } - public String write(EndpointReference endpointReference) throws IOException { + public String write(EndpointReference endpointReference) { StringWriter sw = new StringWriter(); try { XMLStreamWriter writer = outputFactory.createXMLStreamWriter(sw); @@ -106,7 +99,7 @@ public class EndpointSerializerImpl implements EndpointSerializer { writer.close(); return sw.toString(); } catch (Exception e) { - throw wrap(e); + throw new ServiceRuntimeException(e); } } } diff --git a/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/impl/RuntimeEndpointImpl.java b/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/impl/RuntimeEndpointImpl.java index 29262949df..e0722d3b76 100644 --- a/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/impl/RuntimeEndpointImpl.java +++ b/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/impl/RuntimeEndpointImpl.java @@ -19,9 +19,10 @@ package org.apache.tuscany.sca.core.assembly.impl; +import java.io.Externalizable; import java.io.IOException; -import java.io.ObjectStreamException; -import java.io.Serializable; +import java.io.ObjectInput; +import java.io.ObjectOutput; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.List; @@ -34,7 +35,6 @@ import org.apache.tuscany.sca.assembly.ComponentService; import org.apache.tuscany.sca.assembly.CompositeReference; import org.apache.tuscany.sca.assembly.CompositeService; import org.apache.tuscany.sca.assembly.Contract; -import org.apache.tuscany.sca.assembly.Endpoint; import org.apache.tuscany.sca.assembly.Service; import org.apache.tuscany.sca.assembly.impl.EndpointImpl; import org.apache.tuscany.sca.context.CompositeContext; @@ -76,25 +76,25 @@ import org.oasisopen.sca.ServiceRuntimeException; /** * Runtime model for Endpoint that supports java serialization */ -public class RuntimeEndpointImpl extends EndpointImpl implements RuntimeEndpoint { +public class RuntimeEndpointImpl extends EndpointImpl implements RuntimeEndpoint, Externalizable { private transient CompositeContext compositeContext; private transient EndpointRegistry endpointRegistry; private transient RuntimeWireProcessor wireProcessor; + private transient ProviderFactoryExtensionPoint providerFactories; private transient InterfaceContractMapper interfaceContractMapper; private transient WorkScheduler workScheduler; private transient PhaseManager phaseManager; private transient MessageFactory messageFactory; private transient RuntimeInvoker invoker; - private transient ProviderFactoryExtensionPoint providerFactories; + private transient EndpointSerializer serializer; private transient List chains; - private transient final Map invocationChainMap = + private transient Map invocationChainMap = new ConcurrentHashMap(); private transient InvocationChain bindingInvocationChain; private transient ServiceBindingProvider bindingProvider; private transient List policyProviders; - private transient EndpointSerializer serializer; private String xml; protected InterfaceContract bindingInterfaceContract; @@ -111,6 +111,37 @@ public class RuntimeEndpointImpl extends EndpointImpl implements RuntimeEndpoint super(registry); } + protected void copyFrom(RuntimeEndpointImpl copy) { + this.xml = copy.xml; + + this.component = copy.component; + this.service = copy.service; + this.interfaceContract = copy.interfaceContract; + this.serviceInterfaceContract = copy.serviceInterfaceContract; + + this.binding = copy.binding; + this.bindingInterfaceContract = copy.interfaceContract; + this.bindingInvocationChain = copy.bindingInvocationChain; + + this.callbackEndpointReferences = copy.callbackEndpointReferences; + + this.requiredIntents = copy.requiredIntents; + this.policySets = copy.policySets; + + this.uri = copy.uri; + this.remote = copy.remote; + this.unresolved = copy.unresolved; + + this.chains = copy.chains; + this.invocationChainMap = copy.invocationChainMap; + this.bindingProvider = copy.bindingProvider; + this.policyProviders = copy.policyProviders; + + if (this.compositeContext == null && copy.compositeContext != null) { + bind(copy.compositeContext); + } + } + public void bind(CompositeContext compositeContext) { this.compositeContext = compositeContext; bind(compositeContext.getExtensionPointRegistry(), compositeContext.getEndpointRegistry()); @@ -231,7 +262,7 @@ public class RuntimeEndpointImpl extends EndpointImpl implements RuntimeEndpoint //InterfaceContract targetContract = getInterfaceContract(); // TODO - EPR - why is this looking at the component types. The endpoint should have the right interface contract by this time - InterfaceContract targetContract = getServiceInterfaceContract(); + InterfaceContract targetContract = getComponentTypeServiceInterfaceContract(); // setInterfaceContract(targetContract); for (Operation operation : sourceContract.getInterface().getOperations()) { Operation targetOperation = interfaceContractMapper.map(targetContract.getInterface(), operation); @@ -422,7 +453,7 @@ public class RuntimeEndpointImpl extends EndpointImpl implements RuntimeEndpoint } } - public ServiceBindingProvider getBindingProvider() { + public synchronized ServiceBindingProvider getBindingProvider() { if (bindingProvider == null) { BindingProviderFactory factory = (BindingProviderFactory)providerFactories.getProviderFactory(getBinding().getClass()); @@ -460,18 +491,6 @@ public class RuntimeEndpointImpl extends EndpointImpl implements RuntimeEndpoint return compositeContext; } - private synchronized EndpointSerializer getSerializer() { - if (serializer == null) { - if (registry != null) { - serializer = - registry.getExtensionPoint(UtilityExtensionPoint.class).getUtility(EndpointSerializer.class); - } else { - throw new IllegalStateException("No extension registry is set"); - } - } - return serializer; - } - @Override protected void reset() { super.reset(); @@ -479,7 +498,17 @@ public class RuntimeEndpointImpl extends EndpointImpl implements RuntimeEndpoint } @Override - public void resolve() { + protected synchronized void resolve() { + if (xml != null && component == null) { + if (compositeContext == null) { + compositeContext = CompositeContext.getCurrentCompositeContext(); + if (compositeContext != null) { + bind(compositeContext); + } + } + RuntimeEndpointImpl ep = (RuntimeEndpointImpl)serializer.readEndpoint(xml); + copyFrom(ep); + } super.resolve(); } @@ -493,12 +522,12 @@ public class RuntimeEndpointImpl extends EndpointImpl implements RuntimeEndpoint bindingInterfaceContract = getInterfaceContract(); } if (bindingInterfaceContract == null) { - bindingInterfaceContract = getServiceInterfaceContract(); + bindingInterfaceContract = getComponentTypeServiceInterfaceContract(); } return bindingInterfaceContract; } - public InterfaceContract getServiceInterfaceContract() { + public InterfaceContract getComponentTypeServiceInterfaceContract() { resolve(); if (serviceInterfaceContract != null) { return serviceInterfaceContract; @@ -512,48 +541,21 @@ public class RuntimeEndpointImpl extends EndpointImpl implements RuntimeEndpoint } return serviceInterfaceContract; } - - public Object writeReplace() throws ObjectStreamException { - return new EndpointProxy(getSerializer(), this); - } - - public static class EndpointProxy implements Serializable { - private static final long serialVersionUID = 6708978267158501975L; - private String xml; - /** - * @param serializer - */ - public EndpointProxy() { - super(); - } - - /** - * @param serializer - */ - public EndpointProxy(EndpointSerializer serializer, Endpoint endpoint) { - super(); - try { - this.xml = serializer.write(endpoint); - } catch (Exception e) { - throw new ServiceRuntimeException(e); - } - } + public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException { + this.uri = in.readUTF(); + this.xml = in.readUTF(); + } - public Object readResolve() throws ObjectStreamException { - CompositeContext context = CompositeContext.getCurrentCompositeContext(); - if (context == null) { - throw new IllegalStateException("No context is available for deserializing the endpoint"); - } - UtilityExtensionPoint utilities = - context.getExtensionPointRegistry().getExtensionPoint(UtilityExtensionPoint.class); - EndpointSerializer serializer = utilities.getUtility(EndpointSerializer.class); - try { - RuntimeEndpoint endpoint = (RuntimeEndpoint) serializer.readEndpoint(xml); - endpoint.bind(context); - return endpoint; - } catch (IOException e) { - throw new ServiceRuntimeException(e); + public void writeExternal(ObjectOutput out) throws IOException { + out.writeUTF(getURI()); + if (serializer == null && xml != null) { + out.writeUTF(xml); + } else { + if (serializer != null) { + out.writeUTF(serializer.write(this)); + } else { + throw new IllegalStateException("No serializer is configured"); } } } diff --git a/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/impl/RuntimeEndpointReferenceImpl.java b/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/impl/RuntimeEndpointReferenceImpl.java index 5b2de2f01f..d38de90422 100644 --- a/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/impl/RuntimeEndpointReferenceImpl.java +++ b/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/impl/RuntimeEndpointReferenceImpl.java @@ -19,9 +19,10 @@ package org.apache.tuscany.sca.core.assembly.impl; +import java.io.Externalizable; import java.io.IOException; -import java.io.ObjectStreamException; -import java.io.Serializable; +import java.io.ObjectInput; +import java.io.ObjectOutput; import java.lang.reflect.InvocationTargetException; import java.security.AccessController; import java.security.PrivilegedAction; @@ -35,7 +36,6 @@ import org.apache.tuscany.sca.assembly.ComponentService; import org.apache.tuscany.sca.assembly.CompositeReference; import org.apache.tuscany.sca.assembly.CompositeService; import org.apache.tuscany.sca.assembly.Contract; -import org.apache.tuscany.sca.assembly.Endpoint; import org.apache.tuscany.sca.assembly.EndpointReference; import org.apache.tuscany.sca.assembly.impl.EndpointReferenceImpl; import org.apache.tuscany.sca.context.CompositeContext; @@ -77,7 +77,7 @@ import org.oasisopen.sca.ServiceRuntimeException; /** * Runtime model for Endpoint that supports java serialization */ -public class RuntimeEndpointReferenceImpl extends EndpointReferenceImpl implements RuntimeEndpointReference { +public class RuntimeEndpointReferenceImpl extends EndpointReferenceImpl implements RuntimeEndpointReference, Externalizable { private transient CompositeContext compositeContext; private transient RuntimeWireProcessor wireProcessor; private transient InterfaceContractMapper interfaceContractMapper; @@ -88,7 +88,7 @@ public class RuntimeEndpointReferenceImpl extends EndpointReferenceImpl implemen private transient EndpointRegistry endpointRegistry; private transient List chains; - private transient final Map invocationChainMap = + private transient Map invocationChainMap = new ConcurrentHashMap(); private transient InvocationChain bindingInvocationChain; @@ -100,6 +100,9 @@ public class RuntimeEndpointReferenceImpl extends EndpointReferenceImpl implemen protected InterfaceContract bindingInterfaceContract; protected InterfaceContract referenceInterfaceContract; + + private String xml; + /** * No-arg constructor for Java serilization */ @@ -111,11 +114,43 @@ public class RuntimeEndpointReferenceImpl extends EndpointReferenceImpl implemen super(registry); } + protected void copyFrom(RuntimeEndpointReferenceImpl copy) { + this.xml = copy.xml; + + this.component = copy.component; + this.reference = copy.reference; + this.interfaceContract = copy.interfaceContract; + this.referenceInterfaceContract = copy.referenceInterfaceContract; + this.callbackEndpoint = copy.callbackEndpoint; + this.targetEndpoint = copy.targetEndpoint; + + this.binding = copy.binding; + this.bindingInterfaceContract = copy.interfaceContract; + this.bindingInvocationChain = copy.bindingInvocationChain; + + this.requiredIntents = copy.requiredIntents; + this.policySets = copy.policySets; + + this.uri = copy.uri; + this.remote = copy.remote; + this.unresolved = copy.unresolved; + this.status = copy.status; + + this.chains = copy.chains; + this.invocationChainMap = copy.invocationChainMap; + this.bindingProvider = copy.bindingProvider; + this.policyProviders = copy.policyProviders; + + if (this.compositeContext == null && copy.compositeContext != null) { + bind(copy.compositeContext); + } + } + public void bind(CompositeContext compositeContext) { this.compositeContext = compositeContext; bind(compositeContext.getExtensionPointRegistry(), compositeContext.getEndpointRegistry()); } - + public void bind(ExtensionPointRegistry registry, EndpointRegistry endpointRegistry) { if (compositeContext == null) { compositeContext = new CompositeContext(registry, endpointRegistry); @@ -214,7 +249,7 @@ public class RuntimeEndpointReferenceImpl extends EndpointReferenceImpl implemen */ private void initInvocationChains() { chains = new ArrayList(); - InterfaceContract sourceContract = getReferenceInterfaceContract(); + InterfaceContract sourceContract = getComponentTypeReferenceInterfaceContract(); // TODO - EPR why is this looking at the component types. The endpoint reference should have the right interface contract by this time //InterfaceContract sourceContract = getLeafInterfaceContract(endpointReference); @@ -252,14 +287,13 @@ public class RuntimeEndpointReferenceImpl extends EndpointReferenceImpl implemen * is first used */ private void resolveEndpointReference() { + resolve(); + boolean ok = eprBinder.bind(endpointRegistry, this); if (!ok) { throw new SCARuntimeException("Unable to bind " + this); } - // set the endpoint based on the resolved endpoint - Endpoint endpoint = getTargetEndpoint(); - // start the binding provider final ReferenceBindingProvider bindingProvider = getBindingProvider(); @@ -280,7 +314,6 @@ public class RuntimeEndpointReferenceImpl extends EndpointReferenceImpl implemen // endpoint.setInterfaceContract(bindingContract); } - private void initReferenceBindingInvocationChains() { // add the binding interceptors to the reference binding wire @@ -369,10 +402,12 @@ public class RuntimeEndpointReferenceImpl extends EndpointReferenceImpl implemen } public boolean isOutOfDate() { + resolve(); return eprBinder.isOutOfDate(endpointRegistry, this); } - public ReferenceBindingProvider getBindingProvider() { + public synchronized ReferenceBindingProvider getBindingProvider() { + resolve(); // For the case that binding.sca is implemented by another binding if (binding == null) { return null; @@ -394,6 +429,7 @@ public class RuntimeEndpointReferenceImpl extends EndpointReferenceImpl implemen } public synchronized List getPolicyProviders() { + resolve(); if (policyProviders == null) { policyProviders = new ArrayList(); for (PolicyProviderFactory factory : providerFactories.getPolicyProviderFactories()) { @@ -413,7 +449,7 @@ public class RuntimeEndpointReferenceImpl extends EndpointReferenceImpl implemen policyProviders = null; invocationChainMap.clear(); } - + public Contract getContract() { resolve(); return reference; @@ -422,18 +458,6 @@ public class RuntimeEndpointReferenceImpl extends EndpointReferenceImpl implemen public CompositeContext getCompositeContext() { return compositeContext; } - - private synchronized EndpointSerializer getSerializer() { - if (serializer == null) { - if (registry != null) { - serializer = - registry.getExtensionPoint(UtilityExtensionPoint.class).getUtility(EndpointSerializer.class); - } else { - throw new IllegalStateException("No extension registry is set"); - } - } - return serializer; - } public InterfaceContract getBindingInterfaceContract() { resolve(); @@ -445,12 +469,12 @@ public class RuntimeEndpointReferenceImpl extends EndpointReferenceImpl implemen bindingInterfaceContract = getInterfaceContract(); } if (bindingInterfaceContract == null) { - bindingInterfaceContract = getReferenceInterfaceContract(); + bindingInterfaceContract = getComponentTypeReferenceInterfaceContract(); } return bindingInterfaceContract; } - public InterfaceContract getReferenceInterfaceContract() { + public InterfaceContract getComponentTypeReferenceInterfaceContract() { resolve(); if (referenceInterfaceContract != null) { return referenceInterfaceContract; @@ -464,52 +488,38 @@ public class RuntimeEndpointReferenceImpl extends EndpointReferenceImpl implemen } return referenceInterfaceContract; } - public Object writeReplace() throws ObjectStreamException { - return new EndpointReferenceProxy(getSerializer(), this); - } - - public static class EndpointReferenceProxy implements Serializable { - private static final long serialVersionUID = 6708978267158501975L; - private String xml; - - /** - * @param serializer - */ - public EndpointReferenceProxy() { - super(); - } - /** - * @param serializer - */ - public EndpointReferenceProxy(EndpointSerializer serializer, EndpointReference endpointReference) { - super(); - try { - this.xml = serializer.write(endpointReference); - } catch (Exception e) { - throw new ServiceRuntimeException(e); + @Override + protected synchronized void resolve() { + if (xml != null && component == null) { + if (compositeContext == null) { + compositeContext = CompositeContext.getCurrentCompositeContext(); + if (compositeContext != null) { + bind(compositeContext); + } } + RuntimeEndpointReferenceImpl epr = (RuntimeEndpointReferenceImpl)serializer.readEndpointReference(xml); + copyFrom(epr); } + super.resolve(); + } - public Object readResolve() throws ObjectStreamException { - CompositeContext context = CompositeContext.getCurrentCompositeContext(); - if (context == null) { - throw new IllegalStateException("No context is available for deserializing the endpoint"); - } - UtilityExtensionPoint utilities = - context.getExtensionPointRegistry().getExtensionPoint(UtilityExtensionPoint.class); - EndpointSerializer serializer = utilities.getUtility(EndpointSerializer.class); - EndpointReferenceBinder eprBinder = utilities.getUtility(EndpointReferenceBinder.class); - try { - RuntimeEndpointReference epr = (RuntimeEndpointReference) serializer.readEndpointReference(xml); - epr.bind(context); - eprBinder.bind(context.getEndpointRegistry(), epr); - return epr; - } catch (IOException e) { - throw new ServiceRuntimeException(e); + public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException { + this.uri = in.readUTF(); + this.xml = in.readUTF(); + } + + public void writeExternal(ObjectOutput out) throws IOException { + out.writeUTF(getURI()); + if (serializer == null && xml != null) { + out.writeUTF(xml); + } else { + if (serializer != null) { + out.writeUTF(serializer.write(this)); + } else { + throw new IllegalStateException("No serializer is configured"); } } } - } diff --git a/java/sca/modules/implementation-bpel-runtime/src/main/java/org/apache/tuscany/sca/implementation/bpel/ode/ODEExternalService.java b/java/sca/modules/implementation-bpel-runtime/src/main/java/org/apache/tuscany/sca/implementation/bpel/ode/ODEExternalService.java index dc73ab044a..d2dbd4880d 100644 --- a/java/sca/modules/implementation-bpel-runtime/src/main/java/org/apache/tuscany/sca/implementation/bpel/ode/ODEExternalService.java +++ b/java/sca/modules/implementation-bpel-runtime/src/main/java/org/apache/tuscany/sca/implementation/bpel/ode/ODEExternalService.java @@ -274,7 +274,7 @@ public class ODEExternalService { private Operation findOperation(String operationName, RuntimeEndpointReference epr) { Operation reseultOperation = null; - for (Operation operation : epr.getReferenceInterfaceContract().getInterface().getOperations()) { + for (Operation operation : epr.getComponentTypeReferenceInterfaceContract().getInterface().getOperations()) { if (operationName.equalsIgnoreCase(operation.getName())) { reseultOperation = operation; break; diff --git a/java/sca/modules/implementation-bpel-runtime/src/main/java/org/apache/tuscany/sca/implementation/bpel/ode/provider/BPELImplementationProvider.java b/java/sca/modules/implementation-bpel-runtime/src/main/java/org/apache/tuscany/sca/implementation/bpel/ode/provider/BPELImplementationProvider.java index ef35f4cd66..8880d20a37 100644 --- a/java/sca/modules/implementation-bpel-runtime/src/main/java/org/apache/tuscany/sca/implementation/bpel/ode/provider/BPELImplementationProvider.java +++ b/java/sca/modules/implementation-bpel-runtime/src/main/java/org/apache/tuscany/sca/implementation/bpel/ode/provider/BPELImplementationProvider.java @@ -89,8 +89,8 @@ public class BPELImplementationProvider implements ImplementationProvider { service.getInterfaceContract().getInterface().resetDataBinding(DOMDataBinding.NAME); for( Endpoint endpoint : service.getEndpoints() ) { RuntimeEndpoint ep = (RuntimeEndpoint) endpoint; - if (ep.getServiceInterfaceContract() != null) { - ep.getServiceInterfaceContract().getInterface().resetDataBinding(DOMDataBinding.NAME); + if (ep.getComponentTypeServiceInterfaceContract() != null) { + ep.getComponentTypeServiceInterfaceContract().getInterface().resetDataBinding(DOMDataBinding.NAME); } } // end for } // end for @@ -99,8 +99,8 @@ public class BPELImplementationProvider implements ImplementationProvider { reference.getInterfaceContract().getInterface().resetDataBinding(DOMDataBinding.NAME); for (EndpointReference endpointReference : reference.getEndpointReferences()) { RuntimeEndpointReference epr = (RuntimeEndpointReference)endpointReference; - if (epr.getReferenceInterfaceContract() != null) { - epr.getReferenceInterfaceContract().getInterface().resetDataBinding(DOMDataBinding.NAME); + if (epr.getComponentTypeReferenceInterfaceContract() != null) { + epr.getComponentTypeReferenceInterfaceContract().getInterface().resetDataBinding(DOMDataBinding.NAME); } } // end for */ } // end for diff --git a/java/sca/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/invocation/JavaComponentContextProvider.java b/java/sca/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/invocation/JavaComponentContextProvider.java index 421c95672b..9fbfa9a83b 100644 --- a/java/sca/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/invocation/JavaComponentContextProvider.java +++ b/java/sca/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/invocation/JavaComponentContextProvider.java @@ -149,7 +149,7 @@ public class JavaComponentContextProvider { List wires = callbackReference.getEndpointReferences(); if (!wires.isEmpty()) { RuntimeEndpointReference epr = (RuntimeEndpointReference) wires.get(0); - callbackWires.put(epr.getReferenceInterfaceContract().getInterface().toString(), + callbackWires.put(epr.getComponentTypeReferenceInterfaceContract().getInterface().toString(), wires); } } diff --git a/java/sca/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/NodeImpl.java b/java/sca/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/NodeImpl.java index 65b55452cc..62f18f08e0 100644 --- a/java/sca/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/NodeImpl.java +++ b/java/sca/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/NodeImpl.java @@ -134,6 +134,7 @@ public class NodeImpl implements Node, Client { this.compositeContext = new CompositeContext(manager.registry, endpointRegistry, domainComposite); + CompositeContext.setThreadCompositeContext(compositeContext); } finally { // Reset the thread context monitor manager.monitorFactory.setContextMonitor(tcm); @@ -216,6 +217,7 @@ public class NodeImpl implements Node, Client { this.compositeContext = null; ThreadMessageContext.removeMessageContext(); + CompositeContext.removeCompositeContext(); } catch (ActivationException e) { throw new IllegalStateException(e); -- cgit v1.2.3