atom feed21 messages in org.apache.jackrabbit.oak-devInternal content in Oak
FromSent OnAttachments
Jukka ZittingJul 12, 2012 4:11 am 
Julian ReschkeJul 12, 2012 4:18 am 
Michael DürigJul 12, 2012 4:22 am 
Thomas MuellerJul 12, 2012 4:44 am 
Jukka ZittingJul 12, 2012 5:15 am 
Angela SchreiberJul 17, 2012 4:01 am 
Jukka ZittingJul 18, 2012 7:16 am 
Thomas MuellerJul 19, 2012 12:21 am 
Stefan GuggisbergJul 19, 2012 1:18 am 
Jukka ZittingJul 19, 2012 1:37 am 
Angela SchreiberJul 19, 2012 1:54 am 
Jukka ZittingJul 19, 2012 1:57 am 
Jukka ZittingJul 19, 2012 2:09 am 
Thomas MuellerJul 19, 2012 2:25 am 
Stefan GuggisbergJul 19, 2012 2:26 am 
Thomas MuellerJul 19, 2012 2:29 am 
Jukka ZittingJul 19, 2012 2:36 am 
Angela SchreiberJul 19, 2012 2:59 am 
Jukka ZittingJul 19, 2012 3:26 am 
Alexander KlimetschekJul 19, 2012 11:58 am 
Jukka ZittingJul 19, 2012 2:09 pm 
Subject:Internal content in Oak
From:Jukka Zitting (jukk@gmail.com)
Date:Jul 12, 2012 4:11:07 am
List:org.apache.jackrabbit.oak-dev

Hi,

The discussion about orderable nodes (OAK-169) brought up a topic that we'll be needing in a few other cases as well: How to handle extra internal content that's needed to implement specific JCR features, but that generally shouldn't be directly visible through the JCR API?

For example, the extra Oak-level property (or properties, depending on how we implement the feature) needed to keep track of JCR-level node ordering information needs to be available through the Oak API since oak-jcr needs it in order to correctly implement JCR methods like getNodes() or orderBefore(), but such extra properties shouldn't be directly visible to JCR clients as that would break application-level assumptions about node content and massively complicate node type handling.

One approach that's been in the air so far is to use some built-in "oak" namespace for such internal, and then filter out all content under that namespace in the oak-jcr layer. However, I believe we'll need such a namespace also for things that *are* visible to clients. For example the proposed "oak:unstructured" node type (i.e. "nt:unstructured" without orderable child nodes or same name siblings) would need to be visible to JCR clients, and things like query index configuration (OAK-178) fall in to the same category. Also, using a "normal" JCR namespace introduces a potential conflict with existing namespace prefixes.

So I was thinking of using an explicitly invalid JCR name pattern for such internal content. A nice one would be the ":name" pattern that's already used by the MicroKernel for the ":childNodeCount" and ":hash" pseudo-properties. For example, the child ordering information in OAK-169 could go to a ":childOrder" property that's visible through the Oak API and understood by things like namespace and node type validators. The oak-jcr component could then internally access and manipulate such properties, while automatically filtering them out from the set of content directly visible to the client.

WDYT?

BR,