Due - Tuesday 10/26, 12:45PM
Project 1.5 requires you to refactor, complete the implementation of, and thoroughly test the code you submitted for Project 1. There were several problems that arose for many students:
- Poorly designed code - as discussed in class, if you have copy/pasted large portions of code, it is likely that you should consider refactoring your code and improving your design.
- Inability to use ssh - for developing and testing distributed systems, it is critical that you understand how to use ssh and run programs from the command line.
- Thorough testing of concurrency - your test cases must demonstrate that your servers handle multiple requests concurrently and that you are correctly mediating read/write access to your data store.
You are encouraged, but not required, to work in groups of 2 for this part of the project. Groups may choose to start from scratch or to work from either partner's Project 1 codebase. The requirements for part 2 are as follows:
- Design document - you must submit a design document, in PDF format, that describes the architecture of your system. Your design document must outline the main modules in your program (perhaps at the level of classes) and how they interact. Your design document must also outline at least two elements of your design from Project 1 that changed for Project 1.5. Describe the problems with the elements in Project 1 and how you fixed the problems for Project 1.5.
- Refactored code - you must refactor your code based on your new design. Use inheritance where appropriate. Strongly consider using the Apache HTTP components http://hc.apache.org/.
- Test client - implement a test client that thoroughly tests all elements of concurrency in your system. Ensure that the web server handles multiple concurrent HTTP requests correctly. Ensure that the web server cache supports concurrent reads and disallows concurrent writes. Ensure that your data server handles multiple concurrent HTTP requests correctly. Ensure that your back end data store supports concurrent reads and disallows concurrent writes. This will likely require that you implement careful logging in all parts of your system. Consider using log4j.
- Auto-launch script - implement a unix shell script that will log into three remote machines and launch the three components of your system: two web servers and one data server. This script must run on the linux machines in HRN 235 or 530.
- Graceful shutdown - provide a mechanism to shut down your servers gracefully.
Additional Comments:
- You may share your code from Project 1 with any of the other students in class. You may not share your refactored code, test client, or auto-launch script, however.
- If you are working in a group, email me the name of the group members by Wednesday 10/13.
- A demonstration is not required for Project 1.5, but students may schedule a demonstration before the deadline to earn 5 extra points for Project 1.
Submission
- The following items must be in your SVN repository in /username/cs682/project2 by Tuesday 10/26, 12:45pm:
- design.pdf - your design document that also describes two elements you changed from project 1.
- project1-5.jar - your refectored code. The jar must include all class files and java files.
- testclient.jar - all of the class and java files for your test client.
- run.sh - the auto-launch script for your web servers and data server.
- README.txt - a document containing instructions for running your program.