[
https://issues.apache.org/jira/browse/TUSCANY-3957?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
ant elder closed TUSCANY-3957.
------------------------------
Resolution: Fixed
Patch applied, thanks for the fix Greg
> Endpoint references are not registered in domain registry
> ---------------------------------------------------------
>
> Key: TUSCANY-3957
> URL: https://issues.apache.org/jira/browse/TUSCANY-3957
> Project: Tuscany
> Issue Type: Bug
> Affects Versions: Java-SCA-2.0
> Reporter: Greg Dritschler
> Priority: Minor
> Attachments: TUSCANY-3957.patch
>
>
> EndpointReferences are not always registered in the domain registry. This
> causes a problem in the following scenario with asynchronous invocation.
> In my scenario, the asynchronous service implementation serializes the
> ResponseDispatch object, tucks it away, and deserializes it later when it is
> ready to respond. Deserialization drives the readObject method in
> AsyncResponseInvoker. Let's say the AsyncResponseInvoker was set up such
> that the target address is an EPR. In this case readObject is going to try
> to relocate the EPR in the domain registry.
> if (responseTargetAddress instanceof EndpointReference){
> // fix the target as in this case it will be an EPR
> EndpointReference epr =
> (EndpointReference)responseTargetAddress;
> responseTargetAddress =
> (T)retrieveEndpointReference(epr.getURI());
> }
> I see this code in CompositeActivator to add an EndpointReference to the
> domain registry.
> // If the reference is already resolved then start it now. This
> currently
> // important for async references which have native async
> bindings as the
> // reference provider has to register a response listener
> regardless of
> // whether the reference has been used or not.
> if (epr.getStatus() ==
> EndpointReference.Status.WIRED_TARGET_FOUND_AND_MATCHED ||
> epr.getStatus() == EndpointReference.Status.RESOLVED_BINDING){
>
> // As we only care about starting references at build time in
> the
> // async case at the moment check that the binding supports
> native async
> // and that the reference is an async reference
> ReferenceBindingProvider bindingProvider =
> epr.getBindingProvider();
> if (bindingProvider instanceof EndpointReferenceAsyncProvider
> &&
>
> ((EndpointReferenceAsyncProvider)bindingProvider).supportsNativeAsync() &&
> epr.isAsyncInvocation()){
> // it's resolved so start it now
> try {
> start(compositeContext, epr);
> } catch (Throwable ex){
> Monitor.error(monitor, this, "core-messages",
> "StartException", ex);
> rethrow(ex);
> }
> }
> The call to start(compositeContext, epr) will add the epr to the registry.
> So this code handles the case where the endpoint reference target is resolved
> at start time. There should be code to register the epr when it's bound
> after start time. I am attaching a patch to do this. I realize this still
> leaves a window between start and the first use of a reference where the epr
> is not registered in the domain. This is not something I need to address in
> my scenario.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira