44 import java.util.concurrent.ScheduledFuture;
45 import java.util.concurrent.ThreadFactory;
46 import java.util.concurrent.ThreadPoolExecutor;
47 import java.util.concurrent.TimeUnit;
48 import java.util.concurrent.atomic.AtomicInteger;
49 import java.util.concurrent.atomic.AtomicLong;
50 import java.util.logging.Level;
51 import javax.management.AttributeNotFoundException;
52 import javax.management.InstanceNotFoundException;
53 import javax.management.IntrospectionException;
54 import javax.management.MBeanAttributeInfo;
55 import javax.management.MBeanException;
56 import javax.management.MBeanInfo;
57 import javax.management.MBeanRegistration;
58 import javax.management.MBeanServer;
59 import javax.management.MBeanServerConnection;
60 import javax.management.NotificationBroadcasterSupport;
61 import javax.management.ObjectName;
62 import javax.management.ReflectionException;
63 import static javax.management.monitor.MonitorNotification.*;
64 import sun.misc.ManagedLocalsThread;
65
66 /**
67 * Defines the part common to all monitor MBeans.
68 * A monitor MBean monitors values of an attribute common to a set of observed
69 * MBeans. The observed attribute is monitored at intervals specified by the
70 * granularity period. A gauge value (derived gauge) is derived from the values
71 * of the observed attribute.
72 *
73 *
74 * @since 1.5
75 */
76 public abstract class Monitor
77 extends NotificationBroadcasterSupport
78 implements MonitorMBean, MBeanRegistration {
79
80 /*
81 * ------------------------------------------
82 * PACKAGE CLASSES
83 * ------------------------------------------
84 */
1620 final String namePrefix;
1621 static final String nameSuffix = "]";
1622
1623 public DaemonThreadFactory(String poolName) {
1624 SecurityManager s = System.getSecurityManager();
1625 group = (s != null) ? s.getThreadGroup() :
1626 Thread.currentThread().getThreadGroup();
1627 namePrefix = "JMX Monitor " + poolName + " Pool [Thread-";
1628 }
1629
1630 public DaemonThreadFactory(String poolName, ThreadGroup threadGroup) {
1631 group = threadGroup;
1632 namePrefix = "JMX Monitor " + poolName + " Pool [Thread-";
1633 }
1634
1635 public ThreadGroup getThreadGroup() {
1636 return group;
1637 }
1638
1639 public Thread newThread(Runnable r) {
1640 Thread t = new ManagedLocalsThread(
1641 group,
1642 r,
1643 namePrefix + threadNumber.getAndIncrement() + nameSuffix
1644 );
1645
1646 t.setDaemon(true);
1647 if (t.getPriority() != Thread.NORM_PRIORITY)
1648 t.setPriority(Thread.NORM_PRIORITY);
1649 return t;
1650 }
1651 }
1652 }
|
44 import java.util.concurrent.ScheduledFuture;
45 import java.util.concurrent.ThreadFactory;
46 import java.util.concurrent.ThreadPoolExecutor;
47 import java.util.concurrent.TimeUnit;
48 import java.util.concurrent.atomic.AtomicInteger;
49 import java.util.concurrent.atomic.AtomicLong;
50 import java.util.logging.Level;
51 import javax.management.AttributeNotFoundException;
52 import javax.management.InstanceNotFoundException;
53 import javax.management.IntrospectionException;
54 import javax.management.MBeanAttributeInfo;
55 import javax.management.MBeanException;
56 import javax.management.MBeanInfo;
57 import javax.management.MBeanRegistration;
58 import javax.management.MBeanServer;
59 import javax.management.MBeanServerConnection;
60 import javax.management.NotificationBroadcasterSupport;
61 import javax.management.ObjectName;
62 import javax.management.ReflectionException;
63 import static javax.management.monitor.MonitorNotification.*;
64
65 /**
66 * Defines the part common to all monitor MBeans.
67 * A monitor MBean monitors values of an attribute common to a set of observed
68 * MBeans. The observed attribute is monitored at intervals specified by the
69 * granularity period. A gauge value (derived gauge) is derived from the values
70 * of the observed attribute.
71 *
72 *
73 * @since 1.5
74 */
75 public abstract class Monitor
76 extends NotificationBroadcasterSupport
77 implements MonitorMBean, MBeanRegistration {
78
79 /*
80 * ------------------------------------------
81 * PACKAGE CLASSES
82 * ------------------------------------------
83 */
1619 final String namePrefix;
1620 static final String nameSuffix = "]";
1621
1622 public DaemonThreadFactory(String poolName) {
1623 SecurityManager s = System.getSecurityManager();
1624 group = (s != null) ? s.getThreadGroup() :
1625 Thread.currentThread().getThreadGroup();
1626 namePrefix = "JMX Monitor " + poolName + " Pool [Thread-";
1627 }
1628
1629 public DaemonThreadFactory(String poolName, ThreadGroup threadGroup) {
1630 group = threadGroup;
1631 namePrefix = "JMX Monitor " + poolName + " Pool [Thread-";
1632 }
1633
1634 public ThreadGroup getThreadGroup() {
1635 return group;
1636 }
1637
1638 public Thread newThread(Runnable r) {
1639 Thread t = new Thread(
1640 group,
1641 r,
1642 namePrefix + threadNumber.getAndIncrement() + nameSuffix,
1643 0,
1644 false
1645 );
1646
1647 t.setDaemon(true);
1648 if (t.getPriority() != Thread.NORM_PRIORITY)
1649 t.setPriority(Thread.NORM_PRIORITY);
1650 return t;
1651 }
1652 }
1653 }
|