Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Exception в целом (Hibernate в частности), Получить текст, выводимый средой в конс. 
:(
    Опции темы
Cyclone
Дата 31.10.2009, 02:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 2.5.2007

Репутация: нет
Всего: нет



Доброго времени.

При возникновении исключительных ситуаций, например нарушение ограничений в БД при работе с Hibernate (org.hibernate.exception.ConstraintViolationException) среда NetBeans выводит очень полезную информацию об ошибке перед stacktrace'ом:

Цитата

SQL Error: 0, SQLState: null
Batch entry 0 delete from public.account where id=53 was aborted.  Call getNextException to see the cause.
SQL Error: 0, SQLState: 23503
ERROR: update or delete on table "account" violates foreign key constraint "fk_work_item_student" on table "work_item"
  Подробности: Key (id)=(53) is still referenced from table "work_item".
Could not synchronize database state with session
org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
        at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:71)
        ...


Очень хочется программно получить этот текст (ERROR: update or delete... Подробности: ...), однако сколько я не перебирал методов объекта Exception - получить его не удалось.

Кто подскажет?..

Спасибо.

Если важно - среда NetBeans IDE 6.7.1.
PM MAIL   Вверх
Samotnik
Дата 31.10.2009, 02:29 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 5
Всего: 191



пиши логи в log4j.  IDE  не всегда  в себя все ошибки  записывает, а если и записывает, то бывает что не полностью.

Добавлено через 2 минуты и 33 секунды
Цитата(Cyclone @  31.10.2009,  02:14 Найти цитируемый пост)
однако сколько я не перебирал методов объекта Exception - получить его не удалось.

а по поводу самой ошибки 
Код

(*Exception e)  {
e.printStackTrace();
}

Должен все вывести. 
Но и доки читать не забывай smile 
PM MAIL   Вверх
Cyclone
Дата 31.10.2009, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 2.5.2007

Репутация: нет
Всего: нет



Вы, кажется, не поняли... я хочу получить этот текст в Stirng объекте при обработке исключения.

e.printStackTrace() печатает:
org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
        at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:71)
        ...

e.getMessage() и e.getLocalizedMessage() возвращают:
Could not execute JDBC batch update

e.toString() тоже не то, что надо...

А как получить вот этот текст "... Подробности: Key (id)=(53) is still referenced from table "work_item"..."?
Код

try {
...
} catch (Exception e) {
String useFulHint = e.getUseFulHint();
}

?
PM MAIL   Вверх
Старовъръ
Дата 31.10.2009, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 491
Регистрация: 8.5.2008

Репутация: 1
Всего: 10



Код

getStackTrace() 
Но нутром чую - что-то лишнее лепишь у себя в приложении smile
PM MAIL WWW   Вверх
Samotnik
Дата 31.10.2009, 15:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 5
Всего: 191



Cyclone, что-то я не понимаю, что вам нужно   чем  printStackrace не подходит smile 
PM MAIL   Вверх
Cyclone
Дата 31.10.2009, 16:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 2.5.2007

Репутация: нет
Всего: нет



Что же непонятного я говорю?..
Так, попробую объяснить ещё раз.

При работе сервлета на сервере GlassFish выбрасывается исключение (org.hibernate.exception.ConstraintViolationException), и в консоли среды NetBeans печатается следующий текст:

Цитата

SQL Error: 0, SQLState: null
Batch entry 0 delete from public.account where id=53 was aborted.  Call getNextException to see the cause.
SQL Error: 0, SQLState: 23503
ERROR: update or delete on table "account" violates foreign key constraint "fk_work_item_student" on table "work_item"
  Подробности: Key (id)=(53) is still referenced from table "work_item".

Could not synchronize database state with session
org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
        at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:71)
        (пропущено)
        ... 44 more

Мне очень хочется получить в объекте String часть текста, выделенную жирным.

Вот так я перехватываю исключение, пытаясь получить этот текст:

Код

