Skip to content

Commit 6be00a8

Browse files
committed
Made ConnectionListener and ConnectionPoolListener an official part of the API
JAVA-805
1 parent 98d872e commit 6be00a8

File tree

88 files changed

+1393
-993
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

88 files changed

+1393
-993
lines changed

driver-async/src/main/com/mongodb/async/client/MongoClients.java

Lines changed: 5 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,6 @@
3131
import com.mongodb.connection.SslSettings;
3232
import com.mongodb.connection.StreamFactory;
3333
import com.mongodb.connection.StreamFactoryFactory;
34-
import com.mongodb.event.CommandEventMulticaster;
35-
import com.mongodb.event.CommandListener;
36-
import com.mongodb.management.JMXConnectionPoolListener;
3734
import org.bson.codecs.BsonValueCodecProvider;
3835
import org.bson.codecs.DocumentCodecProvider;
3936
import org.bson.codecs.IterableCodecProvider;
@@ -42,8 +39,8 @@
4239
import org.bson.codecs.configuration.CodecRegistry;
4340

4441
import java.io.Closeable;
45-
import java.util.List;
4642

43+
import static com.mongodb.internal.event.EventListenerHelper.getCommandListener;
4744
import static java.util.Arrays.asList;
4845
import static org.bson.codecs.configuration.CodecRegistries.fromProviders;
4946

