I have reproduced this with dumping the lock table. I did not see any evidence of deadlock in that printout (between threads). I'm happy to provide more details if necessary.You may misunderstand. The evidence of the deadlock is based on the debug output, you won't see a regular Java deadlock -- not sure if that's what you were looking for.
That said, the application retry strategy seems to be working OK, but I'd prefer to avoid the lock timeouts if possible.When reading and writing concurrently, and using secondary databases, you cannot avoid deadlocks, which manifest as lock timeouts. Retrying is the only option.