Message Facade Pattern
Consider wanting to make an Airline Reservation. The client would need
to have the system check the airline for availability and seating. This
can involve a number of steps as outlined below. If the client had to
request each and wait for a response this could be too long for most
users to sit around....you may loose a customer.
Problems:
- Client does not need immediate response....so why make client wait
for responses.
A Solution.....the Message Facade Pattern
- Now have 1 network request to a Message Facade code (ReserveSeatMDB
message-driven EJB)
- Bundle all of the business logic in a seperated Message Facade
code (ReserveSeatMDB message-driven EJB)
- Do not wait on response:
1) Client creates a Java Message Service (JMS) message and passes the
necessary parameter.
2) Client sends this message to a JMS destination created for the Reserve
Seat use case
3) Upon receiving the message at the destination, the client is free.
4)The server has a "message-driven bean container" that will
attempt to pass the message to the next avaialbe ReserveSeat message-driven
bean. If all of these are busy the JMS server should wait until the
next one becomes availab.e
5) When a RerserveSeat MDB becomes available, the container will execute
the onMessage() method.
QUESTION: How do we get a response from a Message-Driven class like
our ReserveSeat MDB?
- Send email to user/client.
- Have client application poll using some unique ID to check the staus
of their request.
Synopsis: Message Facade
Name: Message Facade
Context
A client wants to invoke the methods of multiple programs within
the context of one use case and does not require an immediate
response from the server.
Problem (forces)
How can a client invoke methods of multiple classes within one
transaction, without the need to block and wait for responses
from each?
Solution
Use message-driven classes (beans) to create a fault-tolerant,
asynchronous facade. Clients should have access to message-driven
classes (beans) only, not the underlying data layer, business
logic (entity and session beans).
Related Patterns
Session Facade.
|
PROBLEM:
No direct response. (some possbilities with JMS
as transport mechanism...see advanced book on EJB).
Message-Drive code does not throw exceptions
back to clients.
|