From c538d05e44e30fa2fbdb715a5bc8ba006dcebe96 Mon Sep 17 00:00:00 2001 From: Tomas Knap Date: Fri, 21 Oct 2016 12:30:33 +0200 Subject: [PATCH] Adjustments to support marklogic --- backend/pom.xml | 5 ++ .../commons/app/rdf/RepositoryManager.java | 24 ++++--- dataunit/pom.xml | 10 +++ .../rdf/repository/ConnectionSourceImpl.java | 10 +++ .../commons/rdf/repository/InMemoryRDF.java | 8 +-- .../commons/rdf/repository/LocalRDF.java | 9 ++- .../rdf/repository/ManagableRepository.java | 3 +- .../commons/rdf/repository/MarkLogic.java | 67 +++++++++++++++++++ .../commons/rdf/repository/RemoteRDF.java | 2 +- .../rdf/repository/RepositoryFactory.java | 3 + lib/lib-core/pom.xml | 6 +- 11 files changed, 122 insertions(+), 25 deletions(-) create mode 100644 dataunit/src/main/java/eu/unifiedviews/commons/rdf/repository/MarkLogic.java diff --git a/backend/pom.xml b/backend/pom.xml index 2e5db3aab1..7073256276 100644 --- a/backend/pom.xml +++ b/backend/pom.xml @@ -68,6 +68,11 @@ jetty-server ${jetty.server.version} + + com.fasterxml.jackson.core + jackson-core + 2.8.3 + diff --git a/commons-app/src/main/java/cz/cuni/mff/xrg/odcs/commons/app/rdf/RepositoryManager.java b/commons-app/src/main/java/cz/cuni/mff/xrg/odcs/commons/app/rdf/RepositoryManager.java index 838aafe532..83ee34d1ef 100644 --- a/commons-app/src/main/java/cz/cuni/mff/xrg/odcs/commons/app/rdf/RepositoryManager.java +++ b/commons-app/src/main/java/cz/cuni/mff/xrg/odcs/commons/app/rdf/RepositoryManager.java @@ -1,22 +1,21 @@ package cz.cuni.mff.xrg.odcs.commons.app.rdf; -import java.io.File; -import java.util.Collections; -import java.util.HashMap; -import java.util.Map; - -import javax.annotation.PostConstruct; +import cz.cuni.mff.xrg.odcs.commons.app.resource.MissingResourceException; +import cz.cuni.mff.xrg.odcs.commons.app.resource.ResourceManager; +import eu.unifiedviews.commons.rdf.repository.ManagableRepository; +import eu.unifiedviews.commons.rdf.repository.RDFException; +import eu.unifiedviews.commons.rdf.repository.RepositoryFactory; import org.openrdf.repository.Repository; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; -import cz.cuni.mff.xrg.odcs.commons.app.resource.MissingResourceException; -import cz.cuni.mff.xrg.odcs.commons.app.resource.ResourceManager; -import eu.unifiedviews.commons.rdf.repository.ManagableRepository; -import eu.unifiedviews.commons.rdf.repository.RDFException; -import eu.unifiedviews.commons.rdf.repository.RepositoryFactory; +import javax.annotation.PostConstruct; +import java.io.File; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; /** * Provide access to repositories. @@ -87,6 +86,9 @@ protected void init() { case "remoteRDF": repositoryType = ManagableRepository.Type.REMOTE_RDF; break; + case "marklogic": + repositoryType = ManagableRepository.Type.MARKLOGIC; + break; default: throw new RuntimeException("Unknown repository type."); } diff --git a/dataunit/pom.xml b/dataunit/pom.xml index 3e6df52232..72fbc9968d 100644 --- a/dataunit/pom.xml +++ b/dataunit/pom.xml @@ -264,6 +264,16 @@ com.openlinksw.virtuoso.virtjdbc4_1 ${virtuoso.jdbc.version} + + com.marklogic + marklogic-sesame + 1.0.2 + + + com.marklogic + java-client-api + 3.0.6 + diff --git a/dataunit/src/main/java/eu/unifiedviews/commons/rdf/repository/ConnectionSourceImpl.java b/dataunit/src/main/java/eu/unifiedviews/commons/rdf/repository/ConnectionSourceImpl.java index 8740901e76..730336b6ca 100644 --- a/dataunit/src/main/java/eu/unifiedviews/commons/rdf/repository/ConnectionSourceImpl.java +++ b/dataunit/src/main/java/eu/unifiedviews/commons/rdf/repository/ConnectionSourceImpl.java @@ -36,6 +36,16 @@ public ConnectionSourceImpl(Repository repository, boolean retryOnFailure) { this.retryOnFailure = retryOnFailure; } + /** + * Used repository. + * + * @param repository + */ + public ConnectionSourceImpl(Repository repository) { + this.repository = repository; + this.retryOnFailure = false; + } + @Override public RepositoryConnection getConnection() throws RepositoryException { return repository.getConnection(); diff --git a/dataunit/src/main/java/eu/unifiedviews/commons/rdf/repository/InMemoryRDF.java b/dataunit/src/main/java/eu/unifiedviews/commons/rdf/repository/InMemoryRDF.java index e5c0fb3aa6..fbb2163edc 100644 --- a/dataunit/src/main/java/eu/unifiedviews/commons/rdf/repository/InMemoryRDF.java +++ b/dataunit/src/main/java/eu/unifiedviews/commons/rdf/repository/InMemoryRDF.java @@ -1,6 +1,7 @@ package eu.unifiedviews.commons.rdf.repository; -import java.io.File; +import eu.unifiedviews.commons.dataunit.core.ConnectionSource; +import eu.unifiedviews.dataunit.DataUnitException; import org.openrdf.repository.Repository; import org.openrdf.repository.RepositoryException; import org.openrdf.repository.config.RepositoryConfig; @@ -10,8 +11,7 @@ import org.openrdf.repository.sail.config.SailRepositoryConfig; import org.openrdf.sail.memory.config.MemoryStoreConfig; -import eu.unifiedviews.commons.dataunit.core.ConnectionSource; -import eu.unifiedviews.dataunit.DataUnitException; +import java.io.File; /** * @@ -53,7 +53,7 @@ public InMemoryRDF(String repositoryPath) throws RDFException { @Override public ConnectionSource getConnectionSource() { - return new ConnectionSourceImpl(repository, false); + return new ConnectionSourceImpl(repository); } @Override diff --git a/dataunit/src/main/java/eu/unifiedviews/commons/rdf/repository/LocalRDF.java b/dataunit/src/main/java/eu/unifiedviews/commons/rdf/repository/LocalRDF.java index bb11804f47..720b781424 100644 --- a/dataunit/src/main/java/eu/unifiedviews/commons/rdf/repository/LocalRDF.java +++ b/dataunit/src/main/java/eu/unifiedviews/commons/rdf/repository/LocalRDF.java @@ -1,15 +1,14 @@ package eu.unifiedviews.commons.rdf.repository; -import java.io.File; - +import eu.unifiedviews.commons.dataunit.core.ConnectionSource; +import eu.unifiedviews.dataunit.DataUnitException; import org.apache.commons.io.FileUtils; import org.openrdf.repository.Repository; import org.openrdf.repository.RepositoryException; import org.openrdf.repository.sail.SailRepository; import org.openrdf.sail.nativerdf.NativeStore; -import eu.unifiedviews.commons.dataunit.core.ConnectionSource; -import eu.unifiedviews.dataunit.DataUnitException; +import java.io.File; /** * @@ -41,7 +40,7 @@ public LocalRDF(String repositoryPath) throws RDFException { @Override public ConnectionSource getConnectionSource() { - return new ConnectionSourceImpl(repository, false); + return new ConnectionSourceImpl(repository); } @Override diff --git a/dataunit/src/main/java/eu/unifiedviews/commons/rdf/repository/ManagableRepository.java b/dataunit/src/main/java/eu/unifiedviews/commons/rdf/repository/ManagableRepository.java index 01da3499aa..b7bfcfb1b6 100644 --- a/dataunit/src/main/java/eu/unifiedviews/commons/rdf/repository/ManagableRepository.java +++ b/dataunit/src/main/java/eu/unifiedviews/commons/rdf/repository/ManagableRepository.java @@ -15,7 +15,8 @@ public static enum Type { LOCAL_RDF, INMEMORY_RDF, REMOTE_RDF, - VIRTUOSO + VIRTUOSO, + MARKLOGIC } /** diff --git a/dataunit/src/main/java/eu/unifiedviews/commons/rdf/repository/MarkLogic.java b/dataunit/src/main/java/eu/unifiedviews/commons/rdf/repository/MarkLogic.java new file mode 100644 index 0000000000..06091fdf61 --- /dev/null +++ b/dataunit/src/main/java/eu/unifiedviews/commons/rdf/repository/MarkLogic.java @@ -0,0 +1,67 @@ +package eu.unifiedviews.commons.rdf.repository; + +import com.marklogic.client.DatabaseClient; +import com.marklogic.client.DatabaseClientFactory; +import com.marklogic.semantics.sesame.MarkLogicRepository; +import eu.unifiedviews.commons.dataunit.core.ConnectionSource; +import org.openrdf.repository.Repository; +import org.openrdf.repository.RepositoryException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * Created by tomasknap on 18/10/16. + */ +public class MarkLogic implements ManagableRepository { + + private static final Logger log = LoggerFactory.getLogger(RepositoryFactory.class); + + private final Repository repository; + + + public MarkLogic(String url, String user, String password) throws RDFException { + + String port = url.substring(url.lastIndexOf(":")+1); + int portNumber = Integer.valueOf(port); + log.info("Port number: {}", portNumber); + + String host = url.substring(0,url.lastIndexOf(":")); + log.info("Host: {}", host); + + DatabaseClient adminClient = + DatabaseClientFactory.newClient(host, portNumber, + user, password, DatabaseClientFactory.Authentication.DIGEST); + + // create repo and init + repository = new MarkLogicRepository(adminClient); + + try { + repository.initialize(); + } catch (RepositoryException ex) { + throw new RDFException("Could not initialize repository", ex); + } + } + + + @Override + public ConnectionSource getConnectionSource() { + return new ConnectionSourceImpl(repository); + } + + + @Override + public void release() throws RDFException { + try { + repository.shutDown(); + } catch (RepositoryException ex) { + throw new RDFException("Can't shutDown repository.", ex); + } + } + + @Override + public void delete() throws RDFException { + // Do nothing here. + } + + +} diff --git a/dataunit/src/main/java/eu/unifiedviews/commons/rdf/repository/RemoteRDF.java b/dataunit/src/main/java/eu/unifiedviews/commons/rdf/repository/RemoteRDF.java index 3d9f9cc0f9..dfc254f030 100644 --- a/dataunit/src/main/java/eu/unifiedviews/commons/rdf/repository/RemoteRDF.java +++ b/dataunit/src/main/java/eu/unifiedviews/commons/rdf/repository/RemoteRDF.java @@ -74,7 +74,7 @@ public RemoteRDF(String url, String user, String password, Long executionId) thr @Override public ConnectionSource getConnectionSource() { - return new ConnectionSourceImpl(repository, false); + return new ConnectionSourceImpl(repository); } @Override diff --git a/dataunit/src/main/java/eu/unifiedviews/commons/rdf/repository/RepositoryFactory.java b/dataunit/src/main/java/eu/unifiedviews/commons/rdf/repository/RepositoryFactory.java index 121b7c0c76..c53cbf49ee 100644 --- a/dataunit/src/main/java/eu/unifiedviews/commons/rdf/repository/RepositoryFactory.java +++ b/dataunit/src/main/java/eu/unifiedviews/commons/rdf/repository/RepositoryFactory.java @@ -55,6 +55,9 @@ public ManagableRepository create(Long executionId, ManagableRepository.Type typ case VIRTUOSO: repository = new Virtuoso(uri, user, password); break; + case MARKLOGIC: + repository = new MarkLogic(uri, user, password); + break; default: throw new RDFException("Unknown repository type: " + type.toString()); } diff --git a/lib/lib-core/pom.xml b/lib/lib-core/pom.xml index bb65b65994..4e8af144e9 100644 --- a/lib/lib-core/pom.xml +++ b/lib/lib-core/pom.xml @@ -49,17 +49,17 @@ com.fasterxml.jackson.core jackson-annotations - 2.6.0 + 2.8.3 com.fasterxml.jackson.core jackson-databind - 2.6.0 + 2.8.3 com.fasterxml.jackson.core jackson-core - 2.6.0 + 2.8.3 org.apache.jena