Package com.unboundid.ldap.sdk
Class RoundRobinServerSet
java.lang.Object
com.unboundid.ldap.sdk.ServerSet
com.unboundid.ldap.sdk.RoundRobinServerSet
@NotMutable
@ThreadSafety(level=COMPLETELY_THREADSAFE)
public final class RoundRobinServerSet
extends ServerSet
This class provides a server set implementation that will use a round-robin
algorithm to select the server to which the connection should be established.
Any number of servers may be included in this server set, and each request
will attempt to retrieve a connection to the next server in the list,
circling back to the beginning of the list as necessary. If a server is
unavailable when an attempt is made to establish a connection to it, then
the connection will be established to the next available server in the set.
This server set implementation has the ability to maintain a temporary blacklist of servers that have been recently found to be unavailable or unsuitable for use. If an attempt to establish or authenticate a connection fails, if post-connect processing fails for that connection, or if health checking indicates that the connection is not suitable, then that server may be placed on the blacklist so that it will only be tried as a last resort after all non-blacklisted servers have been attempted. The blacklist will be checked at regular intervals to determine whether a server should be re-instated to availability.
This server set implementation has the ability to maintain a temporary blacklist of servers that have been recently found to be unavailable or unsuitable for use. If an attempt to establish or authenticate a connection fails, if post-connect processing fails for that connection, or if health checking indicates that the connection is not suitable, then that server may be placed on the blacklist so that it will only be tried as a last resort after all non-blacklisted servers have been attempted. The blacklist will be checked at regular intervals to determine whether a server should be re-instated to availability.
Example
The following example demonstrates the process for creating a round-robin server set that may be used to establish connections to either of two servers. When using the server set to attempt to create a connection, it will first try one of the servers, but will fail over to the other if the first one attempted is not available:
// Create arrays with the addresses and ports of the directory server
// instances.
String[] addresses =
{
server1Address,
server2Address
};
int[] ports =
{
server1Port,
server2Port
};
// Create the server set using the address and port arrays.
RoundRobinServerSet roundRobinSet =
new RoundRobinServerSet(addresses, ports);
// Verify that we can establish a single connection using the server set.
LDAPConnection connection = roundRobinSet.getConnection();
RootDSE rootDSEFromConnection = connection.getRootDSE();
connection.close();
// Verify that we can establish a connection pool using the server set.
SimpleBindRequest bindRequest =
new SimpleBindRequest("uid=pool.user,dc=example,dc=com", "password");
LDAPConnectionPool pool =
new LDAPConnectionPool(roundRobinSet, bindRequest, 10);
RootDSE rootDSEFromPool = pool.getRootDSE();
pool.close();
-
Constructor Summary
ConstructorsConstructorDescriptionRoundRobinServerSet(String[] addresses, int[] ports) Creates a new round robin server set with the specified set of directory server addresses and port numbers.RoundRobinServerSet(String[] addresses, int[] ports, LDAPConnectionOptions connectionOptions) Creates a new round robin server set with the specified set of directory server addresses and port numbers.RoundRobinServerSet(String[] addresses, int[] ports, SocketFactory socketFactory) Creates a new round robin server set with the specified set of directory server addresses and port numbers.RoundRobinServerSet(String[] addresses, int[] ports, SocketFactory socketFactory, LDAPConnectionOptions connectionOptions) Creates a new round robin server set with the specified set of directory server addresses and port numbers.RoundRobinServerSet(String[] addresses, int[] ports, SocketFactory socketFactory, LDAPConnectionOptions connectionOptions, BindRequest bindRequest, PostConnectProcessor postConnectProcessor) Creates a new round robin server set with the specified set of directory server addresses and port numbers.RoundRobinServerSet(String[] addresses, int[] ports, SocketFactory socketFactory, LDAPConnectionOptions connectionOptions, BindRequest bindRequest, PostConnectProcessor postConnectProcessor, long blacklistCheckIntervalMillis) Creates a new round robin server set with the specified set of directory server addresses and port numbers. -
Method Summary
Modifier and TypeMethodDescriptionString[]Retrieves the addresses of the directory servers to which the connections should be established.Retrieves the blacklist manager for this server set.Attempts to establish a connection to one of the directory servers in this server set.getConnection(LDAPConnectionPoolHealthCheck healthCheck) Attempts to establish a connection to one of the directory servers in this server set, using the provided health check to further validate the connection.Retrieves the set of connection options that will be used for underlying connections.int[]getPorts()Retrieves the ports of the directory servers to which the connections should be established.Retrieves the socket factory that will be used to establish connections.booleanIndicates whether connections created by this server set will be authenticated.booleanIndicates whether connections created by this server set will have post-connect processing performed.voidshutDown()Shuts down this server set and frees any resources associated with it.voidtoString(StringBuilder buffer) Appends a string representation of this server set to the provided buffer.Methods inherited from class com.unboundid.ldap.sdk.ServerSet
associateConnectionWithThisServerSet, doBindPostConnectAndHealthCheckProcessing, handleConnectionClosed, toString
-
Constructor Details
-
RoundRobinServerSet
Creates a new round robin server set with the specified set of directory server addresses and port numbers. It will use the default socket factory provided by the JVM to create the underlying sockets.- Parameters:
addresses- The addresses of the directory servers to which the connections should be established. It must not benullor empty.ports- The ports of the directory servers to which the connections should be established. It must not benull, and it must have the same number of elements as theaddressesarray. The order of elements in theaddressesarray must correspond to the order of elements in theportsarray.
-
RoundRobinServerSet
public RoundRobinServerSet(@NotNull String[] addresses, @NotNull int[] ports, @Nullable LDAPConnectionOptions connectionOptions) Creates a new round robin server set with the specified set of directory server addresses and port numbers. It will use the default socket factory provided by the JVM to create the underlying sockets.- Parameters:
addresses- The addresses of the directory servers to which the connections should be established. It must not benullor empty.ports- The ports of the directory servers to which the connections should be established. It must not benull, and it must have the same number of elements as theaddressesarray. The order of elements in theaddressesarray must correspond to the order of elements in theportsarray.connectionOptions- The set of connection options to use for the underlying connections.
-
RoundRobinServerSet
public RoundRobinServerSet(@NotNull String[] addresses, @NotNull int[] ports, @Nullable SocketFactory socketFactory) Creates a new round robin server set with the specified set of directory server addresses and port numbers. It will use the provided socket factory to create the underlying sockets.- Parameters:
addresses- The addresses of the directory servers to which the connections should be established. It must not benullor empty.ports- The ports of the directory servers to which the connections should be established. It must not benull, and it must have the same number of elements as theaddressesarray. The order of elements in theaddressesarray must correspond to the order of elements in theportsarray.socketFactory- The socket factory to use to create the underlying connections.
-
RoundRobinServerSet
public RoundRobinServerSet(@NotNull String[] addresses, @NotNull int[] ports, @Nullable SocketFactory socketFactory, @Nullable LDAPConnectionOptions connectionOptions) Creates a new round robin server set with the specified set of directory server addresses and port numbers. It will use the provided socket factory to create the underlying sockets.- Parameters:
addresses- The addresses of the directory servers to which the connections should be established. It must not benullor empty.ports- The ports of the directory servers to which the connections should be established. It must not benull, and it must have the same number of elements as theaddressesarray. The order of elements in theaddressesarray must correspond to the order of elements in theportsarray.socketFactory- The socket factory to use to create the underlying connections.connectionOptions- The set of connection options to use for the underlying connections.
-
RoundRobinServerSet
public RoundRobinServerSet(@NotNull String[] addresses, @NotNull int[] ports, @Nullable SocketFactory socketFactory, @Nullable LDAPConnectionOptions connectionOptions, @Nullable BindRequest bindRequest, @Nullable PostConnectProcessor postConnectProcessor) Creates a new round robin server set with the specified set of directory server addresses and port numbers. It will use the provided socket factory to create the underlying sockets.- Parameters:
addresses- The addresses of the directory servers to which the connections should be established. It must not benullor empty.ports- The ports of the directory servers to which the connections should be established. It must not benull, and it must have the same number of elements as theaddressesarray. The order of elements in theaddressesarray must correspond to the order of elements in theportsarray.socketFactory- The socket factory to use to create the underlying connections.connectionOptions- The set of connection options to use for the underlying connections.bindRequest- The bind request that should be used to authenticate newly established connections. It may benullif this server set should not perform any authentication.postConnectProcessor- The post-connect processor that should be invoked on newly established connections. It may benullif this server set should not perform any post-connect processing.
-
RoundRobinServerSet
public RoundRobinServerSet(@NotNull String[] addresses, @NotNull int[] ports, @Nullable SocketFactory socketFactory, @Nullable LDAPConnectionOptions connectionOptions, @Nullable BindRequest bindRequest, @Nullable PostConnectProcessor postConnectProcessor, long blacklistCheckIntervalMillis) Creates a new round robin server set with the specified set of directory server addresses and port numbers. It will use the provided socket factory to create the underlying sockets.- Parameters:
addresses- The addresses of the directory servers to which the connections should be established. It must not benullor empty.ports- The ports of the directory servers to which the connections should be established. It must not benull, and it must have the same number of elements as theaddressesarray. The order of elements in theaddressesarray must correspond to the order of elements in theportsarray.socketFactory- The socket factory to use to create the underlying connections.connectionOptions- The set of connection options to use for the underlying connections.bindRequest- The bind request that should be used to authenticate newly established connections. It may benullif this server set should not perform any authentication.postConnectProcessor- The post-connect processor that should be invoked on newly established connections. It may benullif this server set should not perform any post-connect processing.blacklistCheckIntervalMillis- The length of time in milliseconds between checks of servers on the blacklist to determine whether they are once again suitable for use. A value that is less than or equal to zero indicates that no blacklist should be maintained.
-
-
Method Details
-
getAddresses
Retrieves the addresses of the directory servers to which the connections should be established.- Returns:
- The addresses of the directory servers to which the connections should be established.
-
getPorts
Retrieves the ports of the directory servers to which the connections should be established.- Returns:
- The ports of the directory servers to which the connections should be established.
-
getSocketFactory
Retrieves the socket factory that will be used to establish connections.- Returns:
- The socket factory that will be used to establish connections.
-
getConnectionOptions
Retrieves the set of connection options that will be used for underlying connections.- Returns:
- The set of connection options that will be used for underlying connections.
-
includesAuthentication
Indicates whether connections created by this server set will be authenticated.- Overrides:
includesAuthenticationin classServerSet- Returns:
trueif connections created by this server set will be authenticated, orfalseif not.
-
includesPostConnectProcessing
Indicates whether connections created by this server set will have post-connect processing performed.- Overrides:
includesPostConnectProcessingin classServerSet- Returns:
trueif connections created by this server set will have post-connect processing performed, orfalseif not.
-
getConnection
Attempts to establish a connection to one of the directory servers in this server set. The connection that is returned must be established. TheServerSet.includesAuthentication()must return true if and only if the connection will also be authenticated, and theServerSet.includesPostConnectProcessing()method must return true if and only if pre-authentication and post-authentication post-connect processing will have been performed. The caller may determine the server to which the connection is established using theLDAPConnection.getConnectedAddress()andLDAPConnection.getConnectedPort()methods.- Specified by:
getConnectionin classServerSet- Returns:
- An
LDAPConnectionobject that is established to one of the servers in this server set. - Throws:
LDAPException- If it is not possible to establish a connection to any of the servers in this server set.
-
getConnection
@NotNull public LDAPConnection getConnection(@Nullable LDAPConnectionPoolHealthCheck healthCheck) throws LDAPException Attempts to establish a connection to one of the directory servers in this server set, using the provided health check to further validate the connection. The connection that is returned must be established. TheServerSet.includesAuthentication()must return true if and only if the connection will also be authenticated, and theServerSet.includesPostConnectProcessing()method must return true if and only if pre-authentication and post-authentication post-connect processing will have been performed. The caller may determine the server to which the connection is established using theLDAPConnection.getConnectedAddress()andLDAPConnection.getConnectedPort()methods.- Overrides:
getConnectionin classServerSet- Parameters:
healthCheck- The health check to use to verify the health of the newly-created connection. It may benullif no additional health check should be performed. If it is non-nulland this server set performs authentication, then the health check'sensureConnectionValidAfterAuthenticationmethod will be invoked immediately after the bind operation is processed (regardless of whether the bind was successful or not). And regardless of whether this server set performs authentication, the health check'sensureNewConnectionValidmethod must be invoked on the connection to ensure that it is valid immediately before it is returned.- Returns:
- An
LDAPConnectionobject that is established to one of the servers in this server set. - Throws:
LDAPException- If it is not possible to establish a connection to any of the servers in this server set.
-
getBlacklistManager
Retrieves the blacklist manager for this server set.- Returns:
- The blacklist manager for this server set, or
nullif no blacklist will be maintained.
-
shutDown
Shuts down this server set and frees any resources associated with it. -
toString
Appends a string representation of this server set to the provided buffer.
-