Учебная лаборатория НГУ-Parallels - Написать нам Печать
LogoГлавнаяЛетняя практикаПроектыСеминарыСпецкурсыПубликацииДокументация
W Chilim / Формат Файла Настроек

Форматы файлов настроек

Описание зависимости объектов

Предлагаю предоставить полную свободу описаний зависимостей. По каждому объекту, используя загрузчик, можно получить его замыкание. Набросок схемы файла:

<one-sided name=string atSameTransaction=boolean onDelete=(“noOrder”| “reverseOrder”| “deleteAll”) [atWrongOrder=(“ignore”| “save”| “wait”)] > – описание односторонней зависимости объектов
<dependentEntity>string</dependentEntity> – описание класса зависимого объекта
<loaderAlias>string</loaderAlias>
<parameter name=string>string</parameter> – параметры метода
...
<parameter name=string>string</parameter>
</one-sided>

<many-sided name=string atSameTransaction=boolean> – описание неразделимого множества объектов
<entity>string</entity> – описания классов объектов группы
...
<entity>string</entity>
<loaderAlias>string</loaderAlias>
<parameter name=string>string</parameter> – параметры метода
...
<parameter name=string>string</parameter>
</many-sided>

<loader>
<loaderClassName>string</loaderClassName>
<methodName>string</methodName>
<alias>string</alias>
</loader>

Метод загрузчика должен иметь вид:
Map<_dependentClass_, Set<_closureClass_>> LoaderName.methodName( Set<_dependentClass_> obj, Properties parameters);

Пусть зависимость определена с аттрибутом atSameTransaction="true". Тогда информация о ней передается при репликации зависимого объекта. Если это множество(many-sided) – порядок не важен, если дерево из односторонних зависимостей – важен. (Если ОЗ образуют цикл – это ошибка).
Пусть теперь зависимость определена с аттрибутом atSameTransaction="false". Тогда дерево ОЗ влияет на очередь отправки объектов (получившееся дерево объектов является одной группой отправки), информация о зависимостях не передается. Множество в этом случае не имеет особого смысла, но его тоже можно обрабатывать как одну группу отправки.

Описание решений конфликтов


Можно описать правила выбора объекта при конфликте: например, что один узел «авторитетнее» другого, узел более или менее «авторитетный», чем остальные; то же самое для отдельных классов. Также можно позволить добавить имя класса с методами, выбирающими между двумя объектами фиксированного (или любого) класса.
Для каждого правила определить приоритет.
Тогда при конфликте обязанность выбора падет на администратора только если:
(Основано на слухах, что скоро конфликты можно будет разрешать «руками», через панель администрирования репликатора).