@@ -188,12 +185,10 @@ private static MongoClient create(final MongoClientSettings settings, final Mong
188185
static MongoClient createMongoClient(final MongoClientSettings settings, final MongoDriverInformation mongoDriverInformation,
189186
final StreamFactory streamFactory, final StreamFactory heartbeatStreamFactory,
190187
final Closeable externalResourceCloser) {
191-
return new MongoClientImpl(settings, new DefaultClusterFactory().create(settings.getClusterSettings(), settings.getServerSettings(),
192-
settings.getConnectionPoolSettings(), streamFactory,
193-
heartbeatStreamFactory,
194-
settings.getCredentialList(), null, new JMXConnectionPoolListener(), null,
195-
createCommandListener(settings.getCommandListeners()),
196-
settings.getApplicationName(), mongoDriverInformation), externalResourceCloser);
188+
return new MongoClientImpl(settings, new DefaultClusterFactory().createCluster(settings.getClusterSettings(),
189+
settings.getServerSettings(), settings.getConnectionPoolSettings(), streamFactory, heartbeatStreamFactory,
190+
settings.getCredentialList(), getCommandListener(settings.getCommandListeners()), settings.getApplicationName(),
191+
mongoDriverInformation), externalResourceCloser);
197192
}
198193

199194
/**
@@ -252,17 +247,6 @@ private static String getStreamType(final String requestedStreamType) {
252247
}
253248
}
254249

255-
static CommandListener createCommandListener(final List<CommandListener> commandListeners) {
256-
switch (commandListeners.size()) {
257-
case 0:
258-
return null;
259-
case 1:
260-
return commandListeners.get(0);
261-
default:
262-
return new CommandEventMulticaster(commandListeners);
263-
}
264-
}
265-
266250
private MongoClients() {
267251
}
268252
}

driver-async/src/test/functional/com/mongodb/async/client/MongoClientListenerRegistrationSpecification.groovy

Lines changed: 44 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -17,36 +17,68 @@
1717
package com.mongodb.async.client
1818

1919
import com.mongodb.async.FutureResultCallback
20+
import com.mongodb.connection.ClusterSettings
21+
import com.mongodb.connection.ConnectionPoolSettings
22+
import com.mongodb.connection.ServerSettings
23+
import com.mongodb.event.ClusterListener
2024
import com.mongodb.event.CommandListener
25+
import com.mongodb.event.ConnectionPoolListener
26+
import com.mongodb.event.ServerListener
27+
import com.mongodb.event.ServerMonitorListener
2128
import org.bson.Document
2229

2330
import static java.util.concurrent.TimeUnit.SECONDS
2431

2532
class MongoClientListenerRegistrationSpecification extends FunctionalSpecification {
2633

27-
def 'should register single command listener'() {
34+
def 'should register event listeners'() {
2835
given:
29-
def first = Mock(CommandListener)
30-
def client = MongoClients.create(Fixture.mongoClientBuilderFromConnectionString
31-
.addCommandListener(first)
32-
.build());
36+
def clusterListener = Mock(ClusterListener) {
37+
(1.._) * _
38+
}
39+
def commandListener = Mock(CommandListener) {
40+
(1.._) * _
41+
}
42+
def connectionPoolListener = Mock(ConnectionPoolListener) {
43+
(1.._) * _
44+
}
45+
def serverListener = Mock(ServerListener) {
46+
(1.._) * _
47+
}
48+
def serverMonitorListener = Mock(ServerMonitorListener) {
49+
(1.._) * _
50+
}
3351

3452
when:
35-
run(client.getDatabase('admin').&runCommand, new Document('ping', 1))
53+
def defaultSettings = Fixture.mongoClientBuilderFromConnectionString.build()
54+
55+
def clusterSettings = ClusterSettings.builder(defaultSettings.getClusterSettings()).addClusterListener(clusterListener).build()
56+
def connectionPoolSettings = ConnectionPoolSettings.builder(defaultSettings.getConnectionPoolSettings())
57+
.addConnectionPoolListener(connectionPoolListener).build()
58+
def serverSettings = ServerSettings.builder(defaultSettings.getServerSettings()).addServerListener(serverListener)
59+
.addServerMonitorListener(serverMonitorListener).build()
60+
def clientSettings = MongoClientSettings.builder()
61+
.clusterSettings(clusterSettings)
62+
.connectionPoolSettings(connectionPoolSettings)
63+
.serverSettings(serverSettings)
64+
.credentialList(defaultSettings.getCredentialList())
65+
.sslSettings(defaultSettings.getSslSettings())
66+
.socketSettings(defaultSettings.getSocketSettings())
67+
.addCommandListener(commandListener)
68+
.build()
69+
70+
def client = MongoClients.create(clientSettings)
3671

3772
then:
38-
1 * first.commandStarted(_)
39-
1 * first.commandSucceeded(_)
73+
run(client.getDatabase('admin').&runCommand, new Document('ping', 1))
4074
}
4175

4276
def 'should register multiple command listeners'() {
4377
given:
4478
def first = Mock(CommandListener)
4579
def second = Mock(CommandListener)
46-
def client = MongoClients.create(Fixture.mongoClientBuilderFromConnectionString
47-
.addCommandListener(first)
48-
.addCommandListener(second)
49-
.build());
80+
def client = MongoClients.create(Fixture.mongoClientBuilderFromConnectionString
81+
.addCommandListener(first).addCommandListener(second).build())
5082

5183
when:
5284
run(client.getDatabase('admin').&runCommand, new Document('ping', 1))

driver-core/src/main/com/mongodb/connection/BaseCluster.java

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
import com.mongodb.diagnostics.logging.Loggers;
2828
import com.mongodb.event.ClusterClosedEvent;
2929
import com.mongodb.event.ClusterDescriptionChangedEvent;
30-
import com.mongodb.event.ClusterEventMulticaster;
3130
import com.mongodb.event.ClusterListener;
3231
import com.mongodb.event.ClusterOpeningEvent;
3332
import com.mongodb.event.ServerListener;
@@ -46,6 +45,8 @@
4645

4746
import static com.mongodb.assertions.Assertions.isTrue;
4847
import static com.mongodb.assertions.Assertions.notNull;
48+
import static com.mongodb.internal.event.EventListenerHelper.createServerListener;
49+
import static com.mongodb.internal.event.EventListenerHelper.getClusterListener;
4950
import static java.lang.String.format;
5051
import static java.util.Arrays.asList;
5152
import static java.util.concurrent.TimeUnit.MILLISECONDS;
@@ -72,8 +73,7 @@ abstract class BaseCluster implements Cluster {
7273
this.clusterId = notNull("clusterId", clusterId);
7374
this.settings = notNull("settings", settings);
7475
this.serverFactory = notNull("serverFactory", serverFactory);
75-
this.clusterListener = settings.getClusterListeners().isEmpty()
76-
? new NoOpClusterListener() : new ClusterEventMulticaster(settings.getClusterListeners());
76+
this.clusterListener = getClusterListener(settings);
7777
clusterListener.clusterOpening(new ClusterOpeningEvent(clusterId));
7878
}
7979

@@ -189,7 +189,7 @@ public ClusterDescription getDescription() {
189189
}
190190
return curDescription;
191191
} catch (InterruptedException e) {
192-
throw new MongoInterruptedException(format("Interrupted while waiting to connect"), e);
192+
throw new MongoInterruptedException("Interrupted while waiting to connect", e);
193193
}
194194
}
195195

@@ -355,10 +355,8 @@ private Random getRandom() {
355355
return result;
356356
}
357357

358-
protected ClusterableServer createServer(final ServerAddress serverAddress,
359-
final ServerListener serverListener) {
360-
ClusterableServer server = serverFactory.create(serverAddress, serverListener);
361-
return server;
358+
protected ClusterableServer createServer(final ServerAddress serverAddress, final ServerListener serverListener) {
359+
return serverFactory.create(serverAddress, createServerListener(serverFactory.getSettings(), serverListener));
362360
}
363361

364362
private void throwIfIncompatible(final ClusterDescription curDescription) {

driver-core/src/main/com/mongodb/connection/ClusterFactory.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818

1919
import com.mongodb.MongoCredential;
2020
import com.mongodb.event.ClusterListener;
21-
import com.mongodb.event.ConnectionListener;
2221
import com.mongodb.event.ConnectionPoolListener;
2322

2423
import java.util.List;
@@ -47,6 +46,7 @@ public interface ClusterFactory {
4746
* @param connectionListener an optional listener for connection-related events
4847
* @return the cluster
4948
*/
49+
@SuppressWarnings("deprecation")
5050
Cluster create(ClusterSettings settings,
5151
ServerSettings serverSettings,
5252
ConnectionPoolSettings connectionPoolSettings,
@@ -55,7 +55,7 @@ Cluster create(ClusterSettings settings,
5555
List<MongoCredential> credentialList,
5656
ClusterListener clusterListener,
5757
ConnectionPoolListener connectionPoolListener,
58-
ConnectionListener connectionListener);
58+
com.mongodb.event.ConnectionListener connectionListener);
5959

6060
// CHECKSTYLE:ON
6161
}

