Melhor opção p/ JDBC - Servlet: Conexão permanente ou inidividual para cada session?

Boa tarde pessoal.
Estava lendo uma apostila sobre conexão de servlets a banco de dados usando JDBC.

Foram apresentadas algumas propostas. Dentre elas, uma thread que mantem a conexão ativa e a outra possibilidade seria a de uma conexão para cada session criada.
A minha dúvida é a seguinte.

A conexão ao banco de dados não é algo um tanto quanto pesado para que a cada conexão seja iniciada e finalizada?
Ainda vale a pena esquentar a cabeça com JDBC existindo hoje JPA e Hibernate?

O que se usa normalmente é um pool de conexões, todos os servidores já tem isso. No mundo real você dificilmente vai criar uma aplicação gerenciando conexões de banco manualmente, mas acho muito importante sim para um desenvolvedor saber como JDBC funciona.

Acho que o pool, também conhecido como “datasource” no caso dos servidores, é mais ou menos um intermediário entre as duas opções que você deu ai. Uma conexão por sessão de usuário ia significar que a conexão ia ficar ociosa muito tempo, o que é ruim. Uma conexão por requisição, por thread, ia ter o problema de ter que abrir/fechar um recurso caro como a conexão muitas vezes. O pool mantém conexões abertas mas elas são compartilhadas entre todos os clientes, então a ociosidade é menor.

Pois é… sempre achei importante conhecer a base da coisa antes de sair fuçando uma ferramenta qualquer que resolve o seu problema
Procurei ler e estou mais sobre pool de conexões e estou começando a entender

Muito obrigado pelo esclarecimento!
Foi de grande valia!