Перейти к тексту

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

При первом входе в developerWorks для Вас будет создан профиль. Выберите информацию отображаемую в Вашем профиле — скрыть или отобразить поля можно в любой момент.

Вся введенная информация защищена.

  • Закрыть [x]

При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

Вся введенная информация защищена.

  • Закрыть [x]

Оптимизация клиента pureQuery в среде Web-приложений: Часть 1. Оптимизация приложений на одном серверном узле

Секреты успешного внедрения

Чарул Капил, инженер-программист, IBM
Чарул Капил (Charul Kapil) инженер-программист, IBM В течение последних трех лет Чарул Капил работает в IBM India Software Labs в качестве инженера-программиста. В настоящее время она входит в команду OPM-Reporting QA, а до этого работала в команде pureQuery Client Optimization QA.
Джейджит Чакраворти, инженер-программист, IBM
Джейджит Чакраворти – инженер-программист IBM. Он работает в IBM Silicon Valley Lab в Сан-Хосе, штат Калифорния. Джейджит занимается разработкой драйвера Java Common Client JDBC, SQLJ, и клиентских продуктов pureQuery. Помимо разработки программных продуктов Джейджит участвует в глобальной программе технической поддержи клиентов IBM.
Манодж Сардана, инженер-программист, IBM
Манодж Сардана - инженер-программист IBM. В течение последних пяти лет он работает в качестве инженера-программиста в IBM India Software Labs. Он обладает сертификатами IBM Certified Advanced Administrator и Application Developer for DB2 Linux, UNIX, and Windows. Манодж имеет степень бакалавра по вычислительной технике университета NITK Surathkal. В свободное время он любит слушать музыку и играть с детьми.

Описание:  Оптимизация клиента pureQuery требует настройки определенных свойств для различных уровней оптимизации клиентских приложений. Эти свойства меняются в зависимости от требований, предъявляемых к среде, где работает Web-приложение. Данная статья, первая в серии из двух частей, описывает настройки, необходимые для Web-приложения, выполняемого на одном серверном узле и использующего одну или несколько баз данных совместно с другими приложениями. Вторая статья этой серии будет посвящена настройкам оптимизации клиентских приложений в более сложных Web-средах, в частности, для кластеров серверов. Материал данной статьи предполагает знакомство с процессом оптимизации клиентских приложений pureQuery и с настройками свойств Web-приложений в WebSphere® Application Server или в другой среде клиент-сервер.

Больше статей из этой серии

Дата:  31.08.2010
Уровень сложности:  средний PDF:  A4 and Letter (270KB | 21 страница)Загрузить Adobe® Reader®
Активность:  3470 просмотров
Комментарии:  


Введение

Одна из основных целей поддержки статического SQL в DB2® - это повышение производительности системы. До появления технологии оптимизации клиента pureQuery большинство Java™ приложений (кроме использующих SQLJ) не имели возможности использовать статический SQL. Именно поэтому практически все Java-приложения, работающие с базами данных, значительно повышали нагрузку на систему за счет динамического выполнения инструкций SQL, включая формирование SQL-команд (построение планов доступа к базе данных) в процессе выполнения приложения. Существуют методы минимизации дополнительной нагрузки за счет кэширования, как на стороне сервера, так и на стороне клиента. Однако подобные сценарии имеют дополнительные ограничения, связанные с выделением и использованием свободной памяти. Вопросы кэширования выходят за рамки данной статьи. Использование статического SQL позволяет повысить производительность, так как в этом случае план выполнения SQL-запроса создается заранее, на этапе работы утилиты BIND, а не во время исполнения программы. Таким образом, исполнение статических SQL-инструкции не требует использования операторов PREPARE и DESCRIBE. Средства оптимизации клиентских приложений пакета Optim pureQuery Runtime позволяют Java-приложениям (даже тем, которые были разработаны на Java-фреймворках) перейти при работе с базами данных DB2 к статическому исполнению SQL-инструкций, используя тем самым все преимущества производительности и управляемости статического SQL. При этом подобная оптимизация не потребует от вас изменения кода Java-приложений. Если вы используете базы данных, отличные от DB2, вы можете воспользоваться другими преимуществами оптимизации клиентских приложений. Например, при работе в среде разработки Optim™ Development Studio для любого SQL-запроса вы сможете легко определить генерирующий этот запрос фрагмент Java-кода. Таким образом, вам будет гораздо проще отладить код с точки зрения составления оптимальных запросов и оценить, каким образом изменение того или иного SQL-запроса влияет на работу приложения. Вы сможете оптимизировать работу клиентского приложения, избавившись от низкопроизводительных SQL-инструкций, не меняя при этом код всего приложения. Кроме того, вы сможете внести ограничения в работу клиентского приложения, разрешив выполнять только заранее определенные и согласованные SQL-инструкции, тем самым снизив риск возможных SQL-инъекций. Более подробную информацию об использовании статического SQL вы можете найти в статье "'No excuses' database programming for Java" (раздел Ресурсы). Детальное описание функций отслеживания и замены SQL-инструкций пакета Optim Development Studio дается в статье "What's New in Optim Development Studio 2.2" (см. раздел Ресурсы).