driver-core/src/main/com/mongodb/connection/ClusterSettings.java

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
import com.mongodb.selector.ServerSelector;
2525

2626
import java.util.ArrayList;
27-
import java.util.Collections;
2827
import java.util.LinkedHashSet;
2928
import java.util.List;
3029
import java.util.Set;
@@ -33,6 +32,7 @@
3332
import static com.mongodb.assertions.Assertions.isTrueArgument;
3433
import static com.mongodb.assertions.Assertions.notNull;
3534
import static java.util.Collections.singletonList;
35+
import static java.util.Collections.unmodifiableList;
3636

3737
/**
3838
* Settings for the cluster.
@@ -60,6 +60,17 @@ public static Builder builder() {
6060
return new Builder();
6161
}
6262

63+
/**
64+
* Creates a builder instance.
65+
*
66+
* @param clusterSettings existing ClusterSettings to default the builder settings on.
67+
* @return a builder
68+
* @since 3.5
69+
*/
70+
public static Builder builder(final ClusterSettings clusterSettings) {
71+
return new Builder(clusterSettings);
72+
}
73+
6374
/**
6475
* A builder for the cluster settings.
6576
*/
@@ -78,6 +89,19 @@ public static final class Builder {
7889
private Builder() {
7990
}
8091

92+
private Builder(final ClusterSettings clusterSettings) {
93+
notNull("builder", clusterSettings);
94+
description = clusterSettings.description;
95+
hosts = clusterSettings.hosts;
96+
mode = clusterSettings.mode;
97+
requiredReplicaSetName = clusterSettings.requiredReplicaSetName;
98+
requiredClusterType = clusterSettings.requiredClusterType;
99+
serverSelector = clusterSettings.serverSelector;
100+
serverSelectionTimeoutMS = clusterSettings.serverSelectionTimeoutMS;
101+
maxWaitQueueSize = clusterSettings.maxWaitQueueSize;
102+
clusterListeners.addAll(clusterSettings.clusterListeners);
103+
}
104+
81105
/**
82106
* Sets the user defined description of the MongoClient.
83107
*
@@ -105,7 +129,7 @@ public Builder hosts(final List<ServerAddress> hosts) {
105129
notNull("host", host);
106130
hostsSet.add(new ServerAddress(host.getHost(), host.getPort()));
107131
}
108-
this.hosts = Collections.unmodifiableList(new ArrayList<ServerAddress>(hostsSet));
132+
this.hosts = unmodifiableList(new ArrayList<ServerAddress>(hostsSet));
109133
return this;
110134
}
111135

@@ -326,7 +350,7 @@ public int getMaxWaitQueueSize() {
326350
* @since 3.3
327351
*/
328352
public List<ClusterListener> getClusterListeners() {
329-
return Collections.unmodifiableList(clusterListeners);
353+
return clusterListeners;
330354
}
331355

332356
@Override
@@ -447,6 +471,6 @@ private ClusterSettings(final Builder builder) {
447471
serverSelector = builder.serverSelector;
448472
serverSelectionTimeoutMS = builder.serverSelectionTimeoutMS;
449473
maxWaitQueueSize = builder.maxWaitQueueSize;
450-
clusterListeners = builder.clusterListeners;
474+
clusterListeners = unmodifiableList(builder.clusterListeners);
451475
}
452476
}

0 commit comments

Comments
 (0)