powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / DSRA8650W: Ошибка при закрытии дочернего заменителя JDBC
17 сообщений из 17, страница 1 из 1
DSRA8650W: Ошибка при закрытии дочернего заменителя JDBC
    #38170653
Semen Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте всем!

J2EE-приложение было развернуто на сервере (Linux) с WSAS 6 и DB2 8.2, и функционировало без проблем. Выполнил миграцию приложения и базы данных на сервер с ОС Windows, WSAS 7, DB2 9.7. Миграцию приложения делал через экспорт из консоли WSAS 6, а затем установку в консоли WSAS 7. С базой пришлось повозиться (db2look, db2move).

Теперь на новом сервере приложение запускается и нормально работает - извлечение данных из базы, изменение данных, отчеты. И все хорошо, пока не запускаю один из отчетов. При формировании этого отчета приложение вызывает хранимую процедуру. На сервере приложений происходит ошибка " DSRA8650W: Ошибка при закрытии дочернего заменителя JDBC ", а далее я уже ни с каким из режимов приложения работать не могу. Возникает постоянная ошибка " com.ibm.db2.jcc.b.SqlException: DB2 SQL Error: SQLCODE=-805, SQLSTATE=51002, SQLERRMC=NULLID.SYSLN303 0X5359534C564C3031, DRIVER=3.50.152 ". systemOut.log сервера WSAS прикладываю.

Причем, если подсоединиться к базе в обход WSAS с пользователем, под которым работает приложение, например из процессора командной строки DB2, то с данными можно работать без проблем. А приложение не хочет, пока не перегружу профиль WSAS. И так до следующего запуска этого отчета. Интересно, что может натворить вызов ХП из приложения?

Из ошибки "SQLCODE=-805, SQLSTATE=51002" понял, что какой-то пакет не был связан или отброшен. Похоже, что не совсем корректно прошла миграция базы. Может, Mark Barinstein что-нибудь подскажет по этому поводу?

С уважением, Семен Попов
...
Рейтинг: 0 / 0
DSRA8650W: Ошибка при закрытии дочернего заменителя JDBC
    #38170720
Semen Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Semen Popov...
При формировании этого отчета приложение вызывает хранимую процедуру.
...


Наврал. Выполняется обычный select. Но почему он вводит в ступор приложение?
...
Рейтинг: 0 / 0
DSRA8650W: Ошибка при закрытии дочернего заменителя JDBC
    #38170772
Semen Popov,

1. Непонятная версия драйвера JDBC. 3.50.152 - это от v9.5 FP0(GA).
Т.е. ни 8.2, ни 9.7. Проверить, откуда он взялся и заменить.
Желательно вообще пересоздать пул соединений на сервере приложений, задействовав драйвер от текущей версии.
Если WAS и DB2 на одной машине, желательно настроить Type2 соединение.

Отсутствующие пакеты JDBC-драйвера можно дополнить следующим образом:
java -Duser.language=en -classpath db2jcc.jar com.ibm.db2.jcc.DB2Binder -url "jdbc:db2://<IP-сервера>:<порт>/<имя базы>" -user <имя пользователя> -password <пароль пользователя> -action replace

Вторая странность, что понадобился пакет SYSLN303.
По умолчанию (size=3) создаются пакеты SYSLN300, SYSLN301, SYSLN302.
Обычно это означает, что открыто большое количество курсоров одновременно, что бывает при рекурсии, зацикливании или программной ошибке. Можно попробовать выполнить провязку пакетов JDBC указав больший размер (Напр. -size 5), если потребует пакет SYSLN305, то скорее всего это ошибка.

Для WAS7 и выше рекомендую создать новый провайдер, используя провайдер "DB2 Using IBM JCC Driver". Указать в нем (переменные DB2_JCC_DRIVER_PATH и DB2_JCC_DRIVER_NATIVEPATH) пути к драйверу и двоичным библиотекам текущей версии.
Пример: C:\IBM\SQLLIB\java и C:\IBM\SQLLIB\BIN.
Сохранить провайдер и, на основе этого провайдера создать пул соединений, указав в параметрах тип 2 и имя нужной базы.
...
Рейтинг: 0 / 0
DSRA8650W: Ошибка при закрытии дочернего заменителя JDBC
    #38170854
Semen Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Действительно, по пути AppServer\lib\ext лежали файлы устаревшего драйвера. Приложение и база разнесены по разным серверам. На обоих серверах установлена DB2 WSE 9.7.4. И когда я устанавливал приложение, то создал отдельный провайдер "DB2 Universal JDBC Driver Provider" (не тот, который вы рекомендуете), и проинициализировал нужные для провайдера переменные WSAS значением "C:\Program Files\IBM\SQLLIB\java". Почему использовался старый драйвер (из AppServer\lib\ext), когда были заданы конкретные пути - не знаю. Теперь вроде используется новый. И сейчас даже после ошибки в отчете могу дальше работать с другими режимами приложения. Но ошибка отчета осталась.

Прикладываю все логи, чтобы картина была полнее.
...
Рейтинг: 0 / 0
DSRA8650W: Ошибка при закрытии дочернего заменителя JDBC
    #38170863
