73025 - Distributed Systems M

Academic Year 2023/2024

  • Docente: Luca Foschini
  • Credits:: 8
  • SSD: ING-INF/05
  • Language: Italian
  • Teaching Mode: Traditional lectures
  • Campus: Bologna
  • Corso: Second cycle degree programme (LM) in Computer Engineering (cod. 5826)

Learning outcomes

This graduate course aims at providing students with deep advanced know-how about the methodologies, models, tools, and mechanisms for the design, implementation, and runtime evaluation/validation of enterprise applications deployed over wide-scale distributed systems.

Previous course requirements: no one (but some contents from the BSc courses of Computer Networks T and Web Technologies T will be useful in some classes)

The learning outcomes of the course will include:

  • architecture modeling principles for distributed enterprise applications: requirements and design principles
  • Design, development, and implementation of distributed applications based on Application Servers (e.g., JBoss) and components (e.g., Enterprise Java Beans)
  • management of complex and articulated container-based distributed systems, also via lightweight models and technologies (e.g., via Spring) and via advanced persistency solutions (e.g., via the JPA and Hibernate technologies) 
  • design, development, and implementation of distributed support systems for runtime monitoring and control (properties such as scalability, fault-tolerance, reliability, ...; e.g., via the JMX technology)
  • design, development, and implementation of highly scalable distributed applications for high-end clusters, by specifically considering the clustering support available in JBoss (full configuration); some introductory notions of online stream processing over big data

Course contents

The course will aim at deeply and thoroughly facing the following topics:

-         methodologies and architectural models for the design, implementation, and deployment of enterprise-level distributed applications

-         component-based model evolution and component integration into distributed architectures (typically 3-tier and Web-integrated)

-         Application Servers (e.g., JBoss) and middleware/frameworks for the runtime support of enterprise-level distributed applications

-         differentiated naming services and their integration, especially in enterprise-level deployment environments; examples related to Java Naming and Directory Interface (JNDI)

-         from the starting Enterprise Java Beans model (EJB1.0) to the current widespread adoption of EJB 3.0 (motivations and evolution guidelines)

o       Persistency

o       Interactions with data

o       Session-oriented and message-oriented components

o       Interceptors

o       Transactions

o       Examples and exercises (integrated with the JBoss application server)

-         messaging systems, e.g., Java Messaging System (JMS) and rapid overview of Enterprise Service Bus and Java Business Integration

-         towards effective and efficient enterprise models with lightweight containers: the Spring example

o       Spring and inversion of control

o       Spring and aspect-oriented programming

o       transaction management

-         persistency: evolution of persistency support models in the development of enterprise applications. The examples of JPA and Hibernate.

o       transparent persistency

o       mapping and query support

o       metadata support

o       performance

-         monitoring, control, and runtime management of application servers and of distributed support frameworks in general: the JMX example

o       efficiency/effectiveness and performance evaluation

o       scalability

o       fault-tolerance

o       reliability

-         clustering and proprietary mechanisms/solutions for clustering in JBoss

-         directions of evolution towards asynchronous models and technologies for high scalability of enterprise servers

o Framework node.js and asynch event management

o Function as a Service (FaaS) and supporting frameworks

-         introductory notions about high-performance online stream processing of big data over clustered distributed systems

-         several case studies (also provided via seminars via external companies, added to the regular classes schedule)



The course will be associated with a set of practical lab exercises, in which the students will be solicited to perform guided exercise activities but in an autonomous way and in their free time. These activities will be necessary to complete the study of the course and to reach the desired skills; texts and solutions of these ees will be made available at the official course Web site.


The set of proposed lab exercises will include:

- 1 exercise about EJB in the WildFly application server 

- 1 exercise about messaging and Java Business Integration (JBI)

- 1 exercise about Spring 

- 1 exercise about JMX

- 1 exercise about clustering in WildFly 



All the teachning material (presentation slides, discussed exercises with solutions, exercise proposals, project examples and proposals) used during the classes will be available for download at Virtuale course pages.

As a possible useful reference to the material used in the previous academic year, please refer also to the already available URL:


In addition, there are suggested books useful for deepening several of the topics addressed by the course:

  • A.L. Rubinger, B. Burke, Enterprise JavaBeans 3.1, 1st ed., O'Reilly, 2010
  • D. Ayers et al., Professional Java Server Programming: with Servlets, JavaServer Pages (JSP), XML, Enterprise JavaBeans (EJB), JNDI, CORBA, Jini and Javaspaces, 1st edition, Wrox, 1999
  • C. Walls, Spring in Action, 3rd ed., Manning, 2011
  • C. Bauer, G. King, Java Persistence with Hibernate, Manning, 2006
  • J.S. Perry, Java Management Extensions, 1° ed., O'Reilly, 2002

Additional useful online sources of information and of teaching material:

Teaching methods

The classes will discuss the general issues related to the modeling, design, implementation, and runtime support of wide-scale distributed applications based on components, containers, and Application Servers. The main technologies exploited during the course will be based on the Java language and on the Java Enterprise Edition (J2EE): Enterprise Java Beans, Spring, Java Naming and Directory Interface, Java Annotations, Java Messaging Service, Java Persistence Architecture, Hibernate, Java Management Extensions, JBoss Clustering. The focus on these technologies, of high industrial relevance and most of them available for free as open-source, will enable the experimental testing and validation of the models and solution architectures discussed during the lectures.

The course will be associated with a set of practical lab exercises, in which the students will be solicited to perform guided exercise activities but in an autonomous way and in their free time. These activities will be necessary to complete the study of the course and to reach the desired skills; texts and solutions of these ees will be made available at the official course Web site.

Lab exercises will include:

  • 1 esercitazione su EJB in WildFly

  • 1 esercitazione su EJB e JPA

  • 1 esercitazione su Spring

  • 1 esercitazione su FaaS

Assessment methods

The course is assessed via a final oral examination. The exam will try to evaluate the deep understanding of both the methodologies/models of architecture design and the ability to implement parts of wide-scale enterprise distributed applications by using the mechanisms and technologies examined during the course. The oral exam, with average duration of around 60-75 minutes, will include at least four questions, some of them targeting the solution of practical exercises that will use the enterprise technologies studied and discussed during the course.

Students may also decide to associate this course with 1 attività progettuale (project activity, 4 ECTS since the 2013/2014 academic year) - for further details, please see the related description "Attività Progettuale di Sistemi Distribuiti M" on the guide.

Teaching tools

Teaching material

The slides used during the classes (both in classroom and in labs) are freely available at the Virutale Couse pages.

As a possible useful reference to the material used in the previous academic year, please refer also to the URL below where you can find texts and solutions of lab exercises and of frequent questions for oral exams:



Other tools:

Some Integrated Development Environments for J2EE (mainly the Eclipse IDEs; second option the NetBeans IDE), the JBoss Application Server and additional reference implementations of the technologies described in the lectures are available in the labs (mainly Lab2, but also Lab4) and on the course Web site.


The slides used during the lectures and made available on the course Web site are the primary material for the preparation of the exam; the suggested bibliography (books, papers, Web sites, ...) is intended as an optional support and integration.

Office hours

See the website of Luca Foschini