Является безопасным javax.sql.DataSource?

Я использую драйвер PostgreSQL 9.1 JDBC4 (postgresql-9.1-902.jdbc4.jar) в приложении Java EE, развернутом в JBoss 7.

Можно ли предположить, что javax.sql.DataSource является потокобезопасным, так что несколько потоков могут одновременно вызвать метод getConnection() на нем?

Ответ 1

javax.sql.DataSource сам является интерфейсом, поэтому он специфичен для имплантации, если он потокобезопасен или нет.

Для драйвера postgres sql я рекомендую вам читать Глава 10. Использование драйвера в многопоточной среде или среде сервлета из официальной документации

Драйвер PostgreSQL JDBC является потокобезопасным. [...]

Ответ 2

Обычно реализация DataSource, которую вы получаете из контейнера Java EE, будет потокобезопасным объектом, поддерживаемым пулом соединений, а безопасность потоков (или иначе) базовых подключений JDBC на самом деле не актуальна. Обычный шаблон, когда вам нужно поговорить с базой данных, является вызов getConnection() в источнике данных для получения объекта соединения, выполнения необходимых вызовов базы данных, а затем close() соединения. Под крышками это фактически не закрывает базовое соединение, а просто возвращает его в пул соединений для будущего использования. Любое отдельное соединение будет использоваться только одним потоком за раз.

Это идиома, используемая такими вещами, как Spring JdbcTemplate.

Ответ 3

Если это "реализация объединения пулов", тогда он должен быть потокобезопасным.