[ https://issues.apache.org/jira/browse/NIFI-5239?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16617056#comment-16617056 ]
ASF GitHub Bot commented on NIFI-5239: -------------------------------------- Github user zenfenan commented on a diff in the pull request: https://github.com/apache/nifi/pull/2896#discussion_r217945280 --- Diff: nifi-nar-bundles/nifi-mongodb-bundle/nifi-mongodb-services/src/main/java/org/apache/nifi/mongodb/MongoDBControllerService.java --- @@ -17,156 +17,162 @@ package org.apache.nifi.mongodb; -import com.mongodb.client.FindIterable; +import com.mongodb.MongoClient; +import com.mongodb.MongoClientOptions; +import com.mongodb.MongoClientURI; +import com.mongodb.WriteConcern; import com.mongodb.client.MongoCollection; -import com.mongodb.client.MongoCursor; import com.mongodb.client.MongoDatabase; -import com.mongodb.client.model.UpdateOptions; - +import org.apache.commons.lang3.StringUtils; import org.apache.nifi.annotation.documentation.CapabilityDescription; import org.apache.nifi.annotation.documentation.Tags; import org.apache.nifi.annotation.lifecycle.OnDisabled; import org.apache.nifi.annotation.lifecycle.OnEnabled; +import org.apache.nifi.annotation.lifecycle.OnStopped; +import org.apache.nifi.authentication.exception.ProviderCreationException; +import org.apache.nifi.components.PropertyDescriptor; +import org.apache.nifi.controller.AbstractControllerService; import org.apache.nifi.controller.ConfigurationContext; -import org.apache.nifi.reporting.InitializationException; +import org.apache.nifi.security.util.SslContextFactory; +import org.apache.nifi.ssl.SSLContextService; import org.bson.Document; -import java.io.IOException; +import javax.net.ssl.SSLContext; import java.util.ArrayList; import java.util.List; @Tags({"mongo", "mongodb", "service"}) @CapabilityDescription( "Provides a controller service that wraps most of the functionality of the MongoDB driver." ) -public class MongoDBControllerService extends AbstractMongoDBControllerService implements MongoDBClientService { +public class MongoDBControllerService extends AbstractControllerService implements MongoDBClientService { private MongoDatabase db; private MongoCollection<Document> col; + private String uri; @OnEnabled - public void onEnabled(final ConfigurationContext context) throws InitializationException, IOException, InterruptedException { + public void onEnabled(final ConfigurationContext context) { + this.uri = context.getProperty(URI).evaluateAttributeExpressions().getValue(); this.createClient(context); - this.db = this.mongoClient.getDatabase(context.getProperty(MongoDBControllerService.DATABASE_NAME).getValue()); - this.col = this.db.getCollection(context.getProperty(MongoDBControllerService.COLLECTION_NAME).getValue()); - } - - @OnDisabled - public void onDisable() { - this.mongoClient.close(); - } - - @Override - public long count(Document query) { - return this.col.count(query); - } - - @Override - public void delete(Document query) { - this.col.deleteMany(query); } - @Override - public boolean exists(Document query) { - return this.col.count(query) > 0; - } - - @Override - public Document findOne(Document query) { - MongoCursor<Document> cursor = this.col.find(query).limit(1).iterator(); - Document retVal = cursor.tryNext(); - cursor.close(); - - return retVal; - } + static List<PropertyDescriptor> descriptors = new ArrayList<>(); - @Override - public Document findOne(Document query, Document projection) { - MongoCursor<Document> cursor = projection != null - ? this.col.find(query).projection(projection).limit(1).iterator() - : this.col.find(query).limit(1).iterator(); - Document retVal = cursor.tryNext(); - cursor.close(); - - return retVal; - } - - @Override - public List<Document> findMany(Document query) { - return findMany(query, null, -1); + static { + descriptors.add(URI); + descriptors.add(SSL_CONTEXT_SERVICE); --- End diff -- Why are we only exposing `URI` alone? I thought this PR intends to offer a controller service where we can configure a connection to a MongoDB database & collection and use that controller service optionally instead of the processor level `URI`, `Database Name`, `Collection Name`. > Make MongoDBControllerService able to act as a configuration source for > MongoDB processors > ------------------------------------------------------------------------------------------ > > Key: NIFI-5239 > URL: https://issues.apache.org/jira/browse/NIFI-5239 > Project: Apache NiFi > Issue Type: New Feature > Reporter: Mike Thomsen > Assignee: Mike Thomsen > Priority: Major > > The MongoDBControllerService should be able to provide the getDatabase and > getCollection functionality that are built into the MongoDB processors > through AbstractMongoDBProcessor. Using the controller service with the > processors should be optional in the first release it's added and then > mandatory going forward. -- This message was sent by Atlassian JIRA (v7.6.3#76005)