You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@polygene.apache.org by pa...@apache.org on 2016/12/03 11:06:04 UTC

[8/8] zest-java git commit: mongo-entitystore: remove usage of deprecated mongo client APIs

mongo-entitystore: remove usage of deprecated mongo client APIs


Project: http://git-wip-us.apache.org/repos/asf/zest-java/repo
Commit: http://git-wip-us.apache.org/repos/asf/zest-java/commit/7ac53388
Tree: http://git-wip-us.apache.org/repos/asf/zest-java/tree/7ac53388
Diff: http://git-wip-us.apache.org/repos/asf/zest-java/diff/7ac53388

Branch: refs/heads/develop
Commit: 7ac5338854990d488d7165d2c2c21fa70b91035b
Parents: d3ae3cd
Author: Paul Merlin <pa...@apache.org>
Authored: Sat Dec 3 12:03:51 2016 +0100
Committer: Paul Merlin <pa...@apache.org>
Committed: Sat Dec 3 12:03:51 2016 +0100

----------------------------------------------------------------------
 dependencies.gradle                             |   2 +-
 .../entitystore/mongodb/MongoAccessors.java     |   6 +-
 .../mongodb/MongoEntityStoreConfiguration.java  |  46 +++++---
 .../mongodb/MongoMapEntityStoreMixin.java       | 104 ++++++++++---------
 .../mongodb/EmbedMongoMapEntityStoreTest.java   |   2 +-
 .../mongodb/MongoMapEntityStoreTest.java        |   2 +-
 .../MongoMapEntityStoreWithCacheTest.java       |   2 +-
 7 files changed, 94 insertions(+), 70 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/zest-java/blob/7ac53388/dependencies.gradle
----------------------------------------------------------------------
diff --git a/dependencies.gradle b/dependencies.gradle
index b14783e..a56c160 100644
--- a/dependencies.gradle
+++ b/dependencies.gradle
@@ -63,7 +63,7 @@ def jettyVersion = '9.2.17.v20160517' // 9.3.x Tests fail!
 def leveldbVersion = '0.9'
 def leveldbJniVersion = '1.8'
 def liquibaseVersion = '3.5.3'
-def mongodbVersion = '3.3.0'
+def mongodbVersion = '3.4.0'
 def restletVersion = '2.3.7'
 def rdfVersion = '2.7.16' // 2.8.x change query results!! 4.x exists
 def riakVersion = '2.1.0'

http://git-wip-us.apache.org/repos/asf/zest-java/blob/7ac53388/extensions/entitystore-mongodb/src/main/java/org/apache/zest/entitystore/mongodb/MongoAccessors.java
----------------------------------------------------------------------
diff --git a/extensions/entitystore-mongodb/src/main/java/org/apache/zest/entitystore/mongodb/MongoAccessors.java b/extensions/entitystore-mongodb/src/main/java/org/apache/zest/entitystore/mongodb/MongoAccessors.java
index a043329..4dea5e8 100644
--- a/extensions/entitystore-mongodb/src/main/java/org/apache/zest/entitystore/mongodb/MongoAccessors.java
+++ b/extensions/entitystore-mongodb/src/main/java/org/apache/zest/entitystore/mongodb/MongoAccessors.java
@@ -19,16 +19,14 @@
  */
 package org.apache.zest.entitystore.mongodb;
 
-import com.mongodb.DB;
 import com.mongodb.MongoClient;
+import com.mongodb.client.MongoDatabase;
 
 public interface MongoAccessors
 {
-
     MongoClient mongoInstanceUsed();
 
-    DB dbInstanceUsed();
+    MongoDatabase dbInstanceUsed();
 
     String collectionUsed();
-
 }

