Я думал о создании отдельного соединения с базой данных при запуске сеанса (после входа в систему), сохранении его в объекте сеанса и последующем закрытии его в конце сеанса прослушивания функции обработки сеанса при закрытии сеанса. Это разумная стратегия? Мысли
Нет. Создайте источник данных, управляемый соединением, управляемым контейнером, и получите его с помощью 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
. Не держите соединение открытым дольше, чем необходимо. Пул соединений позаботится о том, чтобы они оставались открытыми, поэтому производительность уже значительно улучшена.