Consider the scenario two methods exists in different stateless bean
public class Bean_A {
Bean_B beanB; // Injected or whatever
public void methodA() {
Here is a recent article about the use of REQUIRES_NEW
transaction demarcation.
From my experience, there should be no dead-lock with standard code: queries with restrictive where
clause and few inserts. In some specific cases, some database engine may do lock escalation if there is many rows read or inserted on a single table during the transaction... and in that case, yes a dead-lock may occur.
But in that case, the problem does not come from REQUIRES_NEW
but from SQL design. If that design cannot be improved, then you have no other choice to change isolation level to a more loose level.