lasse_riess
I'm new here

Projektlokale Konfiguration

Hallo,

Zu einer Eingabekomponente möchte ich eine projektspezifische Konfiguration durchführen, um für die Eingabekomponente, je nach Projekt, eine URL zu hinterlegen.

Ich habe bereits eine serverweite Konfiguration eingerichtet, allerdings bin ich bei der Suche in diesem Forum auf den folgenden Beitrag zu dem Thema gestoßen, der eine ähnliche Problematik hatte:

https://community.e-spirit.com/message/14247#14247

Da dieser Beitrag allerdings von 2013 ist wollte ich mich nach dem aktuellen Stand erkundigen:

Ist es möglich über die ProjectEnvironment eine projektlokale Konfiguration umzusetzen, oder muss dies nach wie vor über eine Projekt-ID Zuordnung in der globalen Konfiguration geschehen?

Desweiteren ist die neue Dokumentation für die Modulentwicklung seit etwas längerer Zeit nicht geupdatet worden, ist hier in nächster Zeit mit einer Aktualisierung zu rechnen?

Danke für die Beantwortung,

Lasse Rieß

0 Kudos
7 Replies
marza
I'm new here

Hallo Lasse,

reden wir hier über Formulareingabekomponenten? Könntest Du hier nicht pro Projekt einen Default-Wert für das Formular setzen? Das müsste doch reichen, oder?

http://www.e-spirit.com/odfs52/vorlagenentwicklung/formulare/vorgabewerte/

Oder geht es darum an einer Stelle für alle Projekte die Einstellungen zu verwalten?

Grüße Marian

0 Kudos
rednoss
I'm new here

Hallo Lasse,

soll diese projektspezifische Konfiguration für eine bestehende oder selbst entwickelte Eingabekomponente umgesetzt werden?

Wie sieht dein genauer Anwendungsfall aus?

Viele Grüße

Rene

0 Kudos

Hallo Marian,

Es geht hier um eine eigens entwickelte Eingabekomponente, die eine JSON-Datei von einem Server abruft und dafür ein Baumdiagramm erstellt. Umgesetzt werden soll es als SiteArchitect Swing Gadget und ContentCreator WebGadget.

Die JSON ist allerdings pro Projekt unterschiedlich und daher auch unter verschiedenen URLs abrufbar.

Ich habe bisher analog zu dem verlinkten Foreneintrag jetzt einen Service geschrieben, der die URLs verwaltet und den beiden Gadgets verfügbar ist. Der funktioniert jetzt soweit, die eigentliche Frage hat sich also erledigt, weil ich es schon genau so umgesetzt habe.

Allerdings bekomme ich im ContentCreator die Fehlermeldung, dass der ConfigService Klasse nicht gefunden wird.

(couldn't load form!de.espirit.firstspirit.access.ServiceNotFoundException: Service 'com.dekra.fsmodule.dynform.universal.formtree.config.ConfigService' not found, caused by: java.lang.ClassNotFoundException: com.dekra.fsmodule.dynform.universal.formtree.config.ConfigService)

Wie behebe ich den Fehler? Liegt es an falsch festgelegten Resources in der module.xml?

Die Module.Xml sieht für die WebApp wie folgt aus:

<web-app>

            <name>dynform_web</name>

            <displayname>DEKRA Dynamic Forms</displayname>

            <web-xml>web.xml</web-xml>

            <web-resources>

                <resource >lib/dynForm.jar</resource>

            </web-resources>

        </web-app>

 

Und noch modulweite resources:

<resources>

        <resource scope="module" name="dynform">lib/dynForm.jar</resource>

        <resource scope="module">lib/gson.jar</resource>

        <resource target="/dynform">dynform/</resource>

    </resources>

Gruß,

Lasse

0 Kudos

Hallo Lasse,

wenn der Service in der WebApp verwendet wird, muss das Jar mit dem Service-Interface und den im Interface verwendeten Klassen bekannt sein, d.h. im WEB-INF/lib liegen (Ich hoffe Du hast wegen dem Service zwei Jars... eines mit dem öffentlichen Interface auf scope server und eines mit der Service-Implementierung mit scope module).

Vermutlich ist die o.g. Fehlermeldung darauf zurückzuführen. Es reicht nicht, die Resourcen im Modul anzumelden, aber nicht in der Web-App... die müssen in dem Fall an beiden Stellen stehen, auch wenn diese nur intern im Modul verwendet werden, da sonst das benötigte Jar nicht im WEB-INF/lib-Verzeichnis landet.

Grüße Marian

0 Kudos

Hallo Marian

Das mit den getrennten Jar-Dateien wusste ich tatsächlich nicht, das werde ich dannn wohl in meinem Projekt verbessern.

Welche Resources muss ich denn innerhalb des Module Tags und welche innerhalb der einzelnen Components initialisieren?

Reicht es, wenn ich lediglich die serverweiten Resources im Modulekontext und die modulweiten Resources in den jeweiligen Components deklariere?

Um nochmal auf die grundlegende Frage zurückzukommen:

Ist der Weg über einen global verfügbaren Konfigurationsservice, um projektspezifische Konfiguration durchzuführen, an dieser Stelle korrekt?

Gruß,
Lasse

0 Kudos

Hallo Lasse,

Das mit den Resourcen hängt konkret davon ab, was mit denen passieren soll. Grundsätzlich gilt: immer erstmal alles modul-lokal, vor allem wenn es sich um Fremdbibliotheken handelt, denn so verursacht man ziemlich fiese Classpath-Probleme mit anderen Modulen.

Eigenen Code wie die Service-Schnittstelle (Interface plus Datenklassen des Interface) gehören in ein server-weites Jar, damit ContentCreator und SiteArchitect darauf zugreifen können.

Modul-Lokale, aber globale Resourcen kann man einmal in der in der Module-XML im allgemeinen resources-Tag definieren. Siehe hierzu auch mein Beispiel-Projekt auf github:

https://github.com/zaplatynski/fsm-example-project

(Das ist allerdings inoffiziell)

Du solltest auch die Modul-Entwickler-Dokumentation gelesen haben, falls Du diese noch nicht kennst:

http://www.e-spirit.com/odfs52/dokumentation/fuer-entwickler/MDEV_DE_FirstSpirit_ModuleDeveloper.pdf

Um vom ContentCreator aus auf Daten des Servers zu zugreifen reicht oft auch schon eine Executable, welche man auch im FS-Template-Code aufrufen kann:

http://www.e-spirit.com/odfs52/vorlagenentwicklung/vorlagensyntax/anweisungen/cms_render/#skripte

Dabei steckt hinter dem Script eine Executable (das steht nur in der PDF und nicht im ODFS).

Grundsätzlich ist dein Ansatz mit dem Konfigurations-Service aber richtig, wenn Du die Konfiguration nicht statisch ins GOM packen willst.

Grüße Marian

0 Kudos
pavone
I'm new here

Hallo Lasse,

benötigst Du noch weitere Hilfe oder hat Dir Marians Antwort bereits geholfen? In diesem Fall wäre es super, wenn Du die "richtige Antwort" entsprechend markierst, damit auch andere Community-Teilnehmer diese auf den ersten Blick finden. Solltest Du zwischenzeitlich eine eigene Lösung gefunden haben, wäre es nett, wenn Du diese hier bereitstellst.

Viele Grüße

Tim

0 Kudos