Pessoal tenho um SessionBean - @Stateless(name = “xpto”) e um metodo controlado pelo container @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
quero que essa transação não dure mais que 1 segundo, mas somente esse metodo com essa transacao Requires_New somente ela.
Se a transação levar mais de um segundo, a idéia é abortá-la (usar um “rollback”?)
Parece coisa que depende do container; talvez só possa ser feita via configuração de algum XML específico do container.
sergiotaborda
Laranjinha:
Pessoal tenho um SessionBean - @Stateless(name = “xpto”) e um metodo controlado pelo container @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
quero que essa transação não dure mais que 1 segundo, mas somente esse metodo com essa transacao Requires_New somente ela.
Como fazer? tem alguma anotacao pra isso?
É preciso uma razão muito forte para limitar a duração de uma transação, caso contrário é um contrasenso usar transações. (transações servem para garantir integridade, não para garantir performance)
Qual é a sua razão para querer limitar o tempo da transação?
L
Laranjinha
So quero limitar o tempo de UM metodo somente, por isso não sei se atraves de trans-timeout-seconds do xml vai funcionar.
Agora quero limitar o tempo da transação por motivo de lock no banco, tenho grande acesso a base de dados com FOR UPDATE…
intaum quero desafogar meu banco para que nao tenhamos tando dead-lock… por isso quer fazer uma transacao pequena, e caso essa transacao caia por time-out eu vou devolver ao cliente tente novamente.
rafaelglauber
Concordo com o sergio, não seria o caso de verificar se o banco em questão suporta a opção NO WAIT em seu FOR UPDATE e ao inves de limitar a trasação, avisar a outros usuário que o recurso está preso no momento e que tentem depois? Tenho algo parecido para controlar estoques de mercadoria…
L
Laranjinha
tambem é para controle do estoque, mas se eu utilizar NO WAIT eu nao vendo produto nenhum do meu estoque, trabalho em de grande volume, e muito rapido as vendas, nao posso perder venda.
Alguem sabe como eu posso controlar o tempo de uma transação de EJB, atraves de anotacao ou simplesmente controlar o tempo de uma trasação de um metodo?
T
thingol
Você tem de consultar a documentação de seu application container.
Como você mencionou “trans-timeout-seconds”, dá a impressão que é o WebLogic; vi isto aqui
dizendo que você pode configurar esse timeout por EJB. (Já é melhor que configurar o timeout para a aplicação inteira!). Veja se é possível configurar esse timeout por método; leia a documentação no site da BEA.