blob: 35e13cdbbcb9fee0adeb56c3cf3ca69f1e7f3e89 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more contributor license
* agreements. See the NOTICE file distributed with this work for additional information regarding
* copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance with the License. You may obtain a
* copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
* or implied. See the License for the specific language governing permissions and limitations under
* the License.
*/
package org.apache.geode.admin.jmx;
import javax.management.MBeanServer;
import javax.management.MalformedObjectNameException;
import javax.management.ObjectName;
import org.apache.geode.LogWriter;
import org.apache.geode.admin.AdminDistributedSystem;
import org.apache.geode.admin.AdminException;
/**
* A server component that provides administration-related information about a GemFire distributed
* system via the Java Management Extension JMX API. When a JMX <code>Agent</code> is created, it
* registers an MBean that represents {@link #getObjectName itself}. Click
* <A href="doc-files/mbeans-descriptions.html">here</A> for a description of the attributes,
* operations, and notifications of this and other GemFire JMX MBeans.
*
* <P>
*
* The GemFire JMX Agent currently supports three JMX "adapters" through which clients can access
* the GemFire management beans: an "HTTP adapter" that allows a web browser client to view and
* modify management beans via HTTP or HTTPS, an "RMI adapter" that allows Java programs to access
* management beans using Remote Method Invocation, and an "SNMP adapter" that allows SNMP to access
* management beans. Information about configuring these adapters can be found in
* {@link AgentConfig}.
*
* <P>
*
* In most distributed caching architectures, JMX administration agents are run in their own
* processes. A stand-alone JMX agent is managed using the <code>agent</code> command line utility:
*
* <PRE>
* $ agent start
* </PRE>
*
* This class allows a GemFire application VM to host a JMX management agent. Architectures with
* "co-located" JMX agents reduce the number of overall proceses required. However, hosting a JMX
* management agent in the same VM as a GemFire application is not generally recommended because it
* adds extra burden to an application VM and in the event that the application VM exits the
* administration information will no longer be available.
*
* @see AgentConfig
* @see AgentFactory
*
* @since GemFire 4.0
* @deprecated as of 7.0 use the <code><a href=
* "{@docRoot}/org/apache/geode/management/package-summary.html">management</a></code>
* package instead
*/
public interface Agent {
/** Lookup name for RMIConnector when rmi-registry-enabled is true */
String JNDI_NAME = "/jmxconnector";
////////////////////// Instance Methods //////////////////////
/**
* Returns the configuration object for this JMX Agent.
*/
AgentConfig getConfig();
/**
* Starts this JMX Agent and its associated adapters. This method does not
* {@linkplain #connectToSystem connect} to the distributed system.
*/
void start();
/**
* Returns the JMX <code>MBeanServer</code> with which GemFire MBeans are registered or
* <code>null</code> if this <code>Agent</code> is not started.
*/
MBeanServer getMBeanServer();
/**
* {@linkplain #disconnectFromSystem Disconnects} from the distributed system and stops this JMX
* Agent and all of its associated adapters.
*/
void stop();
/**
* Returns the <code>ObjectName</code> of the JMX management bean that represents this agent or
* <code>null</code> if this <code>Agent</code> has not been started.
*/
ObjectName getObjectName();
/**
* Returns whether or not this JMX <code>Agent</code> is currently providing information about a
* distributed system.
*/
boolean isConnected();
/**
* Connects to the distributed system described by this <code>Agent</code>'s configuration.
*
* @return The object name of the system that the <code>Agent</code> is now connected to.
*/
ObjectName connectToSystem() throws AdminException, MalformedObjectNameException;
/**
* Returns the <code>AdminDistributedSystem</code> that underlies this JMX <code>Agent</code> or
* <code>null</code> is this agent is not {@linkplain #isConnected connected}.
*/
AdminDistributedSystem getDistributedSystem();
/**
* Returns the object name of the JMX MBean that represents the distributed system administered by
* this <code>Agent</code> or <code>null</code> if this <code>Agent</code> has not
* {@linkplain #connectToSystem connected} to the distributed system.
*/
ObjectName manageDistributedSystem() throws MalformedObjectNameException;
/**
* Disconnects this agent from the distributed system and unregisters the management beans that
* provided information about it. However, this agent's adapters are not stopped and it is
* possible to reconfigure this <code>Agent</code> to connect to another distributed system.
*/
void disconnectFromSystem();
/**
* Saves the configuration for this <code>Agent</code> to the file specified by @link
* AgentConfig#getPropertyFile.
*/
void saveProperties();
/**
* Returns the <code>LogWriter</code> used for logging information.
*/
LogWriter getLogWriter();
}