mkresse
I'm new here

Public Komponente mit projektlokaler Konfiguration

Jump to solution

Hallo zusammen,

ich möchte eine Public-Komponente (genaugenommen einen Upload-Hook) mit einer projekt-spezifischen Konfiguration versehen. Dazu würde ich das entsprechende Modul um eine ProjectApp samt Configuration<ProjectEnvironment> (via <configurable/> in der module.xml) ergänzen.

Die Frage ist allerdings, wie ich aus der Public-Komponente dann an das Configuration-Objekt komme? Ich habe den praktischen LegacyModuleAgent gefunden, der mir passenderweise ein Properties-Objekt liefert (die notwendige projectId kann ich mir ja über den ProjectAgent holen), allerdings deuten Name und API-Docs an, dass diese Klasse nicht mehr verwendet werden sollte. Etwas anderes habe ich leider nicht gefunden.

Eine weitere Frage ist, wann ich die Konfiguration für den Upload-Hook auslesen sollte - im Konstruktor oder sicherheitshalber erst direkt im entsprechenden preProcess()-Aufruf? Eine Implementierung des Component<ComponentDescriptor, ServerEnvironment> Interfaces in der Hoffnung auf Aufruf von init() hat leider nicht funktioniert.

Vielen Dank schonmal,

Martin

0 Kudos
1 Solution

Accepted Solutions
thmarx
I'm new here

Hallo Martin,

einen offiziellen Weg um eine projektspezifische Konfiguration in eine Public-Komponenten zu bekommen gibt es nicht. Ein paar Anregungen, wie du es machen kannst, hast du ja bekommen.

Ist deine Frage damit beantwortet?

Viele Grüße

Thorsten

View solution in original post

0 Kudos
5 Replies
Hendrik
New Responder

Hallo Martin,

meine Gedanken zu deiner Thematik:

a) Wenn du projektspezifische Konfigurationen benötigst würde sich die Verwendung eines Konfigurations-Service anbieten. Dieser könnte die jeweiligen Konfigurationen persistieren und, unter Angabe der Projekt ID, entweder ein Serializable Objekt deiner Wahl (z.B. Properties) zurückliefern oder gleich dedizierte Methoden zum Zugriff auf konkrete Konfigurationsparameter anbieten.

b) Falls du einen Service nutzt wirst du die Konfiguration "lazy" laden müssen da du über den parameterlosen Konstruktor keine Möglichkeit hast den Service zu laden. Die Konfiguration speichert man am besten in der UploadHook-Implementierung zwischen um nicht jedesmal auf den Service zugreifen zu müssen.

Ich habe das Interface SetServiceLocatorCallback mal probiert, funktioniert leider auch nicht..

Wir verwenden in unseren Projekten ebenfalls einen solchen Service um projektspezifische Konfigurationen zu speichern und abzufragen..

Hoffe das hilft evtl. ein wenig weiter!

Hallo Hendrik,

vielen Dank für deinen Input. Den Ansatz, einen globalen Service projektspezifische Einstellungen verwalten und persistieren zu lassen hatte ich mir auch bereits überlegt - scheint dann wohl das einzig sinnvolle Vorgehen (jenseits des LegacyModuleAgents, der übrigens auch gut funktioniert) zu sein. Nur schade, dass die eigentlich ja vorhandene Funktionalität (z.B. ProjectEnvironment) gar nicht genutzt wird (bzw. werden kann?).

Da meinen Beobachtungen nach für jeden Upload eine neue UploadHook-Instanz erzeugt wird, macht ein Zwischenspeichern (zumindest für meinen Einsatzfall) in einer Instanzvariablen keinen Sinn, da ich lediglich eine post-hook-Methode implementiere.

Danke und viele Grüße,

Martin

0 Kudos

Hallo Martin,

je nachdem wie "zeitaufwändig" die Initialisierung der Upload-Hook Instanz ist (Auslesen von projektspezifischen Konfigurationen mittels Service etc.) könnte man noch über eine Singleton-Instanz nachdenken die von der Upload-Hook Instanz genutzt wird, macht die Sache vermutlich etwas performanter. Nach meiner Erfahrung sind FirstSpirit Komponenten die in den Client eingehängt werden und im Swing EDT ausgeführt werden (StoreListener, ClientPlugin) nicht gerade förderlich für die Performance, gerade in riesigen Projekten..

In unserem Projekt verwenden wir einen eigens für die Initialisierung von Singleton-Instanzen, Resource Bundles etc. genutzen Thread welcher direkt nach dem Start des Java Client mittels eines Client Plugin gestartet wird..

Beste Grüße,

Hendrik

0 Kudos

gedoppelt

0 Kudos
thmarx
I'm new here

Hallo Martin,

einen offiziellen Weg um eine projektspezifische Konfiguration in eine Public-Komponenten zu bekommen gibt es nicht. Ein paar Anregungen, wie du es machen kannst, hast du ja bekommen.

Ist deine Frage damit beantwortet?

Viele Grüße

Thorsten

0 Kudos