http://git-wip-us.apache.org/repos/asf/zest-java/blob/7ac53388/extensions/entitystore-mongodb/src/main/java/org/apache/zest/entitystore/mongodb/MongoEntityStoreConfiguration.java
----------------------------------------------------------------------
diff --git a/extensions/entitystore-mongodb/src/main/java/org/apache/zest/entitystore/mongodb/MongoEntityStoreConfiguration.java b/extensions/entitystore-mongodb/src/main/java/org/apache/zest/entitystore/mongodb/MongoEntityStoreConfiguration.java
index 835095f..ee1d32e 100644
--- a/extensions/entitystore-mongodb/src/main/java/org/apache/zest/entitystore/mongodb/MongoEntityStoreConfiguration.java
+++ b/extensions/entitystore-mongodb/src/main/java/org/apache/zest/entitystore/mongodb/MongoEntityStoreConfiguration.java
@@ -57,21 +57,39 @@ public interface MongoEntityStoreConfiguration
 
     enum WriteConcern
     {
-
-        /** Exceptions are raised for network issues, but not server errors */
-        NORMAL,
-        /** Exceptions are raised for network issues, and server errors; waits on a server for the write operation */
-        SAFE,
-        /** Exceptions are raised for network issues, and server errors; waits on a majority of servers for the write operation */
-        MAJORITY,
-        /** Exceptions are raised for network issues, and server errors; the write operation waits for the server to flush the data to disk*/
-        FSYNC_SAFE,
-        /** Exceptions are raised for network issues, and server errors; the write operation waits for the server to group commit to the journal file on disk*/
-        JOURNAL_SAFE,
-        /** Exceptions are raised for network issues, and server errors; waits for at least 2 servers for the write operation*/
-        REPLICAS_SAFE;
+        /**
+         *  Write operations that use this write concern will wait for acknowledgement,
+         *  using the default write concern configured on the server.
+         *  This is the default value.
+         */
+        ACKNOWLEDGED,
+        /**
+         * Write operations that use this write concern will wait for acknowledgement from a single member.
+         */
+        W1,
+        /**
+         * Write operations that use this write concern will wait for acknowledgement from two members.
+         */
+        W2,
+        /**
+         * Write operations that use this write concern will wait for acknowledgement from three members.
+         */
+        W3,
+        /**
+         * Write operations that use this write concern will return as soon as the message is written to the socket.
+         * Exceptions are raised for network issues, but not server errors.
+         */
+        UNACKNOWLEDGED,
+        /**
+         * Write operations wait for the server to group commit to the journal file on disk.
+         */
+        JOURNALED,
+        /**
+         * Exceptions are raised for network issues, and server errors;
+         * waits on a majority of servers for the write operation.
+         */
+        MAJORITY;
 
     }
-
 }
 // END SNIPPET: config
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/zest-java/blob/7ac53388/extensions/entitystore-mongodb/src/main/java/org/apache/zest/entitystore/mongodb/MongoMapEntityStoreMixin.java
----------------------------------------------------------------------
diff --git a/extensions/entitystore-mongodb/src/main/java/org/apache/zest/entitystore/mongodb/MongoMapEntityStoreMixin.java b/extensions/entitystore-mongodb/src/main/java/org/apache/zest/entitystore/mongodb/MongoMapEntityStoreMixin.java
index 93f5af0..9b988f5 100644
--- a/extensions/entitystore-mongodb/src/main/java/org/apache/zest/entitystore/mongodb/MongoMapEntityStoreMixin.java
+++ b/extensions/entitystore-mongodb/src/main/java/org/apache/zest/entitystore/mongodb/MongoMapEntityStoreMixin.java
@@ -20,14 +20,15 @@
 package org.apache.zest.entitystore.mongodb;
 
 import com.mongodb.BasicDBObject;
-import com.mongodb.DB;
-import com.mongodb.DBCollection;
-import com.mongodb.DBCursor;
-import com.mongodb.DBObject;
 import com.mongodb.MongoClient;
+import com.mongodb.MongoClientOptions;
 import com.mongodb.MongoCredential;
 import com.mongodb.ServerAddress;
 import com.mongodb.WriteConcern;
+import com.mongodb.client.FindIterable;
+import com.mongodb.client.MongoCollection;
+import com.mongodb.client.MongoCursor;
+import com.mongodb.client.MongoDatabase;
 import com.mongodb.util.JSON;
 import java.io.IOException;
 import java.io.Reader;
@@ -37,6 +38,7 @@ import java.io.Writer;
 import java.net.UnknownHostException;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.List;
 import org.apache.zest.api.configuration.Configuration;
 import org.apache.zest.api.entity.EntityDescriptor;
