powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Перехват SQL запросов в Hibernate
25 сообщений из 35, страница 1 из 2
Перехват SQL запросов в Hibernate
    #34815371
samum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте.
Вопрос к знатокам Hibernate - возможно ли организовать такую штуку:
Мне необходимо перехватывать ряд SQL запросов, которые генерируются hinernate'ом при изменении полей объекта, и желательно записывать их в спец. таблицу в БД. Я знаю что можно включить режим дебага, тогда все запросы пишутся в лог, а вот можно ли указать какой-нибудь кастомный логер, чтобы из него дописывать эти запросы в бд (или хотя бы в файл)?
Может быть есть более простой способ организовать подобное? Не хочется просто на чистом JDBC все делать.
Спасибо :)
...
Рейтинг: 0 / 0
Перехват SQL запросов в Hibernate
    #34815435
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тут два момент.
Настроить логгер на запись в базу, не проблема. Так же не проблема настроить логгер писать только те логи в которых SQL запросы хибера. Это все решается с log4j без особых трудностей.

Трудности вызывает вторая часть вопроса. Подразумевается что эти запросы потом надо будет переиспользовать? А они все имеют вид для PreparedStatement то есть "... WHERE column = ?"
И вытягивать реально подставляемые значения задача не тривиальная.

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

Кстати, вопрос, из ряда
"У меня есть не скажу какая задача, и я её решаю таким способом. Как мне этот способ осуществить?"
Если расскажешь более общую задачу, может подскажем решение получше.
...
Рейтинг: 0 / 0
Перехват SQL запросов в Hibernate
    #34815527
samum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlazkowiczПодразумевается что эти запросы потом надо будет переиспользовать? А они все имеют вид для PreparedStatement то есть "... WHERE column = ?"
И вытягивать реально подставляемые значения задача не тривиальная.

Но в этом случае, я бы написал обертку над JDBC драйвером, которая сможет логировать заапросы наряду со значениями.
Да, необходимо писатьзапросы именно со значением (как их бд получает). Что-то мне внутренне подсказывало, что с этим могут быть трудности.

BlazkowiczКстати, вопрос, из ряда
"У меня есть не скажу какая задача, и я её решаю таким способом. Как мне этот способ осуществить?"
Если расскажешь более общую задачу, может подскажем решение получше.
Извиняюсь, критику принял :[
В более общем виде стоит задача оранизовать (т.е. сначала предусмотреть такую возможность) что-то вроде репликации.

Существует N равноправных офисов, в каждом менеджеры вводят и просматривают данные (объем вставки/изменения данных сравнительно мал, изменятьданные могут только в офисе, в котором они изначально вводились). По возможности во всех офисах должна быть максимально одинаковая (и свежая) инфомация. Посадить их всех на единую БД нет возможности в основном из-за качества связи. В данном случае лучше наличие несколько устаревших данных, чем прекращение работы целого офиса в случае очердного обрыва связи.

Отсуда и решение - лог вносимых изменений в бд с периодической (или моментальной) его отправкой. Синхронизация...
...
Рейтинг: 0 / 0
Перехват SQL запросов в Hibernate
    #34815631
wpn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Огого.
А в базе изменения вносить нельзя? Например триггера навесить?
А то уж больно кривое решение вы выбрали для этого.
...
Рейтинг: 0 / 0
Перехват SQL запросов в Hibernate
    #34815641
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
samumИзвиняюсь, критику принял :[
В более общем виде стоит задача оранизовать (т.е. сначала предусмотреть такую возможность) что-то вроде репликации.
Да, здесь и на других форумах процентов 80 таких вопросов. Никак не могу придумать определение этому феномену.

samumСуществует N равноправных офисов, в каждом менеджеры вводят и просматривают данные (объем вставки/изменения данных сравнительно мал, изменятьданные могут только в офисе, в котором они изначально вводились). По возможности во всех офисах должна быть максимально одинаковая (и свежая) инфомация. Посадить их всех на единую БД нет возможности в основном из-за качества связи. В данном случае лучше наличие несколько устаревших данных, чем прекращение работы целого офиса в случае очердного обрыва связи.
Отсуда и решение - лог вносимых изменений в бд с периодической (или моментальной) его отправкой. Синхронизация...
Я бы начал решать задачу с поиска средств репликации прежде чем писать свою репликацию. И начинать поиск стоит как раз с базы данных. Это конечно уже отдельная тема для другого форума, но комерческие SQL сервера имеют вполне себе нормальную репликацию как раз для твоего случая. Для некомерческих есть ряд решений, которые можно к ним прикрутить.

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

А вот если ты рассмотришь эти варианты и поймешь что тебе они не подходят. То тогда выкладывай эту самую причину сюда. И тогда можно обсуждать и свою репликацию в рамках этой причины.
...
Рейтинг: 0 / 0
Перехват SQL запросов в Hibernate
    #34815703
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
samum
Существует N равноправных офисов, в каждом менеджеры вводят и просматривают данные (объем вставки/изменения данных сравнительно мал, изменятьданные могут только в офисе, в котором они изначально вводились). По возможности во всех офисах должна быть максимально одинаковая (и свежая) инфомация. Посадить их всех на единую БД нет возможности в основном из-за качества связи. В данном случае лучше наличие несколько устаревших данных, чем прекращение работы целого офиса в случае очердного обрыва связи.
- как вариант: JMS
...
Рейтинг: 0 / 0
Перехват SQL запросов в Hibernate
    #34815714
TiG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Даже логирующие триггеры на всех изменяемых таблицах и то более правильным решением будут.
Но лучше все-таки поискать штатные механизмы, и проще и правильнее и меньше проблем потом будет. Кроме того гарантированно будут учитываться все изменения в БД, независимо от того сделаны они через интерфейс системы, подправлены админами ручками/скриптами непосредственно в БД (согласитесь ошибки в данных случаются и их бывает надо править, иногда и массово) или через какую нибудь другую систему, которую руководство закажет через две недели после того, как вы завершите разработку вашей репликации.
К тому же вполне вероятно, что рано или поздно измениться правило "изменять данные могут только в офисе, в котором они изначально вводились". Пусть для особо избранных, но от этого легче не будет ;) Разрешение коллизий еще одно преимущество с умом реализованных средств репликации.
...
Рейтинг: 0 / 0
Перехват SQL запросов в Hibernate
    #34815725
TiG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kachalov samum
Существует N равноправных офисов, в каждом менеджеры вводят и просматривают данные (объем вставки/изменения данных сравнительно мал, изменятьданные могут только в офисе, в котором они изначально вводились). По возможности во всех офисах должна быть максимально одинаковая (и свежая) инфомация. Посадить их всех на единую БД нет возможности в основном из-за качества связи. В данном случае лучше наличие несколько устаревших данных, чем прекращение работы целого офиса в случае очердного обрыва связи.
- как вариант: JMS
сначала Бритва Оккама
...
Рейтинг: 0 / 0
Перехват SQL запросов в Hibernate
    #34815729
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TiGДаже логирующие триггеры на всех изменяемых таблицах и то более правильным решением будут.
Но лучше все-таки поискать штатные механизмы, и проще и правильнее и меньше проблем потом будет.
С учетом того что проблемы даже с каналом, не исключено что и БД - Access. 8))
...
Рейтинг: 0 / 0
Перехват SQL запросов в Hibernate
    #34815736
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kachalov- как вариант: JMS
Это же все данные конвертировать в подходящую форму, а потом ещё и рассылать по узкому каналу? Или как?
...
Рейтинг: 0 / 0
Перехват SQL запросов в Hibernate
    #34815868
samum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz TiGДаже логирующие триггеры на всех изменяемых таблицах и то более правильным решением будут.
Но лучше все-таки поискать штатные механизмы, и проще и правильнее и меньше проблем потом будет.
С учетом того что проблемы даже с каналом, не исключено что и БД - Access. 8))
Вот и не угадали. БД - не коммерческая, это факт. Предъявляемые к ней требования - стандарт SQL92 и небольшой размер дистрибутива. Остается выбор между MySQl, Firebird или PostgreSql.

В основном то, что я встречал - это репликации Master/Slave, когда в центральном например офисе данные вносятся, а все остальные их только лицезреют. У нас же ситуация такова, что есть обычно от 3 до 10 офисов, и они равноправны, т.е. репликация нужна Master/Master. Я таких репликаторов пока не встретил (плохо искал, наверное).
...
Рейтинг: 0 / 0
Перехват SQL запросов в Hibernate
    #34815885
samum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TiGДаже логирующие триггеры на всех изменяемых таблицах и то более правильным решением будут.
Но лучше все-таки поискать штатные механизмы, и проще и правильнее и меньше проблем потом будет. Кроме того гарантированно будут учитываться все изменения в БД, независимо от того сделаны они через интерфейс системы, подправлены админами ручками/скриптами непосредственно в БД (согласитесь ошибки в данных случаются и их бывает надо править, иногда и массово) или через какую нибудь другую систему
Возможно логирущие триггеры и придется делать, если не найду хорошего репликатора :(

TiGК тому же вполне вероятно, что рано или поздно измениться правило "изменять данные могут только в офисе, в котором они изначально вводились". Пусть для особо избранных, но от этого легче не будет ;) Разрешение коллизий еще одно преимущество с умом реализованных средств репликации.
99,9% что изменится. Ну как бы этот момент просчитывается при проектировании бд.
...
Рейтинг: 0 / 0
Перехват SQL запросов в Hibernate
    #34815917
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz Kachalov- как вариант: JMS
Это же все данные конвертировать в подходящую форму, а потом ещё и рассылать по узкому каналу? Или как?
- создаем DataObject, пихаем его в Message, Message отправляем в очередь, когда связь с центральным офисом (ЦО) восстановлена мессаджи от сабоффиса (СО) отправляются в ЦО, а мессаджи из ЦО в СО, происходит синхронизация данных между СО и ЦО. Прикидка грубая, это всего лишь вариант :)

TiGБритва Оккама - спасибо за ликбез, но чта такое "бритва Оккама" знаю. Однако триггеры и прыггеры это тоже новые сущности, которые явно не упрощают систему, а кроме того усложняют ее развитие.
...
Рейтинг: 0 / 0
Перехват SQL запросов в Hibernate
    #34816147
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kachalov- создаем DataObject, пихаем его в Message, Message отправляем в очередь, когда связь с центральным офисом (ЦО) восстановлена мессаджи от сабоффиса (СО) отправляются в ЦО, а мессаджи из ЦО в СО, происходит синхронизация данных между СО и ЦО. Прикидка грубая, это всего лишь вариант :)
Лично мне на первый взгляд подобное решение кажется слишком сложным. Не понятно как гарантировать синхронность с состоянием базы.
...
Рейтинг: 0 / 0
Перехват SQL запросов в Hibernate
    #34816223
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczЛично мне на первый взгляд подобное решение кажется слишком сложным. Не понятно как гарантировать синхронность с состоянием базы.
- так как связь не постоянна, то БД в ЦО по определению не синхронна с БД филиала, т. е. синхронизация производится периодически, при наличии соединения.

- в те моменты когда производится синхронизация филиала с ЦО, она гарантированна так как все мессаджи которые отправлялись при внесении изменений в БД не пропали, они все сидят в очереди филиала и в теме ЦО

- собственно JMS и создавалась в расчете на асинхронную доставку, здесь как раз такой случай
...
Рейтинг: 0 / 0
Перехват SQL запросов в Hibernate
    #34818192
