package com.tivoli.jmx.tutorial.managedserver; import javax.management.MalformedObjectNameException; import javax.management.ObjectName; import javax.management.MBeanServer; import javax.management.MBeanServerFactory; import java.util.TreeSet; import java.util.SortedSet; public static LogFile logfile; public class Httpd { public static void main(java.lang.String[] args) throws Exception { MBeanServer mbs = MBeanServerFactory.createMBeanServer(); SortedSet requestQueue = new TreeSet(); HandlerPool handlers = new HandlerPool(); Httpd.logfile = new LogFile("Httpd.log"); ObjectName listenerObjectName = new ObjectName("tutorial:type=Listener, vendor=Tivoli"); ObjectName handlersObjectName = new ObjectName("tutorial:type=HandlerPool"); ObjectName requestQueueObjectName = new ObjectName("tutorial:type=RequestQueueMBean"); ObjectName logfileObjectName = new ObjectName("tutorial:type=LogFile, name=Httpd.log"); Object[] listenerParams = {requestQueue}; String[] listenerSig = {"java.util.SortedSet"}; mbs.createMBean("com.tivoli.jmx.tutorial.managedserver.Listener", listenerObjectName, null, listenerParams, listenerSig); Object[] requestQueueParams = {requestQueue, new Integer(8)}; String[] requestQueueSig = {"java.util.SortedSet", "int"}; mbs.createMBean("com.tivoli.jmx.tutorial.managedserver.RequestQueueMBean", requestQueueObjectName, null, requestQueueParams, requestQueueSig); mbs.registerMBean(handlers, handlersObjectName); mbs.registerMBean(logfile, logfileObjectName); mbs.invoke(listenerObjectName, "startListening", null, null); while (((Boolean) mbs.getAttribute(listenerObjectName,"Listening")).booleanValue()) { Request r = null; synchronized (requestQueue) { while (requestQueue.isEmpty()) { try { requestQueue.wait(); } catch (InterruptedException x) {} } r = (Request) requestQueue.first(); requestQueue.remove(r); } Handler h = null; synchronized (handlers) { while ((h = handlers.reserve()) == null) { try { handlers.wait(); } catch (InterruptedException x) { } } } h.activate(r); } }