| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/07/2005 14:30:47
|
fviana
JavaChild
![[Avatar]](/images/avatar/58f1e2bfc0c0c182f1afdab7cae02402.png)
Membro desde: 09/06/2005 09:19:51
Mensagens: 116
Offline
|
pesoal, estou com uma duvida cruel...
tenho uma aplicação webapp para gerenciamento de arrecadações.
neste, é feito o logon no sistema que espera o usuario lançar os dados.
geralmente o usuario loga e fica o dia interio, de 8h as 18h.
uso struts e hibernate.
as HttpSession estão numa boa, porem as Session do hibernate dão timeout.
usei ThreadLocal como recomendações do pesoal do proprio Hibernate
http://www.hibernate.org/42.html
uso a mesma session do hibernate para todos os usuarios, o que deixa o sistema muito mais rápido, porem a session está dando timeout e quando acesso objetos lazy, dá uma exceção.
alguem sabe o que fazer???
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/07/2005 14:38:24
|
Thiago Senna
GUJ Master
![[Avatar]](/images/avatar/78719f11fa2df9917de3110133506521.jpg)
Membro desde: 11/02/2005 08:08:02
Mensagens: 1595
Offline
|
Você usa a mesma session para todos os usuários???
Mas por quê?
O custo para se criar sessions é bastante leve, compensa mais você criar uma session para cada thead do sistema, ou melhor, para cada cliente ou usuário se assim preferir!
Utilizando uma session para todo mundo, como vc faz para controlar as tranzações, já que está todo mundo tranzando.. oops (tranzacionando..) no mesmo lugar???
Se vc está usando a implementação de TheadLocal sugeriada pelo pessoal do Hibernate, provavelmente vc está usando uma conexão para cada thead do sistema!
Abraços!
Thiago
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/07/2005 14:45:27
|
louds
Moderador
![[Avatar]](/images/avatar/1e48c4420b7073bc11916c6c1de226bb.jpg)
Membro desde: 29/04/2003 23:09:15
Mensagens: 4061
Localização: São Paulo
Offline
|
Não faça isso, você está correndo o risco de estar usando dados inválidos. Use uma session por transação. Nunca vá além disso.
|
http://www.kumpera.net/blog/
http://www.mono-project.com/
"Each individual should work for himself. People will not sacrifice themselves for the company. They come to work at the company to enjoy themselves."
Soichiro Honda |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/07/2005 14:54:15
|
fviana
JavaChild
![[Avatar]](/images/avatar/58f1e2bfc0c0c182f1afdab7cae02402.png)
Membro desde: 09/06/2005 09:19:51
Mensagens: 116
Offline
|
está é a classe
ao iniciar o webapp é iniciado tambem a factory do hibernate.
quando é feito o primeiro acesso ao banco de dados uma session é aberta:
sempre que faço acessos a dados só uso os metodos select, insert, update e delete.
possuo tambem classes DAO, que fazem as regras de negocio, mas ao final sempre passa por aí.
o que ta acontecendo é que, nunca fecho e nem deconecto a session do hibernate, simplesmente vou usando os metodos. chega uma hora que dá erro de timeout no hibernate.
entendeu???
será que a forma que estou fazendo está correta?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/07/2005 15:01:47
|
louds
Moderador
![[Avatar]](/images/avatar/1e48c4420b7073bc11916c6c1de226bb.jpg)
Membro desde: 29/04/2003 23:09:15
Mensagens: 4061
Localização: São Paulo
Offline
|
Não está, você tem que fechar as session ao final de cada transação. >>transação<< e não comando.
|
http://www.kumpera.net/blog/
http://www.mono-project.com/
"Each individual should work for himself. People will not sacrifice themselves for the company. They come to work at the company to enjoy themselves."
Soichiro Honda |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/07/2005 15:11:45
|
fviana
JavaChild
![[Avatar]](/images/avatar/58f1e2bfc0c0c182f1afdab7cae02402.png)
Membro desde: 09/06/2005 09:19:51
Mensagens: 116
Offline
|
voce fala assim:
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/07/2005 15:46:13
|
louds
Moderador
![[Avatar]](/images/avatar/1e48c4420b7073bc11916c6c1de226bb.jpg)
Membro desde: 29/04/2003 23:09:15
Mensagens: 4061
Localização: São Paulo
Offline
|
O normal é você fazer todas operações de um use case na mesma transação.
|
http://www.kumpera.net/blog/
http://www.mono-project.com/
"Each individual should work for himself. People will not sacrifice themselves for the company. They come to work at the company to enjoy themselves."
Soichiro Honda |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/07/2005 16:01:12
|
fviana
JavaChild
![[Avatar]](/images/avatar/58f1e2bfc0c0c182f1afdab7cae02402.png)
Membro desde: 09/06/2005 09:19:51
Mensagens: 116
Offline
|
minha webapp é em struts.
tenho uma action chamada PostAction que contem os controles básicos de acesso a dados.
existe tambem uma ActionForm chamada DBForm, com metodos que chamam o DAO correspondente a cada formbean.
por herança, define-se qual o objeto (tabela do banco) cada formBean corresponde.
no metodo execute da action (PostAction), eu verifico qual tipo de acesso (inserção, edição, remoção ou visualização) foi requerido pelo usuário, chama o metodo correspondente no form que acessa o banco de dados e efetiva a requisição (DAO -> Persistencia.insert()...).
isto tá funcionando muito bem.
não estou sabendo como trabalhar com transações dentro deste modelo.
podem me ajudar???
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/07/2005 22:54:28
|
Thiago Senna
GUJ Master
![[Avatar]](/images/avatar/78719f11fa2df9917de3110133506521.jpg)
Membro desde: 11/02/2005 08:08:02
Mensagens: 1595
Offline
|
Olá!
bom.. eu naum manjo muito desta parte...
dê uma olhada neste link aqui...
http://www.hibernate.org/hib_docs/reference/en/html/quickstart.html
e veja este exemplo de código da doc do hibernate...
Vc pode inicar sua transação com a chamada ao Transaction tx= session.beginTransaction(); e vc irá finalizá-la com o comando tx.commit();
. Provavelmente ai também deve ter o comando tx.rollback, ou algo do tipo.
Vc pode inicar a transação no início da sua action, e no final da action commite a transação, e se acontecer alguma exceção durante a execução da action, vc executa o rollback.
outra idéia interessante é vd usa filtros para inicar a transação e para inalizá-la. Assim, antes que inicie um action, a transação será iniciada, e ao terminar a execuão da action, caso o action tenha executado com sucesso, então dê commit, caso contrário, rollback!
Abraços!
Thiago
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 15/07/2005 09:16:48
|
fviana
JavaChild
![[Avatar]](/images/avatar/58f1e2bfc0c0c182f1afdab7cae02402.png)
Membro desde: 09/06/2005 09:19:51
Mensagens: 116
Offline
|
ok, valeu!!!
fiz os testes aqui e acontece o seguinte:
antes de iniciar a action eu abro uma transação e ao final fecho a transação porem quando a pagina jsp é montada dá uma exception:
isto é causado pelos relacionamentos lazy.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 15/07/2005 13:40:49
|
Thiago Senna
GUJ Master
![[Avatar]](/images/avatar/78719f11fa2df9917de3110133506521.jpg)
Membro desde: 11/02/2005 08:08:02
Mensagens: 1595
Offline
|
humm.. cruel hein..
eu naum manjo isso....
mas sugiro entaum q vc experimente não dar um commit na transação para ver se o erro persiste!
Se não persistir, entaum talvez vc solucione isso usando filttros...
http://www.guj.com.br/java.tutorial.artigo.11.1.guj
Abraços!
Thiago
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 15/07/2005 13:52:54
|
fviana
JavaChild
![[Avatar]](/images/avatar/58f1e2bfc0c0c182f1afdab7cae02402.png)
Membro desde: 09/06/2005 09:19:51
Mensagens: 116
Offline
|
se a session for fechada apos o processamento do JSP não ocorre erros.
usando filter, consigo pegar este evento?
porque ai eu posso fechar a session.
quando 'chain.doFilter(request, response);' é chamado o Servlet e o JSP são executados???
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 15/07/2005 13:59:53
|
Thiago Senna
GUJ Master
![[Avatar]](/images/avatar/78719f11fa2df9917de3110133506521.jpg)
Membro desde: 11/02/2005 08:08:02
Mensagens: 1595
Offline
|
naum sei.. nunca fiz isso.. hehe..
faz o seguinte.. testa, e fala pra gente se funcou!
Tem alguns tópicos rodando esta semana que comentou sobre vc conseguir acessar os dados que estão persistidos no hibernate dentro de sua jsp...
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 15/07/2005 14:14: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:se a session for fechada apos o processamento do JSP não ocorre erros.
usando filter, consigo pegar este evento?
porque ai eu posso fechar a session.
quando 'chain.doFilter(request, response);' é chamado o Servlet e o JSP são executados???
Não faça assim, você não precisa criar uma sessão a cada request, você só precisa fechar a sessão (se ela foi criada) depois que tudo for executado.
Lá no desenrolar da execução da request, se for necessário, alguém vai criar uma sessão e vai botar ela na tread local.
|
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) 17/07/2005 15:58:03
|
fviana
JavaChild
![[Avatar]](/images/avatar/58f1e2bfc0c0c182f1afdab7cae02402.png)
Membro desde: 09/06/2005 09:19:51
Mensagens: 116
Offline
|
entendi!!!
mas quando a session é fechada neste ponto
quer dizer que o JSP já foi montado?
|
|
|
 |
|
|