Краткий обзор процесса оптимизации клиентских приложений

Как описано в статье "Optimize your existing JDBC applications using pureQuery" (см. раздел Ресурсы), процесс преобразования динамического SQL в статический с помощью средств оптимизации pureQuery требует выполнения определенных шагов (см. рис. 1). Если вы не используете статический SQL, этапы конфигурирования и создания пакетов не нужны.


Рисунок 1. Процесс оптимизации клиентского приложения за счет статического исполнения SQL-запросов к базам данных DB2
Рисунок 1. Процесс оптимизации клиентского приложения за счет статического исполнения SQL-запросов к базам данных DB2

Для использования технологии оптимизации pureQuery вам потребуется IBM Data Server Driver for JDB and SQLJ и пакет Optim pureQuery Runtime. Для целей разработки приложений эти компоненты устанавливаются на том же компьютере, где установлен пакет Optim Development Studio. На рисунке 1 такой компьютер представлен в виде прямоугольника с подписью DB2 JCC Driver and pureQuery Runtime. Четыре основных этапа оптимизации показаны на рисунке 1:

Сбор SQL-инструкций в отдельный файл (Capture)
На первом этапе процесса оптимизации необходимо выполнить приложение с исходным динамическим SQL. В процессе работы приложения инструменты pureQuery выделяют SQL-инструкции и связанные с ними данные в отдельный файл pureQueryXml. На рисунке 1 этот файл отмечен как Собранные SQL-инструкции и связанные с ними метаданные.
Конфигурирование свойств пакетов (Configure)
На этом этапе вы определяете, в какой или какие пакеты необходимо включить выделенные SQL-инструкции. Самый простой способ сделать это – воспользоваться соответствующими инструментами Optim Development Studio.
Создание пакетов с помощью BIND (Bind)
На этом этапе утилита BIND анализирует собранные SQL-инструкции и создает соответствующие пакеты или DBRM для выполнения запросов к выбранной базе данных. Этот этап необходим только для статического выполнения SQL-запросов. Для создания пакетов вы можете воспользоваться средствами Optim Development Studio или вызвать утилиту Static Binder из командной строки.
Исполнение (Execute)
На этом этапе вы можете выбрать настройки pureQuery для статического, динамического или смешанного выполнения выделенных SQL-инструкций. Для этого вы можете воспользоваться инструментами Optim Development Studio или утилитами командной строки.

Использование пакета pureQuery Runtime на сервере приложений

На рисунке 2 показана типовая топология использования pureQuery в трехуровневой среде (уровень клиента, уровень приложений и уровень баз данных). Пакет pureQuery Runtime работает на уровне приложений, т.е. там, где установлен сервер приложений, или, если вы не используете такой сервер, там, где установлены клиентские драйверы для автономных приложений. Дополнительное программное обеспечение на уровне баз данных не требуется.


Рисунок 2. Типовая архитектура Web-приложения, использующего технологию pureQuery
Рисунок 2. Типовая архитектура Web-приложения, использующего технологию pureQuery

Несмотря на то, что на рисунке 2 в качестве сервера баз данных показана DB2, pureQuery также можно использовать с базами данных Informix Dynamic Server и Oracle. Данная статья описывает правила настройки pureQuery для работы с WebSphere Application Server. Если вы используете другой сервер приложений, необходимо выполнить те же самые основные этапы, которые описаны в этой статье, однако конкретные шаги, связанные с настройкой среды сервера приложений, могут отличаться от приведенных здесь.

