2013-08-01 1 views
1

내 노드의 유형을 완전히 정의하지 않고 Jackrabbit에서 동일한 이름의 형제를 제한 할 수 있습니까? 내 저장소에 적용 할 수 있고 모든 노드의 유형으로 사용할 수있는 간단한 CND 정의를 찾고 있습니다 (추측합니다).Jackrabbit 제한 SNS (nt : 구조화되지 않음)

나는 (http://wiki.apache.org/jackrabbit/DavidsModel) 특히 강한 스키마를 만드는 것을 피하면서 # 1을 따르고 있지만 동일한 이름의 형제를 피하면서 # 4와 호환되지 않는 것으로 여기고 있습니다.

수동으로 같은 이름의 형제를 피하고 관련 상위 노드 (컬렉션)를 잠그고 동일한 이름의 노드를 수동으로 확인할 수 있으며 어쨌든이 작업을 수행하여 응용 프로그램 수준의 오류 메시지를 표시하지만 불일치에 대한 추가 보호 계층을 선호합니다.

또한, 나는이 문서를 발견

http://www.day.com/specs/jcr/1.0/4.3.2_Support_for_Same_Name_Siblings_is_Optional.html

모든 호환 저장소가 지원해야하는 노드 유형이 필요한 노드 유형의 것도 허용하지의 필수 세트가 있지만 이름이 같은 형제 및 특정 저장소에서 사용 가능한 추가 노드 유형은 구현에 따라 다릅니다. 따라서 저장소가 사용 가능한 노드 유형 집합을 제한하여 동일한 이름의 형제를 모두 허용하지 않을 수 있습니다.

이 내가 관찰 한 내용과 일치하지 않는 것, 예컨대 :

final Repository repository = new TransientRepository(); 
final Session session = repository.login(new SimpleCredentials("username", "password".toCharArray())); 
final Node collection = session.getRootNode().addNode("collection", "nt:unstructured"); 
final Node childA = collection.addNode("child", "nt:unstructured"); 
final Node childB = collection.addNode("child", "nt:unstructured"); 
session.save(); 
System.err.println(collection.getNodes("child").getSize()); 
//prints 2 

는 JCR의 버전 2.0에서 변경된이 뭔가? (나는 그것이 v1.0 명세이다.)

나는 JCR이 원칙적으로 매우 적절하다고 생각하지만, 문서가 부족한 것이 바로 지금 나를 실망시키고있다. 따라서 최신 정보 높게 평가 될 것입니다. NT 용 CND 정의에 기반

답변

1

: 여기 구조화되지 않은 :

이 작동하는 것 같군
<my = 'http://example.com/my'> 
[my:unstructured] orderable 
    - * (undefined) multiple 
    - * (undefined) 
    + * (nt:base) = my:unstructured version 

, 지금은에이 얻을 :

https://docs.jboss.org/author/display/MODE/Defining+custom+node+types

나는이 정의를 내놓았다 두 번째 하위 노드를 추가하려고 시도하십시오.

javax.jcr.ItemExistsException :이 노드 이미 존재합니다 :/collection/child at org.apache.jackrabbit.core.NodeImpl.addNode (NodeImpl.java:1508) at org.apache.jackrabbit.core.NodeImpl.addNodeWithUuid (NodeImpl.java:2087) at org .apache.jackrabbit.core.NodeImpl.addNode (NodeImpl.java:1992)

내가 예상 한 것입니다.