Стратегия пула соединений для сайта JSP? - PullRequest
0 голосов
/ 15 сентября 2011

Я работаю над сайтом JSP, который был написан очень плохо. Для каждого отдельного вызова базы данных оригинальный программист открывает и закрывает соединение с базой данных. Я добавляю некоторые новые операции с базой данных, и я хотел бы сделать что-то немного лучше (что-то вроде hibernate придет позже, когда можно будет перестроить большую часть сайта). Я думал о создании единого соединения с базой данных, когда сеанс запускается (после входа в систему), сохраняя его в объекте сеанса и затем закрывая его в конце сеанса прослушивателя функции обработки сеанса, когда сеанс закрывается. Это разумная стратегия? Мысли

Ответы [ 3 ]

3 голосов
/ 15 сентября 2011

Я думал о создании отдельного соединения с базой данных при запуске сеанса (после входа в систему), сохранении его в объекте сеанса и последующем закрытии его в конце сеанса прослушивания функции обработки сеанса при закрытии сеанса. Это разумная стратегия? Мысли

Нет. Создайте источник данных, управляемый соединением, управляемым контейнером, и получите его с помощью JNDI при запуске веб-приложения.

Способ создания источника данных зависит от рассматриваемого контейнера. Например, для Tomcat 6.0 вы можете прочитать его здесь: Ресурсы JNDI Tomcat, КАК - Источники данных JDBC . В случае, например, Glassfish 3, вы можете сделать это в веб-консоли администратора на http://localhost:4848.

Вот как вы можете наконец получить его от JNDI:

DataSource dataSource = (DataSource) new InitialContext().lookup(jndiName);
// ...

Вы можете позвонить по номеру getConnection(). Достаточно получить источник данных только один раз при запуске веб-приложения, например, в статическом блоке инициализатора вашего менеджера соединений с базой данных или, возможно, в ServletContextListener.

Соединение всегда должно быть установлено и закрыто в кратчайшем объеме. Получите его внутри блока try, в котором вы выполняете запрос, и закройте его в finally того же блока try. Не держите соединение открытым дольше, чем необходимо. Пул соединений позаботится о том, чтобы они оставались открытыми, поэтому производительность уже значительно улучшена.

0 голосов
/ 15 сентября 2011

Для начала вы используете Общий экземпляр DBing PoolingDataSource , хранящийся в вашем ServletContext (или "область приложения" на языке JSP).

В идеале я бы хотел перейти на Spring (или Guice).или аналогичный).

0 голосов
/ 15 сентября 2011

Не комментируя вашу идею (потому что я никогда не делал это таким образом, поэтому я не знаю наверняка), я могу сказать, что я всегда видел, как она делала что-то вроде этого (см. Принятый ответ):

Как повторно использовать то же соединение с JdbcTemplate Spring?

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