Foreword
Preface
1. Messaging Basics
The Advantages of Messaging
Heterogeneous Integration
Reduce System Bottlenecks
Increase Scalability
Increase End User Productivity
Architecture Flexibility and Agility
Enterprise Messaging
Centralized Architectures
Decentralized Architectures
Hybrid Architectures
Centralized Architecture As a Model
Messaging Models
Point-to-Point
Publish-and-Subscribe
JMS API
Point-to-Point API
Publish-and-Subscribe API
Real-World Scenarios
Service-Oriented Architecture
Event-Driven Architecture
Heterogeneous Platform Integration
Enterprise Application Integration
Business-to-Business
Geographic Dispersion
Information Broadcasting
Building Dynamic Systems
RPC Versus Asynchronous Messaging
Tightly Coupled RPC
Enterprise Messaging
2. Developing a Simple Example
The Chat Application
Getting Started with the Chat Example
Examining the Source Code
Sessions and Threading
3. Anatomy of a JMS Message
Headers
Automatically Assigned Headers
Developer-Assigned Headers
Properties
Application-Specific Properties
JMS-Defined Properties
Provider-Specific Properties
Message Types
Message
TextMessage
ObjectMessage
BytesMessage
StreamMessage
MapMessage
Read-Only Messages
Client-Acknowledged Messages
Interoperability and Portability of Messages
4. Point-to-Point Messaging
Point-to-Point Overview
When to Use Point-to-Point Messaging
The QBorrower and QLender Application
Configuring and Running the Application
The QBorrower Class
The QLender Class
Message Correlation
Dynamic Versus Administered Queues
Load Balancing Using Multiple Receivers
Examining a Queue
5. Publish-and-Subscribe Messaging
Publish-and-Subscribe Overview
When to Use Publish-and-Subscribe Messaging
The TBorrower and TLender Application
Configuring and Running the Application
The TLender Class
The TBorrower Class
Durable Versus Nondurable Subscribers
Dynamic Versus Administered Subscribers
Unsubscribing Dynamic Durable Subscribers
Temporary Topics
6. Message Filtering
Message Selectors
Identifiers
Literals
Comparison Operators
Arithmetic Operators
Declaring a Message Selector
Message Selector Examples
Managing Claims in an HMO
Notification of Certain Bids on Inventory
Priority Handling
Stock Trade Order Auditing
Not Delivered Semantics
Design Considerations
7. Guaranteed Messaging and Transactions
Guaranteed Messaging
Message Autonomy
Store-and-Forward Messaging
Message Acknowledgments and Failure Conditions
Message Acknowledgments
AUTO_ACKNOWLEDGE
DUPS_OK_ACKNOWLEDGE
CLIENT_ACKNOWLEDGE
Message Groups and Acknowledgment
Handling Redelivery of Messages in an Application
Message Groups Example
Message Grouping and Multiple Receivers
Transacted Messages
Creating and Using a JMS Transaction
Transacted Session Example
Distributed Transactions
Lost Connections
The ExceptionListener Example
Dead Message Queues
8. Java EE and Message-Driven Beans
Java EE Overview
Enterprise JavaBeans
Enterprise JavaBeans 3.0 (EJB3) Overview
Simplified Bean Development
Dependency Injection
Simplified Callback Methods
Programmatic Defaults
Interceptors
Java Persistence API
JMS Resources in Java EE
The JNDI Environment Naming Context (ENC)
Message-Driven Beans
Concurrent Processing and Scalability
Defining Message-Driven Beans
Message-Driven Bean Use Cases
Message Facade
Transformation and Routing
9. Spring and JMS
Spring Messaging Architecture
JmsTemplate Overview
Send Methods
convertAndSend Methods
receive and receiveSelected Methods
receiveAndConvert Methods
Connection Factories and JMS Destinations
Using JNDI
Using Native Classes
Sending Messages
Using the send Method
Using the convertAndSend Method
Using a Nondefault JMS Destination
Receiving Messages Synchronously
Message-Driven POJOs
The Spring Message Listener Container
MDP Option 1: Using the MessageListener Interface
MDP Option 2: Using the SessionAwareMessageListener Interface
MDP Option 3: Using the MessageListenerAdapter
Message Conversion Limitations
The Spring JMS Namespace
[jms:listener-container] Element Properties
[jms:listener] Element Properties
10. Deployment Considerations
Performance, Scalability, and Reliability
Determining Message Throughput Requirements
Testing the Real-World Scenario
To Multicast or Not to Multicast
TCP/IP
UDP
IP Multicast
Messaging Over IP Multicast
The Bottom Line
Security
Authentication
Authorization
Secure Communication
Firewalls and HTTP Tunneling
Connecting to the Outside World
Bridging to Other Messaging Systems
11. Messaging Design Considerations
Internal Versus External Destination
Internal Destination Topology
External Destination Topology
Request/Reply Messaging Design
Messaging Design Anti-Patterns
Single-Purpose Queue
Message Priority Overuse
Message Header Misuse
A. The Java Message Service API
B. Message Headers
C. Message Properties
D. Installing and Configuring ActiveMQ
Index