Является безопасным 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
Если это "реализация объединения пулов", тогда он должен быть потокобезопасным.