Соединения с базой данных JDBC в веб-приложении DAL - PullRequest
1 голос
/ 23 сентября 2008

Я создаю небольшой веб-сайт для развлечения / обучения с использованием довольно стандартного многоуровневого дизайна Web / Service / Data Access.

Что касается уровня доступа к данным, каков наилучший способ создания объектов подключения для вызова моих хранимых процедур SQL и почему? Имея в виду, я пишу много кода вручную (я знаю, что мог бы использовать Hibernate и т. Д., Чтобы сделать многое для меня) ...

1) Должен ли я создать один статический экземпляр Соединения и выполнить все мои запросы через него, или это вызовет проблемы параллелизма?

2) Должен ли я создавать экземпляр Connection для каждого вызова базы данных и принимать издержки производительности? (Я рассмотрю пул соединений позже, если это так)

Ответы [ 2 ]

1 голос
/ 23 сентября 2008

Стандартным способом является установка источника данных. Все серверы приложений могут сделать это через консоль администратора. Затем пул доступен по его имени JNDI (например, "jdbc / MyDB").

В действительности источником данных должен быть пул соединений (и обычно это так). Он кэширует соединения, проверяет их перед передачей в приложение и выполняет множество других важных функций.

В вашем коде вы:

  1. разрешить имя JNDI и привести его к источнику данных
  2. получить соединение от источника данных
  3. делай свою работу
  4. закрыть соединение (оно возвращается к пулу здесь)

Вы можете настроить пул самостоятельно (используя любую из свободно доступных реализаций пула), но это не имеет никакого смысла, если вы используете сервер приложений.

P.S. Так как это веб-приложение, это хороший способ убедиться, что вы закрыли свое соединение после того, как запрос на использование HttpFilter. Вы можете настроить один в web.xml. Когда приходит запрос, установите соединение, поместите его в ThreadLocal. Во время запроса получите соединение от ThreadLocal, но никогда не закрывайте его. После запроса в фильтре закройте соединение.

1 голос
/ 23 сентября 2008

Вы должны использовать один Connection на поток. Не делитесь соединениями между потоками.

Рассмотрите возможность использования Apache DBCP . Это бесплатный и стандартный способ настройки соединений с базой данных и их извлечения из пула. Этот метод используется высокопроизводительными веб-серверами, такими как Tomcat.

Кроме того, если вы используете DBCP, так как это пул (читай: кэшированный), есть небольшое наказание за частое создание / закрытие соединений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...