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 2012/03/12 15:51:38 UTC

svn commit: r1299693 - in /jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit: CacheFactory.java GlobalContext.java state/NodeStateProvider.java state/TransientNodeStateCache.java state/TransientNodeStateCacheImpl.java

Author: mduerig
Date: Mon Mar 12 14:51:37 2012
New Revision: 1299693

URL: http://svn.apache.org/viewvc?rev=1299693&view=rev
Log:
Microkernel based prototype of JCR implementation (WIP)
- refactor node state cache 

Removed:
    jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/CacheFactory.java
    jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/state/TransientNodeStateCache.java
    jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/state/TransientNodeStateCacheImpl.java
Modified:
    jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/GlobalContext.java
    jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/state/NodeStateProvider.java

Modified: jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/GlobalContext.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/GlobalContext.java?rev=1299693&r1=1299692&r2=1299693&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/GlobalContext.java (original)
+++ jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/GlobalContext.java Mon Mar 12 14:51:37 2012
@@ -25,7 +25,6 @@ import org.apache.jackrabbit.mk.MicroKer
 import org.apache.jackrabbit.mk.api.MicroKernel;
 import org.apache.jackrabbit.security.Authenticator;
 import org.apache.jackrabbit.security.AuthenticatorImpl;
-import org.apache.jackrabbit.state.TransientNodeStateCacheImpl;
 import org.apache.jackrabbit.utils.Unchecked;
 
 import javax.jcr.Repository;
@@ -49,7 +48,6 @@ public class GlobalContext {
         put(Repository.class, RepositoryImpl.create(this));
         put(Authenticator.class, AuthenticatorImpl.INSTANCE);
         put(SessionFactory.class, SessionImpl.FACTORY);
-        put(CacheFactory.class, TransientNodeStateCacheImpl.FACTORY);
     }
 
     public <T> T getInstance(Class<T> forClass) {

Modified: jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/state/NodeStateProvider.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/state/NodeStateProvider.java?rev=1299693&r1=1299692&r2=1299693&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/state/NodeStateProvider.java (original)
+++ jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/state/NodeStateProvider.java Mon Mar 12 14:51:37 2012
@@ -1,49 +1,67 @@
 package org.apache.jackrabbit.state;
 
+import org.apache.commons.collections.map.LRUMap;
 import org.apache.jackrabbit.Path;
 import org.apache.jackrabbit.SessionImpl.Context;
+import org.apache.jackrabbit.configuration.RepositoryConfiguration;
 import org.apache.jackrabbit.state.ChangeTree.NodeDelta;
+import org.apache.jackrabbit.utils.Unchecked;
+
+import java.util.Map;
 
 public class NodeStateProvider {
     private final Context sessionContext;
     private final TransientSpace transientSpace;
-    private final TransientNodeStateCache nodeStateCache;
+    private final Map<Path, TransientNodeState> cache;
 
     public NodeStateProvider(Context sessionContext, TransientSpace transientSpace) {
         this.sessionContext = sessionContext;
         this.transientSpace = transientSpace;
-        nodeStateCache = new TransientNodeStateCacheImpl(100); // fixme don't hard code
+
+        RepositoryConfiguration config = sessionContext.getGlobalContext().getInstance(RepositoryConfiguration.class);
+        if (config.getNodeStateCacheSize() <= 0) {
+            cache = null;
+        }
+        else {
+            cache = Unchecked.cast(new LRUMap(config.getNodeStateCacheSize()));
+        }
     }
 
     public TransientNodeState getNodeState(Path path) {
-        TransientNodeState state = nodeStateCache.get(path);
+        TransientNodeState state = cache.get(path);
         if (state == null) {
             NodeDelta delta = transientSpace.getNodeDelta(path);
             if (delta == null) {
                 return null;
             }
             state = new TransientNodeState(sessionContext, delta);
-            nodeStateCache.put(path, state);
+            if (cache != null) {
+                cache.put(path, state);
+            }
         }
         return state;
     }
 
     public void release(Path path) {
-        nodeStateCache.remove(path);
+        if (cache != null) {
+            cache.remove(path);
+        }
     }
 
     public void clear() {
-        nodeStateCache.clear();
+        if (cache != null) {
+            cache.clear();
+        }
     }
 
     //------------------------------------------< internal/private >---
 
     TransientNodeState getNodeState(NodeDelta nodeDelta) {
         Path path = nodeDelta.getPath();
-        TransientNodeState state = nodeStateCache.get(path);
+        TransientNodeState state = cache.get(path);
         if (state == null) {
             state = new TransientNodeState(sessionContext, nodeDelta);
-            nodeStateCache.put(path, state);
+            cache.put(path, state);
         }
         return state;
     }