MyWackoSite: LayerBadObjectsTransaction ...

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

Проблема

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

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

Идея

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

Реализация

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

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