StefanS
Returning Observer

Public Klasse mit oder ohne FirstSpirit-API-Typ?

Jump to solution

Moin,

ich würde gerne im Isolated-Modus eines Moduls eine (Utility-)Klasse serverweit bekannt machen. In FirstSpirit gibt es für diese Fälle die Definition von Public-Klassen, wie sie beispielsweise für Executables genutzt werden. Aus der Doku ist mir leider nicht ersichtlich, ob eine solche Klasse zwingend einen FirstSpirit-API-Typ implementieren muss oder nicht.

Im Entwicklerhandbuch für Komponenten steht für Public-Typen:

"Bei diesem Typ ist keine Implementierung (implements) eines speziellen Interfaces notwendig."

In der Detailbeschreibung für den Public-Deskriptor findet sich jedoch folgendes:

"Eine Public-Komponente (Schnittstelle/HotSpot) ist eine spezialisierte Klasse, die eine Schnittstelle der FirstSpirit-Access-API implementiert."

Welche Aussage davon ist korrekt? Oder liegt meinerseits ein Missverständnis vor?

Besten Dank und Gruß
Stefan

P. S.:Prinzipiell kann man sicherlich ein Executable implementieren, die Klasse aber auch in "normalen" Skripten nutzen. Wäre in meinen Augen aber überflüssig (und verwirrend).

0 Kudos
1 Solution

Accepted Solutions
mbergmann
Crownpeak employee

Hi Stefan,

meines Wissens ist beides richtig auch wenn es sich zunächst widersprüchlich anhört.

Es muss durchaus ein Interface aus der API implementiert werden. Aber im Gegensatz zu den meisten anderen Komponententypen (z.B. Service, ProjectApp) gibt es hier keine 1:1-Zuordnung zwischen Komponententyp und zu implementierenden Interface, sondern hier gibt es diverse Interfaces die man nutzen kann. Je nachdem welches man hier nimmt, „passieren“ dadurch verschiedene Dinge, wenn FirstSpirit „darauf stößt“.

Somit braucht es also zwar die Implementierung „eines (=mehrerer möglicher)“ Interfaces, aber eben nicht „eines speziellen (=ganz bestimmten)“.

Dass insbesondere ein Executable auch wenn seine Ressourcen im Modulscope liegen trotzdem noch zugreifbar ist (allerdings auch nicht zwingend über die Klasse, eher über den Public-Namen), ist soweit ich weiß eine „Spezialität“ von Executables und hat nichts mit der Klassensichtbarkeit zu tun.

Es mögen mich aber gerne Kollegen korrigieren/ergänzen, die da noch tieferes Detail-Wissen haben 😉 

Viele Grüße 

Michael

View solution in original post

0 Kudos
3 Replies
mbergmann
Crownpeak employee

Hi Stefan,

meines Wissens ist beides richtig auch wenn es sich zunächst widersprüchlich anhört.

Es muss durchaus ein Interface aus der API implementiert werden. Aber im Gegensatz zu den meisten anderen Komponententypen (z.B. Service, ProjectApp) gibt es hier keine 1:1-Zuordnung zwischen Komponententyp und zu implementierenden Interface, sondern hier gibt es diverse Interfaces die man nutzen kann. Je nachdem welches man hier nimmt, „passieren“ dadurch verschiedene Dinge, wenn FirstSpirit „darauf stößt“.

Somit braucht es also zwar die Implementierung „eines (=mehrerer möglicher)“ Interfaces, aber eben nicht „eines speziellen (=ganz bestimmten)“.

Dass insbesondere ein Executable auch wenn seine Ressourcen im Modulscope liegen trotzdem noch zugreifbar ist (allerdings auch nicht zwingend über die Klasse, eher über den Public-Namen), ist soweit ich weiß eine „Spezialität“ von Executables und hat nichts mit der Klassensichtbarkeit zu tun.

Es mögen mich aber gerne Kollegen korrigieren/ergänzen, die da noch tieferes Detail-Wissen haben 😉 

Viele Grüße 

Michael

0 Kudos

Die Einschätzung von Michael ist korrekt. FirstSpirit prüft intern nicht auf eine bestimmte Klasse, sondern reagiert auf Interfaces wie z.B. UploadHook.

Wenn man explizit "ist eine Public-Komponente" ausdrücken will, kann man das (leere) Marker-Interface de.espirit.firstspirit.access.Public nutzen.

0 Kudos

Hi Michael und Stephan,

Danke euch für die Klärung. Dann würde ich wohl einfach Public als Interface bevorzugen.

Prinzipiell will ich der Flut an Executables einhalt gebieten, die aktuell für jeden noch so kleinen Unterschied in der eigentlichen Routine erfolgt. Zumal ein Executable (anders als auf Server-Seite) nicht explizit konfiguriert werden kann und so Umwege über fragwürdige Mittel genommen werden.

Beste Grüße
Stefan

0 Kudos