From 6127aa1f7afaa05deb38ad96b8c13d2924e6da47 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Sun, 18 Mar 2012 17:08:50 +0100 Subject: [PATCH] start embedded orientdb server if no configuration is available --- scm-dao-orientdb/pom.xml | 12 ++++ .../scm/orientdb/ConnectionProvider.java | 55 +++++++++++++++++-- .../scm/orientdb/server-configuration.xml | 52 ++++++++++++++++++ 3 files changed, 113 insertions(+), 6 deletions(-) create mode 100644 scm-dao-orientdb/src/main/resources/sonia/scm/orientdb/server-configuration.xml diff --git a/scm-dao-orientdb/pom.xml b/scm-dao-orientdb/pom.xml index 9beb77d02b..6bb17e33d2 100644 --- a/scm-dao-orientdb/pom.xml +++ b/scm-dao-orientdb/pom.xml @@ -36,6 +36,18 @@ 1.0rc8 + + com.orientechnologies + orientdb-server + 1.0rc8 + + + com.orientechnologies + orientdb-client + + + + diff --git a/scm-dao-orientdb/src/main/java/sonia/scm/orientdb/ConnectionProvider.java b/scm-dao-orientdb/src/main/java/sonia/scm/orientdb/ConnectionProvider.java index 5d46ce6360..9f691e7356 100644 --- a/scm-dao-orientdb/src/main/java/sonia/scm/orientdb/ConnectionProvider.java +++ b/scm-dao-orientdb/src/main/java/sonia/scm/orientdb/ConnectionProvider.java @@ -33,18 +33,27 @@ package sonia.scm.orientdb; //~--- non-JDK imports -------------------------------------------------------- +import com.google.common.io.Resources; import com.google.inject.Provider; import com.google.inject.Singleton; import com.orientechnologies.orient.core.db.document.ODatabaseDocumentPool; import com.orientechnologies.orient.core.db.document.ODatabaseDocumentTx; +import com.orientechnologies.orient.server.OServer; +import com.orientechnologies.orient.server.OServerMain; +import com.orientechnologies.orient.server.config.OServerConfiguration; +import sonia.scm.ConfigurationException; import sonia.scm.SCMContext; //~--- JDK imports ------------------------------------------------------------ import java.io.File; +import java.net.URL; + +import java.nio.charset.Charset; + import javax.xml.bind.JAXB; /** @@ -67,6 +76,10 @@ public class ConnectionProvider implements Provider /** Field description */ public static final String DEFAULT_USERNAME = "admin"; + /** Field description */ + public static final String EMBEDDED_CONFIGURATION = + "sonia/scm/orientdb/server-configuration.xml"; + /** Field description */ public static final String PATH = "config".concat(File.separator).concat("orientdb.xml"); @@ -87,14 +100,44 @@ public class ConnectionProvider implements Provider } else { + try + { - // create default connection configuration - File directory = new File(SCMContext.getContext().getBaseDirectory(), - DEFAULT_DB_DIRECTORY); - String url = DEFAULT_DB_SHEME.concat(directory.getAbsolutePath()); + // create connection configuration for embedded server + File directory = new File(SCMContext.getContext().getBaseDirectory(), + DEFAULT_DB_DIRECTORY); + OServer server = OServerMain.create(); + URL configUrl = Resources.getResource(EMBEDDED_CONFIGURATION); + String config = Resources.toString(configUrl, Charset.defaultCharset()); - init(new ConnectionConfiguration(url, DEFAULT_USERNAME, - DEFAULT_PASSWORD)); + server.startup(config); + server.activate(); + + String url = DEFAULT_DB_SHEME.concat(directory.getAbsolutePath()); + + if (!directory.exists()) + { + ODatabaseDocumentTx connection = null; + + try + { + connection = new ODatabaseDocumentTx(url); + connection.create(); + } + finally + { + OrientDBUtil.close(connection); + } + } + + init(new ConnectionConfiguration(url, DEFAULT_USERNAME, + DEFAULT_PASSWORD)); + } + catch (Exception ex) + { + throw new ConfigurationException("could not start embedded database", + ex); + } } } diff --git a/scm-dao-orientdb/src/main/resources/sonia/scm/orientdb/server-configuration.xml b/scm-dao-orientdb/src/main/resources/sonia/scm/orientdb/server-configuration.xml new file mode 100644 index 0000000000..78c221b8ec --- /dev/null +++ b/scm-dao-orientdb/src/main/resources/sonia/scm/orientdb/server-configuration.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file