try {
...
} catch (Exception e) {
out.print("<br/>e.toString(): " + e);

out.print("<br/>e.getMessage(): " + e.getMessage());

out.print("<br/>e.getLocalizedMessage(): " + e.getLocalizedMessage());
                
out.print("<p>Stacktrace:</p>");
e.printStackTrace(out);
}


Приведённые методы печатают следующее:

Цитата

e.toString(): org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
e.getMessage(): Could not execute JDBC batch update
e.getLocalizedMessage(): Could not execute JDBC batch update

e.printStackTrace(out):
org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update at 
org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:71) at 
(пропущено)
... 44 more 


Как видите, часть текста, выделенную сверху жирным, ни одним из приведённых методов, получить не удалось.

Как мне получить выделенный текст в виде объекта String при обработке исключения?



Выяснять причину ошибки в этой теме не надо.
Разбирать код сервлета не надо.
Объяснять, как пользоваться try-catch, не надо.

Надо только получить выделенный жирным текст в String.
PM MAIL   Вверх
Старовъръ
Дата 31.10.2009, 20:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 491
Регистрация: 8.5.2008

Репутация: 1
Всего: 10



А я писал чтоб меня игнорировали? smile
PM MAIL WWW   Вверх
Cyclone
Дата 31.10.2009, 23:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 2.5.2007

Репутация: нет
Всего: нет



Цитата(Старовъръ @ 31.10.2009,  15:25)
Код

getStackTrace() 
Но нутром чую - что-то лишнее лепишь у себя в приложении smile

Код
Код
for (StackTraceElement ste : e.getStackTrace()) {
                    out.print(ste);
                }


выводит в консоль:

Цитата
org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update at 
org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:71) at 
(пропущено)
...


Снова не то, что надо.
PM MAIL   Вверх
Старовъръ
Дата 31.10.2009, 23:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 491
Регистрация: 8.5.2008

Репутация: 1
Всего: 10



А, так то, что ты хочешь - это походу вывод Log4j.
PM MAIL WWW   Вверх
Cyclone
Дата 2.11.2009, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 2.5.2007

Репутация: нет
Всего: нет



Цитата(Старовъръ @ 31.10.2009,  23:29)
А, так то, что ты хочешь - это походу вывод Log4j.

И каков же будет ответ на мой вопрос (как получить в String)?
PM MAIL   Вверх
Старовъръ
Дата 3.11.2009, 10:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 491
Регистрация: 8.5.2008

Репутация: 1
Всего: 10



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

Это сообщение отредактировал(а) Старовъръ - 3.11.2009, 10:29
PM MAIL WWW   Вверх
chief39
Дата 3.11.2009, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


карманная тигра
***


Профиль
Группа: Участник Клуба
Сообщений: 1631
Регистрация: 20.5.2005
Где: Киев

Репутация: 11
Всего: 77



Это лог хибернейта.
Походу, можно подрихтовать логфоржи пропертис и выставить org.hibernate лог дабы он хоть ерроры писал.

Но это в консоль или иной аутпут пойдёт, то ись туда, куда настроен вывод логфоржи.

Можно подумать насчёт того чтоб писать в какой-нить поток аппендером(настроить этот вывод), а оттуда уже читать ручками. Ну например в файл из из файла smile Теоретически smile
Но это будет некрасиво, не всегда возможно и оно будет читать ВСЕ логи. А оно, вижу не надо.

Хибер разработчики посчитали что эту инфу нужно только логгировать, а не писать в ксепшн smile Приведи полностью стектрейс, посмотрим откуда летит, глянем исходники.

Если чётко отвечать на чёткий вопрос - то НИКАК. Ну, разумными пряморукими методами, по крайней мере smile


--------------------
Люди - это свечи. Они либо горят, либо их - в жопу!(с)

PM MAIL   Вверх
Samotnik
Дата 7.11.2009, 02:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 5
Всего: 191



я еще в первом посте (который мне заминусовали ) написал про необходимость использования в данной ситуации log4j
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0594 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.