Base Knowledge
Java programming language and TCP/IP protocol stack.
Teaching Methodologies
Theoretical lessons based on presentation, demonstration and discussion of topics related to the objectives of the curricular unit.
Practical lessons based on solving exercises and experimentation.
Completion and presentation of a practical assignment.
Learning Results
The aim of this course unit is to enable students to acquire skills in the planning and development of object-oriented distributed applications. These are applications comprising multiple components, such as processes, clients, servers, threads, objects and web services, which can be deployed on different machines and interact with each other. The skills to be acquired also include handling aspects related to concurrency, synchronization mechanisms, remote communication and remote objects. To this end, the course covers different programming paradigms and various technologies with distinct levels of abstraction, including message passing (Java sockets and WebSockets), remote procedure and object invocation (Java RMI, CORBA, gRPC and JSON-RPC), web services, and message brokers (RabbitMQ, Kafka and MQTT).
Program
- Development of Java distributed applications for TCP/IP networks
- Addressing
- Connectionless communication (UDP)
- Connection-oriented communication (TCP)
- Group communication
- Concurrency and input/output multiplexing
- Multithreaded applications
- Mutual exclusion mechanisms
- HTTP communication
- Development of REST Web services
- Development of HTTP authentication mechanisms
- N-Tier architecture
- Connecting Java applications to relational databases via JDBC
- Using Object-Relational Mapping (ORM) approaches and JPA
- Development of distributed applications using middleware solutions
- Middleware, serialization, RPC, and remote object concepts
- Sun RPC (historical example)
- Java RMI (remote object paradigm example)
- CORBA(remote object paradigm example)
- JSON RPC
- gRPC
- WebSockets
- Microservice architectures
- Using message brokers
- Concepts
- Kafka
- RabbitMQ
- MQTT
Curricular Unit Teachers
José Manuel Meireles MarinhoGrading Methods
- Preliminary note: supplementary oral examinations may be used as an additional means of assessment whenever deemed necessary to resolve doubts or clarify situations where fraud or plagiarism is suspected.
- Mini-tests at the end of theoretical classes:
- Mini-tests starting in the second week of classes (one per class);
- Each counts for 0.2 points in the final grade;
- Maximum weight in the final grade: 1.5 points (7.5% of the final grade);
- No minimum grade required.
- Students with worker-student status and Erasmus students who have not taken any mini-tests may take an alternative test on the day of the regular exam (1.5 points).
- A project assignment developed in Java that incorporates several of the technologies taught:
- 7.5 points (37.5% of the final grade);
- No minimum mark required;
- Groups of two students;
- 3 milestones, weighted in the final grade as 1.5, 3, and 3 grades respectively;
- Submission deadlines and presentation periods:
- Milestone 1: submission by the end of the seventh week of the term (no presentation);
- Milestone 2: submission by the end of the tenth week of the term; presentation/defence in the eleventh week;
- Milestone3: submission by the end of the fourteenth week of the term; presentation/defence in the fifteenth week;
- Students who have achieved marks of 50 per cent or higher in practical assignments in the previous two academic years may be exempted from submitting the practical assignment, in which case the highest of the marks previously obtained will be taken into account.
- A final exam:
- 11 points (55% of the final grade);
- Required minimum grade of 25%.
- Conditions for improving marks:
- Final exams can be retaken.
- The project assignment and the mini-tests cannot be improved.
Internship(s)
NAO
Bibliography
Main Bibliography
- Study material prepared and collected by the teachers and made available on the InforEstudante platform.
Complementary Bibliography
- Reilly, D., & Reilly, M. (2002). Java network programming and distributed computing. Addison-Wesley Professional.
- Boje, J. (2019). Spring boot 2: how to get started and build a microservice (3rd ed.). Codeboje. (available at the ISEC library: 1A-12-205)
- Coulouris, G. F. (2012). Distributed systems : Concepts and design. Addison-Wesley. (available at the ISEC library: 1A-1-440)
- Vitillo, R. (2022). Understanding distributed systems. Roberto Vitillo. (available at the ISEC library: 1A-1-460)