Distributed Programming

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 programming assignments.

A project assignment.

Learning Results

This curricular unit aims at providing the students the ability to plan and develop object-oriented distributed applications through the use of different programming paradigms/levels of abstraction, i.e., remote communication, remote/distributed objects, and web services. This type of application requires the ability to understand and deal with issues such as concurrency, synchronization, remote communication, and access to remote objects.

Program

  • Implementation 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
  •     N-Tier architecture
  •     JDBC and JPA
  •     Introduction to middleware solutions for distributed applications
    • Middleware, serialization, RPC, and remote object concepts
    • Sun PRC
    • Main types of remote objects (singleton, stateful, stateless, etc.)
    • Java RMI
    • CORBA
    • REST Web services
  •     Implementation of Java RMI distributed applications
    • Servers
    • Clients
    • Callback
    • Remote object activation
    • Introduction to security mechanisms
  •     Implementation of CORBA distributed applications in Java
    • Servers
    • Clients
  •     Implementation of Java distributed applications based on REST web/API services
    • Servers
    • Clients
    • http authentication mechanisms
    • Spring Boot platform
  • Microservice architectures

Curricular Unit Teachers

José Manuel Meireles Marinho

Grading Methods

  • Mini-tests at the end of theoretical classes:
    • Mini-tests starting in the second week of classes (one per class);
    • Each one counts for 0.2 points in the final grade;
    • Maximum weight in the final grade: 7.5%.
  • Mini-tests at the end of laboratory classes:
    • Mini-tests starting in the second week of classes (one per class);
    • Each one counts for 0.2 points in the final grade;
    • Maximum weight in the final grade: 7.5%.
  • Students with worker-student status and Erasmus students who have not taken any mini-tests in theoretical and practical classes may take an alternative test on the day of the regular exam (15% of the final grade).
  • A project assignment that includes most of the topics covered in this course:
    • 40% of the final grade;
    • 2 evaluation phases;
    • 1st phase:
      • 5 points;
      • Submission deadline: end of the 12nd week of the semester;
      • Defenses: 13rd week of the semester.
    • 2nd phase (REST and RMI components):
      • 3 points;
      • Submission deadline: end of the 14th week of the semester;
      • Defenses: 15th week of the semester.
    • During the special exam period, students who have access to it may, if they wish and have not yet obtained a grade in this component, take an alternative to the project assignment, provided they inform the teacher (40% of the final grade).
  • A final exam:
    • 45% of the final grade;
    • Required minimum grade of 25%.
  • 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 & Distributed Computing. Addison-Wesley
      • BOJE, J. (2019). Spring Boot 2 : how to get started and build a microservice (3rd ed). Frankfurt : Codeboje (available in the ISEC library: 1A-12-205)
      • COULOURIS, G., DOLLIMORE, J., KINDBERG, T, & BLAIR, G. (2011). Distributed Systems – Concepts and Design (5th Edition). Addison-Wesley (available in the ISEC library: 1A-1-440)
      • VITILLO, R. (2021). Understanding distributed systems (version 1.1.1) (available in the ISEC library: 1A-1-460)