Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Dúvida sobre pool-size

Não entendi as configurações do standalone-full.xml:

<min-pool-size>10</min-pool-size>
<max-pool-size>20</max-pool-size>

Esses números definem efetivamente o número de conexões? Se eu tiver um arquivo configurado dessa forma em um ambiente de produção ele aceitará apenas o número de conexões definidas? Num ambiente real eu teria que colocar então um número "infinito" pra não correr o risco de não ter mais conexões disponíveis? haha

4 respostas
solução!

oi Ygor

o min diz que, assim que o servidor subir, ele deve abrir 10 conexoes com o banco de dados. e, precisando de mais, pode deixar até 20 abertos.

se houver 20 pessoas ao mesmo tempo usando conexao ao mesmo tempo (e isso não é pouco, tendo em vista que a visita ao banco de dados deveria ser rapida), o 21o ficará esperando uma conexao ser liberada.

voce pode usar um numero maior? pode. mas numeros bem maiores para uma aplicacao classica (por classica-se entende-se um sistema que não tem acesso de milhoes de usuarios num unico dia), pode ser que seu sistema esteja usando o banco de dados demais, ou segurando a conexao aberta por tempo demais, e isso só vai postergar um problema que ja deveria ter sido percebido antes.

ideal sempre manter os numeros baixos e ir aumentando quando realmente fizer sentido, para voce poder entender o comportamento da aplicacao. melhor ainda stress testes que podem te indicar isso com antecedencia.

Ygor, definem o número mínimo e máximo de conexões ativas possíveis. No entanto, lembre que, em muitas vezes, uma única conexão é compartilhada por muitos clientes. É o que se faz quando uma aplicação tem um único objeto entityManagerFactory, geralmente do tipo estático.

Neste caso, para toda transação ou consulta, cria-se novos entityManagers a partir desta única conexão.

Valeu Paulo e Emerson!

Mas Emerson, não consegui entender essa parte de conexão compartilhada. Eu achava que pra cada requisição por exemplo uma conexão deveria ser aberta.

Verdade Ygor. Na verdade, um objeto entityManager representa um conexão. O objeto entityManagerFactory é a fábrica. Ela que é compartilhada.

De todo modo, se você usar um servidor de aplicação, usar o poder dele para que ele gerencie suas transações. Se não, tente limitar o escopo de vida dos seus entityManagers.