Основные этапы:

  1. Установка pureQuery Runtime и IBM Data Server Driver for JDBC and SQLJ.
  2. Создание JDBC-провайдера с поддержкой pureQuery.
  3. Создание источника данных с поддержкой pureQuery.

Установка pureQuery Runtime и IBM Data Server Driver for JDBC and SQLJ

В таблице 1 указаны версии Java Runtime Environment (JRE), WebSphere Application Server и IBM Data Server Driver for JDBC and SQLJ JDBC, поддерживаемые различными версиями пакета pureQuery Runtime (для Linux®, UNIX®, Windows® и для z/OS®).


Таблица 1. Поддерживаемые версии
Версия pureQuery RuntimeВерсия IBM JDBC DriverВерсия JREВерсия WebSphere Application Server
pureQuery 2.1JCC4.3+ and JCC 3.53+JRE 1.5 и вышеWebSphere Application Server 6.1.0.21, 6.1.0.23, 7.0.0.1
pureQuery 2.2JCC4.7.89+ and JCC 3.57.86+JRE 1.5 и вышеWebSphere Application Server 6.1.0.21, 6.1.0.23, 7.0.0.1
pureQuery 2.2 and pureQuery 2.2 with Fix Pack 1 JCC4.7.111+ and JCC 3.57.109+JRE 1.5 и вышеWebSphere Application Server 6.1.0.21, 6.1.0.23, 7.0.0.1

Подробную информацию о требованиях к программному обеспечению вы можете найти в разделе Ресурсы.

Создание JDBC-провайдера с поддержкой pureQuery

В этом разделе мы расскажем, как настроить JDBC-провайдер, используя WebSphere Application Server в качестве сервера приложений. При этом предполагается, что подключение приложения к базе данных производится с помощью драйвера IBM Data Server Driver for JDBC and SQLJ. Этот драйвер используется в качестве JDBC-провайдера на сервере WebSphere Application Server. Для использования технологии pureQuery необходимо добавить jar-файлы pureQuery (pdq.jar и pdqmgmt.jar) к путям поиска классов JDBC драйвера, используемого в качестве JDBC провайдера. На рисунке 3 показана управляющая консоль WebSphere с соответствующими настройками путей поиска классов.


Рисунок 3. Настройки путей поиска классов для JDBC-провайдера в административной консоли WebSphere Application Server
Рисунок 3. Настройки путей поиска классов для JDBC-провайдера в административной консоли WebSphere Application Server

Создание источника данных с поддержкой pureQuery

Теперь можно приступить к созданию источников данных с использованием JDBC-провайдера. Для этого в среде WebSphere Application Server необходимо выполнить следующие шаги:

  1. В административной консоли WebSphere щелкните мышкой на вкладке Data source (в разделе Resource). В открывшемся контекстном меню выберите опцию New.
  2. Укажите имена источника данных и JNDI, которые используются в приложении.
  3. Выберите JDBC-провайдер, соответствующий источнику данных, и укажите параметры доступа к базе данных, включая имя базы данных, имя сервера, порт, идентификатор и пароль пользователя.
  4. Чтобы указать пулу соединений сервера, что подключение к указанному источнику данных использует технологию pureQuery, присвойте значение свойству pdqProperties. Это может быть значение pdqProperties по умолчанию (executionMode dynamic).

Теперь инструментарий pureQuery установлен и доступен на сервере приложений. Приложение будет использовать созданный источник данных для подключения к базе данных. Одно Web-приложение может использовать несколько источников данных для работы с различными базами данных. Аналогично, несколько Web-приложений могут использовать один и тот же источник данных.


Обзор настроек среды pureQuery Runtime для оптимизации клиента

Процесс оптимизации клиентского приложения требует определенных настроек для преобразования динамического SQL в статический и для выделения SQL-инструкций. В данном разделе описываются различные варианты настройки свойств оптимизации клиента pureQuery для Web-приложений.

  1. Вариант 1: Глобальная настройка свойств pureQuery Runtime
  2. Вариант 2. Настройка свойств pureQuery Runtime для источника данных
  3. Вариант 3. Настройка свойств pureQuery Runtime на уровне приложений (начиная с версии 2.2)

Каждый вариант имеет свои преимущества и ограничения. В этом разделе мы рассмотрим несколько примеров и определим, какой вариант удобнее использовать в каждом конкретном случае.

Вариант 1: Глобальная настройка свойств pureQuery Runtime

