Question

I am just curious to know what is the difference between jcr:primaryType and jcr:mixinTypes, and why exactly does jcr:mixinTypes is used ? what does it signifies ? If you check /content/dam folder in crx it shows jcr:primaryType property value as sling:OrderedFolder and jcr:mixinTypes as mix:lockable,rep:AccessControllable where jcr:primaryType means this a sling folder but why mixin type. Also went through these docs http://www.day.com/specs/jcr/1.0/6.7.4_Primary_and_Mixin_Node_Types.html http://www.day.com/specs/jcr/1.0/6.7.5_Special_Properties_jcr_primaryType_and_jcr_mixinTypes.html but yet doesn't gives much insight to the difference.

Thanks.

Was it helpful?

Solution

A Node can have only one jcr:primaryType but it can have several jcr:mixinTypes, so it is correct to see the mixins as "traits" or additional aspects of a node.

While http://wiki.apache.org/jackrabbit/DavidsModel "Data First, Structure Later. Maybe" rule recommends using primary node types sparingly due to the strong constraints that they usually imply, mixins are much less constraining and very useful to identify nodes as having specific uses or properties.

The mix:lockable mixin that you mention, for example, is used to express that a node can be locked. As per http://www.day.com/specs/jcr/2.0/17_Locking.html, only nodes with mixin node type mix:lockable may hold locks. Any type of node can potentially be locked, so using a node type for that wouldn't work.

OTHER TIPS

First you should note that both properties jcr:primaryType and jcr:mixinTypes are defined in the super node nt:base then inherited by all other nodes.

The jcr:primaryType property specifies the base type of a node and will be assigned at node's creation time and you can think of it as the BASE class of an object in OO world. It can be done programatically with Node.setPrimaryType('some-primary-type') e.g: nt:file, nt:unstructured...

The jcr:mixinTypes property is a multi-value one (not a single property value but can have a list) and basically talking can be empty at node's creation since it is not a mondatory property and a node can have no jcr:mixinType at all. The node can get a mixin type added programatically with node.addMixin('some-mixin-type'). You can think of it as interfaces in OO world since a node can have multiple ones and they aim to add aditionnal properties (state/instance variable in OO world) to that node. e.g: mix:versionable, mix:referenceable

Mixin Types are similar to interfaces, one node could have multiple mixin types.

You can enable features for your node with mixins, for example tagging, see: Taggable content

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top