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/10/02 12:08:03 UTC

svn commit: r1392821 - in /jackrabbit/oak/trunk: oak-bench/base/src/main/java/org/apache/jackrabbit/oak/performance/ oak-core/ oak-core/src/main/java/org/apache/jackrabbit/oak/ oak-core/src/main/java/org/apache/jackrabbit/oak/core/ oak-core/src/main/ja...

Author: jukka
Date: Tue Oct  2 10:08:02 2012
New Revision: 1392821

URL: http://svn.apache.org/viewvc?rev=1392821&view=rev
Log:
OAK-352: Oak builder for simplified repository construction

Better documentation of the Oak class.
Prepare for making also the authentication bits configurable.

Modified:
    jackrabbit/oak/trunk/oak-bench/base/src/main/java/org/apache/jackrabbit/oak/performance/AbstractPerformanceTest.java
    jackrabbit/oak/trunk/oak-core/pom.xml
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/Oak.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ContentRepositoryImpl.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authentication/LoginContextProviderImpl.java
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/lucene/AbstractLuceneQueryTest.java
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/AbstractQueryTest.java
    jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/RepositoryImpl.java
    jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/osgi/OsgiRepository.java
    jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/Main.java

Modified: jackrabbit/oak/trunk/oak-bench/base/src/main/java/org/apache/jackrabbit/oak/performance/AbstractPerformanceTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-bench/base/src/main/java/org/apache/jackrabbit/oak/performance/AbstractPerformanceTest.java?rev=1392821&r1=1392820&r2=1392821&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-bench/base/src/main/java/org/apache/jackrabbit/oak/performance/AbstractPerformanceTest.java (original)
+++ jackrabbit/oak/trunk/oak-bench/base/src/main/java/org/apache/jackrabbit/oak/performance/AbstractPerformanceTest.java Tue Oct  2 10:08:02 2012
@@ -33,6 +33,7 @@ import org.apache.jackrabbit.mk.MicroKer
 import org.apache.jackrabbit.mk.api.MicroKernel;
 import org.apache.jackrabbit.mk.core.MicroKernelImpl;
 import org.apache.jackrabbit.mk.index.IndexWrapper;
+import org.apache.jackrabbit.oak.Oak;
 import org.apache.jackrabbit.oak.api.ContentRepository;
 import org.apache.jackrabbit.oak.core.ContentRepositoryImpl;
 import org.apache.jackrabbit.oak.jcr.RepositoryImpl;
@@ -175,9 +176,8 @@ public abstract class AbstractPerformanc
         // return new RepositoryImpl();
 
         mk = new IndexWrapper(mk);
-        ValidatingHook ve =  new ValidatingHook(
-                CompositeValidatorProvider.compose(Collections.<ValidatorProvider>emptyList()));
-        ContentRepository contentRepository = new ContentRepositoryImpl(mk, null, ve);
+        ContentRepository contentRepository =
+                new Oak(mk).createContentRepository();
         return new RepositoryImpl(contentRepository, null);
 
     }

Modified: jackrabbit/oak/trunk/oak-core/pom.xml
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/pom.xml?rev=1392821&r1=1392820&r2=1392821&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/pom.xml (original)
+++ jackrabbit/oak/trunk/oak-core/pom.xml Tue Oct  2 10:08:02 2012
@@ -39,6 +39,7 @@
         <configuration>
           <instructions>
             <Export-Package>
+              org.apache.jackrabbit.oak,
               org.apache.jackrabbit.oak.api,
               org.apache.jackrabbit.oak.core,
               org.apache.jackrabbit.oak.util,

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=1392821&r1=1392820&r2=1392821&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 Tue Oct  2 10:08:02 2012
@@ -28,6 +28,7 @@ import org.apache.jackrabbit.oak.core.Co
 import org.apache.jackrabbit.oak.core.RootImpl;
 import org.apache.jackrabbit.oak.kernel.KernelNodeStore;
 import org.apache.jackrabbit.oak.plugins.memory.MemoryNodeStore;
+import org.apache.jackrabbit.oak.security.authentication.LoginContextProviderImpl;
 import org.apache.jackrabbit.oak.spi.commit.CommitHook;
 import org.apache.jackrabbit.oak.spi.commit.CompositeHook;
 import org.apache.jackrabbit.oak.spi.commit.CompositeValidatorProvider;
