summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/Endpoint2.java12
-rw-r--r--java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/ComponentReferenceEndpointReferenceBuilderImpl.java325
-rw-r--r--java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/impl/Endpoint2Impl.java75
-rw-r--r--java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/impl/EndpointReference2Impl.java38
-rw-r--r--java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/EndpointSerializer.java10
-rw-r--r--java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/impl/EndpointSerializerImpl.java19
-rw-r--r--java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/impl/RuntimeEndpointImpl.java32
-rw-r--r--java/sca/modules/endpoint-tribes/src/main/java/org/apache/tuscany/sca/endpoint/tribes/ReplicatedEndpointRegistry.java58
-rw-r--r--java/sca/modules/endpoint-tribes/src/main/resources/META-INF/services/org.apache.tuscany.sca.runtime.EndpointRegistry2
-rw-r--r--java/sca/modules/endpoint/src/main/java/org/apache/tuscany/sca/endpoint/impl/EndpointRegistryImpl.java60
-rw-r--r--java/sca/modules/endpoint/src/main/resources/META-INF/services/org.apache.tuscany.sca.runtime.EndpointRegistry8
11 files changed, 377 insertions, 262 deletions
diff --git a/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/Endpoint2.java b/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/Endpoint2.java
index befd60fd95..f400cf0d01 100644
--- a/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/Endpoint2.java
+++ b/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/Endpoint2.java
@@ -58,42 +58,42 @@ public interface Endpoint2 extends Base, PolicySubject, Cloneable, Serializable
*
* @return componentName
*/
- String getComponentName();
+ // String getComponentName();
/**
* Set the name of the component to which this endpoint refers
*
* @Param componentName
*/
- void setComponentName(String componentName);
+ // void setComponentName(String componentName);
/**
* Get the name of the service to which this endpoint refers
*
* @return serviceName
*/
- String getServiceName();
+ // String getServiceName();
/**
* Set the name of the component to which this endpoint refers
*
* @Param serviceName
*/
- void setServiceName(String serviceName);
+ // void setServiceName(String serviceName);
/**
* Get the name of the binding to which this endpoint refers
*
* @return bindingName
*/
- String getBindingName();
+ // String getBindingName();
/**
* Set the name of the component to which this endpoint refers
*
* @param bindingName
*/
- void setBindingName(String bindingName);
+ // void setBindingName(String bindingName);
/**
* Get the component model object
diff --git a/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/ComponentReferenceEndpointReferenceBuilderImpl.java b/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/ComponentReferenceEndpointReferenceBuilderImpl.java
index b70597a352..7fd49a9d0d 100644
--- a/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/ComponentReferenceEndpointReferenceBuilderImpl.java
+++ b/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/ComponentReferenceEndpointReferenceBuilderImpl.java
@@ -6,15 +6,15 @@
* 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.
+ * under the License.
*/
package org.apache.tuscany.sca.assembly.builder.impl;
@@ -35,7 +35,6 @@ import org.apache.tuscany.sca.assembly.Endpoint2;
import org.apache.tuscany.sca.assembly.EndpointReference2;
import org.apache.tuscany.sca.assembly.Implementation;
import org.apache.tuscany.sca.assembly.Multiplicity;
-import org.apache.tuscany.sca.assembly.Reference;
import org.apache.tuscany.sca.assembly.SCABinding;
import org.apache.tuscany.sca.assembly.builder.CompositeBuilder;
import org.apache.tuscany.sca.assembly.builder.CompositeBuilderException;
@@ -57,7 +56,7 @@ public class ComponentReferenceEndpointReferenceBuilderImpl extends BaseBuilderI
// Testing
//boolean useNew = true;
boolean useNew = false;
-
+
public ComponentReferenceEndpointReferenceBuilderImpl(AssemblyFactory assemblyFactory, InterfaceContractMapper interfaceContractMapper) {
super(assemblyFactory, null, null, null, interfaceContractMapper);
}
@@ -68,48 +67,48 @@ public class ComponentReferenceEndpointReferenceBuilderImpl extends BaseBuilderI
/**
* Create endpoint references for all component references.
- *
+ *
* @param composite
*/
- public void build(Composite composite, Definitions definitions, Monitor monitor) throws CompositeBuilderException
+ public void build(Composite composite, Definitions definitions, Monitor monitor) throws CompositeBuilderException
{
this.monitor = monitor;
-
-
+
+
// process component services
- processComponentReferences(composite);
+ processComponentReferences(composite);
}
-
+
private void processComponentReferences(Composite composite) {
-
+
// index all of the components in the composite
Map<String, Component> components = new HashMap<String, Component>();
indexComponents(composite, components);
-
+
// index all of the services in the composite
Map<String, ComponentService> componentServices = new HashMap<String, ComponentService>();
indexServices(composite, componentServices);
-
+
// create endpoint references for each component's references
for (Component component : composite.getComponents()) {
-
+
for (ComponentReference reference : component.getReferences()) {
createReferenceEndpointReferences2( composite, component, reference, components, componentServices);
} // end for
-
+
// recurse for composite implementations
Implementation implementation = component.getImplementation();
if (implementation instanceof Composite) {
processComponentReferences((Composite)implementation);
}
-
+
// create endpoint references to represent the component reference
for (ComponentReference reference : component.getReferences()) {
-
+
if( !useNew ) {
createReferenceEndpointReferences(composite, component, reference, components, componentServices);
} // end if
-
+
// fix up links between endpoints and endpoint references that represent callbacks
for (ComponentService service : component.getServices()){
if ((service.getInterfaceContract() != null) &&
@@ -125,28 +124,28 @@ public class ComponentReferenceEndpointReferenceBuilderImpl extends BaseBuilderI
} // end for
} // end for
} // end method processCompoenntReferences
-
- private void createReferenceEndpointReferences(Composite composite,
- Component component,
- ComponentReference reference,
+
+ private void createReferenceEndpointReferences(Composite composite,
+ Component component,
+ ComponentReference reference,
Map<String, Component> components,
Map<String, ComponentService> componentServices)
{
- // Get reference targets
+ // Get reference targets
List<ComponentService> refTargets = getReferenceTargets( reference );
- if (reference.getAutowire() == Boolean.TRUE &&
+ if (reference.getAutowire() == Boolean.TRUE &&
reference.getTargets().isEmpty()) {
// Find suitable targets in the current composite for an
// autowired reference
Multiplicity multiplicity = reference.getMultiplicity();
for (Component targetComponent : composite.getComponents()) {
-
+
// Prevent autowire connecting to self
if( targetComponent == component ) continue;
-
+
for (ComponentService targetComponentService : targetComponent.getServices()) {
- if (reference.getInterfaceContract() == null ||
+ if (reference.getInterfaceContract() == null ||
interfaceContractMapper.isCompatible(reference.getInterfaceContract(),
targetComponentService.getInterfaceContract())) {
// create endpoint reference - with a dummy endpoint which will be replaced when policies
@@ -156,7 +155,7 @@ public class ComponentReferenceEndpointReferenceBuilderImpl extends BaseBuilderI
reference.getEndpointReferences().add(endpointRef);
// Stop with the first match for 0..1 and 1..1 references
- if (multiplicity == Multiplicity.ZERO_ONE ||
+ if (multiplicity == Multiplicity.ZERO_ONE ||
multiplicity == Multiplicity.ONE_ONE) {
break;
} // end if
@@ -164,34 +163,34 @@ public class ComponentReferenceEndpointReferenceBuilderImpl extends BaseBuilderI
} // end for
} // end for
- if (multiplicity == Multiplicity.ONE_N ||
+ if (multiplicity == Multiplicity.ONE_N ||
multiplicity == Multiplicity.ONE_ONE) {
if (reference.getEndpointReferences().size() == 0) {
warning(monitor, "NoComponentReferenceTarget",
- reference,
+ reference,
reference.getName());
}
}
} else if (!refTargets.isEmpty()) {
- // Check that the component reference does not mix the use of endpoint references
- // specified via the target attribute with the presence of binding elements
+ // Check that the component reference does not mix the use of endpoint references
+ // specified via the target attribute with the presence of binding elements
if( bindingsIdentifyTargets( reference ) ) {
warning(monitor, "ReferenceEndPointMixWithTarget",
composite, composite.getName().toString(), component.getName(), reference.getName());
}
// Resolve targets specified on the component reference
- for (ComponentService target : refTargets) {
-
+ for (ComponentService target : refTargets) {
+
String targetName = target.getName();
ComponentService targetComponentService = componentServices.get(targetName);
-
+
Component targetComponent = getComponentFromTargetName( components, targetName );
if (targetComponentService != null) {
// Check that target component service provides a superset of the component reference interface
- if (reference.getInterfaceContract() == null ||
+ if (reference.getInterfaceContract() == null ||
interfaceContractMapper.isCompatible(reference.getInterfaceContract(),
targetComponentService.getInterfaceContract())) {
@@ -202,25 +201,25 @@ public class ComponentReferenceEndpointReferenceBuilderImpl extends BaseBuilderI
reference.getEndpointReferences().add(endpointRef);
} else {
warning(monitor, "ReferenceIncompatibleInterface",
- composite,
+ composite,
composite.getName().toString(),
- component.getName() + "." + reference.getName(),
+ component.getName() + "." + reference.getName(),
targetName);
}
} else {
// add an unresolved endpoint reference with an unresolved endpoint to go with it
EndpointReference2 endpointRef = createEndpointRef( component, reference, true );
- endpointRef.setTargetEndpoint(createEndpoint(targetName));
+ endpointRef.setTargetEndpoint(createEndpoint(component, targetName));
reference.getEndpointReferences().add(endpointRef);
warning(monitor, "ComponentReferenceTargetNotFound",
- composite,
+ composite,
composite.getName().toString(),
targetName);
} // end if
} // end for
} // end if
- // if no endpoints have found so far the bindings hold the targets.
+ // if no endpoints have found so far the bindings hold the targets.
if (reference.getEndpointReferences().isEmpty()) {
for (Binding binding : reference.getBindings()) {
@@ -232,10 +231,10 @@ public class ComponentReferenceEndpointReferenceBuilderImpl extends BaseBuilderI
// Regular forward references are UNWIRED with no endpoint if they have an SCABinding with NO targets
// and NO URI set - but Callbacks with an SCABinding are wired and need an endpoint
if( !reference.isCallback() && (binding instanceof SCABinding) ) continue;
-
+
// create endpoint reference for manually configured bindings with a resolved endpoint to
// signify that this reference is pointing at some unwired endpoint
- EndpointReference2 endpointRef = createEndpointRef( component, reference,
+ EndpointReference2 endpointRef = createEndpointRef( component, reference,
binding, null, false );
endpointRef.setTargetEndpoint(createEndpoint(false));
reference.getEndpointReferences().add(endpointRef);
@@ -253,14 +252,14 @@ public class ComponentReferenceEndpointReferenceBuilderImpl extends BaseBuilderI
ComponentService targetComponentService = componentServices.get(uri);
Component targetComponent = getComponentFromTargetName( components, uri );
- // If the binding URI matches a component in the composite, configure an endpoint reference with
- // this component as the target.
+ // If the binding URI matches a component in the composite, configure an endpoint reference with
+ // this component as the target.
// If not, the binding URI is assumed to reference an external service
if (targetComponentService != null) {
// Check that the target component service provides
// a superset of the component reference interface
- if (reference.getInterfaceContract() == null ||
+ if (reference.getInterfaceContract() == null ||
interfaceContractMapper.isCompatible(reference.getInterfaceContract(),
targetComponentService.getInterfaceContract())) {
// create endpoint reference with dummy endpoint which will be replaced when policies
@@ -270,22 +269,22 @@ public class ComponentReferenceEndpointReferenceBuilderImpl extends BaseBuilderI
reference.getEndpointReferences().add(endpointRef);
} else {
warning(monitor, "ReferenceIncompatibleInterface",
- composite,
+ composite,
composite.getName().toString(),
- reference.getName(),
+ reference.getName(),
uri);
}
} else {
- // create endpoint reference for manually configured bindings with resolved endpoint
+ // create endpoint reference for manually configured bindings with resolved endpoint
// to signify that this reference is pointing at some unwired endpoint
EndpointReference2 endpointRef = createEndpointRef( component, reference, binding, null, false );
endpointRef.setTargetEndpoint(createEndpoint( false ));
reference.getEndpointReferences().add(endpointRef);
- } // end if
+ } // end if
}
}
} // end method
-
+
/**
* Create Endpoint References for a component reference inside a given composite
* @param composite - the composite
@@ -294,18 +293,18 @@ public class ComponentReferenceEndpointReferenceBuilderImpl extends BaseBuilderI
* @param components - a map of the components in the composite
* @param componentServices - a map of the component services in the composite
*/
- private void createReferenceEndpointReferences2(Composite composite,
- Component component,
- ComponentReference reference,
+ private void createReferenceEndpointReferences2(Composite composite,
+ Component component,
+ ComponentReference reference,
Map<String, Component> components,
Map<String, ComponentService> componentServices)
{
// Find all the leafmost component references related to this component reference
EndpointrefInfo refInfo = gatherEndpointrefInfo( component, reference, null );
-
- List<Endpoint2> endpoints = getReferenceEndpoints( composite, component,
+
+ List<Endpoint2> endpoints = getReferenceEndpoints( composite, component,
reference, components, componentServices );
-
+
Multiplicity multiplicity = reference.getMultiplicity();
if (multiplicity == Multiplicity.ONE_N || multiplicity == Multiplicity.ONE_ONE) {
// If there are no endpoints defined and also no endpoint references already present
@@ -313,11 +312,11 @@ public class ComponentReferenceEndpointReferenceBuilderImpl extends BaseBuilderI
// will have been attached to a nested reference when a promoting reference has its endpoint
// references computed
if (endpoints.size() == 0 && !reference.isPromoted() ) {
- warning(monitor, "ReferenceWithoutTargets", reference,
+ warning(monitor, "ReferenceWithoutTargets", reference,
composite.getName().toString(), reference.getName());
} // end if
} // end if
-
+
// An endpoint reference is created for the combination of each leafmost component reference and
// each discovered endpoint
for( int i = 0; i < refInfo.getRefs().size(); i++ ) {
@@ -326,13 +325,13 @@ public class ComponentReferenceEndpointReferenceBuilderImpl extends BaseBuilderI
boolean unresolved = false;
for( Endpoint2 endpoint : endpoints ) {
- if( endpoint.isUnresolved() && endpoint.getComponent() == null && endpoint.getService() == null ) {
- unresolved = true;
+ if( endpoint.isUnresolved() && endpoint.getComponent() == null && endpoint.getService() == null ) {
+ unresolved = true;
} else {
- unresolved = false;
+ unresolved = false;
} // end if
// Create an EndpointReference pointing at the endpoint
- EndpointReference2 endRef = createEndpointRef( leafComponent, leafReference,
+ EndpointReference2 endRef = createEndpointRef( leafComponent, leafReference,
endpoint.getBinding(), endpoint, unresolved);
// Add the EndpointReference to the top level AND the leaf level reference, if not the same!!
if( useNew ) {
@@ -349,42 +348,42 @@ public class ComponentReferenceEndpointReferenceBuilderImpl extends BaseBuilderI
// endpoint.getComponent() + " target Service = " + endpoint.getService() );
} // end for
} // end for
-
+
} // end method createReferenceEndpointReferences2
-
- private List<Endpoint2> getReferenceEndpoints(Composite composite, Component component,
+
+ private List<Endpoint2> getReferenceEndpoints(Composite composite, Component component,
ComponentReference reference, Map<String, Component> components,
Map<String, ComponentService> componentServices ) {
// Target services for a component reference are specified in one of a number of ways, in order:
// 1. Component services declared by the @target attribute of the reference
// 2. Service endpoints inside or outside the domain through bindings with configured endpoints
- // 3. If @autowire=true is declared, component services within the composite containing the component which
+ // 3. If @autowire=true is declared, component services within the composite containing the component which
// are compatible with the reference
// 1. takes precedence over 2. - 3. is only used if neither of the other applies
-
+
List<Endpoint2> endpoints = new ArrayList<Endpoint2>();
-
+
// Get targets for references that are callbacks...
- if( getReferenceCallbackEndpoints( composite, component, reference,
+ if( getReferenceCallbackEndpoints( composite, component, reference,
components, componentServices, endpoints ) ) {
-
+
// Get reference targets declared by @target attribute
- } else if ( getReferenceTargetEndpoints( composite, component, reference,
+ } else if ( getReferenceTargetEndpoints( composite, component, reference,
components, componentServices, endpoints ) ) {
-
+
// TODO - need to ensure that <wire/> elements are handled correctly
// Get reference targets identified by configured <binding/> subelements
} else if ( getReferenceBindingEndpoints( composite, component, reference,
components, componentServices, endpoints )) {
-
- // Get reference targets identified by @autowire
- } else {
+
+ // Get reference targets identified by @autowire
+ } else {
getReferenceAutowireEndpoints( composite, component, reference,
components, componentServices, endpoints );
- } // end if
+ } // end if
return endpoints;
} // end method getReferenceEndpoints
-
+
/**
* Gets the callback endpoints of a reference that is a callback reference
* @param composite - the composite
@@ -395,7 +394,7 @@ public class ComponentReferenceEndpointReferenceBuilderImpl extends BaseBuilderI
* @param endpoints - a list of the endpoints (in/out parameter)
* @return - true if the reference is a callback reference, false otherwise
*/
- private boolean getReferenceCallbackEndpoints( Composite composite, Component component,
+ private boolean getReferenceCallbackEndpoints( Composite composite, Component component,
ComponentReference reference, Map<String, Component> components,
Map<String, ComponentService> componentServices, List<Endpoint2> endpoints ) {
// Only if this reference is a callback are there any endpoints of this kind
@@ -406,14 +405,14 @@ public class ComponentReferenceEndpointReferenceBuilderImpl extends BaseBuilderI
Endpoint2 endpoint = createEndpoint(true);
endpoint.setBinding(binding);
endpoints.add( endpoint );
- } // end for
+ } // end for
return true;
} else {
return false;
} // end if
-
+
} // end method getReferenceCallbackEndpoints
-
+
/**
* Gets the endpoints for the services identified by the @target attribute of a reference
* @param composite - the composite
@@ -424,19 +423,19 @@ public class ComponentReferenceEndpointReferenceBuilderImpl extends BaseBuilderI
* @param endpoints - a list of the endpoints (in/out parameter)
* @return true if the @target attribute was set, false otherwise
*/
- private boolean getReferenceTargetEndpoints( Composite composite, Component component,
+ private boolean getReferenceTargetEndpoints( Composite composite, Component component,
ComponentReference reference, Map<String, Component> components,
Map<String, ComponentService> componentServices, List<Endpoint2> endpoints ) {
-
+
List<ComponentService> refTargets = getReferenceTargets( reference );
if ( !refTargets.isEmpty() ) {
// Resolve targets specified on the component reference
- for (ComponentService target : refTargets) {
-
+ for (ComponentService target : refTargets) {
+
String targetName = target.getName();
Component targetComponent = getComponentFromTargetName( components, targetName );
ComponentService targetComponentService = componentServices.get(targetName);
-
+
if (targetComponentService != null) {
// Check that target component service provides a superset of the component reference interface
if (InterfaceContractIsCompatible( reference, targetComponentService )) {
@@ -445,7 +444,7 @@ public class ComponentReferenceEndpointReferenceBuilderImpl extends BaseBuilderI
// TODO
Endpoint2 endpoint = selectTargetEndpoint( reference, targetComponentService );
System.out.println("Selected Endpoint: component=" + endpoint.getComponent().getName() +
- " service=" + endpoint.getService().getName() +
+ " service=" + endpoint.getService().getName() +
" binding=" + endpoint.getBinding().toString());
Endpoint2 endpoint2 = createEndpoint(targetComponent, targetComponentService, true);
endpoint2.setBinding( endpoint.getBinding() );
@@ -469,7 +468,7 @@ public class ComponentReferenceEndpointReferenceBuilderImpl extends BaseBuilderI
} // end if
} // end method getReferenceTargetEndpoints
-
+
/**
* Selects one endpoint of a target service which is compatible with the policy requirements of a reference
* @param reference - the reference (carries policy data with it)
@@ -479,16 +478,16 @@ public class ComponentReferenceEndpointReferenceBuilderImpl extends BaseBuilderI
* service. If there are no matches, this method returns null
*/
private Endpoint2 selectTargetEndpoint( ComponentReference reference, ComponentService service ) {
-
+
// Return the first endpoint with a Binding which is compatible with the policy requirements on
// the reference
for( Endpoint2 endpoint : service.getEndpoints() ) {
return endpoint;
} //end for
-
+
return null;
} // end method selectTargetEndpoint
-
+
/**
* Gets the endpoints for the services identified by the <binding/> subelements of a reference
* @param composite - the composite
@@ -499,7 +498,7 @@ public class ComponentReferenceEndpointReferenceBuilderImpl extends BaseBuilderI
* @param endpoints - a list of the endpoints (in/out parameter)
* @return true if the <binding/> subelements identify target services, false otherwise
*/
- private boolean getReferenceBindingEndpoints( Composite composite, Component component,
+ private boolean getReferenceBindingEndpoints( Composite composite, Component component,
ComponentReference reference, Map<String, Component> components,
Map<String, ComponentService> componentServices, List<Endpoint2> endpoints ) {
// Get service endpoints declared by <binding/> subelements
@@ -514,7 +513,7 @@ public class ComponentReferenceEndpointReferenceBuilderImpl extends BaseBuilderI
// Regular forward references are UNWIRED with no endpoint if they have an SCABinding with NO targets
// and NO URI set - but Callbacks with an SCABinding are wired and need an endpoint
if( !reference.isCallback() && (binding instanceof SCABinding) ) continue;
-
+
// create an unwired endpoint containing the binding
Endpoint2 endpoint = createEndpoint( false );
endpoint.setBinding( binding );
@@ -531,8 +530,8 @@ public class ComponentReferenceEndpointReferenceBuilderImpl extends BaseBuilderI
ComponentService targetComponentService = componentServices.get(uri);
Component targetComponent = getComponentFromTargetName( components, uri );
- // If the binding URI matches a component in the composite, configure an endpoint reference with
- // this component as the target.
+ // If the binding URI matches a component in the composite, configure an endpoint reference with
+ // this component as the target.
// If not, the binding URI is assumed to reference an external service
if (targetComponentService != null) {
// Check that the target component service provides
@@ -549,13 +548,13 @@ public class ComponentReferenceEndpointReferenceBuilderImpl extends BaseBuilderI
} else {
// create resolved endpoint to signify that this reference is pointing at some unwired endpoint
endpoints.add( createEndpoint( false ) );
- } // end if
+ } // end if
} // end for
return true;
} else {
return false;
- } // end if
-
+ } // end if
+
} // end method getReferenceBindingEndpoints
/**
@@ -568,18 +567,18 @@ public class ComponentReferenceEndpointReferenceBuilderImpl extends BaseBuilderI
* @param endpoints - a list of the endpoints (in/out parameter)
* @return true if the @autowire attribute was set, false otherwise
*/
- private boolean getReferenceAutowireEndpoints( Composite composite, Component component,
+ private boolean getReferenceAutowireEndpoints( Composite composite, Component component,
ComponentReference reference, Map<String, Component> components,
Map<String, ComponentService> componentServices, List<Endpoint2> endpoints ) {
// Get compatible target services if @autowire=true is specified
if ( reference.getAutowire() == Boolean.TRUE ) {
-
+
Multiplicity multiplicity = reference.getMultiplicity();
for (Component targetComponent : composite.getComponents()) {
-
+
// Prevent autowire connecting to self
if( targetComponent == component ) continue;
-
+
for (ComponentService targetComponentService : targetComponent.getServices()) {
if (InterfaceContractIsCompatible( reference, targetComponentService )) {
// create endpoint reference - with a dummy endpoint which will be replaced when policies
@@ -587,7 +586,7 @@ public class ComponentReferenceEndpointReferenceBuilderImpl extends BaseBuilderI
endpoints.add( createEndpoint(targetComponent, targetComponentService, true) );
// Stop with the first match for 0..1 and 1..1 references
- if (multiplicity == Multiplicity.ZERO_ONE ||
+ if (multiplicity == Multiplicity.ZERO_ONE ||
multiplicity == Multiplicity.ONE_ONE) {
break;
} // end if
@@ -597,10 +596,10 @@ public class ComponentReferenceEndpointReferenceBuilderImpl extends BaseBuilderI
return true;
} else {
return false;
- } // end if
+ } // end if
} // end method getReferenceAutowireEndpoints
-
+
/**
* Evaluates if the interface contract of a component service is a compatible superset of the interface contract
* of a component reference
@@ -613,7 +612,7 @@ public class ComponentReferenceEndpointReferenceBuilderImpl extends BaseBuilderI
return interfaceContractMapper.isCompatible(reference.getInterfaceContract(),
service.getInterfaceContract());
} // end method InterfaceContractIsCompatible
-
+
/**
* Gather the Endpoint reference information for a component reference
* - gathers information from deeper in the hierarchy for a component which is implemented by a composite
@@ -628,9 +627,9 @@ public class ComponentReferenceEndpointReferenceBuilderImpl extends BaseBuilderI
if( refInfo == null ) refInfo = new EndpointrefInfo();
// Deal with the cases where there is an error in the configuration
if( reference.isUnresolved() ) return refInfo;
-
+
refInfo.setContract(reference.getInterfaceContract());
- // RULE: If the interface contract is not already set at this level, then it must be
+ // RULE: If the interface contract is not already set at this level, then it must be
// identical across all the next level elements - otherwise they can be subsets
boolean equalInterfaces = false;
if( refInfo.getContract() == null ) equalInterfaces = true;
@@ -653,10 +652,10 @@ public class ComponentReferenceEndpointReferenceBuilderImpl extends BaseBuilderI
} // end if
// RULE: Any PolicySets at this level override PolicySets from lower levels
refInfo.setPolicySets(reference.getPolicySets());
-
- return refInfo;
+
+ return refInfo;
} // end method gatherEndpointrefInfo
-
+
/**
* A class used to gather endpoint reference information for a component reference
* - handles the information in a promotion hierarchy where the component reference is implemented
@@ -670,7 +669,7 @@ public class ComponentReferenceEndpointReferenceBuilderImpl extends BaseBuilderI
private List<Intent> intents = new ArrayList<Intent>();
private List<PolicySet> policySets = null;
private boolean contractEqual = false;
-
+
/**
* Sets whether new contracts must be equal to the current contract or not
* @param isEqual - true means that Contracts must be equal to the current contract - false means that Contracts
@@ -679,11 +678,11 @@ public class ComponentReferenceEndpointReferenceBuilderImpl extends BaseBuilderI
void setContractEqual( boolean isEqual ) {
contractEqual = isEqual;
}
-
+
boolean getContractEqual() {
return contractEqual;
}
-
+
List<PolicySet> getPolicySets() {
return policySets;
}
@@ -695,23 +694,23 @@ public class ComponentReferenceEndpointReferenceBuilderImpl extends BaseBuilderI
List<Component> getComponents() {
return components;
}
-
+
void addComponent(Component component) {
this.components.add( component );
}
-
+
List<ComponentReference> getRefs() {
return refs;
}
-
+
void addRef(ComponentReference ref) {
this.refs.add( ref );
}
-
+
InterfaceContract getContract() {
return contract;
}
-
+
/**
* Set the contract - with checking of the contract if a contract is already set
* @param contract - the contract to set
@@ -735,9 +734,9 @@ public class ComponentReferenceEndpointReferenceBuilderImpl extends BaseBuilderI
this.contract.toString(), contract.toString() );
} // end if
} // end if
- } // end if
+ } // end if
}
-
+
List<Intent> getIntents() {
return intents;
}
@@ -748,10 +747,10 @@ public class ComponentReferenceEndpointReferenceBuilderImpl extends BaseBuilderI
void addIntents(List<Intent> intents) {
this.intents.addAll( intents );
}
-
-
+
+
} // end class EndpointrefInfo
-
+
/**
* Evaluates whether the bindings attached to a reference identify one or more target services.
* @param reference - the reference
@@ -761,13 +760,13 @@ public class ComponentReferenceEndpointReferenceBuilderImpl extends BaseBuilderI
for( Binding binding : reference.getBindings() ) {
// <binding.sca without a URI does not identify a target
if( (binding instanceof SCABinding) && (binding.getURI() == null) ) continue;
- // any other binding implies a target
+ // any other binding implies a target
// TODO Processing for other binding types
return true;
} // end for
return false;
} // end bindingsIdentifyTargets
-
+
/**
* Helper method which obtains a list of targets for a reference
* @param reference - Component reference
@@ -783,7 +782,7 @@ public class ComponentReferenceEndpointReferenceBuilderImpl extends BaseBuilderI
} // end if
return theTargets;
} // end method getReferenceTargets
-
+
/**
* Helper method that finds the Component given a target name
* @param components
@@ -800,7 +799,7 @@ public class ComponentReferenceEndpointReferenceBuilderImpl extends BaseBuilderI
}
return theComponent;
} // end method getComponentFromTargetName
-
+
/**
* Helper method to create an Endpoint Reference
* @param component
@@ -810,14 +809,14 @@ public class ComponentReferenceEndpointReferenceBuilderImpl extends BaseBuilderI
* @param unresolved
* @return the endpoint reference
*/
- private EndpointReference2 createEndpointRef( Component component, ComponentReference reference,
+ private EndpointReference2 createEndpointRef( Component component, ComponentReference reference,
Binding binding, Endpoint2 endpoint, boolean unresolved ) {
EndpointReference2 endpointRef = createEndpointRef( component, reference, unresolved );
endpointRef.setBinding(binding);
endpointRef.setTargetEndpoint(endpoint);
return endpointRef;
- } // end method
-
+ } // end method
+
/**
* Helper method to create an Endpoint Reference
* @param component
@@ -832,8 +831,8 @@ public class ComponentReferenceEndpointReferenceBuilderImpl extends BaseBuilderI
endpointRef.setUnresolved(unresolved);
return endpointRef;
} // end method createEndpointRef
-
-
+
+
/**
* Helper method to create an endpoint
* @param component
@@ -848,7 +847,7 @@ public class ComponentReferenceEndpointReferenceBuilderImpl extends BaseBuilderI
endpoint.setUnresolved(unresolved);
return endpoint;
} // end method createEndpoint
-
+
/**
* Helper method to create an Endpoint
* @param unresolved
@@ -859,31 +858,55 @@ public class ComponentReferenceEndpointReferenceBuilderImpl extends BaseBuilderI
endpoint.setUnresolved(unresolved);
return endpoint;
} // end method createEndpoint
-
+
/**
* Helper method to create an Endpoint
- * @param unresolved
+ *
+ * @param component The component that owns the reference
+ * @param targetName It can be one of the following formats
+ * <ul>
+ * <li>componentName
+ * <li>componentName/serviceName
+ * <li>componentName/serviceName/bindingName
+ * </ul>
* @return the endpoint
*/
- private Endpoint2 createEndpoint(String targetName) {
- String componentName;
- String serviceName;
- int i = targetName.lastIndexOf('/');
- if (i != -1) {
- componentName = targetName.substring(0, i);
- serviceName = targetName.substring(i + 1);
+ private Endpoint2 createEndpoint(Component component, String targetName) {
+ String[] parts = targetName.split("/");
+ if (parts.length < 1 || parts.length > 3) {
+ throw new IllegalArgumentException("Invalid target URI: " + targetName);
+ }
+ // Find the parent uri
+ String uri = component.getURI();
+ int index = uri.lastIndexOf('/');
+ if (index == -1) {
+ uri = "";
} else {
- componentName = targetName;
- serviceName = null;
+ uri = uri.substring(0, index);
}
-
+
+ if (parts.length >= 1) {
+ // Append the target component name
+ if (uri.length() == 0) {
+ uri = parts[0];
+ } else {
+ uri = uri + "/" + parts[0];
+ }
+ }
+ if (parts.length == 3) {
+ // <componentURI>#service-binding(serviceName/bindingName)
+ uri = uri + "#service-binding(" + parts[1] + "/" + parts[2] + ")";
+ } else if (parts.length == 2) {
+ // <componentURI>#service(serviceName)
+ uri = uri + "#service(" + parts[1] + ")";
+ }
+
Endpoint2 endpoint = assemblyFactory.createEndpoint();
endpoint.setUnresolved(true);
- endpoint.setComponentName(componentName);
- endpoint.setServiceName(serviceName);
+ endpoint.setURI(uri);
return endpoint;
} // end method createEndpoint
-
+
} // end class
diff --git a/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/impl/Endpoint2Impl.java b/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/impl/Endpoint2Impl.java
index 9844a8b7b1..bc5f5899d6 100644
--- a/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/impl/Endpoint2Impl.java
+++ b/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/impl/Endpoint2Impl.java
@@ -44,11 +44,8 @@ public class Endpoint2Impl implements Endpoint2 {
protected ExtensionPointRegistry registry;
protected boolean unresolved;
protected String uri;
- protected String componentName;
protected Component component;
- protected String serviceName;
protected ComponentService service;
- protected String bindingName;
protected Binding binding;
protected InterfaceContract interfaceContract;
protected List<EndpointReference2> callbackEndpointReferences = new ArrayList<EndpointReference2>();
@@ -72,58 +69,38 @@ public class Endpoint2Impl implements Endpoint2 {
this.unresolved = unresolved;
}
- public String getComponentName() {
- return componentName;
- }
-
- public void setComponentName(String componentName) {
- this.componentName = componentName;
- }
-
public Component getComponent() {
+ resolve();
return component;
}
public void setComponent(Component component) {
this.component = component;
- this.componentName = component.getURI();
- }
-
- public String getServiceName() {
- return serviceName;
- }
-
- public void setServiceName(String serviceName) {
- this.serviceName = serviceName;
+ reset();
}
public ComponentService getService() {
+ resolve();
return service;
}
public void setService(ComponentService service) {
this.service = service;
- this.serviceName = service.getName();
- }
-
- public String getBindingName() {
- return bindingName;
- }
-
- public void setBindingName(String bindingName) {
- this.bindingName = bindingName;
+ reset();
}
public Binding getBinding() {
+ resolve();
return binding;
}
public void setBinding(Binding binding) {
this.binding = binding;
- this.bindingName = binding.getName();
+ reset();
}
public InterfaceContract getInterfaceContract() {
+ resolve();
return interfaceContract;
}
@@ -139,14 +116,17 @@ public class Endpoint2Impl implements Endpoint2 {
* @return callbackEndpoint the reference callback endpoint
*/
public List<EndpointReference2> getCallbackEndpointReferences(){
+ resolve();
return callbackEndpointReferences;
}
public List<PolicySet> getPolicySets() {
+ resolve();
return policySets;
}
public List<Intent> getRequiredIntents() {
+ resolve();
return requiredIntents;
}
@@ -164,28 +144,31 @@ public class Endpoint2Impl implements Endpoint2 {
public String toString(){
String output = "Endpoint: ";
- if (componentName != null){
- output += " Component = " + componentName;
- }
-
- if (serviceName != null){
- output += " Service = " + serviceName;
- }
-
- if (bindingName != null){
- output += " Binding = " + bindingName + "/" + binding.getClass().getName() + " ";
+ if (getURI() != null){
+ output += " URI = " + uri;
}
if (unresolved) {
- output += " Unresolved = true";
- } else {
- output += " Unresolved = false";
+ output += " [Unresolved]";
}
return output;
}
public String getURI() {
+ if (uri == null) {
+ if (component != null && service != null && binding != null) {
+ String bindingName = binding.getName();
+ if (bindingName == null) {
+ bindingName = service.getName();
+ }
+ uri = component.getURI() + "#service-binding(" + service.getName() + "/" + bindingName + ")";
+ } else if (component != null && service != null) {
+ uri = component.getURI() + "#service(" + service.getName() + ")";
+ } else if (component != null) {
+ uri = component.getURI();
+ }
+ }
return uri;
}
@@ -193,4 +176,10 @@ public class Endpoint2Impl implements Endpoint2 {
this.uri = uri;
}
+ protected void resolve() {
+ }
+
+ protected void reset() {
+ this.uri = null;
+ }
}
diff --git a/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/impl/EndpointReference2Impl.java b/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/impl/EndpointReference2Impl.java
index fa61de9bd8..c175689082 100644
--- a/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/impl/EndpointReference2Impl.java
+++ b/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/impl/EndpointReference2Impl.java
@@ -86,6 +86,7 @@ public class EndpointReference2Impl implements EndpointReference2 {
public void setComponent(Component component) {
this.component = component;
+ this.uri = null;
}
public ComponentReference getReference() {
@@ -94,6 +95,7 @@ public class EndpointReference2Impl implements EndpointReference2 {
public void setReference(ComponentReference reference) {
this.reference = reference;
+ this.uri = null;
}
public Binding getBinding() {
@@ -102,6 +104,7 @@ public class EndpointReference2Impl implements EndpointReference2 {
public void setBinding(Binding binding) {
this.binding = binding;
+ this.uri = null;
}
public Endpoint2 getTargetEndpoint() {
@@ -147,35 +150,38 @@ public class EndpointReference2Impl implements EndpointReference2 {
this.callbackEndpoint = callbackEndpoint;
}
- public String toString(){
- String output = "Endpoint Reference: ";
+ public String toString() {
+ String output = "Endpoint Reference: ";
- if (component != null){
- output += " Component = " + component.getName();
- }
-
- if (reference != null){
- output += " Reference = " + reference.getName();
- }
-
- if (binding != null){
- output += " Binding = " + binding.getName() + "/" + binding.getClass().getName() + " ";
+ if (getURI() != null) {
+ output += " URI = " + uri;
}
if (unresolved) {
- output += " Unresolved = true ";
- } else {
- output += " Unresolved = false ";
+ output += " [Unresolved]";
}
if (targetEndpoint != null) {
- output += " Target " + targetEndpoint.toString();
+ output += " Target = " + targetEndpoint.toString();
}
return output;
}
public String getURI() {
+ if (uri == null) {
+ if (component != null && reference != null && binding != null) {
+ String bindingName = binding.getName();
+ if (bindingName == null) {
+ bindingName = reference.getName();
+ }
+ uri = component.getURI() + "#reference-binding(" + reference.getName() + "/" + bindingName + ")";
+ } else if (component != null && reference != null) {
+ uri = component.getURI() + "#reference(" + reference.getName() + ")";
+ } else if (component != null) {
+ uri = component.getURI();
+ }
+ }
return uri;
}
diff --git a/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/EndpointSerializer.java b/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/EndpointSerializer.java
index 1cdc1c6209..ff2c98cefb 100644
--- a/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/EndpointSerializer.java
+++ b/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/EndpointSerializer.java
@@ -20,8 +20,6 @@
package org.apache.tuscany.sca.core.assembly;
import java.io.IOException;
-import java.io.ObjectInput;
-import java.io.ObjectOutput;
import org.apache.tuscany.sca.assembly.Endpoint2;
import org.apache.tuscany.sca.assembly.EndpointReference2;
@@ -30,11 +28,11 @@ import org.apache.tuscany.sca.assembly.EndpointReference2;
* A utility to seralize/deserialize Endpoint/EndpointReference objects
*/
public interface EndpointSerializer {
- void readExternal(Endpoint2 endpoint, ObjectInput input) throws IOException;
+ void read(Endpoint2 endpoint, String xml) throws IOException;
- void writeExternal(Endpoint2 endpoint, ObjectOutput output) throws IOException;
+ String write(Endpoint2 endpoint) throws IOException;
- void readExternal(EndpointReference2 endpointReference, ObjectInput input) throws IOException;
+ void read(EndpointReference2 endpointReference, String xml) throws IOException;
- void writeExternal(EndpointReference2 endpointReference, ObjectOutput output) throws IOException;
+ String write(EndpointReference2 endpointReference) throws IOException;
}
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 bf3339d8ad..1cef109553 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
@@ -20,8 +20,6 @@
package org.apache.tuscany.sca.core.assembly.impl;
import java.io.IOException;
-import java.io.ObjectInput;
-import java.io.ObjectOutput;
import java.io.StringReader;
import java.io.StringWriter;
@@ -54,54 +52,55 @@ public class EndpointSerializerImpl implements EndpointSerializer {
refProcessor = processors.getProcessor(EndpointReference2.class);
}
- public void readExternal(Endpoint2 endpoint, ObjectInput input) throws IOException {
+ public void read(Endpoint2 endpoint, String xml) throws IOException {
try {
- String xml = input.readUTF();
XMLStreamReader reader = inputFactory.createXMLStreamReader(new StringReader(xml));
Endpoint2 result = processor.read(reader);
endpoint.setComponent(result.getComponent());
endpoint.setService(result.getService());
endpoint.setBinding(result.getBinding());
+ endpoint.setInterfaceContract(result.getService().getInterfaceContract());
} catch (Exception e) {
throw new IOException(e);
}
}
- public void writeExternal(Endpoint2 endpoint, ObjectOutput output) throws IOException {
+ public String write(Endpoint2 endpoint) throws IOException {
StringWriter sw = new StringWriter();
try {
XMLStreamWriter writer = outputFactory.createXMLStreamWriter(sw);
processor.write(endpoint, writer);
writer.flush();
- output.writeUTF(sw.toString());
writer.close();
+ return sw.toString();
} catch (Exception e) {
throw new IOException(e);
}
}
- public void readExternal(EndpointReference2 endpointReference, ObjectInput input) throws IOException {
+ public void read(EndpointReference2 endpointReference, String xml) throws IOException {
try {
- String xml = input.readUTF();
XMLStreamReader reader = inputFactory.createXMLStreamReader(new StringReader(xml));
EndpointReference2 result = refProcessor.read(reader);
reader.close();
endpointReference.setComponent(result.getComponent());
endpointReference.setReference(result.getReference());
endpointReference.setBinding(result.getBinding());
+ endpointReference.setInterfaceContract(result.getReference().getInterfaceContract());
} catch (Exception e) {
throw new IOException(e);
}
}
- public void writeExternal(EndpointReference2 endpointReference, ObjectOutput output) throws IOException {
+ public String write(EndpointReference2 endpointReference) throws IOException {
StringWriter sw = new StringWriter();
try {
XMLStreamWriter writer = outputFactory.createXMLStreamWriter(sw);
refProcessor.write(endpointReference, writer);
writer.flush();
- output.writeUTF(sw.toString());
+ writer.close();
+ return sw.toString();
} catch (Exception e) {
throw new IOException(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 41222a1148..da21e9f8ba 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
@@ -32,7 +32,12 @@ import org.apache.tuscany.sca.core.assembly.EndpointSerializer;
* Runtime model for Endpoint that supports java serialization
*/
public class RuntimeEndpointImpl extends Endpoint2Impl implements Externalizable {
+ /**
+ * FIXME: What's the best way to get the extension point registry upon deserialization?
+ * We can expose a method to receive the extension point registry
+ */
private static EndpointSerializer serializer;
+ private String xml;
/**
* No-arg constructor for Java serilization
@@ -49,13 +54,32 @@ public class RuntimeEndpointImpl extends Endpoint2Impl implements Externalizable
}
public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
- // When this method is invoked, the instance is created using the no-arg constructor
- // We need to keep the serializer as a static
- serializer.readExternal(this, in);
+ this.uri = in.readUTF();
+ this.xml = in.readUTF();
+ // Defer the loading to resolve();
}
public void writeExternal(ObjectOutput out) throws IOException {
- serializer.writeExternal(this, out);
+ out.writeUTF(getURI());
+ out.writeUTF(serializer.write(this));
+ }
+
+ @Override
+ protected void reset() {
+ super.reset();
+ this.xml = null;
+ }
+
+ @Override
+ protected void resolve() {
+ if (component == null && xml != null) {
+ try {
+ serializer.read(this, xml);
+ } catch (IOException e) {
+ throw new IllegalStateException(e);
+ }
+ }
+ super.resolve();
}
}
diff --git a/java/sca/modules/endpoint-tribes/src/main/java/org/apache/tuscany/sca/endpoint/tribes/ReplicatedEndpointRegistry.java b/java/sca/modules/endpoint-tribes/src/main/java/org/apache/tuscany/sca/endpoint/tribes/ReplicatedEndpointRegistry.java
index 330c22d4e9..f7dac1ff33 100644
--- a/java/sca/modules/endpoint-tribes/src/main/java/org/apache/tuscany/sca/endpoint/tribes/ReplicatedEndpointRegistry.java
+++ b/java/sca/modules/endpoint-tribes/src/main/java/org/apache/tuscany/sca/endpoint/tribes/ReplicatedEndpointRegistry.java
@@ -128,6 +128,50 @@ public class ReplicatedEndpointRegistry implements EndpointRegistry {
listeners.add(listener);
}
+ /**
+ * Parse the component/service/binding URI into an array of parts (componentURI, serviceName, bindingName)
+ * @param uri
+ * @return
+ */
+ private String[] parse(String uri) {
+ String[] names = new String[3];
+ int index = uri.lastIndexOf('#');
+ if (index == -1) {
+ names[0] = uri;
+ } else {
+ names[0] = uri.substring(0, index);
+ String str = uri.substring(index + 1);
+ if (str.startsWith("service-binding(") && str.endsWith(")")) {
+ str = str.substring("service-binding(".length(), str.length() - 1);
+ String[] parts = str.split("/");
+ if (parts.length != 2) {
+ throw new IllegalArgumentException("Invalid service-binding URI: " + uri);
+ }
+ names[1] = parts[0];
+ names[2] = parts[1];
+ } else if (str.startsWith("service(") && str.endsWith(")")) {
+ str = str.substring("service(".length(), str.length() - 1);
+ names[1] = str;
+ } else {
+ throw new IllegalArgumentException("Invalid component/service/binding URI: " + uri);
+ }
+ }
+ return names;
+ }
+
+ private boolean matches(String target, String uri) {
+ String[] parts1 = parse(target);
+ String[] parts2 = parse(uri);
+ for (int i = 0; i < parts1.length; i++) {
+ if (parts1[i] == null || parts1[i].equals(parts2[i])) {
+ continue;
+ } else {
+ return false;
+ }
+ }
+ return true;
+ }
+
public List<Endpoint2> findEndpoint(EndpointReference2 endpointReference) {
List<Endpoint2> foundEndpoints = new ArrayList<Endpoint2>();
@@ -138,17 +182,11 @@ public class ReplicatedEndpointRegistry implements EndpointRegistry {
for (Object v : map.values()) {
Endpoint2 endpoint = (Endpoint2)v;
// TODO: implement more complete matching
- if (endpoint.getComponentName().equals(targetEndpoint.getComponentName())) {
- if ((targetEndpoint.getServiceName() == null) || (targetEndpoint.getServiceName().equals(endpoint
- .getServiceName()))) {
- foundEndpoints.add(endpoint);
- logger.info("EndpointRegistry: Found endpoint with matching service - " + endpoint);
- } else if (targetEndpoint.getServiceName() == null) {
- foundEndpoints.add(endpoint);
- logger.info("EndpointRegistry: Found endpoint with matching component - " + endpoint);
- }
- // else the service name doesn't match
+ if (matches(targetEndpoint.getURI(), endpoint.getURI())) {
+ foundEndpoints.add(endpoint);
+ logger.info("EndpointRegistry: Found endpoint with matching service - " + endpoint);
}
+ // else the service name doesn't match
}
}
return foundEndpoints;
diff --git a/java/sca/modules/endpoint-tribes/src/main/resources/META-INF/services/org.apache.tuscany.sca.runtime.EndpointRegistry b/java/sca/modules/endpoint-tribes/src/main/resources/META-INF/services/org.apache.tuscany.sca.runtime.EndpointRegistry
index 5a7bafd7f6..f23acf5010 100644
--- a/java/sca/modules/endpoint-tribes/src/main/resources/META-INF/services/org.apache.tuscany.sca.runtime.EndpointRegistry
+++ b/java/sca/modules/endpoint-tribes/src/main/resources/META-INF/services/org.apache.tuscany.sca.runtime.EndpointRegistry
@@ -14,4 +14,4 @@
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
-org.apache.tuscany.sca.endpoint.tribes.ReplicatedEndpointRegistry;ranking=100,address=228.0.0.100,port=50000,timeout=50 \ No newline at end of file
+org.apache.tuscany.sca.endpoint.tribes.ReplicatedEndpointRegistry;ranking=50,address=228.0.0.100,port=50000,timeout=50 \ No newline at end of file
diff --git a/java/sca/modules/endpoint/src/main/java/org/apache/tuscany/sca/endpoint/impl/EndpointRegistryImpl.java b/java/sca/modules/endpoint/src/main/java/org/apache/tuscany/sca/endpoint/impl/EndpointRegistryImpl.java
index 83522f4599..c57fc579c8 100644
--- a/java/sca/modules/endpoint/src/main/java/org/apache/tuscany/sca/endpoint/impl/EndpointRegistryImpl.java
+++ b/java/sca/modules/endpoint/src/main/java/org/apache/tuscany/sca/endpoint/impl/EndpointRegistryImpl.java
@@ -54,6 +54,50 @@ public class EndpointRegistryImpl implements EndpointRegistry {
logger.info("EndpointRegistry: Add endpoint reference - " + endpointReference.toString());
}
+ /**
+ * Parse the component/service/binding URI into an array of parts (componentURI, serviceName, bindingName)
+ * @param uri
+ * @return
+ */
+ private String[] parse(String uri) {
+ String[] names = new String[3];
+ int index = uri.lastIndexOf('#');
+ if (index == -1) {
+ names[0] = uri;
+ } else {
+ names[0] = uri.substring(0, index);
+ String str = uri.substring(index + 1);
+ if (str.startsWith("service-binding(") && str.endsWith(")")) {
+ str = str.substring("service-binding(".length(), str.length() - 1);
+ String[] parts = str.split("/");
+ if (parts.length != 2) {
+ throw new IllegalArgumentException("Invalid service-binding URI: " + uri);
+ }
+ names[1] = parts[0];
+ names[2] = parts[1];
+ } else if (str.startsWith("service(") && str.endsWith(")")) {
+ str = str.substring("service(".length(), str.length() - 1);
+ names[1] = str;
+ } else {
+ throw new IllegalArgumentException("Invalid component/service/binding URI: " + uri);
+ }
+ }
+ return names;
+ }
+
+ private boolean matches(String target, String uri) {
+ String[] parts1 = parse(target);
+ String[] parts2 = parse(uri);
+ for (int i = 0; i < parts1.length; i++) {
+ if (parts1[i] == null || parts1[i].equals(parts2[i])) {
+ continue;
+ } else {
+ return false;
+ }
+ }
+ return true;
+ }
+
public List<Endpoint2> findEndpoint(EndpointReference2 endpointReference) {
List<Endpoint2> foundEndpoints = new ArrayList<Endpoint2>();
@@ -63,20 +107,14 @@ public class EndpointRegistryImpl implements EndpointRegistry {
Endpoint2 targetEndpoint = endpointReference.getTargetEndpoint();
for (Endpoint2 endpoint : endpoints) {
// TODO: implement more complete matching
- if (endpoint.getComponentName().equals(targetEndpoint.getComponentName())) {
- if ((targetEndpoint.getServiceName() != null) && (endpoint.getServiceName().equals(targetEndpoint
- .getServiceName()))) {
- foundEndpoints.add(endpoint);
- logger.info("EndpointRegistry: Found endpoint with matching service - " + endpoint.toString());
- } else if (targetEndpoint.getServiceName() == null) {
- foundEndpoints.add(endpoint);
- logger.info("EndpointRegistry: Found endpoint with matching component - " + endpoint
- .toString());
- }
- // else the service name doesn't match
+ if (matches(targetEndpoint.getURI(), endpoint.getURI())) {
+ foundEndpoints.add(endpoint);
+ logger.info("EndpointRegistry: Found endpoint with matching service - " + endpoint);
}
+ // else the service name doesn't match
}
}
+
return foundEndpoints;
}
diff --git a/java/sca/modules/endpoint/src/main/resources/META-INF/services/org.apache.tuscany.sca.runtime.EndpointRegistry b/java/sca/modules/endpoint/src/main/resources/META-INF/services/org.apache.tuscany.sca.runtime.EndpointRegistry
index 26ee8ce362..75a909199e 100644
--- a/java/sca/modules/endpoint/src/main/resources/META-INF/services/org.apache.tuscany.sca.runtime.EndpointRegistry
+++ b/java/sca/modules/endpoint/src/main/resources/META-INF/services/org.apache.tuscany.sca.runtime.EndpointRegistry
@@ -5,14 +5,14 @@
# 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.
+# under the License.
-org.apache.tuscany.sca.endpoint.impl.EndpointRegistryImpl \ No newline at end of file
+org.apache.tuscany.sca.endpoint.impl.EndpointRegistryImpl;ranking=100 \ No newline at end of file