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 18:08:53 UTC

svn commit: r948874 - in /jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core: RepositoryContext.java RepositoryImpl.java SessionImpl.java WorkspaceImpl.java WorkspaceManager.java XASessionImpl.java XAWorkspace.java

Author: jukka
Date: Thu May 27 16:08:52 2010
New Revision: 948874

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

Use the RepositoryContext to track the ItemStateCacheFactory instance.
Remove the RepositoryImpl member variables from SessionImpl and WorkspaceImpl.

Modified:
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryContext.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/SessionImpl.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/WorkspaceManager.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

Modified: 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=948874&r1=948873&r2=948874&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryContext.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryContext.java Thu May 27 16:08:52 2010
@@ -22,6 +22,7 @@ import org.apache.jackrabbit.core.fs.Fil
 import org.apache.jackrabbit.core.id.NodeId;
 import org.apache.jackrabbit.core.nodetype.NodeTypeRegistry;
 import org.apache.jackrabbit.core.security.JackrabbitSecurityManager;
+import org.apache.jackrabbit.core.state.ItemStateCacheFactory;
 import org.apache.jackrabbit.core.version.InternalVersionManagerImpl;
 
 /**
@@ -84,6 +85,11 @@ public class RepositoryContext {
     private JackrabbitSecurityManager securityManager;
 
     /**
+     * Item state cache factory of this repository.
+     */
+    private ItemStateCacheFactory itemStateCacheFactory;
+
+    /**
      * Creates a component context for the given repository.
      *
      * @param repository repository instance
@@ -283,4 +289,24 @@ public class RepositoryContext {
         this.securityManager = securityManager;
     }
 
+    /**
+     * Returns the item state cache factory of this repository.
+     *
+     * @return item state cache factory
+     */
+    public ItemStateCacheFactory getItemStateCacheFactory() {
+        assert itemStateCacheFactory != null;
+        return itemStateCacheFactory;
+    }
+
+    /**
+     * Sets the item state cache factory of this repository.
+     *
+     * @param itemStateCacheFactory item state cache factory
+     */
+    void setItemStateCacheFactory(ItemStateCacheFactory itemStateCacheFactory) {
+        assert itemStateCacheFactory != null;
+        this.itemStateCacheFactory = itemStateCacheFactory;
+    }
+
 }

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=948874&r1=948873&r2=948874&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 16:08:52 2010
@@ -226,11 +226,6 @@ public class RepositoryImpl extends Abst
     private final CacheManager cacheMgr = new CacheManager();
 
     /**
-     * There is only one item state cache factory
-     */
-    private final ItemStateCacheFactory cacheFactory = new ManagedMLRUItemStateCacheFactory(cacheMgr);
-
-    /**
      * Chanel for posting create workspace messages.
      */
     private WorkspaceEventChannel createWorkspaceEventChannel;
@@ -301,6 +296,10 @@ public class RepositoryImpl extends Abst
             context.setNodeTypeRegistry(new NodeTypeRegistry(
                     context.getNamespaceRegistry(), context.getFileSystem()));
 
+            // Create item state cache manager
+            context.setItemStateCacheFactory(
+                    new ManagedMLRUItemStateCacheFactory(cacheMgr));
+
             DataStore dataStore = repConfig.getDataStore();
             if (dataStore != null) {
                 context.setDataStore(dataStore);
@@ -425,15 +424,6 @@ public class RepositoryImpl extends Abst
     }
 
     /**
-     * Get the item state cache factory of this repository.
-     *
-     * @return the cache factory
-     */
-    public ItemStateCacheFactory getItemStateCacheFactory() {
-        return cacheFactory;
-    }
-
-    /**
      * Creates the {@link org.apache.jackrabbit.core.security.JackrabbitSecurityManager SecurityManager}
      * of this <code>Repository</code>
      *
@@ -490,7 +480,7 @@ public class RepositoryImpl extends Abst
                 SYSTEM_ROOT_NODE_ID,
                 VERSION_STORAGE_NODE_ID,
                 ACTIVITIES_NODE_ID,
-                cacheFactory,
+                context.getItemStateCacheFactory(),
                 ismLocking);
     }
 
@@ -1329,19 +1319,19 @@ public class RepositoryImpl extends Abst
      * @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
-     * @param cacheFactory   cache factory
      * @return item state manager
      * @throws ItemStateException if an error occurs
      */
     protected SharedItemStateManager createItemStateManager(
             PersistenceManager persistMgr, boolean usesReferences,
-            ItemStateCacheFactory cacheFactory, ISMLocking locking)
-            throws ItemStateException {
+            ISMLocking locking) throws ItemStateException {
         return new SharedItemStateManager(
                 persistMgr,
                 context.getRootNodeId(),
                 context.getNodeTypeRegistry(),
-                true, cacheFactory, locking);
+                true,
+                context.getItemStateCacheFactory(),
+                locking);
     }
 
     /**
@@ -1961,8 +1951,8 @@ public class RepositoryImpl extends Abst
 
             // create item state manager
             try {
-                itemStateMgr = createItemStateManager(
-                        persistMgr, true, cacheFactory, ismLocking);
+                itemStateMgr =
+                    createItemStateManager(persistMgr, true, ismLocking);
                 try {
                     itemStateMgr.addVirtualItemStateProvider(
                             context.getInternalVersionManager().getVirtualItemStateProvider());

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=948874&r1=948873&r2=948874&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 16:08:52 2010
@@ -133,11 +133,6 @@ public class SessionImpl extends Abstrac
     protected final RepositoryContext repositoryContext;
 
     /**
-     * the repository that issued this session
-     */
-    protected final RepositoryImpl rep;
-
-    /**
      * the AuthContext of this session (can be null if this
      * session was not instantiated through a login process)
      */
