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

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
01.03.2013, 11:46
    #38170720
Semen Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DSRA8650W: Ошибка при закрытии дочернего заменителя JDBC
Semen Popov...
При формировании этого отчета приложение вызывает хранимую процедуру.
...


Наврал. Выполняется обычный select. Но почему он вводит в ступор приложение?
...
Рейтинг: 0 / 0
01.03.2013, 12:11
    #38170772
DSRA8650W: Ошибка при закрытии дочернего заменителя JDBC
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
01.03.2013, 13:13
    #38170854
Semen Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DSRA8650W: Ошибка при закрытии дочернего заменителя JDBC
Действительно, по пути 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
01.03.2013, 13:17
    #38170863
Semen Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DSRA8650W: Ошибка при закрытии дочернего заменителя JDBC
Логи забыл
...
Рейтинг: 0 / 0
01.03.2013, 13:51
    #38170933
Semen Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DSRA8650W: Ошибка при закрытии дочернего заменителя JDBC
Евгений ХабаровОтсутствующие пакеты 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
01.03.2013, 14:11
    #38170969
Semen Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DSRA8650W: Ошибка при закрытии дочернего заменителя JDBC
Semen Popov...
Почему использовался старый драйвер (из AppServer\lib\ext), когда были заданы конкретные пути - не знаю. Теперь вроде используется новый.
...

Кажется я догадываюсь, почему драйвер использовался из AppServer\lib\ext. Провайдер и источники данных созданы в области "Узел, Сервер", а переменные проинициализированы в области "Узел". Получается, что переменные не были видны. Я правильно понимаю, что и переменные надо было инициализировать в области "Узел, Сервер"?
...
Рейтинг: 0 / 0
01.03.2013, 15:29
    #38171116
DSRA8650W: Ошибка при закрытии дочернего заменителя JDBC
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
01.03.2013, 15:33
    #38171125
DSRA8650W: Ошибка при закрытии дочернего заменителя JDBC
Semen PopovSemen Popov...
Почему использовался старый драйвер (из AppServer\lib\ext), когда были заданы конкретные пути - не знаю. Теперь вроде используется новый.
...

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

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

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

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

Спасибо. Странно, но почему же на старом сервере этот отчет работает?
...
Рейтинг: 0 / 0
01.03.2013, 16:58
    #38171275
DSRA8650W: Ошибка при закрытии дочернего заменителя JDBC
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
04.03.2013, 09:50
    #38172929
Semen Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DSRA8650W: Ошибка при закрытии дочернего заменителя JDBC
Евгений Хабаров, большое спасибо. Создание пакетов с ключом -size 5 не помогло. Теперь приложение просит SYSLN305. То есть получается, что это ошибка в приложении. Но еще раз хочу тогда спросить, почему же на WSAS 6 все работает?
...
Рейтинг: 0 / 0
04.03.2013, 09:57
    #38172937
Semen Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DSRA8650W: Ошибка при закрытии дочернего заменителя JDBC
Евгений ХабаровSemen Popovпропущено...


Кажется я догадываюсь, почему драйвер использовался из AppServer\lib\ext. Провайдер и источники данных созданы в области "Узел, Сервер", а переменные проинициализированы в области "Узел". Получается, что переменные не были видны. Я правильно понимаю, что и переменные надо было инициализировать в области "Узел, Сервер"?
lib\ext является более приоритетным (идет в classpath раньше), нежели пути, указанные в настройках провайдера. Это кроме случая, когда провайдер создается с собственным(изолированным) Classloader-ом.
Спасибо. А не могли бы тогда пояснить, в чем отличие создания провайдера, источника данных, переменных WebSphere в различных областях? Я тут посмотрел у себя, как настроены различные приложения, и увидел, что провайдеры, источники, переменные настроены по-разному - в различных областях. Что следует учитывать, выбирая ту или иную область, создавая объекты в WebSphere?
...
Рейтинг: 0 / 0
05.03.2013, 11:26
    #38174300
DSRA8650W: Ошибка при закрытии дочернего заменителя JDBC
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
05.03.2013, 13:37
    #38174561
Semen Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DSRA8650W: Ошибка при закрытии дочернего заменителя JDBC
Евгений Хабаров, большое спасибо
...
Рейтинг: 0 / 0
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / DSRA8650W: Ошибка при закрытии дочернего заменителя JDBC / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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