Questions & Answers

patrik_gleich
I'm new here

Hilfsklassen - wann .jar, wann .fsm ?

Hallo zusammen,

es kam folgende Frage auf: Wann sollte man Hilfsklassen als eigenes Modul, wann als .jar in einem Modul verwenden?

Hintergrund:

Es soll ein bestehendes FSM zwecks einfacherer Wartbarkeit aufgespalten werden und teile davon, in diesem Fall der Aufruf einer BackEnd-Logik, gekapselt werden.

Dazu stehen 2 Mรถglichkeiten zur verfรผgung:

  1. Ein neues FSM erstellen
  2. Ein JAR mit den Funktionen erstellen und es dem bestehenden FSM als Dependency mitgeben

Daher die Frage, bis wann Hilfsklassen in einer JAR gehalten, ab wann in ein eigenes FSM รผberfรผhrt werden sollen?

Gibt es hier seitens e-Spirit eine uns bisher unbekannte Empfehlung?

Wie geht ihr mit dieser Problematik um?

GrรผรŸe,

Patrik

0 Kudos
3 Replies
bIT_sosswald
Returning Responder

Hallo Patrik,

rein vom Gefรผhl her (ich kenne auch keine "offizielle" Empfehlung), wรผrde ich wie folgt vorehen.

Alles was man als Ulility betrachten kann und was ohne z.B. Konfiguration etc. wiederverwendet werden kann, kann in eine eigenes Jar-File ausgelagert werden.

Kandidaten wรคren hierbei fรผr mich solche Dinge wie z.B. das Auslesen von Feldern, Anlegen von Elementen, etc.

Also praktisch ein "ApacheCommons" fรผr FirstSpirit.

Alles was einen in sich geschlossenen UseCase abbildet, eine spezielle Konfiguration braucht, nicht einfach in einem anderen Kontext wiederverwendet werden kann, etc. wรผrde ich in ein eigenes Modul packen. Z.B. in einen Service und diesen dann aus dem anderen modul heraus aufrufen.

Aber ich denke das ist hauptsรคchlich eine Frage der Philosophie...

GrรผรŸe

Sandro

marza
I'm new here

Hallo Patrik,

die Empfehlung von Sandro kann ich uneingeschrรคnkt unterstรผzten. Bei einem FSM sollte man รคhnlich wie bei anderen Java-Projekten vorgehen. Wenn sich eine Aufteilung bzw. Wiederverwendung ergibt dann kann man den Java-Code auf mehrere Jars aufteilen.

Abhรคngigkeiten zwischen FSMs kann man auch definieren, jedoch gibt es hier einen Punkt, der problematisch ist: Da bei der Abhรคngigkeit von FSMs deren Version nicht mit einschlieรŸt, kann man theoretisch inkompatible Siuationen schaffen, die erst zur Lauftzeit auffallen (z.B. durch ClassNotFoundError wenn eine รคltere Version eines Moduls A mit einer neueren Version B ersetzt wurde un dabei die Abhรคngigkeit von Modul C nicht aktualisiert wurde). Aus diesem Grund sind Abhรคngigkeiten zwischen FSMs nur etwas fรผr Spezialfรคlle und man sollte dann genau wissen was man tut.

Es gibt jedoch auch echte Szenarien, bei denen man wegen der Sichtbarkeit auf dem ClassPath innerhalb eines FSMs zwei Jars haben mรถchte. Angenommen, ich mรถchte aus einer Executable eine REST-API benutzen und setzte dafรผr eine Fremdbibliothek ein. In diesem Fall sollte die Fremdbibliothek im FSM nur mit Scope Module eingebunden werden (module.xml). Das klappt aber nicht, weil eine Executable immer public sein muss, damit sie z.B. als Executable in einem Script oder Auftrag benutzt werden kann.

Hier muss man den Aufruf der REST-API hinter einem ServerService verbergen (Fascade-Pattern). Dabei wird der ServerService mittels eines Java-Interfaces definiert. Dieses Interface kommt in ein seperates Jar welches auf Scope Server eingebunden wird (module.xml). Die Implementierung des Interfaces, also die Service-Java-Klasse kommt in zweites Jar, welches nur mit Scope Module eingebunden wird. So kรถnnen dann auch Fremdbibliotheken, welche ich im Service nutze, mit Scope Module eingebunden werden, ohne dass es zu ClassPath-Problemen kommt.

Leider wird viel zu hรคufig das eigene Modul auf einem FirstSpirit-Server mit nur einem Projekt getestet. In diesem Fall treten Probleme, die man mit Jars welche mit Scope Server eingebunden hat nie auf. Das ist aber nicht Realitรคt. Unsere Kunden benutzen ja hรคufig ein paar Module zusammen und haben wegen Internationalisierung auch viele Projekte. Wenn ich im Produkt-Management eine Zertifizierung eines Moduls mache, ist das Prรผfen der module.xml meine Lieblingsaufgabe. Oft reicht das schon, um eine Nachbesserung einzufordern, da dort typische Fehler bei der Architektur gemacht wurden. Im Grunde verhรคlt sich bei FirstSpirit Modulen nicht viel รคnders als bei OSGi-Bundles, da man hier auch sehr genau auf die Sichtbarkeit der verwendeten Fremdbibliotheken achten muss.

GrรผรŸe

Marian

MichaelaReydt
Community Manager

Hallo Patrik,

benรถtigst du noch weitere Hilfe oder konnten dir die gegebenen Antworten bereits weiterhelfen?

In diesem Fall wรคre es toll, wenn du die "richtige Antwort" entsprechend markierst.

Solltest du zwischenzeitlich eine eigene Lรถsung gefunden haben, wรคre es super, wenn du diese hier bereitstellst.

Viele GrรผรŸe

Michaela

0 Kudos

Type a product name