You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ie...@apache.org on 2013/03/28 09:15:31 UTC

svn commit: r1461975 - in /sling/whiteboard/ieb/oak: launchpad/ launchpad/src/main/resources/resources/config/ server/ server/src/main/java/org/apache/sling/oak/server/

Author: ieb
Date: Thu Mar 28 08:15:30 2013
New Revision: 1461975

URL: http://svn.apache.org/r1461975
Log:
SLING-2788 Repo starts Ok with only minor errors.

Modified:
    sling/whiteboard/ieb/oak/launchpad/pom.xml
    sling/whiteboard/ieb/oak/launchpad/src/main/resources/resources/config/org.apache.jackrabbit.mk.osgi.MicroKernelService.config
    sling/whiteboard/ieb/oak/server/pom.xml
    sling/whiteboard/ieb/oak/server/src/main/java/org/apache/sling/oak/server/SlingRepositoryImpl.java

Modified: sling/whiteboard/ieb/oak/launchpad/pom.xml
URL: http://svn.apache.org/viewvc/sling/whiteboard/ieb/oak/launchpad/pom.xml?rev=1461975&r1=1461974&r2=1461975&view=diff
==============================================================================
--- sling/whiteboard/ieb/oak/launchpad/pom.xml (original)
+++ sling/whiteboard/ieb/oak/launchpad/pom.xml Thu Mar 28 08:15:30 2013
@@ -135,13 +135,6 @@
                             <version>0.0.1-SNAPSHOT</version>
                         </bundle>
                         <bundle>
-                            <groupId>org.apache.sling</groupId>
-                            <artifactId>org.apache.sling.jcr.base</artifactId>
-                            <version>2.1.3-SNAPSHOT</version>
-                        </bundle>
-                        <!-- This is embedded in oak-sling <bundle> <groupId>org.apache.jackrabbit</groupId> 
-                            <artifactId>oak-jcr</artifactId> <version>0.7-SNAPSHOT</version> </bundle> -->
-                        <bundle>
                             <groupId>org.apache.jackrabbit</groupId>
                             <artifactId>oak-core</artifactId>
                             <version>0.7-SNAPSHOT</version>
@@ -181,7 +174,11 @@
                             <artifactId>guava</artifactId>
                             <version>13.0.1</version>
                         </bundle>
-
+                        <bundle>
+                            <groupId>com.h2database</groupId>
+                            <artifactId>h2</artifactId>
+                            <version>1.3.170</version>
+                        </bundle>
                     </additionalBundles>
                 </configuration>
             </plugin>

Modified: sling/whiteboard/ieb/oak/launchpad/src/main/resources/resources/config/org.apache.jackrabbit.mk.osgi.MicroKernelService.config
URL: http://svn.apache.org/viewvc/sling/whiteboard/ieb/oak/launchpad/src/main/resources/resources/config/org.apache.jackrabbit.mk.osgi.MicroKernelService.config?rev=1461975&r1=1461974&r2=1461975&view=diff
==============================================================================
--- sling/whiteboard/ieb/oak/launchpad/src/main/resources/resources/config/org.apache.jackrabbit.mk.osgi.MicroKernelService.config (original)
+++ sling/whiteboard/ieb/oak/launchpad/src/main/resources/resources/config/org.apache.jackrabbit.mk.osgi.MicroKernelService.config Thu Mar 28 08:15:30 2013
@@ -1,2 +1,2 @@
-oak.mk.homeDir="./quickstart/repository"
-oak.mk.name="Oak"
+homeDir="./sling/repository"
+name="Oak"

Modified: sling/whiteboard/ieb/oak/server/pom.xml
URL: http://svn.apache.org/viewvc/sling/whiteboard/ieb/oak/server/pom.xml?rev=1461975&r1=1461974&r2=1461975&view=diff
==============================================================================
--- sling/whiteboard/ieb/oak/server/pom.xml (original)
+++ sling/whiteboard/ieb/oak/server/pom.xml Thu Mar 28 08:15:30 2013
@@ -88,6 +88,12 @@
             <version>0.7-SNAPSHOT</version>
             <scope>provided</scope>
         </dependency>
