You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by ju...@apache.org on 2010/05/27 12:18:57 UTC

svn commit: r948757 - /jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/

Author: jukka
Date: Thu May 27 10:18:56 2010
New Revision: 948757

URL: http://svn.apache.org/viewvc?rev=948757&view=rev
Log:
JCR-2640: Internal repository context

Commit the first draft patch, more updates to come...

Added:
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryContext.java   (with props)
Modified:
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryCopier.java
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryImpl.java
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryManagerImpl.java
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/SessionImpl.java
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/SystemSession.java
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/WorkspaceImpl.java
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/XASessionImpl.java
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/XAWorkspace.java

Added: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryContext.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryContext.java?rev=948757&view=auto
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryContext.java (added)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryContext.java Thu May 27 10:18:56 2010
@@ -0,0 +1,157 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.core;
+
+import org.apache.jackrabbit.core.id.NodeId;
+import org.apache.jackrabbit.core.nodetype.NodeTypeRegistry;
+import org.apache.jackrabbit.core.version.InternalVersionManagerImpl;
+
+/**
+ * Internal component context of a Jackrabbit content repository.
+ * A repository context consists of the internal repository-level
+ * components and resources like the namespace and node type
+ * registries. Access to these resources is available only to objects
+ * with a reference to the context object.
+ */
+public class RepositoryContext {
+
+    /**
+     * The repository instance to which this context is associated.
+     */
+    private final RepositoryImpl repository;
+
+    /**
+     * The namespace registry of this repository.
+     */
+    private NamespaceRegistryImpl namespaceRegistry;
+
+    /**
+     * The node type registry of this repository.
+     */
+    private NodeTypeRegistry nodeTypeRegistry;
+
+    /**
+     * The internal version manager of this repository.
+     */
+    private InternalVersionManagerImpl internalVersionManager;
+
+    /**
+     * The root node identifier of this repository.
+     */
+    private NodeId rootNodeId;
+
+    /**
+     * Creates a component context for the given repository.
+     *
+     * @param repository repository instance
+     */
+    RepositoryContext(RepositoryImpl repository) {
+        assert repository != null;
+        this.repository = repository;
+    }
+
+    /**
+     * Returns the repository instance to which this context is associated.
+     *
+     * @return repository instance
+     */
+    public RepositoryImpl getRepository() {
+        return repository;
+    }
+
+    /**
+     * Returns the namespace registry of this repository.
+     *
+     * @return namespace registry
+     */
+    public NamespaceRegistryImpl getNamespaceRegistry() {
+        assert namespaceRegistry != null;
+        return namespaceRegistry;
+    }
+
+    /**
+     * Sets the namespace registry of this repository.
+     *
+     * @param namespaceRegistry namespace registry
+     */
+    void setNamespaceRegistry(NamespaceRegistryImpl namespaceRegistry) {
+        assert namespaceRegistry != null;
+        this.namespaceRegistry = namespaceRegistry;
+    }
+
+    /**
+     * Returns the namespace registry of this repository.
+     *
+     * @return node type registry
+     */
+    public NodeTypeRegistry getNodeTypeRegistry() {
+        assert nodeTypeRegistry != null;
+        return nodeTypeRegistry;
+    }
+
+    /**
+     * Sets the node type registry of this repository.
+     *
+     * @param nodeTypeRegistry node type registry
+     */
+    void setNodeTypeRegistry(NodeTypeRegistry nodeTypeRegistry) {
+        assert nodeTypeRegistry != null;
+        this.nodeTypeRegistry = nodeTypeRegistry;
+    }
+
+    /**
+     * Returns the internal version manager of this repository.
+     *
+     * @return internal version manager
+     */
+    public InternalVersionManagerImpl getInternalVersionManager() {
+        assert internalVersionManager != null;
+        return internalVersionManager;
+    }
+
+    /**
+     * Sets the internal version manager of this repository.
+     *
+     * @param internalVersionManager internal version manager
+     */
+    void setInternalVersionManager(
+            InternalVersionManagerImpl internalVersionManager) {
+        assert internalVersionManager != null;
+        this.internalVersionManager = internalVersionManager;
+    }
+
+    /**
+     * Returns the root node identifier of this repository.
+     *
+     * @return root node identifier
+     */
+    public NodeId getRootNodeId() {
+        assert rootNodeId != null;
+        return rootNodeId;
+    }
+
+    /**
+     * Sets the root node identifier of this repository.
+     *
+     * @param rootNodeId root node identifier
+     */
+    void setRootNodeId(NodeId rootNodeId) {
+        assert rootNodeId != null;
+        this.rootNodeId = rootNodeId;
+    }
+
+}

