Настройка программы Informix Dynamic Server для работы с WebSphere Application Server

WebSphere® Application Server (сервер приложений) - это высокопроизводительный сервер транзакций, который обеспечивает высокомасштабируемый механизм, способный управлять массовыми защищенными транзакциями и web-сервисами. Серверы приложений относятся к классу промежуточного программного обеспечения, которое оперирует функциями приложений между пользователями и серверными приложениями и базами данных предприятия. Informix® Dynamic Server (IDS) - это расширяемый сервер объектно-реляционных баз данных, который поддерживает вычисления по требованию, технологию WebSphere, а также приложения для управления информационными ресурсами OLTP и OLAP, написанные на языках SQL, Dynamic SQL, C++ и Java™. IDS рекомендуется использовать в качестве серверного ресурса для сервера приложений Application Server.

Anju Sudhakar, Quality Assurance Engineer, IBM

Anju Sudhakar is a Quality Assurance Engineer who has worked on Informix Dynamic Server for over 7 years. Anju works in the interoperability testing of Informix Dynamic Server against WebSphere Application Server and migration testing of various source databases to IBM databases (including DB2 and IDS).



16.02.2006

Установка сервера приложений Application Server и IDS

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

Установка программы WebSphere Application Server

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

  • Установка WebSphere Application Server на одну систему;
  • Установка WebSphere Application Server и web-сервера на одну систему;
  • Установка WebSphere Application Server и web-сервера на две системы;
  • Создание нескольких конфигурационных профилей, которые используют одну установку WebSphere Application Server.

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

Для начала установки компонентов программного пакета WebSphere Application Server запустите панель вызова компонентов WebSphere Launchpad. Эта программа находится в корневом каталоге компакт-диска с дистрибутивом и называется launchpad.bat или launchpad.sh. После запуска панели вы можете выбрать следующие компоненты установки:

  • WebSphere Application Server;
  • IBM HTTP Server;
  • Web Server Plug-In;
  • Application Client;
  • Комплект инструментов Application Server toolkit.

Установка Informix Dynamic Server

Программа Informix Dynamic Server for Windows® включает панель вызова компонентов дистрибутива Informix Dynamic Server, при помощи которой можно просмотреть документацию или информацию по версии, установить IDS или перейти к обзору содержимого компакт-диска.


Настройка конфигурации

В этом разделе описываются шаги, которые необходимо выполнить для создания поставщика JDBC™ для IDS в среде WebSphere и настройки источника данных посредством добавления и изменения значений в окне Custom Properties источника данных.

Создание поставщиков JDBC

Для создания поставщиков JDBC для IDS вы можете воспользоваться консолью WebSphere Administrative Console. В этой статье рассматриваются два типа реализации: XA data source и Connection Pool data source.

  • Для поставщиков JDBC XA data source определите имя класса реализации com.informix.jdbcx.IfxXADataSource. Создайте также следующие значения переменной CLASSPATH, где ${INFORMIX_JDBC_DRIVER_PATH} это путь установки драйвера JDBC в вашей системе. Файл ifxsqlj.jar необходим при использовании SQLJ с WebSphere Application Server.
    ${INFORMIX_JDBC_DRIVER_PATH}/ifxsqlj.jar
    ${INFORMIX_JDBC_DRIVER_PATH}/ifxjdbc.jar
    ${INFORMIX_JDBC_DRIVER_PATH}/ifxjdbcx.jar
  • Для источников данных Connection Pool data source определите имя класса реализации com.informix.jdbcx.IfxConnectionPoolDataSource. Создайте также следующие значения переменной CLASSPATH:
    ${INFORMIX_JDBC_DRIVER_PATH}/ifxjdbc.jar
    ${INFORMIX_JDBC_DRIVER_PATH}/ifxjdbcx.jar

Настройка переменных окружения Informix в Application Server