В каком случае следует использовать этот вариант?

Глобальная настройка свойств pureQuery устанавливает одни и те же свойства для всех источников данных, для подключения к которым используется определенный драйвер. Такой подход полезен в том случае, когда необходимо одновременно установить одинаковые настройки для всех источников данных и для всех приложений.

Что для этого нужно сделать

Для глобальной настройки свойств добавьте файл pdq.properties в путь поиска классов CLASSPATH для драйвера вместе с jar-файлами pureQuery. При этом свойства, определенные в файле pdq.properties, будут работать для всех приложений, использующих указанный драйвер. Другими словами, возможность разделения свойств на уровне приложений и уровне источников данных поддерживаться не будет.

Что при этом необходимо иметь в виду

Чтобы перейти от динамического выполнения SQL-инструкций к статическому и активировать изменения, сделанные в файле pdq.properties, требуется перезапуск сервера приложений. Так как свойства, указанные в файле pdq.properties, применяются ко всем источникам данных, использующих указанный JDBC-провайдер, все SQL-инструкции будут собраны в один файл pureQueryXml и будут исполняться в одном и том же режиме (динамически или статически).

Вариант 2. Настройка свойств pureQuery Runtime для источника данных

В каком случае следует использовать этот вариант?

Настройка свойств pureQuery Runtime на уровне источников данных позволяет назначить различные свойства разным источникам данных. Такой вариант предпочтительно использовать в том случае, когда каждый источник данных должен быть независимым по отношению к остальным источникам. Примером может служить приложение, обращающееся к нескольким источникам данных, причем для работы с одними источниками используются динамические SQL-запросы, а для работы с другими источниками – статические SQL-запросы.

Что для этого нужно сделать

Для установки свойств pureQuery на уровне источников данных воспользуйтесь дополнительным свойством pdqProperties конкретного источника данных. Чтобы установить значение этого свойства, выберите опцию DataSources > your datasource name > Custom properties > New в административной консоли WebSphere Application Server, как показано на Рис. 4.


Рисунок 4. Установка дополнительных свойств источника данных
Рисунок 4. Установка дополнительных свойств источника данных

Что при этом необходимо иметь в виду

Так же как и при глобальной настройке свойств через файл pdq.properties, при каждой модификации pdq.properties сервер приложений нужно перезапускать для активации изменений. При настройке свойств конкретного источника данных эти свойства применяются ко всем приложениям, обращающимся к указанному источнику данных. Таким образом, в случае, когда несколько приложений используют один и тот же источник данных, для всех эти приложений выделенные SQL-инструкции будут собраны в один файл.

Вариант 3. Настройка свойств pureQuery Runtime на уровне приложений

Как уже было сказано выше, свойства, указанные в глобальном файле pdq.properties, применяются ко всем приложениям, использующим один и тот же драйвер, и ко всем источникам данных, с которыми работают эти приложения (так как глобальный файл pdq.properties включен в переменную CLASSPATH драйвера). Кроме того, свойства, определенные на уровне источника данных, применяются ко всем приложениям, работающим с данным источником данных. Для определения дополнительных ограничений помимо тех, которые заданы на глобальном уровне или на уровне источника данных, в версии Optim pureQuery Runtime Version 2.2 используются два новых файла свойств для Web-приложений (файлы свойств на уровне приложений).

В каком случае следует использовать этот вариант?

Определение свойств на уровне приложений имеет смысл в среде, использующей несколько приложений и несколько источников данных в конфигурации n:n.

Что для этого нужно сделать

Для настройки свойств pureQuery на уровне приложений необходимо изменить один или оба файла свойств:

Как указать пулу соединений, что вы используете pureQuery

Если для определения свойств приложения используются только файлы pdq.appwide.properties или pdq.dataSourceName.properties, укажите значение для параметра pdqProperties. Вы можете оставить значение по умолчанию (executionMode dynamic). После того, как вы в первый раз указали значение pdqProperties, необходимо перезапустить сервер приложений.

pdq.appwide.properties
Этот файл задает свойства pureQuery для конкретного приложения. Все значения свойств, указанные в файле pdq.appwide.properties, будут применяться ко всем источникам данных, которые использует приложение
pdq.dataSourceName.properties
Этот файл определяет свойства приложения по отношению к конкретному источнику данных. Это означает, что свойства приложения, определенные в этом файле, будут применяться только к одному конкретному источнику данных, который использует данное приложение. Строковое значение dataSourceName соответствует дополнительному свойству dataSourceName источника данных. Вы можете задать это свойство аналогично тому, как задается свойство pdqProperties (см. рисунок 4).

