Adding transactional logic to infinispan highlights several problems with marshaller registration. The first is that all connections are working off of a shared context and each registering a marshaller for the same class type - this is not thread safe.
The other issue specific to transactions is that some operations are delayed or redone at commit time - which is called after the connection is closed potentially in a different thread and thus the marshaller provider has been removed. Given the interplay of threads using a thread local won't work.
Potentially a transaction aware thread pool or the use of something like our execution context keep alive may be needed.