Semen Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Логи забыл
...
Рейтинг: 0 / 0
DSRA8650W: Ошибка при закрытии дочернего заменителя JDBC
    #38170933
Semen Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Евгений ХабаровОтсутствующие пакеты JDBC-драйвера можно дополнить следующим образом:
java -Duser.language=en -classpath db2jcc.jar com.ibm.db2.jcc.DB2Binder -url "jdbc:db2://<IP-сервера>:<порт>/<имя базы>" -user <имя пользователя> -password <пароль пользователя> -action replace


Попробовал выполнить и получил результат:

Код: plaintext
1.
2.
3.
4.
5.
6.
Исключительная ситуация в нити "main" # START NON-TRANSLATABLEjava.lang.NoClassDefFoundError: com.ibm.db2.jcc.DB2Binder
Caused by: java.lang.ClassNotFoundException: com.ibm.db2.jcc.DB2Binder
        at java.net.URLClassLoader.findClass(URLClassLoader.java:434)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:660)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:358)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:626)
Could not find the main class: com.ibm.db2.jcc.DB2Binder.  Program will exit.
...
Рейтинг: 0 / 0
DSRA8650W: Ошибка при закрытии дочернего заменителя JDBC
    #38170969
Semen Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Semen Popov...
Почему использовался старый драйвер (из AppServer\lib\ext), когда были заданы конкретные пути - не знаю. Теперь вроде используется новый.
...

Кажется я догадываюсь, почему драйвер использовался из AppServer\lib\ext. Провайдер и источники данных созданы в области "Узел, Сервер", а переменные проинициализированы в области "Узел". Получается, что переменные не были видны. Я правильно понимаю, что и переменные надо было инициализировать в области "Узел, Сервер"?
...
Рейтинг: 0 / 0
DSRA8650W: Ошибка при закрытии дочернего заменителя JDBC
    #38171116
Semen PopovЕвгений ХабаровОтсутствующие пакеты JDBC-драйвера можно дополнить следующим образом:
java -Duser.language=en -classpath db2jcc.jar com.ibm.db2.jcc.DB2Binder -url "jdbc:db2://<IP-сервера>:<порт>/<имя базы>" -user <имя пользователя> -password <пароль пользователя> -action replace


Попробовал выполнить и получил результат:

Код: plaintext
1.
2.
3.
4.
5.
6.
Исключительная ситуация в нити "main" # START NON-TRANSLATABLEjava.lang.NoClassDefFoundError: com.ibm.db2.jcc.DB2Binder
Caused by: java.lang.ClassNotFoundException: com.ibm.db2.jcc.DB2Binder
        at java.net.URLClassLoader.findClass(URLClassLoader.java:434)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:660)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:358)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:626)
Could not find the main class: com.ibm.db2.jcc.DB2Binder.  Program will exit.

Архив db2jcc.jar должен быть доступен в каталоге, из которого запускается команда, или же нужно указать полный путь к db2jcc.jar в опции -classpath
...
Рейтинг: 0 / 0
DSRA8650W: Ошибка при закрытии дочернего заменителя JDBC
    #38171125
Semen PopovSemen Popov...
Почему использовался старый драйвер (из AppServer\lib\ext), когда были заданы конкретные пути - не знаю. Теперь вроде используется новый.
...

Кажется я догадываюсь, почему драйвер использовался из AppServer\lib\ext. Провайдер и источники данных созданы в области "Узел, Сервер", а переменные проинициализированы в области "Узел". Получается, что переменные не были видны. Я правильно понимаю, что и переменные надо было инициализировать в области "Узел, Сервер"?
lib\ext является более приоритетным (идет в classpath раньше), нежели пути, указанные в настройках провайдера. Это кроме случая, когда провайдер создается с собственным(изолированным) Classloader-ом.
...
Рейтинг: 0 / 0
DSRA8650W: Ошибка при закрытии дочернего заменителя JDBC
    #38171235
mustaccio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQLCODE -805 может свидетельствовать о том, что приложение держит слишком много открытых курсоров, например, не закрывает ResultSet или не вызывает фиксацию (commit) достаточно часто.

Если вам реально нужно держать столько открытых курсоров, см. здесь (common problems, case 2) http://www.ibm.com/developerworks/data/library/techarticle/dm-0606chun/index.html#N10AB6
...
Рейтинг: 0 / 0
DSRA8650W: Ошибка при закрытии дочернего заменителя JDBC
    #38171247
Semen Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Евгений ХабаровАрхив db2jcc.jar должен быть доступен в каталоге, из которого запускается команда, или же нужно указать полный путь к db2jcc.jar в опции -classpath
Выдало для 49 пакетов:

Код: plaintext
Package "...": Bind succeeded.

Но SYSLN303 среди них не оказалось. Это нормально?
...
Рейтинг: 0 / 0
DSRA8650W: Ошибка при закрытии дочернего заменителя JDBC
    #38171257
