2929import com .mongodb .connection .SslSettings ;
3030import com .mongodb .connection .StreamFactory ;
3131import com .mongodb .connection .StreamFactoryFactory ;
32- import com .mongodb .connection .netty .NettyStreamFactory ;
3332import com .mongodb .event .CommandEventMulticaster ;
3433import com .mongodb .event .CommandListener ;
3534import com .mongodb .management .JMXConnectionPoolListener ;
36- import io .netty .channel .EventLoopGroup ;
37- import io .netty .channel .nio .NioEventLoopGroup ;
3835import org .bson .codecs .BsonValueCodecProvider ;
3936import org .bson .codecs .DocumentCodecProvider ;
4037import org .bson .codecs .IterableCodecProvider ;
4138import org .bson .codecs .ValueCodecProvider ;
4239import org .bson .codecs .configuration .CodecRegistry ;
4340
4441import java .io .Closeable ;
45- import java .io .IOException ;
4642import java .util .List ;
4743
4844import static java .util .Arrays .asList ;
@@ -94,7 +90,7 @@ public static MongoClient create(final String connectionString) {
9490 * </p>
9591 * <p>
9692 * The connection string's stream type is then applied by setting the
97- * {@link com.mongodb.connection.StreamFactory} to an instance of {@link NettyStreamFactory} ,
93+ * {@link com.mongodb.connection.StreamFactory} to an instance of NettyStreamFactory,
9894 * </p>
9995 *
10096 * @param connectionString the settings
@@ -175,21 +171,28 @@ public static MongoClient create(final ConnectionString connectionString, final
175171 private static MongoClient create (final MongoClientSettings settings , final MongoDriverInformation mongoDriverInformation ,
176172 final String requestedStreamType ) {
177173 String streamType = getStreamType (requestedStreamType );
178- EventLoopGroup eventLoopGroup = getEventLoopGroupIfNecessary (settings .getStreamFactoryFactory (), streamType );
179- StreamFactory streamFactory = getStreamFactory (settings .getStreamFactoryFactory (), settings .getSocketSettings (),
180- settings .getSslSettings (), streamType , eventLoopGroup );
181- StreamFactory heartbeatStreamFactory = getStreamFactory (settings .getStreamFactoryFactory (), settings .getHeartbeatSocketSettings (),
182- settings .getSslSettings (), streamType , eventLoopGroup );
174+ if (isNetty (streamType ) && settings .getStreamFactoryFactory () == null ) {
175+ return NettyMongoClients .create (settings , mongoDriverInformation );
176+ } else {
177+ StreamFactory streamFactory = getStreamFactory (settings .getStreamFactoryFactory (), settings .getSocketSettings (),
178+ settings .getSslSettings (), streamType );
179+ StreamFactory heartbeatStreamFactory = getStreamFactory (settings .getStreamFactoryFactory (),
180+ settings .getHeartbeatSocketSettings (), settings .getSslSettings (), streamType );
181+ return createMongoClient (settings , mongoDriverInformation , streamFactory , heartbeatStreamFactory , null );
182+ }
183+ }
184+
185+ static MongoClient createMongoClient (final MongoClientSettings settings , final MongoDriverInformation mongoDriverInformation ,
186+ final StreamFactory streamFactory , final StreamFactory heartbeatStreamFactory ,
187+ final Closeable externalResourceCloser ) {
183188 return new MongoClientImpl (settings , new DefaultClusterFactory ().create (settings .getClusterSettings (), settings .getServerSettings (),
184189 settings .getConnectionPoolSettings (), streamFactory ,
185190 heartbeatStreamFactory ,
186191 settings .getCredentialList (), null , new JMXConnectionPoolListener (), null ,
187192 createCommandListener (settings .getCommandListeners ()),
188- settings .getApplicationName (), mongoDriverInformation ),
189- getEventLoopGroupCloser (eventLoopGroup ));
193+ settings .getApplicationName (), mongoDriverInformation ), externalResourceCloser );
190194 }
191195
192-
193196 /**
194197 * Gets the default codec registry. It includes the following providers:
195198 *
@@ -218,11 +221,9 @@ public static CodecRegistry getDefaultCodecRegistry() {
218221
219222 private static StreamFactory getStreamFactory (final StreamFactoryFactory streamFactoryFactory ,
220223 final SocketSettings socketSettings , final SslSettings sslSettings ,
221- final String streamType , final EventLoopGroup eventLoopGroup ) {
224+ final String streamType ) {
222225 if (streamFactoryFactory != null ) {
223226 return streamFactoryFactory .create (socketSettings , sslSettings );
224- } else if (isNetty (streamType )) {
225- return new NettyStreamFactory (socketSettings , sslSettings , eventLoopGroup );
226227 } else if (isNio2 (streamType )) {
227228 return new AsynchronousSocketChannelStreamFactory (socketSettings , sslSettings );
228229 } else {
@@ -246,28 +247,7 @@ private static String getStreamType(final String requestedStreamType) {
246247 }
247248 }
248249
249- private static Closeable getEventLoopGroupCloser (final EventLoopGroup eventLoopGroup ) {
250- if (eventLoopGroup == null ) {
251- return null ;
252- } else {
253- return new Closeable () {
254- @ Override
255- public void close () throws IOException {
256- eventLoopGroup .shutdownGracefully ().awaitUninterruptibly ();
257- }
258- };
259- }
260- }
261- private static EventLoopGroup getEventLoopGroupIfNecessary (final StreamFactoryFactory streamFactoryFactory ,
262- final String streamType ) {
263- if (isNetty (streamType ) && streamFactoryFactory == null ) {
264- return new NioEventLoopGroup ();
265- } else {
266- return null ;
267- }
268- }
269-
270- private static CommandListener createCommandListener (final List <CommandListener > commandListeners ) {
250+ static CommandListener createCommandListener (final List <CommandListener > commandListeners ) {
271251 switch (commandListeners .size ()) {
272252 case 0 :
273253 return null ;
0 commit comments