+        <dependency>
+            <groupId>org.apache.jackrabbit</groupId>
+            <artifactId>oak-core</artifactId>
+            <version>0.7-SNAPSHOT</version>
+            <scope>provided</scope>
+        </dependency>
         
         <dependency>
             <groupId>org.apache.sling</groupId>
@@ -104,13 +110,7 @@
         <dependency>
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.jcr.base</artifactId>
-            <version>2.1.3-SNAPSHOT</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.sling</groupId>
-            <artifactId>org.apache.sling.jcr.resource</artifactId>
-            <version>2.2.4</version>
+            <version>2.1.2</version>
             <scope>provided</scope>
         </dependency>
 

Modified: sling/whiteboard/ieb/oak/server/src/main/java/org/apache/sling/oak/server/SlingRepositoryImpl.java
URL: http://svn.apache.org/viewvc/sling/whiteboard/ieb/oak/server/src/main/java/org/apache/sling/oak/server/SlingRepositoryImpl.java?rev=1461975&r1=1461974&r2=1461975&view=diff
==============================================================================
--- sling/whiteboard/ieb/oak/server/src/main/java/org/apache/sling/oak/server/SlingRepositoryImpl.java (original)
+++ sling/whiteboard/ieb/oak/server/src/main/java/org/apache/sling/oak/server/SlingRepositoryImpl.java Thu Mar 28 08:15:30 2013
@@ -35,12 +35,26 @@ import org.apache.felix.scr.annotations.
 import org.apache.felix.scr.annotations.Property;
 import org.apache.felix.scr.annotations.Reference;
 import org.apache.felix.scr.annotations.Service;
+import org.apache.jackrabbit.mk.api.MicroKernel;
+import org.apache.jackrabbit.oak.Oak;
 import org.apache.jackrabbit.oak.api.ContentRepository;
-import org.apache.jackrabbit.oak.jcr.osgi.OsgiRepository;
+import org.apache.jackrabbit.oak.jcr.RepositoryImpl;
+import org.apache.jackrabbit.oak.plugins.commit.ConflictValidatorProvider;
+import org.apache.jackrabbit.oak.plugins.commit.JcrConflictHandler;
+import org.apache.jackrabbit.oak.plugins.index.nodetype.NodeTypeIndexProvider;
+import org.apache.jackrabbit.oak.plugins.index.p2.Property2IndexHookProvider;
+import org.apache.jackrabbit.oak.plugins.index.p2.Property2IndexProvider;
+import org.apache.jackrabbit.oak.plugins.name.NameValidatorProvider;
+import org.apache.jackrabbit.oak.plugins.name.NamespaceValidatorProvider;
+import org.apache.jackrabbit.oak.plugins.nodetype.DefaultTypeEditor;
+import org.apache.jackrabbit.oak.plugins.nodetype.RegistrationEditorProvider;
+import org.apache.jackrabbit.oak.plugins.nodetype.TypeEditorProvider;
+import org.apache.jackrabbit.oak.plugins.nodetype.write.InitialContent;
+import org.apache.jackrabbit.oak.plugins.version.VersionHook;
+import org.apache.jackrabbit.oak.security.SecurityProviderImpl;
 import org.apache.jackrabbit.oak.spi.security.SecurityProvider;
 import org.apache.sling.jcr.api.SlingRepository;
 import org.apache.sling.jcr.base.AbstractNamespaceMappingRepository;
-import org.apache.sling.jcr.resource.JcrResourceConstants;
 import org.osgi.service.component.ComponentContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -105,10 +119,11 @@ public class SlingRepositoryImpl extends
     private static final Logger LOGGER = LoggerFactory.getLogger(SlingRepositoryImpl.class);
 
     /**
-     * Content repository provided by Oak.
+     * micro Kernel for storing Oak content.
      */
     @Reference
-    private ContentRepository repository;
+    private MicroKernel microKernel;
+
 
     /**
      * Factory for the security provider.
@@ -129,7 +144,7 @@ public class SlingRepositoryImpl extends
     /**
      * The configured oak repository ready for use.
      */
