You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by st...@apache.org on 2011/03/18 17:32:12 UTC

svn commit: r1082964 - /jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/MicroKernel.java

Author: stefan
Date: Fri Mar 18 16:32:12 2011
New Revision: 1082964

URL: http://svn.apache.org/viewvc?rev=1082964&view=rev
Log:
drafting a MicroKernel api (WIP)

Modified:
    jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/MicroKernel.java

Modified: jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/MicroKernel.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/MicroKernel.java?rev=1082964&r1=1082963&r2=1082964&view=diff
==============================================================================
--- jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/MicroKernel.java (original)
+++ jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/MicroKernel.java Fri Mar 18 16:32:12 2011
@@ -19,7 +19,7 @@ package org.apache.jackrabbit.mk;
 import java.io.InputStream;
 
 /**
- * The Repository <code>MicroKernel</code> design goals/principles:
+ * The MicroKernel <b>design goals/principles</b>:
  * <ul>
  * <li>manage huge trees of nodes and properties efficiently</li>
  * <li>MVCC-based concurrency control</li>
@@ -32,7 +32,7 @@ import java.io.InputStream;
  * <li>integrated DataStore for storing/retrieving large binaries</li>
  * </ul>
  *
- * The MicroKernel Data Model:
+ * The MicroKernel <b>Data Model</b>:
  * <ul>
  * <li>simple JSON-inspired data model: just nodes and properties</li>
  * <li>a node is represented as an object, consisting of an unordered collection
@@ -47,39 +47,42 @@ import java.io.InputStream;
  * a child node, sharing the same parent node, cannot have the same name</li>
  * </ul>
  *
- * @todo check DavEx protocol for potential overlap/input (e.g. JSON format)
+ * <b>Architecture (overview)</b>:
+ * <ol>
+ * <li>JCR (full TCK-compliant implementation)</li>
+ * <li>SPI (node types, workspaces, namespaces, access control, search, locking, ...)</li>
+ * <li><i>MicroKernel</i></li>
+ * </ol>
  *
- * Architecture (overview):
+ * <b>TBD</b>:
  * <ul>
- * <li>JCR (full TCK-compliant implementation)</li>
- * <li>SPI (node types, namespaces, access control, search, locking, ...)</li>
- * <li><b><i>MicroKernel</i></b></li>
+ * <li>The concept of JCR workspaces is decorated by the SPI layer as top-level nodes
+ *     in the MicroKernel (e.g. /default. /system); there's no need for
+ *     inter-workspace operations, allows simplified versioning implementation</li>
+ * <li>should the MicroKernel support (polling) observation?
+ *     => <code>getRevisions/getJournal</code> should be sufficient</li>
+ * <li>nodes are primarily accessed by path. node identifiers (nodeId) are
+ *     optional. if a new node is committed with a special marker property
+ *     (e.g. <code>":id" : null</code>), a system-generated unique identifier will be
+ *     assigned and exposed through the same <code>:id</code> property;
+ *     the MicroKernel maintains an id<->path index</li>
+ * <li><code>jcr:uuid</code> is decorated by the SPI on top of MicroKernel;
+ *     <code>jcr:uuid</code> is equivalent to the MicroKernel node identifier (<code>:id</code>)</li>
+ * <li>should the MicroKernel provide built-in support for shareable nodes?
+ *     => no (tentative)</li>
  * </ul>
  *
- * TBD:
- *
- * - workspaces are just top-level nodes (e.g. /default. /system)
- *   => no need for inter-workspace operations, simplified versioning implementation
- *
- * - should the MicroKernel support (polling) observation? are getHistory/diff good enough?
- *
- * - nodeId is unique per repository and system-generated (e.g. sha1 or similar)
- *   is the concept of a nodeId really required? if yes, how should the nodeId
- *   be exposed? as a system-generated synthetic property? should every node
- *   have a nodeId? if not, what governs the assignment of a nodeId?
- *   => marker property ":id": null, value will be assigned on node creation
- *
- * - jcr:uuid is a regular property, decorated on top of rmk, will require an external
- *   uuid2nodeId index; alternatively jcr:uuid 'is' the nodeId -> no separate
- *   index required  => marker property? ":id"
- *
- * - should the MicroKernel provide native support for shareable nodes?  => probably no
- *
- * JSON/JSOP:
+ * <b>JSON/JSOP</b>:
+ * <ul>
+ * <li>do we need to specify a 'reorder' op in jsop? perhaps based on 'move'?
+ *     => check full JSOP spec and davex</li>
+ * <li>do we need to specify a 'copy' op in jsop?
+ *     => check full JSOP spec and davex</li>
+ * <li>how should an incomplete list of child nodes be represented in json?
+ *     => length(array) != :childNodeCount</li>
+ * </ul>
  *
- * - do we need to specify a 'reorder' op in jsop? perhaps based on 'move'?  => davex
- * - do we need to specify a 'copy' op in jsop? => check full JSOP spec and davex
- * - how should an incomplete list of child nodes be represented in json? => length(array) != :childNodeCount
+ * @todo check DavEx protocol for potential overlap/input (e.g. JSON format)
  */
 public interface MicroKernel {