Search the FirstSpirit Knowledge Base
Hallo,
wir verwenden in unseren Modulen Services, die von allen Projekten auf dem Server verwendet werden können. Diese Services haben eine Konfiguration, die mittels des Interfaces Configuration<ServerEnvironment> implementiert wurde. In der module.xml wird der Service dann folgendermaßen aufgerufen:
<module>
...
<components>
...
<service>
<name>NameDesService</name>
<displayname>Anzeigename des Service</displayname>
<description>Beschreibung des Service</description>
<class>voll.qualifizierter.name.der.Klasse.DesService</class>
<configurable>voll.qualifizierter.name.der.Klasse.DerServiceConfiguration</configurable>
</service>
...
</components>
</module>
Die Service-Klasse (hier: DesService) soll auf ihre Konfiguration (hier: DerServiceConfiguration) zugreifen können, sowohl lesend als auch schreibend. Leider finden wir keine Möglichkeit, vom Service auf die Konfiguration zuzugreifen. Umgekehrt (Konfiguration auf Service) geht es, da die Konfiguration über ServerEnvironment.getConnection().getService(DesService.class) die Klasse holen kann. Wir würden aber gerne die Methode Configuration.getParameter(String) zum Zugriff verwenden. Ist das nicht möglich oder haben wir nicht gut genug gesucht?
Viele Grüße
Im Service steht das ServerEnvironment zur Verfügung, was Zugriff auf das Konfigurationsverzeichnis des Services bietet.
Das haben wir auch schon herausgefunden. Leider nützt uns das nicht viel, da das Lesen und Schreiben der Konfigurationsdatei vom Configuration-Objekt übernommen wird. Dieses hält ein Properties-Objekt, welches wiederum die einzelnen Konfigurationsparameter enthält. Über die durch das Interface Configuration vorgegebene Methode getParameter(String) kann auf die Kofigurationsparameter zugegriffen werden. Dazu benötigen wir aber das Configuration-Objekt.
Viele Grüße
Sie müssen an der Stelle das Configuration Interface selbst implementieren. Also aus dem Verzeichnis die Konfigurationsdatei ermitteln und daraus ein Properties-Objekt erzeugen. Danach die getParameter(String) Methode entsprechend implementieren. Also darin ein properties.getProperty(name) aufrufen.
Haben wir gemacht. Und genau auf das Objekt würden wir vom Service aus gerne zugreifen. Aber wir haben keine Möglichkeit gefunden, das vom Service aus zu tun.
Viele Grüße
In unseren Beispielimplemtentierungen ist auch ein komplettes Beispiel enthalten. Siehe http://www.e-spirit.com/odfs50/de/dokumentation/entwickler/entwickler.html?community. Dort die Beispielimplementierung für Komponenten herunterladen. MyServiceConfiguration und MyServiceImpl sind die entsprechenden Klassen.
Auf die Seite können wir nicht zugreifen, welche Zugangsdaten sind dafür nötig?
Die Klasse MyServiceConfiguration implementiert leider nicht das Interface Configuration und lässt sich daher nicht auf unseren Fall übertragen. Im Beispiel wird die Konfiguration durch den Service einfach erzeugt. Das könnten wir natürlich auch so machen, nur gingen wir davon aus, dass das vom Framework übernommen wird, wenn der gesamte Service geladen wird. Das Configuration-Objekt muss also irgendwo herumliegen. Gibt es wirklich keine Möglichkeit, darauf zuzugreifen? Oder wird es nach laden der Konfiguration gleich wieder verworfen? Dann fragen wir uns aber, wozu die Methode Configuration.getParameter(String) dienen soll, denn diese ist ihrer Signatur nach zu urteilen darauf ausgelegt, dass das Objekt während des gesamten Lebenszyklus des Service vorhanden ist.
Viele Grüße
Es ist richtig, dass man selbst für die Instanziierung eines Configuration-Objektes sorgen muss, wenn der Service gestartet wird. Das wird nicht automatisch vom Framework erledigt.