Bei der Plugin-Entwicklung für Confluence  ergibt sich irgendwann, mit hoher Wahrscheinlichkeit, die Frage, wie eigene Objekte dauerhaft in der Systemdatenbank gespeichert werden können. Besonders wichtig ist dabei, dass die Datenbankstruktur weitestgehend update-fähig bleibt.

Die Confluence-API bietet dafür mehrere Möglichkeiten, wobei zwei davon etwas näher erläutert werden sollen.

Speicherung von Strings an den dazugehörigen Objekten:

Dafür bietet die API den ContentPropertyManager, der es möglich macht, einen String an einem Confluence-Objekt(bspw. Page oder Space) zu speichern. Wie auch die anderen Manager-Objekte kann der ContentPropertyManager, innerhalb des eigenen Plugins, auf zwei Arten angesprochen werden:

Durch eine Setter-Methode innerhalb der Klasse:

public void setContentPropertyManager(
ContentPropertyManager contentPropertyManager){
this.contentPropertyManager = contentPropertyManager;
}

Oder innerhalb des Konstruktors der betroffenen Klasse:

public MyContructor(ContentPropertyManager contentPropertyManager){
    this.contentPropertyManager = contentPropertyManager;
}

Nun lassen sich mit der Methode this.contentPropertyManager.setValue() die gewünschten Parameter speichern. Dabei muss das eigentliche Objekt (vom Typ ContentEntityObject), ein Schlüssel für den zu speichernden String (vom Typ String), sowie der String selber übergeben werden.

Die gespeicherten Werte können dann mit der Methode getValue() ausgelesen werden, wobei hier das gegebene Objekt sowie der Schlüssel des gespeicherten String übergeben wird.

Sollen, außer Strings, auch andere Objekte gespeichert werden können, bietet sich der BandanaManager an. Dieser kann auch wie oben aufgeführt, instanziiert werden. Im BandanaManager werden die übergebenen Objekte allerdings immer bereichsbezogen gespeichert. Demzufolge muss dem Manager-Objekt ein ConfluenceBandanaContext(wird mit einem Space-Objekt instanziiert), der Schlüssel für das zu speichernde Objekt und das Objekt selbst übergeben werden.

this.bandanaManager.setValue(new ConfluenceBandanaContext(Space mySpace),
       "key", Object object);

Ausgelesen werden die Objekte dann über die getValue()-Methode, der wiederum das entsprechende Space-Objekt, sowie der dazugehörige Schlüssel, übergeben werden müssen.