Apache Jackrabbit - дублирующий узел? - PullRequest
4 голосов
/ 18 мая 2011

Используя Apache Jackrabbit, я создал два узла по одному и тому же пути

root.addNode("hello");

Я полностью ожидал, что второе дополнение выдаст ItemExistsException , как описано здесь , но этоне.

Когда я распечатываю путь узлов, чтобы попытаться увидеть, что происходит, я вижу /hello для первого узла и /hello[2] для второго узла

Далее, когда я удаляю узел, тест для проверки существования узла проходит до того, как я сохраняю сеанс, но после того, как я сохраняю сеанс, второй тест с тем же условием не выполняется

session.getNode("/hello").remove(); 
assertFalse(session.nodeExists("/hello"));

session.save(); 

assertFalse(session.nodeExists("/hello"));

Чтоздесь происходит?Это ошибка или какая-то особенность Jackrabbit, которая отличается от спецификации?

1 Ответ

4 голосов
/ 18 мая 2011

То, что вы видите, это одноименные братья и сестры, что является особенностью Jackrabbit и JCR. Дэвид Нюшелер, ведущий разработчик JSR-170, написал в Jackrabbit WIKI :

В то время как в спецификации были введены элементы с одинаковыми именами (SNS), чтобы обеспечить совместимость со структурами данных, которые разработаны и выражены с помощью XML и, следовательно, чрезвычайно ценны для JCR, SNS сопряжена со значительными накладными расходами и сложностью для хранилища.

...

Для импорта XML или взаимодействия с существующим XML SNS может быть необходимым и полезным, но я никогда не использовал SNS и никогда не буду использовать в моих моделях данных "зеленого поля".

Таким образом, по сути, причина в том, что у вас есть братья и сестры с одинаковыми именами для размещения XML-данных, когда вы можете иметь несколько элементов с одним и тем же именем. Я видел сибилинги с тем же именем, которые использовались в Day CQ WCM, но в целом их использование не рекомендуется.

...