You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by ju...@apache.org on 2012/04/05 12:50:31 UTC

svn commit: r1309746 - in /jackrabbit/oak/trunk/oak-core/src: main/java/org/apache/jackrabbit/mk/ main/java/org/apache/jackrabbit/mk/wrapper/ test/java/org/apache/jackrabbit/mk/wrapper/

Author: jukka
Date: Thu Apr  5 10:50:31 2012
New Revision: 1309746

URL: http://svn.apache.org/viewvc?rev=1309746&view=rev
Log:
OAK-32: Drop MicroKernel.dispose()

Better handling of SimpleKernel and VirtualRepositoryWrapper in MKF

Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/MicroKernelFactory.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/wrapper/VirtualRepositoryWrapper.java
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/mk/wrapper/IndexWrapperTest.java

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/MicroKernelFactory.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/MicroKernelFactory.java?rev=1309746&r1=1309745&r2=1309746&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/MicroKernelFactory.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/MicroKernelFactory.java Thu Apr  5 10:50:31 2012
@@ -21,6 +21,7 @@ import java.util.HashMap;
 import java.util.Map;
 
 import org.apache.jackrabbit.mk.api.MicroKernel;
+import org.apache.jackrabbit.mk.api.MicroKernelException;
 import org.apache.jackrabbit.mk.client.Client;
 import org.apache.jackrabbit.mk.core.MicroKernelImpl;
 import org.apache.jackrabbit.mk.fs.FileUtils;
@@ -53,7 +54,7 @@ public class MicroKernelFactory {
      * @param url the repository URL
      * @return a new instance
      */
-    public static synchronized MicroKernel getInstance(String url) {
+    public static MicroKernel getInstance(String url) {
         int colon = url.indexOf(':');
         if (colon == -1) {
             throw new IllegalArgumentException("Unknown repository URL: " + url);
@@ -89,19 +90,36 @@ public class MicroKernelFactory {
             if (head.equals("fs")) {
                 return new MicroKernelImpl(tail);
             } else {
-                SimpleKernelImpl instance = INSTANCES.get(tail);
-                if (instance == null) {
-                    instance = new SimpleKernelImpl(tail);
-                    INSTANCES.put(tail, instance);
+                final String name = tail;
+                synchronized (INSTANCES) {
+                    SimpleKernelImpl instance = INSTANCES.get(name);
+                    if (instance == null) {
+                        instance = new SimpleKernelImpl(name) {
+                            @Override
+                            public synchronized void dispose() {
+                                super.dispose();
+                                synchronized (INSTANCES) {
+                                    INSTANCES.remove(name);
+                                }
+                            }
+                        };
+                        INSTANCES.put(name, instance);
+                    }
+                    return instance;
                 }
-                return instance;
             }
         } else if (head.equals("log")) {
             return new LogWrapper(getInstance(tail));
         } else if (head.equals("sec")) {
             return SecurityWrapper.get(url);
         } else if (head.equals("virtual")) {
-            return VirtualRepositoryWrapper.get(url);
+            MicroKernel mk = getInstance(tail);
+            try {
+                return new VirtualRepositoryWrapper(mk);
+            } catch (MicroKernelException e) {
+                mk.dispose();
+                throw e;
+            }
         } else if (head.equals("index")) {
             return new IndexWrapper(getInstance(tail));
         } else if (head.equals("http")) {

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/wrapper/VirtualRepositoryWrapper.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/wrapper/VirtualRepositoryWrapper.java?rev=1309746&r1=1309745&r2=1309746&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/wrapper/VirtualRepositoryWrapper.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/wrapper/VirtualRepositoryWrapper.java Thu Apr  5 10:50:31 2012
@@ -40,7 +40,6 @@ import org.apache.jackrabbit.mk.util.Pat
  */
 public class VirtualRepositoryWrapper extends MicroKernelWrapperBase implements MicroKernel {
 
-    private static final String PREFIX = "virtual:";
     private static final String MOUNT = "/:mount";
 
     /**
@@ -74,38 +73,27 @@ public class VirtualRepositoryWrapper ex
 
     private final NodeMap map = new NodeMap();
 
-    private VirtualRepositoryWrapper(MicroKernel mk) {
+    public VirtualRepositoryWrapper(MicroKernel mk) {
         this.mk = MicroKernelWrapperBase.wrap(mk);
-    }
 
-    public static synchronized VirtualRepositoryWrapper get(String url) {
-        String urlMeta = url.substring(PREFIX.length());
-        MicroKernel mk = MicroKernelFactory.getInstance(urlMeta);
-        try {
-            String head = mk.getHeadRevision();
-            VirtualRepositoryWrapper vm = new VirtualRepositoryWrapper(mk);
-            if (mk.nodeExists(MOUNT, head)) {
-                String mounts = mk.getNodes(MOUNT, head);
-                NodeMap map = new NodeMap();
-                JsopReader t = new JsopTokenizer(mounts);
-                t.read('{');
-                NodeImpl n = NodeImpl.parse(map, t, 0);
-                for (long pos = 0;; pos++) {
-                    String childName = n.getChildNodeName(pos);
-                    if (childName == null) {
-                        break;
-                    }
-                    NodeImpl mount = n.getNode(childName);
-                    String mountUrl = JsopTokenizer.decodeQuoted(mount.getProperty("url"));
-                    String[] paths = JsopTokenizer.decodeQuoted(mount.getProperty("paths")).split(",");
-                    vm.addMount(childName, mountUrl, paths);
-                    vm.getHeadRevision();
+        String head = mk.getHeadRevision();
+        if (mk.nodeExists(MOUNT, head)) {
+            String mounts = mk.getNodes(MOUNT, head);
+            NodeMap map = new NodeMap();
+            JsopReader t = new JsopTokenizer(mounts);
+            t.read('{');
+            NodeImpl n = NodeImpl.parse(map, t, 0);
+            for (long pos = 0;; pos++) {
+                String childName = n.getChildNodeName(pos);
+                if (childName == null) {
+                    break;
                 }
+                NodeImpl mount = n.getNode(childName);
+                String mountUrl = JsopTokenizer.decodeQuoted(mount.getProperty("url"));
+                String[] paths = JsopTokenizer.decodeQuoted(mount.getProperty("paths")).split(",");
+                addMount(childName, mountUrl, paths);
+                getHeadRevision();
             }
-            return vm;
-        } catch (MicroKernelException e) {
-            mk.dispose();
-            throw e;
         }
     }
 

Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/mk/wrapper/IndexWrapperTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/mk/wrapper/IndexWrapperTest.java?rev=1309746&r1=1309745&r2=1309746&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/mk/wrapper/IndexWrapperTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/mk/wrapper/IndexWrapperTest.java Thu Apr  5 10:50:31 2012
@@ -17,8 +17,8 @@
 package org.apache.jackrabbit.mk.wrapper;
 
 import static org.junit.Assert.assertEquals;
-import org.apache.jackrabbit.mk.MicroKernelFactory;
 import org.apache.jackrabbit.mk.MultiMkTestBase;
+import org.apache.jackrabbit.mk.index.IndexWrapper;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -39,9 +39,7 @@ public class IndexWrapperTest extends Mu
     @Before
     public void setUp() throws Exception {
         super.setUp();
-        mk.dispose();
-        url = "index:" + url;
-        mk = MicroKernelFactory.getInstance(url);
+        mk = new IndexWrapper(mk);
     }
 
     @Test