hibernate e sincronismo  XML
Índice dos Fóruns » Desenvolvimento Web
Autor Mensagem
fviana
JavaChild
[Avatar]

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

[Email] [WWW] [MSN] [ICQ]
fviana
JavaChild
[Avatar]

Membro desde: 09/06/2005 09:19:51
Mensagens: 116
Offline

alguem pode me ajudar?
[Email] [WWW] [MSN] [ICQ]
Mauricio Linhares
Moderador
[Avatar]

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
[WWW]
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.
[ICQ]
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.
[ICQ]
Mauricio Linhares
Moderador
[Avatar]

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
[WWW]
fviana
JavaChild
[Avatar]

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?
[Email] [WWW] [MSN] [ICQ]
Mauricio Linhares
Moderador
[Avatar]

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
[WWW]
fviana
JavaChild
[Avatar]

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?
[Email] [WWW] [MSN] [ICQ]
Mauricio Linhares
Moderador
[Avatar]

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
[WWW]
fviana
JavaChild
[Avatar]

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?
[Email] [WWW] [MSN] [ICQ]
fviana
JavaChild
[Avatar]

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.
[Email] [WWW] [MSN] [ICQ]
Mauricio Linhares
Moderador
[Avatar]

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
[WWW]
fviana
JavaChild
[Avatar]

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
[Email] [WWW] [MSN] [ICQ]
 
Índice dos Fóruns » Desenvolvimento Web
Ir para:   
Powered by JForum 2.1.8 © JForum Team