[QUOTE=SlaterB]„Allgemeines zu Projekten / Generals - Hier könnt ihr eure Projekte vorstellen und nach Mitarbeitern fragen.“
…
(jetzt weniger, allgemein nicht ganz so aufwendig wie (man stelle sich vor von jedem ) ein extra Thread vor dem Thread)[/QUOTE]
Wohl wahr, habe ich nicht dran gedacht
Dann zäume ich das Pferd mal von hinten auf, schildere zunächst die Ausgangssituation und stelle anschließend die Lösung vor.
Das große Thema ist Softwarekonfiguration, also Anpassung einer Anwendung an variable (Kunden-)Anforderungen.
Üblicherweise löst man das über Key/Value Paare in Konfigurationsdateien beliebiger Art (Properties Files, XML, …). Kennt jeder.
Was aber, wenn die Anwendung auf mehreren Rechnern parallel installiert wird (Stichworte Ausfallsicherheit und Skalierbarkeit)?
Die Konfigurationsdateien müssen kopiert werden. Abhängig vom Zielsystem gibt es allerdings bei einigen Parametern möglicherweise Abweichungen, wie z.B. bei Pfadangaben, IP-Adressen. Dann wird’s unpraktisch.
Was sich den meisten von uns als Lapalie darstellt, kann in großen Unternehmen zu scheinbar unüberwindbaren Hindernissen werden. Die Administration von IT ist oft ein ungeheurer Verwaltungsakt mit Zuständigkeitgerangel, Sicherheitsfragen, u.s.w. Mal eben eine Datei irgendwo ablegen oder ändern, herrje! geht ja mal gar nicht Das kann so weit gehen, dass Administratoren in Abhängigkeit von ihren Rechten nicht mal auf die System-Shell dürfen :stumm:
Mein Werkzeug (ich komme zum Punkt) ermöglicht eine zentrale Konfiguration, wahlweise als Java-API oder als SOAP-Service.
Basierend auf einer Datenbank wird ebenfalls nach dem Key/Value-Prinzip verfahren, allerdings mit einigen zusätzlichen Features, die für komplexere Anwendungen bzw. Umgebungen interessant sind. Aktuell werden Derby, MySQL, und Oracle unterstützt, PostgreSQL ist in Bearbeitung. Derby ist für diese Zwecke natürlich klasse, weil es ohne viel Zutun eine Nutzung ‚out of the box‘ ermöglicht.
Ausgehend von den Erfahrungen mit unserer eigenen Standardsoftware (Job) gibt es einige Features, die ich hier mal unvollständig aufzähle:
[ul]
[li]Automatismus für identische Keys mit abweichenden Werten in Abhängigkeit vom Rechner, auf dem installiert ist.
[/li][li]Mechanismus für die Abhängigkeit der Werte von Mandanten
[/li][li]Zwei verschiedene ‚intelligente‘ Cachingvarianten der Konfiguration
[/li][li]Nicht persistente Parameter, die also nur zur Laufzeit existieren
[/li][li]Unterstützung von Namespaces, also zusammengesetzte Keys (z.B. keyA.keyB.keyC u.s.w.)
[/li][li]Vater-Kind-Beziehung zwischen Parametern (Parent-Eigenschaft) ermöglicht Abhängigkeitsstrukturen
[/li][li]…
[/li][/ul]
In Bearbeitung sind noch die Verschlüsselung von Werten und einige andere Dinge, u.a. ein Mechanismen für die Versionierung von Parametern und die Unterstützung von JMS.
Mit der Umsetzung der SOAP-Schnittstelle entstand beinahe zwangsläufig die Integration einer Benutzerverwaltung, die ebenfalls über die API und SOAP angesprochen werden kann. Übrigens bedarf es Dank Java 7 keines zusätzlichen Webservers, der ist bereits ‚unter der Haube‘.
Ebenso integraler Bestandteil ist ein Editor, mit dem sich die Konfiguration auf der Konsole bearbeiten lässt.
Interessant ist an dieser Stelle vielleicht noch die Tatsache, dass ich auf weitere Frameworks verzichtet habe. So gibt es keine unnötigen Abhängigkeiten und die Bibliothek ist in Anbetracht des Umfangs relativ klein (rd. 500kb).
Außerdem war mir wichtig, dass möglichst wenig Java-Code notwendig ist, um die API zu nutzen. Auf meiner Webseite ist dazu ein kleines Anwendungs-Beispiel (http://c7.dirk-goldbach.de/code-beispiel/).
Was mich sehr verwundert, ist die Tatsache, dass ich bislang nichts Vergleichbares für eine zentrale Softwarekonfiguration gefunden habe.
Ebenso erstaunlich, dass auch freiberufliche Entwickler, die seit vielen Jahren im Geschäft sind, die - nach meiner Wahrnehmung - offensichtliche Problematik einer Konfiguration in verteilten Umgebungen nicht kennen und meinem Projekt mit Unverständnis begegnen.
Vielleicht ist es auch so, dass zwar die Anwender Bauchschmerzen damit haben, aber diese von denjenigen, die Software spezifizieren, nicht gehört werden.
Mich interessiert brennend, ob Ihr schon mal vor einer vergleichbaren Aufgabe standet oder steht. Oder ist dieses Thema eigentlich gar keines, weil es andere, viel elegantere Ansätze gibt?
Hier noch der Link zur Startseite des Projekts: http://c7.dirk-goldbach.de