I teach a course on distributed computing. In the past, the course has focused heavily on N-tiered architectures. This time, I'm taking a different approach. I'm going to divide the course into three parts: one on 2-tier architectures, one on n-tier architectures, and one on service oriented architectures. I wrote earlier about the texts for the course. Today while I was sitting at a meeting wasting time, I decided to put together a topic outline on the way to creating a syllabus. Here it is:
- Introduction
- servers
- Linux and lab information
- Part I: 2-Tier Distributed Architectures
- Architecture: presentation and data layer
- Transport: HTTP
- Methods: GET/POST/PUT/DELETE
- WebDAV
- MIME
- CGI
- Presentation layer: JSP
- Data layer: JDBC
- Case Study
- Project: Build a system for registering for courses. Allow self-service for students. Courses should be searchable and there should be provisions for retrieving and reviewing course information. Administrative interface allows courses and students to be managed.
- Part II: N-Tier Distributed Architectures
- Architecture: properties and benefits
- Component Transaction Monitors
- Enterprise Java Beans
- Entity Beans container and bean managed persistence
- Session Beans
- Patterns: DTOs
- Transactions
- Case study
- Project: Build a reservation system for signing up for courses. The courses have a price and require a credit card for reservation. Uses transactions for ensuring atomicity. Save student information for doing multiple courses. Has administrative interface for adding courses, deleting reservations, managing students.
- Part III: Service Oriented Architectures
- Architecture properties and benefits -- decentralized vs. distributed computing. Programming the Internet
- XML and Schemas
- XSL
- Web services and SOAP
- UDDI
- Synchronous and Asynchronous transport
- Common patterns for SOA design
- Use with EJB
- Identity and Security Issues
- The role of intermediaries
- Case Study
- Project: Add service layer to Project II. Use credit card authorization as a WS
- Conclusion: Making architectural decisions or when to use what
This is still a little rough, but its the main points. I try to not make it a class about specific technologies, but use those technologies as examples and, obviously, the students do their projects using specific technologies. I'd appreciate comments on things I've left out that absolutely have to be there or things I've included that seem out of place. One note on the language choice: the students already know Java and should be proficient in it, so my intention is to use JSP and Java servlets rather than PERL, PHP, or Python, even though I'm aware of their great use in 2-tiered architectures. That will be a point made in class.