<one-sided name=string atSameTransaction=boolean onDelete=(noOrder| reverseOrder| deleteAll) [atWrongOrder=(ignore| save| wait)] > – описание односторонней зависимости объектов
<loaderAlias>string</loaderAlias>
<parameter name=string>string</parameter> – параметры метода
...
<parameter name=string>string</parameter>
<many-sided name=string atSameTransaction=boolean> – описание неразделимого множества объектов
...
<entity>string</entity>
<loaderAlias>string</loaderAlias>
<parameter name=string>string</parameter> – параметры метода
...
<parameter name=string>string</parameter>
<loader>
<methodName>string</methodName>
<alias>string</alias>
Метод загрузчика должен иметь вид:
Пусть зависимость определена с аттрибутом atSameTransaction="true". Тогда информация о ней передается при репликации зависимого объекта. Если это множество(many-sided) – порядок не важен, если дерево из односторонних зависимостей – важен. (Если ОЗ образуют цикл – это ошибка).
Пусть теперь зависимость определена с аттрибутом atSameTransaction="false". Тогда дерево ОЗ влияет на очередь отправки объектов (получившееся дерево объектов является одной группой отправки), информация о зависимостях не передается. Множество в этом случае не имеет особого смысла, но его тоже можно обрабатывать как одну группу отправки.
Можно описать правила выбора объекта при конфликте: например, что один узел «авторитетнее» другого, узел более или менее «авторитетный», чем остальные; то же самое для отдельных классов. Также можно позволить добавить имя класса с методами, выбирающими между двумя объектами фиксированного (или любого) класса.
Для каждого правила определить приоритет.
Тогда при конфликте обязанность выбора падет на администратора только если: