So...

1) NodeImpl tries to set jcr:uuid when needed (this is still a hack because it should happen down in the stack, and take the actual effective node type into account)

2) identifiers are the jcr:uuids for referenceable nodes (right now actual UUIDs, but they don't have to) or absolute oak paths otherwise.

This needs to be changed to ID-if-closest-parent-plus-relative path.

3) Lookup by UUID happens through a query.

This works well so far (thanks, Thomas!); the main issues here are

- the internal query API disagrees on the path format (it includes the workspace name), so I needed to hack around it

- a more general issue: do we have a requirement to keep session.getNodeByUUID() working even though the query system is in trouble? (like index broken?)

Feedback appreciated, Julian


On 2012-05-24 17:50, [email protected] wrote:
Author: reschke
Date: Thu May 24 15:50:05 2012
New Revision: 1342304

URL: http://svn.apache.org/viewvc?rev=1342304&view=rev
Log:
OAK-23: implement lookup by identifier using Query (WIP)

Modified:
     
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionDelegate.java

Modified: 
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionDelegate.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionDelegate.java?rev=1342304&r1=1342303&r2=1342304&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionDelegate.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionDelegate.java
 Thu May 24 15:50:05 2012
@@ -138,7 +138,7 @@ public class SessionDelegate {
          }
          else {
              // referenceable
-            return findByJcrUuid(getTree(""), id);
+            return findByJcrUuid(id);
          }
      }

@@ -350,7 +350,7 @@ public class SessionDelegate {
      }

      @CheckForNull
-    NodeDelegate findByJcrUuid(Tree tree, String id) {
+    NodeDelegate findByJcrUuid(String id) {

          try {
              Map<String, CoreValue>  bindings = Collections.singletonMap("id", 
getValueFactory().getCoreValueFactory()
@@ -377,24 +377,31 @@ public class SessionDelegate {
              log.error("query failed", ex);
              return null;
          }
-
-        // Tree-walking implementation...
-        // PropertyState p = tree.getProperty("jcr:uuid");
-        // if (p != null&&  id.equals(p.getValue().getString())) {
-        // return new NodeDelegate(this, tree);
-        // }
-        // else {
-        // for (Tree c : tree.getChildren()) {
-        // NodeDelegate found = findByJcrUuid(c, id);
-        // if (found != null) {
-        // return found;
-        // }
-        // }
-        // }
-        //
-        // return null;
      }

+//    @CheckForNull
+//    NodeDelegate slowFindByJcrUuid(String id) {
+//        return slowFindByJcrUuid(getTree(""), id);
+//    }
+//
+//    @CheckForNull
+//    NodeDelegate slowFindByJcrUuid(Tree tree, String id) {
+//        // Tree-walking implementation...
+//        PropertyState p = tree.getProperty("jcr:uuid");
+//        if (p != null&&  id.equals(p.getValue().getString())) {
+//            return new NodeDelegate(this, tree);
+//        } else {
+//            for (Tree c : tree.getChildren()) {
+//                NodeDelegate found = slowFindByJcrUuid(c, id);
+//                if (found != null) {
+//                    return found;
+//                }
+//            }
+//        }
+//
+//        return null;
+//    }
+
      //--------------------------------------------------<  
SessionNameMapper>---

      private class SessionNameMapper extends AbstractNameMapper {




Reply via email to