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?