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 al...@apache.org on 2015/08/07 12:07:03 UTC

svn commit: r1694643 - in /jackrabbit/oak/trunk: oak-core/src/main/java/org/apache/jackrabbit/oak/ oak-core/src/test/java/org/apache/jackrabbit/oak/ oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/

Author: alexparvulescu
Date: Fri Aug  7 10:07:02 2015
New Revision: 1694643

URL: http://svn.apache.org/r1694643
Log:
OAK-2760 HttpServer in Oak creates multiple instance of ContentRepository
 - patch provided by Francesco Mari (@frm)


Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/Oak.java
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/OakTest.java
    jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/Jcr.java
    jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/package-info.java

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/Oak.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/Oak.java?rev=1694643&r1=1694642&r2=1694643&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/Oak.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/Oak.java Fri Aug  7 10:07:02 2015
@@ -146,8 +146,7 @@ public class Oak {
 
     private final Closer closer = Closer.create();
 
-    private boolean initialized;
-
+    private ContentRepository contentRepository;
 
     /**
      * Default {@code ScheduledExecutorService} used for scheduling background tasks.
@@ -547,10 +546,22 @@ public class Oak {
         return this.whiteboard;
     }
 
+    /**
+     * Returns the content repository instance created with the given
+     * configuration. If the repository doesn't exist yet, a new instance will
+     * be created and returned for each subsequent call of this method.
+     *
+     * @return content repository
+     */
     public ContentRepository createContentRepository() {
-        //TODO FIXME OAK-2736
-        //checkState(!initialized, "Oak instance should be used only once to create the ContentRepository instance");
-        initialized = true;
+        if (contentRepository == null) {
+            contentRepository = createNewContentRepository();
+        }
+
+        return contentRepository;
+    }
+
+    private ContentRepository createNewContentRepository() {
         final List<Registration> regs = Lists.newArrayList();
         regs.add(whiteboard.register(Executor.class, getExecutor(), Collections.emptyMap()));
 
@@ -573,7 +584,6 @@ public class Oak {
                 indexRegistration.registerAsyncIndexer(task, t.getValue());
             }
 
-            // TODO verify how this fits in with OAK-2749
             PropertyIndexAsyncReindex asyncPI = new PropertyIndexAsyncReindex(
                     new AsyncIndexUpdate(IndexConstants.ASYNC_REINDEX_VALUE,
                             store, indexEditors, true), getExecutor());

Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/OakTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/OakTest.java?rev=1694643&r1=1694642&r2=1694643&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/OakTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/OakTest.java Fri Aug  7 10:07:02 2015
@@ -27,7 +27,6 @@ import org.apache.jackrabbit.oak.api.Con
 import org.apache.jackrabbit.oak.api.ContentSession;
 import org.apache.jackrabbit.oak.spi.security.OpenSecurityProvider;
 import org.apache.jackrabbit.oak.spi.whiteboard.WhiteboardUtils;
-import org.junit.Ignore;
 import org.junit.Test;
 
 import static org.junit.Assert.assertEquals;
@@ -72,12 +71,20 @@ public class OakTest {
 
     }
 
-    @Ignore("OAK-2736")
-    @Test(expected = IllegalStateException.class)
-    public void throwISEUponReuse() throws Exception{
+    @Test
+    public void testContentRepositoryReuse() throws Exception {
         Oak oak = new Oak().with(new OpenSecurityProvider());
-        oak.createContentRepository();
-        oak.createContentRepository();
+        ContentRepository r0 = null;
+        ContentRepository r1 = null;
+        try {
+            r0 = oak.createContentRepository();
+            r1 = oak.createContentRepository();
+            assertEquals(r0, r1);
+        } finally {
+            if (r0 != null) {
+                ((Closeable) r0).close();
+            }
+        }
     }
 
     @Test

Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/Jcr.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/Jcr.java?rev=1694643&r1=1694642&r2=1694643&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/Jcr.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/Jcr.java Fri Aug  7 10:07:02 2015
@@ -26,6 +26,7 @@ import javax.annotation.Nonnull;
 import javax.jcr.Repository;
 
 import org.apache.jackrabbit.oak.Oak;
+import org.apache.jackrabbit.oak.api.ContentRepository;
 import org.apache.jackrabbit.oak.jcr.repository.RepositoryImpl;
 import org.apache.jackrabbit.oak.plugins.commit.ConflictValidatorProvider;
 import org.apache.jackrabbit.oak.plugins.index.IndexEditorProvider;
@@ -69,6 +70,8 @@ public class Jcr {
     private int observationQueueLength = DEFAULT_OBSERVATION_QUEUE_LENGTH;
     private CommitRateLimiter commitRateLimiter = null;
 
+    private Repository repository;
+
     public Jcr(Oak oak) {
         this.oak = oak;
 
@@ -198,13 +201,21 @@ public class Jcr {
         return this;
     }
 
+    public ContentRepository createContentRepository() {
+        return oak.createContentRepository();
+    }
+
     public Repository createRepository() {
-        return new RepositoryImpl(
-                oak.createContentRepository(), 
-                oak.getWhiteboard(),
-                securityProvider,
-                observationQueueLength,
-                commitRateLimiter);
+        if (repository == null) {
+            repository = new RepositoryImpl(
+                    oak.createContentRepository(),
+                    oak.getWhiteboard(),
+                    securityProvider,
+                    observationQueueLength,
+                    commitRateLimiter);
+        }
+
+        return repository;
     }
 
 }

Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/package-info.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/package-info.java?rev=1694643&r1=1694642&r2=1694643&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/package-info.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/package-info.java Fri Aug  7 10:07:02 2015
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-@Version("1.0")
+@Version("1.1.0")
 @Export(optional = "provide:=true")
 package org.apache.jackrabbit.oak.jcr;