Skip to content

Java code

Sandra Monnier edited this page Apr 9, 2026 · 1 revision

model

The data as defined in the Data page.

persistence

JPA

We use JPA with EclipseLink implementation to persist data in a PostgreSQL relational database.

Each JPA entity has a DAO a with CRUD operations.

An EntityListener is defined in orm.xml. It checks the permissions before doing any operation on the database. It registers changes so that we can broadcast them. It set tracking data so that we know who and when data is created, updated, erased.

persistence.xml configures the persistence behaviour.

JCR

Downloaded file persistence is managed with JackRabbit Oak in a Mongo database.

YJS

Collaborative multi-user writing tool, see YJS.

controller

Controller called by REST API, such as data management and fine-tuned operations.

rest api

exceptions

see Exceptions.drawio.

security

Permission conditions are defined to check each access and change, see Permission conditions.drawio and Permission conditions of each ColabEntity.

The authentication has a limit of failed attempts.

broadcast

The EntityListener registers changes to be broadcasted.

Clients subscribe to channels to be aware of changes.

setup

The following settings can be set

  • per file maximum size
  • per project file storage quota
  • whether the "create an account" button should be displayed
  • the number of days an entity can stay in the bin before it is set as destroyed
  • the number of days an entity set as destroyed is kept before real deletion
  • the timestamp of the last terms of use

presence

Designed to see who is online, working on the same project. It was hidden once. To debug and restore.

microchanges

Obsolete attempt to write a collaborative multi-user writing tool.

logging

We use SLF4J with logback implementation.

logback.xml configures the logs.

The logger levels can be changed via the logger admin page in the GUI.

Liquibase

We use Liquibase to upgrade the PostgreSQL database structure, see the Liquibase page.

db.changelog.xml configures liquibase.

Clone this wiki locally