You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@rya.apache.org by ca...@apache.org on 2018/01/06 00:39:04 UTC
[02/15] incubator-rya git commit: RYA-104 Closing resources and
fixing tests for some of the Mongo interactors.
RYA-104 Closing resources and fixing tests for some of the Mongo interactors.
Project: http://git-wip-us.apache.org/repos/asf/incubator-rya/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-rya/commit/5739f78e
Tree: http://git-wip-us.apache.org/repos/asf/incubator-rya/tree/5739f78e
Diff: http://git-wip-us.apache.org/repos/asf/incubator-rya/diff/5739f78e
Branch: refs/heads/master
Commit: 5739f78e568cf0696d4773521b658bd196a0aabe
Parents: 6bb7146
Author: kchilton2 <ke...@gmail.com>
Authored: Thu Dec 28 18:21:44 2017 -0500
Committer: kchilton2 <ke...@gmail.com>
Committed: Fri Jan 5 16:48:40 2018 -0500
----------------------------------------------------------------------
.../client/mongo/MongoExecuteSparqlQuery.java | 75 ++++++++-------
.../api/client/mongo/MongoLoadStatements.java | 43 ++++++---
.../client/mongo/MongoLoadStatementsFile.java | 39 ++++++--
.../client/mongo/MongoExecuteSparqlQueryIT.java | 50 +++++-----
.../client/mongo/MongoLoadStatementsFileIT.java | 30 +++---
.../api/client/mongo/MongoLoadStatementsIT.java | 99 ++++++++++----------
.../apache/rya/shell/RyaConnectionCommands.java | 17 ++--
.../org/apache/rya/shell/SharedShellState.java | 24 +++++
8 files changed, 224 insertions(+), 153 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/5739f78e/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoExecuteSparqlQuery.java
----------------------------------------------------------------------
diff --git a/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoExecuteSparqlQuery.java b/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoExecuteSparqlQuery.java
index d920b30..d3b7bcb 100644
--- a/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoExecuteSparqlQuery.java
+++ b/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoExecuteSparqlQuery.java
@@ -47,6 +47,8 @@ import org.openrdf.repository.sail.SailRepository;
import org.openrdf.repository.sail.SailRepositoryConnection;
import org.openrdf.sail.Sail;
import org.openrdf.sail.SailException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import edu.umd.cs.findbugs.annotations.DefaultAnnotation;
import edu.umd.cs.findbugs.annotations.NonNull;
@@ -56,12 +58,13 @@ import edu.umd.cs.findbugs.annotations.NonNull;
*/
@DefaultAnnotation(NonNull.class)
public class MongoExecuteSparqlQuery implements ExecuteSparqlQuery {
+ private static final Logger log = LoggerFactory.getLogger(MongoExecuteSparqlQuery.class);
private final MongoConnectionDetails connectionDetails;
private final InstanceExists instanceExists;
/**
- * Constructs an instance.
+ * Constructs an instance of {@link MongoExecuteSparqlQuery}.
*
* @param connectionDetails - Details to connect to the server. (not null)
* @param instanceExists - The interactor used to check if a Rya instance exists. (not null)
@@ -72,32 +75,25 @@ public class MongoExecuteSparqlQuery implements ExecuteSparqlQuery {
this.connectionDetails = requireNonNull(connectionDetails);
this.instanceExists = requireNonNull(instanceExists);
}
+
@Override
public String executeSparqlQuery(final String ryaInstanceName, final String sparqlQuery) throws InstanceDoesNotExistException, RyaClientException {
requireNonNull(ryaInstanceName);
requireNonNull(sparqlQuery);
- requireNonNull(ryaInstanceName);
- requireNonNull(sparqlQuery);
// Ensure the Rya Instance exists.
if (!instanceExists.exists(ryaInstanceName)) {
- throw new InstanceDoesNotExistException(String.format("There is no Rya instance named '%s'.",
- ryaInstanceName));
+ throw new InstanceDoesNotExistException(String.format("There is no Rya instance named '%s'.", ryaInstanceName));
}
+
Sail sail = null;
- SailRepository sailRepo = null;
SailRepositoryConnection sailRepoConn = null;
- // Get a Sail object that is connected to the Rya instance.
- final MongoDBRdfConfiguration ryaConf = connectionDetails.build(ryaInstanceName);
try {
+ // Get a Sail object that is connected to the Rya instance.
+ final MongoDBRdfConfiguration ryaConf = connectionDetails.build(ryaInstanceName);
sail = RyaSailFactory.getInstance(ryaConf);
- } catch (SailException | RyaDAOException | InferenceEngineException | AccumuloException | AccumuloSecurityException e) {
- throw new RyaClientException("While getting a sail instance.", e);
- }
- // Load the file.
- sailRepo = new SailRepository(sail);
- try {
+ final SailRepository sailRepo = new SailRepository(sail);
sailRepoConn = sailRepo.getConnection();
// Execute the query.
@@ -106,26 +102,37 @@ public class MongoExecuteSparqlQuery implements ExecuteSparqlQuery {
final ByteArrayOutputStream baos = new ByteArrayOutputStream();
final CountingSPARQLResultsCSVWriter handler = new CountingSPARQLResultsCSVWriter(baos);
tupleQuery.evaluate(handler);
- final StringBuilder sb = new StringBuilder();
-
- final String newline = "\n";
- sb.append("Query Result:").append(newline);
- sb.append(new String(baos.toByteArray(), StandardCharsets.UTF_8));
-
- final String seconds = new DecimalFormat("0.0##").format((System.currentTimeMillis() - start) / 1000.0);
- sb.append("Retrieved ").append(handler.getCount()).append(" results in ").append(seconds).append(" seconds.");
-
- return sb.toString();
-
- } catch (final MalformedQueryException e) {
- throw new RyaClientException("There was a problem parsing the supplied query.", e);
- } catch (final QueryEvaluationException | TupleQueryResultHandlerException e) {
- throw new RyaClientException("There was a problem evaluating the supplied query.", e);
- } catch (final RepositoryException e) {
- throw new RyaClientException("There was a problem executing the query against the Rya instance named "
- + ryaInstanceName + ".", e);
- } finally {
- // close anything?
+ final long end = System.currentTimeMillis();
+
+ // Format and return the result of the query.
+ final String queryResult = new String(baos.toByteArray(), StandardCharsets.UTF_8);
+ final String queryDuration = new DecimalFormat("0.0##").format((end - start) / 1000.0);
+
+ return "Query Result:\n" +
+ queryResult +
+ "Retrieved " + handler.getCount() + " results in " + queryDuration + " seconds.";
+
+ } catch (SailException | RyaDAOException | InferenceEngineException | AccumuloException | AccumuloSecurityException e) {
+ throw new RyaClientException("Could not create the Sail object used to query the RYA instance.", e);
+ } catch (final MalformedQueryException | QueryEvaluationException | TupleQueryResultHandlerException | RepositoryException e) {
+ throw new RyaClientException("Could not execute the SPARQL query.", e);
+ } finally {
+ // Close the resources that were opened.
+ if(sailRepoConn != null) {
+ try {
+ sailRepoConn.close();
+ } catch (final RepositoryException e) {
+ log.error("Couldn't close the SailRepositoryConnection object.", e);
+ }
+ }
+
+ if(sail != null) {
+ try {
+ sail.shutDown();
+ } catch (final SailException e) {
+ log.error("Couldn't close the Sail object.", e);
+ }
+ }
}
}
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/5739f78e/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoLoadStatements.java
----------------------------------------------------------------------
diff --git a/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoLoadStatements.java b/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoLoadStatements.java
index 37f1d95..8c9e0b5 100644
--- a/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoLoadStatements.java
+++ b/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoLoadStatements.java
@@ -36,6 +36,8 @@ import org.openrdf.repository.sail.SailRepository;
import org.openrdf.repository.sail.SailRepositoryConnection;
import org.openrdf.sail.Sail;
import org.openrdf.sail.SailException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import edu.umd.cs.findbugs.annotations.DefaultAnnotation;
import edu.umd.cs.findbugs.annotations.NonNull;
@@ -45,12 +47,13 @@ import edu.umd.cs.findbugs.annotations.NonNull;
*/
@DefaultAnnotation(NonNull.class)
public class MongoLoadStatements implements LoadStatements {
+ private static final Logger log = LoggerFactory.getLogger(MongoLoadStatements.class);
private final MongoConnectionDetails connectionDetails;
private final InstanceExists instanceExists;
/**
- * Constructs an instance.
+ * Constructs an instance of {@link MongoLoadStatements}.
*
* @param connectionDetails - Details to connect to the server. (not null)
* @param instanceExists - The interactor used to check if a Rya instance exists. (not null)
@@ -71,24 +74,40 @@ public class MongoLoadStatements implements LoadStatements {
}
Sail sail = null;
- SailRepository sailRepo = null;
SailRepositoryConnection sailRepoConn = null;
-
- // Get a Sail object that is connected to the Rya instance.
- final MongoDBRdfConfiguration ryaConf = connectionDetails.build(ryaInstanceName);
try {
+ // Get a Sail object that is connected to the Rya instance.
+ final MongoDBRdfConfiguration ryaConf = connectionDetails.build(ryaInstanceName);
sail = RyaSailFactory.getInstance(ryaConf);
- } catch (SailException | RyaDAOException | InferenceEngineException | AccumuloException | AccumuloSecurityException e) {
- throw new RyaClientException("Could not load statements into Rya because of a problem while creating the Sail object.", e);
- }
- // Load the file.
- sailRepo = new SailRepository(sail);
- try {
+ final SailRepository sailRepo = new SailRepository(sail);
+ sailRepoConn = sailRepo.getConnection();
+
+ // Load the statements.
sailRepoConn = sailRepo.getConnection();
sailRepoConn.add(statements);
+
+ } catch (SailException | RyaDAOException | InferenceEngineException | AccumuloException | AccumuloSecurityException e) {
+ throw new RyaClientException("Could not load statements into Rya because of a problem while creating the Sail object.", e);
} catch (final RepositoryException e) {
- throw new RyaClientException("While getting a connection and adding statements.", e);
+ throw new RyaClientException("Could not load the statements into Rya.", e);
+ } finally {
+ // Close the resources that were opened.
+ if(sailRepoConn != null) {
+ try {
+ sailRepoConn.close();
+ } catch (final RepositoryException e) {
+ log.error("Couldn't close the SailRepositoryConnection object.", e);
+ }
+ }
+
+ if(sail != null) {
+ try {
+ sail.shutDown();
+ } catch (final SailException e) {
+ log.error("Couldn't close the Sail object.", e);
+ }
+ }
}
}
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/5739f78e/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoLoadStatementsFile.java
----------------------------------------------------------------------
diff --git a/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoLoadStatementsFile.java b/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoLoadStatementsFile.java
index 00a7c61..244d02a 100644
--- a/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoLoadStatementsFile.java
+++ b/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoLoadStatementsFile.java
@@ -40,6 +40,8 @@ import org.openrdf.rio.RDFFormat;
import org.openrdf.rio.RDFParseException;
import org.openrdf.sail.Sail;
import org.openrdf.sail.SailException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import edu.umd.cs.findbugs.annotations.DefaultAnnotation;
import edu.umd.cs.findbugs.annotations.NonNull;
@@ -49,6 +51,7 @@ import edu.umd.cs.findbugs.annotations.NonNull;
*/
@DefaultAnnotation(NonNull.class)
public class MongoLoadStatementsFile implements LoadStatementsFile {
+ private static final Logger log = LoggerFactory.getLogger(MongoLoadStatementsFile.class);
private final MongoConnectionDetails connectionDetails;
private final InstanceExists instanceExists;
@@ -78,23 +81,39 @@ public class MongoLoadStatementsFile implements LoadStatementsFile {
}
Sail sail = null;
- SailRepository sailRepo = null;
SailRepositoryConnection sailRepoConn = null;
- // Get a Sail object that is connected to the Rya instance.
- final MongoDBRdfConfiguration ryaConf = connectionDetails.build(ryaInstanceName);
try {
+ // Get a Sail object that is connected to the Rya instance.
+ final MongoDBRdfConfiguration ryaConf = connectionDetails.build(ryaInstanceName);
sail = RyaSailFactory.getInstance(ryaConf);
- } catch (SailException | RyaDAOException | InferenceEngineException | AccumuloException | AccumuloSecurityException e) {
- throw new RyaClientException("While getting a sail instance.", e);
- }
- // Load the file.
- sailRepo = new SailRepository(sail);
- try {
+ final SailRepository sailRepo = new SailRepository(sail);
sailRepoConn = sailRepo.getConnection();
+
+ // Load the file.
sailRepoConn.add(statementsFile.toFile(), null, format);
+
+ } catch (SailException | RyaDAOException | InferenceEngineException | AccumuloException | AccumuloSecurityException e) {
+ throw new RyaClientException("Could not load statements into Rya because of a problem while creating the Sail object.", e);
} catch (RDFParseException | RepositoryException | IOException e) {
- throw new RyaClientException("While getting a connection and adding statements from a file.", e);
+ throw new RyaClientException("Could not load the statements into Rya.", e);
+ } finally {
+ // Close the resources that were opened.
+ if(sailRepoConn != null) {
+ try {
+ sailRepoConn.close();
+ } catch (final RepositoryException e) {
+ log.error("Couldn't close the SailRepositoryConnection object.", e);
+ }
+ }
+
+ if(sail != null) {
+ try {
+ sail.shutDown();
+ } catch (final SailException e) {
+ log.error("Couldn't close the Sail object.", e);
+ }
+ }
}
}
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/5739f78e/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoExecuteSparqlQueryIT.java
----------------------------------------------------------------------
diff --git a/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoExecuteSparqlQueryIT.java b/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoExecuteSparqlQueryIT.java
index 0be9e8b..1d38410 100644
--- a/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoExecuteSparqlQueryIT.java
+++ b/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoExecuteSparqlQueryIT.java
@@ -24,7 +24,6 @@ import java.util.ArrayList;
import java.util.List;
import org.apache.rya.api.client.ExecuteSparqlQuery;
-import org.apache.rya.api.client.Install;
import org.apache.rya.api.client.Install.DuplicateInstanceNameException;
import org.apache.rya.api.client.Install.InstallConfiguration;
import org.apache.rya.api.client.RyaClient;
@@ -41,22 +40,37 @@ import com.mongodb.MongoException;
* Integration tests the methods of {@link }.
*/
public class MongoExecuteSparqlQueryIT extends MongoTestBase {
+
@Test
public void ExecuteSparqlQuery_exec() throws MongoException, DuplicateInstanceNameException, RyaClientException {
// Install an instance of Rya.
final MongoConnectionDetails connectionDetails = getConnectionDetails();
final RyaClient ryaClient = MongoRyaClientFactory.build(connectionDetails, getMongoClient());
- // install rya and load some data
- final List<Statement> loadMe = installAndLoad();
- // Here comes the method to test
+
+ final InstallConfiguration installConfig = InstallConfiguration.builder()
+ .setEnableTableHashPrefix(false)
+ .setEnableEntityCentricIndex(false)
+ .setEnableFreeTextIndex(false)
+ .setEnableTemporalIndex(false)
+ .setEnablePcjIndex(false)
+ .setEnableGeoIndex(false)
+ .build();
+ ryaClient.getInstall().install(conf.getRyaInstanceName(), installConfig);
+
+ // Load some statements into that instance.
+ final List<Statement> statements = makeTestStatements();
+ ryaClient.getLoadStatements().loadStatements(conf.getRyaInstanceName(), statements);
+
+ // Execute the SPARQL against the Rya instance.
final ExecuteSparqlQuery executeSparql = ryaClient.getExecuteSparqlQuery();
final String sparql = "SELECT * where { ?a ?b ?c }";
- final String results = executeSparql.executeSparqlQuery(conf.getMongoDBName(), sparql);
- System.out.println(results);
+ final String results = executeSparql.executeSparqlQuery(conf.getRyaInstanceName(), sparql);
+
+ // Show the result matches what is expected.
assertTrue("result has header.", results.startsWith("Query Result:"));
assertTrue("result has column headings.", results.contains("a,b,c"));
assertTrue("result has footer.", results.contains("Retrieved 3 results in"));
- for (final Statement expect : loadMe) {
+ for (final Statement expect : statements) {
assertTrue("All results should contain expected subjects:",
results.contains(expect.getSubject().stringValue()));
assertTrue("All results should contain expected predicates:",
@@ -66,28 +80,6 @@ public class MongoExecuteSparqlQueryIT extends MongoTestBase {
}
}
- private List<Statement> installAndLoad() throws DuplicateInstanceNameException, RyaClientException {
- // first install rya
- final InstallConfiguration installConfig = InstallConfiguration.builder()
- .setEnableTableHashPrefix(false)
- .setEnableEntityCentricIndex(false)
- .setEnableFreeTextIndex(false)
- .setEnableTemporalIndex(false)
- .setEnablePcjIndex(false)
- .setEnableGeoIndex(false)
- .build();
- final MongoConnectionDetails connectionDetails = getConnectionDetails();
- final RyaClient ryaClient = MongoRyaClientFactory.build(connectionDetails, getMongoClient());
- final Install install = ryaClient.getInstall();
- install.install(conf.getMongoDBName(), installConfig);
- // next, load data
- final List<Statement> loadMe = makeTestStatements();
- ryaClient.getLoadStatements().loadStatements(
- conf.getMongoDBName(),
- loadMe);
- return loadMe;
- }
-
/**
* @return some data to load
*/
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/5739f78e/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoLoadStatementsFileIT.java
----------------------------------------------------------------------
diff --git a/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoLoadStatementsFileIT.java b/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoLoadStatementsFileIT.java
index 0f84fea..674a806 100644
--- a/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoLoadStatementsFileIT.java
+++ b/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoLoadStatementsFileIT.java
@@ -21,8 +21,8 @@ package org.apache.rya.api.client.mongo;
import static org.junit.Assert.assertEquals;
import java.nio.file.Paths;
-import java.util.ArrayList;
-import java.util.List;
+import java.util.HashSet;
+import java.util.Set;
import org.apache.rya.api.client.Install;
import org.apache.rya.api.client.Install.InstallConfiguration;
@@ -63,30 +63,36 @@ public class MongoLoadStatementsFileIT extends MongoTestBase {
final MongoConnectionDetails connectionDetails = getConnectionDetails();
final RyaClient ryaClient = MongoRyaClientFactory.build(connectionDetails, getMongoClient());
final Install install = ryaClient.getInstall();
- install.install(conf.getMongoDBName(), installConfig);
+ install.install(conf.getRyaInstanceName(), installConfig);
// Load the test statement file.
ryaClient.getLoadStatementsFile().loadStatements(
- conf.getMongoDBName(),
+ conf.getRyaInstanceName(),
Paths.get("src/test/resources/example.ttl"),
RDFFormat.TURTLE);
// Verify that the statements were loaded.
final ValueFactory vf = new ValueFactoryImpl();
- final List<Statement> expected = new ArrayList<>();
+ final Set<Statement> expected = new HashSet<>();
expected.add(vf.createStatement(vf.createURI("http://example#alice"), vf.createURI("http://example#talksTo"), vf.createURI("http://example#bob")));
expected.add(vf.createStatement(vf.createURI("http://example#bob"), vf.createURI("http://example#talksTo"), vf.createURI("http://example#charlie")));
expected.add(vf.createStatement(vf.createURI("http://example#charlie"), vf.createURI("http://example#likes"), vf.createURI("http://example#icecream")));
- final List<Statement> statements = new ArrayList<>();
- final MongoCursor<Document> x = getRyaCollection().find().iterator();
- while (x.hasNext()) {
- final Document y = x.next();
- statements.add(vf.createStatement(vf.createURI(y.getString("subject")), vf.createURI(y.getString("predicate")), vf.createURI(y.getString("object"))));
+ final Set<Statement> statements = new HashSet<>();
+ final MongoCursor<Document> triplesIterator = getMongoClient()
+ .getDatabase( conf.getRyaInstanceName() )
+ .getCollection( conf.getTriplesCollectionName() )
+ .find().iterator();
+ while (triplesIterator.hasNext()) {
+ final Document triple = triplesIterator.next();
+ statements.add(vf.createStatement(
+ vf.createURI(triple.getString("subject")),
+ vf.createURI(triple.getString("predicate")),
+ vf.createURI(triple.getString("object"))));
}
- assertEquals("Expect all rows to be read.", 3, getRyaCollection().count());
- assertEquals("All rows in DB should match expected rows:", expected, statements);
+
+ assertEquals(expected, statements);
}
private MongoConnectionDetails getConnectionDetails() {
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/5739f78e/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoLoadStatementsIT.java
----------------------------------------------------------------------
diff --git a/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoLoadStatementsIT.java b/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoLoadStatementsIT.java
index 47b953d..b0d0e5b 100644
--- a/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoLoadStatementsIT.java
+++ b/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoLoadStatementsIT.java
@@ -20,15 +20,12 @@ package org.apache.rya.api.client.mongo;
import static org.junit.Assert.assertEquals;
-import java.util.ArrayList;
-import java.util.List;
+import java.util.HashSet;
+import java.util.Set;
-import org.apache.rya.api.client.Install;
-import org.apache.rya.api.client.Install.DuplicateInstanceNameException;
import org.apache.rya.api.client.Install.InstallConfiguration;
import org.apache.rya.api.client.InstanceDoesNotExistException;
import org.apache.rya.api.client.RyaClient;
-import org.apache.rya.api.client.RyaClientException;
import org.apache.rya.mongodb.MongoTestBase;
import org.bson.Document;
import org.junit.Test;
@@ -43,9 +40,10 @@ import com.mongodb.client.MongoCursor;
*/
public class MongoLoadStatementsIT extends MongoTestBase {
+ private static final ValueFactory VF = new ValueFactoryImpl();
+
@Test(expected = InstanceDoesNotExistException.class)
public void instanceDoesNotExist() throws Exception {
- org.apache.log4j.BasicConfigurator.configure();
final RyaClient ryaClient = MongoRyaClientFactory.build(getConnectionDetails(), getMongoClient());
// Skip the install step to create error causing situation.
ryaClient.getLoadStatements().loadStatements(getConnectionDetails().getHostname(), makeTestStatements());
@@ -55,40 +53,11 @@ public class MongoLoadStatementsIT extends MongoTestBase {
* Pass a list of statements to our loadStatement class.
*/
@Test
- public void loadTurtleFile() throws Exception {
+ public void loadStatements() throws Exception {
// Install an instance of Rya.
- final List<Statement> loadMe = installAndLoad();
- final List<Statement> stmtResults = new ArrayList<>();
- final MongoCursor<Document> triplesIterator = getRyaCollection().find().iterator();
- final ValueFactory vf = new ValueFactoryImpl();
- while (triplesIterator.hasNext()) {
- final Document triple = triplesIterator.next();
- stmtResults.add(vf.createStatement(vf.createURI(triple.getString("subject")), vf.createURI(triple.getString(
- "predicate")), vf.createURI(triple.getString("object"))));
- }
- stmtResults.sort(((stmt1, stmt2) -> stmt1.getSubject().toString().compareTo(stmt2.getSubject().toString())));
- assertEquals("Expect all rows to be read.", 3, getRyaCollection().count());
- assertEquals("All rows in DB should match expected rows:", loadMe, stmtResults);
- }
-
- /**
- * @return some data to load
- */
- private List<Statement> makeTestStatements() {
- final List<Statement> loadMe = new ArrayList<>();
- final ValueFactory vf = new ValueFactoryImpl();
-
- loadMe.add(vf.createStatement(vf.createURI("http://example#alice"), vf.createURI("http://example#talksTo"), vf
- .createURI("http://example#bob")));
- loadMe.add(vf.createStatement(vf.createURI("http://example#bob"), vf.createURI("http://example#talksTo"), vf
- .createURI("http://example#charlie")));
- loadMe.add(vf.createStatement(vf.createURI("http://example#charlie"), vf.createURI("http://example#likes"), vf
- .createURI("http://example#icecream")));
- return loadMe;
- }
+ final MongoConnectionDetails connectionDetails = getConnectionDetails();
+ final RyaClient ryaClient = MongoRyaClientFactory.build(connectionDetails, getMongoClient());
- private List<Statement> installAndLoad() throws DuplicateInstanceNameException, RyaClientException {
- // first install rya
final InstallConfiguration installConfig = InstallConfiguration.builder()
.setEnableTableHashPrefix(false)
.setEnableEntityCentricIndex(false)
@@ -97,16 +66,50 @@ public class MongoLoadStatementsIT extends MongoTestBase {
.setEnablePcjIndex(false)
.setEnableGeoIndex(false)
.build();
- final MongoConnectionDetails connectionDetails = getConnectionDetails();
- final RyaClient ryaClient = MongoRyaClientFactory.build(connectionDetails, getMongoClient());
- final Install install = ryaClient.getInstall();
- install.install(conf.getMongoDBName(), installConfig);
- // next, load data
- final List<Statement> loadMe = makeTestStatements();
- ryaClient.getLoadStatements().loadStatements(
- conf.getMongoDBName(),
- loadMe);
- return loadMe;
+ ryaClient.getInstall().install(conf.getRyaInstanceName(), installConfig);
+
+ // Create the statements that will be loaded.
+ final Set<Statement> statements = makeTestStatements();
+
+ // Load them.
+ ryaClient.getLoadStatements().loadStatements(conf.getRyaInstanceName(), statements);
+
+ // Fetch the statements that have been stored in Mongo DB.
+ final Set<Statement> stmtResults = new HashSet<>();
+ final MongoCursor<Document> triplesIterator = getMongoClient()
+ .getDatabase( conf.getRyaInstanceName() )
+ .getCollection( conf.getTriplesCollectionName() )
+ .find().iterator();
+
+ while (triplesIterator.hasNext()) {
+ final Document triple = triplesIterator.next();
+ stmtResults.add(VF.createStatement(
+ VF.createURI(triple.getString("subject")),
+ VF.createURI(triple.getString("predicate")),
+ VF.createURI(triple.getString("object"))));
+ }
+
+ // Show the discovered statements match the original statements.
+ assertEquals(statements, stmtResults);
+ }
+
+ public Set<Statement> makeTestStatements() {
+ final Set<Statement> statements = new HashSet<>();
+ statements.add(VF.createStatement(
+ VF.createURI("http://example#alice"),
+ VF.createURI("http://example#talksTo"),
+ VF.createURI("http://example#bob")));
+ statements.add(
+ VF.createStatement(
+ VF.createURI("http://example#bob"),
+ VF.createURI("http://example#talksTo"),
+ VF.createURI("http://example#charlie")));
+ statements.add(
+ VF.createStatement(
+ VF.createURI("http://example#charlie"),
+ VF.createURI("http://example#likes"),
+ VF.createURI("http://example#icecream")));
+ return statements;
}
private MongoConnectionDetails getConnectionDetails() {
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/5739f78e/extras/shell/src/main/java/org/apache/rya/shell/RyaConnectionCommands.java
----------------------------------------------------------------------
diff --git a/extras/shell/src/main/java/org/apache/rya/shell/RyaConnectionCommands.java b/extras/shell/src/main/java/org/apache/rya/shell/RyaConnectionCommands.java
index 4cb14fa..c6bdbb3 100644
--- a/extras/shell/src/main/java/org/apache/rya/shell/RyaConnectionCommands.java
+++ b/extras/shell/src/main/java/org/apache/rya/shell/RyaConnectionCommands.java
@@ -121,7 +121,7 @@ public class RyaConnectionCommands implements CommandMarker {
case MONGO:
final MongoConnectionDetails mongoDetails = sharedState.getShellState().getMongoDetails().get();
- StringBuilder message = new StringBuilder()
+ final StringBuilder message = new StringBuilder()
.append("The shell is connected to an instance of MongoDB using the following parameters:\\n")
.append(" Hostname: " + mongoDetails.getHostname() + "\n")
.append(" Port: " + mongoDetails.getPort() + "\n");
@@ -189,7 +189,7 @@ public class RyaConnectionCommands implements CommandMarker {
Optional.ofNullable(password));
// Connect to a MongoDB server. TODO Figure out how to provide auth info?
- MongoClient adminClient = new MongoClient(hostname, Integer.parseInt(port));
+ final MongoClient adminClient = new MongoClient(hostname, Integer.parseInt(port));
// Make sure the client is closed at shutdown.
Runtime.getRuntime().addShutdownHook(new Thread() {
@@ -215,14 +215,8 @@ public class RyaConnectionCommands implements CommandMarker {
@CliOption(key = {"instance"}, mandatory = true, help = "The name of the Rya instance the shell will interact with.")
final String instance) {
try {
- // TODO When you are connected to mongo db, then connecting to an instance may require
- // a username/password. this is because each Database has its own credentials, so
- // every rya instance likewise has their own credentials.
-
final InstanceExists instanceExists = sharedState.getShellState().getConnectedCommands().get().getInstanceExists();
- // TODO gracefully fail if that version doen't support it. maybe the list command should go ahead
-
// Make sure the requested instance exists.
if(!instanceExists.exists(instance)) {
throw new RuntimeException(String.format("'%s' does not match an existing Rya instance.", instance));
@@ -237,6 +231,13 @@ public class RyaConnectionCommands implements CommandMarker {
@CliCommand(value = DISCONNECT_COMMAND_NAME_CMD, help = "Disconnect the shell's Rya storage connection (Accumulo).")
public void disconnect() {
+ // If connected to Mongo, there is a client that needs to be closed.
+ final com.google.common.base.Optional<MongoClient> mongoAdminClient = sharedState.getShellState().getMongoAdminClient();
+ if(mongoAdminClient.isPresent()) {
+ mongoAdminClient.get().close();
+ }
+
+ // Update the shared state to disconnected.
sharedState.disconnected();
}
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/5739f78e/extras/shell/src/main/java/org/apache/rya/shell/SharedShellState.java
----------------------------------------------------------------------
diff --git a/extras/shell/src/main/java/org/apache/rya/shell/SharedShellState.java b/extras/shell/src/main/java/org/apache/rya/shell/SharedShellState.java
index 89cbd5d..bb22fd3 100644
--- a/extras/shell/src/main/java/org/apache/rya/shell/SharedShellState.java
+++ b/extras/shell/src/main/java/org/apache/rya/shell/SharedShellState.java
@@ -28,6 +28,7 @@ import org.apache.rya.api.client.accumulo.AccumuloConnectionDetails;
import org.apache.rya.api.client.mongo.MongoConnectionDetails;
import com.google.common.base.Optional;
+import com.mongodb.MongoClient;
import edu.umd.cs.findbugs.annotations.DefaultAnnotation;
import edu.umd.cs.findbugs.annotations.NonNull;
@@ -222,6 +223,7 @@ public class SharedShellState {
private final Optional<StorageType> storageType;
private final Optional<AccumuloConnectionDetails> accumuloDetails;
private final Optional<MongoConnectionDetails> mongoDetails;
+ private final Optional<MongoClient> mongoAdminClient;
private final Optional<RyaClient> connectedCommands;
// Instance specific values.
@@ -232,12 +234,14 @@ public class SharedShellState {
final Optional<StorageType> storageType,
final Optional<AccumuloConnectionDetails> accumuloDetails,
final Optional<MongoConnectionDetails> mongoDetails,
+ final Optional<MongoClient> mongoAdminClient,
final Optional<RyaClient> connectedCommands,
final Optional<String> instanceName) {
this.connectionState = requireNonNull(connectionState);
this.storageType = requireNonNull(storageType);
this.accumuloDetails = requireNonNull(accumuloDetails);
this.mongoDetails = requireNonNull(mongoDetails);
+ this.mongoAdminClient = requireNonNull(mongoAdminClient);
this.connectedCommands = requireNonNull(connectedCommands);
this.instanceName = requireNonNull(instanceName);
}
@@ -275,6 +279,13 @@ public class SharedShellState {
}
/**
+ * @return The Mongo Client that is used to perform administrative tasks while connected to Mongo DB.
+ */
+ public Optional<MongoClient> getMongoAdminClient() {
+ return mongoAdminClient;
+ }
+
+ /**
* @return The {@link RyaClient} to use when a command on the shell is issued.
* The value will not be present if the Rya Shell is not connected to a storage.
*/
@@ -340,6 +351,7 @@ public class SharedShellState {
private StorageType storageType;
private AccumuloConnectionDetails accumuloDetails;
private MongoConnectionDetails mongoDetails;
+ private MongoClient mongoAdminClient;
private RyaClient connectedCommands;
// Instance specific values.
@@ -361,6 +373,7 @@ public class SharedShellState {
this.storageType = shellState.getStorageType().orNull();
this.accumuloDetails = shellState.getAccumuloDetails().orNull();
this.mongoDetails = shellState.getMongoDetails().orNull();
+ this.mongoAdminClient = shellState.getMongoAdminClient().orNull();
this.connectedCommands = shellState.getConnectedCommands().orNull();
this.instanceName = shellState.getRyaInstanceName().orNull();
}
@@ -403,6 +416,16 @@ public class SharedShellState {
}
/**
+ * @param mongoAdminClient - The Mongo Client that is used to perform administrative tasks while
+ * connected to Mongo DB.
+ * @return This {@link Builder} so that method invocations may be chained.
+ */
+ public Builder setMongoAdminClient(@Nullable final MongoClient mongoAdminClient) {
+ this.mongoAdminClient = mongoAdminClient;
+ return this;
+ }
+
+ /**
* @param connectedCommands - The {@link RyaClient} to use when a command on the shell is issued.
* @return This {@link Builder} so that method invocations may be chained.
*/
@@ -429,6 +452,7 @@ public class SharedShellState {
Optional.fromNullable(storageType),
Optional.fromNullable(accumuloDetails),
Optional.fromNullable(mongoDetails),
+ Optional.fromNullable(mongoAdminClient),
Optional.fromNullable(connectedCommands),
Optional.fromNullable(instanceName));
}