Requirement
Enterprise applications usually need to integrate with a number of legacy or third party systems to fulfill business requirements. In this request, your task is to provide a suitable integration solution to integrate the VideoStore application with the 3 other applications shown in Figure 1. Integration with these 3 applications is required in order to support the following workflow for submitting orders:
When an order is placed, the video store application should:
- Request a transfer of funds from the customer’s account to VideoStore’s account using the services provided by the Bank Application.
- If the transfer is successful, the video store requests delivery for the purchased items from DeliverCo. DeliveryCo notifies the video store when delivery is complete. Further:
- The customer is notified via email (using the EmailService) when a delivery is submitted to DeliveryCo, AND when DeliveryCo claims that the delivery is complete.
- The stock levels for an ordered media item should also be updated if an order is successfully submitted.
If the transfer fails, the customer is notified via email (using the EmailService) that there is a problem with their credit, and that the purchase order cannot proceed.
The four applications are currently integrated through synchronous point to point calls, and most of the workflow described above can be seen in VideoStore.Business.Components/OrderProvider::SubmitOrder().The solution is setup with a customer account username: “Customer” and password: “Customer”. We suggest you use this account for your testing. The current integration solution is functional, but isn’t ideal in addressing quality attributes like availability and reliability. In lectures and tutorials you looked at technologies including asynchronous messaging, message oriented middleware and web services. You will need to modify the integration solution provided and improve its availability and fault-tolerance. You need to take the following into account:
- How are the availability and reliability quality attributes improved? You need to show message diagrams for various cases of subsystem failure (eg What happens if the VideoStore is up and the Bank component is down?).
- Apart from availability and reliability, how are the other quality attributes mentioned in the first lecture affected by your design? System architects need to make trade-offs between different quality attributes (eg: tolerating more failures vs improved performance when there are no failures), and this is acceptable as long as the architect can correctly justify their choices.
You will need to consider how your solution handles failure conditions (not just the one above but also any other failure conditions you can identify). You can assume that the delivery company will eventually be successful in delivering any orders they receive but that their system may go down. In your submission you will need to include a report which describes your integration solution and answers questions 1, and 2, giving specific scenarios that illustrate how your integration solution improves availability and fault tolerance, and how your solution affects other quality attributes.
Group Formation
Each group should contain 3 students. In exceptional cases (with lecturer’s permission in advance) a group may have 4 students, but such a group may be required to take on additional work.
A group is formed when the students involved each join it through the sign-up sheet on the eLearning site for comp5348. Once someone joins a group, they can see the request itself.
Deliverables
A zipped file containing source code for your application and a readme file explaining how to run your application.
A description of how your code works focusing on message exchanges between your components and showing how you will handle the unavailability of various systems. You should justify trade-offs that you made. That is, your report must include answers to questions 1 and 2 from the request description.
A copy of the Academic Honesty cover sheet (group work version) signed by all members of the group Submit deliverables 1 and 2 through eLearning, and hand in deliverable 3 in person at the lab.
Some Q & A
Q1) How do I run the 4 applications and the VideoStore web-client?
A1) a) Create the Videos, Bank, and Deliveries databases along with their associated tables.
b) Start each of the applications by right clicking on the following projects, and then clicking on Debug > Start New Instance : Bank.Process; DeliveryCo.Process; EmailService.Process; VideoStore.Process. You can then also start the VideoStore web client by right clicking on VideoStore.WebClient and then clicking on Debug > Start New Instance. Remember to login with the username “Customer” and the password “Customer” (both without the quotes).
Q2) Do I need to modify the EmailService so that it actually sends emails?
A2) No, the EmailProvider simply needs to print out that a message was sent to a certain address for this request (which is the current implementation).
Q3) The debugger stops when I try to place an order when the Customer has insufficient funds; or when I place an order for a media item with insufficient stock. How can I observe the application functionality without the debugger stopping in these situations?
A3) Before placing your order you can “Detach” the debugger (Debugger > Detach All) to observe the overall functionality in the question’s scenarios without being interrupted by the debugger.