[
https://issues.apache.org/jira/browse/CXF-8303?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17160771#comment-17160771
]
Andriy Redko commented on CXF-8303:
-----------------------------------
Hey [~baiglin],
The fix has been committed,
# Aligning MP Client implementation to use only one executor service,
configured through {{MicroProfileClientFactoryBean}} and propagated via
contextual property {{EXECUTOR_SERVICE_PROPERTY}}
# Always initialize executor service in the {{MicroProfileClientFactoryBean}},
using {{ForkJoin}} pool as default if not specified
# Removed async delegation from {{MPRestClientCallback::createFuture}} since
it is always executed in the context of executor service (configured through
{{MicroProfileClientFactoryBean}})
My apologies for taking so long, thank you for being patient.
> 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
> Affects Versions: 3.2.14, 3.3.7
> Reporter: Baptiste AIGLIN
> Assignee: Andriy Redko
> Priority: Major
> Fix For: 3.4.0
>
> 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)