2013-02-14 6 views
10

Я использую 9.1 JDBC4 драйвер PostgreSQL (PostgreSQL-9.1-902.jdbc4.jar) в приложении Java EE, развернутых в JBoss 7.is javax.sql.DataSource поток безопасен?

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

ответ

10

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

Для драйвера Postgres SQL, я рекомендую вам прочитать Chapter 10. Using the Driver in a Multithreaded or a Servlet Environment из официальной документации:

Драйвер PostgreSQL JDBC является поточно. [...]

8

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

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

0

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