@@ -50,6 +52,10 @@ import org.apache.zest.io.Sender;
 import org.apache.zest.spi.entitystore.EntityNotFoundException;
 import org.apache.zest.spi.entitystore.EntityStoreException;
 import org.apache.zest.spi.entitystore.helpers.MapEntityStore;
+import org.bson.Document;
+import org.bson.conversions.Bson;
+
+import static com.mongodb.client.model.Filters.eq;
 
 /**
  * MongoDB implementation of MapEntityStore.
@@ -70,7 +76,7 @@ public class MongoMapEntityStoreMixin
     private String username;
     private char[] password;
     private MongoClient mongo;
-    private DB db;
+    private MongoDatabase db;
 
     @Override
     public void activateService()
@@ -79,20 +85,21 @@ public class MongoMapEntityStoreMixin
         loadConfiguration();
 
         // Create Mongo driver and open the database
+        MongoClientOptions options = MongoClientOptions.builder().writeConcern( writeConcern ).build();
         if( username.isEmpty() )
         {
-            mongo = new MongoClient( serverAddresses );
+            mongo = new MongoClient( serverAddresses, options );
         }
         else
         {
             MongoCredential credential = MongoCredential.createMongoCRCredential( username, databaseName, password );
-            mongo = new MongoClient( serverAddresses, Arrays.asList( credential ) );
+            mongo = new MongoClient( serverAddresses, Collections.singletonList( credential ), options );
         }
-        db = mongo.getDB( databaseName );
+        db = mongo.getDatabase( databaseName );
 
         // Create index if needed
-        DBCollection entities = db.getCollection( collectionName );
-        if( entities.getIndexInfo().isEmpty() )
+        MongoCollection<Document> entities = db.getCollection( collectionName );
+        if( !entities.listIndexes().iterator().hasNext() )
         {
             entities.createIndex( new BasicDBObject( IDENTITY_COLUMN, 1 ) );
         }
@@ -139,24 +146,27 @@ public class MongoMapEntityStoreMixin
         // If write concern not configured, set it to normal
         switch( config.writeConcern().get() )
         {
-            case FSYNC_SAFE:
-                writeConcern = WriteConcern.FSYNC_SAFE;
+            case W1:
+                writeConcern = WriteConcern.W1;
                 break;
-            case JOURNAL_SAFE:
-                writeConcern = WriteConcern.JOURNAL_SAFE;
+            case W2:
+                writeConcern = WriteConcern.W2;
                 break;
-            case MAJORITY:
-                writeConcern = WriteConcern.MAJORITY;
+            case W3:
+                writeConcern = WriteConcern.W3;
                 break;
-            case REPLICAS_SAFE:
-                writeConcern = WriteConcern.REPLICAS_SAFE;
+            case UNACKNOWLEDGED:
+                writeConcern = WriteConcern.UNACKNOWLEDGED;
                 break;
-            case SAFE:
-                writeConcern = WriteConcern.SAFE;
+            case JOURNALED:
+                writeConcern = WriteConcern.JOURNALED;
+                break;
+            case MAJORITY:
+                writeConcern = WriteConcern.MAJORITY;
                 break;
-            case NORMAL:
+            case ACKNOWLEDGED:
             default:
-                writeConcern = WriteConcern.NORMAL;
+                writeConcern = WriteConcern.ACKNOWLEDGED;
         }
 
         // Username and password are defaulted to empty strings
@@ -186,7 +196,7 @@ public class MongoMapEntityStoreMixin
     }
 
     @Override
-    public DB dbInstanceUsed()
+    public MongoDatabase dbInstanceUsed()
     {
         return db;
     }
@@ -201,13 +211,14 @@ public class MongoMapEntityStoreMixin
     public Reader get( EntityReference entityReference )
         throws EntityStoreException
     {
-        DBObject entity = db.getCollection( collectionName ).findOne( byIdentity( entityReference ) );
-        if( entity == null )
+        MongoCursor<Document> cursor = db.getCollection( collectionName )
+                                         .find( byIdentity( entityReference ) )
+                                         .limit( 1 ).iterator();
+        if( !cursor.hasNext() )
         {
             throw new EntityNotFoundException( entityReference );
         }
-        DBObject bsonState = (DBObject) entity.get( STATE_COLUMN );
-
+        Document bsonState = (Document) cursor.next().get( STATE_COLUMN );
         String jsonState = JSON.serialize( bsonState );
         return new StringReader( jsonState );
     }
@@ -216,7 +227,7 @@ public class MongoMapEntityStoreMixin
     public void applyChanges( MapChanges changes )
         throws IOException
     {
-        final DBCollection entities = db.getCollection( collectionName );
+        final MongoCollection<Document> entities = db.getCollection( collectionName );
 
         changes.visitMap( new MapChanger()
         {
@@ -231,14 +242,11 @@ public class MongoMapEntityStoreMixin
                         throws IOException
                     {
                         super.close();
-
-                        String jsonState = toString();
-                        DBObject bsonState = (DBObject) JSON.parse( jsonState );
-
-                        BasicDBObject entity = new BasicDBObject();
+                        Document bsonState = Document.parse( toString() );
+                        Document entity = new Document();
                         entity.put( IDENTITY_COLUMN, ref.identity().toString() );
                         entity.put( STATE_COLUMN, bsonState );
-                        entities.insert( entity, writeConcern );
+                        entities.insertOne( entity );
                     }
                 };
             }
@@ -254,13 +262,11 @@ public class MongoMapEntityStoreMixin
                         throws IOException
                     {
                         super.close();
-
-                        DBObject bsonState = (DBObject) JSON.parse( toString() );
-
-                        BasicDBObject entity = new BasicDBObject();
+                        Document bsonState = Document.parse( toString() );
+                        Document entity = new Document();
                         entity.put( IDENTITY_COLUMN, ref.identity().toString() );
                         entity.put( STATE_COLUMN, bsonState );
-                        entities.update( byIdentity( ref ), entity, false, false, writeConcern );
+                        entities.replaceOne( byIdentity( ref ), entity );
                     }
                 };
             }
@@ -269,12 +275,15 @@ public class MongoMapEntityStoreMixin
             public void removeEntity( EntityReference ref, EntityDescriptor entityDescriptor )
                 throws EntityNotFoundException
             {
-                DBObject entity = entities.findOne( byIdentity( ref ) );
-                if( entity == null )
+                Bson byIdFilter = byIdentity( ref );
+                MongoCursor<Document> cursor = db.getCollection( collectionName )
+                                                 .find( byIdFilter )
+                                                 .limit( 1 ).iterator();
+                if( !cursor.hasNext() )
                 {
                     throw new EntityNotFoundException( ref );
                 }
-                entities.remove( entity, writeConcern );
+                entities.deleteOne( byIdFilter );
             }
         } );
     }
@@ -296,11 +305,10 @@ public class MongoMapEntityStoreMixin
                         Receiver<? super Reader, ReceiverThrowableType> receiver )
                         throws ReceiverThrowableType, IOException
                     {
-                        DBCursor cursor = db.getCollection( collectionName ).find();
-                        while( cursor.hasNext() )
+                        FindIterable<Document> cursor = db.getCollection( collectionName ).find();
+                        for( Document eachEntity : cursor )
                         {
-                            DBObject eachEntity = cursor.next();
-                            DBObject bsonState = (DBObject) eachEntity.get( STATE_COLUMN );
+                            Document bsonState = (Document) eachEntity.get( STATE_COLUMN );
                             String jsonState = JSON.serialize( bsonState );
                             receiver.receive( new StringReader( jsonState ) );
                         }
@@ -310,8 +318,8 @@ public class MongoMapEntityStoreMixin
         };
     }
 
-    private DBObject byIdentity( EntityReference entityReference )
+    private Bson byIdentity( EntityReference entityReference )
     {
-        return new BasicDBObject( IDENTITY_COLUMN, entityReference.identity().toString() );
+        return eq( IDENTITY_COLUMN, entityReference.identity().toString() );
     }
 }

http://git-wip-us.apache.org/repos/asf/zest-java/blob/7ac53388/extensions/entitystore-mongodb/src/test/java/org/apache/zest/entitystore/mongodb/EmbedMongoMapEntityStoreTest.java
----------------------------------------------------------------------
diff --git a/extensions/entitystore-mongodb/src/test/java/org/apache/zest/entitystore/mongodb/EmbedMongoMapEntityStoreTest.java b/extensions/entitystore-mongodb/src/test/java/org/apache/zest/entitystore/mongodb/EmbedMongoMapEntityStoreTest.java
index b528b54..b5dc6e9 100644
--- a/extensions/entitystore-mongodb/src/test/java/org/apache/zest/entitystore/mongodb/EmbedMongoMapEntityStoreTest.java
+++ b/extensions/entitystore-mongodb/src/test/java/org/apache/zest/entitystore/mongodb/EmbedMongoMapEntityStoreTest.java
@@ -83,7 +83,7 @@ public class EmbedMongoMapEntityStoreTest extends AbstractEntityStoreTest
 
         MongoEntityStoreConfiguration mongoConfig = config.forMixin( MongoEntityStoreConfiguration.class )
                                                           .declareDefaults();
-        mongoConfig.writeConcern().set( MongoEntityStoreConfiguration.WriteConcern.FSYNC_SAFE );
+        mongoConfig.writeConcern().set( MongoEntityStoreConfiguration.WriteConcern.MAJORITY );
         mongoConfig.database().set( "zest:test" );
         mongoConfig.collection().set( testName.getMethodName() );
         mongoConfig.hostname().set( "localhost" );

http://git-wip-us.apache.org/repos/asf/zest-java/blob/7ac53388/extensions/entitystore-mongodb/src/test/java/org/apache/zest/entitystore/mongodb/MongoMapEntityStoreTest.java
----------------------------------------------------------------------
diff --git a/extensions/entitystore-mongodb/src/test/java/org/apache/zest/entitystore/mongodb/MongoMapEntityStoreTest.java b/extensions/entitystore-mongodb/src/test/java/org/apache/zest/entitystore/mongodb/MongoMapEntityStoreTest.java
index b7cf7b1..65bb810 100644
--- a/extensions/entitystore-mongodb/src/test/java/org/apache/zest/entitystore/mongodb/MongoMapEntityStoreTest.java
+++ b/extensions/entitystore-mongodb/src/test/java/org/apache/zest/entitystore/mongodb/MongoMapEntityStoreTest.java
@@ -62,7 +62,7 @@ public class MongoMapEntityStoreTest
         // END SNIPPET: assembly
 
         MongoEntityStoreConfiguration mongoConfig = config.forMixin( MongoEntityStoreConfiguration.class ).declareDefaults();
-        mongoConfig.writeConcern().set( MongoEntityStoreConfiguration.WriteConcern.FSYNC_SAFE );
+        mongoConfig.writeConcern().set( MongoEntityStoreConfiguration.WriteConcern.MAJORITY );
         mongoConfig.database().set( "zest:test" );
         mongoConfig.collection().set( "zest:test:entities" );
         // START SNIPPET: assembly

http://git-wip-us.apache.org/repos/asf/zest-java/blob/7ac53388/extensions/entitystore-mongodb/src/test/java/org/apache/zest/entitystore/mongodb/MongoMapEntityStoreWithCacheTest.java
----------------------------------------------------------------------
diff --git a/extensions/entitystore-mongodb/src/test/java/org/apache/zest/entitystore/mongodb/MongoMapEntityStoreWithCacheTest.java b/extensions/entitystore-mongodb/src/test/java/org/apache/zest/entitystore/mongodb/MongoMapEntityStoreWithCacheTest.java
index b7355a4..a308803 100644
--- a/extensions/entitystore-mongodb/src/test/java/org/apache/zest/entitystore/mongodb/MongoMapEntityStoreWithCacheTest.java
+++ b/extensions/entitystore-mongodb/src/test/java/org/apache/zest/entitystore/mongodb/MongoMapEntityStoreWithCacheTest.java
@@ -58,7 +58,7 @@ public class MongoMapEntityStoreWithCacheTest
         new MongoDBEntityStoreAssembler().withConfig( config, Visibility.layer ).assemble( module );
 
         MongoEntityStoreConfiguration mongoConfig = config.forMixin( MongoEntityStoreConfiguration.class ).declareDefaults();
-        mongoConfig.writeConcern().set( MongoEntityStoreConfiguration.WriteConcern.FSYNC_SAFE );
+        mongoConfig.writeConcern().set( MongoEntityStoreConfiguration.WriteConcern.MAJORITY );
         mongoConfig.database().set( "zest:test" );
         mongoConfig.collection().set( "zest:test:entities" );
     }