in uimaj-as-activemq/src/main/java/org/apache/uima/aae/jmx/monitor/JmxMonitor.java [172:336]
public void initialize(String serverUri, long samplingInterval) throws Exception {
interval = samplingInterval;
try {
mbsc = getServerConnection(serverUri);
} catch (Exception e) {
System.out.println("Unable to Connect To Jmx Server. URL:" + serverUri);
throw e;
}
System.out.println(">>> Connected To Jmx Server. URL:" + serverUri);
// Fetch remote JVM's MXBeans
ObjectName runtimeObjName = new ObjectName(ManagementFactory.RUNTIME_MXBEAN_NAME);
ObjectName threadObjName = new ObjectName(ManagementFactory.THREAD_MXBEAN_NAME);
ObjectName osObjName = new ObjectName(ManagementFactory.OPERATING_SYSTEM_MXBEAN_NAME);
Set<ObjectName> mbeans = mbsc.queryNames(threadObjName, null);
mbeans = mbsc.queryNames(runtimeObjName, null);
for (ObjectName name : mbeans) {
runtime = (RuntimeMXBean) MBeanServerInvocationHandler.newProxyInstance(mbsc, name,
RuntimeMXBean.class, true);
}
mbeans = mbsc.queryNames(osObjName, null);
for (ObjectName name : mbeans) {
os = (OperatingSystemMXBean) MBeanServerInvocationHandler.newProxyInstance(mbsc, name,
OperatingSystemMXBean.class, true);
}
System.out.println(runtime.getVmName() + "::" + runtime.getVmVendor() + "::"
+ runtime.getVmVersion());
// Construct query string to fetch UIMA-AS MBean names from the JMX Server registry
uimaServicePattern = new ObjectName("org.apache.uima:type=ee.jms.services,*");
// Construct query string to fetch Queue MBean names from the JMX Server registry
uimaServiceQueuePattern = new ObjectName(
"org.apache.activemq:type=Broker,brokerName=localhost,destinationType=Queue,*");
uimaServiceTempQueuePattern = new ObjectName(
"org.apache.activemq:type=Broker,brokerName=localhost,destinationType=TempQueue,*");
// Fetch UIMA AS MBean names from the JMX Server that match the name pattern
Set<ObjectName> names = new HashSet<ObjectName>(mbsc.queryNames(uimaServicePattern, null));
String key = "";
if (verbose)
System.out.println("\nFound UIMA AS Services Managed by JMX Server:" + serverUri);
// Find all Service Performance MBeans
for (ObjectName name : names) {
// Set up a key for matching Service Performance MBean names
String perfKey = "_Service Performance";
// Check if the current name is the Service Performance MBean
if (name.toString().endsWith(perfKey)) {
if (servicePerformanceNames == null) {
servicePerformanceNames = new HashSet<ObjectName>();
}
// Reduce the Set to Service Performance MBeans only
servicePerformanceNames.add(name);
// Create a proxy object for the Service Performance MBean
ServicePerformanceMBean perfMBeanProxy = (ServicePerformanceMBean) MBeanServerInvocationHandler
.newProxyInstance(mbsc, name, ServicePerformanceMBean.class, true);
// Extract the service name from the MBean name
int beginIndx = name.toString().indexOf(perfKey);
key = name.toString().substring(0, beginIndx);
int nameLen = name.getKeyProperty("name").length();
if (nameLen > maxNameLength) {
maxNameLength = nameLen;
}
// Create a proxy object to the Service Info MBean
ServiceInfoMBean infoMBeanProxy = getServiceInfoMBean(names, key);
key = key.substring(key.indexOf(",name=") + ",name=".length());
// Create a proxy to the service CasPool object.
CasPoolManagementImplMBean casPoolMBeanProxy = null;
// Get Service CAS Pool MBean Proxy. This only make sense for top level service.
// This is a Cas Pool for deserializing CASes from remote clients
if (infoMBeanProxy.isTopLevel()) {
if (infoMBeanProxy.isAggregate()) {
casPoolMBeanProxy = getServiceCasPoolMBean("AggregateContext", names);
} else {
casPoolMBeanProxy = getServiceCasPoolMBean("PrimitiveAEService", names);
}
}
StatEntry entry = null;
if (casPoolMBeanProxy != null) {
entry = new StatEntry(perfMBeanProxy, infoMBeanProxy, casPoolMBeanProxy);
} else {
entry = new StatEntry(perfMBeanProxy, infoMBeanProxy);
}
String location = "Collocated";
// If a service is co-located in the same JVM fetch the service queue proxy
if (infoMBeanProxy.getBrokerURL().startsWith("Embedded Broker")) {
// Get Co-located CM Cas Pool
if (infoMBeanProxy.isCASMultiplier()) {
// Create a proxy to the Cas Multiplier CasPool object.
CasPoolManagementImplMBean casPoolMBean =
getServiceCasPoolMBean(infoMBeanProxy.getCmRegisteredName(), names);
if (casPoolMBean != null) {
entry.setCasPoolMBean(casPoolMBean);
}
}
// Create a proxy to the service queue MBean
UimaVmQueueMBean queueProxy = getQueueMBean(mbsc, infoMBeanProxy.getInputQueueName());
if (queueProxy != null) {
entry.setInputQueueInfo(queueProxy);
}
UimaVmQueueMBean replyQueueProxy = getQueueMBean(mbsc, infoMBeanProxy.getReplyQueueName());
if (replyQueueProxy != null) {
entry.setReplyQueueInfo(replyQueueProxy);
}
} else {
// The MBean is for a remote service. Connect to this service Broker and create a proxy
// to an input queue for the service. Assumption: the broker registers JMX server on
// port 1099.
location = "Remote";
int spos = infoMBeanProxy.getBrokerURL().indexOf("//");
int endpos = infoMBeanProxy.getBrokerURL().lastIndexOf(":");
String remoteHostname = infoMBeanProxy.getBrokerURL().substring(spos + 2, endpos);
if (verbose)
System.out.println("Connecting to a remote JMX Server: " + remoteHostname + " key:"
+ key);
String remoteJMX = "service:jmx:rmi:///jndi/rmi://" + remoteHostname + ":1099/jmxrmi";
MBeanServerConnection remoteServer = getServerConnection(remoteJMX);
QueueViewMBean inputQueueProxy = getQueueMBean(remoteServer, infoMBeanProxy
.getInputQueueName(), uimaServiceQueuePattern);
if (inputQueueProxy != null) {
entry.setInputQueueInfo(inputQueueProxy);
ObjectName on = new ObjectName("org.apache.activemq:type=Broker,brokerName=localhost,destinationType=Queue,destinationName="+infoMBeanProxy.getInputQueueName());
long qsize = (Long)remoteServer.getAttribute(on, "QueueSize");
entry.setQueueSize(qsize);
} else {
System.out.println("Unable to find Input Queue:" + infoMBeanProxy.getInputQueueName()
+ " In JMX Registry:" + remoteJMX);
}
QueueViewMBean replyQueueProxy = null;
if (infoMBeanProxy.isAggregate()) {
replyQueueProxy = getQueueMBean(mbsc, infoMBeanProxy.getReplyQueueName(),
uimaServiceQueuePattern);
} else {
replyQueueProxy = getQueueMBean(remoteServer, infoMBeanProxy.getReplyQueueName(),
uimaServiceTempQueuePattern);
}
if (replyQueueProxy != null) {
entry.setReplyQueueInfo(replyQueueProxy);
} else {
System.out.println("Unable to find Reply Queue:" + infoMBeanProxy.getReplyQueueName()
+ " In JMX Registry:" + remoteJMX);
}
}
if (verbose)
System.out.println("\nUIMA AS Service:" + key + "[>>> " + location
+ " <<<]\n\tService Broker:" + infoMBeanProxy.getBrokerURL() + "\n\tQueue Name:"
+ infoMBeanProxy.getInputQueueName());
serviceCount++;
stats.put(name, entry);
}
}
}