2012-03-05 14 views
4

監視対象のサーブレットがすべて実行されているTomcatの同じインスタンスで実行されるJMXマネージャとしてサーブレットを実装しています。JConsoleを開いたときに監視対象のサーブレットのデータを見ることができます。私のマネージャーサーブレット内からは、私はこのように、このコードを使用して、私は、監視サーブレットで作成したものを含めて、利用可能な標準のMBeanのすべてを列挙することができますMBean経由でデータを取得する方法

JMXServiceURL url = new JMXServiceURL(  "service:jmx:rmi://localhost:1099/jndi/rmi://localhost:1099/jmxrmi"); 

mConnector = JMXConnectorFactory.connect(url); 
mMBSC = mConnector.getMBeanServerConnection(); 
mObjectName = new ObjectName("com.blahCompany.blah.blah:type=BlahBlah"); 

// just looking for one specific bean 
Set<ObjectName> myMbean = mMBSC.queryNames(mObjectName, null); 

if(myMBean.size() == 1) // I know it exists 
{ 
    MBeanInfo mbeanInfo = mMBSC.getMBeanInfo(<ObjectName extracted from Set>); 
    MBeanAttributeInfo[] mbeanAttributeInfos = mbeanInfo.getAttributes(); 

    for(MBeanAttributeInfo attribInfo : mbeanAttributeInfos) 
    { 
     if(attribInfo.isReadable()) 
     { 
      String attribName = attribInfo.getName(); 
      String attribReturnType = attribInfo.getType(); 

      // The data's somewhere ... where???? 
      // In the MBeanInfo? 
      // In the MBeanAttributeInfo?? 
     } 
    } 
} 

を問題は、私にはわからない、どのようにこれらのMBeanから実際にデータを抽出します。他の誰も尋ねていないようだから、答えは明らかに間違っているはずですが、わかりやすく見落とす贈り物があります。あなたの助けに感謝します。

Object value = mMBSC.getAttribute(objectName, attributeName); 

またはMBeanインタフェースのインスタンスを取得し、あなたはそれをそのようにアクセスすることを可能にするプロキシオブジェクトを作成します。

ビル

+0

mbeanサーバーへのローカルアクセスに関するメモを使用して回答を更新しました。あなたの状況からわかるように、URL経由で接続する必要はありません。私はパフォーマンスがリモート接続を使用するよりも良いと思います。 –

答えて

5

あなたがする必要があるのは、以下のようなものです。これを行う方法に関するチュートリアルはここにあります:http://docs.oracle.com/javase/tutorial/jmx/remote/custom.html

これはリモート接続を前提としていますが、あなたの質問からはローカルでBeanにアクセスしているようですか?その場合は、platform.getMBeanServer()を使用してより直接的にMBeanServerにアクセスできます。例えば。 MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
+0

それは明らかでした。間違いはAPIドキュメントを注意深く読んでいない*。助けてくれてありがとう。 – joe7pak

+0

私はBeanのローカルマネージャーにアクセスしていますが、Beanはすべて同じJVMにあります。 MBeanServerメソッドをもっと直接的に見てみましょう。再度、感謝します。 – joe7pak

関連する問題