我有一個關於mbeans的問題。我已經創建了一個簡單的mbean,並且我已經在運行的默認mBeanServer(通過eclipse或java -jar mbean.jar)上註冊它,並且在同一個過程中,如果我試圖通過簡單的查詢註冊mbean:Mbean已註冊但未在mbean中找到服務器
for (ObjectInstance instance : mbs.queryMBeans(ObjectNameMbean, null)) {
System.out.println(instance.toString());
}
查詢retuerns我的mbean,但如果我啓動另一個進程,並嘗試搜索此mbean註冊找不到mbeas!爲什麼?
的計算策略是:(進程正在運行)
public static void main(String[] args) throws Exception
{
MBeanServer mbeanServer =ManagementFactory.getPlatformMBeanServer();
ObjectName objectName = new ObjectName(ObjectNameMbean);
Simple simple = new Simple (1, 0);
mbeanServer.registerMBean(simple, objectName);
while (true)
{
wait (Is this necessary?)
}
}
所以這是運行(即具有註冊表的MBean上唯一pourpose第一個過程,因爲有希望讀另一個進程這些信息 因此,我開始另一個進程來搜索這個mbean,但沒有任何東西 我沒有使用jboss,但本地Java虛擬機,但我的範圍是部署這個簡單的應用程序在一個ejb(自動啓動),另一個ejb將讀取所有信息。 所有的建議都非常感謝。
這個例子應該是比較有用:
對象你好:
public class Hello implements HelloMBean {
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);
}
private final String name = "Reginald";
private int cacheSize = DEFAULT_CACHE_SIZE;
private static final int DEFAULT_CACHE_SIZE = 200;
}
接口爲helloBean(由你好實現)
public interface HelloMBean {
public void sayHello();
public int add(int x, int y);
public String getName();
public int getCacheSize();
public void setCacheSize(int size);
}
簡約爲主
import java.lang.management.ManagementFactory;
import java.util.logging.Logger;
import javax.management.MBeanServer;
import javax.management.ObjectName;
public class Main {
static Logger aLog = Logger.getLogger("MBeanTest");
public static void main(String[] args) {
try{
MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
ObjectName name = new ObjectName("ApplicationDomain:type=Hello");
Hello mbean = new Hello();
mbs.registerMBean(mbean, name);
// System.out.println(mbs.getAttribute(name, "Name"));
aLog.info("Waiting forever...");
Thread.sleep(Long.MAX_VALUE);
}
catch(Exception x){
x.printStackTrace();
aLog.info("exception");
}
}
}
所以現在我有將該項目導出爲jar文件,並將其作爲「java -jar helloBean.jar」和通過eclipse我已經修改了主類讀取此讀取的信息(示例「名稱」屬性)通過使用相同的對象名用於註冊它。
主要爲:
public static void main(String[] args) {
try{
MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
ObjectName name = new ObjectName("ApplicationDomain:type=Hello");
System.out.println(mbs.getAttribute(name, "Name"));
}
catch(Exception x){
x.printStackTrace();
aLog.info("exception");
}
}
但沒有什麼,這個bean沒有找到。
項目鏈接:here!
有什麼想法?
等等......兩個不同的jvms? – Nicholas