TiG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
samum TiGК тому же вполне вероятно, что рано или поздно измениться правило "изменять данные могут только в офисе, в котором они изначально вводились". Пусть для особо избранных, но от этого легче не будет ;) Разрешение коллизий еще одно преимущество с умом реализованных средств репликации.99,9% что изменится. Ну как бы этот момент просчитывается при проектировании бд.
и при выборе механизма репликации, я надеюсь, тоже ;)
Blazkowicz Лично мне на первый взгляд подобное решение кажется слишком сложным. Не понятно как гарантировать синхронность с состоянием базы.Как раз наоборот, схема с единым центральным узлом будет проще в сопровождении и самое главное надежнее и более производительна (последнее - исходя из посыла о качестве связи). Опять же разрешение коллизий проще делать на центральном узле. И особенно, если будет решено делать репликацию самостоятельно ;)
Кроме того, централизованный сервер репликации можно использовать и еще для одной очень полезной вещи - гонять на нем отчетность к примеру. В среднем (по всем филиалам) он будет находиться в наиболее актуальном состоянии. что уж говорить про скорость получения нужной информации по сравнению с опросом всех филиалов.
Kachalov- собственно JMS и создавалась в расчете на асинхронную доставку, здесь как раз такой случайЭто свойство обязательно для любого нормального механизма репликации. Имхо, все-таки лучше чуток времени потерять и поискать подходящее (по цене, функциональности, надежности, скорости, сложности изучения/сопровождения) готовое решение, чем изобретать своё.
...
Рейтинг: 0 / 0
Перехват SQL запросов в Hibernate
    #34818411
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TiG Blazkowicz Лично мне на первый взгляд подобное решение кажется слишком сложным. Не понятно как гарантировать синхронность с состоянием базы.Как раз наоборот, схема с единым центральным узлом будет проще в сопровождении и самое главное надежнее и более производительна (последнее - исходя из посыла о качестве связи). Опять же разрешение коллизий проще делать на центральном узле. И особенно, если будет решено делать репликацию самостоятельно ;)
Кроме того, централизованный сервер репликации можно использовать и еще для одной очень полезной вещи - гонять на нем отчетность к примеру. В среднем (по всем филиалам) он будет находиться в наиболее актуальном состоянии. что уж говорить про скорость получения нужной информации по сравнению с опросом всех филиалов.
На словах и в теории оно все красиво. Но я себе слабо представляю как должна работать репликация на уровне объектов так чтобы в чем-то превзойти репликацию на уровне БД.
...
Рейтинг: 0 / 0
Перехват SQL запросов в Hibernate
    #34818514
TiG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz TiG Blazkowicz Лично мне на первый взгляд подобное решение кажется слишком сложным. Не понятно как гарантировать синхронность с состоянием базы.Как раз наоборот, схема с единым центральным узлом будет проще в сопровождении и самое главное надежнее и более производительна (последнее - исходя из посыла о качестве связи). Опять же разрешение коллизий проще делать на центральном узле. И особенно, если будет решено делать репликацию самостоятельно ;)
Кроме того, централизованный сервер репликации можно использовать и еще для одной очень полезной вещи - гонять на нем отчетность к примеру. В среднем (по всем филиалам) он будет находиться в наиболее актуальном состоянии. что уж говорить про скорость получения нужной информации по сравнению с опросом всех филиалов.
На словах и в теории оно все красиво. Но я себе слабо представляю как должна работать репликация на уровне объектов так чтобы в чем-то превзойти репликацию на уровне БД.
Хм, я вообще то писал про преимущества репликации с единым центральным узлом в данной задаче.
А то что не следует изобретать своих велосипедов, если можно найти готовый - см. мои посты выше. Как и про то, что даже если надумают писать своё, то JMS - почти наверняка лишняя сущность ;)
...
Рейтинг: 0 / 0
Перехват SQL запросов в Hibernate
    #34818650
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TiGА то что не следует изобретать своих велосипедов, если можно найти готовый - см. мои посты выше.
- как называется "готовый велосипед" и где его можно скачать?

TiG Как и про то, что даже если надумают писать своё, то JMS - почти наверняка лишняя сущность ;)
- конечно, писать свое, реализуя сетевые протоколы, очереди и сервера! Это будет надежно и эффективно работать и что ценно - "не одной новой сущности" :) Прославим Россию как родину изобретателей!
...
Рейтинг: 0 / 0
Перехват SQL запросов в Hibernate
    #34818681
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kachalov TiGА то что не следует изобретать своих велосипедов, если можно найти готовый - см. мои посты выше.
- как называется "готовый велосипед" и где его можно скачать?
Репликация в том или ином виде существует для всех основных вендоров БД. Даже Master2Master. Хотя наверное, кроме SQL Server и Orcale с Master2Master вряд ли кто-то адекватно справляется.
...
Рейтинг: 0 / 0
Перехват SQL запросов в Hibernate
    #34818708
