[
https://issues.apache.org/jira/browse/CXF-8303?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17134986#comment-17134986
]
Andriy Redko commented on CXF-8303:
-----------------------------------
Thanks Baptiste, more I looking into MP client callback, more I am convinced by
your arguments. I think it would safe to just return future here, as we do in
other callbacks, it does not leave MP/CXF scope. I believe the executor is
redundant now, it was needed for the previous implementation (since we had to
handle wait()), but now it does not seem to be necessary. I will experiment and
update you shortly, thanks.
> MP: Context propagation impossible using AsyncInvocationInterceptorFactory
> ---------------------------------------------------------------------------
>
> Key: CXF-8303
> URL: https://issues.apache.org/jira/browse/CXF-8303
> Project: CXF
> Issue Type: Bug
> Components: MicroProfile
> Reporter: Baptiste AIGLIN
> Assignee: Andriy Redko
> Priority: Major
> Attachments: cxf-context-reproducer.zip
>
>
> Hello!
> We are deeply working using the Microprofile rest client implementation of
> CXF and we have trouble with the context propagation between threads.
> We have implemented AsyncInvocationInterceptorFactory and use it to propagate
> threadLocal context on the receiving thread after an asynchronous call, but I
> found some problem due to this:
> * Call is performed from the main thread
> * Response is handled in the CXF work queue, that execute the interceptor
> chain and propagate the thread local context correctly
> * During the chain execution the response entity is set to notify the future
> but it then execute in the executor thread (By default ForkJoinPool)
> So the fact that the future is returned using the *Async method of the
> CompletableFuture makes the next stage to execute in the executor
> (ForkJoinPool) thread where the context was not propagated.
>
> I am not saying this is simple since it is not, but could it be possible to
> return the future itself rather than using the custom executor
> (ForkJoinPool), and instead use the custom executor the same way it is used
> for JAX-WS where I think it is set as Executor in the exchange and later
> retrieve by the conduit to perform the response execution ?
> Also we noticed due to this that as soon as the response is notified, the
> full interceptor chain is not yet executed and continue to execute in the
> workqueue thread while the next stage is starting to execute in the
> ForkJoinPool thread.
> I hope I was clear enough. I add a reproducer with the dummy solution I could
> come up with to see what I am asking is at least fixing the problem. Also I
> know a fix is already ongoing here
> https://issues.apache.org/jira/browse/CXF-8242 but is using
> thenApplyAsync(res -> (T)res[0], executor), so should not fix the problem.
> Thanks a lot
--
This message was sent by Atlassian Jira
(v8.3.4#803005)