1 #==============================================================================
   2 #          JVM Management MIB - Instrumentation Classes
   3 #==============================================================================
   4 
   5 In this directory:
   6 ------------------
   7 
   8 README:              this file
   9 commands.env:        a file containing some ksh variables & functions
  10                      that I have used to generate & compile all the 
  11                      stuff. Probably only valid in my own environment.
  12 logging.properties:  logging.properties file that can be used to obtain
  13                      trace information.
  14 *.java:              utility and custom classes for the JVM Management MIB.
  15                      These classes show how to provide instrumentation for
  16                      a mibgen generated MIB, how to simulate virtual tables,
  17                      and how to make use of the SnmpUserDataFactory.
  18                      Only the jvmMemory group and its tables are instrumented.
  19 
  20 Dependency
  21 ----------
  22 
  23     jvmManagementMib.txt : the JVM Management MIB module in compilable form.
  24     Tiger SNMP Runtime   : SNMP Runtime classes for Tiger. We assume these
  25                            classes could be part of the JMX delivery
  26                            (classes in com.sun.jmx.snmp.*)
  27     JDMK 5.1 : The jdmktk.jar contains the com.sun.jdmk.tools.MibGen class
  28                used to compile the MIB. JDMK also has a mibgen.sh script
  29                to start mibgen. By default mibgen generates code that can
  30                integrate with JDMK SNMP runtime. In order to generate
  31                code that integrate with Tiger SNMP runtime, you need to
  32                start mibgen with a non-default resource file. 
  33                JDMK 5.1 workspace contains a mibgen resource file
  34                specific for tiger: mibgen.property.tiger 
  35     Custom Instrumentation Code: the files in this directory.
  36 
  37 How to proceed:
  38 ---------------
  39 
  40 Get mibgen from JDMK 5.1. Start mibgen with mibgen resource file for
  41 tiger (add -Dcom.sun.jdmk.tools.mibgen.config.file=<mibgen.properties.tiger>)
  42 on the Java command line.
  43 
  44 Use mibgen to generate code for the jvmManagementMib.txt file. Note that
  45 the custom classes provided in this directory are all in the 
  46 sun.management.snmp.jvminstr package, and expect the generated classes to
  47 be in another sun.management.snmp.jvmmib package (use mibgen option 
  48 -tp sun.management.snmp.jvmmib)
  49 
  50 If this package name does not suit you, simply change it to something else,
  51 both in the custom classes below (you might use 'sed' or do it manually) 
  52 and in the -tp option that you will pass to mibgen.
  53 
  54 It is recommended to generate all classes in a different directory (if
  55 you read command.env you will see that I have put the custom classes
  56 in a "custom" directory, and the generated classes in a "parsed" 
  57 directory. This makes it easier to cleanup the mib. You can safely
  58 do a rm -rf <parsed> and call mibgen again.
  59 
  60 Then compile the generated classes - you will need JMX and Tiger SNMP
  61 runtime classes in your classpath - if you compile with a tiger build that
  62 already have them then you don't need to specify anything special.
  63 
  64 Then make your classpath point to the compiled generated classes, and
  65 compile the custom code in this directory.
  66 
  67 Then you can use the SnmpDaemonTest class to start a JVM with the
  68 intsrumented MIB, and you can use e.g. the easymanager contrib of
  69 JDMK to view the MIB through SNMP. 
  70 
  71 #==============================================================================
  72 #  Classes Details
  73 #==============================================================================
  74 
  75 Utility Classes developped for the JVM Management MIB:
  76 ------------------------------------------------------
  77 JvmContextFactory.java        : The context factory allocates a Map that
  78                                 serves as request contextual cache.
  79                                 Values obtained from JSR 163 API can be
  80                                 cached in this object.
  81                                 A request contextual cache is allocated
  82                                 each time a request is being processed,
  83                                 and is released at the end of processing.
  84                                 Object: 1) preserve atomicity
  85                                         2) minimize API calls
  86                                         3) ensure consistency of the
  87                                            various pieces of data returned.
  88 
  89 MibLogger.java                : Send traces to java.util.logging
  90 
  91 SnmpTableHandler.java         : an interface used to access table data.
  92 
  93 SnmpCachedData.java           : This object can be use to cache a snapshot
  94                                 of the data contained in a table. 
  95 
  96 SnmpTableCache.java           : A weak cache for table data. The data is
  97                                 computed on demand and cached in a 
  98                                 weakreference. Makes it possible to specify
  99                                 a validity period for the cache data.
 100 
 101 SnmpListTableCache.java       : Extends SnmpTableCache - for tables whose
 102                                 data is returned in a List object.
 103 
 104 SnmpNamedListTableCache.java  : Extends SnmpListTableCache - for tables whose
 105                                 elements can be named by a unique string.
 106 
 107 SnmpDaemonTest.java           : A dummy standalone SNMP agent that registers
 108                                 the JVM Managemnt MIB in Tiger's SNMP
 109                                 adaptor.  This is the "main". Note that
 110                                 this not the class that will be used to
 111                                 start the adaptor in the final Tiger - it is
 112                                 just a dummy test main.
 113 
 114 JVM Management MIB
 115 ------------------
 116 
 117 JVM_MANAGEMENT_MIB_IMPL.java  : subclasses the generated JVM_MANAGEMENT_MIB
 118                                 class. 
 119                                 Object: overriding factory method in order
 120                                         to instantiate custom code instead
 121                                         of generated code.
 122 
 123 
 124 JVM Memory Group
 125 ----------------
 126 
 127 JvmMemoryImpl.java            : Provides instrumentation for the jvmMemory
 128                                 group. Replaces the generated JvmMemory class,
 129                                 which is not used and can be thrown away.
 130                                 Implements the generated JvmMemoryMBean 
 131                                 interface (which was also implemented by
 132                                 the generated JvmMemory skeleton class)
 133                                 Use  the request contextual cache
 134                                 in order to ensure consistency when
 135                                 returning MemoryUsage datas. Note that all
 136                                 tables in this group have been implemented
 137                                 as virtual tables. As a consequence, the
 138                                 generated TableJvmMemXXXXXTable.java classes
 139                                 are not needed.
 140 
 141 JvmMemoryMetaImpl.java        : Custom MetaData class for the jvmMemory group.
 142                                 Subclasses the generated JvmMemoryMeta class.
 143                                 Object: overrides the factory methods in order
 144                                         to instantiate custom meta data classes
 145                                         for the jvmMemManagerTable,
 146                                                 jvmMemGCTable,
 147                                                 jvmMemPoolTable,
 148                                                 jvmMemMgrPoolRelTable.
 149 
 150 JVM Memory Manager Table
 151 ------------------------
 152 
 153 JvmMemManagerTableMetaImpl.java : Custom MetaData class for the 
 154                                   jvmMemManagerTable. This MetaData traps
 155                                   all the SNMP Runtime calls made to the 
 156                                   table - in order to make the Memory Manager
 157                                   table virtual: i.e. the table does not have
 158                                   to be maintained permanently in memory.
 159                                   Instead, the table is computed "on demand",
 160                                   and the data is cached in a weak cache
 161                                   (see SnmpNamedListTableCache) which remains
 162                                   valid for a few ms. If the data is found
 163                                   to be obsolete, or was garbage collected,
 164                                   the table is recomputed.
 165 
 166 JvmMemManagerEntryImpl.java     : Custom Entry class for jvmMemManagerTable.
 167                                   Entries are created on the fly when it
 168                                   becomes necessary to get data from a 
 169                                   Memory Managers. They are temporary objects
 170                                   that wrap the MemoryManager just for the
 171                                   call duration - and are released just after. 
 172 
 173 JVM Memory GC Table
 174 -------------------
 175 
 176 JvmMemGCTableMetaImpl.java     : Custom MetaData class for the 
 177                                  jvmMemGCTable. This MetaData traps
 178                                  all the SNMP Runtime calls made to the 
 179                                  table - in order to make the GC
 180                                  table virtual: the GC table reuses the
 181                                  cached data computed for the 
 182                                  jvmMemManagerTable - simply acting as a 
 183                                  filter that only shows those elements that
 184                                  are instance of GarbageCollectorMetrics. 
 185                                  In other words it implements a fitered view
 186                                  of the jvmMemManagerTable.
 187 
 188 JvmMemGCEntryImpl.java         : Provide access to the data specific to
 189                                  GarbageCollectorMetrics objects. Objects
 190                                  of this classes are created on the fly,
 191                                  when data needs to be returned from a 
 192                                  GarbageCollectorMetrics object, and are
 193                                  released just after. They are not kept in
 194                                  memory.
 195 
 196 JVM Memory Pool Table
 197 ---------------------
 198 
 199 JvmMemPoolTableMetaImpl.java   : Custom MetaData class for the jvmMemPoolTable.
 200                                  This is quite similar to what was done for
 201                                  the jvmMemManagerTable in 
 202                                  JvmMemManagerTableMetaImpl. Most of the code
 203                                  here was obtain by cut&paste-ing from
 204                                  JvmMemManagerTableMetaImpl and replacing
 205                                  "Manager" with "Pool".
 206 
 207 JvmMemPoolEntryImpl.java       : Provide access to the data specific to
 208                                  MemoryPoolMetrics objects. Objects
 209                                  of this classes are created on the fly,
 210                                  when data needs to be returned from a 
 211                                  MemoryPoolMetrics object, and are
 212                                  released just after. They are not kept in
 213                                  memory. Use  the request contextual cache
 214                                  in order to ensure consistency when
 215                                  returning MemoryUsage datas. 
 216 
 217 JVM Memory Manager / Memory Pool Relation  Table
 218 ------------------------------------------------
 219 
 220 
 221 JvmMemMgrPoolRelTableMetaImpl.java : Custom MetaData class for the 
 222                                  jvmMemMgrPoolRelTable. This meta data
 223                                  uses the JvmMemManagerTableMetaImpl and
 224                                  JvmMemPoolTableMetaImpl in order to 
 225                                  find out the content of the 
 226                                  jvmMemManagerTable and the mapping between 
 227                                  Memory Pool Name and Memory Pool Index.
 228                                  For each element of the jvmMemManagerTable
 229                                  it calls the JSR 163 APIs to find the
 230                                  related Memory Pool, then finds out their
 231                                  index, and then creates the corresponding
 232                                  row in the jvmMemMgrPoolRelTable cached data.
 233                                  Like all the other tables, this table is
 234                                  virtual: the data is kept on a weak cache
 235                                  and recomputed on demand, if its validity
 236                                  as expired or if it has been gc'ed.
 237 
 238 JvmMemMgrPoolRelEntryImpl.java : A simple couple MemoryManager/MemoryPool.
 239                                  Models a row in the jvmMemMgrPoolRelTable.
 240                                  Objects of this type are cached in the
 241                                  jvmMemMgrPoolRelTable cached data.
 242 
 243 #==============================================================================
 244 #==============================================================================