public class Monitor
extends java.lang.Object
The Monitor is typically run on a machine that participates in load balancing, request routing or is simply serving as a basis for application level monitoring and does not have a replicated environment. To avoid creating a single point of failure, an application may need to create multiple monitor instances, with each monitor running on a distinct machine.
Applications with direct access to a ReplicatedEnvironment
can use
its
synchronous and asynchronous mechanisms for determining the master node
and group composition changes. The Monitor class is not needed by such
applications.
The Monitor generally learns about changes to group status through events issued by replication group members. In addition, the Monitor maintains a daemon thread which periodically pings members of the group so that the Monitor can proactively discover group status changes that occur when it is down or has lost network connectivity.
The following code excerpt illustrates the typical code sequence used to initiate a Monitor. Exception handling has been omitted to simplify the example.
MonitorConfig monConfig = new MonitorConfig(); monConfig.setGroupName("PlanetaryRepGroup"); monConfig.setNodeName("mon1"); monConfig.setNodeHostPort("monhost1.acme.com:7000"); monConfig.setHelperHosts("mars.acme.com:5000,jupiter.acme.com:5000"); Monitor monitor = new Monitor(monConfig); // If the monitor has not been registered as a member of the group, // register it now. register() returns the current node that is the // master. ReplicationNode currentMaster = monitor.register(); // Start up the listener, so that it can be used to track changes // in the master node, or group composition. It can also be used to help // determine the electable nodes that are currently active and participating // in the replication group. monitor.startListener(new MyChangeListener());
Constructor and Description |
---|
Monitor(MonitorConfig monitorConfig)
Creates a monitor instance.
|
Monitor(ReplicationConfig monitorConfig)
Deprecated.
As of JE 5, replaced by
Monitor(MonitorConfig) |
Modifier and Type | Method and Description |
---|---|
ReplicationGroup |
getGroup()
Returns the current composition of the group.
|
java.lang.String |
getGroupName()
Returns the name of the group associated with the Monitor.
|
java.lang.String |
getMasterNodeName()
Identifies the master of the replication group, resulting from the last
successful election.
|
java.net.InetSocketAddress |
getMonitorSocketAddress()
Returns the socket used by this monitor to listen for group changes
|
java.lang.String |
getNodeName()
Returns the group-wide unique name associated with the monitor
|
ReplicationNode |
register()
Registers the monitor with the group so that it can be kept informed
of the outcome of elections and group membership changes.
|
void |
shutdown()
Release monitor resources and shut down the monitor.
|
void |
startListener(MonitorChangeListener newListener)
Starts the listener so it's actively listening for election results and
broadcasts of replication group changes.
|
@Deprecated public Monitor(ReplicationConfig monitorConfig)
Monitor(MonitorConfig)
ReplicationConfig
. Monitor-specific properties that are not available
in ReplicationConfig use default settings.java.lang.IllegalArgumentException
- if an invalid parameter is specified.public Monitor(MonitorConfig monitorConfig)
monitorConfig
- configuration used by a Monitorjava.lang.IllegalArgumentException
- if an invalid parameter is specified.public java.lang.String getGroupName()
public java.lang.String getNodeName()
public java.net.InetSocketAddress getMonitorSocketAddress()
public ReplicationNode register() throws EnvironmentFailureException
A monitor must be registered at least once in order to be informed of ongoing election results and group changes. Attempts to re-register the same monitor are ignored. Registration, once it has been completed successfully, persists beyond the lifetime of the Monitor instance and does not need to be repeated. Repeated registrations are benign and merely confirm that the current monitor configuration is consistent with earlier registrations of this monitor.
EnvironmentFailureException
- if an unexpected, internal or
environment-wide failure occurs.java.lang.IllegalStateException
- if the monitor has been shutdown, or no
helper sockets were specified at Monitor initialization.public void startListener(MonitorChangeListener newListener) throws DatabaseException, java.io.IOException
register()
should be called before starting the listener.
If the monitor has not been registered, it will not be updated, and its
listener will not be invoked.
Once the registration has been completed, the Monitor can start listening even if none of the other nodes in the group are available. It will be contacted automatically by the other nodes as they come up.
If the group has a Master, invoking startListener
results
in a synchronous callback to the application via the MonitorChangeListener.notify(NewMasterEvent)
method. If there is no
Master at this time, the callback takes place asynchronously, after the
method returns, when a Master is eventually elected.
Starting the listener will start the underlying ping thread, which proactively checks group status for changes that might have been missed when this Monitor instance has lost network connectivity or is down.
newListener
- the listener used to monitor events of interest.EnvironmentFailureException
- if an unexpected, internal or
environment-wide failure occurs.java.io.IOException
- if the monitor socket could not be set upjava.lang.IllegalArgumentException
- if an invalid parameter is specified.java.lang.IllegalStateException
- if the monitor has been shutdown, or a
listener has already been established.DatabaseException
public java.lang.String getMasterNodeName() throws UnknownMasterException
UnknownMasterException
- if the master could not be determined
from the set of helpers made available to the Monitor.EnvironmentFailureException
- if an unexpected, internal or
environment-wide failure occurs.java.lang.IllegalStateException
- if the monitor has been shutdown.public ReplicationGroup getGroup() throws UnknownMasterException, DatabaseException
UnknownMasterException
- if the master could not be determined
from the set of helpers made available to the Monitor.EnvironmentFailureException
- if an unexpected, internal or
environment-wide failure occurs.java.lang.IllegalStateException
- if the monitor has been shutdown.DatabaseException
public void shutdown() throws java.lang.InterruptedException
java.lang.InterruptedException
Copyright (c) 2002, 2017 Oracle and/or its affiliates. All rights reserved.