You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ro...@apache.org on 2015/08/05 16:30:33 UTC
svn commit: r1694230 - in
/sling/trunk/bundles/jcr/jackrabbit-server/src/main/java/org/apache/sling/jcr/jackrabbit/server/impl:
Activator.java SlingServerRepositoryManager.java
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 {