MyWackoSite: LayerBadObjectsTransaction ...

Home Page | Каталог | Изменения | НовыеКомментарии | Пользователи | Регистрация | Вход:  Пароль:  
Это старая версия LayerBadObjectsTransaction за 2009-04-09 17:15:25..

Проблема

XWiki может сохранять объекты разных классов в одну строку одной таблицы. Так как RDBR оперирует независимыми объектами, проблемы возникают, когда один объект не может быть сохранен без другого. Это случается, если один из классов отображается не на все столбцы, и среди тех, на которые он не отображается, существуют ненулевые. Объект такого класса не удастся сохранить раньше, чем будут заполнены все ненулевые столбцы.

Почему появилась идея

Для реализации проекта возникает необходимость в изменении только библиотеки Hibernate (для отслеживания изменений в БД). XWiki не модифицировалась, и это хорошо. Поэтому для того, чтобы приложение правильно реагировало на нестандартное поведение XWiki, логичнее изменять не сам XWiki (очередной сторонний продукт), а родной Layer.

Идея

Нужно модифицировать Layer так, чтобы каждый приходящий объект проверялся на самодостаточность. Если его нельзя сохранить отдельно от других, то ищем уже существующие дополняющие объекты. Если таких нет, объект не сохраняется в БД, пока не придут дополняющие объекты.

Реализация

При сохранении «плохого» объекта проверяем, существуют ли в базе или очереди дополняющие к «плохому» объекты. Если их хватает для сохранения, то все: плохой и дополняющие – сохраняются в одной транзакции Hibernate в базу данных и удаляются из очереди (при этом метаинформация обновляется для всех объектов, которые были в очереди). Если же остаются незатронутые необходимые столбцы, то объект сохраняется в очередь, его метаинформация не обновляется. При этом считаем, что структуры БД реплицируемых сторон одинаковы. То есть если объект записывается в очередь, то когда-нибудь он из нее удалится, ибо он не может быть создан отдельно от дополняющих. (Проблемы могут возникнуть при реализации частичной репликации!)
Обозначения:
Очередь – дополнительная таблица, в которой хранятся объекты, которые не могут быть сохранены на данный момент.
Необходимые столбцы для класса – столбцы таблицы с ограничением “not null”, на которые не отображается класс.
«Плохой» объект – экземпляр «плохого» класса.
«Плохой» класс – множество необходимых столбцов которого непусто. Плохие классы обнаруживаются при анализе маппинга.
Дополняющие к плохому объекты – которые отображаются в ту же строку, что плохой и хотя бы на один из необходимых столбцов плохого класса.

 
Файлов нет. [Показать файлы/форму]
Комментариев нет. [Показать комментарии/форму]