Среда настройки пула соединений с базой данных Tomcat SQL Server2000 в JSP:
1. База данных: Microsoft SQL Server 2000.
2. Драйвер базы данных: net.sourceforge.jtds.jdbc.Driver.
Обзор JNDI (интерфейс именования и каталогов Java):
Tomcat4(5) предоставляет пример реализации JNDI-InitialContext, совместимый со службами приложений Java Enterprise Edition. Его исходные данные задаются в файле $CATALINA_HOME/conf/server.xml, и на них могут ссылаться следующие элементы описания среды веб-приложения (/WEB-INF/web.xml):
1) <env-entry> — запись среды, определяет, как работает приложение.
2) <resource-ref> — параметры ресурса, обычно драйверы базы данных, сеанс JavaMail, пользовательские фабрики классов и т. д.
3) <resource-env-ref> — в сервлете 2.4 он используется для упрощения настройки ресурсов, которые не требуют аутентификационной информации, таких как параметры среды и переменные ссылки на ресурс.
InitialContext задается, когда веб-приложение инициализируется для поддержки компонентов веб-приложения. Все записи и ресурсы размещаются в разделе java:comp/env пространства имен JNDI. Нажмите на следующие URL-адреса для получения дополнительной информации:
1) Именование Java и интерфейс каталогов
2) Спецификация платформы J2EE
Настройка ресурсов JNDI. Чтобы настроить ресурсы JNDI, используйте следующие идентификаторы в файле $CATALINA_HOME/conf/server.xml:
1) <Environment> — задайте имя и значение переменной записи JNDI InitialContext в домене (эквивалентно <env-entry>, упомянутому выше).
2) <Resource> — установите имя и тип ресурсов, доступных приложению (эквивалентно <resource-ref>, упомянутому выше).
3) <ResourceParams> — задайте имя фабрики классов ресурсов Java или атрибут JavaBean, который будет использоваться.
4) <ResourceLink> — добавьте ссылку на глобальную среду JNDI (контекст JNDI).
Вышеуказанные идентификаторы должны быть размещены между <Context> и </Context> (для специализированных веб-приложений) или между <DefaultContext> и </DefaultContext>.
Кроме того, имена и значения, заданные в дескрипторе веб-приложения (/WEB-INF/web.xml), также задаются в исходном контексте, когда значение элемента <Environemt> сбрасывается до исходного значения.
Глобальные переменные можно задать в <GlobalNamingResources> дочернего элемента <Server>.
Обзор пула соединений с базой данных:
Подключения к базе данных — критически важный, ограниченный и дорогой ресурс, особенно в многопользовательских веб-приложениях. Управление подключениями к базе данных может существенно повлиять на масштабируемость и надежность всего приложения, а также повлиять на показатели производительности программы. Для решения этой проблемы был предложен пул соединений с базой данных.
Пул соединений с базой данных отвечает за выделение, управление и освобождение соединений с базой данных. Он позволяет приложениям повторно использовать существующее соединение с базой данных вместо повторного установления соединения с базой данных, время простоя которого превышает максимальное время простоя, чтобы избежать ошибок из-за невозможности освобождения. соединение с базой данных. Вызвано отсутствием соединения с базой данных. Эта технология позволяет значительно повысить производительность операций с базами данных.
Пул подключений к базе данных создаст определенное количество подключений к базе данных и поместит их в пул подключений во время инициализации. Количество этих подключений к базе данных определяется минимальным количеством подключений к базе данных. Независимо от того, используются эти соединения с базой данных или нет, в пуле соединений всегда будет гарантировано наличие как минимум указанного количества соединений. Максимальное количество подключений к базе данных в пуле подключений ограничивает максимальное количество подключений, которое может занимать пул подключений. Когда количество подключений, запрошенных приложением из пула подключений, превышает максимальное количество подключений, эти запросы будут добавлены в пул подключений. очередь ожидания. Настройка минимального и максимального количества подключений в пуле подключений к базе данных должна учитывать следующие факторы:
1) Минимальное количество подключений — это количество подключений к базе данных, поддерживаемое пулом подключений, поэтому, если приложение не использует большое количество подключений к базе данных, большой объем ресурсов подключений к базе данных будет потрачен впустую;
2) Максимальное количество подключений — это максимальное количество подключений, на которое может претендовать пул соединений. Если запрос на подключение к базе данных превышает это число, последующие запросы на подключение к базе данных будут добавлены в очередь ожидания, что повлияет на последующие операции с базой данных.
3) Если разница между минимальным количеством подключений и максимальным количеством подключений слишком велика, первый запрос на подключение будет прибыльным, а последующие запросы на подключение, превышающие минимальное количество подключений, эквивалентны установлению нового подключения к базе данных. Однако эти соединения с базой данных, число которых превышает минимальное, не будут освобождены сразу после использования. Они будут помещены в пул соединений для ожидания повторного использования или освобождены после истечения времени простоя.
Предварительные условия для настройки пула соединений с базой данных Tomcat:
1. Должна быть установлена среда выполнения Java;
2. Должен быть сервер базы данных SQL Server2000 (он не обязательно должен быть локальным);
3. У вас должен быть jtds.jar и поместить его в каталог $CATALINA_HOME/common/lib (только здесь). Он используется потому, что драйвер Microsoft Java SQL Server не поддерживает вторичные запросы, которые можно найти в Интернете. В настоящее время используется jtds-0.6.jar.
Установите пул подключений к базе данных в $CATALINA_HOME/conf/server.xml:
Ниже приведен код конфигурации, который необходимо поместить между <Host> и </Host>.
<Context path="/quality" docBase="quality" debug="0" reloadable="true" crossContext="true">
<Logger className="org.apache.catalina.logger.FileLogger" prefix="localhost_quality_log." suffix=".txt" timestamp="true"/>
<Resource name="jdbc/connectDB" auth="Container" type="javax.sql.DataSource"/>
<ResourceParams name="jdbc/connectDB">
<параметр>
<name>maxActive</name>
<!-- Максимальное количество подключений к БД в пуле. Установите значение 0 без ограничений -->
<value>100</value>
</параметр>
<параметр>
<name>maxIdle</name>
<!-- Максимальное количество простаивающих подключений к базе данных, сохраняемых в пуле. Установите значение 0 для отсутствия ограничений -->
<value>30</value>
</параметр>
<параметр>
<name>maxWait</name>
<!-- Максимальное время ожидания доступности соединения с БД в мс. Если этот тайм-аут превышен, выдается исключение. Установите значение -1, чтобы ждать бесконечно -->
<value>10000</value>
</параметр>
<параметр>
<name>removeAbandoned</name>
<!-- Прерванные соединения с БД удаляются и перерабатываются -->
<value>истина</value>
</параметр>
<параметр>
<name>removeAbandonedTimeout</name>
<!-- Используйте параметр RemoveAbandonedTimeout, чтобы установить количество секунд бездействия соединения с БД, прежде чем оно будет считаться прерванным -->
<value>60</value>
</параметр>
<параметр>
<name>logAbandoned</name>
<!-- Зарегистрируйте трассировку стека кода, который был заброшен -->
<value>ложь</value>
</параметр>
<параметр>
<имя>фабрика</name>
<!-DBCP Базовая фабрика источников данных -->
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</параметр>
<параметр>
<имя>имя пользователя</имя>
<!-- Имя пользователя базы данных -->
<value>Иоришинир</value>
</параметр>
<параметр>
<имя>пароль</имя>
<!-- Пароль пользователя -->
<value>мойпароль</value>
</параметр>
<параметр>
<name>имякласса_драйвера</name>
<!-- Имя класса драйвера базы данных -->
<value>net.sourceforge.jtds.jdbc.Driver</value>
</параметр>
<параметр>
<имя>url</name>
<!-- Адрес базы данных -->
<value>jdbc:jtds:sqlserver://127.127.127.127:1433/Северный ветер</value>
</параметр>
</РесаурсПарамс>
</Контекст>
Ниже приводится описание некоторых параметров:
<Context path="/quality" docBase="quality" debug="0" reloadable="true" crossContext="true">
в:
1) путь указывает путь, установленный здесь каталог качества — $CATALINA_HOME/webapps;
2) корневой каталог файла docBase.
3) reloader Следует ли перекомпилировать при обновлении веб-страницы.
4) maxActive Максимальное количество подключений к базе данных в пуле подключений. Установите значение 0 для отсутствия ограничений.
5) maxIdle Максимальное время простоя соединения с базой данных. По истечении этого времени соединение с базой данных будет помечено как недоступное, а затем разорвано. Установите значение 0 для отсутствия ограничений.
6) maxWait — максимальное время ожидания установления соединения. Если это время будет превышено, будет получено исключение. Установите значение -1, чтобы указать отсутствие ограничений.
7) RemoveAbandoned перезапускает заброшенные (обычно забытые) соединения с базой данных в пул соединений.
8) RemoveAbandonedTimeout Если соединение с базой данных не используется в течение длительного времени, оно будет считаться прерванным и возвращено в пул соединений.
9) logAbandoned регистрирует повторение прерванных подключений к базе данных.
10) DriverClassName Драйвер JDBC.
11) Строка подключения к базе данных URL устанавливает указанный ресурс в $CATALINA_HOME/webapps/quality/WEB-INF/web.xml:
Ниже приведен код конфигурации, который необходимо поместить в <web-app> и </web-app>.
<!-- Начало настройки базы данных -->
<ресурс-ссылка>
<description>тест ConnectDB</description>
<res-ref-name>jdbc/connectDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Контейнер</res-auth>
</ресурс-ref>
<!-- Конец конфигурации базы данных -->
Ниже приводится необходимое описание параметров:
1) описание Описание ссылочного ресурса.
2) имя ресурса res-ref-name. См. <ResourceParams name="jdbc/connectDB"> выше.
3) тип ресурса res-type. См. <Resource name="jdbc/connectDB" auth="Container" type="javax.sql.DataSource"/> выше.
Использование ресурсов в JSP:
Это часть кода файла веб-страницы jsp в определенном подкаталоге $CATALINA_HOME/webapps/quality:
<%@ page contentType="text/html;charset=GBK"%>
<%@ страница errorPage="error.jsp"%>
<%@ page import="javax.naming.*"%>
<%@ page import="javax.sql.*"%>
<%@ page import="java.sql.*"%>
<html>
<голова>
</голова>
<тело>
<%
………………
………………
// Операции с базой данных
Контекст ctx=null;
Соединение cnn=null;
Заявление stmt=null;
ResultSet rs=null;
пытаться
{
ctx = новый InitialContext ();
если (ctx == ноль)
throw new Exception("Нет подходящей среды");
DataSource ds=(DataSource)ctx.lookup("java:comp/env/jdbc/connectDB");
если (дс == ноль)
выдать новое исключение («Нет соответствующей базы данных»);
cnn=ds.getConnection();
stmt=cnn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
rs=stmt.executeQuery("выберите * из таблицы1");
………………
………………
}
окончательно
{
если(rs!=ноль)
рс.закрыть();
если (стмт! = ноль)
стмт.закрыть();
если (cnn! = ноль)
cnn.закрыть();
если (ctx! = ноль)
ctx.закрыть();
}
%>
</тело>
</html>
Описание кода:
DataSource ds=(DataSource)ctx.lookup("java:comp/env/jdbc/connectDB");
В приведенном выше предложении применяются только что установленные ресурсы.
Это хорошая привычка — освобождать ресурсы после использования, особенно ресурсы контекста. См. сегмент кодаfinally в разделе try-catch-finally. Если ресурсы верхнего уровня освобождаются во время выпуска ресурса, ресурсы нижнего уровня будут освобождены первыми. Например: если выпущен ctx, порядок освобождения ресурсов будет rs, stmt, cnn, ctx. Другими словами, если ctx выпущен, rs, stmt и cnn будут недоступны.
Освобождение ресурсов здесь только возвращает соединение с базой данных в пул соединений и фактически не освобождает ресурсы. См. обзор пулов соединений с базой данных.