Синтаксис определения конкретных значений для свойств приложения выглядит точно так же, как определение свойств в файле pdq.properties (см. листинг 1).


Листинг 1. Формат задания значений свойств pureQuery
pdq.captureMode = ON pdq.executionMode = DYNAMIC
pdq.pureQueryXml = C:/PDQ_2.2/captureFiles/abc_pdq.xml

Чтобы задать свойства определенного приложения для работы с одним конкретным источником данных, используйте файл pdq.dataSourceName.properties.

Используя файлы свойств, описанные выше, вы сможете детально управлять оптимизацией клиента pureQuery на уровне приложений и источников данных.

Что при этом нужно иметь в виду

Использование JACL-скриптов

В пакет WebSphere Application Server входят JACL-скрипты, с помощью которых можно сбросить пул соединений, используя средства администрирования WebSphere Application Server. Подробную информацию о настройках пула соединений для сбрасывания соединения можно найти в материалах, указанных в разделе Ресурсы. Кроме того, в разделе Ресурсы приведены ссылки на статьи, содержащие подробное описание средств администрирования WebSphere Application Server, доступа к этим средствам, а также инструкции для создания скриптов JACL .

Если свойства приложения определяются файлами pdq.appwide.properties или pdq.dataSourceName.properties, то при изменении свойств приложения достаточно закрыть соединение, перезапуск сервера приложений не требуется.


Настройка свойств pureQuery на уровне приложения

Данный раздел содержит подробную информацию о том, каким образом свойства оптимизации клиента pureQuery уровня приложений обеспечивают гибкую настройку на уровне приложений и источников данных.

Где должны находиться файлы свойств при настройке параметров pureQuery на уровне приложения

Для того чтобы параметры настройки pureQuery, определенные в файле pdq.appwide.properties или pdq.dataSourceName.properties, использовались для оптимизации клиента, этот файл должен находиться как минимум в одной из перечисленных ниже директорий:

  • В директории WEB-INF/classes для Web-приложения
  • В директории WEB-INF/lib как .jar файл
  • Непосредственно в той директории, где установлено приложение

Два первых варианта используются в случае, если приложение включает в себя Web-модуль. Для EJB-приложений может использоваться любой из трех указанных выше вариантов. Предположим, например, что приложение TestClintOptEAR.ear установлено на WebSphere Application Server. В этом случае приложение будет установлено по следующему пути: <WAS_INSTALL_ROOT>/profiles/AppSrv01/installedApps/myNode01Cell/ TestClintOptEAR.ear, где AppSrv01 – имя профиля, а myNode01Cell – имя узла. Предположим, что приложение содержит Web-модуль TestClintOpt.war. Тогда файлы свойств pureQuery для этого приложения могут располагаться в следующих директориях:

Вариант 1. Сохраните файлы pdq.appwide.properties и/или pdq.dataSourceName.properties в директории TestClintOptEAR.ear/TestClintOpt.war/WEB-INF/classes.
Директория WEB-INF/classes существует только для Web-модулей, так что первый вариант имеет смысл только для приложений, включающих такие модули.

Вариант 2: Создайте .jar файл (например, prop.jar), который содержит в себе один из файлов pdq.appwide.properties или pdq.dataSourceName.properties properties или оба этих файла. Сохраните созданный jar-файл в директории TestClintOptEAR.ear/TestClintOpt.war/WEB-INF/lib.
WAR-модули могут использовать .jar-файлы свойств, хранящиеся непосредственно в директории WEB-INF/lib, так что в данном случае вам не надо добавлять созданный .jar-файл к путям поиска классов. Этот вариант может применяться только для приложений, использующих Web-модули, так как только в этом случае при установке приложения создается директория WEB-INF/lib.