Propchange: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryContext.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryCopier.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryCopier.java?rev=948757&r1=948756&r2=948757&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryCopier.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryCopier.java Thu May 27 10:18:56 2010
@@ -209,8 +209,8 @@ public class RepositoryCopier {
     }
 
     private void copyNamespaces() throws RepositoryException {
-        NamespaceRegistry sourceRegistry = source.getNamespaceRegistry();
-        NamespaceRegistry targetRegistry = target.getNamespaceRegistry();
+        NamespaceRegistry sourceRegistry = source.context.getNamespaceRegistry();
+        NamespaceRegistry targetRegistry = target.context.getNamespaceRegistry();
 
         logger.info("Copying registered namespaces");
         Collection<String> existing = Arrays.asList(targetRegistry.getURIs());
@@ -224,8 +224,8 @@ public class RepositoryCopier {
     }
 
     private void copyNodeTypes() throws RepositoryException {
-        NodeTypeRegistry sourceRegistry = source.getNodeTypeRegistry();
-        NodeTypeRegistry targetRegistry = target.getNodeTypeRegistry();
+        NodeTypeRegistry sourceRegistry = source.context.getNodeTypeRegistry();
+        NodeTypeRegistry targetRegistry = target.context.getNodeTypeRegistry();
 
         logger.info("Copying registered node types");
         Collection<Name> existing =
@@ -247,8 +247,8 @@ public class RepositoryCopier {
     private void copyVersionStore() throws RepositoryException {
         logger.info("Copying version histories");
         PersistenceCopier copier = new PersistenceCopier(
-                source.getVersionManagerImpl().getPersistenceManager(),
-                target.getVersionManagerImpl().getPersistenceManager(),
+                source.context.getInternalVersionManager().getPersistenceManager(),
+                target.context.getInternalVersionManager().getPersistenceManager(),
                 target.getDataStore());
         copier.copy(RepositoryImpl.VERSION_STORAGE_NODE_ID);
         copier.copy(RepositoryImpl.ACTIVITIES_NODE_ID);

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryImpl.java?rev=948757&r1=948756&r2=948757&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryImpl.java Thu May 27 10:18:56 2010
@@ -42,7 +42,6 @@ import java.util.concurrent.atomic.Atomi
 import javax.jcr.AccessDeniedException;
 import javax.jcr.Credentials;
 import javax.jcr.LoginException;
-import javax.jcr.NamespaceRegistry;
 import javax.jcr.NoSuchWorkspaceException;
 import javax.jcr.PropertyType;
 import javax.jcr.Repository;
@@ -167,11 +166,8 @@ public class RepositoryImpl extends Abst
      */
     private final Map<String, DescriptorValue> repDescriptors = new HashMap<String, DescriptorValue>();
 
-    private NodeId rootNodeId;
+    protected final RepositoryContext context = new RepositoryContext(this);
 
-    private final NamespaceRegistryImpl nsReg;
-    private final NodeTypeRegistry ntReg;
-    private final InternalVersionManagerImpl vMgr;
     private final VirtualNodeTypeStateManager virtNTMgr;
 
     /**
@@ -322,14 +318,16 @@ public class RepositoryImpl extends Abst
             metaDataStore = new BasedFileSystem(repStore, fsRootPath);
 
             // init root node uuid
-            rootNodeId = loadRootNodeId(metaDataStore);
+            context.setRootNodeId(loadRootNodeId(metaDataStore));
 
             // initialize repository descriptors
             initRepositoryDescriptors();
 
             // create registries
-            nsReg = createNamespaceRegistry(new BasedFileSystem(repStore, "/namespaces"));
-            ntReg = createNodeTypeRegistry(nsReg, new BasedFileSystem(repStore, "/nodetypes"));
+            context.setNamespaceRegistry(createNamespaceRegistry(
+                    new BasedFileSystem(repStore, "/namespaces")));
+            context.setNodeTypeRegistry(createNodeTypeRegistry(
+                    new BasedFileSystem(repStore, "/nodetypes")));
 
             dataStore = repConfig.getDataStore();
 
@@ -344,22 +342,24 @@ public class RepositoryImpl extends Abst
             // will be interested in
             if (repConfig.getClusterConfig() != null) {
                 clusterNode = createClusterNode();
-                nsReg.setEventChannel(clusterNode);
-                ntReg.setEventChannel(clusterNode);
+                context.getNamespaceRegistry().setEventChannel(clusterNode);
+                context.getNodeTypeRegistry().setEventChannel(clusterNode);
 
                 createWorkspaceEventChannel = clusterNode;
                 clusterNode.setListener(this);
             }
 
             // init version manager
-            vMgr = createVersionManager(repConfig.getVersioningConfig(),
-                    delegatingDispatcher);
+            InternalVersionManagerImpl vMgr = createVersionManager(
+                    repConfig.getVersioningConfig(), delegatingDispatcher);
+            context.setInternalVersionManager(vMgr);
             if (clusterNode != null) {
                 vMgr.setEventChannel(clusterNode.createUpdateChannel(null));
             }
 
             // init virtual node type manager
-            virtNTMgr = new VirtualNodeTypeStateManager(getNodeTypeRegistry(),
+            virtNTMgr = new VirtualNodeTypeStateManager(
+                    context.getNodeTypeRegistry(),
                     delegatingDispatcher, NODETYPES_NODE_ID, SYSTEM_ROOT_NODE_ID);
 
             // initialize startup workspaces
@@ -499,17 +499,14 @@ public class RepositoryImpl extends Abst
 
 
         FileSystem fs = vConfig.getFileSystem();
-        PersistenceManager pm = createPersistenceManager(vConfig.getHomeDir(),
-                fs,
-                vConfig.getPersistenceManagerConfig(),
-                rootNodeId,
-                nsReg,
-                ntReg,
-                dataStore);
+        PersistenceManager pm = createPersistenceManager(
+                vConfig.getHomeDir(), fs,
+                vConfig.getPersistenceManagerConfig(), dataStore);
 
         ISMLocking ismLocking = vConfig.getISMLocking();
 
-        return new InternalVersionManagerImpl(pm, fs, ntReg, delegatingDispatcher,
+        return new InternalVersionManagerImpl(
+                pm, fs, context.getNodeTypeRegistry(), delegatingDispatcher,
                 SYSTEM_ROOT_NODE_ID,
                 VERSION_STORAGE_NODE_ID,
                 ACTIVITIES_NODE_ID,
@@ -654,10 +651,9 @@ public class RepositoryImpl extends Abst
      * @return
      * @throws RepositoryException
      */
-    protected NodeTypeRegistry createNodeTypeRegistry(NamespaceRegistry nsReg,
-                                                      FileSystem fs)
+    protected NodeTypeRegistry createNodeTypeRegistry(FileSystem fs)
             throws RepositoryException {
-        return NodeTypeRegistry.create(nsReg, fs);
+        return NodeTypeRegistry.create(context.getNamespaceRegistry(), fs);
     }
 
     /**
@@ -696,9 +692,12 @@ public class RepositoryImpl extends Abst
         if (systemSearchMgr == null) {
             if (repConfig.isSearchEnabled()) {
                 systemSearchMgr = new SearchManager(
-                        repConfig, nsReg, ntReg,
+                        repConfig,
+                        context.getNamespaceRegistry(),
+                        context.getNodeTypeRegistry(),
                         getWorkspaceInfo(wspName).itemStateMgr,
-                        vMgr.getPersistenceManager(), SYSTEM_ROOT_NODE_ID,
+                        context.getInternalVersionManager().getPersistenceManager(),
+                        SYSTEM_ROOT_NODE_ID,
                         null, null, executor);
 
                 SystemSession defSysSession = getSystemSession(wspName);
@@ -728,22 +727,6 @@ public class RepositoryImpl extends Abst
         }
     }
 
-    protected NamespaceRegistryImpl getNamespaceRegistry() {
-        return nsReg;
-    }
-
-    protected NodeTypeRegistry getNodeTypeRegistry() {
-        return ntReg;
-    }
-
-    protected InternalVersionManager getVersionManager() {
-        return vMgr;
-    }
-
-    protected NodeId getRootNodeId() {
-        return rootNodeId;
-    }
-
     /**
      * Returns the names of <i>all</i> workspaces in this repository.
      *
@@ -1176,12 +1159,10 @@ public class RepositoryImpl extends Abst
             }
         }
 
-        if (vMgr != null) {
-            try {
-                vMgr.close();
-            } catch (Exception e) {
-                log.error("Error while closing Version Manager.", e);
-            }
+        try {
+            context.getInternalVersionManager().close();
+        } catch (Exception e) {
+            log.error("Error while closing Version Manager.", e);
         }
 
         repDescriptors.clear();
@@ -1244,10 +1225,6 @@ public class RepositoryImpl extends Abst
         return repConfig;
     }
 
-    InternalVersionManagerImpl getVersionManagerImpl() {
-        return vMgr;
-    }
-
     /**
      * Returns the repository file system.
      * @return repository file system
@@ -1416,17 +1393,17 @@ public class RepositoryImpl extends Abst
      * @throws RepositoryException if the persistence manager could
      *                             not be instantiated/initialized
      */
-    private static PersistenceManager createPersistenceManager(File homeDir,
-                                                               FileSystem fs,
-                                                               PersistenceManagerConfig pmConfig,
-                                                               NodeId rootNodeId,
-                                                               NamespaceRegistry nsReg,
-                                                               NodeTypeRegistry ntReg,
-                                                               DataStore dataStore)
-            throws RepositoryException {
+    private PersistenceManager createPersistenceManager(
+            File homeDir, FileSystem fs, PersistenceManagerConfig pmConfig,
+            DataStore dataStore) throws RepositoryException {
         try {
             PersistenceManager pm = pmConfig.newInstance(PersistenceManager.class);
-            pm.init(new PMContext(homeDir, fs, rootNodeId, nsReg, ntReg, dataStore));
+            pm.init(new PMContext(
+                    homeDir, fs,
+                    context.getRootNodeId(),
+                    context.getNamespaceRegistry(),
+                    context.getNodeTypeRegistry(),
+                    dataStore));
             return pm;
         } catch (Exception e) {
             String msg = "Cannot instantiate persistence manager " + pmConfig.getClassName();
@@ -1438,8 +1415,6 @@ public class RepositoryImpl extends Abst
      * Creates a <code>SharedItemStateManager</code> or derivative.
      *
      * @param persistMgr     persistence manager
-     * @param rootNodeId     root node id
-     * @param ntReg          node type registry
      * @param usesReferences <code>true</code> if the item state manager should use
      *                       node references to verify integrity of its reference properties;
      *                       <code>false</code> otherwise
@@ -1447,15 +1422,15 @@ public class RepositoryImpl extends Abst
      * @return item state manager
      * @throws ItemStateException if an error occurs
      */
-    protected SharedItemStateManager createItemStateManager(PersistenceManager persistMgr,
-                                                            NodeId rootNodeId,
-                                                            NodeTypeRegistry ntReg,
-                                                            boolean usesReferences,
-                                                            ItemStateCacheFactory cacheFactory,
-                                                            ISMLocking locking)
+    protected SharedItemStateManager createItemStateManager(
+            PersistenceManager persistMgr, boolean usesReferences,
+            ItemStateCacheFactory cacheFactory, ISMLocking locking)
             throws ItemStateException {
-
-        return new SharedItemStateManager(persistMgr, rootNodeId, ntReg, true, cacheFactory, locking);
+        return new SharedItemStateManager(
+                persistMgr,
+                context.getRootNodeId(),
+                context.getNodeTypeRegistry(),
+                true, cacheFactory, locking);
     }
 
     //-----------------------------------------------------------< Repository >
@@ -1598,8 +1573,7 @@ public class RepositoryImpl extends Abst
     protected SessionImpl createSessionInstance(AuthContext loginContext,
                                                 WorkspaceConfig wspConfig)
             throws AccessDeniedException, RepositoryException {
-
-        return new XASessionImpl(this, loginContext, wspConfig);
+        return new XASessionImpl(context, loginContext, wspConfig);
     }
 
     /**
@@ -1616,8 +1590,7 @@ public class RepositoryImpl extends Abst
     protected SessionImpl createSessionInstance(Subject subject,
                                                 WorkspaceConfig wspConfig)
             throws AccessDeniedException, RepositoryException {
-
-        return new XASessionImpl(this, subject, wspConfig);
+        return new XASessionImpl(context, subject, wspConfig);
     }
 
     /**
@@ -1868,8 +1841,12 @@ public class RepositoryImpl extends Abst
                 if (searchMgr == null && config.isSearchEnabled()) {
                     // search manager is lazily instantiated in order to avoid
                     // 'chicken & egg' bootstrap problems
-                    searchMgr = new SearchManager(config,
-                            nsReg, ntReg, itemStateMgr, persistMgr, rootNodeId,
+                    searchMgr = new SearchManager(
+                            config,
+                            context.getNamespaceRegistry(),
+                            context.getNodeTypeRegistry(),
+                            itemStateMgr, persistMgr,
+                            context.getRootNodeId(),
                             getSystemSearchManager(getName()),
                             SYSTEM_ROOT_NODE_ID, executor);
                 }
@@ -1938,8 +1915,7 @@ public class RepositoryImpl extends Abst
                 // system session is lazily instantiated in order to avoid
                 // 'chicken & egg' bootstrap problems
                 if (systemSession == null) {
-                    systemSession =
-                            SystemSession.create(RepositoryImpl.this, config);
+                    systemSession = SystemSession.create(context, config);
                 }
                 return systemSession;
             }
@@ -2011,18 +1987,16 @@ public class RepositoryImpl extends Abst
         protected void doInitialize() throws RepositoryException {
             fs = config.getFileSystem();
 
-            persistMgr = createPersistenceManager(new File(config.getHomeDir()),
+            persistMgr = createPersistenceManager(
+                    new File(config.getHomeDir()),
                     fs,
                     config.getPersistenceManagerConfig(),
-                    rootNodeId,
-                    nsReg,
-                    ntReg,
                     dataStore);
 
             // JCR-2551: Recovery from a lost version history
             if (Boolean.getBoolean("org.apache.jackrabbit.version.recovery")) {
-                RepositoryChecker checker =
-                    new RepositoryChecker(persistMgr, vMgr);
+                RepositoryChecker checker = new RepositoryChecker(
+                        persistMgr, context.getInternalVersionManager());
                 checker.check(ROOT_NODE_ID, true);
                 checker.fix();
             }
@@ -2031,11 +2005,11 @@ public class RepositoryImpl extends Abst
 
             // create item state manager
             try {
-                itemStateMgr = createItemStateManager(persistMgr, rootNodeId,
-                        ntReg, true, cacheFactory, ismLocking);
+                itemStateMgr = createItemStateManager(
+                        persistMgr, true, cacheFactory, ismLocking);
                 try {
                     itemStateMgr.addVirtualItemStateProvider(
-                            vMgr.getVirtualItemStateProvider());
+                            context.getInternalVersionManager().getVirtualItemStateProvider());
                     itemStateMgr.addVirtualItemStateProvider(
                             virtNTMgr.getVirtualItemStateProvider());
                 } catch (Exception e) {
@@ -2384,7 +2358,7 @@ public class RepositoryImpl extends Abst
          * {@inheritDoc}
          */
         public NamespaceResolver getNamespaceResolver() {
-            return new RegistryNamespaceResolver(getNamespaceRegistry());
+            return new RegistryNamespaceResolver(context.getNamespaceRegistry());
         }
 
         /**

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryManagerImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryManagerImpl.java?rev=948757&r1=948756&r2=948757&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryManagerImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryManagerImpl.java Thu May 27 10:18:56 2010
@@ -46,7 +46,7 @@ public class RepositoryManagerImpl imple
             throw new RepositoryException("Repository is stopped");
         }
         ArrayList<PersistenceManager> pmList = new ArrayList<PersistenceManager>();
-        InternalVersionManagerImpl vm = (InternalVersionManagerImpl) rep.getVersionManager();
+        InternalVersionManagerImpl vm = rep.context.getInternalVersionManager();
         PersistenceManager pm = vm.getPersistenceManager();
         pmList.add(pm);
         String[] wspNames = rep.getWorkspaceNames();
@@ -55,7 +55,8 @@ public class RepositoryManagerImpl imple
             String wspName = wspNames[i];
             WorkspaceInfo wspInfo = rep.getWorkspaceInfo(wspName);
             // this will initialize the workspace if required
-            SessionImpl session = SystemSession.create(rep, wspInfo.getConfig());
+            SessionImpl session =
+                SystemSession.create(rep.context, wspInfo.getConfig());
             // mark this session as 'active' so the workspace does not get disposed
             // by the workspace-janitor until the garbage collector is done
             rep.onSessionCreated(session);

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/SessionImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/SessionImpl.java?rev=948757&r1=948756&r2=948757&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/SessionImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/SessionImpl.java Thu May 27 10:18:56 2010
@@ -133,6 +133,11 @@ public class SessionImpl extends Abstrac
     protected boolean alive;
 
     /**
+     * The component context of the repository that issued this session.
+     */
+    protected final RepositoryContext repositoryContext;
+
+    /**
      * the repository that issued this session
      */
     protected final RepositoryImpl rep;
@@ -245,7 +250,7 @@ public class SessionImpl extends Abstrac
     /**
      * Protected constructor.
      *
-     * @param rep
+     * @param repositoryContext repository context
      * @param loginContext
      * @param wspConfig
      * @throws AccessDeniedException if the subject of the given login context
@@ -253,37 +258,41 @@ public class SessionImpl extends Abstrac
      *                               workspace
      * @throws RepositoryException   if another error occurs
      */
-    protected SessionImpl(RepositoryImpl rep, AuthContext loginContext,
-                          WorkspaceConfig wspConfig)
+    protected SessionImpl(
+            RepositoryContext repositoryContext, AuthContext loginContext,
+            WorkspaceConfig wspConfig)
             throws AccessDeniedException, RepositoryException {
-        this(rep, loginContext.getSubject(), wspConfig);
+        this(repositoryContext, loginContext.getSubject(), wspConfig);
         this.loginContext = loginContext;
     }
 
     /**
      * Protected constructor.
      *
-     * @param rep
+     * @param repositoryContext repository context
      * @param subject
      * @param wspConfig
      * @throws AccessDeniedException if the given subject is not granted access
      *                               to the specified workspace
      * @throws RepositoryException   if another error occurs
      */
-    protected SessionImpl(RepositoryImpl rep, Subject subject,
-                          WorkspaceConfig wspConfig)
+    protected SessionImpl(
+            RepositoryContext repositoryContext, Subject subject,
+            WorkspaceConfig wspConfig)
             throws AccessDeniedException, RepositoryException {
         alive = true;
-        this.rep = rep;
+        this.repositoryContext = repositoryContext;
+        this.rep = repositoryContext.getRepository();
         this.subject = subject;
 
         userId = retrieveUserId(subject, wspConfig.getName());
 
         namePathResolver = new DefaultNamePathResolver(this, this, true);
-        ntMgr = new NodeTypeManagerImpl(rep.getNodeTypeRegistry(), this, rep.getDataStore());
+        ntMgr = new NodeTypeManagerImpl(
+                repositoryContext.getNodeTypeRegistry(), this, rep.getDataStore());
         String wspName = wspConfig.getName();
-        wsp = createWorkspaceInstance(wspConfig,
-                rep.getWorkspaceStateManager(wspName), rep, this);
+        wsp = createWorkspaceInstance(
+                wspConfig, rep.getWorkspaceStateManager(wspName));
         itemStateMgr = createSessionItemStateManager(wsp.getItemStateManager());
         hierMgr = itemStateMgr.getHierarchyMgr();
         itemMgr = createItemManager(itemStateMgr, hierMgr);
@@ -308,7 +317,9 @@ public class SessionImpl extends Abstrac
      */
     protected SessionItemStateManager createSessionItemStateManager(LocalItemStateManager manager) {
         return SessionItemStateManager.createInstance(
-                rep.getRootNodeId(), manager, rep.getNodeTypeRegistry());
+                repositoryContext.getRootNodeId(),
+                manager,
+                repositoryContext.getNodeTypeRegistry());
     }
 
     /**
@@ -316,16 +327,12 @@ public class SessionImpl extends Abstrac
      *
      * @param wspConfig The workspace configuration
      * @param stateMgr  The shared item state manager
-     * @param rep       The repository
-     * @param session   The session
      * @return An instance of the {@link WorkspaceImpl} class or an extension
      *         thereof.
      */
-    protected WorkspaceImpl createWorkspaceInstance(WorkspaceConfig wspConfig,
-                                                    SharedItemStateManager stateMgr,
-                                                    RepositoryImpl rep,
-                                                    SessionImpl session) {
-        return new WorkspaceImpl(wspConfig, stateMgr, rep, session);
+    protected WorkspaceImpl createWorkspaceInstance(
+            WorkspaceConfig wspConfig, SharedItemStateManager stateMgr) {
+        return new WorkspaceImpl(wspConfig, stateMgr, repositoryContext, this);
     }
 
     /**
@@ -334,8 +341,10 @@ public class SessionImpl extends Abstrac
      */
     protected ItemManager createItemManager(SessionItemStateManager itemStateMgr,
                                             HierarchyManager hierMgr) {
-        return ItemManager.createInstance(itemStateMgr, hierMgr, this,
-                ntMgr.getRootNodeDefinition(), rep.getRootNodeId());
+        return ItemManager.createInstance(
+                itemStateMgr, hierMgr, this,
+                ntMgr.getRootNodeDefinition(),
+                repositoryContext.getRootNodeId());
     }
 
     /**
@@ -345,8 +354,7 @@ public class SessionImpl extends Abstrac
      */
     protected InternalVersionManager createVersionManager(RepositoryImpl rep)
             throws RepositoryException {
-
-        return rep.getVersionManager();
+        return repositoryContext.getInternalVersionManager();
     }
 
     /**
@@ -393,7 +401,9 @@ public class SessionImpl extends Abstrac
      */
     public synchronized ItemValidator getValidator() throws RepositoryException {
         if (validator == null) {
-            validator = new ItemValidator(rep.getNodeTypeRegistry(), getHierarchyManager(), this);
+            validator = new ItemValidator(
+                    repositoryContext.getNodeTypeRegistry(),
+                    getHierarchyManager(), this);
         }
         return validator;
     }
@@ -654,7 +664,7 @@ public class SessionImpl extends Abstrac
      */
     public GarbageCollector createDataStoreGarbageCollector() throws RepositoryException {
         ArrayList<PersistenceManager> pmList = new ArrayList<PersistenceManager>();
-        InternalVersionManagerImpl vm = (InternalVersionManagerImpl) rep.getVersionManager();
+        InternalVersionManagerImpl vm = repositoryContext.getInternalVersionManager();
         PersistenceManager pm = vm.getPersistenceManager();
         pmList.add(pm);
         String[] wspNames = rep.getWorkspaceNames();
@@ -663,7 +673,8 @@ public class SessionImpl extends Abstrac
             String wspName = wspNames[i];
             WorkspaceInfo wspInfo = rep.getWorkspaceInfo(wspName);
             // this will initialize the workspace if required
-            SessionImpl session = SystemSession.create(rep, wspInfo.getConfig());
+            SessionImpl session =
+                SystemSession.create(repositoryContext, wspInfo.getConfig());
             // mark this session as 'active' so the workspace does not get disposed
             // by the workspace-janitor until the garbage collector is done
             rep.onSessionCreated(session);

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/SystemSession.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/SystemSession.java?rev=948757&r1=948756&r2=948757&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/SystemSession.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/SystemSession.java Thu May 27 10:18:56 2010
@@ -53,7 +53,8 @@ class SystemSession extends SessionImpl 
      * @return
      * @throws RepositoryException
      */
-    static SystemSession create(RepositoryImpl rep, WorkspaceConfig wspConfig)
+    static SystemSession create(
+            RepositoryContext repositoryContext, WorkspaceConfig wspConfig)
             throws RepositoryException {
         // create subject with SystemPrincipal
         Set<SystemPrincipal> principals = new HashSet<SystemPrincipal>();
@@ -61,19 +62,19 @@ class SystemSession extends SessionImpl 
         Subject subject =
                 new Subject(true, principals, Collections.EMPTY_SET,
                         Collections.EMPTY_SET);
-        return new SystemSession(rep, subject, wspConfig);
+        return new SystemSession(repositoryContext, subject, wspConfig);
     }
 
     /**
      * private constructor
      *
-     * @param rep
+     * @param repositoryContext repository context
      * @param wspConfig
      */
-    private SystemSession(RepositoryImpl rep, Subject subject,
-                          WorkspaceConfig wspConfig)
-            throws RepositoryException {
-        super(rep, subject, wspConfig);
+    private SystemSession(
+            RepositoryContext repositoryContext, Subject subject,
+            WorkspaceConfig wspConfig) throws RepositoryException {
+        super(repositoryContext, subject, wspConfig);
     }
 
     /**

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/WorkspaceImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/WorkspaceImpl.java?rev=948757&r1=948756&r2=948757&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/WorkspaceImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/WorkspaceImpl.java Thu May 27 10:18:56 2010
@@ -75,6 +75,11 @@ public class WorkspaceImpl extends Abstr
     protected final WorkspaceConfig wspConfig;
 
     /**
+     * The component context of the repository that created this workspace.
+     */
+    protected final RepositoryContext repositoryContext;
+
+    /**
      * The repository that created this workspace instance
      */
     protected final RepositoryImpl rep;
@@ -137,14 +142,15 @@ public class WorkspaceImpl extends Abstr
      * @param rep       The repository
      * @param session   The session
      */
-    protected WorkspaceImpl(WorkspaceConfig wspConfig,
-                            SharedItemStateManager stateMgr, RepositoryImpl rep,
-                            SessionImpl session) {
+    protected WorkspaceImpl(
+            WorkspaceConfig wspConfig, SharedItemStateManager stateMgr,
+            RepositoryContext repositoryContext, SessionImpl session) {
         this.wspConfig = wspConfig;
-        this.rep = rep;
+        this.repositoryContext = repositoryContext;
+        this.rep = repositoryContext.getRepository();
         this.stateMgr = createItemStateManager(stateMgr);
-        this.hierMgr =
-            new CachingHierarchyManager(rep.getRootNodeId(), this.stateMgr);
+        this.hierMgr = new CachingHierarchyManager(
+                repositoryContext.getRootNodeId(), this.stateMgr);
         this.stateMgr.addListener(hierMgr);
         this.session = session;
     }
@@ -387,8 +393,8 @@ public class WorkspaceImpl extends Abstr
         }
 
         BatchedItemOperations ops = new BatchedItemOperations(
-                stateMgr, rep.getNodeTypeRegistry(), session.getLockManager(),
-                session, hierMgr);
+                stateMgr, repositoryContext.getNodeTypeRegistry(),
+                session.getLockManager(), session, hierMgr);
 
         try {
             ops.edit();
@@ -463,8 +469,8 @@ public class WorkspaceImpl extends Abstr
         }
 
         BatchedItemOperations ops = new BatchedItemOperations(
-                stateMgr, rep.getNodeTypeRegistry(), session.getLockManager(),
-                session, hierMgr);
+                stateMgr, repositoryContext.getNodeTypeRegistry(),
+                session.getLockManager(), session, hierMgr);
 
         try {
             ops.edit();
@@ -545,7 +551,7 @@ public class WorkspaceImpl extends Abstr
         // check state of this instance
         sanityCheck();
 
-        return rep.getNamespaceRegistry();
+        return repositoryContext.getNamespaceRegistry();
     }
 
     /**
@@ -706,8 +712,8 @@ public class WorkspaceImpl extends Abstr
         }
 
         BatchedItemOperations ops = new BatchedItemOperations(
-                stateMgr, rep.getNodeTypeRegistry(), session.getLockManager(),
-                session, hierMgr);
+                stateMgr, repositoryContext.getNodeTypeRegistry(),
+                session.getLockManager(), session, hierMgr);
 
         try {
             ops.edit();
@@ -834,8 +840,10 @@ public class WorkspaceImpl extends Abstr
             throw new RepositoryException("not an absolute path: " + parentAbsPath);
         }
 
-        Importer importer = new WorkspaceImporter(parentPath, this,
-                rep.getNodeTypeRegistry(), uuidBehavior, wspConfig.getImportConfig());
+        Importer importer = new WorkspaceImporter(
+                parentPath, this,
+                repositoryContext.getNodeTypeRegistry(),
+                uuidBehavior, wspConfig.getImportConfig());
         return new ImportHandler(importer, session);
     }
 

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/XASessionImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/XASessionImpl.java?rev=948757&r1=948756&r2=948757&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/XASessionImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/XASessionImpl.java Thu May 27 10:18:56 2010
@@ -25,7 +25,6 @@ import org.apache.jackrabbit.core.securi
 import org.apache.jackrabbit.core.state.SharedItemStateManager;
 import org.apache.jackrabbit.core.state.XAItemStateManager;
 import org.apache.jackrabbit.core.version.InternalVersionManager;
-import org.apache.jackrabbit.core.version.InternalVersionManagerImpl;
 import org.apache.jackrabbit.core.version.InternalXAVersionManager;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -92,7 +91,7 @@ public class XASessionImpl extends Sessi
     /**
      * Create a new instance of this class.
      *
-     * @param rep          repository
+     * @param repositoryContext repository context
      * @param loginContext login context containing authenticated subject
      * @param wspConfig    workspace configuration
      * @throws AccessDeniedException if the subject of the given login context
@@ -100,31 +99,29 @@ public class XASessionImpl extends Sessi
      *                               workspace
      * @throws RepositoryException   if another error occurs
      */
-    protected XASessionImpl(RepositoryImpl rep, AuthContext loginContext,
-                            WorkspaceConfig wspConfig)
+    protected XASessionImpl(
+            RepositoryContext repositoryContext, AuthContext loginContext,
+            WorkspaceConfig wspConfig)
             throws AccessDeniedException, RepositoryException {
-
-        super(rep, loginContext, wspConfig);
-
+        super(repositoryContext, loginContext, wspConfig);
         init();
     }
 
     /**
      * Create a new instance of this class.
      *
-     * @param rep       repository
+     * @param repositoryContext repository context
      * @param subject   authenticated subject
      * @param wspConfig workspace configuration
      * @throws AccessDeniedException if the given subject is not granted access
      *                               to the specified workspace
      * @throws RepositoryException   if another error occurs
      */
-    protected XASessionImpl(RepositoryImpl rep, Subject subject,
-                            WorkspaceConfig wspConfig)
+    protected XASessionImpl(
+            RepositoryContext repositoryContext, Subject subject,
+            WorkspaceConfig wspConfig)
             throws AccessDeniedException, RepositoryException {
-
-        super(rep, subject, wspConfig);
-
+        super(repositoryContext, subject, wspConfig);
         init();
     }
 
@@ -160,11 +157,10 @@ public class XASessionImpl extends Sessi
     /**
      * {@inheritDoc}
      */
-    protected WorkspaceImpl createWorkspaceInstance(WorkspaceConfig wspConfig,
-                                                    SharedItemStateManager stateMgr,
-                                                    RepositoryImpl rep,
-                                                    SessionImpl session) {
-        return new XAWorkspace(wspConfig, stateMgr, rep, session);
+    @Override
+    protected WorkspaceImpl createWorkspaceInstance(
+            WorkspaceConfig wspConfig, SharedItemStateManager stateMgr) {
+        return new XAWorkspace(wspConfig, stateMgr, repositoryContext, this);
     }
 
     /**
@@ -172,9 +168,10 @@ public class XASessionImpl extends Sessi
      */
     protected InternalVersionManager createVersionManager(RepositoryImpl rep)
             throws RepositoryException {
-
-        InternalVersionManagerImpl vMgr = (InternalVersionManagerImpl) rep.getVersionManager();
-        return new InternalXAVersionManager(vMgr, rep.getNodeTypeRegistry(), this, rep.getItemStateCacheFactory());
+        return new InternalXAVersionManager(
+                repositoryContext.getInternalVersionManager(),
+                repositoryContext.getNodeTypeRegistry(),
+                this, rep.getItemStateCacheFactory());
     }
 
     /**

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/XAWorkspace.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/XAWorkspace.java?rev=948757&r1=948756&r2=948757&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/XAWorkspace.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/XAWorkspace.java Thu May 27 10:18:56 2010
@@ -31,14 +31,13 @@ public class XAWorkspace extends Workspa
      *
      * @param wspConfig The workspace configuration
      * @param stateMgr  The shared item state manager
-     * @param rep       The repository
+     * @param repositoryContext repository context
      * @param session   The session
      */
-    protected XAWorkspace(WorkspaceConfig wspConfig,
-                          SharedItemStateManager stateMgr, RepositoryImpl rep,
-                          SessionImpl session) {
-
-        super(wspConfig, stateMgr, rep, session);
+    protected XAWorkspace(
+            WorkspaceConfig wspConfig, SharedItemStateManager stateMgr,
+            RepositoryContext repositoryContext, SessionImpl session) {
+        super(wspConfig, stateMgr, repositoryContext, session);
     }
 
     /**