29
29
import com .mongodb .connection .SslSettings ;
30
30
import com .mongodb .connection .StreamFactory ;
31
31
import com .mongodb .connection .StreamFactoryFactory ;
32
- import com .mongodb .connection .netty .NettyStreamFactory ;
33
32
import com .mongodb .event .CommandEventMulticaster ;
34
33
import com .mongodb .event .CommandListener ;
35
34
import com .mongodb .management .JMXConnectionPoolListener ;
36
- import io .netty .channel .EventLoopGroup ;
37
- import io .netty .channel .nio .NioEventLoopGroup ;
38
35
import org .bson .codecs .BsonValueCodecProvider ;
39
36
import org .bson .codecs .DocumentCodecProvider ;
40
37
import org .bson .codecs .IterableCodecProvider ;
41
38
import org .bson .codecs .ValueCodecProvider ;
42
39
import org .bson .codecs .configuration .CodecRegistry ;
43
40
44
41
import java .io .Closeable ;
45
- import java .io .IOException ;
46
42
import java .util .List ;
47
43
48
44
import static java .util .Arrays .asList ;
@@ -94,7 +90,7 @@ public static MongoClient create(final String connectionString) {
94
90
* </p>
95
91
* <p>
96
92
* 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,
98
94
* </p>
99
95
*
100
96
* @param connectionString the settings
@@ -175,21 +171,28 @@ public static MongoClient create(final ConnectionString connectionString, final
175
171
private static MongoClient create (final MongoClientSettings settings , final MongoDriverInformation mongoDriverInformation ,
176
172
final String requestedStreamType ) {
177
173
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 ) {
183
188
return new MongoClientImpl (settings , new DefaultClusterFactory ().create (settings .getClusterSettings (), settings .getServerSettings (),
184
189
settings .getConnectionPoolSettings (), streamFactory ,
185
190
heartbeatStreamFactory ,
186
191
settings .getCredentialList (), null , new JMXConnectionPoolListener (), null ,
187
192
createCommandListener (settings .getCommandListeners ()),
188
- settings .getApplicationName (), mongoDriverInformation ),
189
- getEventLoopGroupCloser (eventLoopGroup ));
193
+ settings .getApplicationName (), mongoDriverInformation ), externalResourceCloser );
190
194
}
191
195
192
-
193
196
/**
194
197
* Gets the default codec registry. It includes the following providers:
195
198
*
@@ -218,11 +221,9 @@ public static CodecRegistry getDefaultCodecRegistry() {
218
221
219
222
private static StreamFactory getStreamFactory (final StreamFactoryFactory streamFactoryFactory ,
220
223
final SocketSettings socketSettings , final SslSettings sslSettings ,
221
- final String streamType , final EventLoopGroup eventLoopGroup ) {
224
+ final String streamType ) {
222
225
if (streamFactoryFactory != null ) {
223
226
return streamFactoryFactory .create (socketSettings , sslSettings );
224
- } else if (isNetty (streamType )) {
225
- return new NettyStreamFactory (socketSettings , sslSettings , eventLoopGroup );
226
227
} else if (isNio2 (streamType )) {
227
228
return new AsynchronousSocketChannelStreamFactory (socketSettings , sslSettings );
228
229
} else {
@@ -246,28 +247,7 @@ private static String getStreamType(final String requestedStreamType) {
246
247
}
247
248
}
248
249
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 ) {
271
251
switch (commandListeners .size ()) {
272
252
case 0 :
273
253
return null ;
0 commit comments