KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > snmp4j > agent > mo > jmx > mibs > JvmManagementMibInst


1 /*_############################################################################
2   _##
3   _## SNMP4J-AgentJMX - JvmManagementMibInst.java
4   _##
5   _## Copyright (C) 2006-2007 Frank Fock (SNMP4J.org)
6   _##
7   _## This program is free software; you can redistribute it and/or modify
8   _## it under the terms of the GNU General Public License version 2 as
9   _## published by the Free Software Foundation.
10   _##
11   _## This program is distributed in the hope that it will be useful,
12   _## but WITHOUT ANY WARRANTY; without even the implied warranty of
13   _## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14   _## GNU General Public License for more details.
15   _##
16   _## You should have received a copy of the GNU General Public License
17   _## along with this program; if not, write to the Free Software
18   _## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
19   _## MA 02110-1301 USA
20   _##
21   _##########################################################################*/

22
23 package org.snmp4j.agent.mo.jmx.mibs;
24
25 import java.io.File JavaDoc;
26 import java.lang.management.ManagementFactory JavaDoc;
27 import java.lang.management.MemoryType JavaDoc;
28 import java.util.Arrays JavaDoc;
29 import java.util.HashMap JavaDoc;
30 import java.util.Map JavaDoc;
31 import javax.management.MBeanServerConnection JavaDoc;
32 import javax.management.MalformedObjectNameException JavaDoc;
33 import javax.management.ObjectName JavaDoc;
34
35 import org.snmp4j.agent.*;
36 import org.snmp4j.agent.mo.MOScalar;
37 import org.snmp4j.agent.mo.jmx.*;
38 import org.snmp4j.agent.mo.jmx.MBeanNotificationInfo;
39 import org.snmp4j.agent.mo.jmx.types.*;
40 import org.snmp4j.agent.mo.jmx.util.AbstractSyntheticJMXIndexSupport;
41 import org.snmp4j.agent.mo.snmp.smi.EnumerationConstraint;
42 import org.snmp4j.agent.mo.snmp.smi.ValueConstraint;
43 import org.snmp4j.agent.mo.snmp.smi.ValueConstraintValidator;
44 import org.snmp4j.smi.Counter64;
45 import org.snmp4j.smi.OID;
46 import org.snmp4j.smi.OctetString;
47 import org.snmp4j.smi.Variable;
48
49 /**
50  * The <code>JvmManagementMibInst</code> demonstrates how an AgenPro generated
51  * MIB module class can be extended to provide JMX instrumentation for it. The
52  * instrumentation is done mostly descriptive. Only for value mapping some code
53  * is necessary.
54  *
55  * @author Frank Fock
56  * @version 1.0
57  */

