В том-то и дело, что в сервлетах надо устанавливать перед операцией этот thread local, а по завершению операции возвращать старый.

Транзакции именно что "однопоточные".