Java Applikationskonfiguration mit Sphinx C4J
- Christian Schiestl
- Kategorie: Applikationskonfiguration, Java, SX C4J | Tags: Applikationskonfiguration
Jede Applikation, die den Umfang eines Hello-World Beispiels sprengt, benötigt erfahrungsgemäß irgendeine Möglichkeit das Verhalten der Applikation über Konfigurationsparameter zu steuern. Für die Behandlung von Konfigurationsparametern gibt es eine Vielzahl von Lösungsmöglichkeiten (beginnend mit java.util.Properties) und es existieren auch einige Java Bibliotheken da draußen im WWW, die sich genau auf diese Aufgabe fokusieren. Warum sich im Hause Sphinx in den letzten Jahren dennoch eine kleine, eigenentwickelte Bibliothek mit den Namen SX C4J innerhalb verschiedenster Web-Projekten etabliert hat, erfahren Sie in diesem Artikel. Weitere Details zu dieser Bibliothek (Grundkonzept, Konfiguration, Verwendung, etc.) werden in den kommenden Blog Artikeln vorgestellt und behandelt.
Um was geht es hier?
Meine vergangenen Projekte haben gezeigt, dass man bei der Umsetzung nicht herum kommt, sich ein Konzept zu überlegen, wie auf Konfigurationsparameter zur Steuerung und Parametriesierung des Verhaltens einer Applikation zugegriffen werden kann. Es gilt eine Möglichkeit zu schaffen, aus dem Java Code einfach lesend auf “getypte” Parametereinstellungen zugreifen zu können. Klingt doch trivial oder?
Systemkonfiguration versus Applikationskonfiguration
Um spätere Komplikationen vor allem im Betrieb und bei Installation von Lösungen zu vermeiden, ist es wichtig von vornherein bei der Konzeption und Architektur der Lösung darauf zu achten, dass System- und Applikationskonfiguration klar getrennt werden. Die Systemkonfiguration betrifft externe Systeme bzw. deren Konnektivität (wie zB Datenbank, Mailserver, FTP Server, LDAP Server und deren Verbindungen). Als Best-Practice hat sich gezeigt, das Systemkonfigurationen dieser Art am besten über Mechanismen der Ablauf-Plattform (zB in Webcontainern mit JNDI) bewätigt werden. Damit kann eine Applikation losgelöst von der konkreten Systemumgebung sowohl in einer Testumgebung als auch in einer Produktionsumgebung ohne Veränderung der zu verteilenden Artefakte (zB WAR, EAR Dateien) ausgerollt werden. Die übrigen Konfigurationseinstellungen stellen die klassische Applikationskonfiguration dar, die meist über einfache Property-Dateien gelöst wird und auf deren Hauptfokus die Sphinx Bibliothek SX C4J liegt.
Mögliche Umsetzungsvarianten
Folgende Arten von Applikationskonfigurationen durfte ich in meiner mittlerweile über 10jährigen Karriere als Java Entwickler von Java Projekten bereits kennenlernen:
- Direkte Verwendung von java.util.Properties oder java.util.prefs.Preferences
- XML Dateien (mit Spezialfall in Spring XML Dateien)
- „Parametrisierte“ XML Files mit Platzhaltern, wobei die eigentlichen Parameter aus Property-Dateien kommen und im Build-Prozess mit einer Misch-Operation (Ant Copy, Velocity Template Engine, usw.) bei den Platzhaltern eingewoben werden
- Speicherung in eigenen Konfigurationstabellen in der Datenbank
- OpenSource Bibliotheken wie Apache Commons Configuration, Config4J, JFig
- Proprietäre Eigenentwicklungen in Unternehmen
Alle bisher kennengelernten Verfahren hatten Schwächen und motivierten mich zur Erstellung von SX C4J:
- Zu kompliziert, zu umständlich, zu aufwändig
- Zu fehleranfällig (zB ein Tippfehler durch Operator in Spring XML Datei kann Breakdown der gesamten Applikation verursachen)
- Realisierungen zu mächtig und gleichzeitig trotzdem mit gravierenden Lücken
- Nicht in jedem Applikationskontext (zB nur in Webapplikationen) einsetzbar
- Verfahren erzwingen mehrere Artefakte im Build Prozess (zB eigene WAR Datei für Test, für Produktion,…)
- Schwächen der Umsetzungsvarianten im laufenden Betrieb für die Betriebsführung
Alle diese Gründen, Gedanken zum Thema in dem sehr empfehlenswerten Buch “Release It” sowie aufgrund von hilfreichen Anregungen von Martin Kahr bewegten mich meine Lessons Learnt und Best Practices der vergangenen Software Projekte in eine kleine Java Bibliothek zu gießen, damit ich mir und meine KollegInnen in zukünftigen Projekten keine großen Gedanken zum Thema Applikationskonfiguration mehr zu machen brauchen.
Die Vision von SX C4J
Die Vision von SX C4J läßt sich am besten mit folgendem Kernsatz zusammenfassen:
SX C4J — das Log4J der Applikationskonfigurationen!
Die Bibliothek SX C4J soll genau das für Applikationskonfigurationen leisten, was Log4J seit Jahren für das Logging bietet. SX C4J soll klein und fein, einfach einsetzbar und erlernbar sein und trotzdem mächtig genug sein, um die üblichen Anforderungen an eine Applikationskonfiguration in Java zu bewältigen.
Grundprinzip – Friendliness
Unter dem Gesichtspunkt der “Freundlichkeit” wurde bei der Konzeption von SX C4J versucht den unterschiedlichsten Stakeholdern der Bibliothek und deren unterschiedlichsten Bedürfnissen Rechnung zu tragen. Das bedeutet konkret Freundlichkeit von SX C4J bei seinem Tun und Schaffen gegenüber jedermann/jederfrau:
- Projekt-GeldgeberInnen
- ArchitektInnen
- MitarbeiterInnen der Qualitätssicherung
- EntwicklerInnen
- Build ManagerInnen
- BetriebsführerInnen
Wie geht’s weiter?
In diesem 1. Artikel der SX C4J Artikelreihe habe ich Ihnen kurz meine Motivation zur Implementierung einer Bibliothek zur Applikationskonfiguration dargelegt. Ich hoffe damit Ihre Neugier auf weitere Details zu SX C4J geweckt zu haben und Ihnen in den kommenden Artikeln zu SX C4J nähere Details zur Installation/Konfiguration sowie zur Verwendung von SX C4J inklusive von Beispielen verraten zu dürfen.
Guten Tag
Das klingt tatsächlich interessant und könnte auch bei uns Verwendung finden. Ist/wird die Bibliothek denn OpenSource und gibt es irgendwo noch nähere Infos dazu?
Vielen Dank, Gruess
Hallo Herr Haag!
Vielen Dank für Ihr Interesse. Ich möchte in den nächsten Wochen nähere Details zu C4J über diesen Blog veröffentlichen. Sobald ich auch die Verwendung von C4J behandelt habe, habe ich geplant, die Bibliothek über die Sphinx Download Area bzw. im Blog-Artikel zum Download anbieten.
Mit freundlichen Grüßen!
Christian Schiestl