Author: rombert
Date: Wed Aug  5 14:30:32 2015
New Revision: 1694230

URL: http://svn.apache.org/r1694230
Log:
SLING-4927 - Unable to configure the SlingServerRepository using the
provisioning model 

Allow the SlingServerRepositoryManager to handle creation of the home
directory for Jackrabbit and of the configuration file.

Modified:
    
sling/trunk/bundles/jcr/jackrabbit-server/src/main/java/org/apache/sling/jcr/jackrabbit/server/impl/Activator.java
    
sling/trunk/bundles/jcr/jackrabbit-server/src/main/java/org/apache/sling/jcr/jackrabbit/server/impl/SlingServerRepositoryManager.java

Modified: 
sling/trunk/bundles/jcr/jackrabbit-server/src/main/java/org/apache/sling/jcr/jackrabbit/server/impl/Activator.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/bundles/jcr/jackrabbit-server/src/main/java/org/apache/sling/jcr/jackrabbit/server/impl/Activator.java?rev=1694230&r1=1694229&r2=1694230&view=diff
==============================================================================
--- 
sling/trunk/bundles/jcr/jackrabbit-server/src/main/java/org/apache/sling/jcr/jackrabbit/server/impl/Activator.java
 (original)
+++ 
sling/trunk/bundles/jcr/jackrabbit-server/src/main/java/org/apache/sling/jcr/jackrabbit/server/impl/Activator.java
 Wed Aug  5 14:30:32 2015
@@ -18,9 +18,6 @@ package org.apache.sling.jcr.jackrabbit.
 
 import java.io.File;
 import java.io.IOException;
-import java.io.InputStream;
-import java.net.MalformedURLException;
-import java.net.URL;
 import java.util.Hashtable;
 
 import org.apache.sling.jcr.base.AbstractSlingRepository;
@@ -267,7 +264,7 @@ public class Activator implements Bundle
                return;
         }
 
-        String configFileUrl = getConfigFileUrl(bundleContext, home);
+        String configFileUrl = 
SlingServerRepositoryManager.getOrInitConfigFileUrl(bundleContext, home);
 
         // make home relative if inside sling.home
         if (slingHomePath != null && home.startsWith(slingHomePath + "/")) {
@@ -312,45 +309,4 @@ public class Activator implements Bundle
 
         return homeDir.getPath();
     }
-
-    private String getConfigFileUrl(BundleContext bundleContext, String home) 
throws IOException {
-       String repoConfigFileUrl = 
bundleContext.getProperty("sling.repository.config.file.url");
-       if (repoConfigFileUrl != null) {
-               // the repository config file is set
-               URL configFileUrl = null;
-                       try {
-                           // verify it is a good url
-                               configFileUrl = new URL(repoConfigFileUrl);
-                               return repoConfigFileUrl;
-                       } catch (MalformedURLException e) {
-                               // this not an url, trying with "file:"
-                               configFileUrl = new URL("file:///" + 
repoConfigFileUrl);
-                               File configFile = new 
File(configFileUrl.getFile());
-                               if (configFile.canRead()) {
-                                   return configFileUrl.toString();
-                               }
-                       }
-       }
-
-        // ensure the configuration file (inside the home Dir !)
-        File configFile = new File(home, "repository.xml");
-        boolean copied = false;
-
-        try {
-            URL contextConfigURL = new URL("context:repository.xml");
-            InputStream contextConfigStream = contextConfigURL.openStream();
-            if (contextConfigStream != null) {
-                SlingServerRepositoryManager.copyStream(contextConfigStream, 
configFile);
-                copied = true;
-            }
-        } catch (Exception e) {}
-
-        if (!copied) {
-            SlingServerRepositoryManager.copyFile(bundleContext.getBundle(), 
"repository.xml", configFile);
-        }
-
-        // config file is repository.xml (default) in homeDir
-        return null;
-    }
-
 }

Modified: 
sling/trunk/bundles/jcr/jackrabbit-server/src/main/java/org/apache/sling/jcr/jackrabbit/server/impl/SlingServerRepositoryManager.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/bundles/jcr/jackrabbit-server/src/main/java/org/apache/sling/jcr/jackrabbit/server/impl/SlingServerRepositoryManager.java?rev=1694230&r1=1694229&r2=1694230&view=diff
==============================================================================
--- 
sling/trunk/bundles/jcr/jackrabbit-server/src/main/java/org/apache/sling/jcr/jackrabbit/server/impl/SlingServerRepositoryManager.java
 (original)
