Table of Contents
preface xvii
acknowledgments xix
about this book xxi
about the cover illustration xxvi
- Part 1 Getting started 1
- 1 Resource management and JMX 3
- 1.1 Resource management 4
- Today?s management environment 5
- The ideal management environment 6
- Management for the real world 7
- 1.2 Providing a Java solution: Java Management Extensions 8
- Benefits of using JMX 9
- Essential JMX terms 11
- 1.3 The JMX architecture 14
- Example: managing the bicycle shop server 14
- The distributed layer 16
- The agent layer 17
- The instrumentation layer 18
- Notifications 19
- 1.4 Using JMX as an application architecture 20
- 1.5 JMX in use today 21
- 1.6 Developing with JMX 21
- 1.7 Summary 22
- 2 ?Hello World,? the JMX way 23
- 2.1 Getting started 24
- A JMX architecture refresher 24
- Setting up the development environment 25
- 2.2 Managing your first resource 26
- Writing the HelloWorld MBean 27
- 2.3 Creating a JMX agent 29
- Writing the HelloAgent class 30
- More about object names 33
- 2.4 Running the agent 35
- Compiling the agent 35
- Running the agent 35
- Contacting the agent 35
- 2.5 Working with the HTML adapter 36
- Agent View 36
- MBean View 38
- Admin View 40
- Registering/unregistering MBeans on the HelloAgent 41
- 2.6 Using MBean notifications 43
- Adding notification code to the HelloWorld MBean 43
- Changes to the HelloAgent class 46
- 2.7 Summary 48
- 3 Building a foundation 51
- 3.1 The scope of the agent 52
- Using the HTML adapter 52
- Using the RMI connector 53
- 3.2 Writing the JMXBookAgent class 54
- Class definition and constructor 54
- Adding agent connectivity 55
- Finishing with a main() method 57
- 3.3 Writing the RMIClientFactory class 58
- 3.4 Writing the ExceptionUtil class 59
- 3.5 Running the agent 60
- Connecting to the agent with the browser 60
- Connecting to the agent with an RMI client 60
- 3.6 Summary 62
- Part 2 Instrumenting manageable resources 63
- 4 MBeans for stable resources 65
- 4.1 Laying the MBean groundwork 66
- Common coding rules for all MBeans 66
- Using Standard MBeans 67
- 4.2 Composing the standard management interface 68
- Components of the management interface 68
- Example: a printer MBean interface 70
- 4.3 Standard MBean inheritance patterns 71
- Direct implementation of an MBean interface 72
- Inheriting the management interface 72
- Overriding the management interface 73
- Extending the management interface 74
- Combination of extending and overriding 74
- Extending a non-MBean interface 75
- 4.4 Standard MBeans in action 76
- Making applications easily configurable 77
- Breaking applications into components 82
- MBeans using other MBeans 86
- 4.5 Handling MBean errors 90
- Throwing exceptions 91
- Runtime exceptions 93
- 4.6 Summary 94
- 5 MBeans for changing resources 95
- 5.1 Working with the DynamicMBean interface 96
- 5.2 Examining the DynamicMBean interface 96
- Acquiring the dynamic management interface 98
- Working with dynamic MBean attributes 98
- Invoking operations 100
- 5.3 Understanding the MBeanInfo class 100
- Metadata of the MBeanInfo class 101
- The MBeanFeatureInfo and MBeanParameterInfo classes 102
- The MBeanConstructorInfo class 102
- The MBeanAttributeInfo class 102
- The MBeanOperationInfo class 103
- The MBeanNotificationInfo class 104
- 5.4 Inheritance patterns 104
- 5.5 Dynamic MBeans in action 105
- Managing a Jini service 105
- Rebuilding a management interface at runtime 110
- 5.6 Creating utility classes 111
- Creating a dynamic MBean super class 111
- 5.7 Summary 116
- 6 Communication with MBeans using notifications 117
- 6.1 Using MBean notifications 118
- 6.2 Components of the JMX notification model 119
- Being a notification broadcaster 119
- Describing notifications as part of a management interface 121
- The Notification class 122
- Being a notification listener 123
- Filtering notifications 124
- 6.3 A notification polling example 125
- 6.4 Capturing MBean attribute changes 127
- Filtering attribute change notifications 128
- Revising the Polling MBean 129
- Testing the Polling MBean 131
- 6.5 Registering as a notification listener 133
- Registering with an MBean 133
- Registering with the MBean server 134
- 6.6 Persisting MBean notifications 134
- 6.7 Notifications from the MBean server 136
- Notification types sent from the MBean server 137
- 6.8 Summary 138
- 7 MBeans on-the-fly 139
- 7.1 Working with the Model MBean 140
- 7.2 Features of the Model MBean 141
- MBean persistence 141
- Notification logging 142
- Attribute value caching 142
- Operation delegation 142
- Generic notifications 142
- 7.3 Examining the ModelMBean interface 143
- Configuring a Model MBean 144
- Acquiring and using the management interface 144
- Registering for notifications 145
- MBean persistence 145
- 7.4 Understanding the Model MBean metadata 145
- Using descriptors 146
- Constructing a ModelMBeanInfoSupport object 147
- The ModelMBeanAttributeInfo class 149
- The ModelMBeanOperationInfo class 151
- The ModelMBeanConstructorInfo class 153
- The ModelMBeanNotificationInfo class 153
- 7.5 Model MBeans in action 154
- Building ModelMBeanInfo objects 154
- Modeling with Model MBeans 161
- 7.6 Summary 162
- Part 3 The JMX agent and distributed layers 163
- 8 Working with an MBean server 165
- 8.1 JMX agent architecture in review 166
- Using protocol adapters and connectors 166
- 8.2 The MBeanServer interface 167
- Registration methods 168
- Creation and registration methods 170
- Notification methods 171
- MBean manipulation 173
- MBean server information 175
- Other methods 175
- 8.3 Querying for MBeans 176
- The MBeanServer query methods 177
- Creating query expressions 179
- Constructing examples 182
- 8.4 Summary 186
- 9 Communicating with JMX agents 187
- 9.1 Comparing connectors and protocol adapters 189
- 9.2 Connecting by using RMI 189
- Using the RMI connector 189
- Creating the RMI server MBean 190
- Connecting to the RMI server 191
- Additional uses for the RMI connector 193
- 9.3 Connecting to agents using Jini 195
- Components of the Jini connector 196
- Writing the Jini connector 197
- Outstanding issues 211
- Testing the Jini connector 211
- 9.4 JMX and SNMP 213
- What is SNMP? 213
- Using an SNMP protocol adapter 214
- 9.5 Connecting by using a TCP adapter 215
- Writing the code 215
- Testing the TCP adapter 226
- 9.6 Summary 228
- 10 Advanced MBean loading 229
- 10.1 Understanding the M-let service 230
- 10.2 Using the M-let service 231
- Writing M-let files 231
- Examining the MLet MBean 235
- 10.3 Using the M-let service to load MBeans 237
- Adding to the JMXBookAgent class 237
- Example: using an M-let file 238
- Example: expanding the agent?s codebase 239
- 10.4 Wrapping the M-let service to provide notifications 240
- Writing the MLetNotification class 241
- Writing the MLetWrapper MBean 243
- Using the MLetWrapper MBean 249
- 10.5 Summary 251
- 11 Working with the relation service 253
- 11.1 Using the JMX relation service 254
- Components of the relation service 255
- 11.2 Using the relation service to manage a phone system 257
- Defining the scenario 257
- The phone system management example 258
- Defining an external relationship with an MBean 259
- 11.3 Constructing the MBean relationship 261
- Creating the MBeans 261
- Defining the relation 266
- Creating the role objects 269
- Creating the Relation MBean 270
- Adding the relation service to the JMXBookAgent class 273
- Adding a new relation to the relation service 274
- The RelationMain main() method 276
- 11.4 Running the example 277
- Viewing the MBeans 277
- Viewing exposed methods 277
- Disabling a phone card 279
- 11.5 Summary 280
- 12 More agent services: monitors and timers 283
- 12.1 Monitoring MBean attributes with JMX 284
- The monitoring foundation 285
- Monitoring String values 288
- Monitoring a value range 290
- Monitoring a counted value 292
- 12.2 Monitor examples 293
- Creating the example agent and MBean 294
- Testing the String monitor 297
- Testing the Gauge monitor 298
- Testing the Counter monitor 299
- 12.3 Taking corrective measures 300
- 12.4 Sending dated notifications: the timer service 302
- Examining the timer 302
- 12.5 Using the timer service 305
- Testing the timer service 307
- 12.6 Summary 308
- Part 4 Using JMX with the J2EE platform 309
- 13 Using JMX with the Java Message Service 311
- 13.1 The Java Message Service 312
- 13.2 Combining JMX with JMS 312
- 13.3 Driving a home theater system 313
- Writing the example 315
- 13.4 Running the example 326
- Starting and configuring the JBoss server 327
- Starting the agent and registering the MBean 329
- Running the debugger subscriber 331
- Publishing the control messages 332
- 13.5 Summary 332
- 14 Using JMX with Enterprise JavaBeans 335
- 14.1 An EJB review 336
- The EJB model 336
- Why combine JMX with EJBs? 337
- Accessing enterprise data with JMX 338
- 14.2 Example: managing user logins 340
- The problem 340
- The JMX solution 340
- 14.3 Developing the login monitor 341
- Constructing the user information entity bean 342
- Constructing the user information management MBean 346
- Writing the user login client test class 349
- 14.4 Running the Login Monitor 350
- Deploying your entity bean in the JBoss server 350
- Registering with the agent 354
- Counting user login attempts 355
- Removing login privileges 356
- 14.5 Example: managing EJBs 356
- Constructing the workflow entity bean 357
- Constructing the WorkflowManager MBean 365
- Running the workflow manager 370
- Generating EJB managers 371
- 14.6 Summary 375
- A Open MBeans 377
- A.1 What is an Open MBean? 378
- A.2 Basic data types 378
- A.3 Creating more complex data structures 379
- A.4 Describing Open MBean data types 380
- A.5 Open MBean metadata 381
- A.6 Summary 383
- B Using Ant 385
- B.1 Downloading and installing Ant 386
- B.2 Setting up the build file 386
index 389