Qual a melhor maneira para trabalhar com as sessões Hibernate em aplicação Swing?  XML
Índice dos Fóruns » Persistência: Hibernate, JPA, JDBC e outros
Autor Mensagem
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?
[Email]
thiagocg
Virtual Machine Man
[Avatar]

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)
[Email] [MSN]
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?
[Email]
thiagocg
Virtual Machine Man
[Avatar]

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)
[Email] [MSN]
marcio_teixeira
Debugger

Membro desde: 16/06/2010 12:55:21
Mensagens: 53
Localização: Lindolfo Collor / RS
Offline

Ok, vou testar.
[Email]
FernandoFranzini
GUJ Master
[Avatar]

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
[Email] [WWW]
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.
[Email]
 
Índice dos Fóruns » Persistência: Hibernate, JPA, JDBC e outros
Ir para:   
Powered by JForum 2.1.8 © JForum Team