Eu estou usando o driver PostgreSQL 9.1 JDBC4 (postgresql-9.1-902.jdbc4.jar) em um aplicativo Java EE implementado no JBoss 7.
Posso supor que javax.sql.DataSource é thread-safe para que vários threads possam chamar simultaneamente o método getConnection ()?
javax.sql.DataSource em si é uma interface, por isso é específico para a implementação se for thread-safe ou não.
Para o driver postgres sql, recomendo que você leia o Capítulo 10. Usando o driver em um ambiente Multithread ou Servlet da documentação oficial:
O driver JDBC do PostgreSQL é thread-safe. […]
Normalmente, a implementação de DataSource
de um contêiner Java EE será um object seguro para encadeamento, respaldado por um conjunto de conexões, e a segurança de encadeamento (ou de outra forma) das conexões JDBC subjacentes não é realmente relevante. O padrão usual quando você precisa falar com o database é chamar getConnection()
na fonte de dados para obter um object de conexão, fazer as chamadas de database necessárias e, em seguida, close()
a conexão. Nos bastidores, isso não encerrará a conexão subjacente, mas simplesmente a retornará ao pool de conexões para uso futuro. Qualquer conexão individual será usada apenas por um thread por vez.
Este é o idioma usado por coisas como o Spring JdbcTemplate
.
Se for uma ‘implementação de pool de conexão’, ela deve ser thread-safe.