From b0cf989c6727f18d0c7ee80b4753ef95d60955ea Mon Sep 17 00:00:00 2001
From: neil_a_wilson <neil_a_wilson@localhost>
Date: Mon, 25 Jun 2007 01:46:55 +0000
Subject: [PATCH] Migrate the monitor provider configuration to the admin framework.
---
opends/src/server/org/opends/server/monitors/BackendMonitor.java | 9
opends/src/server/org/opends/server/extensions/TraditionalWorkQueue.java | 2
opends/src/admin/defn/org/opends/server/admin/std/RootConfiguration.xml | 13
opends/src/server/org/opends/server/monitors/SystemInfoMonitorProvider.java | 19
opends/src/server/org/opends/server/replication/server/DbHandler.java | 6
opends/src/server/org/opends/server/monitors/ConnectionHandlerMonitor.java | 14
opends/tests/unit-tests-testng/src/server/org/opends/server/monitors/DatabaseEnvironmentMonitorTestCase.java | 4
opends/src/server/org/opends/server/core/ConnectionHandlerConfigManager.java | 19
opends/tests/unit-tests-testng/src/server/org/opends/server/monitors/InternalSearchMonitorTestCase.java | 2
opends/src/server/org/opends/server/monitors/TraditionalWorkQueueMonitor.java | 22
opends/src/admin/defn/org/opends/server/admin/std/MonitorProviderConfiguration.xml | 91 +++
opends/src/server/org/opends/server/replication/server/ServerHandler.java | 19
opends/src/server/org/opends/server/config/JMXMBean.java | 24
opends/src/server/org/opends/server/monitors/StackTraceMonitorProvider.java | 22
opends/tests/unit-tests-testng/src/server/org/opends/server/monitors/StackTraceMonitorTestCase.java | 2
opends/tests/unit-tests-testng/src/server/org/opends/server/monitors/SystemInfoMonitorTestCase.java | 2
opends/src/server/org/opends/server/replication/plugin/ReplicationMonitor.java | 12
opends/tests/unit-tests-testng/src/server/org/opends/server/monitors/VersionMonitorTestCase.java | 2
opends/src/server/org/opends/server/core/MonitorConfigManager.java | 1057 ++++++++++--------------------------------
opends/tests/unit-tests-testng/src/server/org/opends/server/monitors/TestMonitorProvider.java | 6
opends/src/server/org/opends/server/monitors/DatabaseEnvironmentMonitor.java | 20
opends/src/server/org/opends/server/core/DirectoryServer.java | 24
opends/src/server/org/opends/server/backends/MonitorBackend.java | 9
opends/src/server/org/opends/server/replication/server/ReplicationServer.java | 5
opends/src/server/org/opends/server/monitors/VersionMonitorProvider.java | 19
opends/tests/unit-tests-testng/src/server/org/opends/server/replication/StressTest.java | 8
opends/src/server/org/opends/server/backends/jeb/BackendImpl.java | 3
opends/src/server/org/opends/server/protocols/ldap/LDAPStatistics.java | 18
opends/src/server/org/opends/server/api/MonitorProvider.java | 15
29 files changed, 486 insertions(+), 982 deletions(-)
diff --git a/opends/src/admin/defn/org/opends/server/admin/std/MonitorProviderConfiguration.xml b/opends/src/admin/defn/org/opends/server/admin/std/MonitorProviderConfiguration.xml
new file mode 100644
index 0000000..7466bbb
--- /dev/null
+++ b/opends/src/admin/defn/org/opends/server/admin/std/MonitorProviderConfiguration.xml
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+! CDDL HEADER START
+!
+! The contents of this file are subject to the terms of the
+! Common Development and Distribution License, Version 1.0 only
+! (the "License"). You may not use this file except in compliance
+! with the License.
+!
+! You can obtain a copy of the license at
+! trunk/opends/resource/legal-notices/OpenDS.LICENSE
+! or https://OpenDS.dev.java.net/OpenDS.LICENSE.
+! See the License for the specific language governing permissions
+! and limitations under the License.
+!
+! When distributing Covered Code, include this CDDL HEADER in each
+! file and include the License file at
+! trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable,
+! add the following below this CDDL HEADER, with the fields enclosed
+! by brackets "[]" replaced with your own identifying information:
+! Portions Copyright [yyyy] [name of copyright owner]
+!
+! CDDL HEADER END
+!
+!
+! Portions Copyright 2007 Sun Microsystems, Inc.
+! -->
+
+<adm:managed-object name="monitor-provider"
+plural-name="monitor-providers"
+package="org.opends.server.admin.std" abstract="false"
+xmlns:adm="http://www.opends.org/admin"
+xmlns:ldap="http://www.opends.org/admin-ldap">
+
+ <adm:synopsis>
+ <adm:user-friendly-plural-name />
+ may be used to provide information about the state of the server or one of
+ its components. This information may be useful for monitoring and/or
+ troubleshooting purposes.
+ </adm:synopsis>
+
+ <adm:tag name="core"/>
+
+ <adm:profile name="ldap">
+ <ldap:object-class>
+ <ldap:oid>1.3.6.1.4.1.26027.1.2.34</ldap:oid>
+ <ldap:name>ds-cfg-monitor-provider</ldap:name>
+ <ldap:superior>top</ldap:superior>
+ </ldap:object-class>
+ </adm:profile>
+
+ <adm:property name="enabled" mandatory="true">
+ <adm:synopsis>
+ Indicate whether the
+ <adm:user-friendly-name />
+ is enabled for use.
+ </adm:synopsis>
+ <adm:syntax>
+ <adm:boolean />
+ </adm:syntax>
+ <adm:profile name="ldap">
+ <ldap:attribute>
+ <ldap:oid>1.3.6.1.4.1.26027.1.1.70</ldap:oid>
+ <ldap:name>ds-cfg-monitor-provider-enabled</ldap:name>
+ </ldap:attribute>
+ </adm:profile>
+ </adm:property>
+
+ <adm:property name="monitor-class" mandatory="true">
+ <adm:synopsis>
+ The fully-qualified name of the Java class that provides the
+ <adm:user-friendly-name />
+ implementation.
+ </adm:synopsis>
+ <adm:syntax>
+ <adm:java-class>
+ <adm:instance-of>
+ org.opends.server.api.MonitorProvider
+ </adm:instance-of>
+ </adm:java-class>
+ </adm:syntax>
+ <adm:profile name="ldap">
+ <ldap:attribute>
+ <ldap:oid>1.3.6.1.4.1.26027.1.1.69</ldap:oid>
+ <ldap:name>ds-cfg-monitor-provider-class</ldap:name>
+ </ldap:attribute>
+ </adm:profile>
+ </adm:property>
+
+</adm:managed-object>
+
diff --git a/opends/src/admin/defn/org/opends/server/admin/std/RootConfiguration.xml b/opends/src/admin/defn/org/opends/server/admin/std/RootConfiguration.xml
index e26bf52..4e87ace 100644
--- a/opends/src/admin/defn/org/opends/server/admin/std/RootConfiguration.xml
+++ b/opends/src/admin/defn/org/opends/server/admin/std/RootConfiguration.xml
@@ -347,6 +347,19 @@
</cli:relation>
</adm:profile>
</adm:relation>
+ <adm:relation name="monitor-provider">
+ <adm:one-to-many />
+ <adm:profile name="ldap">
+ <ldap:rdn-sequence>
+ cn=Monitor Providers,cn=config
+ </ldap:rdn-sequence>
+ </adm:profile>
+ <adm:profile name="cli">
+ <cli:relation>
+ <cli:default-property name="enabled" />
+ </cli:relation>
+ </adm:profile>
+ </adm:relation>
<adm:product-name>OpenDS Directory Server</adm:product-name>
<adm:tag-definition name="logging">
<adm:synopsis>Logging</adm:synopsis>
diff --git a/opends/src/server/org/opends/server/api/MonitorProvider.java b/opends/src/server/org/opends/server/api/MonitorProvider.java
index e7c198c..e74acfe 100644
--- a/opends/src/server/org/opends/server/api/MonitorProvider.java
+++ b/opends/src/server/org/opends/server/api/MonitorProvider.java
@@ -30,7 +30,7 @@
import java.util.List;
-import org.opends.server.config.ConfigEntry;
+import org.opends.server.admin.std.server.MonitorProviderCfg;
import org.opends.server.config.ConfigException;
import org.opends.server.types.Attribute;
import org.opends.server.types.DebugLogLevel;
@@ -49,8 +49,11 @@
* implemented by a Directory Server module that can provide usage,
* performance, availability, or other kinds of monitor information
* to clients.
+ *
+ * @param <T> The type of configuration handled by this monitor
+ * provider.
*/
-public abstract class MonitorProvider
+public abstract class MonitorProvider<T extends MonitorProviderCfg>
extends DirectoryThread
{
/**
@@ -89,9 +92,8 @@
* Initializes this monitor provider based on the information in the
* provided configuration entry.
*
- * @param configEntry The configuration entry that contains the
- * information to use to initialize this
- * monitor provider.
+ * @param configuration The configuration to use to initialize
+ * this monitor provider.
*
* @throws ConfigException If an unrecoverable problem arises in
* the process of performing the
@@ -102,8 +104,7 @@
* related to the server
* configuration.
*/
- public abstract void initializeMonitorProvider(
- ConfigEntry configEntry)
+ public abstract void initializeMonitorProvider(T configuration)
throws ConfigException, InitializationException;
diff --git a/opends/src/server/org/opends/server/backends/MonitorBackend.java b/opends/src/server/org/opends/server/backends/MonitorBackend.java
index 4b04068..85a8eea 100644
--- a/opends/src/server/org/opends/server/backends/MonitorBackend.java
+++ b/opends/src/server/org/opends/server/backends/MonitorBackend.java
@@ -35,6 +35,7 @@
import java.util.LinkedHashSet;
import java.util.List;
+import org.opends.server.admin.std.server.MonitorProviderCfg;
import org.opends.server.api.Backend;
import org.opends.server.api.MonitorProvider;
import org.opends.server.config.ConfigEntry;
@@ -425,7 +426,7 @@
// Get the RDN value and see if it matches the instance name for one of
// the directory server monitor providers.
String rdnValue = entryRDN.getAttributeValue(0).getStringValue();
- MonitorProvider monitorProvider =
+ MonitorProvider<? extends MonitorProviderCfg> monitorProvider =
DirectoryServer.getMonitorProvider(rdnValue.toLowerCase());
if (monitorProvider == null)
{
@@ -664,7 +665,9 @@
* @return The monitor entry generated from the information in the provided
* monitor provider.
*/
- private Entry getMonitorEntry(DN entryDN, MonitorProvider monitorProvider)
+ private Entry getMonitorEntry(DN entryDN,
+ MonitorProvider<? extends MonitorProviderCfg>
+ monitorProvider)
{
HashMap<ObjectClass,String> monitorClasses =
new LinkedHashMap<ObjectClass,String>(3);
@@ -897,7 +900,7 @@
// Iterate through all of the monitor providers defined in the server.
// Get an entry for each and compare it against the filter.
- for (MonitorProvider monitorProvider :
+ for (MonitorProvider<? extends MonitorProviderCfg> monitorProvider :
DirectoryServer.getMonitorProviders().values())
{
DN providerDN = DirectoryServer.getMonitorProviderDN(monitorProvider);
diff --git a/opends/src/server/org/opends/server/backends/jeb/BackendImpl.java b/opends/src/server/org/opends/server/backends/jeb/BackendImpl.java
index 29ef49a..2138997 100644
--- a/opends/src/server/org/opends/server/backends/jeb/BackendImpl.java
+++ b/opends/src/server/org/opends/server/backends/jeb/BackendImpl.java
@@ -44,6 +44,7 @@
import com.sleepycat.je.DatabaseException;
import com.sleepycat.je.EnvironmentConfig;
+import org.opends.server.admin.std.server.MonitorProviderCfg;
import org.opends.server.api.Backend;
import org.opends.server.api.MonitorProvider;
import org.opends.server.config.ConfigException;
@@ -355,7 +356,7 @@
}
// Register a monitor provider for the environment.
- MonitorProvider monitorProvider =
+ MonitorProvider<? extends MonitorProviderCfg> monitorProvider =
rootContainer.getMonitorProvider();
monitorProviders.add(monitorProvider);
DirectoryServer.registerMonitorProvider(monitorProvider);
diff --git a/opends/src/server/org/opends/server/config/JMXMBean.java b/opends/src/server/org/opends/server/config/JMXMBean.java
index a77188b..25a8f44 100644
--- a/opends/src/server/org/opends/server/config/JMXMBean.java
+++ b/opends/src/server/org/opends/server/config/JMXMBean.java
@@ -48,6 +48,7 @@
import javax.management.MBeanServer;
import javax.management.ObjectName;
+import org.opends.server.admin.std.server.MonitorProviderCfg;
import org.opends.server.api.AlertGenerator;
import org.opends.server.api.ConfigurableComponent;
import org.opends.server.api.DirectoryServerMBean;
@@ -118,7 +119,8 @@
private CopyOnWriteArrayList<InvokableComponent> invokableComponents;
// The set of monitor providers for this MBean.
- private CopyOnWriteArrayList<MonitorProvider> monitorProviders;
+ private CopyOnWriteArrayList<MonitorProvider<? extends MonitorProviderCfg>>
+ monitorProviders;
// The DN of the configuration entry with which this MBean is associated.
private DN configEntryDN;
@@ -206,7 +208,9 @@
configurableComponents =
new CopyOnWriteArrayList<ConfigurableComponent>();
invokableComponents = new CopyOnWriteArrayList<InvokableComponent>();
- monitorProviders = new CopyOnWriteArrayList<MonitorProvider>();
+ monitorProviders =
+ new CopyOnWriteArrayList<MonitorProvider<
+ ? extends MonitorProviderCfg>>();
MBeanServer mBeanServer = DirectoryServer.getJMXMBeanServer();
if (mBeanServer != null)
@@ -424,7 +428,8 @@
*
* @return The set of monitor providers associated with this JMX MBean.
*/
- public CopyOnWriteArrayList<MonitorProvider> getMonitorProviders()
+ public CopyOnWriteArrayList<MonitorProvider<? extends MonitorProviderCfg>>
+ getMonitorProviders()
{
return monitorProviders;
}
@@ -438,7 +443,8 @@
* @param component The component to add to the set of monitor providers
* for this JMX MBean.
*/
- public void addMonitorProvider(MonitorProvider component)
+ public void addMonitorProvider(MonitorProvider<? extends MonitorProviderCfg>
+ component)
{
synchronized (monitorProviders)
{
@@ -548,7 +554,8 @@
{
attrType = DirectoryServer.getDefaultAttributeType(name);
}
- for (MonitorProvider monitor : monitorProviders)
+ for (MonitorProvider<? extends MonitorProviderCfg> monitor :
+ monitorProviders)
{
for (org.opends.server.types.Attribute a : monitor.getMonitorData())
{
@@ -912,7 +919,9 @@
attrType = DirectoryServer.getDefaultAttributeType(name);
}
- monitorLoop: for (MonitorProvider monitor : monitorProviders)
+monitorLoop:
+ for (MonitorProvider<? extends MonitorProviderCfg> monitor :
+ monitorProviders)
{
for (org.opends.server.types.Attribute a : monitor.getMonitorData())
{
@@ -1168,7 +1177,8 @@
}
}
- for (MonitorProvider monitor : monitorProviders)
+ for (MonitorProvider<? extends MonitorProviderCfg> monitor :
+ monitorProviders)
{
for (org.opends.server.types.Attribute a : monitor.getMonitorData())
{
diff --git a/opends/src/server/org/opends/server/core/ConnectionHandlerConfigManager.java b/opends/src/server/org/opends/server/core/ConnectionHandlerConfigManager.java
index aaef4f4..a47e580 100644
--- a/opends/src/server/org/opends/server/core/ConnectionHandlerConfigManager.java
+++ b/opends/src/server/org/opends/server/core/ConnectionHandlerConfigManager.java
@@ -110,7 +110,7 @@
DN dn = configuration.dn();
try {
// Attempt to start the connection handler.
- ConnectionHandler connectionHandler =
+ ConnectionHandler<? extends ConnectionHandlerCfg> connectionHandler =
getConnectionHandler(configuration);
connectionHandler.start();
@@ -179,8 +179,9 @@
// Register the connection handler with the Directory
// Server.
- DirectoryServer
- .registerConnectionHandler(connectionHandler);
+ DirectoryServer.registerConnectionHandler(
+ (ConnectionHandler<? extends ConnectionHandlerCfg>)
+ connectionHandler);
} catch (ConfigException e) {
if (debugEnabled())
{
@@ -305,7 +306,8 @@
// because we're still in the startup process. Therefore, we
// will not do so and allow the server to start it at the very
// end of the initialization process.
- ConnectionHandler connectionHandler = getConnectionHandler(config);
+ ConnectionHandler<? extends ConnectionHandlerCfg> connectionHandler =
+ getConnectionHandler(config);
// Put this connection handler in the hash so that we will be
// able to find it if it is altered.
@@ -366,8 +368,10 @@
// Load and initialize the connection handler named in the config.
- private ConnectionHandler getConnectionHandler(
- ConnectionHandlerCfg config) throws ConfigException {
+ private ConnectionHandler<? extends ConnectionHandlerCfg>
+ getConnectionHandler(ConnectionHandlerCfg config)
+ throws ConfigException
+ {
String className = config.getJavaImplementationClass();
ConnectionHandlerCfgDefn d =
ConnectionHandlerCfgDefn.getInstance();
@@ -419,7 +423,8 @@
}
// The connection handler has been successfully initialized.
- return connectionHandler;
+ return (ConnectionHandler<? extends ConnectionHandlerCfg>)
+ connectionHandler;
}
diff --git a/opends/src/server/org/opends/server/core/DirectoryServer.java b/opends/src/server/org/opends/server/core/DirectoryServer.java
index 88a57bd..3f9b380 100644
--- a/opends/src/server/org/opends/server/core/DirectoryServer.java
+++ b/opends/src/server/org/opends/server/core/DirectoryServer.java
@@ -53,7 +53,9 @@
import org.opends.server.admin.ClassLoaderProvider;
import org.opends.server.admin.server.ServerManagementContext;
import org.opends.server.admin.std.server.AttributeSyntaxCfg;
+import org.opends.server.admin.std.server.ConnectionHandlerCfg;
import org.opends.server.admin.std.server.DirectoryStringAttributeSyntaxCfg;
+import org.opends.server.admin.std.server.MonitorProviderCfg;
import org.opends.server.admin.std.server.PasswordValidatorCfg;
import org.opends.server.admin.std.server.SynchronizationProviderCfg;
import org.opends.server.admin.std.server.RootDSEBackendCfg;
@@ -312,7 +314,9 @@
// The set of monitor providers registered with the Directory Server, as a
// mapping between the monitor name and the corresponding implementation.
- private ConcurrentHashMap<String,MonitorProvider> monitorProviders;
+ private ConcurrentHashMap<String,
+ MonitorProvider<? extends MonitorProviderCfg>>
+ monitorProviders;
// The set of password storage schemes defined in the server (mapped between
// the lowercase scheme name and the storage scheme) that support the
@@ -668,7 +672,8 @@
directoryServer.defaultPasswordPolicyDN = null;
directoryServer.defaultPasswordPolicyConfig = null;
directoryServer.monitorProviders =
- new ConcurrentHashMap<String,MonitorProvider>();
+ new ConcurrentHashMap<String,
+ MonitorProvider<? extends MonitorProviderCfg>>();
directoryServer.backends = new TreeMap<String,Backend>();
directoryServer.offlineBackendsStateIDs =
new ConcurrentHashMap<String,Long>();
@@ -5232,7 +5237,9 @@
* @return The set of monitor providers that have been registered with the
* Directory Server.
*/
- public static ConcurrentHashMap<String,MonitorProvider> getMonitorProviders()
+ public static ConcurrentHashMap<String,
+ MonitorProvider<? extends MonitorProviderCfg>>
+ getMonitorProviders()
{
return directoryServer.monitorProviders;
}
@@ -5248,7 +5255,8 @@
* @return The requested resource monitor, or <CODE>null</CODE> if none
* exists with the specified name.
*/
- public static MonitorProvider getMonitorProvider(String lowerName)
+ public static MonitorProvider<? extends MonitorProviderCfg>
+ getMonitorProvider(String lowerName)
{
return directoryServer.monitorProviders.get(lowerName);
}
@@ -5263,7 +5271,9 @@
* @param monitorProvider The monitor provider to register with the
* Directory Server.
*/
- public static void registerMonitorProvider(MonitorProvider monitorProvider)
+ public static void registerMonitorProvider(
+ MonitorProvider<? extends MonitorProviderCfg>
+ monitorProvider)
{
String lowerName = toLowerCase(monitorProvider.getMonitorInstanceName());
directoryServer.monitorProviders.put(lowerName, monitorProvider);
@@ -7054,7 +7064,9 @@
* @param handler The connection handler to register with the Directory
* Server.
*/
- public static void registerConnectionHandler(ConnectionHandler handler)
+ public static void registerConnectionHandler(
+ ConnectionHandler<? extends ConnectionHandlerCfg>
+ handler)
{
synchronized (directoryServer.connectionHandlers)
{
diff --git a/opends/src/server/org/opends/server/core/MonitorConfigManager.java b/opends/src/server/org/opends/server/core/MonitorConfigManager.java
index 807ac4d..25e5abf 100644
--- a/opends/src/server/org/opends/server/core/MonitorConfigManager.java
+++ b/opends/src/server/org/opends/server/core/MonitorConfigManager.java
@@ -28,22 +28,21 @@
+import java.lang.reflect.Method;
import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.LinkedList;
import java.util.List;
import java.util.concurrent.ConcurrentHashMap;
-import org.opends.server.api.ConfigAddListener;
-import org.opends.server.api.ConfigChangeListener;
-import org.opends.server.api.ConfigDeleteListener;
-import org.opends.server.api.ConfigHandler;
-import org.opends.server.api.ConfigurableComponent;
+import org.opends.server.admin.ClassPropertyDefinition;
+import org.opends.server.admin.server.ConfigurationAddListener;
+import org.opends.server.admin.server.ConfigurationChangeListener;
+import org.opends.server.admin.server.ConfigurationDeleteListener;
+import org.opends.server.admin.std.meta.MonitorProviderCfgDefn;
+import org.opends.server.admin.std.server.MonitorProviderCfg;
+import org.opends.server.admin.std.server.RootCfg;
+import org.opends.server.admin.server.ServerManagementContext;
import org.opends.server.api.MonitorProvider;
-import org.opends.server.config.BooleanConfigAttribute;
-import org.opends.server.config.ConfigEntry;
import org.opends.server.config.ConfigException;
-import org.opends.server.config.StringConfigAttribute;
import org.opends.server.types.ConfigChangeResult;
import org.opends.server.types.DN;
import org.opends.server.types.ErrorLogCategory;
@@ -51,52 +50,37 @@
import org.opends.server.types.InitializationException;
import org.opends.server.types.ResultCode;
-import static org.opends.server.config.ConfigConstants.*;
-import org.opends.server.types.DebugLogLevel;
import static org.opends.server.loggers.ErrorLogger.*;
-import static org.opends.server.loggers.debug.DebugLogger.*;
-import org.opends.server.loggers.debug.DebugTracer;
import static org.opends.server.messages.ConfigMessages.*;
import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.util.ServerConstants.*;
import static org.opends.server.util.StaticUtils.*;
/**
* This class defines a utility that will be used to manage the set of monitor
- * providers defined in the Directory Server. It will initialize the monitors
- * when the server starts, and then will manage any additions, removals, or
- * modifications of any monitor providers while the server is running.
+ * providers defined in the Directory Server. It will initialize the monitor
+ * providers when the server starts, and then will manage any additions,
+ * removals, or modifications to any providers while the server is running.
*/
public class MonitorConfigManager
- implements ConfigChangeListener, ConfigAddListener, ConfigDeleteListener
+ implements ConfigurationChangeListener<MonitorProviderCfg>,
+ ConfigurationAddListener<MonitorProviderCfg>,
+ ConfigurationDeleteListener<MonitorProviderCfg>
+
{
- /**
- * The tracer object for the debug logger.
- */
- private static final DebugTracer TRACER = getTracer();
-
-
-
-
- // A mapping between the DNs of the monitor entries and the associated monitor
- // monitor providers.
- private ConcurrentHashMap<DN,MonitorProvider> monitorProviders;
-
- // The configuration handler for the Directory Server.
- private ConfigHandler configHandler;
+ // A mapping between the DNs of the config entries and the associated monitor
+ // providers.
+ private ConcurrentHashMap<DN,MonitorProvider> monitors;
/**
- * Creates a new instance of this monitor config manager.
+ * Creates a new instance of this monitor provider config manager.
*/
public MonitorConfigManager()
{
- configHandler = DirectoryServer.getConfigHandler();
-
- monitorProviders = new ConcurrentHashMap<DN,MonitorProvider>();
+ monitors = new ConcurrentHashMap<DN,MonitorProvider>();
}
@@ -106,857 +90,324 @@
* configuration. This should only be called at Directory Server startup.
*
* @throws ConfigException If a configuration problem causes the monitor
- * initialization process to fail.
+ * provider initialization process to fail.
*
* @throws InitializationException If a problem occurs while initializing
- * the monitors that is not related to the
- * server configuration.
+ * the monitor providers that is not related
+ * to the server configuration.
*/
public void initializeMonitorProviders()
throws ConfigException, InitializationException
{
- // First, get the monitor configuration base entry.
- ConfigEntry monitorBaseEntry;
- try
+ // Get the root configuration object.
+ ServerManagementContext managementContext =
+ ServerManagementContext.getInstance();
+ RootCfg rootConfiguration =
+ managementContext.getRootConfiguration();
+
+
+ // Register as an add and delete listener with the root configuration so we
+ // can be notified if any monitor provider entries are added or removed.
+ rootConfiguration.addMonitorProviderAddListener(this);
+ rootConfiguration.addMonitorProviderDeleteListener(this);
+
+
+ //Initialize the existing monitor providers.
+ for (String name : rootConfiguration.listMonitorProviders())
{
- DN monitorBaseDN = DN.decode(DN_MONITOR_CONFIG_BASE);
- monitorBaseEntry = configHandler.getConfigEntry(monitorBaseDN);
- }
- catch (Exception e)
- {
- if (debugEnabled())
+ MonitorProviderCfg monitorConfig =
+ rootConfiguration.getMonitorProvider(name);
+ monitorConfig.addChangeListener(this);
+
+ if (monitorConfig.isEnabled())
{
- TRACER.debugCaught(DebugLogLevel.ERROR, e);
- }
-
- int msgID = MSGID_CONFIG_MONITOR_CANNOT_GET_BASE;
- String message = getMessage(msgID, String.valueOf(e));
- throw new ConfigException(msgID, message, e);
- }
-
- if (monitorBaseEntry == null)
- {
- // The monitor base entry does not exist. This is not acceptable, so
- // throw an exception.
- int msgID = MSGID_CONFIG_MONITOR_BASE_DOES_NOT_EXIST;
- String message = getMessage(msgID);
- throw new ConfigException(msgID, message);
- }
-
-
- // Register add and delete listeners with the monitor base entry. We don't
- // care about modifications to it.
- monitorBaseEntry.registerAddListener(this);
- monitorBaseEntry.registerDeleteListener(this);
-
-
- // See if the monitor base has any children. If not, then we don't need to
- // do anything else.
- if (! monitorBaseEntry.hasChildren())
- {
- return;
- }
-
-
- // Iterate through the child entries and process them as monitor
- // configuration entries.
- for (ConfigEntry childEntry : monitorBaseEntry.getChildren().values())
- {
- childEntry.registerChangeListener(this);
-
- StringBuilder unacceptableReason = new StringBuilder();
- if (! configAddIsAcceptable(childEntry, unacceptableReason))
- {
- logError(ErrorLogCategory.CONFIGURATION, ErrorLogSeverity.SEVERE_ERROR,
- MSGID_CONFIG_MONITOR_ENTRY_UNACCEPTABLE,
- childEntry.getDN().toString(), unacceptableReason.toString());
- continue;
- }
-
- try
- {
- ConfigChangeResult result = applyConfigurationAdd(childEntry);
- if (result.getResultCode() != ResultCode.SUCCESS)
+ String className = monitorConfig.getMonitorClass();
+ try
{
- StringBuilder buffer = new StringBuilder();
-
- List<String> resultMessages = result.getMessages();
- if ((resultMessages == null) || (resultMessages.isEmpty()))
- {
- buffer.append(getMessage(MSGID_CONFIG_UNKNOWN_UNACCEPTABLE_REASON));
- }
- else
- {
- Iterator<String> iterator = resultMessages.iterator();
-
- buffer.append(iterator.next());
- while (iterator.hasNext())
- {
- buffer.append(EOL);
- buffer.append(iterator.next());
- }
- }
-
+ MonitorProvider<? extends MonitorProviderCfg> monitor =
+ loadMonitor(className, monitorConfig);
+ monitors.put(monitorConfig.dn(), monitor);
+ DirectoryServer.registerMonitorProvider(monitor);
+ }
+ catch (InitializationException ie)
+ {
logError(ErrorLogCategory.CONFIGURATION,
ErrorLogSeverity.SEVERE_ERROR,
- MSGID_CONFIG_MONITOR_CANNOT_CREATE_MONITOR,
- childEntry.getDN().toString(), buffer.toString());
+ ie.getMessage(), ie.getMessageID());
+ continue;
}
}
- catch (Exception e)
- {
- logError(ErrorLogCategory.CONFIGURATION, ErrorLogSeverity.SEVERE_ERROR,
- MSGID_CONFIG_MONITOR_CANNOT_CREATE_MONITOR,
- childEntry.getDN().toString(), String.valueOf(e));
- }
}
}
/**
- * Indicates whether the configuration entry that will result from a proposed
- * modification is acceptable to this change listener.
- *
- * @param configEntry The configuration entry that will result from
- * the requested update.
- * @param unacceptableReason A buffer to which this method can append a
- * human-readable message explaining why the
- * proposed change is not acceptable.
- *
- * @return <CODE>true</CODE> if the proposed entry contains an acceptable
- * configuration, or <CODE>false</CODE> if it does not.
+ * {@inheritDoc}
*/
- public boolean configChangeIsAcceptable(ConfigEntry configEntry,
- StringBuilder unacceptableReason)
+ public boolean isConfigurationAddAcceptable(
+ MonitorProviderCfg configuration,
+ List<String> unacceptableReasons)
{
- // Make sure that the entry has an appropriate objectclass for a monitor
- // provider.
- if (! configEntry.hasObjectClass(OC_MONITOR_PROVIDER))
+ if (configuration.isEnabled())
{
- int msgID = MSGID_CONFIG_MONITOR_INVALID_OBJECTCLASS;
- String message = getMessage(msgID, configEntry.getDN().toString());
- unacceptableReason.append(message);
- return false;
- }
-
-
- // Make sure that the entry specifies the monitor class name.
- StringConfigAttribute classNameAttr;
- try
- {
- StringConfigAttribute classStub =
- new StringConfigAttribute(ATTR_MONITOR_CLASS,
- getMessage(MSGID_CONFIG_MONITOR_DESCRIPTION_CLASS_NAME),
- true, false, true);
- classNameAttr = (StringConfigAttribute)
- configEntry.getConfigAttribute(classStub);
-
- if (classNameAttr == null)
+ // Get the name of the class and make sure we can instantiate it as a
+ // monitor provider.
+ String className = configuration.getMonitorClass();
+ try
{
- int msgID = MSGID_CONFIG_MONITOR_NO_CLASS_NAME;
- String message = getMessage(msgID, configEntry.getDN().toString());
- unacceptableReason.append(message);
+ loadMonitor(className, null);
+ }
+ catch (InitializationException ie)
+ {
+ unacceptableReasons.add(ie.getMessage());
return false;
}
}
- catch (Exception e)
- {
- if (debugEnabled())
- {
- TRACER.debugCaught(DebugLogLevel.ERROR, e);
- }
- int msgID = MSGID_CONFIG_MONITOR_INVALID_CLASS_NAME;
- String message = getMessage(msgID, configEntry.getDN().toString(),
- String.valueOf(e));
- unacceptableReason.append(message);
- return false;
- }
-
- Class monitorClass;
- try
- {
- monitorClass = DirectoryServer.loadClass(classNameAttr.pendingValue());
- }
- catch (Exception e)
- {
- if (debugEnabled())
- {
- TRACER.debugCaught(DebugLogLevel.ERROR, e);
- }
-
- int msgID = MSGID_CONFIG_MONITOR_INVALID_CLASS_NAME;
- String message = getMessage(msgID, configEntry.getDN().toString(),
- String.valueOf(e));
- unacceptableReason.append(message);
- return false;
- }
-
- try
- {
- MonitorProvider monitor = (MonitorProvider) monitorClass.newInstance();
- }
- catch(Exception e)
- {
- if (debugEnabled())
- {
- TRACER.debugCaught(DebugLogLevel.ERROR, e);
- }
-
- int msgID = MSGID_CONFIG_MONITOR_INVALID_CLASS;
- String message = getMessage(msgID, monitorClass.getName(),
- String.valueOf(configEntry.getDN()),
- String.valueOf(e));
- unacceptableReason.append(message);
- return false;
- }
-
-
- // See if this monitor should be enabled.
- BooleanConfigAttribute enabledAttr;
- try
- {
- BooleanConfigAttribute enabledStub =
- new BooleanConfigAttribute(ATTR_MONITOR_ENABLED,
- getMessage(MSGID_CONFIG_MONITOR_DESCRIPTION_ENABLED),
- false);
- enabledAttr = (BooleanConfigAttribute)
- configEntry.getConfigAttribute(enabledStub);
-
- if (enabledAttr == null)
- {
- int msgID = MSGID_CONFIG_MONITOR_NO_ENABLED_ATTR;
- String message = getMessage(msgID, configEntry.getDN().toString());
- unacceptableReason.append(message);
- return false;
- }
- }
- catch (Exception e)
- {
- if (debugEnabled())
- {
- TRACER.debugCaught(DebugLogLevel.ERROR, e);
- }
-
- int msgID = MSGID_CONFIG_MONITOR_INVALID_ENABLED_VALUE;
- String message = getMessage(msgID, configEntry.getDN().toString(),
- String.valueOf(e));
- unacceptableReason.append(message);
- return false;
- }
-
-
- // If we've gotten here then the monitor entry appears to be acceptable.
+ // If we've gotten here, then it's fine.
return true;
}
/**
- * Attempts to apply a new configuration to this Directory Server component
- * based on the provided changed entry.
- *
- * @param configEntry The configuration entry that containing the updated
- * configuration for this component.
- *
- * @return Information about the result of processing the configuration
- * change.
+ * {@inheritDoc}
*/
- public ConfigChangeResult applyConfigurationChange(ConfigEntry configEntry)
+ public ConfigChangeResult applyConfigurationAdd(
+ MonitorProviderCfg configuration)
{
- DN configEntryDN = configEntry.getDN();
ResultCode resultCode = ResultCode.SUCCESS;
boolean adminActionRequired = false;
ArrayList<String> messages = new ArrayList<String>();
+ configuration.addChangeListener(this);
- // Make sure that the entry has an appropriate objectclass for a monitor
- // provider.
- if (! configEntry.hasObjectClass(OC_MONITOR_PROVIDER))
+ if (! configuration.isEnabled())
{
- int msgID = MSGID_CONFIG_MONITOR_INVALID_OBJECTCLASS;
- messages.add(getMessage(msgID, String.valueOf(configEntryDN)));
- resultCode = ResultCode.UNWILLING_TO_PERFORM;
return new ConfigChangeResult(resultCode, adminActionRequired, messages);
}
+ MonitorProvider<? extends MonitorProviderCfg> monitor = null;
- // Get the corresponding monitor provider if it is active.
- MonitorProvider monitor = monitorProviders.get(configEntryDN);
-
-
- // See if this monitor should be enabled or disabled.
- boolean needsEnabled = false;
- BooleanConfigAttribute enabledAttr;
+ // Get the name of the class and make sure we can instantiate it as a
+ // monitor provider.
+ String className = configuration.getMonitorClass();
try
{
- BooleanConfigAttribute enabledStub =
- new BooleanConfigAttribute(ATTR_MONITOR_ENABLED,
- getMessage(MSGID_CONFIG_MONITOR_DESCRIPTION_ENABLED),
- false);
- enabledAttr = (BooleanConfigAttribute)
- configEntry.getConfigAttribute(enabledStub);
-
- if (enabledAttr == null)
- {
- int msgID = MSGID_CONFIG_MONITOR_NO_ENABLED_ATTR;
- messages.add(getMessage(msgID, String.valueOf(configEntryDN)));
- resultCode = ResultCode.UNWILLING_TO_PERFORM;
- return new ConfigChangeResult(resultCode, adminActionRequired,
- messages);
- }
-
- if (enabledAttr.activeValue())
- {
- if (monitor == null)
- {
- needsEnabled = true;
- }
- else
- {
- // The monitor is already active, so no action is required.
- }
- }
- else
- {
- if (monitor == null)
- {
- // The monitor provider is already disabled, so no action is required
- // and we can short-circuit out of this processing.
- return new ConfigChangeResult(resultCode, adminActionRequired,
- messages);
- }
- else
- {
- // The monitor is active, so it needs to be disabled. Do this and
- // return that we were successful.
- monitorProviders.remove(configEntryDN);
- monitor.finalizeMonitorProvider();
- return new ConfigChangeResult(resultCode, adminActionRequired,
- messages);
- }
- }
+ monitor = loadMonitor(className, configuration);
}
- catch (Exception e)
+ catch (InitializationException ie)
{
- if (debugEnabled())
+ if (resultCode == ResultCode.SUCCESS)
{
- TRACER.debugCaught(DebugLogLevel.ERROR, e);
- }
-
- int msgID = MSGID_CONFIG_MONITOR_INVALID_ENABLED_VALUE;
- messages.add(getMessage(msgID, String.valueOf(configEntryDN),
- String.valueOf(e)));
- resultCode = DirectoryServer.getServerErrorResultCode();
- return new ConfigChangeResult(resultCode, adminActionRequired, messages);
- }
-
-
- // Make sure that the entry specifies the monitor class name. If it has
- // changed, then we will not try to dynamically apply it.
- String className;
- try
- {
- StringConfigAttribute classStub =
- new StringConfigAttribute(ATTR_MONITOR_CLASS,
- getMessage(MSGID_CONFIG_MONITOR_DESCRIPTION_CLASS_NAME),
- true, false, true);
- StringConfigAttribute classNameAttr =
- (StringConfigAttribute) configEntry.getConfigAttribute(classStub);
-
- if (classNameAttr == null)
- {
- int msgID = MSGID_CONFIG_MONITOR_NO_CLASS_NAME;
- messages.add(getMessage(msgID, String.valueOf(configEntryDN)));
- resultCode = ResultCode.OBJECTCLASS_VIOLATION;
- return new ConfigChangeResult(resultCode, adminActionRequired,
- messages);
- }
-
- className = classNameAttr.pendingValue();
- }
- catch (Exception e)
- {
- if (debugEnabled())
- {
- TRACER.debugCaught(DebugLogLevel.ERROR, e);
- }
-
- int msgID = MSGID_CONFIG_MONITOR_INVALID_CLASS_NAME;
- messages.add(getMessage(msgID, String.valueOf(configEntryDN),
- String.valueOf(e)));
- resultCode = DirectoryServer.getServerErrorResultCode();
- return new ConfigChangeResult(resultCode, adminActionRequired, messages);
- }
-
-
- boolean classChanged = false;
- String oldClassName = null;
- if (monitor != null)
- {
- oldClassName = monitor.getClass().getName();
- classChanged = (! className.equals(oldClassName));
- }
-
-
- if (classChanged)
- {
- // This will not be applied dynamically. Add a message to the response
- // and indicate that admin action is required.
- adminActionRequired = true;
- messages.add(getMessage(MSGID_CONFIG_MONITOR_CLASS_ACTION_REQUIRED,
- String.valueOf(oldClassName),
- String.valueOf(className),
- String.valueOf(configEntryDN)));
- return new ConfigChangeResult(resultCode, adminActionRequired, messages);
- }
-
-
- if (needsEnabled)
- {
- try
- {
- Class monitorClass = DirectoryServer.loadClass(className);
- monitor = (MonitorProvider) monitorClass.newInstance();
- }
- catch (Exception e)
- {
- if (debugEnabled())
- {
- TRACER.debugCaught(DebugLogLevel.ERROR, e);
- }
-
- int msgID = MSGID_CONFIG_MONITOR_INVALID_CLASS;
- messages.add(getMessage(msgID, className,
- String.valueOf(configEntryDN),
- String.valueOf(e)));
resultCode = DirectoryServer.getServerErrorResultCode();
- return new ConfigChangeResult(resultCode, adminActionRequired,
- messages);
}
- try
- {
- monitor.initializeMonitorProvider(configEntry);
- }
- catch (Exception e)
- {
- if (debugEnabled())
- {
- TRACER.debugCaught(DebugLogLevel.ERROR, e);
- }
+ messages.add(ie.getMessage());
+ }
- int msgID = MSGID_CONFIG_MONITOR_INITIALIZATION_FAILED;
- messages.add(getMessage(msgID, className,
- String.valueOf(configEntryDN),
- String.valueOf(e)));
- resultCode = DirectoryServer.getServerErrorResultCode();
- return new ConfigChangeResult(resultCode, adminActionRequired,
- messages);
- }
-
-
- monitorProviders.put(configEntryDN, monitor);
+ if (resultCode == ResultCode.SUCCESS)
+ {
+ monitors.put(configuration.dn(), monitor);
DirectoryServer.registerMonitorProvider(monitor);
- return new ConfigChangeResult(resultCode, adminActionRequired, messages);
}
-
- // If we've gotten here, then there haven't been any changes to anything
- // that we care about.
return new ConfigChangeResult(resultCode, adminActionRequired, messages);
}
/**
- * Indicates whether the configuration entry that will result from a proposed
- * add is acceptable to this add listener.
- *
- * @param configEntry The configuration entry that will result from
- * the requested add.
- * @param unacceptableReason A buffer to which this method can append a
- * human-readable message explaining why the
- * proposed entry is not acceptable.
- *
- * @return <CODE>true</CODE> if the proposed entry contains an acceptable
- * configuration, or <CODE>false</CODE> if it does not.
+ * {@inheritDoc}
*/
- public boolean configAddIsAcceptable(ConfigEntry configEntry,
- StringBuilder unacceptableReason)
+ public boolean isConfigurationDeleteAcceptable(
+ MonitorProviderCfg configuration,
+ List<String> unacceptableReasons)
{
- // Make sure that no entry already exists with the specified DN.
- DN configEntryDN = configEntry.getDN();
- if (monitorProviders.containsKey(configEntryDN))
- {
- int msgID = MSGID_CONFIG_MONITOR_EXISTS;
- String message = getMessage(msgID, String.valueOf(configEntryDN));
- unacceptableReason.append(message);
- return false;
- }
-
-
- // Make sure that the entry has an appropriate objectclass for a monitor
- // provider
- if (! configEntry.hasObjectClass(OC_MONITOR_PROVIDER))
- {
- int msgID = MSGID_CONFIG_MONITOR_INVALID_OBJECTCLASS;
- String message = getMessage(msgID, configEntry.getDN().toString());
- unacceptableReason.append(message);
- return false;
- }
-
-
- // Make sure that the entry specifies the monitor class name.
- StringConfigAttribute classNameAttr;
- try
- {
- StringConfigAttribute classStub =
- new StringConfigAttribute(ATTR_MONITOR_CLASS,
- getMessage(MSGID_CONFIG_MONITOR_DESCRIPTION_CLASS_NAME),
- true, false, true);
- classNameAttr = (StringConfigAttribute)
- configEntry.getConfigAttribute(classStub);
-
- if (classNameAttr == null)
- {
- int msgID = MSGID_CONFIG_MONITOR_NO_CLASS_NAME;
- String message = getMessage(msgID, configEntry.getDN().toString());
- unacceptableReason.append(message);
- return false;
- }
- }
- catch (Exception e)
- {
- if (debugEnabled())
- {
- TRACER.debugCaught(DebugLogLevel.ERROR, e);
- }
-
- int msgID = MSGID_CONFIG_MONITOR_INVALID_CLASS_NAME;
- String message = getMessage(msgID, configEntry.getDN().toString(),
- String.valueOf(e));
- unacceptableReason.append(message);
- return false;
- }
-
- Class monitorClass;
- try
- {
- monitorClass = DirectoryServer.loadClass(classNameAttr.pendingValue());
- }
- catch (Exception e)
- {
- if (debugEnabled())
- {
- TRACER.debugCaught(DebugLogLevel.ERROR, e);
- }
-
- int msgID = MSGID_CONFIG_MONITOR_INVALID_CLASS_NAME;
- String message = getMessage(msgID, configEntry.getDN().toString(),
- String.valueOf(e));
- unacceptableReason.append(message);
- return false;
- }
-
- MonitorProvider monitor;
- try
- {
- monitor = (MonitorProvider) monitorClass.newInstance();
- }
- catch (Exception e)
- {
- if (debugEnabled())
- {
- TRACER.debugCaught(DebugLogLevel.ERROR, e);
- }
-
- int msgID = MSGID_CONFIG_MONITOR_INVALID_CLASS;
- String message = getMessage(msgID, monitorClass.getName(),
- String.valueOf(configEntryDN),
- String.valueOf(e));
- unacceptableReason.append(message);
- return false;
- }
-
-
- // If the monitor provider is a configurable component, then make sure that
- // its configuration is valid.
- if (monitor instanceof ConfigurableComponent)
- {
- ConfigurableComponent cc = (ConfigurableComponent) monitor;
- LinkedList<String> errorMessages = new LinkedList<String>();
- if (! cc.hasAcceptableConfiguration(configEntry, errorMessages))
- {
- if (errorMessages.isEmpty())
- {
- int msgID = MSGID_CONFIG_MONITOR_UNACCEPTABLE_CONFIG;
- unacceptableReason.append(getMessage(msgID,
- String.valueOf(configEntryDN)));
- }
- else
- {
- Iterator<String> iterator = errorMessages.iterator();
- unacceptableReason.append(iterator.next());
- while (iterator.hasNext())
- {
- unacceptableReason.append(" ");
- unacceptableReason.append(iterator.next());
- }
- }
-
- return false;
- }
- }
-
-
- // See if this monitor entry should be enabled.
- BooleanConfigAttribute enabledAttr;
- try
- {
- BooleanConfigAttribute enabledStub =
- new BooleanConfigAttribute(ATTR_MONITOR_ENABLED,
- getMessage(MSGID_CONFIG_MONITOR_DESCRIPTION_ENABLED),
- false);
- enabledAttr = (BooleanConfigAttribute)
- configEntry.getConfigAttribute(enabledStub);
-
- if (enabledAttr == null)
- {
- int msgID = MSGID_CONFIG_MONITOR_NO_ENABLED_ATTR;
- String message = getMessage(msgID, configEntry.getDN().toString());
- unacceptableReason.append(message);
- return false;
- }
- }
- catch (Exception e)
- {
- if (debugEnabled())
- {
- TRACER.debugCaught(DebugLogLevel.ERROR, e);
- }
-
- int msgID = MSGID_CONFIG_MONITOR_INVALID_ENABLED_VALUE;
- String message = getMessage(msgID, configEntry.getDN().toString(),
- String.valueOf(e));
- unacceptableReason.append(message);
- return false;
- }
-
-
- // If we've gotten here then the monitor entry appears to be acceptable.
+ // It will always be acceptable to delete or disable a monitor provider.
return true;
}
/**
- * Attempts to apply a new configuration based on the provided added entry.
- *
- * @param configEntry The new configuration entry that contains the
- * configuration to apply.
- *
- * @return Information about the result of processing the configuration
- * change.
+ * {@inheritDoc}
*/
- public ConfigChangeResult applyConfigurationAdd(ConfigEntry configEntry)
+ public ConfigChangeResult applyConfigurationDelete(
+ MonitorProviderCfg configuration)
{
- DN configEntryDN = configEntry.getDN();
ResultCode resultCode = ResultCode.SUCCESS;
boolean adminActionRequired = false;
ArrayList<String> messages = new ArrayList<String>();
-
- // Make sure that the entry has an appropriate objectclass for a monitor
- // provider.
- if (! configEntry.hasObjectClass(OC_MONITOR_PROVIDER))
- {
- int msgID = MSGID_CONFIG_MONITOR_INVALID_OBJECTCLASS;
- messages.add(getMessage(msgID, String.valueOf(configEntryDN)));
- resultCode = ResultCode.UNWILLING_TO_PERFORM;
- return new ConfigChangeResult(resultCode, adminActionRequired, messages);
- }
-
-
- // See if this monitor should be enabled or disabled.
- BooleanConfigAttribute enabledAttr;
- try
- {
- BooleanConfigAttribute enabledStub =
- new BooleanConfigAttribute(ATTR_MONITOR_ENABLED,
- getMessage(MSGID_CONFIG_MONITOR_DESCRIPTION_ENABLED),
- false);
- enabledAttr = (BooleanConfigAttribute)
- configEntry.getConfigAttribute(enabledStub);
-
- if (enabledAttr == null)
- {
- // The attribute doesn't exist, so it will be disabled by default.
- int msgID = MSGID_CONFIG_MONITOR_NO_ENABLED_ATTR;
- messages.add(getMessage(msgID, String.valueOf(configEntryDN)));
- resultCode = ResultCode.SUCCESS;
- return new ConfigChangeResult(resultCode, adminActionRequired,
- messages);
- }
- else if (! enabledAttr.activeValue())
- {
- // It is explicitly configured as disabled, so we don't need to do
- // anything.
- return new ConfigChangeResult(resultCode, adminActionRequired,
- messages);
- }
- }
- catch (Exception e)
- {
- if (debugEnabled())
- {
- TRACER.debugCaught(DebugLogLevel.ERROR, e);
- }
-
- int msgID = MSGID_CONFIG_MONITOR_INVALID_ENABLED_VALUE;
- messages.add(getMessage(msgID, String.valueOf(configEntryDN),
- String.valueOf(e)));
- resultCode = DirectoryServer.getServerErrorResultCode();
- return new ConfigChangeResult(resultCode, adminActionRequired, messages);
- }
-
-
- // Make sure that the entry specifies the monitor class name.
- String className;
- try
- {
- StringConfigAttribute classStub =
- new StringConfigAttribute(ATTR_MONITOR_CLASS,
- getMessage(MSGID_CONFIG_MONITOR_DESCRIPTION_CLASS_NAME),
- true, false, true);
- StringConfigAttribute classNameAttr =
- (StringConfigAttribute) configEntry.getConfigAttribute(classStub);
-
- if (classNameAttr == null)
- {
- int msgID = MSGID_CONFIG_MONITOR_NO_CLASS_NAME;
- messages.add(getMessage(msgID, String.valueOf(configEntryDN)));
- resultCode = ResultCode.OBJECTCLASS_VIOLATION;
- return new ConfigChangeResult(resultCode, adminActionRequired,
- messages);
- }
-
- className = classNameAttr.pendingValue();
- }
- catch (Exception e)
- {
- if (debugEnabled())
- {
- TRACER.debugCaught(DebugLogLevel.ERROR, e);
- }
-
- int msgID = MSGID_CONFIG_MONITOR_INVALID_CLASS_NAME;
- messages.add(getMessage(msgID, String.valueOf(configEntryDN),
- String.valueOf(e)));
- resultCode = DirectoryServer.getServerErrorResultCode();
- return new ConfigChangeResult(resultCode, adminActionRequired, messages);
- }
-
-
- // Load and initialize the monitor class, and register it with the Directory
- // Server.
- MonitorProvider monitor;
- try
- {
- Class monitorClass = DirectoryServer.loadClass(className);
- monitor = (MonitorProvider) monitorClass.newInstance();
- }
- catch (Exception e)
- {
- if (debugEnabled())
- {
- TRACER.debugCaught(DebugLogLevel.ERROR, e);
- }
-
- int msgID = MSGID_CONFIG_MONITOR_INVALID_CLASS;
- messages.add(getMessage(msgID, className, String.valueOf(configEntryDN),
- String.valueOf(e)));
- resultCode = DirectoryServer.getServerErrorResultCode();
- return new ConfigChangeResult(resultCode, adminActionRequired, messages);
- }
-
- try
- {
- monitor.initializeMonitorProvider(configEntry);
- }
- catch (Exception e)
- {
- if (debugEnabled())
- {
- TRACER.debugCaught(DebugLogLevel.ERROR, e);
- }
-
- int msgID = MSGID_CONFIG_MONITOR_INITIALIZATION_FAILED;
- messages.add(getMessage(msgID, className, String.valueOf(configEntryDN),
- String.valueOf(e)));
- resultCode = DirectoryServer.getServerErrorResultCode();
- return new ConfigChangeResult(resultCode, adminActionRequired, messages);
- }
-
-
- monitorProviders.put(configEntryDN, monitor);
- DirectoryServer.registerMonitorProvider(monitor);
- return new ConfigChangeResult(resultCode, adminActionRequired, messages);
- }
-
-
-
- /**
- * Indicates whether it is acceptable to remove the provided configuration
- * entry.
- *
- * @param configEntry The configuration entry that will be removed
- * from the configuration.
- * @param unacceptableReason A buffer to which this method can append a
- * human-readable message explaining why the
- * proposed delete is not acceptable.
- *
- * @return <CODE>true</CODE> if the proposed entry may be removed from the
- * configuration, or <CODE>false</CODE> if not.
- */
- public boolean configDeleteIsAcceptable(ConfigEntry configEntry,
- StringBuilder unacceptableReason)
- {
- // A delete should always be acceptable, so just return true.
- return true;
- }
-
-
-
- /**
- * Attempts to apply a new configuration based on the provided deleted entry.
- *
- * @param configEntry The new configuration entry that has been deleted.
- *
- * @return Information about the result of processing the configuration
- * change.
- */
- public ConfigChangeResult applyConfigurationDelete(ConfigEntry configEntry)
- {
- DN configEntryDN = configEntry.getDN();
- ResultCode resultCode = ResultCode.SUCCESS;
- boolean adminActionRequired = false;
-
-
- // See if the entry is registered as a monitor provider. If so, deregister
- // it and stop the monitor.
- MonitorProvider monitor = monitorProviders.remove(configEntryDN);
+ MonitorProvider monitor = monitors.remove(configuration.dn());
if (monitor != null)
{
String lowerName = toLowerCase(monitor.getMonitorInstanceName());
DirectoryServer.deregisterMonitorProvider(lowerName);
-
monitor.finalizeMonitorProvider();
}
+ return new ConfigChangeResult(resultCode, adminActionRequired, messages);
+ }
- return new ConfigChangeResult(resultCode, adminActionRequired);
+
+
+ /**
+ * {@inheritDoc}
+ */
+ public boolean isConfigurationChangeAcceptable(
+ MonitorProviderCfg configuration,
+ List<String> unacceptableReasons)
+ {
+ if (configuration.isEnabled())
+ {
+ // Get the name of the class and make sure we can instantiate it as a
+ // monitor provider.
+ String className = configuration.getMonitorClass();
+ try
+ {
+ loadMonitor(className, null);
+ }
+ catch (InitializationException ie)
+ {
+ unacceptableReasons.add(ie.getMessage());
+ return false;
+ }
+ }
+
+ // If we've gotten here, then it's fine.
+ return true;
+ }
+
+
+
+ /**
+ * {@inheritDoc}
+ */
+ public ConfigChangeResult applyConfigurationChange(
+ MonitorProviderCfg configuration)
+ {
+ ResultCode resultCode = ResultCode.SUCCESS;
+ boolean adminActionRequired = false;
+ ArrayList<String> messages = new ArrayList<String>();
+
+
+ // Get the existing monitor provider if it's already enabled.
+ MonitorProvider existingMonitor = monitors.get(configuration.dn());
+
+
+ // If the new configuration has the monitor disabled, then disable it if it
+ // is enabled, or do nothing if it's already disabled.
+ if (! configuration.isEnabled())
+ {
+ if (existingMonitor != null)
+ {
+ String lowerName =
+ toLowerCase(existingMonitor.getMonitorInstanceName());
+ DirectoryServer.deregisterMonitorProvider(lowerName);
+
+ MonitorProvider monitor = monitors.remove(configuration.dn());
+ if (monitor != null)
+ {
+ monitor.finalizeMonitorProvider();
+ }
+ }
+
+ return new ConfigChangeResult(resultCode, adminActionRequired, messages);
+ }
+
+
+ // Get the class for the monitor provider. If the monitor is already
+ // enabled, then we shouldn't do anything with it although if the class has
+ // changed then we'll at least need to indicate that administrative action
+ // is required. If the monitor is disabled, then instantiate the class and
+ // initialize and register it as a monitor provider.
+ String className = configuration.getMonitorClass();
+ if (existingMonitor != null)
+ {
+ if (! className.equals(existingMonitor.getClass().getName()))
+ {
+ adminActionRequired = true;
+ }
+
+ return new ConfigChangeResult(resultCode, adminActionRequired, messages);
+ }
+
+ MonitorProvider<? extends MonitorProviderCfg> monitor = null;
+ try
+ {
+ monitor = loadMonitor(className, configuration);
+ }
+ catch (InitializationException ie)
+ {
+ if (resultCode == ResultCode.SUCCESS)
+ {
+ resultCode = DirectoryServer.getServerErrorResultCode();
+ }
+
+ messages.add(ie.getMessage());
+ }
+
+ if (resultCode == ResultCode.SUCCESS)
+ {
+ monitors.put(configuration.dn(), monitor);
+ DirectoryServer.registerMonitorProvider(monitor);
+ }
+
+ return new ConfigChangeResult(resultCode, adminActionRequired, messages);
+ }
+
+
+
+ /**
+ * Loads the specified class, instantiates it as a monitor provider, and
+ * optionally initializes that instance.
+ *
+ * @param className The fully-qualified name of the monitor provider
+ * class to load, instantiate, and initialize.
+ * @param configuration The configuration to use to initialize the monitor
+ * provider, or {@code null} if the monitor provider
+ * should not be initialized.
+ *
+ * @return The possibly initialized monitor provider.
+ *
+ * @throws InitializationException If a problem occurred while attempting to
+ * initialize the monitor provider.
+ */
+ private MonitorProvider<? extends MonitorProviderCfg>
+ loadMonitor(String className, MonitorProviderCfg configuration)
+ throws InitializationException
+ {
+ try
+ {
+ MonitorProviderCfgDefn definition =
+ MonitorProviderCfgDefn.getInstance();
+ ClassPropertyDefinition propertyDefinition =
+ definition.getMonitorClassPropertyDefinition();
+ Class<? extends MonitorProvider> providerClass =
+ propertyDefinition.loadClass(className, MonitorProvider.class);
+ MonitorProvider monitor = providerClass.newInstance();
+
+ if (configuration != null)
+ {
+ Method method =
+ monitor.getClass().getMethod("initializeMonitorProvider",
+ configuration.definition().getServerConfigurationClass());
+ method.invoke(monitor, configuration);
+ }
+
+ return (MonitorProvider<? extends MonitorProviderCfg>) monitor;
+ }
+ catch (Exception e)
+ {
+ int msgID = MSGID_CONFIG_MONITOR_INITIALIZATION_FAILED;
+ String message = getMessage(msgID, className,
+ String.valueOf(configuration.dn()),
+ stackTraceToSingleLineString(e));
+ throw new InitializationException(msgID, message, e);
+ }
}
}
diff --git a/opends/src/server/org/opends/server/extensions/TraditionalWorkQueue.java b/opends/src/server/org/opends/server/extensions/TraditionalWorkQueue.java
index de670ba..648c88b 100644
--- a/opends/src/server/org/opends/server/extensions/TraditionalWorkQueue.java
+++ b/opends/src/server/org/opends/server/extensions/TraditionalWorkQueue.java
@@ -288,7 +288,7 @@
{
TraditionalWorkQueueMonitor monitor =
new TraditionalWorkQueueMonitor(this);
- monitor.initializeMonitorProvider(configEntry);
+ monitor.initializeMonitorProvider(null);
monitor.start();
DirectoryServer.registerMonitorProvider(monitor);
}
diff --git a/opends/src/server/org/opends/server/monitors/BackendMonitor.java b/opends/src/server/org/opends/server/monitors/BackendMonitor.java
index 342e700..293f7b7 100644
--- a/opends/src/server/org/opends/server/monitors/BackendMonitor.java
+++ b/opends/src/server/org/opends/server/monitors/BackendMonitor.java
@@ -32,9 +32,9 @@
import java.util.LinkedList;
import java.util.List;
+import org.opends.server.admin.std.server.MonitorProviderCfg;
import org.opends.server.api.Backend;
import org.opends.server.api.MonitorProvider;
-import org.opends.server.config.ConfigEntry;
import org.opends.server.schema.BooleanSyntax;
import org.opends.server.types.Attribute;
import org.opends.server.types.AttributeType;
@@ -54,11 +54,8 @@
* writability mode, and the number of entries it contains.
*/
public class BackendMonitor
- extends MonitorProvider
+ extends MonitorProvider<MonitorProviderCfg>
{
-
-
-
// The attribute type that will be used to report the backend ID.
private AttributeType backendIDType;
@@ -102,7 +99,7 @@
/**
* {@inheritDoc}
*/
- public void initializeMonitorProvider(ConfigEntry configEntry)
+ public void initializeMonitorProvider(MonitorProviderCfg configuration)
{
monitorName = backend.getBackendID() + " Backend";
diff --git a/opends/src/server/org/opends/server/monitors/ConnectionHandlerMonitor.java b/opends/src/server/org/opends/server/monitors/ConnectionHandlerMonitor.java
index 5b51bf0..fef6c8d 100644
--- a/opends/src/server/org/opends/server/monitors/ConnectionHandlerMonitor.java
+++ b/opends/src/server/org/opends/server/monitors/ConnectionHandlerMonitor.java
@@ -32,10 +32,11 @@
import java.util.LinkedList;
import java.util.List;
+import org.opends.server.admin.std.server.ConnectionHandlerCfg;
+import org.opends.server.admin.std.server.MonitorProviderCfg;
import org.opends.server.api.ClientConnection;
import org.opends.server.api.ConnectionHandler;
import org.opends.server.api.MonitorProvider;
-import org.opends.server.config.ConfigEntry;
import org.opends.server.types.Attribute;
import org.opends.server.types.AttributeType;
import org.opends.server.types.AttributeValue;
@@ -54,11 +55,8 @@
* listeners, and established connections.
*/
public class ConnectionHandlerMonitor
- extends MonitorProvider
+ extends MonitorProvider<MonitorProviderCfg>
{
-
-
-
// The attribute type that will be used to report the established connections.
private AttributeType connectionsType;
@@ -88,11 +86,11 @@
* @param connectionHandler The connection handler with which this monitor
* is associated.
*/
- public ConnectionHandlerMonitor(ConnectionHandler connectionHandler)
+ public ConnectionHandlerMonitor(
+ ConnectionHandler<? extends ConnectionHandlerCfg> connectionHandler)
{
super(connectionHandler.getConnectionHandlerName());
-
this.connectionHandler = connectionHandler;
}
@@ -101,7 +99,7 @@
/**
* {@inheritDoc}
*/
- public void initializeMonitorProvider(ConfigEntry configEntry)
+ public void initializeMonitorProvider(MonitorProviderCfg configuration)
{
monitorName = connectionHandler.getConnectionHandlerName();
diff --git a/opends/src/server/org/opends/server/monitors/DatabaseEnvironmentMonitor.java b/opends/src/server/org/opends/server/monitors/DatabaseEnvironmentMonitor.java
index 07c8312..1e92bc2 100644
--- a/opends/src/server/org/opends/server/monitors/DatabaseEnvironmentMonitor.java
+++ b/opends/src/server/org/opends/server/monitors/DatabaseEnvironmentMonitor.java
@@ -30,9 +30,9 @@
import org.opends.server.loggers.debug.DebugTracer;
import org.opends.server.types.DebugLogLevel;
+import org.opends.server.admin.std.server.MonitorProviderCfg;
import org.opends.server.api.AttributeSyntax;
import org.opends.server.api.MonitorProvider;
-import org.opends.server.config.ConfigEntry;
import org.opends.server.config.ConfigException;
import org.opends.server.core.DirectoryServer;
import org.opends.server.protocols.asn1.ASN1OctetString;
@@ -58,7 +58,8 @@
* It uses reflection on the environment statistics object
* so that we don't need to keep a list of all the stats.
*/
-public class DatabaseEnvironmentMonitor extends MonitorProvider
+public class DatabaseEnvironmentMonitor
+ extends MonitorProvider<MonitorProviderCfg>
{
/**
* The tracer object for the debug logger.
@@ -95,20 +96,9 @@
/**
- * Initializes this monitor provider based on the information in the provided
- * configuration entry.
- *
- * @param configEntry The configuration entry that contains the information
- * to use to initialize this monitor provider.
- * @throws org.opends.server.config.ConfigException
- * If an unrecoverable problem arises in the
- * process of performing the initialization.
- * @throws org.opends.server.types.InitializationException
- * If a problem occurs during initialization
- * that is not related to the server
- * configuration.
+ * {@inheritDoc}
*/
- public void initializeMonitorProvider(ConfigEntry configEntry)
+ public void initializeMonitorProvider(MonitorProviderCfg configuration)
throws ConfigException, InitializationException
{
}
diff --git a/opends/src/server/org/opends/server/monitors/StackTraceMonitorProvider.java b/opends/src/server/org/opends/server/monitors/StackTraceMonitorProvider.java
index ea237ed..6c79ccc 100644
--- a/opends/src/server/org/opends/server/monitors/StackTraceMonitorProvider.java
+++ b/opends/src/server/org/opends/server/monitors/StackTraceMonitorProvider.java
@@ -34,8 +34,8 @@
import java.util.Map.Entry;
import java.util.TreeMap;
+import org.opends.server.admin.std.server.MonitorProviderCfg;
import org.opends.server.api.MonitorProvider;
-import org.opends.server.config.ConfigEntry;
import org.opends.server.config.ConfigException;
import org.opends.server.core.DirectoryServer;
import org.opends.server.types.Attribute;
@@ -52,11 +52,8 @@
* the JVM.
*/
public class StackTraceMonitorProvider
- extends MonitorProvider
+ extends MonitorProvider<MonitorProviderCfg>
{
-
-
-
/**
* Initializes this monitor provider.
*/
@@ -70,20 +67,9 @@
/**
- * Initializes this monitor provider based on the information in the provided
- * configuration entry.
- *
- * @param configEntry The configuration entry that contains the information
- * to use to initialize this monitor provider.
- *
- * @throws ConfigException If an unrecoverable problem arises in the
- * process of performing the initialization.
- *
- * @throws InitializationException If a problem occurs during initialization
- * that is not related to the server
- * configuration.
+ * {@inheritDoc}
*/
- public void initializeMonitorProvider(ConfigEntry configEntry)
+ public void initializeMonitorProvider(MonitorProviderCfg configuration)
throws ConfigException, InitializationException
{
// No initialization is required.
diff --git a/opends/src/server/org/opends/server/monitors/SystemInfoMonitorProvider.java b/opends/src/server/org/opends/server/monitors/SystemInfoMonitorProvider.java
index 4f61980..d51b94e 100644
--- a/opends/src/server/org/opends/server/monitors/SystemInfoMonitorProvider.java
+++ b/opends/src/server/org/opends/server/monitors/SystemInfoMonitorProvider.java
@@ -32,8 +32,8 @@
import java.util.ArrayList;
import java.util.LinkedHashSet;
+import org.opends.server.admin.std.server.MonitorProviderCfg;
import org.opends.server.api.MonitorProvider;
-import org.opends.server.config.ConfigEntry;
import org.opends.server.config.ConfigException;
import org.opends.server.core.DirectoryServer;
import org.opends.server.protocols.asn1.ASN1OctetString;
@@ -54,7 +54,7 @@
* Server is running.
*/
public class SystemInfoMonitorProvider
- extends MonitorProvider
+ extends MonitorProvider<MonitorProviderCfg>
{
/**
* The tracer object for the debug logger.
@@ -77,20 +77,9 @@
/**
- * Initializes this monitor provider based on the information in the provided
- * configuration entry.
- *
- * @param configEntry The configuration entry that contains the information
- * to use to initialize this monitor provider.
- *
- * @throws ConfigException If an unrecoverable problem arises in the
- * process of performing the initialization.
- *
- * @throws InitializationException If a problem occurs during initialization
- * that is not related to the server
- * configuration.
+ * {@inheritDoc}
*/
- public void initializeMonitorProvider(ConfigEntry configEntry)
+ public void initializeMonitorProvider(MonitorProviderCfg configuration)
throws ConfigException, InitializationException
{
// No initialization is required.
diff --git a/opends/src/server/org/opends/server/monitors/TraditionalWorkQueueMonitor.java b/opends/src/server/org/opends/server/monitors/TraditionalWorkQueueMonitor.java
index 72914ec..c66bc7a 100644
--- a/opends/src/server/org/opends/server/monitors/TraditionalWorkQueueMonitor.java
+++ b/opends/src/server/org/opends/server/monitors/TraditionalWorkQueueMonitor.java
@@ -31,9 +31,9 @@
import java.util.ArrayList;
import java.util.LinkedHashSet;
+import org.opends.server.admin.std.server.MonitorProviderCfg;
import org.opends.server.api.AttributeSyntax;
import org.opends.server.api.MonitorProvider;
-import org.opends.server.config.ConfigEntry;
import org.opends.server.config.ConfigException;
import org.opends.server.core.DirectoryServer;
import org.opends.server.extensions.TraditionalWorkQueue;
@@ -51,11 +51,8 @@
* information about the state of the work queue.
*/
public class TraditionalWorkQueueMonitor
- extends MonitorProvider
+ extends MonitorProvider<MonitorProviderCfg>
{
-
-
-
/**
* The name to use for the monitor attribute that provides the current request
* backlog.
@@ -129,20 +126,9 @@
/**
- * Initializes this monitor provider based on the information in the provided
- * configuration entry.
- *
- * @param configEntry The configuration entry that contains the information
- * to use to initialize this monitor provider.
- *
- * @throws ConfigException If an unrecoverable problem arises in the
- * process of performing the initialization.
- *
- * @throws InitializationException If a problem occurs during initialization
- * that is not related to the server
- * configuration.
+ * {@inheritDoc}
*/
- public void initializeMonitorProvider(ConfigEntry configEntry)
+ public void initializeMonitorProvider(MonitorProviderCfg configuration)
throws ConfigException, InitializationException
{
maxBacklog = 0;
diff --git a/opends/src/server/org/opends/server/monitors/VersionMonitorProvider.java b/opends/src/server/org/opends/server/monitors/VersionMonitorProvider.java
index 36ac6cc..0f1149d 100644
--- a/opends/src/server/org/opends/server/monitors/VersionMonitorProvider.java
+++ b/opends/src/server/org/opends/server/monitors/VersionMonitorProvider.java
@@ -31,8 +31,8 @@
import java.util.ArrayList;
import java.util.LinkedHashSet;
+import org.opends.server.admin.std.server.MonitorProviderCfg;
import org.opends.server.api.MonitorProvider;
-import org.opends.server.config.ConfigEntry;
import org.opends.server.config.ConfigException;
import org.opends.server.core.DirectoryServer;
import org.opends.server.protocols.asn1.ASN1OctetString;
@@ -53,7 +53,7 @@
* information.
*/
public class VersionMonitorProvider
- extends MonitorProvider
+ extends MonitorProvider<MonitorProviderCfg>
{
/**
* The tracer object for the debug logger.
@@ -158,20 +158,9 @@
/**
- * Initializes this monitor provider based on the information in the provided
- * configuration entry.
- *
- * @param configEntry The configuration entry that contains the information
- * to use to initialize this monitor provider.
- *
- * @throws ConfigException If an unrecoverable problem arises in the
- * process of performing the initialization.
- *
- * @throws InitializationException If a problem occurs during initialization
- * that is not related to the server
- * configuration.
+ * {@inheritDoc}
*/
- public void initializeMonitorProvider(ConfigEntry configEntry)
+ public void initializeMonitorProvider(MonitorProviderCfg configuration)
throws ConfigException, InitializationException
{
// No initialization is required.
diff --git a/opends/src/server/org/opends/server/protocols/ldap/LDAPStatistics.java b/opends/src/server/org/opends/server/protocols/ldap/LDAPStatistics.java
index 1d461bd..39e0d17 100644
--- a/opends/src/server/org/opends/server/protocols/ldap/LDAPStatistics.java
+++ b/opends/src/server/org/opends/server/protocols/ldap/LDAPStatistics.java
@@ -32,9 +32,9 @@
import java.util.LinkedHashSet;
import java.util.concurrent.locks.ReentrantLock;
+import org.opends.server.admin.std.server.MonitorProviderCfg;
import org.opends.server.api.MonitorProvider;
import org.opends.server.core.DirectoryServer;
-import org.opends.server.config.ConfigEntry;
import org.opends.server.config.ConfigException;
import org.opends.server.protocols.asn1.ASN1OctetString;
import org.opends.server.types.Attribute;
@@ -73,7 +73,7 @@
* about the interaction with a specific client or aggregated for all clients).
*/
public class LDAPStatistics
- extends MonitorProvider
+ extends MonitorProvider<MonitorProviderCfg>
{
/**
* The tracer object for the debug logger.
@@ -82,7 +82,6 @@
-
// The statistics maintained by this class.
private long abandonRequests;
private long addRequests;
@@ -203,16 +202,9 @@
/**
- * Initializes this monitor provider based on the information in the provided
- * configuration entry.
- *
- * @param configEntry The configuration entry that contains the information
- * to use to initialize this monitor provider.
- *
- * @throws ConfigException If an unrecoverable problem arises in the
- * process of performing the initialization.
+ * {@inheritDoc}
*/
- public void initializeMonitorProvider(ConfigEntry configEntry)
+ public void initializeMonitorProvider(MonitorProviderCfg configuration)
throws ConfigException
{
// Throw an exception, because this monitor is not intended to be
@@ -220,7 +212,7 @@
// explicitly created and registered by the LDAP connection handler or an
// LDAP client connection.
int msgID = MSGID_LDAP_STATS_INVALID_MONITOR_INITIALIZATION;
- String message = getMessage(msgID, String.valueOf(configEntry.getDN()));
+ String message = getMessage(msgID, String.valueOf(configuration.dn()));
throw new ConfigException(msgID, message);
}
diff --git a/opends/src/server/org/opends/server/replication/plugin/ReplicationMonitor.java b/opends/src/server/org/opends/server/replication/plugin/ReplicationMonitor.java
index e6a45a0..7cac348 100644
--- a/opends/src/server/org/opends/server/replication/plugin/ReplicationMonitor.java
+++ b/opends/src/server/org/opends/server/replication/plugin/ReplicationMonitor.java
@@ -29,8 +29,8 @@
import java.util.ArrayList;
import java.util.LinkedHashSet;
+import org.opends.server.admin.std.server.MonitorProviderCfg;
import org.opends.server.api.MonitorProvider;
-import org.opends.server.config.ConfigEntry;
import org.opends.server.core.DirectoryServer;
import org.opends.server.types.Attribute;
import org.opends.server.types.AttributeType;
@@ -39,7 +39,7 @@
/**
* Class used to generate monitoring information for the replication.
*/
-public class ReplicationMonitor extends MonitorProvider
+public class ReplicationMonitor extends MonitorProvider<MonitorProviderCfg>
{
private ReplicationDomain domain; // the replication plugin
@@ -54,12 +54,10 @@
}
/**
- * initialization function for the Monitor.
- * Not used for now
- * @param configEntry the entry to use for initialization
+ * {@inheritDoc}
*/
- @Override
- public void initializeMonitorProvider(ConfigEntry configEntry)
+ @Override()
+ public void initializeMonitorProvider(MonitorProviderCfg configuration)
{
// TODO Auto-generated method stub
}
diff --git a/opends/src/server/org/opends/server/replication/server/DbHandler.java b/opends/src/server/org/opends/server/replication/server/DbHandler.java
index 4a562c5..e749af2 100644
--- a/opends/src/server/org/opends/server/replication/server/DbHandler.java
+++ b/opends/src/server/org/opends/server/replication/server/DbHandler.java
@@ -37,9 +37,9 @@
import java.util.LinkedList;
import java.util.NoSuchElementException;
+import org.opends.server.admin.std.server.MonitorProviderCfg;
import org.opends.server.api.DirectoryThread;
import org.opends.server.api.MonitorProvider;
-import org.opends.server.config.ConfigEntry;
import org.opends.server.config.ConfigException;
import org.opends.server.types.Attribute;
import org.opends.server.types.DN;
@@ -421,7 +421,7 @@
* This internal class is used to implement the Monitoring capabilities
* of the dbHandler.
*/
- private class DbMonitorProvider extends MonitorProvider
+ private class DbMonitorProvider extends MonitorProvider<MonitorProviderCfg>
{
private DbMonitorProvider()
{
@@ -478,7 +478,7 @@
* {@inheritDoc}
*/
@Override
- public void initializeMonitorProvider(ConfigEntry configEntry)
+ public void initializeMonitorProvider(MonitorProviderCfg configuration)
throws ConfigException,InitializationException
{
// Nothing to do for now
diff --git a/opends/src/server/org/opends/server/replication/server/ReplicationServer.java b/opends/src/server/org/opends/server/replication/server/ReplicationServer.java
index edb50df..04185d9 100644
--- a/opends/src/server/org/opends/server/replication/server/ReplicationServer.java
+++ b/opends/src/server/org/opends/server/replication/server/ReplicationServer.java
@@ -46,6 +46,7 @@
import java.util.Set;
import org.opends.server.admin.server.ConfigurationChangeListener;
+import org.opends.server.admin.std.server.MonitorProviderCfg;
import org.opends.server.admin.std.server.ReplicationServerCfg;
import org.opends.server.api.ConfigurableComponent;
import org.opends.server.api.MonitorProvider;
@@ -75,7 +76,7 @@
*
* It is responsible for creating the replication server cache and managing it
*/
-public class ReplicationServer extends MonitorProvider
+public class ReplicationServer extends MonitorProvider<MonitorProviderCfg>
implements Runnable, ConfigurableComponent,
ConfigurationChangeListener<ReplicationServerCfg>
{
@@ -534,7 +535,7 @@
* {@inheritDoc}
*/
@Override
- public void initializeMonitorProvider(ConfigEntry configEntry)
+ public void initializeMonitorProvider(MonitorProviderCfg configuraiton)
{
// Nothing to do for now
}
diff --git a/opends/src/server/org/opends/server/replication/server/ServerHandler.java b/opends/src/server/org/opends/server/replication/server/ServerHandler.java
index 22447e2..a98df94 100644
--- a/opends/src/server/org/opends/server/replication/server/ServerHandler.java
+++ b/opends/src/server/org/opends/server/replication/server/ServerHandler.java
@@ -44,8 +44,8 @@
import java.util.TreeSet;
import java.util.concurrent.Semaphore;
+import org.opends.server.admin.std.server.MonitorProviderCfg;
import org.opends.server.api.MonitorProvider;
-import org.opends.server.config.ConfigEntry;
import org.opends.server.config.ConfigException;
import org.opends.server.core.DirectoryServer;
import org.opends.server.replication.common.ChangeNumber;
@@ -73,7 +73,7 @@
* This class defines a server handler, which handles all interaction with a
* replication server.
*/
-public class ServerHandler extends MonitorProvider
+public class ServerHandler extends MonitorProvider<MonitorProviderCfg>
{
/**
* The tracer object for the debug logger.
@@ -1104,21 +1104,10 @@
}
/**
- * Initializes this monitor provider based on the information in the provided
- * configuration entry.
- *
- * @param configEntry The configuration entry that contains the information
- * to use to initialize this monitor provider.
- *
- * @throws ConfigException If an unrecoverable problem arises in the
- * process of performing the initialization.
- *
- * @throws InitializationException If a problem occurs during initialization
- * that is not related to the server
- * configuration.
+ * {@inheritDoc}
*/
@Override
- public void initializeMonitorProvider(ConfigEntry configEntry)
+ public void initializeMonitorProvider(MonitorProviderCfg configuration)
throws ConfigException,InitializationException
{
// Nothing to do for now
diff --git a/opends/tests/unit-tests-testng/src/server/org/opends/server/monitors/DatabaseEnvironmentMonitorTestCase.java b/opends/tests/unit-tests-testng/src/server/org/opends/server/monitors/DatabaseEnvironmentMonitorTestCase.java
index 0b70007..2e0317c 100644
--- a/opends/tests/unit-tests-testng/src/server/org/opends/server/monitors/DatabaseEnvironmentMonitorTestCase.java
+++ b/opends/tests/unit-tests-testng/src/server/org/opends/server/monitors/DatabaseEnvironmentMonitorTestCase.java
@@ -28,6 +28,7 @@
+import org.opends.server.admin.std.server.MonitorProviderCfg;
import org.opends.server.api.MonitorProvider;
import org.opends.server.core.DirectoryServer;
@@ -64,7 +65,8 @@
throws Exception
{
String monitorName = "userroot database environment";
- MonitorProvider provider = DirectoryServer.getMonitorProvider(monitorName);
+ MonitorProvider<? extends MonitorProviderCfg> provider =
+ DirectoryServer.getMonitorProvider(monitorName);
provider.initializeMonitorProvider(null);
return provider;
}
diff --git a/opends/tests/unit-tests-testng/src/server/org/opends/server/monitors/InternalSearchMonitorTestCase.java b/opends/tests/unit-tests-testng/src/server/org/opends/server/monitors/InternalSearchMonitorTestCase.java
index 295b7d5..a5baaeb 100644
--- a/opends/tests/unit-tests-testng/src/server/org/opends/server/monitors/InternalSearchMonitorTestCase.java
+++ b/opends/tests/unit-tests-testng/src/server/org/opends/server/monitors/InternalSearchMonitorTestCase.java
@@ -61,7 +61,7 @@
public class InternalSearchMonitorTestCase
extends MonitorTestCase
{
- static MonitorProvider testMonitorProvider = new TestMonitorProvider();
+ static TestMonitorProvider testMonitorProvider = new TestMonitorProvider();
/**
* Ensures that the Directory Server is started.
diff --git a/opends/tests/unit-tests-testng/src/server/org/opends/server/monitors/StackTraceMonitorTestCase.java b/opends/tests/unit-tests-testng/src/server/org/opends/server/monitors/StackTraceMonitorTestCase.java
index 56bea6a..b51a0c5 100644
--- a/opends/tests/unit-tests-testng/src/server/org/opends/server/monitors/StackTraceMonitorTestCase.java
+++ b/opends/tests/unit-tests-testng/src/server/org/opends/server/monitors/StackTraceMonitorTestCase.java
@@ -63,7 +63,7 @@
throws Exception
{
StackTraceMonitorProvider monitorProvider = new StackTraceMonitorProvider();
- monitorProvider.initializeMonitorProvider(configEntry);
+ monitorProvider.initializeMonitorProvider(null);
return monitorProvider;
}
}
diff --git a/opends/tests/unit-tests-testng/src/server/org/opends/server/monitors/SystemInfoMonitorTestCase.java b/opends/tests/unit-tests-testng/src/server/org/opends/server/monitors/SystemInfoMonitorTestCase.java
index 6d1ac74..a78ecd5 100644
--- a/opends/tests/unit-tests-testng/src/server/org/opends/server/monitors/SystemInfoMonitorTestCase.java
+++ b/opends/tests/unit-tests-testng/src/server/org/opends/server/monitors/SystemInfoMonitorTestCase.java
@@ -63,7 +63,7 @@
throws Exception
{
SystemInfoMonitorProvider monitorProvider = new SystemInfoMonitorProvider();
- monitorProvider.initializeMonitorProvider(configEntry);
+ monitorProvider.initializeMonitorProvider(null);
return monitorProvider;
}
}
diff --git a/opends/tests/unit-tests-testng/src/server/org/opends/server/monitors/TestMonitorProvider.java b/opends/tests/unit-tests-testng/src/server/org/opends/server/monitors/TestMonitorProvider.java
index febb7bb..bab4244 100644
--- a/opends/tests/unit-tests-testng/src/server/org/opends/server/monitors/TestMonitorProvider.java
+++ b/opends/tests/unit-tests-testng/src/server/org/opends/server/monitors/TestMonitorProvider.java
@@ -27,8 +27,8 @@
package org.opends.server.monitors;
+import org.opends.server.admin.std.server.MonitorProviderCfg;
import org.opends.server.api.MonitorProvider;
-import org.opends.server.config.ConfigEntry;
import org.opends.server.config.ConfigException;
import org.opends.server.types.InitializationException;
import org.opends.server.types.Attribute;
@@ -39,14 +39,14 @@
/**
* This test monitor provider has a DN embedded in its instance name.
*/
-class TestMonitorProvider extends MonitorProvider
+class TestMonitorProvider extends MonitorProvider<MonitorProviderCfg>
{
public TestMonitorProvider()
{
super("Test Monitor Thread");
}
- public void initializeMonitorProvider(ConfigEntry configEntry)
+ public void initializeMonitorProvider(MonitorProviderCfg configuration)
throws ConfigException, InitializationException
{
// No implementation required.
diff --git a/opends/tests/unit-tests-testng/src/server/org/opends/server/monitors/VersionMonitorTestCase.java b/opends/tests/unit-tests-testng/src/server/org/opends/server/monitors/VersionMonitorTestCase.java
index 8ccf8a2..0441983 100644
--- a/opends/tests/unit-tests-testng/src/server/org/opends/server/monitors/VersionMonitorTestCase.java
+++ b/opends/tests/unit-tests-testng/src/server/org/opends/server/monitors/VersionMonitorTestCase.java
@@ -63,7 +63,7 @@
throws Exception
{
VersionMonitorProvider monitorProvider = new VersionMonitorProvider();
- monitorProvider.initializeMonitorProvider(configEntry);
+ monitorProvider.initializeMonitorProvider(null);
return monitorProvider;
}
}
diff --git a/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/StressTest.java b/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/StressTest.java
index 4068f90..24b2f0d 100644
--- a/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/StressTest.java
+++ b/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/StressTest.java
@@ -37,8 +37,8 @@
import java.util.List;
import org.opends.server.TestCaseUtils;
+import org.opends.server.admin.std.server.MonitorProviderCfg;
import org.opends.server.api.MonitorProvider;
-import org.opends.server.config.ConfigEntry;
import org.opends.server.config.ConfigException;
import org.opends.server.core.AddOperation;
import org.opends.server.core.DirectoryServer;
@@ -213,7 +213,7 @@
ServerSocket socket = TestCaseUtils.bindFreePort();
replServerPort = socket.getLocalPort();
socket.close();
-
+
// Change log
String replServerLdif =
"dn: cn=Replication Server, " + synchroPluginStringDN + "\n"
@@ -364,7 +364,7 @@
}
}
- private class Monitor extends MonitorProvider
+ private class Monitor extends MonitorProvider<MonitorProviderCfg>
{
protected Monitor(String threadName)
{
@@ -401,7 +401,7 @@
}
@Override
- public void initializeMonitorProvider(ConfigEntry configEntry)
+ public void initializeMonitorProvider(MonitorProviderCfg configuration)
throws ConfigException, InitializationException
{
// nothing to do
--
Gitblit v1.10.0