[ 
https://issues.apache.org/jira/browse/CXF-8303?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17151145#comment-17151145
 ] 

Andriy Redko commented on CXF-8303:
-----------------------------------

Hi Baptiste,

Sorry, got too focused on WorkQueue but indeed, it looks like 
AbstractClient#setAsyncMessageObserverIfNeeded  has to take the executor into 
account, and there are multiple properties to set/get executors, which is 
certainly confusing. I will take a look shortly, thank you.

> 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)

Reply via email to