@@ -53,11 +54,13 @@ public class Oak {
 
     private final MicroKernel kernel;
 
-    private final List<QueryIndexProvider> providers = Lists.newArrayList();
+    private final List<QueryIndexProvider> queryIndexProviders =
+            Lists.newArrayList();
 
-    private final List<CommitHook> hooks = Lists.newArrayList();
+    private final List<CommitHook> commitHooks = Lists.newArrayList();
 
-    private final List<ValidatorProvider> validators = Lists.newArrayList();
+    private final List<ValidatorProvider> validatorProviders =
+            Lists.newArrayList();
 
     public Oak(MicroKernel kernel) {
         this.kernel = kernel;
@@ -76,7 +79,7 @@ public class Oak {
      */
     @Nonnull
     public Oak with(@Nonnull QueryIndexProvider provider) {
-        providers.add(provider);
+        queryIndexProviders.add(provider);
         return this;
     }
 
@@ -89,7 +92,7 @@ public class Oak {
     @Nonnull
     public Oak with(@Nonnull CommitHook hook) {
         withValidatorHook();
-        hooks.add(hook);
+        commitHooks.add(hook);
         return this;
     }
 
@@ -102,10 +105,10 @@ public class Oak {
      * multiple validators iterating over the changes simultaneously.
      */
     private void withValidatorHook() {
-        if (!validators.isEmpty()) {
+        if (!validatorProviders.isEmpty()) {
             with(new ValidatingHook(
-                    CompositeValidatorProvider.compose(validators)));
-            validators.clear();
+                    CompositeValidatorProvider.compose(validatorProviders)));
+            validatorProviders.clear();
         }
     }
 
@@ -118,7 +121,7 @@ public class Oak {
      */
     @Nonnull
     public Oak with(@Nonnull ValidatorProvider provider) {
-        validators.add(provider);
+        validatorProviders.add(provider);
         return this;
     }
 
@@ -142,13 +145,14 @@ public class Oak {
     public ContentRepository createContentRepository() {
         return new ContentRepositoryImpl(
                 kernel,
-                CompositeQueryIndexProvider.compose(providers),
+                new LoginContextProviderImpl(),
+                CompositeQueryIndexProvider.compose(queryIndexProviders),
                 createCommitHook());
     }
 
     private CommitHook createCommitHook() {
         withValidatorHook();
-        return CompositeHook.compose(hooks);
+        return CompositeHook.compose(commitHooks);
     }
 
     /**
@@ -179,4 +183,4 @@ public class Oak {
     public Root createRoot() {
         return new RootImpl(createNodeStore(), null);
     }
-}
+}
\ No newline at end of file

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ContentRepositoryImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ContentRepositoryImpl.java?rev=1392821&r1=1392820&r2=1392821&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ContentRepositoryImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ContentRepositoryImpl.java Tue Oct  2 10:08:02 2012
@@ -71,7 +71,8 @@ public class ContentRepositoryImpl imple
     }
 
     public ContentRepositoryImpl(CommitHook hook) {
-        this(new MicroKernelImpl(), new CompositeQueryIndexProvider(), hook);
+        this(new MicroKernelImpl(), new LoginContextProviderImpl(),
+                new CompositeQueryIndexProvider(), hook);
     }
 
     /**
@@ -87,12 +88,12 @@ public class ContentRepositoryImpl imple
      * @param validatorProvider
      *            the validation provider
      */
-    public ContentRepositoryImpl(MicroKernel microKernel,
-            QueryIndexProvider indexProvider,
+    public ContentRepositoryImpl(
+            MicroKernel microKernel, QueryIndexProvider indexProvider,
             ValidatorProvider validatorProvider) {
-        this(microKernel, indexProvider, new ValidatingHook(
-                validatorProvider != null ? validatorProvider
-                        : DefaultValidatorProvider.INSTANCE));
+        this(microKernel, new LoginContextProviderImpl(), indexProvider,
+                new ValidatingHook(validatorProvider != null
+                    ? validatorProvider : DefaultValidatorProvider.INSTANCE));
     }
 
     public ContentRepositoryImpl(
@@ -105,11 +106,13 @@ public class ContentRepositoryImpl imple
      * initialized components.
      *
      * @param microKernel underlying kernel instance
+     * @param loginContextProvider login context provider
      * @param indexProvider index provider
      * @param commitHook the commit hook
      */
-    public ContentRepositoryImpl(MicroKernel microKernel, QueryIndexProvider indexProvider,
-                                 CommitHook commitHook) {
+    public ContentRepositoryImpl(
+            MicroKernel microKernel, LoginContextProvider loginContextProvider,
+            QueryIndexProvider indexProvider, CommitHook commitHook) {
 
         nodeStore = new KernelNodeStore(microKernel);
         nodeStore.setHook(commitHook);
@@ -118,8 +121,7 @@ public class ContentRepositoryImpl imple
                 : new CompositeQueryIndexProvider();
         queryEngine = new QueryEngineImpl(nodeStore, qip);
 
-        // TODO: use configurable context provider
-        loginContextProvider = new LoginContextProviderImpl(this);
+        this.loginContextProvider = loginContextProvider;
     }
 
     @Nonnull

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authentication/LoginContextProviderImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authentication/LoginContextProviderImpl.java?rev=1392821&r1=1392820&r2=1392821&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authentication/LoginContextProviderImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authentication/LoginContextProviderImpl.java Tue Oct  2 10:08:02 2012
@@ -16,7 +16,6 @@
  */
 package org.apache.jackrabbit.oak.security.authentication;
 
-import org.apache.jackrabbit.oak.api.ContentRepository;
 import org.apache.jackrabbit.oak.security.principal.TmpPrincipalProvider;
 import org.apache.jackrabbit.oak.spi.security.authentication.LoginContextProvider;
 import org.apache.jackrabbit.oak.spi.security.principal.PrincipalProvider;
@@ -42,7 +41,7 @@ public class LoginContextProviderImpl im
     private final Configuration authConfig;
     private final PrincipalProvider principalProvider;
 
-    public LoginContextProviderImpl(ContentRepository repository) {
+    public LoginContextProviderImpl() {
         // TODO: use configurable authentication config and principal provider
         authConfig = new ConfigurationImpl();
         principalProvider = new TmpPrincipalProvider();

Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/lucene/AbstractLuceneQueryTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/lucene/AbstractLuceneQueryTest.java?rev=1392821&r1=1392820&r2=1392821&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/lucene/AbstractLuceneQueryTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/lucene/AbstractLuceneQueryTest.java Tue Oct  2 10:08:02 2012
@@ -21,6 +21,7 @@ import java.text.ParseException;
 import org.apache.jackrabbit.mk.api.MicroKernel;
 import org.apache.jackrabbit.mk.core.MicroKernelImpl;
 import org.apache.jackrabbit.oak.AbstractOakTest;
+import org.apache.jackrabbit.oak.Oak;
 import org.apache.jackrabbit.oak.api.ContentRepository;
 import org.apache.jackrabbit.oak.api.ContentSession;
 import org.apache.jackrabbit.oak.api.CoreValueFactory;
@@ -29,7 +30,6 @@ import org.apache.jackrabbit.oak.api.Roo
 import org.apache.jackrabbit.oak.api.SessionQueryEngine;
 import org.apache.jackrabbit.oak.api.Tree;
 import org.apache.jackrabbit.oak.commons.PathUtils;
-import org.apache.jackrabbit.oak.core.ContentRepositoryImpl;
 import org.apache.jackrabbit.oak.spi.commit.CommitHook;
 import org.apache.jackrabbit.oak.spi.commit.CompositeHook;
 import org.apache.jackrabbit.oak.spi.query.CompositeQueryIndexProvider;
@@ -70,7 +70,7 @@ public abstract class AbstractLuceneQuer
                 DEFAULT_INDEX_HOME), new LuceneHook(DEFAULT_INDEX_HOME));
         MicroKernel mk = new MicroKernelImpl();
         createDefaultKernelTracker().available(mk);
-        return new ContentRepositoryImpl(mk, qip, ch);
+        return new Oak(mk).with(qip).with(ch).createContentRepository();
     }
 
     protected void createIndexNode() throws Exception {

Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/AbstractQueryTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/AbstractQueryTest.java?rev=1392821&r1=1392820&r2=1392821&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/AbstractQueryTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/AbstractQueryTest.java Tue Oct  2 10:08:02 2012
@@ -19,12 +19,12 @@ package org.apache.jackrabbit.oak.query;
 import org.apache.jackrabbit.mk.core.MicroKernelImpl;
 import org.apache.jackrabbit.mk.index.IndexWrapper;
 import org.apache.jackrabbit.oak.AbstractOakTest;
+import org.apache.jackrabbit.oak.Oak;
 import org.apache.jackrabbit.oak.api.ContentRepository;
 import org.apache.jackrabbit.oak.api.ContentSession;
 import org.apache.jackrabbit.oak.api.CoreValueFactory;
 import org.apache.jackrabbit.oak.api.Root;
 import org.apache.jackrabbit.oak.api.SessionQueryEngine;
-import org.apache.jackrabbit.oak.core.ContentRepositoryImpl;
 import org.apache.jackrabbit.oak.plugins.index.Indexer;
 import org.apache.jackrabbit.oak.plugins.index.PropertyIndexer;
 import org.apache.jackrabbit.oak.spi.commit.CompositeHook;
@@ -56,7 +56,7 @@ public abstract class AbstractQueryTest 
         QueryIndexProvider qip = new CompositeQueryIndexProvider(pi);
         CompositeHook hook = new CompositeHook(pi);
         createDefaultKernelTracker().available(mk);
-        return new ContentRepositoryImpl(mk, qip, hook);
+        return new Oak(mk).with(qip).with(hook).createContentRepository();
     }
 
     @Override

Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/RepositoryImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/RepositoryImpl.java?rev=1392821&r1=1392820&r2=1392821&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/RepositoryImpl.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/RepositoryImpl.java Tue Oct  2 10:08:02 2012
@@ -29,6 +29,7 @@ import javax.security.auth.login.LoginEx
 import org.apache.jackrabbit.commons.SimpleValueFactory;
 import org.apache.jackrabbit.mk.api.MicroKernel;
 import org.apache.jackrabbit.mk.core.MicroKernelImpl;
+import org.apache.jackrabbit.oak.Oak;
 import org.apache.jackrabbit.oak.api.ContentRepository;
 import org.apache.jackrabbit.oak.api.ContentSession;
 import org.apache.jackrabbit.oak.core.ContentRepositoryImpl;
@@ -91,8 +92,10 @@ public class RepositoryImpl implements R
 
     public RepositoryImpl(
             MicroKernel kernel, ScheduledExecutorService executor) {
-        this(new ContentRepositoryImpl(setupInitialContent(kernel), null,
-                DEFAULT_COMMIT_HOOK), executor);
+        this(new Oak(setupInitialContent(kernel))
+                .with(DEFAULT_COMMIT_HOOK)
+                .createContentRepository(),
+                executor);
     }
 
     /**

Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/osgi/OsgiRepository.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/osgi/OsgiRepository.java?rev=1392821&r1=1392820&r2=1392821&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/osgi/OsgiRepository.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/osgi/OsgiRepository.java Tue Oct  2 10:08:02 2012
@@ -22,8 +22,8 @@ import javax.jcr.Credentials;
 import javax.jcr.RepositoryException;
 import javax.jcr.Session;
 
+import org.apache.jackrabbit.oak.Oak;
 import org.apache.jackrabbit.oak.api.ContentRepository;
-import org.apache.jackrabbit.oak.core.ContentRepositoryImpl;
 import org.apache.jackrabbit.oak.jcr.RepositoryImpl;
 
 /**
@@ -41,11 +41,12 @@ public class OsgiRepository extends Repo
     @Override
     public Session login(Credentials credentials, String workspace)
             throws RepositoryException {
+        // TODO: The context class loader hack below shouldn't be needed
+        // with a properly OSGi-compatible JAAS implementation
         Thread thread = Thread.currentThread();
         ClassLoader loader = thread.getContextClassLoader();
         try {
-            thread.setContextClassLoader(
-                    ContentRepositoryImpl.class.getClassLoader());
+            thread.setContextClassLoader(Oak.class.getClassLoader());
             return super.login(credentials, workspace);
         } finally {
             thread.setContextClassLoader(loader);

Modified: jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/Main.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/Main.java?rev=1392821&r1=1392820&r2=1392821&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/Main.java (original)
+++ jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/Main.java Tue Oct  2 10:08:02 2012
@@ -24,6 +24,7 @@ import javax.jcr.Repository;
 
 import org.apache.jackrabbit.mk.api.MicroKernel;
 import org.apache.jackrabbit.mk.core.MicroKernelImpl;
+import org.apache.jackrabbit.oak.Oak;
 import org.apache.jackrabbit.oak.api.ContentRepository;
 import org.apache.jackrabbit.oak.core.ContentRepositoryImpl;
 import org.apache.jackrabbit.oak.http.OakServlet;
@@ -155,8 +156,9 @@ public class Main {
         }
 
         private void addServlets(MicroKernel kernel, String path) {
-            ContentRepository repository =
-                    new ContentRepositoryImpl(kernel, null, buildDefaultCommitHook());
+            ContentRepository repository = new Oak(kernel)
+                .with(buildDefaultCommitHook())
+                .createContentRepository();
 
             ServletHolder oak =
                     new ServletHolder(new OakServlet(repository));