+++ 
sling/trunk/bundles/jcr/jackrabbit-server/src/main/java/org/apache/sling/jcr/jackrabbit/server/impl/SlingServerRepositoryManager.java
 Wed Aug  5 14:30:32 2015
@@ -160,6 +160,13 @@ public class SlingServerRepositoryManage
             }
             home = homeFile.getAbsolutePath();
         }
+        
+        if (!homeFile.isDirectory()) {
+            log.info("Creating default config for Jackrabbit in " + homeFile);
+            if (!homeFile.mkdirs()) {
+                throw new RuntimeException("Unable to create Jackrabbit home 
at " + home);
+            }
+        }
 
         // somewhat dirty hack to have the derby.log file in a sensible
         // location, but don't overwrite anything already set
@@ -167,6 +174,12 @@ public class SlingServerRepositoryManage
             String derbyLog = home + "/derby.log";
             System.setProperty("derby.stream.error.file", derbyLog);
         }
+        
+        try {
+            getOrInitConfigFileUrl(getComponentContext().getBundleContext(), 
home);
+        } catch (IOException e) {
+            throw new RuntimeException("Unable to get config file url", e);
+        }
 
         InputStream ins = null;
         try {
@@ -228,7 +241,7 @@ public class SlingServerRepositoryManage
         // got no repository ....
         return null;
     }
-
+    
     private Repository registerStatistics(Repository repository) {
         if (repository instanceof RepositoryImpl) {
             try {
@@ -379,7 +392,56 @@ public class SlingServerRepositoryManage
 
     // ---------- Helper 
-------------------------------------------------------
 
-    public static void copyFile(Bundle bundle, String entryPath, File 
destFile) throws FileNotFoundException,
+    /**
+     * Attempts to retrieve the URL of the repository configuration file, 
creating a default one is no URL is configured
+     * 
+     * @param bundleContext the bundle context
+     * @param home the repository home
+     * @return the url, or null if the default location is used
+     * @throws IOException error when getting or initialising the config file 
url
+     */
+    public static String getOrInitConfigFileUrl(BundleContext bundleContext, 
String home) throws IOException {
+        
+        String repoConfigFileUrl = 
bundleContext.getProperty("sling.repository.config.file.url");
+        if (repoConfigFileUrl != null) {
+            // the repository config file is set
+            URL configFileUrl = null;
+            try {
+                // verify it is a good url
+                configFileUrl = new URL(repoConfigFileUrl);
+                return repoConfigFileUrl;
+            } catch (MalformedURLException e) {
+                // this not an url, trying with "file:"
+                configFileUrl = new URL("file:///" + repoConfigFileUrl);
+                File configFile = new File(configFileUrl.getFile());
+                if (configFile.canRead()) {
+                    return configFileUrl.toString();
+                }
+            }
+        }
+
+        // ensure the configuration file (inside the home Dir !)
+        File configFile = new File(home, "repository.xml");
+        boolean copied = false;
+
+        try {
+            URL contextConfigURL = new URL("context:repository.xml");
+            InputStream contextConfigStream = contextConfigURL.openStream();
+            if (contextConfigStream != null) {
+                SlingServerRepositoryManager.copyStream(contextConfigStream, 
configFile);
+                copied = true;
+            }
+        } catch (Exception e) {}
+
+        if (!copied) {
+            SlingServerRepositoryManager.copyFile(bundleContext.getBundle(), 
"repository.xml", configFile);
+        }
+
+        // config file is repository.xml (default) in homeDir
+        return null;
+    }
+    
+    private static void copyFile(Bundle bundle, String entryPath, File 
destFile) throws FileNotFoundException,
             IOException {
         if (destFile.canRead()) {
             // nothing to do, file exists
@@ -397,7 +459,7 @@ public class SlingServerRepositoryManage
         copyStream(source, destFile);
     }
 
-    public static void copyStream(InputStream source, File destFile) throws 
FileNotFoundException, IOException {
+    private static void copyStream(InputStream source, File destFile) throws 
FileNotFoundException, IOException {
         OutputStream dest = null;
 
         try {


Reply via email to