Class CaldavCalendarSyncEntity

java.lang.Object
org.exoplatform.caldav.entity.CaldavCalendarSyncEntity

@Entity(name="CaldavCalendarSyncEntity") public class CaldavCalendarSyncEntity extends Object
The binding between one eXo calendar and one remote collection, for one user on one declared server. This is the row the engine reconciles against: it carries no calendar content, only the identity of the pair and the state of their last exchange.

Deliberately in the CalDAV add-on's own schema rather than as columns on agenda's tables. Agenda owns calendars and events; how one of them happens to be mirrored on a DAV server is this add-on's concern, and an add-on that can be uninstalled must not have left columns behind in another domain's tables.

@DynamicUpdate, and it is not decoration. This row carries no version column and has several writers doing read-modify-save over the whole of it: the sync pass writes the token, the ctag and the two timestamps, the failure counter is written on its own, and since EXO-89759 the mirror verification stamps copySettingsApplied at the end of a round that can take minutes. Without this annotation every one of those writes flushes an UPDATE over every column, from the snapshot the writer read when it started — so a stamp written by a long round would silently erase whatever a sync that finished in the meantime had committed, and the other way round. With it, only the columns that actually changed are in the statement, and the two writers stop overwriting each other's work.

  • Constructor Details

    • CaldavCalendarSyncEntity

      public CaldavCalendarSyncEntity()