Вариант 3: Создайте файл prop.jar, как указано в Варианте 2, и сохраните его в EAR директории <WAS_INSTALL_ROOT>/profiles/AppSrv01/installedApps/myNode01Cell/TestClintOptEAR.ear
Добавьте указание на prop.jar к файлу MANIFEST.MF, соответствующему всем модулям приложения, которые должны использовать свойства оптимизации pureQuery из файла prop.jar. Например, модифицируйте файл MANIFEST.MF, соответствующий модулю TestClintOpt.war: <WAS_INSTALL_ROOT>/profiles/AppSrv01/installedApps/myNode01Cell/TestClintOptEAR.ear/ TestClintOpt.war/META-INF/MANIFEST.MF. По умолчанию в файле MANIFEST.MF указывается только информация о версии файла. Кроме того, вам необходимо добавить файл prop.jar к путям поиска классов. При изменении файла MANIFEST.MF новая запись должна быть сделана на новой строке. Не забудьте добавить новую строку в конец файла, как показано в листинге 2.

Листинг 2. Файл MANIFEST.MF
Manifest-Version: 1.0
Class-Path: <path>/prop.jar

Такой способ использования файлов свойств может применяться для приложений любого вида.

Если необходимо задать свойства оптимизации на уровне приложения для программ, которые содержат Web-модули и модули EJB, то предпочтительнее использовать третий вариант, так как в этом случае вам достаточно создать одну копию файла свойств. Добавьте запись, соответствующую файлу prop.jar, во все файлы MANIFEST.MF, используемые приложением. Тогда для изменения свойств оптимизации вам достаточно будет изменить один файл. Если приложение использует только Web-модули, наиболее предпочтительным с точки зрения простоты и удобства является первый вариант.


Примерный сценарий использования файлов свойств

Порядок использования файлов свойств

Если файлы свойств находятся в нескольких местах, значения свойств определяются в следующем порядке:

  1. pureQuery проверяет, существует ли файл pdq.dataSourceName.properties.
  2. Если файл pdq.dataSourceName.properties отсутствует, pureQuery проверяет, существует ли файл pdq.appwide.properties.
  3. Если файлы pdq.dataSourceName.properties и pdq.appwide.properties не найдены, pureQuery проверяет, определены ли свойства оптимизации на уровне источника данных в файле pdq.properties.
  4. Если файлы, указанные в пунктах 1-3 не найдены, pureQuery будет использовать свойства, указанные в глобальном файле pdq.properties.
  5. Если настройки глобального уровня также не указаны, pureQuery будет использовать значения свойств, установленные по умолчанию.

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

В сложной Web-среде, использующей несколько приложений или несколько источников данных, для разных приложений может потребоваться использование различных настроек при обращении к различным источникам данных. Добиться правильного поведения приложения можно благодаря использованию свойств на уровне приложения. Если для приложения определены одновременно файлы pdq.appwide.properties и pdq.dataSourceName.properties, то используются значения свойств, заданные в этих двух файлах. Если одно и то же свойство определяется и в pdq.appwide.properties, и в pdq.dataSourceName.properties, то использоваться будет значение из pdq.dataSourceName.properties.

Следующий пример поясняет использование двух файлов свойств. В примере рассматриваются два приложения, использующие несколько источников данных, как показано на рисунке 5.


Рисунок 5. Исходный сценарий работы приложений
Рисунок 5. Исходный сценарий работы приложений

Приложение 1

Приложение 1 использует три источника данных, из которых DS1 и DS2 соответствуют двум различным базам данных DB2, а DS3 соответствует базе данных другого формата (Informix или любая другая СУБД, которая использует Data Server Driver for JDBC and SQLJ).


Таблица 2. Конфигурация баз данных Приложения 1
Имя базы данныхЗначение dataSourceNameИмя файла свойств
Database 1 (DB2)DS1pdq.ds1.properties
Database 2 (DB2)DS2pdq.ds2.properties
Database 3 (не DB2) DS3pdq.ds3.properties

Предположим, что администратор уже собрал все SQL-запросы к источнику данных DS2 и теперь должен перейти к статическому выполнению SQL-запросов при работе с этим источником данных. Сбор SQL-запросов к источнику данных DS1 еще не закончено. Что касается источника данных DS3, хотя статическое выполнение инструкций для этого источника невозможно, администратор хочет, чтобы выполнять можно было только собранные SQL-инструкции.

Так как администратор уже готов перейти к статическому выполнению запросов к DS2, он может изменить свойства captureMode и executionMode для этого источника, указав их новые значения в файле pdq.ds2.properties. Новые значения будут заданы соответственно как captureMode OFF и executionMode STATIC. Для того чтобы полностью запретить динамическое выполнение любых инструкций, нужно присвоить значение FALSE параметру allowDynamicSQL FALSE. Определение значений параметров captureMode и executionMode для источника данных DS2 показано в листинге 3.


