diff --git oak-core/src/main/java/org/apache/jackrabbit/oak/Oak.java oak-core/src/main/java/org/apache/jackrabbit/oak/Oak.java index a64874a..b91b46f 100644 --- oak-core/src/main/java/org/apache/jackrabbit/oak/Oak.java +++ oak-core/src/main/java/org/apache/jackrabbit/oak/Oak.java @@ -143,8 +143,7 @@ public class Oak { private final Closer closer = Closer.create(); - private boolean initialized; - + private ContentRepository contentRepository; /** * Default {@code ScheduledExecutorService} used for scheduling background tasks. @@ -522,9 +521,16 @@ public class Oak { } public ContentRepository createContentRepository() { + if (contentRepository == null) { + contentRepository = createNewContentRepository(); + } + + return contentRepository; + } + + private ContentRepository createNewContentRepository() { //TODO FIXME OAK-2736 //checkState(!initialized, "Oak instance should be used only once to create the ContentRepository instance"); - initialized = true; final List regs = Lists.newArrayList(); regs.add(whiteboard.register(Executor.class, getExecutor(), Collections.emptyMap())); diff --git oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/Jcr.java oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/Jcr.java index 5afed7c..a926746 100644 --- oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/Jcr.java +++ oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/Jcr.java @@ -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; } }