summaryrefslogtreecommitdiffstats
path: root/java/sca/modules/endpoint/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'java/sca/modules/endpoint/src/main')
-rw-r--r--java/sca/modules/endpoint/src/main/java/org/apache/tuscany/sca/endpoint/impl/EndpointReferenceBuilderImpl.java388
-rw-r--r--java/sca/modules/endpoint/src/main/resources/META-INF/services/org.apache.tuscany.sca.assembly.builder.CompositeBuilder18
2 files changed, 72 insertions, 334 deletions
diff --git a/java/sca/modules/endpoint/src/main/java/org/apache/tuscany/sca/endpoint/impl/EndpointReferenceBuilderImpl.java b/java/sca/modules/endpoint/src/main/java/org/apache/tuscany/sca/endpoint/impl/EndpointReferenceBuilderImpl.java
index 5b3c252880..49b7c4c7b4 100644
--- a/java/sca/modules/endpoint/src/main/java/org/apache/tuscany/sca/endpoint/impl/EndpointReferenceBuilderImpl.java
+++ b/java/sca/modules/endpoint/src/main/java/org/apache/tuscany/sca/endpoint/impl/EndpointReferenceBuilderImpl.java
@@ -54,7 +54,7 @@ import org.oasisopen.sca.SCARuntimeException;
*
* @version $Rev$ $Date$
*/
-public class EndpointReferenceBuilderImpl implements CompositeBuilder, EndpointReferenceBuilder {
+public class EndpointReferenceBuilderImpl implements EndpointReferenceBuilder {
protected ExtensionPointRegistry extensionPoints;
protected AssemblyFactory assemblyFactory;
@@ -73,64 +73,19 @@ public class EndpointReferenceBuilderImpl implements CompositeBuilder, EndpointR
this.endpointRegistry = utils.getUtility(EndpointRegistry.class);
}
-
- public String getID() {
- return "org.apache.tuscany.sca.assembly.builder.EndpointReferenceBuilder";
- }
-
+
/**
- * Report a warning.
- *
- * @param monitor
- * @param problems
- * @param message
- * @param model
- */
- protected void warning(Monitor monitor, String message, Object model, String... messageParameters) {
- if (monitor != null) {
- Problem problem = monitor.createProblem(this.getClass().getName(), "assembly-validation-messages", Severity.WARNING, model, message, (Object[])messageParameters);
- monitor.problem(problem);
- }
- }
-
- /**
- * Report a error.
+ * Build a composite
*
+ * @param endpoint
* @param monitor
- * @param problems
- * @param message
- * @param model
*/
- protected void error(Monitor monitor, String message, Object model, String... messageParameters) {
- if (monitor != null) {
- Problem problem = monitor.createProblem(this.getClass().getName(), "assembly-validation-messages", Severity.ERROR, model, message, (Object[])messageParameters);
- monitor.problem(problem);
- }
- }
-
- /**
- * Report a exception.
- *
- * @param problems
- * @param message
- * @param model
- */
- protected void error(Monitor monitor, String message, Object model, Exception ex) {
- if (monitor != null) {
- Problem problem = null;
- problem = monitor.createProblem(this.getClass().getName(), "assembly-validation-messages", Severity.ERROR, model, message, ex);
- monitor.problem(problem);
- }
- }
-
- /**
- * Build all the endpoint references
- *
- * @param composite
- */
- public void build(Composite composite, Definitions definitions, Monitor monitor) throws CompositeBuilderException
- {
- // Not used now
+ public void buildtimeBuild(Composite composite) {
+ // TODO - ready for reorganization of the builders
+ // build all the endpoint references in a composite
+ // that it is possible to build in order to get any
+ // errors out as early as possible. Any that can't
+ // be built now must wait until runtime
}
/**
@@ -139,193 +94,78 @@ public class EndpointReferenceBuilderImpl implements CompositeBuilder, EndpointR
* @param endpoint
* @param monitor
*/
- public void build(EndpointReference endpointReference, Monitor monitor) {
- Endpoint endpoint = endpointReference.getTargetEndpoint();
-
- if (endpoint == null){
- // an error?
- } else {
- if (endpoint.isUnresolved() == false){
- // Wired - service resolved - binding matched
- // The service is in the same composite or the
- // binding is remote and has a full URI
-
- // still need to check that the callback endpoint is set correctly
- if ((endpointReference.getCallbackEndpoint() != null) &&
- (endpointReference.getCallbackEndpoint().isUnresolved() == false)){
- return;
- }
-
- matchCallbackBinding(endpointReference,
- monitor);
-
+ public void runtimeBuild(EndpointReference endpointReference) {
+
+ if ( endpointReference.getStatus() == EndpointReference.WIRED_TARGET_FOUND_AND_MATCHED ||
+ endpointReference.getStatus() == EndpointReference.RESOLVED_BINDING ) {
+ // The endpoint reference is already resolved to either
+ // a service endpoint local to this composite or it has
+ // a remote binding
+
+ // still need to check that the callback endpoint is set correctly
+ if ((endpointReference.getCallbackEndpoint() != null) &&
+ (endpointReference.getCallbackEndpoint().isUnresolved() == false)){
return;
}
- if (endpointReference.isUnresolved() == false ){
- // Wired - service resolved - binding not matched
- // The service is in the same composite
- // TODO - How do we get to here?
- matchForwardBinding(endpointReference,
- true,
- monitor);
-
- matchCallbackBinding(endpointReference,
- monitor);
- } else {
- // Wired - service specified but unresolved
- // The service is in a remote composite somewhere else in the domain
-
- // find the service in the endpoint registry
- List<Endpoint> endpoints = endpointRegistry.findEndpoint(endpointReference);
-
- // TODO - do we expect to find more than one endpoint in
- // anything other than the autowire case?
- if (endpoints.size() == 0) {
- throw new SCARuntimeException("No endpoints found for EndpointReference " + endpointReference.toString());
- }
-
- if (endpoints.size() > 1) {
- throw new SCARuntimeException("More than one endpoint found for EndpointReference" + endpointReference.toString());
- }
-
- endpointReference.setTargetEndpoint(endpoints.get(0));
+ selectCallbackBinding(endpointReference);
+
+ } else if (endpointReference.getStatus() == EndpointReference.WIRED_TARGET_FOUND_READY_FOR_MATCHING ){
+ // The endpoint reference is already resolved to either
+ // a service endpoint but no binding was specified in the
+ // target URL
+
+ // TODO - EPR - endpoint selection
+ // just use the first one
+ endpointReference.setTargetEndpoint(endpointReference.getTargetEndpoint().getService().getEndpoints().get(0));
+
+ selectForwardBinding(endpointReference);
+
+ selectCallbackBinding(endpointReference);
+
+ } else if (endpointReference.getStatus() == EndpointReference.WIRED_TARGET_NOT_FOUND ||
+ endpointReference.getStatus() == EndpointReference.NOT_CONFIGURED){
+ // The service is in a remote composite somewhere else in the domain
+
+ // find the service in the endpoint registry
+ List<Endpoint> endpoints = endpointRegistry.findEndpoint(endpointReference);
+
+ if (endpoints.size() == 0) {
+ throw new SCARuntimeException("No endpoints found for EndpointReference " + endpointReference.toString());
+ }
+
+ // TODO - EPR - endpoint selection
+ // just use the first one
+ endpointReference.setTargetEndpoint(endpoints.get(0));
- matchForwardBinding(endpointReference, false, monitor);
+ selectForwardBinding(endpointReference);
- matchCallbackBinding(endpointReference, monitor);
- }
+ selectCallbackBinding(endpointReference);
+
+ } else {
+ // endpointReference.getStatus() == EndpointReference.NOT_CONFIGURED
+ // An error as we shouldn't get here
+ throw new SCARuntimeException("EndpointReference can't be resolved " + endpointReference.toString());
}
- if (endpointReference.isUnresolved()){
- throw new SCARuntimeException("Can't resolve " + endpointReference.toString());
+ if (endpointReference.getStatus() != EndpointReference.WIRED_TARGET_FOUND_AND_MATCHED &&
+ endpointReference.getStatus() != EndpointReference.RESOLVED_BINDING){
+ throw new SCARuntimeException("EndpointReference can't be resolved " + endpointReference.toString());
}
}
- // TODO - EPR - In OASIS case there are no bindings to match with on the
- // reference side.
- private void matchForwardBinding(EndpointReference endpointReference,
- boolean local,
- Monitor monitor) {
+ private void selectForwardBinding(EndpointReference endpointReference) {
Endpoint endpoint = endpointReference.getTargetEndpoint();
-
- List<Binding> matchedReferenceBinding = new ArrayList<Binding>();
- List<Endpoint> matchedServiceEndpoint = new ArrayList<Endpoint>();
-
- // Find the corresponding bindings from the service side
- if ((endpointReference.getReference().getBindings().size() == 0) ||
- ((endpointReference.getReference().getBindings().size() == 1) &&
- (endpointReference.getReference().getBindings().get(0) instanceof SCABinding))){
- // OAISIS - choose a binding from the service side
- // (could have been specified as part of the target string)
- // last part of this test that is looking for binding SCA is
- // bogus. Just a temporary fix until we get rid of the OSOA
- // style reference side bindings.
-
- // retrieve the user specified binding name.
- // TODO - EPR - we don't support this yet
-
- // otherwise pick the first binding from the service
- if (local) {
- endpointReference.setTargetEndpoint(endpoint.getService().getEndpoints().get(0));
- } else {
- endpointReference.setTargetEndpoint(endpoint);
- }
- endpointReference.setBinding(endpointReference.getTargetEndpoint().getBinding());
- endpointReference.setUnresolved(false);
- return;
-
- } else {
- // OAISIS - this is an error
- // (for now let it match bindings while we rewrite OSOA tests)
- for (Binding referenceBinding : endpointReference.getReference().getBindings()) {
- if (local) {
- for (Endpoint serviceEndpoint : endpoint.getService().getEndpoints()) {
-
- if (referenceBinding.getType().equals(serviceEndpoint.getBinding().getType()) && hasCompatiblePolicySets(referenceBinding,
- serviceEndpoint
- .getBinding())) {
-
- matchedReferenceBinding.add(referenceBinding);
- matchedServiceEndpoint.add(serviceEndpoint);
- }
- }
- } else {
- Endpoint serviceEndpoint = endpoint;
- if (referenceBinding.getType().equals(serviceEndpoint.getBinding().getType()) && hasCompatiblePolicySets(referenceBinding,
- serviceEndpoint
- .getBinding())) {
-
- matchedReferenceBinding.add(referenceBinding);
- matchedServiceEndpoint.add(serviceEndpoint);
-
- }
- }
- }
- }
-
- if (matchedReferenceBinding.isEmpty()) {
- // No matching binding
- endpointReference.setBinding(null);
- endpointReference.setUnresolved(true);
- warning(monitor,
- "NoMatchingBinding",
- endpointReference.getReference(),
- endpointReference.getReference().getName(),
- endpoint.getService().getName());
- return;
- } else {
- // default to using the first matched binding
- int selectedBinding = 0;
-
- for (int i = 0; i < matchedReferenceBinding.size(); i++) {
- // If binding.sca is present, use it
- if (SCABinding.class.isInstance(matchedReferenceBinding.get(i))) {
- selectedBinding = i;
- }
- }
-
- Binding referenceBinding = matchedReferenceBinding.get(selectedBinding);
- Endpoint serviceEndpoint = matchedServiceEndpoint.get(selectedBinding);
-
- // populate the endpoint reference
- try {
-
- Binding clonedBinding = (Binding) referenceBinding.clone();
-
- // Set the binding URI to the URI of the target service
- // that has been matched
- if (referenceBinding.getURI() == null) {
- clonedBinding.setURI(serviceEndpoint.getBinding().getURI());
- }
-
- // TODO - EPR can we remove this?
- if (clonedBinding instanceof OptimizableBinding) {
- OptimizableBinding optimizableBinding = (OptimizableBinding)clonedBinding;
- optimizableBinding.setTargetComponent(serviceEndpoint.getComponent());
- optimizableBinding.setTargetComponentService(serviceEndpoint.getService());
- optimizableBinding.setTargetBinding(serviceEndpoint.getBinding());
- }
-
- endpointReference.setBinding(clonedBinding);
-
- Endpoint clonedEndpoint = (Endpoint)serviceEndpoint.clone();
-
- endpointReference.setTargetEndpoint(clonedEndpoint);
- endpointReference.setUnresolved(false);
-
- } catch (Exception ex) {
- // do nothing
- }
- }
+
+ endpointReference.setBinding(endpointReference.getTargetEndpoint().getBinding());
+ endpointReference.setStatus(EndpointReference.WIRED_TARGET_FOUND_AND_MATCHED);
+ endpointReference.setUnresolved(false);
+
+ return;
}
- // TODO - EPR
- // Find the callback endpoint for the endpoint reference by matching
- // callback bindings between reference and service
- private void matchCallbackBinding(EndpointReference endpointReference,
- Monitor monitor) {
+ private void selectCallbackBinding(EndpointReference endpointReference) {
// if no callback on the interface or we are creating a self reference do nothing
if (endpointReference.getReference().getInterfaceContract() == null ||
@@ -337,94 +177,10 @@ public class EndpointReferenceBuilderImpl implements CompositeBuilder, EndpointR
Endpoint endpoint = endpointReference.getTargetEndpoint();
List<Endpoint> callbackEndpoints = endpointReference.getReference().getCallbackService().getEndpoints();
- List<EndpointReference> callbackEndpointReferences = endpoint.getCallbackEndpointReferences();
-
- List<Endpoint> matchedEndpoint = new ArrayList<Endpoint>();
-
- // Find the corresponding bindings from callback service side
- if ((callbackEndpointReferences.size() ==0) ||
- (callbackEndpointReferences.get(0).getReference().getBindings().size() == 0) ||
- ((callbackEndpointReferences.get(0).getReference().getBindings().size() == 1) &&
- (callbackEndpointReferences.get(0).getReference().getBindings().get(0) instanceof SCABinding))){
- // OAISIS - choose a binding from the service side
- // (could have been specified as part of the target string)
- // last part of this test that is looking for binding SCA is
- // bogus. Just a temporary fix until we get rid of the OSOA
- // style reference side bindings.
-
- // retrieve the user specified binding name.
- // TODO - EPR - we don't support this yet
-
- // otherwise pick the first binding from the service
- //endpointReference.setTargetEndpoint(endpoint.getService().getEndpoints().get(0));
- //endpointReference.setBinding(endpointReference.getTargetEndpoint().getBinding());
- endpointReference.setCallbackEndpoint(callbackEndpoints.get(0));
- endpointReference.setUnresolved(false);
- return;
-
- } else {
- // OAISIS - this is an error
- // (for now let it match bindings while we rewrite OSOA tests)
-
- if ((callbackEndpoints != null) && (callbackEndpointReferences != null)){
- // Find the corresponding bindings from the service side
- for (EndpointReference epr : callbackEndpointReferences) {
- for (Endpoint ep : callbackEndpoints) {
-
- if (epr.getBinding().getType().equals(ep.getBinding().getType()) &&
- hasCompatiblePolicySets(epr.getBinding(), ep.getBinding())) {
-
- matchedEndpoint.add(ep);
- }
- }
- }
- }
- }
-
- if (matchedEndpoint.isEmpty()) {
- // No matching binding
- endpointReference.setCallbackEndpoint(null);
- endpointReference.setUnresolved(true);
- warning(monitor,
- "NoMatchingCallbackBinding",
- endpointReference.getReference(),
- endpointReference.getReference().getName(),
- endpoint.getService().getName());
- return;
- } else {
- // default to using the first matched binding
- int selectedEndpoint = 0;
-
- for (int i = 0; i < matchedEndpoint.size(); i++){
- // If binding.sca is present, use it
- if (SCABinding.class.isInstance(matchedEndpoint.get(i).getBinding())) {
- selectedEndpoint = i;
- }
- }
-
- endpointReference.setCallbackEndpoint(matchedEndpoint.get(selectedEndpoint));
- endpointReference.setUnresolved(false);
- }
+
+ endpointReference.setCallbackEndpoint(callbackEndpoints.get(0));
+ endpointReference.setStatus(EndpointReference.WIRED_TARGET_FOUND_AND_MATCHED);
+ endpointReference.setUnresolved(false);
}
- private boolean hasCompatiblePolicySets(Binding refBinding, Binding svcBinding) {
- boolean isCompatible = true;
- if ( refBinding instanceof PolicySubject && svcBinding instanceof PolicySubject ) {
- //TODO : need to add more compatibility checks at the policy attachment levels
- for ( PolicySet svcPolicySet : ((PolicySubject)svcBinding).getPolicySets() ) {
- isCompatible = false;
- for ( PolicySet refPolicySet : ((PolicySubject)refBinding).getPolicySets() ) {
- if ( svcPolicySet.equals(refPolicySet) ) {
- isCompatible = true;
- break;
- }
- }
- //if there exists no matching policy set in the reference binding
- if ( !isCompatible ) {
- return isCompatible;
- }
- }
- }
- return isCompatible;
- }
}
diff --git a/java/sca/modules/endpoint/src/main/resources/META-INF/services/org.apache.tuscany.sca.assembly.builder.CompositeBuilder b/java/sca/modules/endpoint/src/main/resources/META-INF/services/org.apache.tuscany.sca.assembly.builder.CompositeBuilder
deleted file mode 100644
index 541941c3d3..0000000000
--- a/java/sca/modules/endpoint/src/main/resources/META-INF/services/org.apache.tuscany.sca.assembly.builder.CompositeBuilder
+++ /dev/null
@@ -1,18 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations
-# under the License.
-
-org.apache.tuscany.sca.endpoint.impl.EndpointReferenceBuilderImpl;id=org.apache.tuscany.sca.endpoint.impl.EndpointReferenceBuilderImpl