Key Decisions
In the following, we present the key architectural decisions of Subato and discuss the rationale behind the chosen technologies and system components.
Authentication and Authorization
In addition to Subato, there are other systems in use for enhancing programming education at RheinMain University of Applied Sciences that require authentication with the students' university accounts. To avoid requiring every system to implement a synchronization of user data with the university's directory service, a dedicated system should handle authentication centrally. Thus, we chose the IAM system Keycloak, as it supports integration with a directory service and allows different types of clients to be connected via OpenID Connect.
Backend
The backend of Subato is implemented using the Spring Framework. It provides comprehensive support for the various aspects required by our system, including ORM, HTTP APIs, OAuth2, logging, and RabbitMQ. In addition, extensive documentation is available, and the framework has been taught at RheinMain University of Applied Sciences for many years. Thus, future extensions to the system can be made by our students.
Web App
The web app is implemented as a single-page application (SPA) using the Angular framework. As Subato is not a highly interactive application, a traditional web application with server-side rendering would also have been a viable option. However, because Subato provides multiple clients (web app and IntelliJ plugin), it appears reasonable to avoid any presentation logic in the backend and instead use a SPA as the web app.
Plugins
IntelliJ, Eclipse and Visual Studio Code are among the most popular programming environments. However, due to the considerable development and maintenance effort involved, we chose to focus on supporting a single environment. After running a survey with students at RheinMain University of Applied Sciences, we chose to support IntelliJ because it was the most commonly used programming environment in introductory programming courses.