Чтобы добавить или обновить настраиваемые свойства, выполните следующие действия.
1. Откройте источник данных, щелкнув по его имени в списке ресурсов.
2. Нажмите Custom Properties (Настраиваемые свойства) в таблице Additional Properties (Дополнительные свойства), Чтобы указать или обновить свойства источника данных, которые могут потребоваться. Появится список имеющихся свойств, основанный на типе источника данных.
3. Нажмите New (Создать), чтобы добавить настраиваемое свойство или щелкните
по имени свойства, чтобы изменить его.
На рис. 6.12 показаны несколько первых настраиваемых свойств, сконфигурированных для источника данных, подключенного к базе данных DB2.
4. По окончании нажмите OK.
Рис. 6.12. Настраиваемые свойства источника данных
Конфигурирование параметров работы с пулами соединений
Ссылку на параметры работы с пулом соединений можно найти в разделе Additional Properties (Дополнительные свойства) окна конфигурирования источника данных. См. рис. 6.8.
Рис. 6.13. Параметры работы с пулом соединений для источника данных
• Connection Timeout (Время ожидания соединения).
Указывается интервал (в секундах), по истечении которого происходит прерывание (таймаут) запроса на соединение и генерируется исключение ConnectionWait TimeoutException. Такая ситуация может возникнуть, если пул достиг максимума (Max Connections), и все соединения задействованы другими приложениями ходе периода ожидания.
Например, если параметр Connection Timeout равен 300, и достигнуто максимальное число соединений, то менеджер пула ждет 300 секунд появления доступного физического соединения. Если за это время доступных соединений не появилось, менеджер пула генерирует исключение ConnectionWaitTimeoutException.
Совет. Если для параметра Connection Timeout указано значение 0, то менеджер пула будет ждать столько, сколько нужно, чтобы соединение было выделено.
• Max Connections (Максимальное число соединений).
Указывается максимальное число физических соединений, которое может быть создано в данном пуле.
Это физические соединения с серверной базой данных. Когда это число достигнуто, новые физические соединения не создаются, и отправитель запроса будет ждать, пока физическое соединение, которое в данный момент используется, будет возвращено в пул, или до тех пор, пока не будет сгенерировано исключение ConnectionWaitTimeoutException.
Например, если для Max Connections установлено значение 5, и используется пять физических соединений, то менеджер пула будет ждать освобождения соединения столько времени, сколько указано в параметре Connection Timeout. Если по истечении этого времени свободных соединений не появилось, менеджер пула генерирует для приложения исключение ConnectionWaitTimeoutException.
• Min Connections (Минимальное число соединений).
Указывается минимальное число поддерживаемых физических соединений. До тех пор, пока это число не достигнуто, поток, обслуживающий пул, не удаляет физические соединения. Однако и не делается попыток довести количество соединений до этого числа.
Например, если Min Connections имеет значение 3, и создано одно физическое соединение, это соединение не будет удалено потоком Unused Timeout. Кроме того, поток не будет автоматически создавать еще два соединения, чтобы довести их количество до значения параметра Min Connections.
• Reap Time (Время опроса).
Указывается интервал (в секундах) между запусками потока, обслуживающего пул. Например, если для Reap Time установлено значение 60, то поток, обслуживающий пул, будет запускаться каждые 60 секунд. Интервал Reap Time влияет на точность соблюдения параметров Unused Timeout (Время ожидания неиспользуемых соединений) Aged Timeout (Время ожидания устаревших соединений). Чем меньше заданный интервал, тем выше точность. При запуске потока, обслуживающего пул, он уничтожает все соединения, бездействующие дольше, чем указано в параметре Unused Timeout, до тех пор, пока не доведет число соединений до значения, указанного в параметре Min Connections. Поток, обслуживающий пул, также удаляет все соединения, остающиеся активными дольше, чем указано в параметре Aged Timeout.
Совет. Если поток, обслуживающий пул, включен, задавайте в параметре Reap Time значение меньшее, чем Unused Timeout и Aged Timeout.
Интервал Reap Time также оказывает влияние на производительность. Меньшие интервалы приводят к тому, что поток, обслуживающий пул, запускается чаще, и это снижает производительность.
• Unused Timeout (Время ожидания неиспользуемых соединений).
Укажите интервал (в секундах), по истечении которого бездействующее соединение будет удаляться.
Совет. Задавайте для Unused Timeout значение большее, чем значение параметра Reap
Timeout, чтобы обеспечить оптимальную производительность. Неиспользованные физические соединения удаляются только в том случае, если текущее количество неиспользуемых соединений превышает значение параметра Min Connections.
Например, если значение параметра Unused Timeout равно 120, и поток, обслуживающий пул, включен (значение Reap Time не равно 0), то любое физическое соединение, остающееся неиспользованным в течение двух минут, удаляется. Обратите внимание, что на точность данного периода ожидания влияет значение Reap Time. За дополнительной информацией обращайтесь к пункту, посвященному Reap Time.
• Aged Timeout (Время ожидания устаревших соединений).
Укажите интервал (в секундах), по истечении которого физическое соединение будет удаляться, независимо от того, как оно используется.
Если задать для этого параметра значение 0, то физические соединения будут оставаться в пуле неопределенно долго. Например, если для Aged Timeout установлено значение 1200, а Reap Time не равно 0, то физическое соединение, существующее 1200 секунд (20 минут), будет удалено из пула. Обратите внимание, что на точность данного периода ожидания влияет значение Reap Time. За дополнительной информацией обращайтесь к пункту, посвященному Reap Time.
Совет. Для оптимизации производительности устанавливайте значение Aged Timeout большее, чем Reap Time.
Рис. 6.14. Дополнительные свойства пула соединений
• Purge Policy (Политика очистки).
Укажите, каким образом производится очистка соединений, если обнаруживается зависшее соединение или фатальная ошибка соединения.
Допускаются значения EntirePool и FailingConnectionOnly. Если выбрать значение EntirePool (Весь пул), то при обнаружении зависшего соединения будут удалены все соединения пула. Если выбрать значение FailingConnectionOnly (Только неисправное соединение), то пул попытается удалить только зависшее соединение. Другие соединения останутся в пуле. Таким образом можно отсрочить нарушение соединений, используемых на момент возникновения ошибки. Однако такие соединения в пул уже не вернутся.
Если щелкнуть по ссылке Advanced connection pool properties (Дополнительные свойства пула соединений), вы сможете изменять свойства, показанные на рис. 6.14.
Эти свойства требуют более глубоких знаний того, как работает пул соединений и как функционирует ваша система. За сведениями об этих параметрах обращайтесь к теме Connection pool advanced settings (Дополнительные свойства пула соединений) Центра информации.
Свойства источника данных WebSphere Application Server
Вы можете задавать свойства, относящиеся к настройкам соединения со стороны WebSphere Application Server, а не к настройкам соединения с базой данных, выбрав ссылку WebSphere Application Server data source properties (Свойства источника данных WebSphere Application Server) в разделе Additional Properties (Дополнительные свойства) страницы конфигурации источника данных. Обращайтесь к рис. 6.11. Нажав на эту ссылку, вы увидите окно, показанное на рис. 6.15.
• Statement Cache Size (Размер кеша инструкции).
Укажите количество подготовленных инструкций, кешируемых для одного соединения. Подготовленная инструкция — это предварительно скомпилированная инструкция SQL, хранящаяся в объекте-подготовленной инструкции. Этот объект используется для многократного выполнения данной инструкции SQL. Источник данных WebSphere Application Server оптимизирует обработку подготовленных инструкций.
Как правило, чем больше инструкций содержит ваше приложение, тем больше должен быть размер кеша. Например, если приложение содержит пять инструкций SQL, задайте размер кеша инструкций равным 5, чтобы у каждого соединения было пять инструкций.
• Enable multithreaded access detection (Включить определение многопоточного доступа).
Если включить эту опцию, сервер приложений будет определять наличие доступа с использованием нескольких потоков.
• Enable database reauthentication (Включить повторную аутентификацию в базе данных).
Поисковые запросы в пуле соединений не включают имя пользователя и пароль. Если включить данную опцию, соединение будет по-прежнему извлекаться из пула, но вы должны будете расширить класс DataStoreHelper и создать реализацию метода doConnectionSetupPerTransaction(), в котором происходит повторная аутентификация.
Повторная аутентификация для соединений позволяет улучшить производительность путем снижения затрат на открытие и закрытие соединений, в особенности для приложений, которые всегда запрашивают соединения под другим именем пользователя и паролем.
Рис. 6.15. Пользовательские свойства источника данных WebSphere
• Manage cached handles (Управлять сохраненными в кеш дескрипторами).
Когда вы вызываете для доступа к базе данных метод getConnection(), он возвращает дескриптор соединения. Этот дескриптор является не физическим соединением, а представлением физического соединения. Физическим соединением управляет менеджер соединений. Кешированный дескриптор — это дескриптор соединения, который сохраняется приложением при выходе за рамки транзакции и метода.
Данный параметр указывает, должен ли контейнер отслеживать сохраненные в кеш дескрипторы. Это может создавать дополнительную нагрузку, и данный параметр следует включать лишь в специальных ситуациях. За дополнительной информацией о кешированнии дескрипторов обращайтесь к теме «Connection Handles» (Дескрипторы соединений) Центра информации.
• Transaction context logging (Журналирование контекста транзакции).
В программной модели J2EE указывается, что соединения всегда должны иметь контекст транзакции. Однако некоторые приложения не имеют своего контекста. Данная опция указывает, что контейнер должен заносить отсутствие контекста транзакции в журнал операций при получении соединения.
• Pretest existing pooled connections (Предварительное тестирование существующих в пуле соединений).
Если установить этот флажок, сервер приложений попытается подключиться к источнику данных, прежде чем попытатся посылать или принимать данные от этого источника. Если выбрать это свойство, вы сможете указать с каким интервалом (в секундах) сервер приложений будет пытаться установить соединение и сколько попыток он совершит. Для тестирования соединения в базу данных посылается предварительно составленная тестовая SQL-строка.