@@ -277,7 +272,6 @@ public class SessionImpl extends Abstrac
             throws AccessDeniedException, RepositoryException {
         alive = true;
         this.repositoryContext = repositoryContext;
-        this.rep = repositoryContext.getRepository();
         this.subject = subject;
 
         userId = retrieveUserId(subject, wspConfig.getName());
@@ -367,7 +361,8 @@ public class SessionImpl extends Abstrac
                                                 HierarchyManager hierarchyManager)
             throws AccessDeniedException, RepositoryException {
         String wspName = getWorkspace().getName();
-        AMContext ctx = new AMContext(new File(rep.getConfig().getHomeDir()),
+        AMContext ctx = new AMContext(
+                new File(repositoryContext.getRepository().getConfig().getHomeDir()),
                 repositoryContext.getFileSystem(),
                 this,
                 getSubject(),
@@ -436,7 +431,8 @@ public class SessionImpl extends Abstrac
         }
         Subject old = getSubject();
         Subject newSubject = new Subject(old.isReadOnly(), old.getPrincipals(), old.getPublicCredentials(), old.getPrivateCredentials());
-        return rep.createSession(newSubject, workspaceName);
+        return repositoryContext.getWorkspaceManager().createSession(
+                newSubject, workspaceName);
     }
 
     /**
@@ -660,7 +656,8 @@ public class SessionImpl extends Abstrac
      * @throws RepositoryException
      */
     public GarbageCollector createDataStoreGarbageCollector() throws RepositoryException {
-        final GarbageCollector gc = rep.createDataStoreGarbageCollector();
+        final GarbageCollector gc =
+            repositoryContext.getRepository().createDataStoreGarbageCollector();
         // Auto-close if the main session logs out
         addListener(new SessionListener() {
             public void loggedOut(SessionImpl session) {
@@ -1247,7 +1244,7 @@ public class SessionImpl extends Abstrac
      * {@inheritDoc}
      */
     public Repository getRepository() {
-        return rep;
+        return repositoryContext.getRepository();
     }
 
     /**

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=948874&r1=948873&r2=948874&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 16:08:52 2010
@@ -80,11 +80,6 @@ public class WorkspaceImpl extends Abstr
     protected final RepositoryContext repositoryContext;
 
     /**
-     * The repository that created this workspace instance
-     */
-    protected final RepositoryImpl rep;
-
-    /**
      * The persistent state mgr associated with the workspace represented by <i>this</i>
      * <code>Workspace</code> instance.
      */
@@ -147,7 +142,6 @@ public class WorkspaceImpl extends Abstr
             SessionImpl session) throws RepositoryException {
         this.wspConfig = wspConfig;
         this.repositoryContext = repositoryContext;
-        this.rep = repositoryContext.getRepository();
         this.stateMgr = createItemStateManager();
         this.hierMgr = new CachingHierarchyManager(
                 repositoryContext.getRootNodeId(), this.stateMgr);
@@ -213,7 +207,8 @@ public class WorkspaceImpl extends Abstr
         SessionImpl tmpSession = null;
         try {
             // create a temporary session on new workspace for current subject
-            tmpSession = rep.createSession(session.getSubject(), name);
+            tmpSession = repositoryContext.getWorkspaceManager().createSession(
+                    session.getSubject(), name);
             WorkspaceImpl newWsp = (WorkspaceImpl) tmpSession.getWorkspace();
 
             // Workspace#clone(String, String, String, booelan) doesn't
@@ -244,7 +239,7 @@ public class WorkspaceImpl extends Abstr
     public void deleteWorkspace(String name) throws AccessDeniedException,
             UnsupportedRepositoryOperationException, RepositoryException {
         // check if workspace exists (will throw NoSuchWorkspaceException if not)
-        rep.getWorkspaceInfo(name);
+        repositoryContext.getRepository().getWorkspaceInfo(name);
         // todo implement deleteWorkspace
         throw new UnsupportedRepositoryOperationException("not yet implemented");
     }
@@ -508,7 +503,8 @@ public class WorkspaceImpl extends Abstr
         sanityCheck();
 
         if (lockMgr == null) {
-            lockMgr = rep.getLockManager(wspConfig.getName());
+            lockMgr = repositoryContext.getRepository().getLockManager(
+                    wspConfig.getName());
         }
         return lockMgr;
     }
@@ -524,7 +520,8 @@ public class WorkspaceImpl extends Abstr
         // check state of this instance
         sanityCheck();
         if (retentionRegistry == null) {
-            retentionRegistry = rep.getRetentionRegistry(wspConfig.getName());
+            retentionRegistry =
+                repositoryContext.getRepository().getRetentionRegistry(wspConfig.getName());
         }
         return retentionRegistry;
     }
@@ -601,7 +598,8 @@ public class WorkspaceImpl extends Abstr
         try {
             // create session on other workspace for current subject
             // (may throw NoSuchWorkspaceException and AccessDeniedException)
-            srcSession = rep.createSession(session.getSubject(), srcWorkspace);
+            srcSession = repositoryContext.getWorkspaceManager().createSession(
+                    session.getSubject(), srcWorkspace);
             WorkspaceImpl srcWsp = (WorkspaceImpl) srcSession.getWorkspace();
 
             // do cross-workspace copy
@@ -662,7 +660,8 @@ public class WorkspaceImpl extends Abstr
         try {
             // create session on other workspace for current subject
             // (may throw NoSuchWorkspaceException and AccessDeniedException)
-            srcSession = rep.createSession(session.getSubject(), srcWorkspace);
+            srcSession = repositoryContext.getWorkspaceManager().createSession(
+                    session.getSubject(), srcWorkspace);
             WorkspaceImpl srcWsp = (WorkspaceImpl) srcSession.getWorkspace();
 
             // do cross-workspace copy
@@ -752,7 +751,7 @@ public class WorkspaceImpl extends Abstr
         if (obsMgr == null) {
             try {
                 obsMgr = new ObservationManagerImpl(
-                        rep.getObservationDispatcher(wspConfig.getName()),
+                        repositoryContext.getRepository().getObservationDispatcher(wspConfig.getName()),
                         session,
                         session.getItemManager(),
                         repositoryContext.getClusterNode());
@@ -777,7 +776,7 @@ public class WorkspaceImpl extends Abstr
         if (queryManager == null) {
             SearchManager searchManager;
             try {
-                searchManager = rep.getSearchManager(wspConfig.getName());
+                searchManager = repositoryContext.getRepository().getSearchManager(wspConfig.getName());
                 if (searchManager == null) {
                     String msg = "no search manager configured for this workspace";
                     log.debug(msg);
@@ -868,7 +867,8 @@ public class WorkspaceImpl extends Abstr
     protected LocalItemStateManager createItemStateManager()
             throws RepositoryException {
         return LocalItemStateManager.createInstance(
-                getSharedItemStateManager(), this, rep.getItemStateCacheFactory());
+                getSharedItemStateManager(), this,
+                repositoryContext.getItemStateCacheFactory());
     }
 
     //------------------------------------------< EventStateCollectionFactory >

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/WorkspaceManager.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/WorkspaceManager.java?rev=948874&r1=948873&r2=948874&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/WorkspaceManager.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/WorkspaceManager.java Thu May 27 16:08:52 2010
@@ -16,8 +16,10 @@
  */
 package org.apache.jackrabbit.core;
 
+import javax.jcr.AccessDeniedException;
 import javax.jcr.NoSuchWorkspaceException;
 import javax.jcr.RepositoryException;
+import javax.security.auth.Subject;
 
 import org.apache.jackrabbit.core.state.SharedItemStateManager;
 import org.xml.sax.InputSource;
@@ -85,4 +87,10 @@ public class WorkspaceManager {
         return repository.getWorkspaceStateManager(workspaceName);
     }
 
+    // FIXME: There should be a better place for this. Refactor...
+    public SessionImpl createSession(Subject subject, String workspaceName)
+        throws RepositoryException {
+        return repository.createSession(subject, workspaceName);
+    }
+
 }

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=948874&r1=948873&r2=948874&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 16:08:52 2010
@@ -172,7 +172,8 @@ public class XASessionImpl extends Sessi
         return new InternalXAVersionManager(
                 repositoryContext.getInternalVersionManager(),
                 repositoryContext.getNodeTypeRegistry(),
-                this, rep.getItemStateCacheFactory());
+                this,
+                repositoryContext.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=948874&r1=948873&r2=948874&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 16:08:52 2010
@@ -45,6 +45,6 @@ public class XAWorkspace extends Workspa
             throws RepositoryException {
         return XAItemStateManager.createInstance(
                 getSharedItemStateManager(), this, null,
-                rep.getItemStateCacheFactory());
+                repositoryContext.getItemStateCacheFactory());
     }
 }