Листинг 3. Значения параметров, указанные в файле pdq.ds2.properties
captureMode=OFF
executionMode=STATIC
pureQueryXml=app1_ds2.pdqxml

Поскольку сбор SQL-запросов к источнику данных DS1 еще не закончен, определение новых свойств для этого источника пока не требуется. Достаточно указать имя файла pureQueryXml, например: pureQueryXml=app1_ds1.pdqxml.

Чтобы предотвратить возможные SQL-инъекции при динамическом выполнении SQL-запросов к источнику данных DS3, администратор должен указать в файле pdq.ds3.properties значение TRUE для свойства captureMode и значение OFF для свойства capturedOnly, как показано в листинге 4:


Листинг 4. Значения параметров, указанные в файле pdq.ds3.properties
captureMode=OFF
capturedOnly=TRUE
pureQueryXml=app1_ds3.pdqxml

Приложение 2

Это приложение использует только один источник данных - DS1. Первоначально приложение выполняется только для определения и сбора SQL-запросов. После того, как все запросы собраны, администратору нужно запустить Приложение 2 так, чтобы использовался только статический SQL. Однако администратор вовсе не желает изменять приложение и переустанавливать его. Для того чтобы оба приложения работали в требуемом режиме, необходимо использовать файл pdq.dataSourceName.properties для переопределения свойств, заданных на уровне приложений.

Чтобы при обращении к источнику данных DS1 исходное приложение использовало статический SQL, необходимо переопределить свойства captureMode и executionMode, задав их новые значения в файле pdq.ds1.properties. Листинг 5 демонстрирует настройки файла pdq.ds1.properties для Приложения 2.


Листинг 5. Значения параметров, указанные в файле pdq.ds1.properties
captureMode=OFF
executionMode=STATIC
pureQueryXml=app2_ds1.pdqxml

На стороне DS1 вы можете установить различные свойства для разных приложений, используя соответствующий файл pdq.appwide.properties для каждого из приложений.

Окончательный вид конфигурации

Окончательный вид конфигурации использует два файла pdq.ds1.properties и два файла pdq.appwide.properties. Поскольку эти файлы находятся в разных директориях, соответствующих различным приложениям, каждый из указанных файлов применяется только к одному конкретному приложению.

В таблице 3 перечислены файлы и свойства, определенные для Приложения 1.


Таблица 3. Файлы и свойства Приложения 1
Имя файлаЗаданные свойстваИсточник данных, при работе с которым используются указанные свойства
pdq.appwide.propertiescaptureMode = ON
executionMode = DYNAMIC
DS1, DS2, DS3
pdq.ds1.propertiespureQueryXml = app1_ds1.pdqxmlDS1
pdq.ds2.propertiescaptureMode = OFF
executionMode = STATIC
pureQueryXml = app1_ds2.pdqxml
DS2
pdq.ds3.propertiescaptureMode = OFF
captureOnly = TRUE
pureQueryXml = app1_ds3.pdqxml
DS3

Файлы и свойства Приложения 2 приведены в таблице 4


Таблица 4. Файлы и свойства Приложения 2
Имя файлаЗаданные свойстваИсточник данных, при работе с которым используются указанные свойства
pdq.appwide.propertiescaptureMode = ON
executionMode = DYNAMIC
DS1, DS2, DS3
pdq.ds1.propertiescaptureMode = OFF
executionMode = STATIC
pureQueryXml = app2_ds1.pdqxml
DS1

При подключении к базе данных DB1 источник данных DS1 использует файл app1.ds1.pdqxml (для Приложения 1) и файл app2.ds1.pdqxml (для Приложения 2). При подключении к базе данных DB2 источник данных DS2 использует файл app1.ds2.pdqxml (для Приложения 1). При подключении к базе данных DB3 источник данных DS3 использует файл app1.ds3.pdqxml (для Приложения 1).

Схема работы такой конфигурации показана на Рисунке 6.


Рисунок 6. Окончательный вид конфигурации после настроек свойств оптимизации
Рисунок 6. Окончательный вид конфигурации после настроек свойств оптимизации

Заключение

