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:02:29 GMT
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