185 lines
6.1 KiB
Java
185 lines
6.1 KiB
Java
|
/*
|
||
|
* Copyright 2003-2005 Sun Microsystems, Inc. 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.
|
||
|
*
|
||
|
* 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
||
|
* CA 95054 USA or visit www.sun.com if you need additional information or
|
||
|
* have any questions.
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* Simple definition of a standard MBean, named "SimpleStandard".
|
||
|
*
|
||
|
* The "SimpleStandard" standard MBean shows how to expose attributes and
|
||
|
* operations for management by implementing its corresponding
|
||
|
* "SimpleStandardMBean" management interface.
|
||
|
*
|
||
|
* This MBean has two attributes and one operation exposed
|
||
|
* for management by a JMX agent:
|
||
|
* - the read/write "State" attribute,
|
||
|
* - the read only "NbChanges" attribute,
|
||
|
* - the "reset()" operation.
|
||
|
*
|
||
|
* This object also has one property and one method not exposed
|
||
|
* for management by a JMX agent:
|
||
|
* - the "NbResets" property,
|
||
|
* - the "getNbResets()" method.
|
||
|
*/
|
||
|
|
||
|
import java.security.AccessControlContext;
|
||
|
import java.security.AccessController;
|
||
|
import java.security.Principal;
|
||
|
import java.util.Set;
|
||
|
import javax.management.AttributeChangeNotification;
|
||
|
import javax.management.NotificationBroadcasterSupport;
|
||
|
import javax.management.remote.JMXPrincipal;
|
||
|
import javax.security.auth.Subject;
|
||
|
|
||
|
public class SimpleStandard
|
||
|
extends NotificationBroadcasterSupport
|
||
|
implements SimpleStandardMBean {
|
||
|
|
||
|
/*
|
||
|
* -----------------------------------------------------
|
||
|
* CONSTRUCTORS
|
||
|
* -----------------------------------------------------
|
||
|
*/
|
||
|
|
||
|
public SimpleStandard(String principalName) {
|
||
|
this.principalName = principalName;
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
* -----------------------------------------------------
|
||
|
* IMPLEMENTATION OF THE SimpleStandardMBean INTERFACE
|
||
|
* -----------------------------------------------------
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* Getter: get the "State" attribute of the "SimpleStandard" standard MBean.
|
||
|
*
|
||
|
* @return the current value of the "State" attribute.
|
||
|
*/
|
||
|
public String getState() {
|
||
|
checkSubject();
|
||
|
return state;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Setter: set the "State" attribute of the "SimpleStandard" standard MBean.
|
||
|
*
|
||
|
* @param <VAR>s</VAR> the new value of the "State" attribute.
|
||
|
*/
|
||
|
public void setState(String s) {
|
||
|
checkSubject();
|
||
|
state = s;
|
||
|
nbChanges++;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Getter: get the "NbChanges" attribute of the "SimpleStandard" standard
|
||
|
* MBean.
|
||
|
*
|
||
|
* @return the current value of the "NbChanges" attribute.
|
||
|
*/
|
||
|
public int getNbChanges() {
|
||
|
checkSubject();
|
||
|
return nbChanges;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Operation: reset to their initial values the "State" and "NbChanges"
|
||
|
* attributes of the "SimpleStandard" standard MBean.
|
||
|
*/
|
||
|
public void reset() {
|
||
|
checkSubject();
|
||
|
AttributeChangeNotification acn =
|
||
|
new AttributeChangeNotification(this,
|
||
|
0,
|
||
|
0,
|
||
|
"NbChanges reset",
|
||
|
"NbChanges",
|
||
|
"Integer",
|
||
|
new Integer(nbChanges),
|
||
|
new Integer(0));
|
||
|
state = "initial state";
|
||
|
nbChanges = 0;
|
||
|
nbResets++;
|
||
|
sendNotification(acn);
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
* -----------------------------------------------------
|
||
|
* METHOD NOT EXPOSED FOR MANAGEMENT BY A JMX AGENT
|
||
|
* -----------------------------------------------------
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* Return the "NbResets" property.
|
||
|
* This method is not a Getter in the JMX sense because
|
||
|
* it is not exposed in the "SimpleStandardMBean" interface.
|
||
|
*
|
||
|
* @return the current value of the "NbResets" property.
|
||
|
*/
|
||
|
public int getNbResets() {
|
||
|
return nbResets;
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
* ---------------
|
||
|
* PRIVATE METHODS
|
||
|
* ---------------
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* Check that the principal contained in the Subject is of
|
||
|
* type JMXPrincipal and refers to the principalName identity.
|
||
|
*/
|
||
|
private void checkSubject() {
|
||
|
AccessControlContext acc = AccessController.getContext();
|
||
|
Subject subject = Subject.getSubject(acc);
|
||
|
Set principals = subject.getPrincipals();
|
||
|
Principal principal = (Principal) principals.iterator().next();
|
||
|
if (!(principal instanceof JMXPrincipal))
|
||
|
throw new SecurityException("Authenticated subject contains " +
|
||
|
"invalid principal type = " +
|
||
|
principal.getClass().getName());
|
||
|
String identity = principal.getName();
|
||
|
if (!identity.equals(principalName))
|
||
|
throw new SecurityException("Authenticated subject contains " +
|
||
|
"invalid principal name = " + identity);
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
* -----------------------------------------------------
|
||
|
* ATTRIBUTES ACCESSIBLE FOR MANAGEMENT BY A JMX AGENT
|
||
|
* -----------------------------------------------------
|
||
|
*/
|
||
|
|
||
|
private String state = "initial state";
|
||
|
private int nbChanges = 0;
|
||
|
|
||
|
/*
|
||
|
* -----------------------------------------------------
|
||
|
* PROPERTY NOT ACCESSIBLE FOR MANAGEMENT BY A JMX AGENT
|
||
|
* -----------------------------------------------------
|
||
|
*/
|
||
|
|
||
|
private int nbResets = 0;
|
||
|
private String principalName;
|
||
|
}
|