You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by md...@apache.org on 2011/09/16 16:54:42 UTC

svn commit: r1171606 - in /jackrabbit/sandbox/jackrabbit-mk: jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/ jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/ jackrabbit-spi-commons/src/main/java/org/apache/jackr...

Author: mduerig
Date: Fri Sep 16 14:54:41 2011
New Revision: 1171606

URL: http://svn.apache.org/viewvc?rev=1171606&view=rev
Log:
Microkernel based Jackrabbit prototype (WIP) 
simplify initialisation   

Modified:
    jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/SessionImpl.java
    jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/WorkspaceImpl.java
    jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/WorkspaceManager.java
    jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/ChildNodeAttic.java
    jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/HierarchyManager.java
    jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/name/NameFactoryImpl.java
    jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi/src/main/java/org/apache/jackrabbit/spi/Path.java

Modified: jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/SessionImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/SessionImpl.java?rev=1171606&r1=1171605&r2=1171606&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/SessionImpl.java (original)
+++ jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/SessionImpl.java Fri Sep 16 14:54:41 2011
@@ -131,11 +131,9 @@ public class SessionImpl extends Abstrac
         this.config = config;
         this.sessionInfo = sessionInfo;
 
-        workspace = new WorkspaceImpl(sessionInfo.getWorkspaceName(), this, config, sessionInfo);
-
         // build local name-mapping
-        IdentifierResolver idResolver = new IdResolver();
-        npResolver = new DefaultNamePathResolver(this, idResolver, true);
+        npResolver = new DefaultNamePathResolver(this, new IdResolver(), true);
+        workspace = new WorkspaceImpl(this, sessionInfo, config);
 
         // build ValueFactory
         qValueFactory = config.getRepositoryService().getQValueFactory();
@@ -151,7 +149,6 @@ public class SessionImpl extends Abstrac
         HierarchyManager hMgr = getHierarchyManager();
         ItemCache cache = new ItemCache(this.config.getItemCacheSize());
         itemManager = new ItemManager(hMgr, this, cache);
