xvii
Contents
Chapter 9: Understanding the Java Messaging Service . . . . . . . . 231
Explaining Messaging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231
Introducing JMS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232
JMS versus RMI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232
Message structure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234
Examining Messaging Models . . . . . . . . . . . . . . . . . . . . . . . . . . 235
Point-to-point messaging . . . . . . . . . . . . . . . . . . . . . . . . . 235
Publish-and-subscribe messaging . . . . . . . . . . . . . . . . . . . . 236
Understanding the Major JMS Components . . . . . . . . . . . . . . . . . . 236
Destinations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
Connections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
Connection factories . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
Sessions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238
Producers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238
Consumers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238
Configuring JMS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239
Connexia Airlines Point-to-Point Messaging Business Case . . . . . . . . . 240
Magazine-Publisher Publish-Subscribe Messaging Business Case . . . . . 248
Explaining Reliable Messaging . . . . . . . . . . . . . . . . . . . . . . . . . 252
Autonomous messages . . . . . . . . . . . . . . . . . . . . . . . . . . 252
Persistent messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252
Synchronous acknowledgments . . . . . . . . . . . . . . . . . . . . . 253
Transactions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253
Introducing Message-Driven Enterprise JavaBeans . . . . . . . . . . . . . 254
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254
Chapter 10: Introducing Java Transactions . . . . . . . . . . . . . . . 255
What Are Atomic Transactions? . . . . . . . . . . . . . . . . . . . . . . . . 255
Examining Transactional Objects and Participants . . . . . . . . . . . . . 257
Reviewing Atomicity and the Two-Phase Commit Protocol . . . . . . . . . 259
Optimizations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260
Heuristics and removing the two-phase block . . . . . . . . . . . . . 261
Understanding Local and Distributed Transactions . . . . . . . . . . . . . 262
Local transactions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262
Distributed transactions . . . . . . . . . . . . . . . . . . . . . . . . . 264
Interposition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265
Understanding Consistency . . . . . . . . . . . . . . . . . . . . . . . . . . . 267
Introducing Isolation (Serializability) . . . . . . . . . . . . . . . . . . . . . 268
Optimistic versus pessimistic concurrency control . . . . . . . . . . 269
Degrees of isolation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270
Understanding the Role of Durability . . . . . . . . . . . . . . . . . . . . . 272
Performing Failure Recovery . . . . . . . . . . . . . . . . . . . . . . . . . . 273
Using Transaction-Processing Monitors . . . . . . . . . . . . . . . . . . . . 274
Transaction Models . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275
Nested transactions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276
Nested top-level transactions . . . . . . . . . . . . . . . . . . . . . . . 277
Extended transaction models and the J2EE Activity Service . . . . . 278
a539663 FM.qxd 7/25/03 9:12 AM Page xvii