diff -r 957656314d82 -r d9f500808d8a jdk/src/jdk.snmp/share/classes/com/sun/jmx/snmp/agent/SnmpMibAgent.java --- a/jdk/src/jdk.snmp/share/classes/com/sun/jmx/snmp/agent/SnmpMibAgent.java Mon Oct 27 17:54:00 2014 +0530 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,768 +0,0 @@ -/* - * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - - -package com.sun.jmx.snmp.agent; - - - -// java imports -// -import java.io.Serializable; -import java.util.Vector; -import java.util.Enumeration; - -// jmx imports -// -import javax.management.MBeanServer; -import javax.management.MBeanRegistration; -import javax.management.ObjectName; -import javax.management.InstanceNotFoundException; -import javax.management.ServiceNotFoundException; -import javax.management.ReflectionException; -import javax.management.MBeanException; -import com.sun.jmx.snmp.SnmpVarBind; -import com.sun.jmx.snmp.SnmpDefinitions; -import com.sun.jmx.snmp.SnmpStatusException; -import com.sun.jmx.snmp.SnmpPdu; -import com.sun.jmx.snmp.SnmpOid; -import com.sun.jmx.snmp.SnmpEngine; - -/** - * Abstract class for representing an SNMP agent. - * - * The class is used by the SNMP protocol adaptor as the entry point in - * the SNMP agent to query. - * - *
This API is a Sun Microsystems internal API and is subject - * to change without notice.
- */ -@SuppressWarnings("serial") // JDK implementation class -public abstract class SnmpMibAgent - implements SnmpMibAgentMBean, MBeanRegistration, Serializable { - - /** - * Default constructor. - */ - public SnmpMibAgent() { - } - - // --------------------------------------------------------------------- - // PUBLIC METHODS - //---------------------------------------------------------------------- - - /** - * Initializes the MIB (with no registration of the MBeans into the - * MBean server). - * - * @exception IllegalAccessException The MIB can not be initialized. - */ - public abstract void init() throws IllegalAccessException; - - /** - * Initializes the MIB but each single MBean representing the MIB - * is inserted into the MBean server. - * - * @param server The MBean server to register the service with. - * @param name The object name. - * - * @return The name of the SNMP MIB registered. - * - * @exception java.lang.Exception - */ - @Override - public abstract ObjectName preRegister(MBeanServer server, - ObjectName name) - throws java.lang.Exception; - - /** - * Not used in this context. - */ - @Override - public void postRegister (Boolean registrationDone) { - } - - /** - * Not used in this context. - */ - @Override - public void preDeregister() throws java.lang.Exception { - } - - /** - * Not used in this context. - */ - @Override - public void postDeregister() { - } - - /** - * Processes aget
operation.
- * This method must update the SnmpVarBinds contained in the
- * {@link SnmpMibRequest} req parameter.
- *
- * @param req The SnmpMibRequest object holding the list of variable to
- * be retrieved. This list is composed of
- * SnmpVarBind
objects.
- *
- * @exception SnmpStatusException An error occurred during the operation.
- */
- @Override
- public abstract void get(SnmpMibRequest req)
- throws SnmpStatusException;
-
- /**
- * Processes a getNext
operation.
- * This method must update the SnmpVarBinds contained in the
- * {@link SnmpMibRequest} req parameter.
- *
- * @param req The SnmpMibRequest object holding the list of
- * OIDs from which the next variables should be retrieved.
- * This list is composed of SnmpVarBind
objects.
- *
- * @exception SnmpStatusException An error occurred during the operation.
- */
- @Override
- public abstract void getNext(SnmpMibRequest req)
- throws SnmpStatusException;
-
- /**
- * Processes a getBulk
operation.
- * This method must update the SnmpVarBinds contained in the
- * {@link SnmpMibRequest} req parameter.
- *
- * @param req The SnmpMibRequest object holding the list of variable to
- * be retrieved. This list is composed of
- * SnmpVarBind
objects.
- *
- * @param nonRepeat The number of variables, starting with the first
- * variable in the variable-bindings, for which a single
- * lexicographic successor is requested.
- *
- * @param maxRepeat The number of lexicographic successors requested
- * for each of the last R variables. R is the number of variables
- * following the first nonRepeat
variables for which
- * multiple lexicographic successors are requested.
- *
- * @exception SnmpStatusException An error occurred during the operation.
- */
- @Override
- public abstract void getBulk(SnmpMibRequest req, int nonRepeat,
- int maxRepeat)
- throws SnmpStatusException;
-
- /**
- * Processes a set
operation.
- * This method must update the SnmpVarBinds contained in the
- * {@link SnmpMibRequest} req parameter.
- * This method is called during the second phase of the SET two-phase
- * commit.
- *
- * @param req The SnmpMibRequest object holding the list of variable to
- * be set. This list is composed of
- * SnmpVarBind
objects.
- *
- * @exception SnmpStatusException An error occurred during the operation.
- * Throwing an exception in this method will break the
- * atomicity of the SET operation. Care must be taken so that
- * the exception is thrown in the {@link #check(SnmpMibRequest)}
- * method instead.
- */
- @Override
- public abstract void set(SnmpMibRequest req)
- throws SnmpStatusException;
-
-
- /**
- * Checks if a set
operation can be performed.
- * If the operation can not be performed, the method should throw an
- * SnmpStatusException
.
- * This method is called during the first phase of the SET two-phase
- * commit.
- *
- * @param req The SnmpMibRequest object holding the list of variable to
- * be set. This list is composed of
- * SnmpVarBind
objects.
- *
- * @exception SnmpStatusException The set
operation
- * cannot be performed.
- */
- @Override
- public abstract void check(SnmpMibRequest req)
- throws SnmpStatusException;
-
- /**
- * Gets the root object identifier of the MIB.
- * The root object identifier is the object identifier uniquely
- * identifying the MIB.
- *
- * @return The root object identifier.
- */
- public abstract long[] getRootOid();
-
- // ---------------------------------------------------------------------
- // GETTERS AND SETTERS
- // ---------------------------------------------------------------------
-
- /**
- * Gets the reference to the MBean server in which the SNMP MIB is
- * registered.
- *
- * @return The MBean server or null if the MIB is not registered in any
- * MBean server.
- */
- @Override
- public MBeanServer getMBeanServer() {
- return server;
- }
-
- /**
- * Gets the reference to the SNMP protocol adaptor to which the MIB is
- * bound.
- *
- * @return The SNMP MIB handler.
- */
- @Override
- public SnmpMibHandler getSnmpAdaptor() {
- return adaptor;
- }
-
- /**
- * Sets the reference to the SNMP protocol adaptor through which the MIB
- * will be SNMP accessible and add this new MIB in the SNMP MIB handler.
- *
- * @param stack The SNMP MIB handler.
- */
- @Override
- public void setSnmpAdaptor(SnmpMibHandler stack) {
- if (adaptor != null) {
- adaptor.removeMib(this);
- }
- adaptor = stack;
- if (adaptor != null) {
- adaptor.addMib(this);
- }
- }
-
- /**
- * Sets the reference to the SNMP protocol adaptor through which the MIB
- * will be SNMP accessible and add this new MIB in the SNMP MIB handler.
- * This method is to be called to set a specific agent to a specific OID. This can be useful when dealing with MIB overlapping.
- * Some OID can be implemented in more than one MIB. In this case, the OID nearest the agent will be used on SNMP operations.
- * @param stack The SNMP MIB handler.
- * @param oids The set of OIDs this agent implements.
- *
- * @since 1.5
- */
- @Override
- public void setSnmpAdaptor(SnmpMibHandler stack, SnmpOid[] oids) {
- if (adaptor != null) {
- adaptor.removeMib(this);
- }
- adaptor = stack;
- if (adaptor != null) {
- adaptor.addMib(this, oids);
- }
- }
-
- /**
- * Sets the reference to the SNMP protocol adaptor through which the MIB
- * will be SNMP accessible and adds this new MIB in the SNMP MIB handler.
- * Adds a new contextualized MIB in the SNMP MIB handler.
- *
- * @param stack The SNMP MIB handler.
- * @param contextName The MIB context name. If null is passed, will be registered in the default context.
- *
- * @exception IllegalArgumentException If the parameter is null.
- *
- * @since 1.5
- */
- @Override
- public void setSnmpAdaptor(SnmpMibHandler stack, String contextName) {
- if (adaptor != null) {
- adaptor.removeMib(this, contextName);
- }
- adaptor = stack;
- if (adaptor != null) {
- adaptor.addMib(this, contextName);
- }
- }
- /**
- * Sets the reference to the SNMP protocol adaptor through which the MIB
- * will be SNMP accessible and adds this new MIB in the SNMP MIB handler.
- * Adds a new contextualized MIB in the SNMP MIB handler.
- *
- * @param stack The SNMP MIB handler.
- * @param contextName The MIB context name. If null is passed, will be registered in the default context.
- * @param oids The set of OIDs this agent implements.
- * @exception IllegalArgumentException If the parameter is null.
- *
- * @since 1.5
- */
- @Override
- public void setSnmpAdaptor(SnmpMibHandler stack,
- String contextName,
- SnmpOid[] oids) {
- if (adaptor != null) {
- adaptor.removeMib(this, contextName);
- }
- adaptor = stack;
- if (adaptor != null) {
- adaptor.addMib(this, contextName, oids);
- }
- }
-
- /**
- * Gets the object name of the SNMP protocol adaptor to which the MIB
- * is bound.
- *
- * @return The name of the SNMP protocol adaptor.
- */
- @Override
- public ObjectName getSnmpAdaptorName() {
- return adaptorName;
- }
-
- /**
- * Sets the reference to the SNMP protocol adaptor through which the MIB
- * will be SNMP accessible and add this new MIB in the SNMP MIB handler
- * associated to the specified name
.
- *
- * @param name The name of the SNMP protocol adaptor.
- *
- * @exception InstanceNotFoundException The SNMP protocol adaptor does
- * not exist in the MBean server.
- *
- * @exception ServiceNotFoundException This SNMP MIB is not registered
- * in the MBean server or the requested service is not supported.
- */
- @Override
- public void setSnmpAdaptorName(ObjectName name)
- throws InstanceNotFoundException, ServiceNotFoundException {
-
- if (server == null) {
- throw new ServiceNotFoundException(mibName + " is not registered in the MBean server");
- }
- // First remove the reference on the old adaptor server.
- //
- if (adaptor != null) {
- adaptor.removeMib(this);
- }
-
- // Then update the reference to the new adaptor server.
- //
- Object[] params = {this};
- String[] signature = {"com.sun.jmx.snmp.agent.SnmpMibAgent"};
- try {
- adaptor = (SnmpMibHandler)(server.invoke(name, "addMib", params,
- signature));
- } catch (InstanceNotFoundException e) {
- throw new InstanceNotFoundException(name.toString());
- } catch (ReflectionException e) {
- throw new ServiceNotFoundException(name.toString());
- } catch (MBeanException e) {
- // Should never occur...
- }
-
- adaptorName = name;
- }
- /**
- * Sets the reference to the SNMP protocol adaptor through which the MIB
- * will be SNMP accessible and add this new MIB in the SNMP MIB handler
- * associated to the specified name
.
- * This method is to be called to set a specific agent to a specific OID. This can be useful when dealing with MIB overlapping.
- * Some OID can be implemented in more than one MIB. In this case, the OID nearer agent will be used on SNMP operations.
- * @param name The name of the SNMP protocol adaptor.
- * @param oids The set of OIDs this agent implements.
- * @exception InstanceNotFoundException The SNMP protocol adaptor does
- * not exist in the MBean server.
- *
- * @exception ServiceNotFoundException This SNMP MIB is not registered
- * in the MBean server or the requested service is not supported.
- *
- * @since 1.5
- */
- @Override
- public void setSnmpAdaptorName(ObjectName name, SnmpOid[] oids)
- throws InstanceNotFoundException, ServiceNotFoundException {
-
- if (server == null) {
- throw new ServiceNotFoundException(mibName + " is not registered in the MBean server");
- }
- // First remove the reference on the old adaptor server.
- //
- if (adaptor != null) {
- adaptor.removeMib(this);
- }
-
- // Then update the reference to the new adaptor server.
- //
- Object[] params = {this, oids};
- String[] signature = {"com.sun.jmx.snmp.agent.SnmpMibAgent",
- oids.getClass().getName()};
- try {
- adaptor = (SnmpMibHandler)(server.invoke(name, "addMib", params,
- signature));
- } catch (InstanceNotFoundException e) {
- throw new InstanceNotFoundException(name.toString());
- } catch (ReflectionException e) {
- throw new ServiceNotFoundException(name.toString());
- } catch (MBeanException e) {
- // Should never occur...
- }
-
- adaptorName = name;
- }
- /**
- * Sets the reference to the SNMP protocol adaptor through which the MIB
- * will be SNMP accessible and add this new MIB in the SNMP MIB handler
- * associated to the specified name
.
- *
- * @param name The name of the SNMP protocol adaptor.
- * @param contextName The MIB context name. If null is passed, will be registered in the default context.
- * @exception InstanceNotFoundException The SNMP protocol adaptor does
- * not exist in the MBean server.
- *
- * @exception ServiceNotFoundException This SNMP MIB is not registered
- * in the MBean server or the requested service is not supported.
- *
- * @since 1.5
- */
- @Override
- public void setSnmpAdaptorName(ObjectName name, String contextName)
- throws InstanceNotFoundException, ServiceNotFoundException {
-
- if (server == null) {
- throw new ServiceNotFoundException(mibName + " is not registered in the MBean server");
- }
-
- // First remove the reference on the old adaptor server.
- //
- if (adaptor != null) {
- adaptor.removeMib(this, contextName);
- }
-
- // Then update the reference to the new adaptor server.
- //
- Object[] params = {this, contextName};
- String[] signature = {"com.sun.jmx.snmp.agent.SnmpMibAgent", "java.lang.String"};
- try {
- adaptor = (SnmpMibHandler)(server.invoke(name, "addMib", params,
- signature));
- } catch (InstanceNotFoundException e) {
- throw new InstanceNotFoundException(name.toString());
- } catch (ReflectionException e) {
- throw new ServiceNotFoundException(name.toString());
- } catch (MBeanException e) {
- // Should never occur...
- }
-
- adaptorName = name;
- }
-
- /**
- * Sets the reference to the SNMP protocol adaptor through which the MIB
- * will be SNMP accessible and add this new MIB in the SNMP MIB handler
- * associated to the specified name
.
- *
- * @param name The name of the SNMP protocol adaptor.
- * @param contextName The MIB context name. If null is passed, will be registered in the default context.
- * @param oids The set of OIDs this agent implements.
- * @exception InstanceNotFoundException The SNMP protocol adaptor does
- * not exist in the MBean server.
- *
- * @exception ServiceNotFoundException This SNMP MIB is not registered
- * in the MBean server or the requested service is not supported.
- *
- * @since 1.5
- */
- @Override
- public void setSnmpAdaptorName(ObjectName name,
- String contextName, SnmpOid[] oids)
- throws InstanceNotFoundException, ServiceNotFoundException {
-
- if (server == null) {
- throw new ServiceNotFoundException(mibName + " is not registered in the MBean server");
- }
-
- // First remove the reference on the old adaptor server.
- //
- if (adaptor != null) {
- adaptor.removeMib(this, contextName);
- }
-
- // Then update the reference to the new adaptor server.
- //
- Object[] params = {this, contextName, oids};
- String[] signature = {"com.sun.jmx.snmp.agent.SnmpMibAgent", "java.lang.String", oids.getClass().getName()};
- try {
- adaptor = (SnmpMibHandler)(server.invoke(name, "addMib", params,
- signature));
- } catch (InstanceNotFoundException e) {
- throw new InstanceNotFoundException(name.toString());
- } catch (ReflectionException e) {
- throw new ServiceNotFoundException(name.toString());
- } catch (MBeanException e) {
- // Should never occur...
- }
-
- adaptorName = name;
- }
-
- /**
- * Indicates whether or not the MIB module is bound to a SNMP protocol
- * adaptor.
- * As a reminder, only bound MIBs can be accessed through SNMP protocol
- * adaptor.
- *
- * @return true
if the MIB module is bound,
- * false
otherwise.
- */
- @Override
- public boolean getBindingState() {
- if (adaptor == null)
- return false;
- else
- return true;
- }
-
- /**
- * Gets the MIB name.
- *
- * @return The MIB name.
- */
- @Override
- public String getMibName() {
- return mibName;
- }
-
- /**
- * This is a factory method for creating new SnmpMibRequest objects.
- * @param reqPdu The received PDU.
- * @param vblist The vector of SnmpVarBind objects in which the
- * MIB concerned by this request is involved.
- * @param version The protocol version of the SNMP request.
- * @param userData User allocated contextual data.
- *
- * @return A new SnmpMibRequest object.
- *
- * @since 1.5
- **/
- public static SnmpMibRequest newMibRequest(SnmpPdu reqPdu,
- VectorgetBulk
operation using call to
- * getNext
.
- * The method implements the getBulk
operation by calling
- * appropriately the getNext
method.
- *
- * @param req The SnmpMibRequest containing the variable list to be
- * retrieved.
- *
- * @param nonRepeat The number of variables, starting with the first
- * variable in the variable-bindings, for which a single lexicographic
- * successor is requested.
- *
- * @param maxRepeat The number of lexicographic successors
- * requested for each of the last R variables. R is the number of
- * variables following the first nonRepeat variables for which
- * multiple lexicographic successors are requested.
- *
- * @return The variable list containing returned values.
- *
- * @exception SnmpStatusException An error occurred during the operation.
- */
- void getBulkWithGetNext(SnmpMibRequest req, int nonRepeat, int maxRepeat)
- throws SnmpStatusException {
- final Vector