-        hMgr.setResolver(npResolver);
     }
 
     public IdFactory getIdFactory() {

Modified: jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/WorkspaceImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/WorkspaceImpl.java?rev=1171606&r1=1171605&r2=1171606&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/WorkspaceImpl.java (original)
+++ jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/WorkspaceImpl.java Fri Sep 16 14:54:41 2011
@@ -95,14 +95,12 @@ public class WorkspaceImpl implements Wo
     private LockManager lockMgr;
     private VersionManagerImpl versionManager;
 
-    public WorkspaceImpl(String name, SessionImpl session, RepositoryConfig config, SessionInfo sessionInfo)
+    public WorkspaceImpl(SessionImpl session, SessionInfo sessionInfo, RepositoryConfig config)
             throws RepositoryException {
         
-        this.name = name;
+        name = sessionInfo.getWorkspaceName();
         this.session = session;
-
-        wspManager = new WorkspaceManager(config.getRepositoryService(), sessionInfo, session.getCacheBehaviour(),
-                session.getPollTimeout(), this.session.isSupportedOption(Repository.OPTION_OBSERVATION_SUPPORTED));
+        wspManager = new WorkspaceManager(session, sessionInfo, config);
     }
 
     //----------------------------------------------------------< Workspace >---

Modified: jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/WorkspaceManager.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/WorkspaceManager.java?rev=1171606&r1=1171605&r2=1171606&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/WorkspaceManager.java (original)
+++ jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/WorkspaceManager.java Fri Sep 16 14:54:41 2011
@@ -17,6 +17,7 @@
 package org.apache.jackrabbit.jcr2spi;
 
 import org.apache.jackrabbit.jcr2spi.config.CacheBehaviour;
+import org.apache.jackrabbit.jcr2spi.config.RepositoryConfig;
 import org.apache.jackrabbit.jcr2spi.hierarchy.HierarchyEventListener;
 import org.apache.jackrabbit.jcr2spi.hierarchy.HierarchyManager;
 import org.apache.jackrabbit.jcr2spi.nodetype.EffectiveNodeTypeProvider;
@@ -90,6 +91,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import javax.jcr.NamespaceRegistry;
+import javax.jcr.Repository;
 import javax.jcr.RepositoryException;
 import javax.jcr.UnsupportedRepositoryOperationException;
 import javax.jcr.lock.LockException;
@@ -116,10 +118,9 @@ public final class WorkspaceManager impl
     private final NameFactory nameFactory;
     private final PathFactory pathFactory;
 
-    private final ItemStateFactory isf;
+    private final TransientItemStateFactory itemStateFactory;
     private final HierarchyManager hierarchyManager;
 
-    private final CacheBehaviour cacheBehaviour;
     private final int pollTimeout;
 
     private final IdFactory idFactory;
@@ -158,15 +159,13 @@ public final class WorkspaceManager impl
      */
     private ItemInfoCache cache;
 
-    public WorkspaceManager(RepositoryService service, SessionInfo sessionInfo, CacheBehaviour cacheBehaviour,
-            int pollTimeout, boolean observationSupported)
+    public WorkspaceManager(SessionImpl session, SessionInfo sessionInfo, RepositoryConfig config)
             throws RepositoryException {
 
-        this.service = service;
+        service = config.getRepositoryService();
         this.sessionInfo = sessionInfo;
-        this.cacheBehaviour = cacheBehaviour;
-        this.pollTimeout = observationSupported
-            ? pollTimeout
+        pollTimeout = session.isSupportedOption(Repository.OPTION_OBSERVATION_SUPPORTED)
+            ? session.getPollTimeout()
             : -1;
                 
         nameFactory = service.getNameFactory();
@@ -177,17 +176,16 @@ public final class WorkspaceManager impl
         ntRegistry = createNodeTypeRegistry(nsRegistry);
         definitionProvider = createDefinitionProvider(getEffectiveNodeTypeProvider());
 
-        TransientItemStateFactory stateFactory = createItemStateFactory();
-        isf = stateFactory;
-        hierarchyManager = createHierarchyManager(stateFactory, idFactory);
+        itemStateFactory = createItemStateFactory();
+        hierarchyManager = new HierarchyManager(itemStateFactory, idFactory, pathFactory, session.getNamePathResolver());
 
         // If cache behavior is observation register a hierarchy listener which is
         // notified about all changes. Otherwise just add a hierarchy listener which
         // is only notified on changes for which client event listeners have been
         // installed. Note: this listener has to be the first one called in order
         // for the hierarchy to be consistent with the event (See JCR-2293).
-        InternalEventListener listener = createHierarchyListener(hierarchyManager);
-        if (cacheBehaviour == CacheBehaviour.OBSERVATION) {
+        InternalEventListener listener = new HierarchyEventListener(this, hierarchyManager, config.getCacheBehaviour());
+        if (config.getCacheBehaviour() == CacheBehaviour.OBSERVATION) {
             addEventListener(listener);
         } else {
             listeners.add(listener);
@@ -231,7 +229,7 @@ public final class WorkspaceManager impl
     }
 
     public ItemStateFactory getItemStateFactory() {
-        return isf;
+        return itemStateFactory;
     }
 
     public LockInfo getLockInfo(NodeId nodeId) throws RepositoryException {
@@ -428,7 +426,8 @@ public final class WorkspaceManager impl
     public void setUserData(String userData) throws RepositoryException {
         sessionInfo.setUserData(userData);
     }
-    //--------------------------------------------------------------------------
+
+    //------------------------------------------< private >---
 
     /**
      * Gets the event filters from the passed listener list.
@@ -457,24 +456,6 @@ public final class WorkspaceManager impl
     }
 
     /**
-     * @param transientISF The transient item state factory.
-     * @param idFactory The id factory.
-     * @return a new instance of {@code HierarchyManager}.
-     * @throws javax.jcr.RepositoryException If an error occurs.
-     */
-    private HierarchyManager createHierarchyManager(TransientItemStateFactory transientISF, IdFactory idFactory) {
-        return new HierarchyManager(transientISF, idFactory, getPathFactory());
-    }
-
-    /**
-     * @param hierarchyMgr The hierarchy manager.
-     * @return a new InternalEventListener
-     */
-    private InternalEventListener createHierarchyListener(HierarchyManager hierarchyMgr) {
-        return new HierarchyEventListener(this, hierarchyMgr, cacheBehaviour);
-    }
-
-    /**
      * @param nsRegistry The namespace registry.
      * @return an instance of {@code NodeTypeRegistryImpl}.
      */

Modified: jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/ChildNodeAttic.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/ChildNodeAttic.java?rev=1171606&r1=1171605&r2=1171606&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/ChildNodeAttic.java (original)
+++ jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/ChildNodeAttic.java Fri Sep 16 14:54:41 2011
@@ -101,7 +101,7 @@ class ChildNodeAttic {
     }
 
     boolean remove(NodeEntry movedEntry) {
-        return attic.contains(movedEntry) && attic.remove(movedEntry);
+        return attic.remove(movedEntry);
     }
 
 }
\ No newline at end of file

Modified: jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/HierarchyManager.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/HierarchyManager.java?rev=1171606&r1=1171605&r2=1171606&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/HierarchyManager.java (original)
+++ jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/HierarchyManager.java Fri Sep 16 14:54:41 2011
@@ -44,19 +44,15 @@ public class HierarchyManager {
     private final NodeEntry rootEntry;
     private final UniqueIdResolver uniqueIdResolver;
     private final IdFactory idFactory;
-    private NamePathResolver resolver;
+    private final NamePathResolver namePathResolver;
+
+    public HierarchyManager(TransientItemStateFactory isf, IdFactory idFactory, PathFactory pathFactory,
+            NamePathResolver namePathResolver) {
 
-    public HierarchyManager(TransientItemStateFactory isf, IdFactory idFactory, PathFactory pathFactory) {
         uniqueIdResolver = new UniqueIdResolver(isf);
         rootEntry = new EntryFactory(isf, idFactory, uniqueIdResolver, pathFactory).createRootEntry();
         this.idFactory = idFactory;
-    }
-
-    public void setResolver(NamePathResolver resolver) {
-        this.resolver = resolver;
-        if (rootEntry instanceof HierarchyEntry) {
-            rootEntry.factory.setResolver(resolver);
-        }
+        this.namePathResolver = namePathResolver;
     }
 
     //---------------------------------------------------< HierarchyManager >---
@@ -178,7 +174,7 @@ public class HierarchyManager {
         } else {
             if (propertyId.getPath() == null) {
                 // a property id always contains a Path part.
-                throw new ItemNotFoundException("No property found for id " + LogUtil.saveGetIdString(propertyId, resolver));
+                throw new ItemNotFoundException("No property found for id " + LogUtil.saveGetIdString(propertyId, namePathResolver));
             } else {
                 NodeEntry nEntry = uniqueIdResolver.resolve(idFactory.createNodeId(uniqueID), rootEntry);
                 return nEntry.getDeepPropertyEntry(propertyId.getPath());
@@ -223,7 +219,7 @@ public class HierarchyManager {
             if (state.isValid()) {
                 return state;
             } else {
-                throw new PathNotFoundException(LogUtil.safeGetJCRPath(qPath, resolver));
+                throw new PathNotFoundException(LogUtil.safeGetJCRPath(qPath, namePathResolver));
             }
         } catch (ItemNotFoundException e) {
             throw new PathNotFoundException(e);
@@ -246,7 +242,7 @@ public class HierarchyManager {
             if (state.isValid()) {
                 return state;
             } else {
-                throw new PathNotFoundException(LogUtil.safeGetJCRPath(qPath, resolver));
+                throw new PathNotFoundException(LogUtil.safeGetJCRPath(qPath, namePathResolver));
             }
         } catch (ItemNotFoundException e) {
             throw new PathNotFoundException(e);

Modified: jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/name/NameFactoryImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/name/NameFactoryImpl.java?rev=1171606&r1=1171605&r2=1171606&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/name/NameFactoryImpl.java (original)
+++ jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/name/NameFactoryImpl.java Fri Sep 16 14:54:41 2011
@@ -42,6 +42,7 @@ public class NameFactoryImpl implements 
     }
 
     //--------------------------------------------------------< NameFactory >---
+    
     /**
      * @see NameFactory#create(String, String)
      */
@@ -83,6 +84,7 @@ public class NameFactoryImpl implements 
     }
 
     //--------------------------------------------------------< inner class >---
+    
     /**
      * Inner class implementing the {@code Name} interface.
      */
@@ -118,6 +120,7 @@ public class NameFactoryImpl implements 
         }
 
         //-----------------------------------------------------------< Name >---
+        
         /**
          * @see Name#getLocalName()
          */
@@ -135,6 +138,7 @@ public class NameFactoryImpl implements 
         }
 
         //---------------------------------------------------------< Object >---
+
         /**
          * Returns the string representation of this {@code Name} in the
          * following format:
@@ -204,6 +208,7 @@ public class NameFactoryImpl implements 
         }
 
         //------------------------------------------------------< Cloneable >---
+
         /**
          * Creates a clone of this {@code Name}.
          * Overridden in order to make {@code clone()} public.
@@ -219,6 +224,7 @@ public class NameFactoryImpl implements 
         }
 
         //-----------------------------------------------------< Comparable >---
+        
         /**
          * Compares two {@code Name}s.
          *
@@ -240,6 +246,7 @@ public class NameFactoryImpl implements 
         }
 
         //---------------------------------------------------< Serializable >---
+        
         /**
          * Creates a new {@code Name} instance using the proper constructor
          * during deserialization in order to make sure that internalized strings

Modified: jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi/src/main/java/org/apache/jackrabbit/spi/Path.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi/src/main/java/org/apache/jackrabbit/spi/Path.java?rev=1171606&r1=1171605&r2=1171606&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi/src/main/java/org/apache/jackrabbit/spi/Path.java (original)
+++ jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi/src/main/java/org/apache/jackrabbit/spi/Path.java Fri Sep 16 14:54:41 2011
@@ -481,6 +481,7 @@ public interface Path extends Serializab
     String getString();
 
     //----------------------------------------------------< inner interface >---
+    
     /**
      * Object representation of a single JCR path element. An {@code Element}
      * object contains the {@code Name} and optional index of a single