2012-04-26 21 views
5

मान लें कि हमारे पास एक एमबीन है जिसमें निम्नलिखित विशेषताओं और संचालन हैं।जेएमएक्स एमबीएएन संचालन और विशेषताओं को प्रोग्रामेटिक रूप से कैसे जांचें?

गुण: नाम आकार

संचालन: getName() getSize()

वहाँ एक रास्ता प्रोग्राम के रूप में विशेषताओं और कार्यों के लिए जाँच करने के लिए है? मैं आईबीएम वेबस्पियर एमबीन के साथ काम कर रहा हूं और उनका दस्तावेज बहुत अच्छा नहीं है।

उदाहरण के लिए, यदि आप IBMs Infocenter पर जाते हैं और नेटवर्क परिनियोजन -> संदर्भ -> प्रोग्रामिंग इंटरफेस -> मेबियन इंटरफेस -> थ्रेडपूल पर नेविगेट करते हैं। उनके पास केवल विशेषताएँ सूचीबद्ध हैं और कोई संचालन नहीं है।

वेबस्पेयर wsadmin उपकरण का उपयोग करके, मैं वास्तव में संचालन और विशेषताओं को देखने के लिए जांच सकता हूं। मैं जानना चाहता हूं कि सभी एमबीन के साथ ऐसा करने का कोई तरीका है या नहीं।

wsadmin>print Help.attributes(object) 
Attribute      Type       Access 
name       java.lang.String    RO 
maximumSize      int        RW 
minimumSize      int        RW 
inactivityTimeout    long       RW 
growable      boolean       RW 
stats       javax.management.j2ee.statistics.Stats RO 

wsadmin>print Help.operations(object) 
Operation 
java.lang.String getName() 
int getMaximumPoolSize() 
void setMaximumPoolSize(int) 
int getMinimumPoolSize() 
void setMinimumPoolSize(int) 
long getKeepAliveTime() 
void setKeepAliveTime(long) 
boolean isGrowAsNeeded() 
void setGrowAsNeeded(boolean) 
javax.management.j2ee.statistics.Stats getStats() 
+0

क्या मेरा उत्तर सभी @ MD6380 पर मदद करता है? – Gray

+0

हां, इससे मदद मिली। धन्यवाद! – MD6380

उत्तर

10

मैं काफी नहीं बता सकता है, तो आप प्रोग्राम वर्तमान JVM के अंदर या दूर से एक ग्राहक से से MBeans खोजने के बारे में बात कर रहे हैं। कई जेएमएक्स क्लाइंट पुस्तकालय हैं। एक मैंने लिखा यहाँ उपलब्ध है:

JmxClient client = new JmxClient(hostName, port); 
Set<ObjectName> objectNames = getBeanNames() 
for (ObjectName name : objectNames) { 
    MBeanAttributeInfo[] attributes = getAttributesInfo(name); 
    MBeanOperationInfo[] operations = getOperationsInfo(name); 
} 

आप वर्तमान JVM बारे में पूछ रहे हैं तो आप में सक्षम होना चाहिए:

http://256stuff.com/sources/simplejmx/

मेरी कोड आप की तरह कुछ कर सकते हैं के साथ

आंतरिक बीन्स से बीन जानकारी प्राप्त करने के लिए:

MBeanServer server = ManagementFactory.getPlatformMBeanServer(); 
Set<ObjectName> objectNames = server.queryNames(null, null); 
for (ObjectName name : objectNames) { 
    MBeanInfo info = server.getMBeanInfo(name); 
} 
2

यहां ActiveMQ के लिए सरल जेएमएक्स के साथ एक उदाहरण है। सक्रिय एमक्यू मानों को बदलने के साथ भविष्य में किसी के लिए उपयोगी हो सकता है:

String brokerName = "AMQBroker"; 
String username = ""; 
String password = ""; 
String hostname = "localhost"; 
int port = 1099; 

Map<String, Object> env = new HashMap<String, Object>(); 
if (username != null || password != null) { 
    String[] credentials = new String[] { username, password }; 
    env.put("jmx.remote.credentials", credentials); 
} 

JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://" + hostname + ":" + port + "/jmxrmi"); 
JMXConnector jmxc = JMXConnectorFactory.connect(url, env); 
MBeanServerConnection conn = jmxc.getMBeanServerConnection(); 

// here is example for Type=Broker, can be different like 
// "org.apache.activemq:BrokerName=" + brokerName + ",Type=Connection,ConnectorName=openwire,Connection=*" 
// "org.apache.activemq:BrokerName=" + brokerName + ",*,Type=NetworkBridge" or same for Queue, Topic, Subscription 
ObjectName name = new ObjectName("org.apache.activemq:BrokerName=" + brokerName + ",Type=Broker"); 
Set<ObjectName> queryNames = conn.queryNames(name, null); 
// here is set with one element, but can be more depending on ObjectName query 
for (ObjectName objectName : queryNames) { 
    System.out.println(objectName.getCanonicalName()); 
    // use attribute you can be interested in 
    System.out.println(conn.getAttribute(objectName, "Slave")); 
}