Semen Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mustaccioSQLCODE -805 может свидетельствовать о том, что приложение держит слишком много открытых курсоров, например, не закрывает ResultSet или не вызывает фиксацию (commit) достаточно часто.
...

Спасибо. Странно, но почему же на старом сервере этот отчет работает?
...
Рейтинг: 0 / 0
DSRA8650W: Ошибка при закрытии дочернего заменителя JDBC
    #38171275
Semen PopovЕвгений ХабаровАрхив db2jcc.jar должен быть доступен в каталоге, из которого запускается команда, или же нужно указать полный путь к db2jcc.jar в опции -classpath
Выдало для 49 пакетов:

Код: plaintext
Package "...": Bind succeeded.

Но SYSLN303 среди них не оказалось. Это нормально?
Да, это нормально.
Цитирую собственный абзац.
Евгений ХабаровПо умолчанию (size=3) создаются пакеты SYSLN300, SYSLN301, SYSLN302.
Обычно это означает, что открыто большое количество курсоров одновременно, что бывает при рекурсии, зацикливании или программной ошибке.
Можно попробовать выполнить провязку пакетов JDBC, указав больший размер (Напр. -size 5), если потребует пакет SYSLN305, то скорее всего это ошибка.
Т.е. если выполнить Binder с доп. ключем -size 5, то будут пакеты SYSLN300-SYSLN304.
java -Duser.language=en -classpath db2jcc.jar com.ibm.db2.jcc.DB2Binder -url "jdbc:db2://<IP-сервера>:<порт>/<имя базы>" -user <имя пользователя> -password <пароль пользователя> -size 5
...
Рейтинг: 0 / 0
DSRA8650W: Ошибка при закрытии дочернего заменителя JDBC
    #38172929
Semen Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Евгений Хабаров, большое спасибо. Создание пакетов с ключом -size 5 не помогло. Теперь приложение просит SYSLN305. То есть получается, что это ошибка в приложении. Но еще раз хочу тогда спросить, почему же на WSAS 6 все работает?
...
Рейтинг: 0 / 0
DSRA8650W: Ошибка при закрытии дочернего заменителя JDBC
    #38172937
Semen Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Евгений ХабаровSemen Popovпропущено...


Кажется я догадываюсь, почему драйвер использовался из AppServer\lib\ext. Провайдер и источники данных созданы в области "Узел, Сервер", а переменные проинициализированы в области "Узел". Получается, что переменные не были видны. Я правильно понимаю, что и переменные надо было инициализировать в области "Узел, Сервер"?
lib\ext является более приоритетным (идет в classpath раньше), нежели пути, указанные в настройках провайдера. Это кроме случая, когда провайдер создается с собственным(изолированным) Classloader-ом.
Спасибо. А не могли бы тогда пояснить, в чем отличие создания провайдера, источника данных, переменных WebSphere в различных областях? Я тут посмотрел у себя, как настроены различные приложения, и увидел, что провайдеры, источники, переменные настроены по-разному - в различных областях. Что следует учитывать, выбирая ту или иную область, создавая объекты в WebSphere?
...
Рейтинг: 0 / 0
DSRA8650W: Ошибка при закрытии дочернего заменителя JDBC
    #38174300
Semen PopovЕвгений Хабаровпропущено...

lib\ext является более приоритетным (идет в classpath раньше), нежели пути, указанные в настройках провайдера. Это кроме случая, когда провайдер создается с собственным(изолированным) Classloader-ом.
Спасибо. А не могли бы тогда пояснить, в чем отличие создания провайдера, источника данных, переменных WebSphere в различных областях? Я тут посмотрел у себя, как настроены различные приложения, и увидел, что провайдеры, источники, переменные настроены по-разному - в различных областях. Что следует учитывать, выбирая ту или иную область, создавая объекты в WebSphere?
Уровень, на котором определен ресурс или переменная имеет большое значение в конфигурации ND.
Он определяет "область видимости" переменной или ресурса.
При совпадении названий более "гранулярное" определение будет перекрывать более общее. Т.е. определение переменной или ресурса с одинаковым именем, заданное на уровне сервера(server), перекроет определение, заданное на уровне узла (node) или ячейки (cell).

В конфигурации ND ресурс и пути к классам описываются на уровне ячейки или кластера (если ресурс должен быть общедоступным).
Но, если на конкретном узле(сервере) пути будут другими, то для такого узла переменная "переопределяется" на уровне узла.
Т.е. имеем описание ресурса в единственном экземпляре, но можем "подменить" параметры, заданные переменными, для конкретного узла или сервера.

Для Standalone сервера уровень определения ресурса/переменной является менее критичным, но желательно ресурсы задавать на одном уровне, дабы не плодить сущности. В своих Stadalone конфигурациях обычно использую уровень узла, но не могу утверждать, что это является best practices.

Подробнее описано по ссылкам:
WebSphere variables
Administrative console scope settings
...
Рейтинг: 0 / 0
DSRA8650W: Ошибка при закрытии дочернего заменителя JDBC
    #38174561
Semen Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Евгений Хабаров, большое спасибо
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / DSRA8650W: Ошибка при закрытии дочернего заменителя JDBC
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]