Qual real problema em deixar Session aberta?

Galera,

Eu sei que o assunto já é bem batido em documentações, livros, foruns e etc, mas não consegui encontrar exatamente quais são os reais problemas possíveis. Vou explicar todo o cenário:

Temos um projeto sem configuração de pool de conexão, como o C3p0 por exemplo, é somente o hibernate com configurações default para persistência com um banco Firebird 2.1. Durante todo o projeto não existe sequer um “session.close()” as sessões do hibernate ficam abertas até o GC ter a boa vontade de passar e coletar. Coloquei um JProfiler para rodar e vi que quando chegar por já chega até 200 sessões até o garbage rodar, mas o mais impressionante é que até agora não tivemos APARENTES problemas de conexão, nem de perda de performance. Eu sei que é completamente errado, fora de qq padrão que já li de Hibernate e JPA até hoje, mas quais os reais problemas que podemos encontrar no projeto com uma arquitetura?

Só para constar temos no front-end Flex 3 com BlazeDS para fazer o controller.

O sistema pode crescer bastante a ponto de o gc não conseguir coletálos…

Mas, enquanto o GC coletar está tudo ok?

A questão aqui é performance, será que seu banco de dados vai dar conta de trabalhar com 200 sessões abertas ?? E quando forem 20.000,00 ???

É óbvio que muitas aplicações nunca chegarão a isso. E essa sua preocupação é mais voltada para este nicho aplicações. Alguns bancos tem configurações que fecham a sessão depois de X tempo inativo. Por isso se vc não fechou só esta desperdiçando recusrso e obrigando o seu banco a trabalhar mais.

Acho q é isso

Mas, o que abre a Sessão com o banco é a SessionFactory né? Enquanto a Session guarda somente o objeto em memória, sendo assim mesmo que eu tenha 200 Sessions e uma SessionFactory eu tenho uma só conexão com o banco

chega uma hora que a memoria vai estourar e tambem tem a questão de como deixar todas as sessoes abertas acabar dando um problema quando for dar um commit e dar erro por inconsistencia de dados.

Negativo. Uma session é uma sessão aberta entre vc e o banco de dados. Pode ser que a sua sessão esteja aberta mas a conexão em sí esteja fechada. O maior problema é ter várias conexões abertas e não várias sessions. Disso o GC cuida.

Sendo assim se eu tenho 200 Session abertas então eu tenho 200 conexões com banco obrigatoriamente :shock: :?: