diff options
Diffstat (limited to 'sca-java-2.x/trunk/modules')
5 files changed, 125 insertions, 2 deletions
diff --git a/sca-java-2.x/trunk/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/EndpointProcessor.java b/sca-java-2.x/trunk/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/EndpointProcessor.java index 9f323a5507..153734ddc5 100644 --- a/sca-java-2.x/trunk/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/EndpointProcessor.java +++ b/sca-java-2.x/trunk/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/EndpointProcessor.java @@ -19,6 +19,9 @@ package org.apache.tuscany.sca.assembly.xml; +import java.util.ArrayList; +import java.util.List; + import javax.xml.namespace.QName; import javax.xml.stream.XMLStreamConstants; import javax.xml.stream.XMLStreamException; @@ -41,6 +44,7 @@ import org.apache.tuscany.sca.contribution.processor.StAXAttributeProcessor; import org.apache.tuscany.sca.contribution.resolver.ModelResolver; import org.apache.tuscany.sca.core.ExtensionPointRegistry; import org.apache.tuscany.sca.core.FactoryExtensionPoint; +import org.apache.tuscany.sca.policy.PolicySet; /** * @@ -87,6 +91,10 @@ public class EndpointProcessor extends BaseAssemblyProcessor implements StAXArti endpoint.setComponent(component); endpoint.setService(service); endpoint.setBinding(binding); + + // retrieve the stash of intents and policy sets from the component + endpoint.getRequiredIntents().addAll(component.getRequiredIntents()); + endpoint.getPolicySets().addAll(component.getPolicySets()); } return endpoint; } @@ -108,6 +116,14 @@ public class EndpointProcessor extends BaseAssemblyProcessor implements StAXArti composite.getComponents().add(component); component.getReferences().clear(); component.getServices().clear(); + + // stash endpoint intents and policy sets on the component so that they are all + // in one place + component.getRequiredIntents().clear(); + component.getRequiredIntents().addAll(endpoint.getRequiredIntents()); + component.getPolicySets().clear(); + component.getPolicySets().addAll(endpoint.getPolicySets()); + if (endpoint.getService() != null) { ComponentService service = (ComponentService)endpoint.getService().clone(); component.getServices().add(service); @@ -143,5 +159,11 @@ public class EndpointProcessor extends BaseAssemblyProcessor implements StAXArti } public void resolve(Endpoint model, ModelResolver resolver, ProcessorContext context) throws ContributionResolveException { + // the only thing we'll resolve here is the policy model as the endpoint + // matching algorithm needs to look inside the policy model + + for (PolicySet policySet : model.getPolicySets()){ + extensionProcessor.resolve(policySet, resolver, context); + } } } diff --git a/sca-java-2.x/trunk/modules/core-spi/src/main/java/org/apache/tuscany/sca/runtime/EndpointSerializer.java b/sca-java-2.x/trunk/modules/core-spi/src/main/java/org/apache/tuscany/sca/runtime/EndpointSerializer.java index 981872fdfa..a69580f518 100644 --- a/sca-java-2.x/trunk/modules/core-spi/src/main/java/org/apache/tuscany/sca/runtime/EndpointSerializer.java +++ b/sca-java-2.x/trunk/modules/core-spi/src/main/java/org/apache/tuscany/sca/runtime/EndpointSerializer.java @@ -33,4 +33,6 @@ public interface EndpointSerializer { Endpoint readEndpoint(String xml); String write(Endpoint endpoint); + + void resolveEndpoint(Endpoint endpoint); } diff --git a/sca-java-2.x/trunk/modules/core/META-INF/MANIFEST.MF b/sca-java-2.x/trunk/modules/core/META-INF/MANIFEST.MF index 964e629744..1a388f973d 100644 --- a/sca-java-2.x/trunk/modules/core/META-INF/MANIFEST.MF +++ b/sca-java-2.x/trunk/modules/core/META-INF/MANIFEST.MF @@ -68,6 +68,7 @@ Import-Package: javax.security.auth, org.apache.tuscany.sca.monitor;version="2.0.0",
org.apache.tuscany.sca.node;version="2.0.0",
org.apache.tuscany.sca.policy;version="2.0.0",
+ org.apache.tuscany.sca.policy.util;version="2.0.0",
org.apache.tuscany.sca.provider;version="2.0.0",
org.apache.tuscany.sca.runtime;version="2.0.0",
org.apache.tuscany.sca.work;version="2.0.0",
diff --git a/sca-java-2.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/impl/EndpointSerializerImpl.java b/sca-java-2.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/impl/EndpointSerializerImpl.java index 4e5275058e..8cdb0363e9 100644 --- a/sca-java-2.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/impl/EndpointSerializerImpl.java +++ b/sca-java-2.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/impl/EndpointSerializerImpl.java @@ -21,6 +21,8 @@ package org.apache.tuscany.sca.core.assembly.impl; import java.io.StringReader; import java.io.StringWriter; +import java.util.ArrayList; +import java.util.List; import javax.xml.stream.XMLInputFactory; import javax.xml.stream.XMLOutputFactory; @@ -29,12 +31,21 @@ import javax.xml.stream.XMLStreamWriter; import org.apache.tuscany.sca.assembly.Endpoint; import org.apache.tuscany.sca.assembly.EndpointReference; +import org.apache.tuscany.sca.context.CompositeContext; +import org.apache.tuscany.sca.contribution.Contribution; import org.apache.tuscany.sca.contribution.processor.ProcessorContext; import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor; import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessorExtensionPoint; +import org.apache.tuscany.sca.contribution.resolver.ModelResolver; import org.apache.tuscany.sca.core.ExtensionPointRegistry; import org.apache.tuscany.sca.core.FactoryExtensionPoint; +import org.apache.tuscany.sca.definitions.Definitions; +import org.apache.tuscany.sca.policy.BindingType; +import org.apache.tuscany.sca.policy.Intent; +import org.apache.tuscany.sca.policy.PolicySet; +import org.apache.tuscany.sca.policy.util.PolicyHelper; import org.apache.tuscany.sca.runtime.EndpointSerializer; +import org.apache.tuscany.sca.runtime.RuntimeEndpoint; import org.oasisopen.sca.ServiceRuntimeException; public class EndpointSerializerImpl implements EndpointSerializer { @@ -57,6 +68,7 @@ public class EndpointSerializerImpl implements EndpointSerializer { public Endpoint readEndpoint(String xml) { try { + //System.out.println("Read Endpoint string >> " + xml); XMLStreamReader reader = inputFactory.createXMLStreamReader(new StringReader(xml)); Endpoint result = processor.read(reader, new ProcessorContext(registry)); result.setRemote(true); @@ -66,6 +78,84 @@ public class EndpointSerializerImpl implements EndpointSerializer { throw new ServiceRuntimeException(e); } } + + public void resolveEndpoint(Endpoint endpoint) { + CompositeContext compositeContext = ((RuntimeEndpoint)endpoint).getCompositeContext(); + + if (compositeContext == null){ + // will be null if this is the SCAClient + return; + } + + Definitions systemDefinitions = compositeContext.getSystemDefinitions(); + if (systemDefinitions != null){ + // Find pre-resolved intents from the system definition + List<Intent> intents = new ArrayList<Intent>(); + + for (Intent intent : endpoint.getRequiredIntents()){ + Intent resolvedIntent = PolicyHelper.getIntent(systemDefinitions, intent.getName()); + + if (resolvedIntent != null){ + intents.add(resolvedIntent); + } else { + // look to see if this intent is provided by the binding + BindingType bindingType = systemDefinitions.getBindingType(endpoint.getBinding().getType()); + + if (bindingType != null){ + for (Intent apIntent : bindingType.getAlwaysProvidedIntents()){ + if (apIntent.getName().equals(intent.getName())){ + resolvedIntent = apIntent; + break; + } + } + + if (resolvedIntent == null){ + for (Intent mpIntent : bindingType.getMayProvidedIntents()){ + if (mpIntent.getName().equals(intent.getName())){ + resolvedIntent = mpIntent; + break; + } + } + } + } + + if (resolvedIntent != null){ + intents.add(resolvedIntent); + } else { + throw new ServiceRuntimeException("Remote endpoint " + + endpoint + + " has intent " + + intent + + " that can't be found in the local system definitions in node " + + compositeContext.getNodeURI()); + } + } + } + + endpoint.getRequiredIntents().clear(); + endpoint.getRequiredIntents().addAll(intents); + + // Find pre-resolved policy sets from the system definition + List<PolicySet> policySets = new ArrayList<PolicySet>(); + + for (PolicySet policySet : endpoint.getPolicySets()){ + PolicySet resolvedPolicySet = PolicyHelper.getPolicySet(systemDefinitions, policySet.getName()); + if (resolvedPolicySet != null){ + policySets.add(resolvedPolicySet); + } else { + throw new ServiceRuntimeException("Remote endpoint " + + endpoint + + " has policy set " + + policySet + + " that can't be found in the local system definitions in node " + + compositeContext.getNodeURI()); + } + } + + endpoint.getPolicySets().clear(); + endpoint.getPolicySets().addAll(policySets); + } + } public String write(Endpoint endpoint) { StringWriter sw = new StringWriter(); @@ -74,7 +164,9 @@ public class EndpointSerializerImpl implements EndpointSerializer { processor.write(endpoint, writer, new ProcessorContext(registry)); writer.flush(); writer.close(); - return sw.toString(); + String endpointString = sw.toString(); + //System.out.println("Write Endpoint string >> " + endpointString); + return endpointString; } catch (Exception e) { throw new ServiceRuntimeException(e); } diff --git a/sca-java-2.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/impl/RuntimeEndpointImpl.java b/sca-java-2.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/impl/RuntimeEndpointImpl.java index db8911d466..09cbab76d1 100644 --- a/sca-java-2.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/impl/RuntimeEndpointImpl.java +++ b/sca-java-2.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/impl/RuntimeEndpointImpl.java @@ -925,7 +925,12 @@ public class RuntimeEndpointImpl extends EndpointImpl implements RuntimeEndpoint @Override protected synchronized void resolve() { if (xml != null && component == null) { - if (compositeContext == null) { + // TUSCANY-3958 - when an endpoint arrives at the remote side of the + // domain registry it's composite context is set, but to + // a default that's not that useful. We can tell because it + // doesn't set the system definitions + if (compositeContext == null || + compositeContext.getSystemDefinitions() == null) { compositeContext = CompositeContext.getCurrentCompositeContext(); if (compositeContext != null) { bind(compositeContext); @@ -934,6 +939,7 @@ public class RuntimeEndpointImpl extends EndpointImpl implements RuntimeEndpoint if (serializer != null) { RuntimeEndpointImpl ep = (RuntimeEndpointImpl)serializer.readEndpoint(xml); copyFrom(ep); + serializer.resolveEndpoint(this); } else { // In this case, we assume that we're running on a detached (non Tuscany) thread and // as a result we need to connect back to the Tuscany environment... |