I made a Implementation of CallableProcessingInterceptor and added it in the spring config xml like this. The interceptor is called just before and after running the callback.
<mvc:annotation-driven>
<mvc:async-support default-timeout="15000">
<mvc:callable-interceptors>
<!-- Required to ensure the http request and responsive are available -->
<bean class="bla.ServletContextHolderAsyncInterceptor" />
</mvc:callable-interceptors>
</mvc:async-support>
</mvc:annotation-driven>
It will then fill and empty my ThreadLocal that is also filled through a Http Filter in case of sync execution.
Spring does something similar through a fixed interceptor to fill it's RequestContextHolder class.
It's also used in Spring for Hibernate usage: open/close hibernate session usage instead of using the OpenEntityManagerInViewFilter in sync mode. A post on SO about that: LINKE