mbeans に問題があります。単純な mbean を作成し、実行されるデフォルトの mBeanServer に登録しました (eclipse または java -jar mbean.jar を介して)。単純なクエリで登録された mbean を見つけようとすると、同じプロセスで実行されます。
for (ObjectInstance instance : mbs.queryMBeans(ObjectNameMbean, null)) {
System.out.println(instance.toString());
}
クエリは自分の 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 を登録するための唯一の目的があります。そのため、この mbean を検索する別のプロセスを開始しますが、何もしません。jboss を使用していません)しかし、ローカル Java 仮想マシンですが、私のスコープは、この単純なアプリケーションを 1 つの 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 (Hello によって実装)
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 が見つかりません。
プロジェクトリンク:こちら!
何か案が?