This chapter introduced the asynchronous business process, a critical pattern that allows processes to run separately from the client thread that calls the business process. Virtually all complex or variable-length processes run asynchronously in the case study and in others. Business processes are unpredictable by nature, as discussed in this chapter, and it can become difficult to fulfill a user 's need for a 10-second response time. Further, even the best programmers cannot affect the ability of a manual shipping process to take less time than 10 seconds. To achieve a complete order-to-fulfillment scenario for most direct sale customers, you would have to use Star Trek “like Transporter technology. Even then, it is doubtful that Scotty could get all of the books beamed to customers within 10 seconds during the holiday season .
There are many variations for how best to implement an asynchronous business process. The example in this chapter created the purchase order and used the order identifier as the unique identifier for the business process. This is convenient and easy to implement, but it drives you to creating custom implementations instead of using a simple submission straight to a job manager. On the other hand, there are more often than not business processes that need at least some processing done before decoupling from the client. A client will usually want to know that the company will immediately fulfill an order or that the purchase becomes a back order.
Realizing that each business process is unique yet has portions that are similar is an important step in deciding how to arrange the infrastructure that aids your service implementations. For example, splitting a business process into two parts and having a custom implementation coupled with a portion of the process that a job manager handles is the most likely implementation for your business process.
With the Asynchronous Business Process pattern under your belt, you have completed the primary constructs used in the case study. From here, you will enhance the constructs with some well-known and some not-so-well-known design patterns. For example, client applications often leverage event mechanisms to determine when an asynchronous business process completes, an obvious gap in this chapter.