REQUIRES_NEW dentro de REQUIRES_NEW dentro de REQUIRES_NEW ... e assim por diante

JBoss 4.x
EJB 3.0

Vi código como o seguinte (bastante abreviado):

@Stateless
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
public class EJB1 implements IEJB1
{
   @EJB
   private IEJB1 self;

   @EJB 
   private IEJB2 ejb2;

   @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
   public boolean someMethod1()
   {
     return someMethod2();
   }

   @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
   public boolean someMethod2()
   {
     return self.someMethod3();
   }

   @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
   public boolean someMethod3()
   {
     return ejb2.someMethod1();
   }
}

E diga EJB2 é quase uma cópia exata do EJB1 (mesmos três métodos) eEJB2.someMethod3() chama paraEJB3.someMethod1(), que finalmente finalmente emEJB3.someMethod3() grava no banco de dado

Este é um exemplo artificial, mas temos visto código semelhante ao acima em nossa base de código. O código realmente funciona muito bem.

No entanto, parece uma prática terrível e estou preocupado com o@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) em todos os métodos que nem sequer executam gravações de banco de dados. Isso realmente cria uma nova transação todas as vezes para cada chamada de método com o resultado de:

new transaction
-nova transação
- nova transação
--- nova transação
...(muito mais
------- novo transaciton (gravação no DB)

E, em seguida, desembrulha nesse ponto? Isso seria motivo de preocupação com o desempenho? Pensamentos adicionais?

questionAnswers(2)

yourAnswerToTheQuestion