RYA-413 Fixed how MongoDBRyaDAO closed its internal mongoClient. Updated AbstractMongoDBRdfConfigurationBuilder config tags. Closes #263.
diff --git a/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/AbstractMongoDBRdfConfigurationBuilder.java b/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/AbstractMongoDBRdfConfigurationBuilder.java
index 369f7a0..8afcb42 100644
--- a/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/AbstractMongoDBRdfConfigurationBuilder.java
+++ b/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/AbstractMongoDBRdfConfigurationBuilder.java
@@ -40,23 +40,23 @@
private boolean useMock = false;
private String host = "localhost";
private String port = DEFAULT_MONGO_PORT;
- protected static final String DEFAULT_MONGO_PORT = "27017";
+ public static final String DEFAULT_MONGO_PORT = "27017";
private String mongoCollectionPrefix = "rya_";
private String mongoDBName = "rya";
private boolean usePipeline = false;
- protected static final String MONGO_USER = "mongo.user";
- protected static final String MONGO_PASSWORD = "mongo.password";
- protected static final String MONGO_DB_NAME = "mongo.db.name";
- protected static final String MONGO_COLLECTION_PREFIX = "mongo.collection.prefix";
- protected static final String MONGO_HOST = "mongo.host";
- protected static final String MONGO_PORT = "mongo.port";
- protected static final String MONGO_AUTHS = "mongo.auths";
- protected static final String MONGO_VISIBILITIES = "mongo.visibilities";
- protected static final String MONGO_RYA_PREFIX = "mongo.rya.prefix";
- protected static final String USE_INFERENCE = "use.inference";
- protected static final String USE_DISPLAY_QUERY_PLAN = "use.display.plan";
- protected static final String USE_MOCK_MONGO = "use.mock";
+ public static final String MONGO_USER = "mongo.user";
+ public static final String MONGO_PASSWORD = "mongo.password";
+ public static final String MONGO_DB_NAME = "mongo.db.name";
+ public static final String MONGO_COLLECTION_PREFIX = "mongo.collection.prefix";
+ public static final String MONGO_HOST = "mongo.host";
+ public static final String MONGO_PORT = "mongo.port";
+ public static final String MONGO_AUTHS = "mongo.auths";
+ public static final String MONGO_VISIBILITIES = "mongo.visibilities";
+ public static final String MONGO_RYA_PREFIX = "mongo.rya.prefix";
+ public static final String USE_INFERENCE = "use.inference";
+ public static final String USE_DISPLAY_QUERY_PLAN = "use.display.plan";
+ public static final String USE_MOCK_MONGO = "use.mock";
/**
* Sets Mongo user.
diff --git a/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/MongoDBRyaDAO.java b/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/MongoDBRyaDAO.java
index 75e33d1..d01c2d7 100644
--- a/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/MongoDBRyaDAO.java
+++ b/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/MongoDBRyaDAO.java
@@ -152,9 +152,6 @@
log.error("Error closing indexer: " + indexer.getClass().getSimpleName(), e);
}
}
- if (mongoClient != null) {
- mongoClient.close();
- }
IOUtils.closeQuietly(queryEngine);
}
diff --git a/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MongoDBRyaDAO2IT.java b/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MongoDBRyaDAO2IT.java
index f2d24ad..67002d7 100644
--- a/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MongoDBRyaDAO2IT.java
+++ b/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MongoDBRyaDAO2IT.java
@@ -18,7 +18,10 @@
*/
package org.apache.rya.mongodb;
+import static org.apache.rya.mongodb.dao.SimpleMongoDBStorageStrategy.DOCUMENT_VISIBILITY;
+import static org.apache.rya.mongodb.dao.SimpleMongoDBStorageStrategy.TIMESTAMP;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
import java.io.IOException;
@@ -26,6 +29,7 @@
import org.apache.rya.api.domain.RyaStatement.RyaStatementBuilder;
import org.apache.rya.api.domain.RyaURI;
import org.apache.rya.api.persist.RyaDAOException;
+import org.apache.rya.mongodb.document.visibility.DocumentVisibility;
import org.bson.Document;
import org.junit.Test;
@@ -135,4 +139,65 @@
dao.destroy();
}
}
+
+ @Test
+ public void testReconstructDao() throws RyaDAOException, IOException {
+ MongoDBRyaDAO dao = new MongoDBRyaDAO();
+ try {
+ dao.setConf(conf);
+ dao.init();
+
+ final RyaStatementBuilder builder = new RyaStatementBuilder();
+ builder.setPredicate(new RyaURI("http://temp.com"));
+ builder.setSubject(new RyaURI("http://subject.com"));
+ builder.setObject(new RyaURI("http://object.com"));
+ builder.setColumnVisibility(new DocumentVisibility("B").flatten());
+
+ final MongoDatabase db = conf.getMongoClient().getDatabase(conf.get(MongoDBRdfConfiguration.MONGO_DB_NAME));
+ final MongoCollection<Document> coll = db.getCollection(conf.getTriplesCollectionName());
+
+ dao.add(builder.build());
+
+ assertEquals(coll.count(), 1);
+
+ final Document dbo = coll.find().first();
+ assertTrue(dbo.containsKey(DOCUMENT_VISIBILITY));
+ assertTrue(dbo.containsKey(TIMESTAMP));
+ } finally {
+ dao.destroy();
+ }
+
+ // Test reinitializing the same instance
+ try {
+ dao.init();
+ } finally {
+ dao.destroy();
+ }
+
+ // Reconstruct new DAO and try again
+ dao = new MongoDBRyaDAO();
+ try {
+ dao.setConf(conf);
+ dao.init();
+
+ final RyaStatementBuilder builder = new RyaStatementBuilder();
+ builder.setPredicate(new RyaURI("http://temp.com"));
+ builder.setSubject(new RyaURI("http://subject.com"));
+ builder.setObject(new RyaURI("http://object.com"));
+ builder.setColumnVisibility(new DocumentVisibility("B").flatten());
+
+ final MongoDatabase db = conf.getMongoClient().getDatabase(conf.get(MongoDBRdfConfiguration.MONGO_DB_NAME));
+ final MongoCollection<Document> coll = db.getCollection(conf.getTriplesCollectionName());
+
+ dao.add(builder.build());
+
+ assertEquals(coll.count(), 1);
+
+ final Document dbo = coll.find().first();
+ assertTrue(dbo.containsKey(DOCUMENT_VISIBILITY));
+ assertTrue(dbo.containsKey(TIMESTAMP));
+ } finally {
+ dao.destroy();
+ }
+ }
}
\ No newline at end of file
diff --git a/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MongoDBRyaDAOIT.java b/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MongoDBRyaDAOIT.java
index a05393c..c5ff223 100644
--- a/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MongoDBRyaDAOIT.java
+++ b/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MongoDBRyaDAOIT.java
@@ -154,6 +154,67 @@
}
@Test
+ public void testReconstructDao() throws RyaDAOException, IOException {
+ MongoDBRyaDAO dao = new MongoDBRyaDAO();
+ try {
+ dao.setConf(conf);
+ dao.init();
+
+ final RyaStatementBuilder builder = new RyaStatementBuilder();
+ builder.setPredicate(new RyaURI("http://temp.com"));
+ builder.setSubject(new RyaURI("http://subject.com"));
+ builder.setObject(new RyaURI("http://object.com"));
+ builder.setColumnVisibility(new DocumentVisibility("B").flatten());
+
+ final MongoDatabase db = conf.getMongoClient().getDatabase(conf.get(MongoDBRdfConfiguration.MONGO_DB_NAME));
+ final MongoCollection<Document> coll = db.getCollection(conf.getTriplesCollectionName());
+
+ dao.add(builder.build());
+
+ assertEquals(coll.count(), 1);
+
+ final Document dbo = coll.find().first();
+ assertTrue(dbo.containsKey(DOCUMENT_VISIBILITY));
+ assertTrue(dbo.containsKey(TIMESTAMP));
+ } finally {
+ dao.destroy();
+ }
+
+ // Test reinitializing the same instance
+ try {
+ dao.init();
+ } finally {
+ dao.destroy();
+ }
+
+ // Reconstruct new DAO and try again
+ dao = new MongoDBRyaDAO();
+ try {
+ dao.setConf(conf);
+ dao.init();
+
+ final RyaStatementBuilder builder = new RyaStatementBuilder();
+ builder.setPredicate(new RyaURI("http://temp.com"));
+ builder.setSubject(new RyaURI("http://subject.com"));
+ builder.setObject(new RyaURI("http://object.com"));
+ builder.setColumnVisibility(new DocumentVisibility("B").flatten());
+
+ final MongoDatabase db = conf.getMongoClient().getDatabase(conf.get(MongoDBRdfConfiguration.MONGO_DB_NAME));
+ final MongoCollection<Document> coll = db.getCollection(conf.getTriplesCollectionName());
+
+ dao.add(builder.build());
+
+ assertEquals(coll.count(), 1);
+
+ final Document dbo = coll.find().first();
+ assertTrue(dbo.containsKey(DOCUMENT_VISIBILITY));
+ assertTrue(dbo.containsKey(TIMESTAMP));
+ } finally {
+ dao.destroy();
+ }
+ }
+
+ @Test
public void testVisibility() throws RyaDAOException, MongoException, IOException {
final MongoDBRyaDAO dao = new MongoDBRyaDAO();
try {
diff --git a/extras/indexing/src/test/java/org/apache/rya/sail/config/RyaMongoDbSailFactoryTest.java b/extras/indexing/src/test/java/org/apache/rya/sail/config/RyaMongoDbSailFactoryTest.java
new file mode 100644
index 0000000..6cfd4ea
--- /dev/null
+++ b/extras/indexing/src/test/java/org/apache/rya/sail/config/RyaMongoDbSailFactoryTest.java
@@ -0,0 +1,149 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.rya.sail.config;
+
+import static org.junit.Assert.assertFalse;
+
+import org.apache.rya.mongodb.MongoITBase;
+import org.junit.Assert;
+import org.junit.Test;
+import org.openrdf.model.Statement;
+import org.openrdf.model.ValueFactory;
+import org.openrdf.repository.sail.SailRepository;
+import org.openrdf.repository.sail.SailRepositoryConnection;
+import org.openrdf.sail.Sail;
+
+/**
+ * Tests {@link RyaSailFactory} with a MongoDB backend.
+ */
+public class RyaMongoDbSailFactoryTest extends MongoITBase {
+ @Test
+ public void testCreateMongoDbSail() throws Exception {
+ Sail sail = null;
+ SailRepository repo = null;
+ SailRepositoryConnection conn = null;
+ try {
+ sail = RyaSailFactory.getInstance(conf);
+ repo = new SailRepository(sail);
+ conn = repo.getConnection();
+ } finally {
+ if (conn != null) {
+ conn.close();
+ }
+ if (repo != null) {
+ repo.shutDown();
+ }
+ if (sail != null) {
+ sail.shutDown();
+ }
+ }
+ }
+
+ @Test
+ public void testAddStatement() throws Exception {
+ Sail sail = null;
+ SailRepository repo = null;
+ SailRepositoryConnection conn = null;
+ try {
+ sail = RyaSailFactory.getInstance(conf);
+ repo = new SailRepository(sail);
+ conn = repo.getConnection();
+
+ final ValueFactory vf = conn.getValueFactory();
+ final Statement s = vf.createStatement(vf.createURI("u:a"), vf.createURI("u:b"), vf.createURI("u:c"));
+
+ assertFalse(conn.hasStatement(s, false));
+
+ conn.add(s);
+
+ Assert.assertTrue(conn.hasStatement(s, false));
+ } finally {
+ if (conn != null) {
+ conn.close();
+ }
+ if (repo != null) {
+ repo.shutDown();
+ }
+ if (sail != null) {
+ sail.shutDown();
+ }
+ }
+ }
+
+ @Test
+ public void testReuseSail() throws Exception {
+ Sail sail = null;
+ SailRepository repo = null;
+ SailRepositoryConnection conn = null;
+ try {
+ sail = RyaSailFactory.getInstance(conf);
+ repo = new SailRepository(sail);
+ conn = repo.getConnection();
+
+ final ValueFactory vf = conn.getValueFactory();
+ final Statement s = vf.createStatement(vf.createURI("u:a"), vf.createURI("u:b"), vf.createURI("u:c"));
+
+ assertFalse(conn.hasStatement(s, false));
+
+ conn.add(s);
+
+ Assert.assertTrue(conn.hasStatement(s, false));
+
+ conn.remove(s);
+
+ Assert.assertFalse(conn.hasStatement(s, false));
+ } finally {
+ if (conn != null) {
+ conn.close();
+ }
+ if (repo != null) {
+ repo.shutDown();
+ }
+ if (sail != null) {
+ sail.shutDown();
+ }
+ }
+
+ // Reuse Sail after shutdown
+ try {
+ sail = RyaSailFactory.getInstance(conf);
+ repo = new SailRepository(sail);
+ conn = repo.getConnection();
+
+ final ValueFactory vf = conn.getValueFactory();
+ final Statement s = vf.createStatement(vf.createURI("u:a"), vf.createURI("u:b"), vf.createURI("u:c"));
+
+ assertFalse(conn.hasStatement(s, false));
+
+ conn.add(s);
+
+ Assert.assertTrue(conn.hasStatement(s, false));
+ } finally {
+ if (conn != null) {
+ conn.close();
+ }
+ if (repo != null) {
+ repo.shutDown();
+ }
+ if (sail != null) {
+ sail.shutDown();
+ }
+ }
+ }
+}
\ No newline at end of file