summaryrefslogtreecommitdiffstats
path: root/sca-java-2.x/trunk/modules
diff options
context:
space:
mode:
Diffstat (limited to 'sca-java-2.x/trunk/modules')
-rw-r--r--sca-java-2.x/trunk/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/EndpointProcessor.java22
-rw-r--r--sca-java-2.x/trunk/modules/core-spi/src/main/java/org/apache/tuscany/sca/runtime/EndpointSerializer.java2
-rw-r--r--sca-java-2.x/trunk/modules/core/META-INF/MANIFEST.MF1
-rw-r--r--sca-java-2.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/impl/EndpointSerializerImpl.java94
-rw-r--r--sca-java-2.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/impl/RuntimeEndpointImpl.java8
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...