samum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz Хотя наверное, кроме SQL Server и Orcale с Master2Master вряд ли кто-то адекватно справляется.
Эх, в том то и все дело...

А так, конечно, мало очень желания изобретать собственные квадратные колеса.
...
Рейтинг: 0 / 0
Перехват SQL запросов в Hibernate
    #34818730
TiG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kachalov TiGА то что не следует изобретать своих велосипедов, если можно найти готовый - см. мои посты выше.
- как называется "готовый велосипед" и где его можно скачать?

TiG Как и про то, что даже если надумают писать своё, то JMS - почти наверняка лишняя сущность ;)
- конечно, писать свое, реализуя сетевые протоколы, очереди и сервера! Это будет надежно и эффективно работать и что ценно - "не одной новой сущности" :) Прославим Россию как родину изобретателей!Взяв первый из списка
samumВот и не угадали. БД - не коммерческая, это факт. Предъявляемые к ней требования - стандарт SQL92 и небольшой размер дистрибутива. Остается выбор между MySQl, Firebird или PostgreSql.первой же ссылкой в гугле получаем MySQL 5.0 Reference Manual :: 15 Replication . Даже если там нет таких наворотов как в Oracle Advanced Replication, все равно это штатный механизм, на базе которого можно построить свою репликацию, при необходимости дополнив ее нужными фичами.
А вы про протоколы
...
Рейтинг: 0 / 0
Перехват SQL запросов в Hibernate
    #34818744
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz
Репликация в том или ином виде существует для всех основных вендоров БД. Даже Master2Master. Хотя наверное, кроме SQL Server и Orcale с Master2Master вряд ли кто-то адекватно справляется.
- как то плохо представляется автоматическая двунаправленная репликация в момент установления связи филиала с ЦО, защищенная от сбоев при передаче данных. По моему без внешней логики не обойтись. Хотя конечно я не специалист по соответствующим продуктам (Oracle, MS SQL Server), возможно есть готовые решения, которые стоят дешевле чем разработка самоделок.
...
Рейтинг: 0 / 0
Перехват SQL запросов в Hibernate
    #34818775
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TiG MySQL 5.0 Reference Manual :: 15 Replication
- как же, как же, читали :
автор
Replication enables data from one MySQL database server (called the master) to be replicated to one or more MySQL database servers (slaves)

- в руководстве администратора MySQL написано что Slave может выступать и как Master для построения цепочки реплицируемых серверов, возможно таким образом и удастся решить задачу, но что-то нет уверенности что замкнув два сервера друг на друга мы не получим зацикливания или еще чего то странного :)
...
Рейтинг: 0 / 0
Перехват SQL запросов в Hibernate
    #34818776
samum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TiGпервой же ссылкой в гугле получаем MySQL 5.0 Reference Manual :: 15 Replication . Даже если там нет таких наворотов как в Oracle Advanced Replication, все равно это штатный механизм, на базе которого можно построить свою репликацию, при необходимости дополнив ее нужными фичами.
А вы про протоколы
Да это можно сказать первое, что я прочитал по теме :))
Штатный механизм обеспечивает только Master/Slave репликацию, т.е. все филиалы пишут на какую-то одну (условно центральную) базу, а читают с одной из реплик (ближайшей, например, из локальной сети).

Чтобы обеспечить то что я хотел бы получить - типа мастер/мастер, мануал рекомендует кластеризацию. Особенности реализации этой самой кластеризации в MySQL несолько... Ну в общем не подходит кластеризация... Там и требования к связи должны быть иными.
...
Рейтинг: 0 / 0
25 сообщений из 35, страница 1 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / Перехват SQL запросов в Hibernate
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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