「Java」MBean に登録されている属性の型を調べる
MBean に登録されている属性を取得するのに MBeanServerConnection#getAttribute を使う方法があるわけですが、これが Object 型で値を返すので、適切な型にキャストしてやる必要があります。
「じゃあ、何型にキャストしてやればいいの?」となるので、その方法を調べてみました。
結論から言うと、
1. MBeanServerConnection#getMBeanInfo で MBeanInfo オブジェクトを取得する
2. MBeanInfo#getAttributes で MBeanAttributeInfo オブジェクトを取得する ( 配列で取れる )
3. MBeanAttributeInfo#getType を実行する
上記の順で MBeanAttributeInfo#getType の返り値を確認するといいみたいです。
ちょっと JBoss EAP 6.3 使って検証してみました。
スタンドアロンのアプリケーションでもいいですが、今回はサーブレットからで。
以下の感じのプログラムでいけました。
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String urlString = System.getProperty("jmx.service.url", "service:jmx:remoting-jmx://localhost:9999"); JMXServiceURL serviceURL = new JMXServiceURL(urlString); JMXConnector jmxConnector = JMXConnectorFactory.connect(serviceURL, null); MBeanServerConnection connection = jmxConnector.getMBeanServerConnection(); MBeanAttributeInfo[] attrs = null; try { ObjectName objectName = new ObjectName("jboss.as:subsystem=datasources,data-source=ExampleDS"); MBeanInfo mbeanInfo = connection.getMBeanInfo(objectName); attrs = mbeanInfo.getAttributes(); } catch (Exception e) { e.printStackTrace(); } PrintWriter out = response.getWriter(); out.println("<html><body>"); for (MBeanAttributeInfo attr : attrs) { out.println(attr.getName() + " : " + attr.getType()); out.println("<br>"); } out.println("</body></html>"); }
※ 属性の名前と対応する型の情報取得して出力してます。MBean はデフォルトのデータソース "ExampleDS" のもので。
■ 実行結果
sharePreparedStatements : java.lang.Boolean driverClass : java.lang.String preparedStatementsCacheSize : java.lang.Long spy : java.lang.Boolean password : java.lang.String maxPoolSize : java.lang.Integer - 略 -
API ドキュメントは以下になりますね。
・MBeanServerConnection (Java Platform SE 7 )
http://docs.oracle.com/javase/7/docs/api/javax/management/MBeanServerConnection.html
・MBeanInfo (Java Platform SE 7 )
http://docs.oracle.com/javase/7/docs/api/javax/management/MBeanInfo.html
・MBeanAttributeInfo (Java Platform SE 7 )
http://docs.oracle.com/javase/7/docs/api/javax/management/MBeanAttributeInfo.html
JBoss での MBean サーバへのアクセスは以下のドキュメントに情報がある。
・JMX subsystem configuration - JBoss AS 7.2 - Project Documentation Editor
https://docs.jboss.org/author/display/AS72/JMX+subsystem+configuration
[ 環境情報 ]
Windows 7 SP1
JBoss EAP 6.3
Java SE 7 Update 51
以上になります。
■ 備考
今回の件については、登録側のソース読むというのもひとつの手かもですが、場合によってはかなりの苦しい道のりになることもあるので・・・上記の方法の方がお手軽感がありますね。