| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/08/2005 08:47:50
|
fviana
JavaChild
![[Avatar]](/images/avatar/58f1e2bfc0c0c182f1afdab7cae02402.png)
Membro desde: 09/06/2005 09:19:51
Mensagens: 116
Offline
|
ola pessoal...
tenho uma webapp em struts.
uso hibernate para persistencia.
criei um filter que controla sessions e transactions com o banco de dados.
tudo funciona perfeitamente até um ponto.
se voces repararem, a cada request é criado uma session e uma transação com o banco de dados.
aconteceu por duas vezes um fato q eu nao entendi.
dois usuarios estavam trabalhando normalmente no sistema, e, em um instante, eles fizeram operações identicas, ou seja, ambos entraram no cadastro de cliente e cadastraram dois clientes diferentes mas quando foram salvar os dados no banco, foi salvo dois registros identicos, iguais porem com id diferente.
é como se a session estivesse fora de sincronismo, mas teoricamente so daria erro se fosse a mesma session, o que não é.
para cada request há uma nova session, que ao final do request é fechado.
será que alguem pode me ajudar?
This message was edited 1 time. Last update was at 24/08/2005 11:06:34
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/08/2005 10:36:55
|
fviana
JavaChild
![[Avatar]](/images/avatar/58f1e2bfc0c0c182f1afdab7cae02402.png)
Membro desde: 09/06/2005 09:19:51
Mensagens: 116
Offline
|
alguem pode me ajudar?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/08/2005 10:46:28
|
Mauricio Linhares
Moderador
![[Avatar]](/images/avatar/97af07a14cacba681feacf3012730892.jpg)
Membro desde: 09/01/2005 23:28:22
Mensagens: 3717
Localização: João Pessoa, Paraíba - Brasil
Offline
|
Cara, sua solução tá meio bizarra, talvez o código que está lidando com isso é que está com erros (nos actions do Struts por exemplo).
Faça isso usando ThreadLocal: http://www.hibernate.org/207.html
|
Meu blog sobre desenvolvimento | My Last.fm | @mauriciojr
Screencast de Introdução a linguagem Objective-C |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/08/2005 10:48:11
|
Filipe Sabella
GUJ Expert
Membro desde: 12/03/2003 11:25:57
Mensagens: 4680
Offline
|
Cara, se não me engano o struts reaproveita ações, talvez o erro resida aí.
E mais: o forum é algo comunitário, e o pessoal que ajuda os outros faz isso no tempo livre - o que, em muitos casos, é quase inexistente. Se ninguém respondeu ainda, tenha paciencia e espere até que alguem o faça
|
Former LIPE. |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/08/2005 10:48:44
|
Filipe Sabella
GUJ Expert
Membro desde: 12/03/2003 11:25:57
Mensagens: 4680
Offline
|
Maurício, as actions do struts são thread-safe?
|
Former LIPE. |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/08/2005 10:52:49
|
Mauricio Linhares
Moderador
![[Avatar]](/images/avatar/97af07a14cacba681feacf3012730892.jpg)
Membro desde: 09/01/2005 23:28:22
Mensagens: 3717
Localização: João Pessoa, Paraíba - Brasil
Offline
|
LIPE wrote:Maurício, as actions do struts são thread-safe?
Nops, as Actions do Struts são apenas um servlet que não herda de HttpServlet. Nada de variáveis de instância.
This message was edited 1 time. Last update was at 24/08/2005 10:53:12
|
Meu blog sobre desenvolvimento | My Last.fm | @mauriciojr
Screencast de Introdução a linguagem Objective-C |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/08/2005 11:02:06
|
fviana
JavaChild
![[Avatar]](/images/avatar/58f1e2bfc0c0c182f1afdab7cae02402.png)
Membro desde: 09/06/2005 09:19:51
Mensagens: 116
Offline
|
ele pode ate reaproveitar action mas formbean não, porque senão daria erros... pelo menos na teoria...
na verdade estava usando ThreadLocal mas nao funcionou legal por causa de session, objetos lazy e transactions...
hibernate é muito bom mas ate hoje nao consegui rodar 100% usando struts.
o pessoal fala que roda, mandam consultar a documentação do struts e hibernate mas nunca resolvo o problema.
não há exemplos, dicas e/ou tutoriais de struts e hibernate juntos, pelo menos eu ate hoje nao achei.
tenho uma aplicação em swing e nunca tive problemas, roda 100% mas quando a coisa é web, em especial struts, o trosso da zebra.
alguem tem um exemplo de struts e hibernate rodando juntos? ou será que tem outra solução melhor?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/08/2005 11:05:55
|
Mauricio Linhares
Moderador
![[Avatar]](/images/avatar/97af07a14cacba681feacf3012730892.jpg)
Membro desde: 09/01/2005 23:28:22
Mensagens: 3717
Localização: João Pessoa, Paraíba - Brasil
Offline
|
fviana wrote:na verdade estava usando ThreadLocal mas nao funcionou legal por causa de session, objetos lazy e transactions...
Eu usei ThreadLocal com o Struts por muito tempo e nunca tive problemas.
Hoje contunuo usando ThreadLocal com o Spring e também não tive problema nenhum.
|
Meu blog sobre desenvolvimento | My Last.fm | @mauriciojr
Screencast de Introdução a linguagem Objective-C |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/08/2005 12:08:51
|
fviana
JavaChild
![[Avatar]](/images/avatar/58f1e2bfc0c0c182f1afdab7cae02402.png)
Membro desde: 09/06/2005 09:19:51
Mensagens: 116
Offline
|
me ajuda pelo amor de deus!!!
manda um exemplo simples!
meu sistema faz o seguinte:
inclusão, edição, remoção, visualização e pesquisa de clientes
abaixo está todo o codigo dele. digam-me o que está bom e o que esta ruim, como adicionar threadlocal nele?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/08/2005 12:28:40
|
Mauricio Linhares
Moderador
![[Avatar]](/images/avatar/97af07a14cacba681feacf3012730892.jpg)
Membro desde: 09/01/2005 23:28:22
Mensagens: 3717
Localização: João Pessoa, Paraíba - Brasil
Offline
|
Muito do que eu tinha, já era, porque eu não uso mais o Struts, mas a classe que mantinha as sessions nas threads e era usada pelos DAOs era essa aí ó:
E o filtro era esse aí ó (veja que é o filtro que faz o commit, uma coisa horrível, mas era assim):
This message was edited 2 times. Last update was at 24/08/2005 12:30:49
|
Meu blog sobre desenvolvimento | My Last.fm | @mauriciojr
Screencast de Introdução a linguagem Objective-C |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/08/2005 13:21:31
|
fviana
JavaChild
![[Avatar]](/images/avatar/58f1e2bfc0c0c182f1afdab7cae02402.png)
Membro desde: 09/06/2005 09:19:51
Mensagens: 116
Offline
|
ok, mas veja bem.
a session e a transação será a mesma!?
ou seja, imagine que eu e você faça uma requisição ao mesmo tempo, será aberto uma sessão e transação compartilhada para nós dois, correto?
alem disso, o meu codigo está correto? está dentro do padrao MVC? e do Struts?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/08/2005 14:55:49
|
fviana
JavaChild
![[Avatar]](/images/avatar/58f1e2bfc0c0c182f1afdab7cae02402.png)
Membro desde: 09/06/2005 09:19:51
Mensagens: 116
Offline
|
o meu codigo está correto? está dentro do padrao MVC? e do Struts?
usando threadlocal pode ocorrer erros nas transações. pense na seguinte situação:
user1 e user2
user1 acaba de entrar no sistema
user2 em seguida entra no sistema
user1 abre uma transação e faz um update a uma consulta, neste mesmo tempo o user2 faz um update (na mesma session e transaction), porém dá um erro no update e um rollback é chamado. quando o user1, que nada teria a ver com user2, for comitar no db, as atualizações dele não serão efetivadas por ter ocorrido um rollback em sua transaction.
estou partindo do pre suposto que as operações de user1 irão demorar um bom tempo e a de user2 são instantaneas, ou seja, a session e a transaçao serão a mesma.
será que é isso mesmo? se não for ajudem-me.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/08/2005 15:55:33
|
Mauricio Linhares
Moderador
![[Avatar]](/images/avatar/97af07a14cacba681feacf3012730892.jpg)
Membro desde: 09/01/2005 23:28:22
Mensagens: 3717
Localização: João Pessoa, Paraíba - Brasil
Offline
|
fviana wrote:
a session e a transação será a mesma!?
ou seja, imagine que eu e você faça uma requisição ao mesmo tempo, será aberto uma sessão e transação compartilhada para nós dois, correto?
Não, cada sessão e transação estão amarradas a Thread corrente, é impossível que duas requisições estejam na mesma thread, porque o próprio container cria uma nova thread pra cada requisição.
fviana wrote:o meu codigo está correto? está dentro do padrao MVC? e do Struts?
Aí quem tem que saber é você. Tá funcionando?
|
Meu blog sobre desenvolvimento | My Last.fm | @mauriciojr
Screencast de Introdução a linguagem Objective-C |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/08/2005 16:00:47
|
fviana
JavaChild
![[Avatar]](/images/avatar/58f1e2bfc0c0c182f1afdab7cae02402.png)
Membro desde: 09/06/2005 09:19:51
Mensagens: 116
Offline
|
valeu cara...
agora entendi o threadlocal...
ele garante uma session para cada requisição, colocando a session na thread para a requisicao criada pelo container.
ok, vou modificar no sistema. qualquer coisa, eu posto novamente
|
|
|
 |
|
|