В зависимости от потребностей приложения, вы можете создать источник данных в любом из двух поставщиков JDBC, описанных в предыдущем разделе. После создания источника данных можно воспользоваться ссылкой Custom Property в консоли администрирования Application Server Administrative Console для добавления или изменения параметров среды, необходимых для работы Informix Dynamic Server. Перейти к ссылке Custom properties можно через Resource -> JDBC Provider -> JDBC provider Name (XA или Connection Pool) -> Имя источника данных, используемое приложением.

Вы можете также создать новые параметры среды, необходимые для работы Informix Dynamic Server, при помощи кнопки New в Custom Properties. Чтобы изменить существующие параметры, нажмите имя параметра и введите нужное значение. Нажмите кнопку Apply для немедленного изменения локальной конфигурации.. Нажмите кнопку Save в верхней части страницы (в окне сообщения), чтобы сохранить изменения в шаблоне конфигурации. Возможно, потребуется перезапуск сервера приложений, чтобы изменения начали действовать.


Решение проблем

В этом разделе описываются распространенные проблемы и приводятся способы их решения. Описываются также проблемы с транзакциями XA и общие ошибки, с которыми вы можете столкнуться, используя IDS с сервером приложений Application Server.

Проблемы, связанные с транзакциями XA

Обе проблемы имеют одинаковое решение.

  • Симптом: исключительная ситуация SQL из-за того, что в IDS не разрешены тесно связанные транзакции.

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

    • java.sql.SQLException: ISAM error: The record is locked;
    • java.sql.SQLException: Could not do a physical-order read to fetch next row.

    Сообщение ISAM может несколько отличаться от приведенного в зависимости от того, установлен ли параметр SET LOCK MODE TO WAIT [seconds]. Если выбрана настройка SET LOCK MODE NOT WAIT, то сообщение будет следующим: ISAM error: record is locked. При установке SET LOCK MODE TO WAIT [seconds], приложение ждет в течение установленного времени, а затем обрабатывает исключительную ситуацию: ISAM error: Lock Timeout Expired.

  • Симптом: сообщение об ошибке "Could not do a physical-order read to fetch next row" в журнале SystemOut.log сервера приложений Application Server.

    Если несколько пользователей или клиентов осуществляют доступ к одной базе данных Informix database, выполняя параллельные транзакции XA, вы можете обнаружить в файле журнала сервера приложений Application Server SystemOut.log следующее сообщение об ошибке:

    Caused by: java.sql.SQLException: 
    Could not do a physical-order read to fetch next row.
    DSRA0010E: SQL State = IX000, Error Code = -244
    at com.informix.jdbc.IfxSqli.a (IfxSqli.java (Compiled Code))
    at com.informix.jdbc.IfxSqli.E (IfxSqli.java(Compiled Code))

Решение: возможно, придется настроить IDS и установить некоторые переменные окружения Informix в пользовательских атрибутах Application Server. Настройке подлежат следующие параметры конфигурации Informix:

DISABLE_B162428_XA_FIX:

  • 0 (значение по умолчанию): разблокирует транзакцию только после вызова отката XA.
  • 1: разблокирует транзакцию, если откат выполняется методом, отличным от XA. Вступает в действие только после отключения и перезапуска сервера базы данных.

В соответствии со спецификацией XA/Open, если откат транзакции сервером выполняется иначе, чем откат XA клиентом, то XID является "not forgotten", а статус транзакции определяется как "откат". Такая реакция установлена по умолчанию в Informix Dynamic Server, Version 10.0. Для возврата к реакции в предыдущей версии установите следующие значения параметра ONCONFIG для IDS:

