C9576 - ENTERPRISE PLATFORMS M

Academic Year 2026/2027

  • Docente: Luca Foschini
  • Credits: 4
  • SSD: IINF-05/A
  • Language: English
  • Teaching Mode: In-person learning (entirely or partially)
  • Campus: Bologna
  • Corso: Second cycle degree programme (LM) in Computer Engineering (cod. 6719)

    Also valid for Second cycle degree programme (LM) in Computer Engineering (cod. 6719)

Learning outcomes

Upon completion of the module, students will have in-depth knowledge of solution strategies, infrastructure, and support for distributed enterprise software services and systems. Specifically, students will: understand and be able to apply component design patterns and methodologies; understand and be able to design components in heavy container environments; understand and be able to design components in lightweight container environments; and understand and be able to use platforms and specifications that support the development of enterprise software components, such as remoting services, name services, messaging services, and management and administration services.

Course contents

Introduction and enterprise-level application development. Prerequisite recap covering OpenStack, NoSQL, CAP and BASE, replication and group communication, then the enterprise reference architecture and the running case study. Introduction of methodologies and architectural models for the design, implementation, and deployment of enterprise-level distributed applications

API-first design with OpenAPI. Contract-first development, OpenAPI 3.1 and JSON Schema, AsyncAPI for event contracts, the code-generation workflow for stubs, SDKs, mocks and tests, versioning and compatibility, and the toolchain (OpenAPI Generator, Spectral, Stoplight, Redocly).

Communication and remoting patterns. Choosing between REST, gRPC with Protocol Buffers, GraphQL, and asynchronous messaging on stated criteria such as latency, schema evolution, polyglot reach, browser support, streaming and tooling; WebSockets and Server-Sent Events for server push; and the hybrid pattern the case study uses, gRPC inside and REST at the edge. This maps to the remoting-services objective.

Modern Java platforms and frameworks. Dependency injection, inversion of control and aspect-oriented programming; Spring Boot core; Spring Cloud Config, Gateway, Stream and Circuit Breaker as the application-level answer to configuration, naming, gateway and resilience; Quarkus with GraalVM native images, and Micronaut and Helidon by mention; virtual threads and the reactive-versus-imperative question with Project Reactor; EJB and WildFly.

Containerization as a platform introduction. Container internals (namespaces, cgroups, OCI), images, and local composition, taught as the runtime substrate for an enterprise component. Introduction of microservices model and container orchestration tools.

Messaging and event-driven integration. Introduction to Kafka messaging middleware. Topics, partitions, consumer groups and offsets; exactly-once semantics through producer idempotence and transactional writes; partition-key selection as a design decision; the Confluent Schema Registry and schema evolution; compaction and retention as design tools; a short look at NATS, Pulsar, and JMS.

Enterprise persistence and data platforms. JPA and Hibernate as operational reality, and an introduction of distributed SQL (CockroachDB, Spanner, YugabyteDB). Microservice data patterns overview.

Readings/Bibliography

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:

https://virtuale.unibo.it/course/view.php?id=78077

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:

  • SUN tutorial, http://java.sun.com/j2ee/overview.html
  • [http://lia.deis.unibo.it/Courses/sd1213-info/lucidi/JavaEETutorial.pdf]EJB tutorial by IBM [http://www.ibm.com/developerworks/java/tutorials/j-gsejb/]
  • Uso di Eclipse IDE e JBoss [http://en.wikibooks.org/wiki/J2EE_Programming/IDE/Eclipse]

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,Kafka, Java Persistence Architecture. 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.

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 Virtuale 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

SDGs

Quality education Industry, innovation and infrastructure

This teaching activity contributes to the achievement of the Sustainable Development Goals of the UN 2030 Agenda.