-    private OsgiRepository oakRepository;
+    private RepositoryImpl repository;
 
     /**
      * Anon user id.
@@ -151,14 +166,6 @@ public class SlingRepositoryImpl extends
      */
     private char[] adminPassword;
 
-    /**
-     * Dummy property holding the sling folder type ensuring that the resource
-     * bundle is present. If its not present, there is a risk that on activate
-     * the standard Sling CND files wont be available to add to the repo, which
-     * (on certain Operating systems) will cause a startup order leaving the
-     * repo in an invalid state. Putting the property here
-     */
-    private String slingFolderType;
 
     /**
      * @param componentContext component context.
@@ -175,19 +182,45 @@ public class SlingRepositoryImpl extends
             DEFAULT_ADMIN_USER);
         adminPassword = getProperty(properties, PROPERTY_ADMIN_PASS,
             DEFAULT_ADMIN_PASS).toCharArray();
+        repository = getRespository();
+        LOGGER.info("Calling Setup ");
+        super.setup(componentContext.getBundleContext());
+        LOGGER.info("Done Setup Repository ready ======================== ");
+    }
+
+    /**
+     * @return a newly constructed repository.
+     */
+    private RepositoryImpl getRespository() {
         securityProvider = securityProviderFactory.getSecurityProvider();
         executor = Executors.newScheduledThreadPool(1);
-        oakRepository = new OsgiRepository(repository, executor,
+        return new RepositoryImpl(getContentRepository(), executor,
             securityProvider);
-        // This import ensures that the resource bundle containing the node
-        // types is present
-        // before this component starts up. It may be unnecessary, but this
-        // ensures its there.
-        slingFolderType = JcrResourceConstants.NT_SLING_FOLDER;
-        LOGGER.debug(
-            "Bound sucessfully to jcr resource bundle, Sling Folder type is {} ",
-            slingFolderType);
-        super.setup(componentContext.getBundleContext());
+    }
+
+    /**
+     * @return creates a new Oak repository suitable for Jcr (see Jcr class)
+     */
+    private ContentRepository getContentRepository() {
+        if (microKernel == null) {
+            throw new IllegalStateException("Cant start without a micro kernel");
+        }
+        LOGGER.info("Creating Oak Content repository using micro Kernel {} ", microKernel.getClass());
+        return new Oak(microKernel)
+                .with(new InitialContent())
+                .with(JcrConflictHandler.JCR_CONFLICT_HANDLER)
+                .with(new DefaultTypeEditor())
+                .with(new VersionHook())
+                .with(new SecurityProviderImpl())
+                .with(new NameValidatorProvider())
+                .with(new NamespaceValidatorProvider())
+                .with(new TypeEditorProvider())
+                .with(new RegistrationEditorProvider())
+                .with(new ConflictValidatorProvider())
+                .with(new Property2IndexHookProvider())
+                .with(new Property2IndexProvider())
+                .with(new NodeTypeIndexProvider())
+                .createContentRepository();
     }
 
     /**
@@ -217,7 +250,7 @@ public class SlingRepositoryImpl extends
     @Deactivate
     public void deactivate(ComponentContext componentContext) {
         super.tearDown();
-        oakRepository = null;
+        repository = null;
         securityProvider = null;
         executor.shutdown();
         executor = null;
@@ -225,20 +258,29 @@ public class SlingRepositoryImpl extends
 
     @Override
     public String[] getDescriptorKeys() {
-        return oakRepository.getDescriptorKeys();
+        return repository.getDescriptorKeys();
     }
 
     @Override
     public String getDescriptor(String key) {
-        return oakRepository.getDescriptor(key);
+        return repository.getDescriptor(key);
     }
 
     @Override
     public Session login(Credentials credentials, String workspaceName)
             throws LoginException, NoSuchWorkspaceException,
             RepositoryException {
-        return getNamespaceAwareSession(oakRepository.login(credentials,
-            workspaceName));
+        // block taken from OsgiRepository.
+        // 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(Oak.class.getClassLoader());
+            return getNamespaceAwareSession(repository.login(credentials, workspaceName));
+        } finally {
+            thread.setContextClassLoader(loader);
+        }
     }
 
     @Override