2010-02-25 24 views
11

Tôi muốn có thể ghi lại tất cả dữ liệu JMX có thể truy cập qua jconsole. Có cách nào để làm điều này theo chương trình? Tôi đang xây dựng một hình thức đăng nhập của hệ thống, và tôi muốn tạo dữ liệu định kỳ có thể xem được với một số công cụ tương tự như jconsole.Tôi làm cách nào để kết xuất dữ liệu JMX theo cách lập trình?

Tôi làm cách nào để thực hiện việc này?

Trả lời

20

java.lang.management.ManagementFactory cấp cho bạn quyền truy cập vào dữ liệu JMX.

i.g.

List<MemoryPoolMXBean> memPoolBeans = ManagementFactory.getMemoryPoolMXBeans(); 
for (MemoryPoolMXBean mpb : memPoolBeans) { 
    System.out.println("Memory Pool: " + mpb.getName()); 
} 

Một số mẫu có sẵn tại SO truy vấn: [java] + managementfactory

Một đọc tốt: https://www.ibm.com/developerworks/library/j-jtp09196/index.html

Đối với thực hiện đầy đủ kết nối với một máy ảo từ xa:

Map<String,String[]> env = new HashMap<String, String[]>(); 
env.put(JMXConnector.CREDENTIALS, new String[]{"user","pass"}); 
JMXServiceURL address = new JMXServiceURL("service:rmi:///jndi/rmi://host:port/jmxrmi"); 
JMXConnector connector = JMXConnectorFactory.connect(address,env); 
MBeanServerConnection mbs = connector.getMBeanServerConnection(); 

//get all mbeans 
Set<ObjectInstance> beans = mbs.queryMBeans(null,null); 

for(ObjectInstance instance : beans) 
{ 
    MBeanInfo info = mbs.getMBeanInfo(instance.getObjectName()); 
} 

Từ thông tin, bạn có thể truy vấn tên đối tượng và thuộc tính như mong muốn.

+0

Tính năng này hoạt động, nhưng có cách nào dễ dàng để nhận tất cả các giá trị từ tất cả các tên đối tượng không? Ngay bây giờ, có vẻ như tôi phải lấy na MBeanServerConnection, sau đó truy vấn từng giá trị riêng lẻ với mbs.getAttributes (..). Có cách nào tốt hơn? –

+0

Được rồi, tôi có thể nhận được tất cả các ObjectNames với queryMBeans, nhưng tôi vẫn không thể tự động nhận tất cả các thuộc tính. –

+0

: P. Bây giờ, tôi có thể truy vấn tất cả các thuộc tính, nhưng cách bạn làm điều đó cực kỳ mạch máu. Tôi sẽ chỉnh sửa câu trả lời của bạn và làm cho nó hoàn chỉnh hơn một chút, sau đó chấp nhận nó. –

5

Tôi đã sử dụng command line JMX client làm điểm bắt đầu khi tôi muốn thực hiện tương tự.

+0

Có vẻ như tôi thực sự muốn 10.4, cho lệnh "Thuộc tính", nhưng liên kết không bị hỏng. Bất kỳ ý tưởng mà tôi có thể tìm thấy một tấm gương? –

+0

Tôi nghĩ đó là phiên bản tôi có. Bạn có thể lấy nó ở đây: http://drop.io/jmxclient – Mark

Các vấn đề liên quan