| |
| |
Foreword | |
| |
| |
Preface | |
| |
| |
| |
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 | |
| |
| |
| |
Developing a Simple Example | |
| |
| |
The Chat Application | |
| |
| |
Getting Started with the Chat Example | |
| |
| |
Examining the Source Code | |
| |
| |
Sessions and Threading | |
| |
| |
| |
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 | |
| |
| |
| |
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 | |
| |
| |
| |
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 | |
| |
| |
| |
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 | |
| |
| |
| |
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 | |
| |
| |
| |
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 | |
| |
| |
| |
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 | |
| |
| |
| |
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 | |
| |
| |
| |
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 | |
| |
| |
| |
The Java Message Service API | |
| |
| |
| |
Message Headers | |
| |
| |
| |
Message Properties | |
| |
| |
| |
Installing and Configuring ActiveMQ | |
| |
| |
Index | |