58 public class JvmManagementMibInst extends JvmManagementMib {
59
60   private static final OID[] ACTION_OIDS = new OID[] {
61       JvmManagementMib.oidJvmMemoryGCCall
62   };
63
64   private static final MBeanNotificationObjectInfo[] jvmLowMemoryPoolUsageNotif =
65       new MBeanNotificationObjectInfo[] {
66       new MBeanNotificationObjectInfo(
67         new OID(JvmManagementMib.oidJvmMemPoolEntry.getValue(),
68                 new int[] { JvmManagementMib.colJvmMemPoolName }),
69         new OctetString(), new TypedAttribute("poolName", String JavaDoc.class)),
70       new MBeanNotificationObjectInfo(
71         new OID(JvmManagementMib.oidJvmMemPoolEntry.getValue(),
72                 new int[] { JvmManagementMib.colJvmMemPoolUsed }),
73         new Counter64(),
74         new TypedCompositeDataAttribute("usage", "used", Long JavaDoc.class)),
75       new MBeanNotificationObjectInfo(
76         new OID(JvmManagementMib.oidJvmMemPoolEntry.getValue(),
77                 new int[] { JvmManagementMib.colJvmMemPoolThreshdCount }),
78         new Counter64(), new TypedAttribute("count", Long JavaDoc.class))
79   };
80
81   private static final MBeanNotificationObjectInfo[] jvmLowMemoryPoolCollectNotif =
82       new MBeanNotificationObjectInfo[] {
83       new MBeanNotificationObjectInfo(
84         new OID(JvmManagementMib.oidJvmMemPoolEntry.getValue(),
85                 new int[] { JvmManagementMib.colJvmMemPoolName }),
86         new OctetString(), new TypedAttribute("poolName", String JavaDoc.class)),
87       new MBeanNotificationObjectInfo(
88         new OID(JvmManagementMib.oidJvmMemPoolEntry.getValue(),
89                 new int[] { JvmManagementMib.colJvmMemPoolCollectUsed }),
90         new Counter64(),
91         new TypedCompositeDataAttribute("usage", "used", Long JavaDoc.class)),
92       new MBeanNotificationObjectInfo(
93         new OID(JvmManagementMib.oidJvmMemPoolEntry.getValue(),
94                 new int[] { JvmManagementMib.colJvmMemPoolCollectThreshdCount }),
95         new Counter64(), new TypedAttribute("count", Long JavaDoc.class))
96   };
97
98   private static final Object JavaDoc[][] SCALAR_MBEANS_JVM_MEMORY_ACTIONS = {
99       { JvmManagementMib.oidJvmMemoryGCCall,
100             new MBeanStateInfo[] {
101             new MBeanStateInfo(2, null, null)
102         },
103             new MBeanActionInfo[] {
104             new MBeanActionInfo(3, "gc", new Object JavaDoc[0])
105         }
106       }
107   };
108
109   private static final Object JavaDoc[][] SCALAR_MBEANS_JVM_MEMORY = {
110      { JvmManagementMib.oidJvmMemoryPendingFinalCount,
111            "ObjectPendingFinalizationCount", Long JavaDoc.class },
112      { JvmManagementMib.oidJvmMemoryGCVerboseLevel,
113        new InverseBooleanType("Verbose") },
114 // { JvmManagementMib.oidJvmMemoryGCCall, "VmVendor", String.class },
115
{ JvmManagementMib.oidJvmMemoryHeapInitSize,
116        new TypedCompositeDataAttribute("HeapMemoryUsage", "init", Long JavaDoc.class) },
117      { JvmManagementMib.oidJvmMemoryHeapUsed,
118        new TypedCompositeDataAttribute("HeapMemoryUsage", "used", Long JavaDoc.class) },
119      { JvmManagementMib.oidJvmMemoryHeapCommitted,
120        new TypedCompositeDataAttribute("HeapMemoryUsage", "committed", Long JavaDoc.class) },
121      { JvmManagementMib.oidJvmMemoryHeapMaxSize,
122        new TypedCompositeDataAttribute("HeapMemoryUsage", "max", Long JavaDoc.class) },
123
124      { JvmManagementMib.oidJvmMemoryNonHeapInitSize,
125        new TypedCompositeDataAttribute("NonHeapMemoryUsage", "init", Long JavaDoc.class) },
126      { JvmManagementMib.oidJvmMemoryNonHeapUsed,
127        new TypedCompositeDataAttribute("NonHeapMemoryUsage", "used", Long JavaDoc.class) },
128      { JvmManagementMib.oidJvmMemoryNonHeapCommitted,
129        new TypedCompositeDataAttribute("NonHeapMemoryUsage", "committed", Long JavaDoc.class) },
130      { JvmManagementMib.oidJvmMemoryNonHeapMaxSize,
131        new TypedCompositeDataAttribute("NonHeapMemoryUsage", "max", Long JavaDoc.class) }
132
133   };
134
135   private static final Object JavaDoc[][] SCALAR_MBEANS_JVM_CLASSES = {
136      { JvmManagementMib.oidJvmClassesLoadedCount,
137            "LoadedClassCount", Integer JavaDoc.class },
138      { JvmManagementMib.oidJvmClassesTotalLoadedCount,
139            "TotalLoadedClassCount", Long JavaDoc.class },
140      { JvmManagementMib.oidJvmClassesUnloadedCount,
141            "UnloadedClassCount", Long JavaDoc.class },
142      { JvmManagementMib.oidJvmClassesVerboseLevel,
143            new InverseBooleanType("Verbose")},
144   };
145
146   private static final Object JavaDoc[][] SCALAR_MBEANS_JVM_RUNTIME = {
147      { JvmManagementMib.oidJvmRTName, "Name", String JavaDoc.class },
148      { JvmManagementMib.oidJvmRTVMName, "VmName", String JavaDoc.class },
149      { JvmManagementMib.oidJvmRTVMVendor, "VmVendor", String JavaDoc.class },
150      { JvmManagementMib.oidJvmRTVMVersion, "VmVersion", String JavaDoc.class },
151      { JvmManagementMib.oidJvmRTSpecName, "SpecName", String JavaDoc.class },
152      { JvmManagementMib.oidJvmRTSpecVendor, "SpecVendor", String JavaDoc.class },
153      { JvmManagementMib.oidJvmRTSpecVersion, "SpecVersion", String JavaDoc.class },
154      { JvmManagementMib.oidJvmRTManagementSpecVersion, "ManagementSpecVersion",
155      String JavaDoc.class },
156      { JvmManagementMib.oidJvmRTBootClassPathSupport,
157        new InverseBooleanType("BootClassPathSupported") },
158      { JvmManagementMib.oidJvmRTInputArgsCount,"InputArguments", Long JavaDoc.class },
159      { JvmManagementMib.oidJvmRTUptimeMs, "Uptime", Long JavaDoc.class },
160      { JvmManagementMib.oidJvmRTStartTimeMs, "StartTime", Long JavaDoc.class }
161
162   };
163
164   private static final Object JavaDoc[][] SCALAR_MBEANS_JIT_COMPILER = {
165      { JvmManagementMib.oidJvmJITCompilerName, "Name", String JavaDoc.class },
166      { JvmManagementMib.oidJvmJITCompilerTimeMs,
167      "TotalCompilationTime", Long JavaDoc.class },
168      { JvmManagementMib.oidJvmJITCompilerTimeMonitoring,
169        new InverseBooleanType("CompilationTimeMonitoringSupported") }
170   };
171
172   private static final Object JavaDoc[][] SCALAR_MBEANS_JVM_OS = {
173      { JvmManagementMib.oidJvmOSName, "Name", String JavaDoc.class },
174      { JvmManagementMib.oidJvmOSArch, "Arch", String JavaDoc.class },
175      { JvmManagementMib.oidJvmOSVersion, "Version", String JavaDoc.class },
176      { JvmManagementMib.oidJvmOSProcessorCount, "AvailableProcessors",
177      Integer JavaDoc.class }
178   };
179
180   private static final Object JavaDoc[][] SCALAR_MBEANS_JVM_THREADING = {
181      { JvmManagementMib.oidJvmThreadCount, "ThreadCount", Integer JavaDoc.class },
182      { JvmManagementMib.oidJvmThreadDaemonCount, "DaemonThreadCount", Integer JavaDoc.class },
183      { JvmManagementMib.oidJvmThreadPeakCount, "PeakThreadCount", Integer JavaDoc.class },
184      { JvmManagementMib.oidJvmThreadTotalStartedCount, "TotalStartedThreadCount",
185      Integer JavaDoc.class },
186      { JvmManagementMib.oidJvmThreadPeakCount, "PeakThreadCount", Integer JavaDoc.class },
187      { JvmManagementMib.oidJvmThreadContentionMonitoring,
188        new CombinedTypedAttribute("",
189                                   Integer JavaDoc.class,
190                                   new TypedAttribute[] {
191           new Boolean2IntegerType("ThreadContentionMonitoringSupported",
192                                   null, new Integer JavaDoc(1)),
193           new Boolean2IntegerType("ThreadContentionMonitoringEnabled",
194                                   new Integer JavaDoc(3), new Integer JavaDoc(4))})
195      },
196      { JvmManagementMib.oidJvmThreadCpuTimeMonitoring,
197        new CombinedTypedAttribute("",
198                                   Integer JavaDoc.class,
199                                   new TypedAttribute[] {
200           new Boolean2IntegerType("ThreadCpuTimeSupported",
201                                   null, new Integer JavaDoc(1)),
202           new Boolean2IntegerType("ThreadCpuTimeEnabled",
203                                   new Integer JavaDoc(3), new Integer JavaDoc(4))})
204      }
205   };
206
207   private NotificationOriginator notificationOriginator;
208
209   public JvmManagementMibInst(NotificationOriginator notificationOriginator) {
210     super();
211     this.notificationOriginator = notificationOriginator;
212     addJvmManagementMibInstrumentaton();
213   }
214
215   class TimeAction extends TypedAttribute {
216
217     private Map JavaDoc values = new HashMap JavaDoc();
218     private MBeanServerConnection JavaDoc server;
219     private String JavaDoc action;
220
221     public TimeAction(String JavaDoc name, String JavaDoc action,
222                       MBeanServerConnection JavaDoc server) {
223       // name of a dummy attribute that is not really used
224
super(name, Long JavaDoc.class);
225       this.server = server;
226       this.action = action;
227     }
228
229     public boolean isNativeValueAlwaysNeeded() {
230       return true;
231     }
232
233     public Object JavaDoc transformToNative(Object JavaDoc transformedValue,
234                                     Object JavaDoc oldNativeValue,
235                                     ObjectName JavaDoc objectName) {
236       Long JavaDoc nl = (Long JavaDoc)transformedValue;
237       Long JavaDoc ol = (Long JavaDoc)values.get(objectName);
238       if ((ol == null) || (nl > ol)) {
239         try {
240           values.put(objectName, new Long JavaDoc(System.currentTimeMillis()));
241           server.invoke(objectName, action, null, null);
242         }
243         catch (Exception JavaDoc ex) {
244           ex.printStackTrace();
245         }
246       }
247       // supress setting of the dummy attribute we use by returning null here
248
return null;
249     }
250
251     public Object JavaDoc transformFromNative(Object JavaDoc nativeValue,
252                                       ObjectName JavaDoc objectName) {
253       Long JavaDoc value = (Long JavaDoc) values.get(objectName);
254       if (value == null) {
255         return new Long JavaDoc(0);
256       }
257       return value;
258     }
259
260   }
261
262   public void registerMOs(MOServer server, OctetString context) throws
263       DuplicateRegistrationException {
264     super.registerMOs(server, context);
265     if (server instanceof DefaultMOServer) {
266       addJvmManagementMibConstraints((DefaultMOServer)server);
267     }
268   }
269
270   private void addJvmManagementMibInstrumentaton() {
271     final MBeanServerConnection JavaDoc server =
272         ManagementFactory.getPlatformMBeanServer();
273
274     final MBeanAttributeMOTableSupport tableSupport =
275         new MBeanAttributeMOTableSupport(server);
276     final MBeanAttributeMOScalarSupport scalarSupport =
277         new MBeanAttributeMOScalarSupport(server);
278     final MBeanActionMOScalarSupport scalarSupportActions =
279         new MBeanActionMOScalarSupport(server);
280     final JMXNotificationSupport notificationSupport =
281         new JMXNotificationSupport(notificationOriginator);
282
283     JMXDefaultMOFactory jmxFactory =
284         new JMXDefaultMOFactory(server, scalarSupport) {
285       public MOScalar createScalar(OID id, MOAccess access, Variable value) {
286         if (Arrays.binarySearch(ACTION_OIDS, id) >= 0) {
287           return new MOScalarJMX(scalarSupportActions, id, access, value);
288         }
289         return super.createScalar(id, access, value);
290       }
291     };
292     // create MOs with factory
293
createMO(jmxFactory);
294
295     try {
296       ObjectName JavaDoc onameJvmMemManagerEntry =
297           new ObjectName JavaDoc(ManagementFactory.MEMORY_MANAGER_MXBEAN_DOMAIN_TYPE+
298                          ",*");
299
300       JMXIndexSupport jvmMemManagerIndexSupport =
301           new AbstractSyntheticJMXIndexSupport() {
302           public ObjectName JavaDoc mapToRowMBean(Object JavaDoc rowIdentifier) {
303             try {
304               return new ObjectName JavaDoc(ManagementFactory.
305                                     MEMORY_MANAGER_MXBEAN_DOMAIN_TYPE +
306                                     ",name=" + rowIdentifier);
307             }
308             catch (Exception JavaDoc ex) {
309               ex.printStackTrace();
310               return null;
311             }
312           }
313       };
314
315       tableSupport.add(super.oidJvmMemManagerEntry,
316           new MBeanAttributeMOTableInfo(onameJvmMemManagerEntry,
317                                         null,
318                                         new TypedAttribute[] {
319                                         new TypedAttribute("Name", String JavaDoc.class),
320                                         new InverseBooleanType("Valid")},
321                                         new String JavaDoc[] { "Name" },
322                                         jvmMemManagerIndexSupport));
323
324       ObjectName JavaDoc onameJvmMem =
325          new ObjectName JavaDoc(ManagementFactory.MEMORY_MXBEAN_NAME);
326       notificationSupport.add(JvmManagementMib.oidJvmLowMemoryPoolUsageNotif,
327                               new MBeanNotificationInfo(jvmLowMemoryPoolUsageNotif,
328           new JMXAttributeNotificationIndexSupport(
329           new TypedAttribute("poolName", String JavaDoc.class),
330           jvmMemManagerIndexSupport)));
331       try {
332         server.addNotificationListener(onameJvmMem,
333                                        notificationSupport, null,
334                                        JvmManagementMib.
335                                        oidJvmLowMemoryPoolUsageNotif);
336       }
337       catch (Exception JavaDoc ex) {
338         ex.printStackTrace();
339       }
340       notificationSupport.add(JvmManagementMib.oidJvmLowMemoryPoolCollectNotif,
341                               new MBeanNotificationInfo(jvmLowMemoryPoolCollectNotif,
342           new JMXAttributeNotificationIndexSupport(
343           new TypedAttribute("poolName", String JavaDoc.class),
344           jvmMemManagerIndexSupport)));
345       try {
346         server.addNotificationListener(onameJvmMem,
347                                        notificationSupport, null,
348                                        JvmManagementMib.
349                                        oidJvmLowMemoryPoolCollectNotif);
350       }
351       catch (Exception JavaDoc ex) {
352         ex.printStackTrace();
353       }
354
355       ObjectName JavaDoc onameJvmMemPoolEntry =
356           new ObjectName JavaDoc(ManagementFactory.MEMORY_POOL_MXBEAN_DOMAIN_TYPE+",*");
357
358       tableSupport.add(super.oidJvmMemPoolEntry,
359           new MBeanAttributeMOTableInfo(onameJvmMemPoolEntry,
360           null,
361           new TypedAttribute[] {
362             new TypedAttribute("Name", String JavaDoc.class),
363             new EnumStringType("Type", MemoryType JavaDoc.class, MemoryType.values() ),
364             new InverseBooleanType("Valid"),
365             new TimeAction("Name","resetPeakUsage", server),
366             new TypedCompositeDataAttribute("Usage", "init", Long JavaDoc.class),
367             new TypedCompositeDataAttribute("Usage", "used", Long JavaDoc.class),
368             new TypedCompositeDataAttribute("Usage", "committed", Long JavaDoc.class),
369             new TypedCompositeDataAttribute("Usage", "max", Long JavaDoc.class),
370             new TypedCompositeDataAttribute("PeakUsage", "used", Long JavaDoc.class),
371             new TypedCompositeDataAttribute("PeakUsage", "committed", Long JavaDoc.class),
372             new TypedCompositeDataAttribute("PeakUsage", "max", Long JavaDoc.class),
373             new TypedCompositeDataAttribute("CollectionUsage", "used", Long JavaDoc.class),
374             new TypedCompositeDataAttribute("CollectionUsage", "committed", Long JavaDoc.class),
375             new TypedCompositeDataAttribute("CollectionUsage", "max", Long JavaDoc.class),
376             new TypedAttribute("UsageThreshold", Long JavaDoc.class),
377             new TypedAttribute("UsageThresholdCount", Long JavaDoc.class),
378             new InverseBooleanType("UsageThresholdSupported"),
379             new TypedAttribute("CollectionUsageThreshold", Long JavaDoc.class),
380             new TypedAttribute("CollectionUsageThresholdCount", Long JavaDoc.class),
381             new InverseBooleanType("CollectionUsageThresholdSupported")
382           },
383           new String JavaDoc[] { "Name" },
384           new AbstractSyntheticJMXIndexSupport() {
385         public ObjectName JavaDoc mapToRowMBean(Object JavaDoc rowIdentifier) {
386           try {
387             return new ObjectName JavaDoc(ManagementFactory.
388                                   MEMORY_POOL_MXBEAN_DOMAIN_TYPE +
389                                   ",name=" + rowIdentifier);
390           }
391           catch (Exception JavaDoc ex) {
392             ex.printStackTrace();
393             return null;
394           }
395         }
396       }));
397
398       ObjectName JavaDoc onameJvmThreading =
399           new ObjectName JavaDoc(ManagementFactory.THREAD_MXBEAN_NAME);
400
401       tableSupport.add(super.oidJvmThreadInstanceEntry,
402           new MBeanAttributeMOTableInfo(onameJvmThreading,
403           new MBeanInvokationKeyProvider(onameJvmThreading,
404                                          new TypedAttribute("AllThreadIds", long.class),
405                                          "getThreadInfo", true),
406           new TypedAttribute[] {
407           new TypedCompositeDataAttribute(new TypedAttribute("threadId", Long JavaDoc.class)),
408           new CombinedBitsType(new TypedAttribute[] {
409                                new EnumBitsType("threadState", Thread.State JavaDoc.class, Thread.State.values(), 3),
410                                new BooleanBitsType("inNative", 1),
411                                new BooleanBitsType("suspended", 2)}),
412           new TypedCompositeDataAttribute(new TypedAttribute("blockedCount", Long JavaDoc.class)),
413           new TypedCompositeDataAttribute(new TypedAttribute("blockedTime", Long JavaDoc.class)),
414           new TypedCompositeDataAttribute(new TypedAttribute("waitedCount", Long JavaDoc.class)),
415           new TypedCompositeDataAttribute(new TypedAttribute("waitedTime", Long JavaDoc.class)),
416           new MBeanProxyType(server, onameJvmThreading, Long JavaDoc.class,
417                              "getThreadUserTime",
418                              new TypedCompositeDataAttribute(new TypedAttribute("threadId", long.class))) {
419             public Object JavaDoc transformFromNative(Object JavaDoc nativeValue, ObjectName JavaDoc objectName) {
420               Long JavaDoc result = (Long JavaDoc) super.transformFromNative(nativeValue, objectName);
421               if ((result == null) || (result.longValue() < 0)) {
422                 return 0L;
423               }
424               return result;
425             }
426           },
427           new TypedCompositeDataAttribute(new TypedAttribute("threadName", String JavaDoc.class)),
428           new TypedCompositeDataAttribute(new TypedAttribute("lockOwnerName", String JavaDoc.class)),
429           new TypedCompositeDataAttribute(new TypedAttribute("lockOwnerId", Long JavaDoc.class)) {
430             public Object JavaDoc transformFromNative(Object JavaDoc nativeValue, ObjectName JavaDoc objectName) {
431               Long JavaDoc result = (Long JavaDoc)super.transformFromNative(nativeValue, objectName);
432               if ((result == null) || (result.longValue() < 0)) {
433                 return "0.0";
434               }
435               OID rowPointer = new OID(JvmManagementMib.oidJvmThreadInstanceEntry);
436               rowPointer.append(JvmManagementMib.colJvmThreadInstId);
437               String JavaDoc index = Long.toHexString(result.longValue());
438               OctetString os = new OctetString();
439               os.fromHexString(index);
440               rowPointer.append(os.toSubIndex(true));
441               return rowPointer.toString();
442             }
443           }},
444           new String JavaDoc[] { "ThreadId" },
445           new JMXIndexSupport() {
446         public ObjectName JavaDoc mapToRowMBean(Object JavaDoc rowIdentifier) {
447           return null;
448         }
449
450         public Object JavaDoc getRowIdentifier(Object JavaDoc nativeRowId, int nativeIndex) {
451           return nativeRowId;
452         }
453
454         public OID mapToIndex(Object JavaDoc rowIdentifier) {
455           Long JavaDoc l = (Long JavaDoc)rowIdentifier;
456           return OctetString.fromHexString(Long.toHexString(l)).toSubIndex(true);
457         }
458
459         public Object JavaDoc mapToRowIdentifier(OID rowIndex) {
460           if (rowIndex == null) {
461             return null;
462           }
463           OctetString os = new OctetString();
464           os.fromSubIndex(rowIndex, true);
465           String JavaDoc hexString = os.toHexString();
466           return new Long JavaDoc(Long.parseLong(hexString, 16));
467         }
468       }));
469
470       ObjectName JavaDoc onameJvmClasses =
471           new ObjectName JavaDoc(ManagementFactory.CLASS_LOADING_MXBEAN_NAME);
472       ObjectName JavaDoc onameJvmRT =
473           new ObjectName JavaDoc(ManagementFactory.RUNTIME_MXBEAN_NAME);
474       ObjectName JavaDoc onameJitCompiler =
475           new ObjectName JavaDoc(ManagementFactory.COMPILATION_MXBEAN_NAME);
476       ObjectName JavaDoc onameJvmOS =
477           new ObjectName JavaDoc(ManagementFactory.OPERATING_SYSTEM_MXBEAN_NAME);
478       ObjectName JavaDoc onameJvmMemory =
479           new ObjectName JavaDoc(ManagementFactory.MEMORY_MXBEAN_NAME);
480
481       scalarSupport.addAll(onameJvmClasses, SCALAR_MBEANS_JVM_CLASSES);
482       scalarSupport.addAll(onameJvmRT, SCALAR_MBEANS_JVM_RUNTIME);
483       scalarSupport.addAll(onameJitCompiler, SCALAR_MBEANS_JIT_COMPILER);
484       scalarSupport.addAll(onameJvmOS, SCALAR_MBEANS_JVM_OS);
485       scalarSupport.addAll(onameJvmMemory, SCALAR_MBEANS_JVM_MEMORY);
486       scalarSupport.addAll(onameJvmThreading, SCALAR_MBEANS_JVM_THREADING);
487
488       scalarSupportActions.addAll(onameJvmMemory,
489                                   SCALAR_MBEANS_JVM_MEMORY_ACTIONS);
490
491       tableSupport.add(super.oidJvmRTInputArgsEntry,
492           new MBeanAttributeListMOTableInfo(onameJvmRT,
493           new MBeanArrayIndexKeyProvider(onameJvmRT,
494                                          new TypedAttribute("InputArguments",
495           String JavaDoc[].class))));
496
497       tableSupport.add(super.oidJvmRTBootClassPathEntry,
498           new MBeanAttributeListMOTableInfo(onameJvmRT,
499           new MBeanArrayIndexKeyProvider(onameJvmRT,
500                                          new SplitStringType("BootClassPath",
501           File.pathSeparator))));
502
503       tableSupport.add(super.oidJvmRTClassPathEntry,
504           new MBeanAttributeListMOTableInfo(onameJvmRT,
505           new MBeanArrayIndexKeyProvider(onameJvmRT,
506                                          new SplitStringType("ClassPath",
507           File.pathSeparator))));
508
509       tableSupport.add(super.oidJvmRTLibraryPathEntry,
510           new MBeanAttributeListMOTableInfo(onameJvmRT,
511           new MBeanArrayIndexKeyProvider(onameJvmRT,
512                                          new SplitStringType("LibraryPath",
513           File.pathSeparator))));
514
515     }
516     catch (NullPointerException JavaDoc ex) {
517       ex.printStackTrace();
518     }
519     catch (MalformedObjectNameException JavaDoc ex) {
520       ex.printStackTrace();
521     }
522
523     JMXTableModel jvmMemManagerEntryModel =
524         new JMXTableModel(super.oidJvmMemManagerEntry,
525                           tableSupport,
526                           super.getJvmMemManagerEntry().getColumns());
527     ((MOTableJMX)super.getJvmMemManagerEntry()).
528         setModel(jvmMemManagerEntryModel);
529
530     JMXTableModel jvmMemPoolEntryModel =
531         new JMXTableModel(super.oidJvmMemPoolEntry,
532                           tableSupport,
533                           super.getJvmMemPoolEntry().getColumns());
534     ((MOTableJMX)super.getJvmMemPoolEntry()).
535         setModel(jvmMemPoolEntryModel);
536
537     JMXTableModel jvmThreadInstanceEntryModel =
538         new JMXTableModel(super.oidJvmThreadInstanceEntry,
539                           tableSupport,
540                           super.getJvmThreadInstanceEntry().getColumns());
541     ((MOTableJMX)super.getJvmThreadInstanceEntry()).
542         setModel(jvmThreadInstanceEntryModel);
543
544
545     JMXTableModel jvmJvmRTInputArgsEntryModel =
546         new JMXTableModel(super.oidJvmRTInputArgsEntry,
547                           tableSupport,
548                           super.getJvmRTInputArgsEntry().getColumns());
549     ((MOTableJMX)super.getJvmRTInputArgsEntry()).
550         setModel(jvmJvmRTInputArgsEntryModel);
551
552
553     JMXTableModel jvmJvmRTBootClassPathEntryModel =
554         new JMXTableModel(super.oidJvmRTBootClassPathEntry,
555                           tableSupport,
556                           super.getJvmRTBootClassPathEntry().getColumns());
557     ((MOTableJMX)super.getJvmRTBootClassPathEntry()).
558         setModel(jvmJvmRTBootClassPathEntryModel);
559
560     JMXTableModel jvmJvmRTClassPathEntryModel =
561         new JMXTableModel(super.oidJvmRTClassPathEntry,
562                           tableSupport,
563                           super.getJvmRTClassPathEntry().getColumns());
564     ((MOTableJMX)super.getJvmRTClassPathEntry()).
565         setModel(jvmJvmRTClassPathEntryModel);
566
567     JMXTableModel jvmJvmRTLibraryPathEntryModel =
568         new JMXTableModel(super.oidJvmRTLibraryPathEntry,
569                           tableSupport,
570                           super.getJvmRTLibraryPathEntry().getColumns());
571     ((MOTableJMX)super.getJvmRTLibraryPathEntry()).
572         setModel(jvmJvmRTLibraryPathEntryModel);
573
574   }
575
576   private void addJvmManagementMibConstraints(DefaultMOServer server) {
577     MOScalar scalar = (MOScalar)
578         server.getManagedObject(JvmManagementMib.oidJvmThreadContentionMonitoring,
579                                 null);
580     ValueConstraint jvmThreadContentionMonitoringVC = new EnumerationConstraint(
581       new int[] { JvmManagementMib.JvmThreadContentionMonitoringEnum.enabled,
582                   JvmManagementMib.JvmThreadContentionMonitoringEnum.disabled });
583     scalar.addMOValueValidationListener(
584         new ValueConstraintValidator(jvmThreadContentionMonitoringVC));
585     scalar = (MOScalar)
586         server.getManagedObject(JvmManagementMib.oidJvmThreadCpuTimeMonitoring,
587                                 null);
588     ValueConstraint jvmThreadCpuTimeMonitoringVC = new EnumerationConstraint(
589       new int[] { JvmManagementMib.JvmThreadContentionMonitoringEnum.enabled,
590                   JvmManagementMib.JvmThreadContentionMonitoringEnum.disabled });
591     scalar.addMOValueValidationListener(
592         new ValueConstraintValidator(jvmThreadCpuTimeMonitoringVC));
593   }
594
595 }
596
Popular Tags