package chapter19.jmx.dynamic;
import java.lang.reflect.Constructor;
import java.util.Iterator;
import javax.management.Attribute;
import javax.management.AttributeList;
import javax.management.AttributeNotFoundException;
import javax.management.DynamicMBean;
import javax.management.InvalidAttributeValueException;
import javax.management.MBeanAttributeInfo;
import javax.management.MBeanConstructorInfo;
import javax.management.MBeanException;
import javax.management.MBeanInfo;
import javax.management.MBeanNotificationInfo;
import javax.management.MBeanOperationInfo;
import javax.management.MBeanParameterInfo;
import javax.management.ReflectionException;
/**
* 简单动态MBean
* - "State"属性:可读可写
* - "NbChanges"属性:只读
* - "reset()" :方法
* 注意:动态MBean必须定义一个public的构造函数,且必须通过MBeanInfo来管理
*/
public class SimpleDynamic implements DynamicMBean {
private String state = "initial state";
private int nbChanges = 0;
private int nbResets = 0;
private String dClassName = this.getClass().getName();
private String dDescription =
"Simple implementation of a dynamic MBean.";
public String getState() {
return state;
}
public void setState(String s) {
state = s;
nbChanges++;
}
public Integer getNbChanges() {
return new Integer(nbChanges);
}
public void reset() {
state = "initial state";
nbChanges = 0;
nbResets++;
}
public Integer getNbResets() {
return new Integer(nbResets);
}
private MBeanAttributeInfo[] dAttributes = new MBeanAttributeInfo[2];
private MBeanConstructorInfo[] dConstructors = new MBeanConstructorInfo[1];
private MBeanOperationInfo[] dOperations = new MBeanOperationInfo[1];
private MBeanInfo dMBeanInfo = null;
public SimpleDynamic() {
//建立辅助信息
buildDynamicMBeanInfo();
}
public Object getAttribute(String attribute_name)
throws AttributeNotFoundException, MBeanException, ReflectionException {
// 检查已知属性,调用已知方法
if (attribute_name.equals("State")) {
return getState();
}
if (attribute_name.equals("NbChanges")) {
return getNbChanges();
}
// 如果属性不可识别,抛出异常
throw (new AttributeNotFoundException("Cannot find " + attribute_name
+ " attribute in " + dClassName));
}
public void setAttribute(Attribute attribute)
throws AttributeNotFoundException, InvalidAttributeValueException,
MBeanException, ReflectionException {
String name = attribute.getName();
Object value = attribute.getValue();
if (name.equals("State")) {
try {
if ((Class.forName("java.lang.String")).isAssignableFrom(value
.getClass())) {
setState((String) value);
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
} else if (name.equals("NbChanges")) {
//由于"NbChanges" 属性是只读的,所以抛出异常
throw (new AttributeNotFoundException("Cannot set attribute " + name
+ " because it is read-only"));
}
}
public AttributeList getAttributes(String[] attributeNames) {
AttributeList resultList = new AttributeList();
if (attributeNames.length == 0) return resultList;
for (int i = 0; i < attributeNames.length; i++) {
try {
Object value = getAttribute((String) attributeNames[i]);
resultList.add(new Attribute(attributeNames[i], value));
} catch (Exception e) {
e.printStackTrace();
}
}
return (resultList);
}
public AttributeList setAttributes(AttributeList attributes) {
AttributeList resultList = new AttributeList();
if (attributes.isEmpty()) return resultList;
for (Iterator i = attributes.iterator(); i.hasNext();) {
Attribute attr = (Attribute) i.next();
try {
setAttribute(attr);
String name = attr.getName();
Object value = getAttribute(name);
resultList.add(new Attribute(name, value));
} catch (Exception e) {
e.printStackTrace();
}
}
return resultList;
}
/**
* 调用操作
*/
public Object invoke(String operationName, Object params[],
String signature[]) throws MBeanException, ReflectionException {
if (operationName.equals("reset")) {
reset();
}
return null;
}
public MBeanInfo getMBeanInfo() {
return (dMBeanInfo);
}
/**
* 构造辅助信息,这里用了很多辅助类
*/
private void buildDynamicMBeanInfo() {
//Bean属性信息
dAttributes[0] = new MBeanAttributeInfo("State",
"java.lang.String",
"State: state string.", true, true, false);
dAttributes[1] =
new MBeanAttributeInfo("NbChanges",
"java.lang.Integer",
"NbChanges: number of times the State string " +
"has been changed.",
true,
false, false);
//Bean构造函数信息...
Constructor[] constructors = this.getClass().getConstructors();
dConstructors[0] = new MBeanConstructorInfo(
"SimpleDynamic(): Constructs a SimpleDynamic object", constructors[0]);
//Bean操作和方法参数...
MBeanParameterInfo[] params = null;
dOperations[0] = new MBeanOperationInfo(
"reset",
"reset(): reset State and NbChanges attributes to their initial values",
params, "void", MBeanOperationInfo.ACTION);
dMBeanInfo = new MBeanInfo(dClassName, dDescription, dAttributes,
dConstructors, dOperations, new MBeanNotificationInfo[0]);
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
精通spring源代码精通spring源代码
共352个文件
java:332个
xml:10个
emptydir:6个
需积分: 14 14 下载量 164 浏览量
2010-08-25
21:20:04
上传
评论
收藏 169KB RAR 举报
温馨提示
精通spring源代码精通spring源代码精通spring源代码精通spring源代码精通spring源代码精通spring源代码
资源推荐
资源详情
资源评论
收起资源包目录
精通spring源代码精通spring源代码 (352个子文件)
TransactionAspect.aj 687B
SecurityAspect.aj 479B
ProductComparableAspect.aj 253B
ProductValidateAspect.aj 225B
.emptyDir 158B
.emptyDir 158B
.emptyDir 158B
.emptyDir 158B
.emptyDir 158B
.emptyDir 158B
SimpleDynamic.java 5KB
ViewCartControllerTest.java 5KB
MoneyManagerFatClient.java 4KB
BombStaticPointcutUsage.java 4KB
JdbcTemplateUsage.java 4KB
SignonControllerTest.java 4KB
MoneyManagerThinnerClient.java 4KB
DynamicAgent.java 4KB
AOPHandler.java 3KB
Server.java 3KB
CategoryDaoPostgresImpl.java 2KB
Client.java 2KB
MessageSupportFactory.java 2KB
OrderedValidatableMixinIntroAdvice.java 2KB
PetStoreFacadeTest.java 2KB
NonPoolingStrategy.java 2KB
ActionController.java 2KB
JdbcAbstractTemplate.java 2KB
SongPdfPage.java 2KB
BeanWrapperUsage.java 2KB
ConstructorArgumentResolution.java 2KB
SongXlsPage.java 2KB
BombDynamicPointcutAdvisor.java 2KB
SecurityProxyAspect.java 2KB
HtmlOrPlainTextMailSender.java 2KB
VirtualProxyUsage.java 2KB
EmployeeValidator.java 2KB
LoggingProxyAspect.java 2KB
PetStoreFacadeTransactionTest.java 2KB
UserDao.java 2KB
NonOOThinkingAndReuse.java 2KB
ResourceLocator.java 2KB
AwareBean.java 2KB
ImageIconProxy.java 2KB
BeanUsage.java 2KB
HelloWorldWithSpringDIUsage.java 2KB
HelloWorldWithSpringUsage.java 2KB
SFSBLocalTestServlet.java 1KB
MySpringBeanFactoryHolderImpl.java 1KB
Category.java 1KB
ProductDaoImpl.java 1KB
HibernateStockDao.java 1KB
MoneyManagerServiceBean.java 1KB
ObjectProxyFactory.java 1KB
BombDynamicPointcutUsage.java 1KB
BeanFactoryPropPlaceHolderUsage.java 1KB
MessageSourceUsage.java 1KB
MultiHtmlMailSender.java 1KB
XmlSongFinderWithConstructor.java 1KB
CronUsingCalendarUsage.java 1KB
HelloNotifiAgent.java 1KB
UserMappingQuery.java 1KB
TextMailSender.java 1KB
LoginAction.java 1KB
LoginAction.java 1KB
HibernateUsage.java 1KB
ProgrammaticUsage.java 1KB
EmailBean.java 1KB
SimpleStandard.java 1KB
HelloStandAloneAgent.java 1KB
HibernateSessionFactory.java 1KB
BeanFactoryDemoUsage.java 1KB
DIFactory.java 1KB
BeanFactoryPropOverrideUsage.java 1KB
JobPersistenceWithSpringUsage.java 1KB
DeclarativeUsage.java 1KB
BusinessAopProgrammaticUsage.java 1KB
PerformanceAroundAdvice.java 1KB
SongPage.java 1KB
MoneyManagerBean.java 1KB
MyFormatter.java 1KB
BusinessLogic.java 1KB
BeanExposeToJMXUsage.java 1KB
ContextInjectResourceLocator.java 1KB
InvocationInfo.java 1KB
Home.java 1KB
MBeanAutoDetectUsage.java 1KB
DAOUsage.java 1KB
FactorySingletonRegistry.java 1KB
MyLookUpBean.java 1KB
BusinessLogicUnAop.java 1KB
Home.java 1KB
HelloNotifi.java 1KB
FactorySingletonRegistryUsage.java 1KB
MyThrowsAdvice.java 1KB
JMXHtmlConsoleAgent.java 1KB
SecurityManager.java 1KB
TextMailSenderJavaMailImpl.java 1KB
Person.java 1023B
SongPageController.java 998B
共 352 条
- 1
- 2
- 3
- 4
资源评论
skool
- 粉丝: 4
- 资源: 10
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功