novomind
I'm new here

Von Service auf Konfiguration zugreifen

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

0 Kudos
10 Replies
feddersen
Community Manager

Im Service steht das ServerEnvironment zur Verfügung, was Zugriff auf das Konfigurationsverzeichnis des Services bietet.

0 Kudos

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

0 Kudos

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.

0 Kudos

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

0 Kudos

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.

0 Kudos

Auf die Seite können wir nicht zugreifen, welche Zugangsdaten sind dafür nötig?

0 Kudos

0 Kudos

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

0 Kudos

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.

0 Kudos