简体   繁体   English

javax.management.InstanceNotFoundException

[英]javax.management.InstanceNotFoundException

I am relatively new to Managed Beans in java and i am trying to figure out why i am getting an exception.After running Main.java,i get the exception pasted at the bottom.I tried to view it on jconsole but it doesnt seem to be appearing.What iam i missing? 我对Java中的Managed Beans比较陌生,我试图弄清楚为什么我会得到异常。运行Main.java之后,我将异常粘贴到了底部。我试图在jconsole上查看它,但似乎没有出现。我想念的是什么?

Hello.java 你好

package com.mbeans;

public class Hello implements HelloMBean {

private final String name = "Reginald"; 
private int cacheSize = DEFAULT_CACHE_SIZE; 
private static final int 
DEFAULT_CACHE_SIZE = 200; 

public void sayHello() { 
System.out.println("hello, world"); 
} 

public int add(int x, int y) { 
return x + y; 
} 

public String getName() { 
return this.name; 
}  

public int getCacheSize() { 
return this.cacheSize; 
} 

public synchronized void setCacheSize(int size) {

this.cacheSize = size; 
System.out.println("Cache size now " + this.cacheSize); 
} 

}

HelloMBean.java HelloMBean.java

package com.mbeans;

public interface HelloMBean { 

public void sayHello(); 
public int add(int x, int y); 

public String getName(); 

public int getCacheSize(); 
public void setCacheSize(int size); 
} 

Main.java Main.java

package com.mbeans;

import java.lang.management.*; 
import javax.management.*; 

public class Main { 

public static void main(String[] args) 
throws Exception { 


Worker worker = new Worker();

} 
} 

Worker.java Worker.java

package com.mbeans;

import java.lang.management.ManagementFactory;
import java.util.logging.Level;

import javax.management.MBeanServer;
import javax.management.MBeanServerInvocationHandler;
import javax.management.MalformedObjectNameException;
import javax.management.ObjectName;


public class Worker {


MBeanServer mbs; 
HelloMBean mbean;

public Worker()
{

this.mbs = ManagementFactory.getPlatformMBeanServer();
ObjectName name = null;
try
{
name = new ObjectName("com.mbeans:type=HelloMBean");
}
catch (MalformedObjectNameException ex)
{
ex.printStackTrace();
}

try
{

this.mbean = ((HelloMBean)MBeanServerInvocationHandler.newProxyInstance(this.mbs, name, HelloMBean.class, false));


}
catch(Exception e)
{
e.printStackTrace();
}


System.out.println("online : " +this.mbean.add(3, 4));


}

}

This is the exception i am getting 这是我得到的例外

Exception in thread "main" java.lang.reflect.UndeclaredThrowableException
at com.sun.proxy.$Proxy2.add(Unknown Source)
at com.mbeans.Worker.<init>(Worker.java:45)
at com.mbeans.Main.main(Main.java:12)
Caused by: javax.management.InstanceNotFoundException: com.mbeans:type=HelloMBean
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.getMBean(Unknown Source)
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(Unknown Source)
at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(Unknown Source)
at javax.management.MBeanServerInvocationHandler.invoke(Unknown Source)
... 3 more

You have not registered your MBean. 您尚未注册 MBean。 It's probably not a best practice to do so, but you could add the registration to your Worker constructor just to get things going. 这样做可能不是最佳做法,但是您可以将注册添加到Worker构造函数中只是为了使事情顺利进行。 Add this line to your constructor after the creation of the ObjectName: 创建ObjectName之后,将此行添加到构造函数中:

this.mbs.registerMBean(this, name);

(You will need to add catches for a handful of new exceptions) (您将需要添加捕获以获取一些新的例外)

_------ _------

Sorry. 抱歉。 Did not read carefully enough. 没有仔细阅读。 You need to register an instance of Hello. 您需要注册一个Hello实例。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM