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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> log4j: JDBCAppender не находит таблицу 
V
    Опции темы
check
Дата 9.7.2008, 18:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Требуется организовать логгирование в базу данных. База - HQLDB,  встроенная в JBoss.
Проблема с последним условием,  поскольку c MySQL аппендер работает нормально.

В случае с HSQLDB при запуске сервера log4j выдает следующее
Код

Log 4j error: Filed to execute sql

java.sql.SQLException: Table not found in statement [INSERT INTO registration_log] 
хотя таблица в базе создана.

JDBC-аппендер прикручен следующим образом
Код

<appender name="JDBC" class="org.apache.log4j.jdbc.JDBCAppender">
 <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
 <param name="driver" value="org.hsqldb.jdbcDriver"/>
 <param name="URL"
value="jdbc:hsqldb:${jboss.server.data.dir}${/}portal${/}hypersonic${/}database"/>
 <param name="user" value="sa"/>
 <param name="password" value=""/>
 <layout class="org.apache.log4j.PatternLayout">
 <param name="ConversionPattern" value="INSERT INTO
registration_log(Message) VALUES('%d - %c - %p - %m')"/>
 </layout>
</appender> 

Специально упростил до предела таблицу,  чтобы исключить ошибки с layout-ом.

Как я уже сказал, с MySQL аппендер работает нормально(правда JBoss при запуске потормаживает).
PM MAIL   Вверх
ivg
Дата 9.7.2008, 23:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Autonomous R&D
**


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

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



Цитата(check @  9.7.2008,  21:14 Найти цитируемый пост)
хотя таблица в базе создана.

Проблема в том, что в режиме In-Process (Standalone) Mode, а судя по URL - это так, таблицы и данные, (частично или целиком) хранятся в памяти того приложения, в котором они были записаны. Чтобы эти изменения отразились в файлах, нужно либо 1. выполнить команду SHUTDOWN и закрыть Connection, либо 2. Открывать соединение с URL="jdbc:hsqldb:<path_to_hsqldb_dir>/<db_name>;shutdown=true", в этом случае команду SHUTDOWN можно не выполнять, достаточно просто закрыть Connection. По видимому из-за этого в другом приложении (JBoss) таблица не найдена.
Что касается логгирования, то аналогично: допишите ;shutdown=true в URL'е. И в коде, который выполняется при остановке приложения, добавьте:
Код

LogManager.shutdown();
// или
Logger.getLogger("myLogger").getAppender("JDBC").close();
 Этот код вызовет закрытие JDBC Connection'а, в соответствующем JDBCAppender'е, что в случае с HSQLDB совершенно необходимо для сохранения логов.
PM MAIL   Вверх
check
Дата 10.7.2008, 19:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(ivg @  9.7.2008,  23:46 Найти цитируемый пост)
таблицы и данные, (частично или целиком) хранятся в памяти того приложения, в котором они были записаны
Да,  но JBoss-у в папку hypersonic я подкладываю файлы в которых изменения(создание таблицы) уже сохранены.

Таблицу я создавал в DatabaseManager,  запуская hsqldb отдельно.


Цитата(ivg @  9.7.2008,  23:46 Найти цитируемый пост)
;shutdown=true
Пробовал добавлять,  но пока безрезультатно.

PM MAIL   Вверх
ivg
Дата 10.7.2008, 20:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Autonomous R&D
**


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

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



Цитата(check @  10.7.2008,  22:29 Найти цитируемый пост)
Да,  но JBoss-у в папку hypersonic я подкладываю файлы в которых изменения(создание таблицы) уже сохранены.

Можно на них посмотреть?
PM MAIL   Вверх
check
Дата 11.7.2008, 20:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Нет, с файлами всё в порядке. 
Посмотрел под дебагом исходники log4j,  оказывается некорректно считывался URL при парсинге конфига - оттуда удалялись все слеши.
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.0684 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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