Communardo Software GmbH, Kleiststraße 10 a, D-01129 Dresden
+49 (0) 351/850 33-0

Anwendungsspezifische Properties in Confluence

Motivation

 

Es gibt eine Vielzahl an Situationen, bei den man spezifische Properties verwendet. Generelle und fast überall aufzufindende Beispiele wären die Konfiguration des Logs und der Datenbank. Für diese speziellen Ressourcen existieren zumeist spezielle Dateien, die beim Start des Servers durch individuelle Klassen/Mechanismen ausgelesen werden.

Die Frage, die zu diesem Artikel geführt hat, befasst sich mit dem Thema:

Wie können anwendungsspezfische Properties für Confluence relativ einfach und leicht wartbar hinterlegt werden?

Gemeint sind hierbei Properties, die als Schalter zwischen Modi innerhalb einer Software dienen oder die zusätzliche Konfigurationen ermöglichen.

 

Möglichkeiten

 

JVM – Parameter (Der klassische Weg.)

Dieser Weg ist für Java Anwendungen allgemeingültig und somit für die meisten Programmierer nicht neu. Als JVM – Parameter (JAVA_OPTS) wird mit dem Präfix -D und dem anschließenden Property-Wertepaar (<property_name>=<property_value>) die Property definiert. In der Anwendung selbst kann dann mit System.getProperty(„<propety_name>“) darauf zugegriffen werden. Als Rückgabewert liefert die Methode  immer ein String, den man ggf. explizit casten muss.

confluence.cfg.xml (Der elegantere Weg.)

Atlassian Confluence nutzt eine zentrale Datei (confluence.cfg.xml) in der Properties definiert werden können. Diese Datei  befindet sich im data Verzeichnis.

Wie die Extension vermuten lässt, handelt es sich hierbei um eine XML Datei. Die Definition der einzelnen Properties erfolgt wie folgt:

 <confluence-configuration>
  <setupStep>complete</setupStep>
  <setupType>custom</setupType>
  <buildNumber>1517</buildNumber>
  <properties>
    <property name="attachments.dir">${confluenceHome}\attachments</property>
    ...
    <property name="this.is.an.example">true</property>
  </properties>
 </confluence-configuration>

In diesesm Ausschnitt habe ich eine neue Property mit Namen „this.is.an.example“ mit dem Wert true angelegt. (rot gekenntzeichnet) Um nun in Quellcode diesen Wert auslesen zu können muss die Serviceklasse BootstrapManagers verwendet werden.

Eine Variante dafür wäre die getProperty() Methode zu nutzen.

 BootstrapManager bootstrapManager = BootstrapUtils.getBootstrapManager();
 Object objectVal = bootstrapManager.getProperty("this.is.an.example");
 // here comes the explicit cast
 boolean booleanVal = ((Boolean) objectVal).booleanValue();

Möglich wäre auch die getString() Methode zu wählen.

 BootstrapManager bootstrapManager = BootstrapUtils.getBootstrapManager();
 String stringVal = bootstrapManager.getString("this.is.an.example");
 boolean booleanVal = Boolean.valueOf(stringVal);

Die kürzeste Variante allerdings ist die Methode isPropertyTrue() zu verwenden. Die kann folgendermaßen aussehen:

 BootstrapManager bootstrapManager = BootstrapUtils.getBootstrapManager();
 boolean booleanVal = bootstrapManager.isPropertyTrue("this.is.an.example");

Fazit

Meiner Meinung nach steigt durch die Nutzung der confluence.cfg.xml die Übersicht. Da zum einen die Daten lesbar (XML) abgelegt und zudem zentral an einer Stelle konfiguriert werden. Ein weiterer Vorteil gegenüber den JVM Parametern ist,  dass der Betrieb, der die Wartung der Skripte und der Anwendung auf dem Server vornimmt, keine Konfigurationen vergessen bzw. überschreiben kann. Letztlich ermöglichen solche gebündelten Konfigurationen in einer einzigen Datei, dass sie relativ unproblematisch für bestimmte Anwendungsfälle/Instanzen ausgetauscht werden können.

Kommentar hinterlassen


Pin It on Pinterest