jackrabbit-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Dan Diephouse <dan.diepho...@mulesource.com>
Subject Re: Problems disallowing same name siblings
Date Thu, 21 Feb 2008 02:07:49 GMT
Thinking about this some more: so is the workaround to not have a 
superType and then define all my properties/child node types?

- Dan

Dan Diephouse wrote:
> Any suggested workarounds? If I create a different parent type which 
> artifact/workspace inherit from, would that help?
>
> - Dan
>
> Peeter Piegaze wrote:
>> Hi Dan,
>>
>> The trouble is that you are using type nt:unstructured as the
>> superclass of type galaxy:workspace. This adds the following child
>> node definition to the effective (as opposed to declared) definition
>> of galaxy:workspace:
>>
>> <childNodeDefinition
>>   name="*"
>>   onParentVersion="VERSION"
>>   sameNameSiblings="true" />
>>
>> This definition allows any number of child nodes of any type with any
>> name, each any number of times. This is called a residual definition
>> in JSR-170-speak.
>>
>> The interaction between two conflicting item defintions in a node type
>> that arise due to subclassing is not well defined in JSR 170. As a
>> result implementations are free to apply whatever resolution mechanism
>> they see fit. In the case of Jackrabbit when you add a child node
>> called "galaxy:artifact" to your galaxy:workspace node the first time
>> it matches your original child node defintion:
>>
>> <childNodeDefinition
>>   name="galaxy:artifact"
>>   onParentVersion="COPY"
>>   sameNameSiblings="false" />
>>
>> when you then add a second it matches the residual definition.
>>
>> I admit that this behavior is weird. It will be addressed in JCR 2.0 :-)
>>
>> Cheers,
>> Peeter
>>
>>
>> On 2/20/08, Dan Diephouse <dan.diephouse@mulesource.com> wrote:
>>  
>>>  Sorry, I didn't include the whole thing, but I changed it so it does:
>>>
>>>    <nodeType name="galaxy:workspace"
>>>      isMixin="false"
>>>      hasOrderableChildNodes="false"
>>>      primaryItemName=""
>>>      sameNameSiblings="false">
>>>
>>>      <supertypes>
>>>        <supertype>nt:unstructured</supertype>
>>>      </supertypes>
>>>      <childNodeDefinition name="galaxy:artifact" onParentVersion="COPY"
>>> sameNameSiblings="false" />
>>>    </nodeType>
>>>
>>>    <nodeType name="galaxy:artifact"
>>>      isMixin="false"
>>>      hasOrderableChildNodes="false"
>>>      primaryItemName=""
>>>      sameNameSiblings="false"
>>>      allowSameNameSiblings="false">
>>>
>>>      <supertypes>
>>>        <supertype>nt:unstructured</supertype>
>>>      </supertypes>
>>>
>>>    </nodeType>
>>>
>>>  - Dan
>>>
>>>
>>>  Tobias Bocanegra wrote:
>>>  as i said, the workspace nodetype must have SNS=false
>>> regards, toby
>>>
>>> On 2/20/08, Dan Diephouse <dan.diephouse@mulesource.com> wrote:
>>>
>>>
>>>  Hmmm... This doesn't seem to work either:
>>>
>>>  <nodeType name="galaxy:artifact"
>>>  isMixin="false"
>>>  hasOrderableChildNodes="false"
>>>  primaryItemName=""
>>>  sameNameSiblings="false">
>>>
>>>  <supertypes>
>>>  <supertype>nt:unstructured</supertype>
>>>  </supertypes>
>>>
>>>  </nodeType>
>>>
>>>  I'm guessing I'm doing something stupid. :-)
>>>  - Dan
>>>
>>>
>>>  Tobias Bocanegra wrote:
>>>  hi,
>>> the SNS works on the defining node, not on the child. i.e. your
>>> galaxy:workspace must have the SNS=false, not the artifact.
>>>
>>> regards, toby
>>>
>>> On 2/20/08, Dan Diephouse <dan.diephouse@mulesource.com> wrote:
>>>
>>>
>>>  I'm trying to disallow same name siblings. We have the concept of
>>>  workspaces which hold artifacts and other workspaces. Very similar 
>>> to a
>>>  file system (we chose not to go with the built in file node types 
>>> though
>>>  as they didn't fit our application). We've defined our node types like
>>> this:
>>>
>>>  <nodeTypes xmlns:nt="http://www.jcp.org/jcr/nt/1.0"
>>>  xmlns:jcr="http://www.jcp.org/jcr/1.0"
>>>  xmlns:galaxy="http://galaxy.mule.org"
>>>  xmlns:mix="http://www.jcp.org/jcr/mix/1.0">
>>>
>>>  <nodeType name="galaxy:workspace"
>>>  isMixin="false"
>>>  hasOrderableChildNodes="false"
>>>  primaryItemName="">
>>>
>>>  <supertypes>
>>>  <supertype>nt:unstructured</supertype>
>>>  </supertypes>
>>>  <childNodeDefinition name="galaxy:artifact" onParentVersion="COPY"
>>>  sameNameSiblings="false" />
>>>  </nodeType>
>>>
>>>  </nodeTypes>
>>>
>>>  When I dump the type registry I get this:
>>>
>>>  {http://galaxy.mule.org}workspace
>>>  Supertypes
>>>  {http://www.jcp.org/jcr/nt/1.0}unstructured
>>>  Mixin false
>>>  OrderableChildNodes false
>>>  PrimaryItemName <null>
>>>  NodeDefinition (declared in {http://galaxy.mule.org}workspace)
>>>  id=801081333
>>>  Name {http://galaxy.mule.org}artifact
>>>  RequiredPrimaryType {http://www.jcp.org/jcr/nt/1.0}base
>>>  AutoCreated false
>>>  Mandatory false
>>>  OnVersion COPY
>>>  Protected false
>>>  AllowsSameNameSiblings false
>>>
>>>  But I'm still able to add multiple galaxy:artifact nodes with the same
>>>  name as you see from this repository dump:
>>>
>>>  /workspaces/Default Workspace
>>>  /workspaces/Default Workspace/updated = 2008-02-20T11:17:21.920-08:00
>>>  /workspaces/Default Workspace/jcr:primaryType = galaxy:workspace
>>>  /workspaces/Default Workspace/jcr:mixinTypes = mix:referenceable
>>>  /workspaces/Default Workspace/jcr:uuid =
>>>  de38a3e0-9bc1-4406-9618-5d9ccde3883d
>>>  /workspaces/Default Workspace/name = Default Workspace
>>>  /workspaces/Default Workspace/hello_world.wsdl
>>>  /workspaces/Default Workspace/hello_world.wsdl/lifecycle =
>>> Default
>>>  /workspaces/Default Workspace/hello_world.wsdl/updated =
>>>  2008-02-20T11:17:23.434-08:00
>>>  /workspaces/Default Workspace/hello_world.wsdl/phase =
>>> Created
>>>  /workspaces/Default Workspace/hello_world.wsdl/contentType
>>> =
>>>  application/wsdl+xml
>>>  /workspaces/Default
>>> Workspace/hello_world.wsdl/jcr:primaryType =
>>>  galaxy:artifact
>>>  /workspaces/Default
>>> Workspace/hello_world.wsdl/jcr:mixinTypes =
>>>  mix:referenceable
>>>  /workspaces/Default Workspace/hello_world.wsdl/jcr:uuid =
>>>  492fbb9f-ee45-4910-8907-8db107895bad
>>>  /workspaces/Default Workspace/hello_world.wsdl/name = hello_world.wsdl
>>>  /workspaces/Default
>>> Workspace/hello_world.wsdl/documentType =
>>>  {http://schemas.xmlsoap.org/wsdl/}definitions
>>>  /workspaces/Default Workspace/hello_world.wsdl[2]
>>>  /workspaces/Default
>>> Workspace/hello_world.wsdl[2]/lifecycle = Default
>>>  /workspaces/Default Workspace/hello_world.wsdl[2]/updated
>>> =
>>>  2008-02-20T11:17:24.130-08:00
>>>  /workspaces/Default Workspace/hello_world.wsdl[2]/phase =
>>> Created
>>>  /workspaces/Default
>>> Workspace/hello_world.wsdl[2]/contentType =
>>>  application/wsdl+xml
>>>  /workspaces/Default
>>> Workspace/hello_world.wsdl[2]/jcr:primaryType =
>>>  galaxy:artifact
>>>  /workspaces/Default
>>> Workspace/hello_world.wsdl[2]/jcr:mixinTypes =
>>>  mix:referenceable
>>>  /workspaces/Default Workspace/hello_world.wsdl[2]/jcr:uuid
>>> =
>>>  e21883eb-4f98-46b4-8868-1ce80355a1a9
>>>  /workspaces/Default Workspace/hello_world.wsdl[2]/name =
>>> hello_world.wsdl
>>>  /workspaces/Default
>>> Workspace/hello_world.wsdl[2]/documentType =
>>>  {http://schemas.xmlsoap.org/wsdl/}definitions
>>>
>>>  As you can see, I have a parent node which is a galaxy:workspace and
>>>  multiple nodes with the same name :(. Any ideas what in the world I'm
>>>  doing wrong?
>>>
>>>  Also, as this is one of the best practices for JCR integration, 
>>> it'd be
>>>  great if the first hops guide detailed how to do this. Am I missing 
>>> some
>>>  obvious piece of documentation which explains all this?
>>>
>>>  Thanks
>>>  - Dan
>>>
>>>
>>>  --
>>>  Dan Diephouse
>>>  MuleSource
>>>  http://mulesource.com | http://netzooid.com/blog
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>  --
>>> Dan Diephouse
>>> MuleSource
>>> http://mulesource.com | http://netzooid.com/blog
>>>
>>>
>>>
>>>
>>>
>>>
>>>  --
>>> Dan Diephouse
>>> MuleSource
>>> http://mulesource.com | http://netzooid.com/blog
>>>
>>>     
>
>


-- 
Dan Diephouse
MuleSource
http://mulesource.com | http://netzooid.com/blog


Mime
View raw message