Установите значение параметра DISABLE_B162428_XA_FIX на 1 для немедленного разблокирования всех глобальных транзакций после отката транзакции; это настройка по умолчанию для Dynamic Server V9.40 и более ранних версий программы. Реакция Dynamic Server 10.0 по умолчанию - это разблокирование глобальных транзакций после вызова xa_rollback; именно такая реакция рекомендуется, чтобы передать подтверждение возможности разблокирования транзакции только после вызова xa_rollback в таблицу состояния XA. Установка значения DISABLE_B162428_XA_FIX на 1 обеспечивает корректную работу приложений, написанных для более ранних версий Dynamic server.

Для Informix Dynamic Server Version 9.40 параметр ONCONFIG ENABLE_B162428_XA_FIX устанавливается на 1 для определения реакции, совместимой с XA_SPEC+.

Вы можете отменить параметр конфигурации DISABLE_B162428_XA_FIX сервера для клиентского сеанса при помощи переменной окружения IFX_XASTDCOMPLIANCE_XAEND. Переменная окружения может быть особенно полезна в том случае, если для экземпляра сервера отключена возможность изменения реакции при помощи параметра ONCONFIG, но один из клиентов требует такого изменения. Реакция XA_END на возврат XA_RB* определяется параметром IFX_XASTDCOMPLIANCE_XAEND. Он может принимать следующие значения:

IFX_XASTDCOMPLIANCE_XAEND

  • 1: статус XID "not forgotten". Статус транзакции "Rollback-only". Такая реакция совместима с XA_SPEC+ и установлена по умолчанию в IDS 10.0.
  • 0: статус XID "forgotten". Статус транзакции - "Nonexistent". Это реакция по умолчанию в IDS V9.40.

В настраиваемых атрибутах сервера приложений Application Server необходимо установить следующие переменные окружения Informiх:

  • Включите переменную IFX_XASPEC.

    Активация этой переменной обеспечивает тесную связь транзакций XA в пределах одного идентификатора глобальной транзакции и позволяет транзакциям совместно использовать пространство изоляции. IFX_XASPEC применяется только к соединениям XA и не может быть определена в URL базы данных; ее можно определить источником данных или параметрами системных атрибутов (виртуальной Java-машины) с тем же именем. Атрибут источника данных отменяет системный атрибут. Любые значения атрибутов, отличные от y, Y, n или N, игнорируются. IfxDataSource.getIfxIFX_XASPEC возвращает окончательное значение IFX_SPEC, которое может быть y или n. Например, если значение источника данных IFX_XASPEC равно n, а системное значение IFX_XASPEC равно Y или y, то возвращается n.

    Установка этого параметра через пользовательские атрибуты сервера приложений Application Server:

    1. Войдите в систему консоли администрирования Application Server Administrative Console.
    2. Создайте для источника данных Informix XA data source новый пользовательский атрибут ifxIFX_XASPEC и присвойте ему значение Y или y. Это значение не является логическим, и ваша установка для атрибута отменит системные настройки базы данных.
  • Выберите более высокое значение атрибута Informix Lock Mode Wait для источника данных.

    Это не является обязательным, но позволяет настроить Informix dynamic server на ожидание блокировки в течение нескольких секунд. По умолчанию Dynamic Server обрабатывает исключительную ситуацию, если не может немедленно получить блокировку. Параметр Informix Lock Mode Wait может быть установлен на 1000 секунд.

Вы можете попробовать выполнить следующие шаги по настройке:

  • Выполните команду UPDATE STATISTICS HIGH в отношении базы данных. Эта команда обновляет статистические данные в системном каталоге, который используется подсистемой оптимизации для определения наименее ресурсоемкого плана запроса.
  • Если предполагается, что изменять отдельные записи будет несколько транзакций, измените режим для данной таблицы на row locking при помощи предложения SQL:
    ALTER TABLE [table name] LOCK MODE (ROW).
  • Создайте индексы для столбца, который запрашивает или изменяет ваше приложение.

Программы с обновлениями:

  • Informix Dynamic Server, Version 9.40.UC6;
  • Informix Dynamic Server, Version 10.00.UC1;
  • 3.00. Драйвер JC1 JDBC.
  • Симптом: настройки изоляции транзакции Informix для сеанса не распространяются на глобальные транзакции XA.

    Вы увидите следующее сообщение об исключительной ситуации:

    A SQLException "Could not position within a table" with a nested 
    SQLException "Lock Timeout Expired" thrown.

    Эта исключительная ситуация обусловлена тем, что при завершении транзакции XA IDS возвращает настройки изоляции базы данных к параметрам по умолчанию. Изменения происходят в базе данных, поэтому WebSphere не получает информацию об изменениях и не может сбросить уровень изоляции транзакции при следующем восстановлении соединения из пула. Вследствие этого соединение и IDS оказываются несогласованными.

    Сброс настроек изоляции транзакции может быть различным в зависимости от типа журналирования базы данных Informix:

    Тип журналированияИзоляция транзакции по умолчанию
    База данных без ведения журнала транзакцийRead uncommitted (чтение незавершенных данных)
    База данных с ведением журнала в формате, не совместимым с ANSIRead committed (чтение завершенных данных)
    База данных с журналированием в формате, совместимым с ANSISerializable (упорядочивание)

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

    Решение: для разрешения тесно связанных транзакций XA в Informix Dynamic Server, воспользуйтесь решением для Симптома: разрешение тесно связанных транзакций XA в Informix Dinamic Server. После исправления кода программы значения для уровня изоляции и режима блокировки настраиваются на уровне завершенного соединения. Настройки на уровне завершенного соединения разрешают распространение значений, установленных в локальной среде для всех транзакций. Если значение изменяется в пределах транзакции, то это измененное значение распространяется обратно на локальную среду и на все последующие (новые и продолжающиеся) транзакции.

    Версии с исправлением ошибки:

    • 9.40. UC7W1 и более поздние версии Informix Dynamic Server;
    • 10.00. UC3W4 и более поздние версии Informix Dynamic Server;
    • 3.00. Драйвер JC3 JDBC.