В статье представлен краткий обзор процесса оптимизации клиента pureQuery и преимуществ, которые такая оптимизация предоставляет, не требуя при этом модификации кода приложений, в частности, с точки зрения перехода к статическому исполнению SQL-запросов к базам данных DB2 для любых Java-приложений. Статья включает в себя определения различных уровней настройки оптимизации (глобальный уровень, уровень источников данных и уровень приложений). Следуя инструкциям, изложенным в статье, вы сможете установить нужный вам уровень оптимизации клиента (включая как этап определения SQL-запросов, так и этап их выполнения) в среде, использующей Web-сервер с одним узлом, в которой несколько приложений работают с различными источниками данных.

Вторая статья этой серии будет посвящена рассмотрению следующего уровня сложности рабочей среды. В ней мы расскажем об использовании файлов свойств для поддержки приложений или источников данных в среде с несколькими Web-серверами или с кластером Web-серверов.

Благодарности

Авторы выражают свою искреннюю признательность Кристоферу Фаррару (Christopher M Farrar), Катрин Зейденштайн (Kathryn Zeidenstein) и Патрику Титцлеру (Patrick Titzler) за участие в отборе и редактировании материалов для данной статьи.


Ресурсы

Научиться

Получить продукты и технологии

  • На страничке ознакомительных и бесплатных продуктов Data Studio и Optim можно загрузить пробные версии продуктов, включая Optim Development Studio с лицензией, дающей право на использование среды Optim Development Studio и pureQuery Runtime для разработки приложений на одном компьютере в течение 30 дней. (EN)

  • Используйте в вашем следующем программном проекте ознакомительные версии ПО IBM, которые можно скачать непосредственно с сайта developerWorks.

Обсудить

Об авторах

Чарул Капил (Charul Kapil) инженер-программист, IBM В течение последних трех лет Чарул Капил работает в IBM India Software Labs в качестве инженера-программиста. В настоящее время она входит в команду OPM-Reporting QA, а до этого работала в команде pureQuery Client Optimization QA.

Джейджит Чакраворти – инженер-программист IBM. Он работает в IBM Silicon Valley Lab в Сан-Хосе, штат Калифорния. Джейджит занимается разработкой драйвера Java Common Client JDBC, SQLJ, и клиентских продуктов pureQuery. Помимо разработки программных продуктов Джейджит участвует в глобальной программе технической поддержи клиентов IBM.

Манодж Сардана - инженер-программист IBM. В течение последних пяти лет он работает в качестве инженера-программиста в IBM India Software Labs. Он обладает сертификатами IBM Certified Advanced Administrator и Application Developer for DB2 Linux, UNIX, and Windows. Манодж имеет степень бакалавра по вычислительной технике университета NITK Surathkal. В свободное время он любит слушать музыку и играть с детьми.

Помощь по сообщениям о нарушениях

Сообщение о нарушениях

Спасибо. Эта запись была помечена для модератора.


Помощь по сообщениям о нарушениях

Сообщение о нарушениях

Сообщение о нарушении не было отправлено. Попробуйте, пожалуйста, позже.


developerWorks: вход


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


При первом входе в developerWorks для Вас будет создан профиль. Выберите информацию отображаемую в Вашем профиле — скрыть или отобразить поля можно в любой момент.

Выберите ваше отображаемое имя

При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

(Должно содержать от 3 до 31 символа.)


Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Оценить эту статью

Комментарии

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Information Management, Технология Java
ArticleID=514022
ArticleTitle=Оптимизация клиента pureQuery в среде Web-приложений: Часть 1. Оптимизация приложений на одном серверном узле
publish-date=08312010
author1-email=chakapil@in.ibm.com
author1-email-cc=
author2-email=jaijeet@us.ibm.com
author2-email-cc=
author3-email=msardana@in.ibm.com
author3-email-cc=

Теги

Help
Используйте форму поиска, чтобы найти любой контент с данным тегом в My developerWorks. Используйте ползунок, чтобы отразить больше или меньше тегов.

КнопкаПопулярные теги отображает самые распространенные теги для данной области контента (например: Java, Linux, WebSphere).

Кнопка Мои теги отображает Ваши теги для данной области контента (например: Java, Linux, WebSphere).

Используйте форму поиска, чтобы найти любой контент с данным тегом в My developerWorks. Кнопка Популярные теги отображает самые распространенные теги для данной области контента (например: Java, Linux, WebSphere). Кнопка Мои теги отображает Ваши теги для данной области контента (например: Java, Linux, WebSphere).