The ThreadLocal BusFactory.threadBus is created in the constructor of the CXFBusImpl and removed in the shutdown()-method.
But in an application server environment (e.g. JBoss7) with thread pools the constructor and the shutdwon()-method are invoked from different threads and therefore this ThreadLocal is never removed.
I don't know the reason for having this ThreadLocal for the whole lifetime of the bus. From my point of view a ThreadLocal should only exist for the lifetime of one request. At the end of the request, when the thread is given back to the pool, the ThreadLocal must be cleared.