Прочие проблемы

  • Симптом: сообщение "Null Pointer Exception on BLOB/SMARTBLOB column" in the SystemOut.log of Application Server.

    Исключительная ситуация "пустой указатель" возвращается в файл журнала сервера приложений SystemOut.log, если IfxBblob или IfxCblob были созданы при помощи упорядоченного объекта и переданы на сервер.

    Решение: не используйте IfxBblob (inputStream), IfxCblob (inputStream), IfxCblob (inputStream) or IfxCblob (locator) для обращения к серверу. Он выполняется как MODE_CLIENT_ONLY.

  • Симптом: механизм сообщений сервера приложений не может запуститься из-за проблем с драйвером Informix JDBC Driver 3.00JC1.

    Если механизм сообщений использует драйвер Informix JDBC driver 3.00JC1 для хранения своих данных, он не сможет запуститься. В файле журнала сервера приложений SystemOut.log вы найдете следующее сообщение:

    […..] CWSIS0002E: The messaging engine 
    encountered an exception while starting. 
    Exception: com.ibm.ws.sib.msgstore.
    PersistenceException: CWSIS1501E: 
    The dataSource has produced an 
    unexpected exception: java.sql.BatchUpdateException: 
    Unique Constraint (informix.u114_62) violated.

    Решение: обновите версию драйвера Informix JDBC Driver до 3.00JC2

  • Симптом: при попытке доступа к модулям, созданным EJB™ -компонентами, в файле журнала WAS SystemOut.log появляется сообщение ApplicationNotFindException.

    Если объект (CMP) получает строковое значение из таблицы, то в результирующее множество вставляются пробелы, которые могут вызвать ошибку ApplicationNotFindException.

    Например: в базе данных event Informix может быть сохранено несостоявшееся событие, пусть его Destination_module_name будет HelloWorldWithBO (16 символов). Для получения дополнительных сведений об этом несостоявшемся событии вызывается команда FailedEventManagerEJBBean.getFailedEventWithParameters, выполняющая следующий код:

    loadClassContext (fel.getDestination_module_name ());
    	fel.getDestination_module_name () returns:
    	 "HelloWorldWithBO                                       " (255 characters),
    	  instead of "HelloWorldWithBO" (16 characters).

    Поэтому модуль не может быть найден, и обрабатывается исключительная ситуация ApplicationNotFindException.

    Решение: схема DDL, генерируемая компонентами EJB, по умолчанию использует в столбце тип данных CHARACTER. В приведенном примере Destination_Module_Name определен как CHARACTER (255).

    Вместо CHAR следует использовать VARCHAR или LVARCHAR.

    • CHAR хранит однобайтовые или многобайтовые текстовые строки фиксированной длины (до 32,767 байт); поддерживает сопоставление порядка кодового набора текстовых данных. Размер по умолчанию 1 байт;
    • VARCHAR хранит однобайтовые или многобайтовые текстовые строки фиксированной длины (до 255 байт); поддерживает сопоставление порядка кодового набора текстовых данных;
    • LVARCHAR (IDS) хранит однобайтовые или многобайтовые текстовые строки переменной длины (до 32,739 байт). Размер другого столбца в одной и той же таблице может дополнительно понизить верхнюю границу. Размер по умолчанию 2,048 байт.
  • Симптом: невозможно соединиться с компьютером, на котором запущена база данных, используя адрес localhost, если Informix Dynamic Server установлен локально.

    Если вы установили IDS и сервер приложений Application Server локально, то не удается установить соединение при использовании локальной рабочей станции. Та же проблема наблюдается при настройке параметров источника данных в Application Server.

    Решение:

    • В операционной системе Windows используйте параметр *[hostname] в таблице информации о сервере утилиты setnet32, чтобы получить и IP address 127.0.0.1, и localhost для работы с соединениями Informix;
    • В среде операционной системы Solaris для решения проблемы localhost используйте параметр ONCONFIG "DATABASESERVERALIASES". Пример: путем редактирования файла IDS ONCONFIG присвойте параметру DATABASESERVERALIASES значение patriot1_local и добавьте следующую строку в $INFORMIXSQLHOSTS ($INFORMIXDIR/etc/sqlhosts):
      patriot1_local 	ontlitcp	 127.0.0.1	 18551
  • Симптом: драйвер Informix 2.21.JCX JDBC driver возвращает некорректное значение стабильности.

    Драйвер Informix 2.21.JCX JDBC driver возвращает некорректное значение стабильности. Это обязательно для сервера Application Server V6.0.

    Решение: данная ошибка исправлена в более поздней версии драйвера Informix JDBC. Используйте драйвер 3.00 JC1 JDBС.

  • Симптом: команда metadata gettables не выполняется для баз данных ANSI.

    Informix Dynamic Server для баз данных ANSI переводит имя владельца схемы в верхний регистр, а драйвер JDBC переводит имя владельца схемы в нижний регистр. Поэтому getTables(...) в некоторых случаях дает сбой.

    Решение: данная ошибка исправлена в более поздней версии драйвера Informix JDBC. Используйте драйвер JC1 JDBC версии 3.00.

Ресурсы

Комментарии

developerWorks: Войти

Обязательные поля отмечены звездочкой (*).


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


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

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

 


Профиль создается, когда вы первый раз заходите в developerWorks. Информация в вашем профиле (имя, страна / регион, название компании) отображается для всех пользователей и будет сопровождать любой опубликованный вами контент пока вы специально не укажите скрыть название вашей компании. Вы можете обновить ваш IBM аккаунт в любое время.

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

Выберите имя, которое будет отображаться на экране



При первом входе в 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, WebSphere
ArticleID=172473
ArticleTitle=Настройка программы Informix Dynamic Server для работы с WebSphere Application Server
publish-date=02162006