| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/09/2011 06:51:25
|
marcio_teixeira
Debugger
Membro desde: 16/06/2010 12:55:21
Mensagens: 53
Localização: Lindolfo Collor / RS
Offline
|
Bom dia.
Estou desenvolvendo um aplicação Desktop em Swing e estou tendo problemas com as sessões. A aplicação tem interface com multiplas telas (MDI). Na minha classe DAO, ao salvar, excluir ou buscar algum registro eu verifico se há uma sessão criada (variável estática), se não tiver crio e faço a operação. Após fazer a operação, o que faço com essa sessão? Não posso fechar, pois pode haver outras telas usando ela, porém se eu deixo aberta em alguns casos dá erro, principalmente em classes que possuem coleções, erro por ter mais de uma sessão ativa. Parece-me que o Hibernate abre uma sessão para buscar os objetos da coleção. Como resolver?
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/09/2011 07:42:32
|
thiagocg
Virtual Machine Man
![[Avatar]](/images/avatar/e22c686bc771d5872150738b15f3e533.jpg)
Membro desde: 08/04/2006 11:07:07
Mensagens: 541
Localização: Campo Grande - MS
Offline
|
Bom dia marcio_teixeira, eu utilizo uma abordagem na qual emprego uma camada 'Controller' a qual é responsável por abrir executar a transação que necessito e finalizar minha sessão.
Por exemplo, na tela de cadastro de cliente, no método salvar, chamo uma classe 'controller' que abre a sessão, inicia a transação, comitta, trata rollback e fecha a transação, sei q é trabalhoso mas tem funcionado até então.
Abaixo um exemplo de um método salvar qualquer:
Espero ter ajudado.
[]'s
This message was edited 1 time. Last update was at 14/09/2011 07:46:00
|
________________________________
Thiago Araujo da Silva
Analista de Sistemas
Tecnólogo em Processamento de Dados (Estácio - CG/MS)
Especialista em Desenvolvimento de Aplicações em Java (Uniderp - CG/MS)
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/09/2011 08:20:41
|
marcio_teixeira
Debugger
Membro desde: 16/06/2010 12:55:21
Mensagens: 53
Localização: Lindolfo Collor / RS
Offline
|
Então, na verdade para cada operação (salvar, atualizar, excluir...) você cria uma nova sessão e após fecha. Isso pode ser feito, não há problema?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/09/2011 10:03:39
|
thiagocg
Virtual Machine Man
![[Avatar]](/images/avatar/e22c686bc771d5872150738b15f3e533.jpg)
Membro desde: 08/04/2006 11:07:07
Mensagens: 541
Localização: Campo Grande - MS
Offline
|
Sim pode ser feito sem problema, o custo ai fica por conta de gerenciar a session do hibernate manualmente. O que não pode ser feito é a criação de uma nova conexão com o bd (buildSessionFactory) esse sim deve ser feito apenas uma vez pois seu custo é alto.
No mais é isso!
[]'s
|
________________________________
Thiago Araujo da Silva
Analista de Sistemas
Tecnólogo em Processamento de Dados (Estácio - CG/MS)
Especialista em Desenvolvimento de Aplicações em Java (Uniderp - CG/MS)
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/09/2011 11:43:15
|
marcio_teixeira
Debugger
Membro desde: 16/06/2010 12:55:21
Mensagens: 53
Localização: Lindolfo Collor / RS
Offline
|
Ok, vou testar.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/09/2011 11:48:09
|
FernandoFranzini
GUJ Master
![[Avatar]](/images/avatar/33f6c40df1060aa3c548ad2d499eced0.jpg)
Membro desde: 24/04/2009 12:58:16
Mensagens: 1541
Offline
|
Sem processos concorrentes
Compartilhe 1 fabrica e 1 sessão por todo o sistema.
Aplique singleton.
Com processos concorrentes
Abra 1 fabrica e cada Thread terá sua sessão própria.
Aplique Thread-Local
http://fernandofranzini.wordpress.com/2011/09/05/escopo-thread-local/
|
Fernando Franzini |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 15/09/2011 10:20:40
|
marcio_teixeira
Debugger
Membro desde: 16/06/2010 12:55:21
Mensagens: 53
Localização: Lindolfo Collor / RS
Offline
|
Ficou ok com a abertura de um nova sessão para cada operação. Resolvido.
|
|
|
 |
|
|