hallo zusammen,
gibt es eine Best Practice um spezifische Properties abzuspeichern. Beispiel: Wird das Programm das erste mal ausgeführt soll bestimmte Settings einmalig angegeben werden. D.h. ich muss die Properties dem Bundle mitführen und diese auch mit deployen können.
Habs schon mit txt-Dateien und Properties probiert. Aber wahrscheinlich steh ich nur auf dem Schlauch und es ist zu spät um klar genug zu denken
Hallo,
soweit ich das verstanden habe (sowohl die Thematik als auch deine Frage
), bietet es sich an, properties-Dateien in sogenannten Fragment Bundles mitzuliefern. Das hat den Vorteil, dass die properties zur Laufzeit ersetzt werden können (durch ein redeploy des Fragment Bundles), ohne dass das eigentliche Bundle neu gestartet werden muss. Fragment Bundles haben keinen eigenen Lebenszyklus (können also auch nicht eigenständig gestartet werden), sondern sind vollständig vom Lebenszyklus des zugehörigen Host-Bundles abhängig. Dabei erweitern sie den Klassenpfad des Host-Bundles (z. B. nützlich, wenn wie bei z. B. Log4J die Konfigdateien im cp erwartet werden), sind aber nach "außen" gegenüber anderen Bundles nicht sichtbar. Weitere Infos hierzu findest du bei [1] und [2]. Natürlich kannst du aber auch die properties-Dateien in das eigentliche Bundle packen, wenn du Konfiguration und Implementierung nicht trennen möchtest. Eine andere Möglichkeit besteht darin, eine config.ini für den Equinox-Start zu pflegen und dort die properties zu setzen [3]. Die letzte Möglichkeit, die mir jetzt einfällt, ist manuell in der Equinox console mittels setprop name=wert die Einstellungen zu pflegen. Das wäre aber mit Sicherheit nicht sehr praktikabel
Grundsätzlich kannst du die properties-Dateien beim Start mittels Activator.start(BundleContext) (oder zu einem beliebigen anderen Zeitpunkt) einlesen und mittels System.setProperty bzw System.setProperties setzen und später an beliebiger Stelle mittels System.getProperty/System.getProperties wieder auslesen.
Zudem bringt OSGi von Haus aus bereits Lösungen für diese Problemstellung mit. Je nach Art der Anforderung gibt es einmal den Configuration Admin Service [4]. Dabei handelt es sich um einen Service, der die zentrale Konfiguration von beliebigen Bundles/Services zur Laufzeit ermöglicht. Eignet sich auch bei Verwendung von Management Agents (z. B. Knopferfish Desktop, bekommt man in Equinox auch zum laufen). Der andere Ansatz ist der Preferences Service [5]. Dieser ermöglicht das Auslesen und Speichern von System- und Benutzereinstellungen auch über Unterbrechungen der OSGi-Platform hinweg.
Denke mal, damit hast du die wichtigsten Begrifflichkeiten beisammen zu deinem Problem.
Viele Grüße
fkh
[1]
OSGi Alliance | Download / OSGi Service Platform Release 4 Version 4.2 - Core Specification Kapitel 3.13
[2] Gert Wütherich et al., Die OSGi Service Platform: Eine Einführung mit Eclipse Equinox - Kapitel 8 (Ich bin von dem Buch wirklich begeistert, da es imo sehr verständlich und zudem auf Deutsch in OSGi einführt, auch wenn es schon etwas älter ist)
[3]
Equinox QuickStart Guide
[4]
OSGi Alliance | Download / OSGi Service Platform Release 4 Version 4.2 - Compendium Specification Kapitel 104
[5]
OSGi Alliance | Download / OSGi Service Platform Release 4 Version 4.2 - Compendium Specification Kapitel 106