From 0491f669ce7f70b5b45476d311bdfe018d6bea24 Mon Sep 17 00:00:00 2001 From: rfeng Date: Wed, 22 Oct 2008 22:40:19 +0000 Subject: Start to add InvocationChain for bindings git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@707218 13f79535-47bb-0310-9956-ffa450edef68 --- .../sca/core/assembly/EndpointWireImpl.java | 13 +++++ .../tuscany/sca/core/assembly/RuntimeWireImpl.java | 13 +++++ .../tuscany/sca/core/invocation/PhaseManager.java | 61 ++++++++++++++++++++-- .../org.apache.tuscany.sca.invocation.PhaseTest | 4 +- 4 files changed, 85 insertions(+), 6 deletions(-) (limited to 'java/sca/modules/core/src') diff --git a/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/EndpointWireImpl.java b/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/EndpointWireImpl.java index c25c580fe6..beb86fefe1 100644 --- a/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/EndpointWireImpl.java +++ b/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/EndpointWireImpl.java @@ -24,6 +24,7 @@ import java.util.List; import org.apache.tuscany.sca.assembly.Endpoint; import org.apache.tuscany.sca.assembly.Reference; +import org.apache.tuscany.sca.core.invocation.InvocationChainImpl; import org.apache.tuscany.sca.endpointresolver.EndpointResolver; import org.apache.tuscany.sca.interfacedef.InterfaceContract; import org.apache.tuscany.sca.interfacedef.Operation; @@ -47,6 +48,7 @@ public class EndpointWireImpl implements RuntimeWire { private EndpointResolver endpointResolver; private EndpointReference source; private RuntimeWire wire; + private InvocationChain binidngInvocationChain; /** * @param endpoint @@ -150,6 +152,17 @@ public class EndpointWireImpl implements RuntimeWire { public void rebuild() { } + + public synchronized InvocationChain getBindingInvocationChain() { + if (binidngInvocationChain == null) { + if (source instanceof RuntimeComponentReference) { + binidngInvocationChain = new InvocationChainImpl(null, null, true); + } else { + binidngInvocationChain = new InvocationChainImpl(null, null, false); + } + } + return binidngInvocationChain; + } // TODO: TUSCANY-2580: give RuntimeComponentReferenceImpl a way to get at the endpoint public Endpoint getEndpoint() { diff --git a/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/RuntimeWireImpl.java b/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/RuntimeWireImpl.java index 2c8cc49d47..991aa57abe 100644 --- a/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/RuntimeWireImpl.java +++ b/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/RuntimeWireImpl.java @@ -76,6 +76,7 @@ public class RuntimeWireImpl implements RuntimeWire { private RuntimeWireImpl clonedFrom; private List chains; + private InvocationChain binidngInvocationChain; /** * @param source @@ -110,6 +111,18 @@ public class RuntimeWireImpl implements RuntimeWire { } return chains; } + + public synchronized InvocationChain getBindingInvocationChain() { + if (binidngInvocationChain == null) { + Contract source = wireSource.getContract(); + if (source instanceof RuntimeComponentReference) { + binidngInvocationChain = new InvocationChainImpl(null, null, true); + } else { + binidngInvocationChain = new InvocationChainImpl(null, null, false); + } + } + return binidngInvocationChain; + } public InvocationChain getInvocationChain(Operation operation) { for (InvocationChain chain : getInvocationChains()) { diff --git a/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/PhaseManager.java b/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/PhaseManager.java index 94d67bffcc..aff89100ca 100644 --- a/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/PhaseManager.java +++ b/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/PhaseManager.java @@ -19,6 +19,25 @@ package org.apache.tuscany.sca.core.invocation; +import static org.apache.tuscany.sca.invocation.Phase.IMPLEMENTATION; +import static org.apache.tuscany.sca.invocation.Phase.IMPLEMENTATION_POLICY; +import static org.apache.tuscany.sca.invocation.Phase.REFERENCE; +import static org.apache.tuscany.sca.invocation.Phase.REFERENCE_BINDING; +import static org.apache.tuscany.sca.invocation.Phase.REFERENCE_BINDING_DISPATCHER; +import static org.apache.tuscany.sca.invocation.Phase.REFERENCE_BINDING_POLICY; +import static org.apache.tuscany.sca.invocation.Phase.REFERENCE_BINDING_TRANSPORT; +import static org.apache.tuscany.sca.invocation.Phase.REFERENCE_BINDING_WIREFORMAT; +import static org.apache.tuscany.sca.invocation.Phase.REFERENCE_INTERFACE; +import static org.apache.tuscany.sca.invocation.Phase.REFERENCE_POLICY; +import static org.apache.tuscany.sca.invocation.Phase.SERVICE; +import static org.apache.tuscany.sca.invocation.Phase.SERVICE_BINDING; +import static org.apache.tuscany.sca.invocation.Phase.SERVICE_BINDING_OPERATION_SELECTOR; +import static org.apache.tuscany.sca.invocation.Phase.SERVICE_BINDING_POLICY; +import static org.apache.tuscany.sca.invocation.Phase.SERVICE_BINDING_TRANSPORT; +import static org.apache.tuscany.sca.invocation.Phase.SERVICE_BINDING_WIREFORMAT; +import static org.apache.tuscany.sca.invocation.Phase.SERVICE_INTERFACE; +import static org.apache.tuscany.sca.invocation.Phase.SERVICE_POLICY; + import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; @@ -42,15 +61,24 @@ public class PhaseManager { private static final Logger log = Logger.getLogger(PhaseManager.class.getName()); public static final String STAGE_REFERENCE = "reference"; + public static final String STAGE_REFERENCE_BINDING = "reference.binding"; + public static final String STAGE_SERVICE_BINDING = "service.binding"; public static final String STAGE_SERVICE = "service"; public static final String STAGE_IMPLEMENTATION = "implementation"; + private static final String[] SYSTEM_REFERENCE_PHASES = - {Phase.REFERENCE, Phase.REFERENCE_INTERFACE, Phase.REFERENCE_POLICY, Phase.REFERENCE_BINDING}; + {REFERENCE, REFERENCE_INTERFACE, REFERENCE_POLICY, REFERENCE_BINDING}; + private static final String[] SYSTEM_REFERENCE_BINDING_PHASES = + {REFERENCE_BINDING_DISPATCHER, REFERENCE_BINDING_WIREFORMAT, REFERENCE_BINDING_POLICY, REFERENCE_BINDING_TRANSPORT}; + + private static final String[] SYSTEM_SERVICE_BINDING_PHASES = + {SERVICE_BINDING_TRANSPORT, SERVICE_BINDING_WIREFORMAT, SERVICE_BINDING_POLICY, SERVICE_BINDING_OPERATION_SELECTOR}; + private static final String[] SYSTEM_SERVICE_PHASES = - {Phase.SERVICE_BINDING, Phase.SERVICE_POLICY, Phase.SERVICE_INTERFACE, Phase.SERVICE}; + {SERVICE_BINDING, SERVICE_POLICY, SERVICE_INTERFACE, SERVICE}; - private static final String[] SYSTEM_IMPLEMENTATION_PHASES = {Phase.IMPLEMENTATION_POLICY, Phase.IMPLEMENTATION}; + private static final String[] SYSTEM_IMPLEMENTATION_PHASES = {IMPLEMENTATION_POLICY, IMPLEMENTATION}; private String pattern = Phase.class.getName(); private Map stages; @@ -116,6 +144,14 @@ public class PhaseManager { return getPhases(STAGE_SERVICE); } + public List getReferenceBindingPhases() { + return getPhases(STAGE_REFERENCE_BINDING); + } + + public List getServiceBindingPhases() { + return getPhases(STAGE_SERVICE_BINDING); + } + public List getImplementationPhases() { return getPhases(STAGE_IMPLEMENTATION); } @@ -124,6 +160,8 @@ public class PhaseManager { if (phases == null) { phases = new ArrayList(); phases.addAll(getReferencePhases()); + phases.addAll(getReferenceBindingPhases()); + phases.addAll(getServiceBindingPhases()); phases.addAll(getServicePhases()); phases.addAll(getImplementationPhases()); } @@ -228,9 +266,22 @@ public class PhaseManager { for (int i = 1; i < SYSTEM_REFERENCE_PHASES.length; i++) { referenceStage.getSorter().addEdge(SYSTEM_REFERENCE_PHASES[i - 1], SYSTEM_REFERENCE_PHASES[i]); } - referenceStage.getLastSet().add(Phase.REFERENCE_BINDING); + referenceStage.getLastSet().add(REFERENCE_BINDING); stages.put(referenceStage.getName(), referenceStage); + Stage referenceBindingStage = new Stage(STAGE_REFERENCE_BINDING); + for (int i = 1; i < SYSTEM_REFERENCE_BINDING_PHASES.length; i++) { + referenceBindingStage.getSorter().addEdge(SYSTEM_REFERENCE_BINDING_PHASES[i - 1], SYSTEM_REFERENCE_BINDING_PHASES[i]); + } + stages.put(referenceBindingStage.getName(), referenceBindingStage); + + Stage serviceBindingStage = new Stage(STAGE_SERVICE_BINDING); + for (int i = 1; i < SYSTEM_SERVICE_BINDING_PHASES.length; i++) { + serviceBindingStage.getSorter().addEdge(SYSTEM_SERVICE_BINDING_PHASES[i - 1], SYSTEM_SERVICE_BINDING_PHASES[i]); + } + stages.put(serviceBindingStage.getName(), serviceBindingStage); + + Stage serviceStage = new Stage(STAGE_SERVICE); for (int i = 1; i < SYSTEM_SERVICE_PHASES.length; i++) { serviceStage.getSorter().addEdge(SYSTEM_SERVICE_PHASES[i - 1], SYSTEM_SERVICE_PHASES[i]); @@ -242,7 +293,7 @@ public class PhaseManager { implementationStage.getSorter().addEdge(SYSTEM_IMPLEMENTATION_PHASES[i - 1], SYSTEM_IMPLEMENTATION_PHASES[i]); } - implementationStage.getLastSet().add(Phase.IMPLEMENTATION); + implementationStage.getLastSet().add(IMPLEMENTATION); stages.put(implementationStage.getName(), implementationStage); } } diff --git a/java/sca/modules/core/src/test/resources/META-INF/services/org.apache.tuscany.sca.invocation.PhaseTest b/java/sca/modules/core/src/test/resources/META-INF/services/org.apache.tuscany.sca.invocation.PhaseTest index 9ed0928a33..ad23df3761 100644 --- a/java/sca/modules/core/src/test/resources/META-INF/services/org.apache.tuscany.sca.invocation.PhaseTest +++ b/java/sca/modules/core/src/test/resources/META-INF/services/org.apache.tuscany.sca.invocation.PhaseTest @@ -18,5 +18,7 @@ name=implementation.last, stage=implementation, after=* name=reference.first, stage=reference, before=* name=reference.transaction, stage=reference, after=reference.interface +name=reference.binding.header, stage=reference.binding, after=reference.binding.transport +name=service.binding.header, stage=service.binding, after=service.binding.transport name=service.transaction, stage=service, after=service.binding, before=component.service -name=implementation.transaction, stage=implementation, before=implementation.policy \ No newline at end of file +name=implementation.transaction, stage=implementation, before=implementation.policy -- cgit v1.2.3