Author: rfeng
Date: Fri Jan 29 22:30:05 2010
New Revision: 904649
URL: http://svn.apache.org/viewvc?rev=904649&view=rev
Log:
Defer the initialization of the chains at later stage to make sure the endpoint
reference won't be left in a wrong state if any exception happens
Modified:
tuscany/sca-java-2.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/impl/RuntimeEndpointReferenceImpl.java
Modified:
tuscany/sca-java-2.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/impl/RuntimeEndpointReferenceImpl.java
URL:
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/impl/RuntimeEndpointReferenceImpl.java?rev=904649&r1=904648&r2=904649&view=diff
==============================================================================
---
tuscany/sca-java-2.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/impl/RuntimeEndpointReferenceImpl.java
(original)
+++
tuscany/sca-java-2.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/impl/RuntimeEndpointReferenceImpl.java
Fri Jan 29 22:30:05 2010
@@ -248,7 +248,6 @@
* Initialize the invocation chains
*/
private void initInvocationChains() {
- chains = new ArrayList<InvocationChain>();
InterfaceContract sourceContract =
getComponentTypeReferenceInterfaceContract();
// TODO - EPR why is this looking at the component types. The endpoint
reference should have the right interface contract by this time
//InterfaceContract sourceContract =
getLeafInterfaceContract(endpointReference);
@@ -268,7 +267,8 @@
throw new IllegalStateException(e);
}
}
-
+
+ List<InvocationChain> chainList = new ArrayList<InvocationChain>();
RuntimeComponentReference reference =
(RuntimeComponentReference)getReference();
for (Operation operation :
sourceContract.getInterface().getOperations()) {
Operation targetOperation =
interfaceContractMapper.map(targetContract.getInterface(), operation);
@@ -283,10 +283,13 @@
if (operation.isNonBlocking()) {
addNonBlockingInterceptor(chain);
}
- chains.add(chain);
+ chainList.add(chain);
addReferenceBindingInterceptor(chain, operation);
}
+ // Set the chains until it's fully populated. If we initialize too
early, any exeception could
+ // leave this endpoint reference in a wrong state with an empty chain.
+ chains = chainList;
wireProcessor.process(this);
}