Tempo de uma transação

6 respostas
L

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?

6 Respostas

T

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

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

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

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

http://209.85.165.104/search?q=cache:OmBi9NXBJfMJ:www.experts-exchange.com/Programming/Languages/Java/J2EE/EJB/Q_23072981.html+trans-timeout-seconds&hl=en&ct=clnk&cd=22

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.

Criado 14 de janeiro de 2008
Ultima resposta 15 de jan. de 2008
Respostas 6
Participantes 4