J
JavaZivi
Gast
Guten Morgen Java-Community,
da ich nun seit einiger Zeit mit Java arbeite und programmiere wollte ich mal ein paar Informationen zu modularen Systemen einholen. Man könnte in meinem Fall auch von "Pluginsystem" sprechen. Es läuft eigentlich auf das selbe hinaus.
Ich wollte mich grob an die Struktur von Applets halten, also init(), start(), stop() und destroy(). Dafür hatte ich gedacht ein Interface zu verwenden was halt solche 4 Methoden vorgibt. Über die genaue Bezeichnung kann man ja noch reden, würde aber als return-Type lieber boolean verwenden anstatt mit void und Exceptions um mich zu werfen. Das Exception-Handling würde ich also dann der Modul-Implementierung überlassen und im Fehlerfall einfach mit false als return signalisieren das was schief gelaufen ist. Für den Anwender wäre es ja eigentlich egal ob er nun "Fehler" bekommt oder einen langen StackTrace. Für die Fehlerbehebung müsste dann natürlich geloggt werden. Zusätzlich will ich nicht nur die Module gegen ein Interface legen sondern auch deren Verwaltung. Ich habe dazu schon verschiedene Ansätze gesehen : "Loader" und "Handler", abstract class und Interfaces, einfache Dokumentation die eine Beispiel-Implementierung vorgibt. Also eigentlich alles Mögliche aber doch nichts konkretes. Hier würde mich mal "best practice" interessieren. Vielleicht hat ja schon mal jemand sowas selbst umgesetzt und damit Erfahrung.
Eine zusätzliche Frage die sich mir stellt ist die Kommunikation der Module untereinander. Natürlich könnte man einen Workaround mit Reflections über den "Handler" (oder was auch immer) realisieren, und erlich gesagt fällt mir auch eigentlich nicht wirklich etwas anderes ein, aber irgendwie finde ich das ziemlich "dirty". Zusätzlich muss man natürlich Dead-Locks vermeiden, denn wie oben angedeutet sollen die Module zur Runtime auch wieder komplett entladen werden können. Darum wäre eine Listener-Struktur nur sinnvoll wenn die Kontrolle darüber bei der selben "Verwaltungs-Instanz" liegt die auch für das Laden/Entladen der Module verantwortlich ist. Natürlich könnte man auch das Modul-Interface um ein paar Methoden a la void doIt() oder boolean setData(Object...) erweitern, allerdings bliebt dann immer noch die Frage wie ich diese Methoden des einen Moduls aus einem anderen heraus aufrufe.
Vielleicht sollte ich erstmal erklären was die "Basis" des ganze Systems sein soll :
Das "Grundprogramm" soll später ein einfaches JFrame mit zwei JPanel sein. Eine Seite enthält ein "Menü", die andere ist der Anzeigebereich. Die Funktionsweise soll nachher entsprechend sein das ein Modul sein JPanel enthält (allerdings nicht von diesem erbt), darauf seine Informationen darstellt und sich selbst mit einem JButton im "Menü" "registriert". Warum die Module nicht von JPanel erben sollen wird spätestens klar wenn man auch "Hintergrund-Module" verwenden will, wie z.B. einen zentralen Netzwerk-Stub oder der gleichen. Also auch alles stark MVC orientiert. Und daher ist auch die Kommunikation unter den Module so wichtig.
Der letzte Punkt wäre dann vielleicht noch die Sicherheit :
- welches Modul darf was machen und was nicht
- auf welche Daten hat wer Zugriff
- wer darf wen kontrollieren
- in wie weit hat die "Basis-Struktur" einfluss auf die "Rechtesteuerung"
Ich habe natürlich auch im Rahmen meiner Suche auch von OSGI und "Plugin-Frameworks" gehört, würde das ganze jedoch lieber "selber" machen wollen. Auch wenn es dann nicht so allgemein wird sondern halt nur speziell auf meine Anwendung zugeschnitten ist dürfte es eine gute Grundlage sein.
Hoffentlich habe ich halbwegs zum Ausdruck bringen können was ich vorhabe und wo dabei meine Probleme liegen. Was das posten von Source angeht : eigentlich würden Denkanstöße und pseudo-Codes völlig reichen. Die Umsetzung dessen sollte mit meiner Erfahrung kein Problem sein. Und wenn nicht kann ich ja immer noch nach einem kleinen Beispiel fragen.
-JavaZivi
da ich nun seit einiger Zeit mit Java arbeite und programmiere wollte ich mal ein paar Informationen zu modularen Systemen einholen. Man könnte in meinem Fall auch von "Pluginsystem" sprechen. Es läuft eigentlich auf das selbe hinaus.
Ich wollte mich grob an die Struktur von Applets halten, also init(), start(), stop() und destroy(). Dafür hatte ich gedacht ein Interface zu verwenden was halt solche 4 Methoden vorgibt. Über die genaue Bezeichnung kann man ja noch reden, würde aber als return-Type lieber boolean verwenden anstatt mit void und Exceptions um mich zu werfen. Das Exception-Handling würde ich also dann der Modul-Implementierung überlassen und im Fehlerfall einfach mit false als return signalisieren das was schief gelaufen ist. Für den Anwender wäre es ja eigentlich egal ob er nun "Fehler" bekommt oder einen langen StackTrace. Für die Fehlerbehebung müsste dann natürlich geloggt werden. Zusätzlich will ich nicht nur die Module gegen ein Interface legen sondern auch deren Verwaltung. Ich habe dazu schon verschiedene Ansätze gesehen : "Loader" und "Handler", abstract class und Interfaces, einfache Dokumentation die eine Beispiel-Implementierung vorgibt. Also eigentlich alles Mögliche aber doch nichts konkretes. Hier würde mich mal "best practice" interessieren. Vielleicht hat ja schon mal jemand sowas selbst umgesetzt und damit Erfahrung.
Eine zusätzliche Frage die sich mir stellt ist die Kommunikation der Module untereinander. Natürlich könnte man einen Workaround mit Reflections über den "Handler" (oder was auch immer) realisieren, und erlich gesagt fällt mir auch eigentlich nicht wirklich etwas anderes ein, aber irgendwie finde ich das ziemlich "dirty". Zusätzlich muss man natürlich Dead-Locks vermeiden, denn wie oben angedeutet sollen die Module zur Runtime auch wieder komplett entladen werden können. Darum wäre eine Listener-Struktur nur sinnvoll wenn die Kontrolle darüber bei der selben "Verwaltungs-Instanz" liegt die auch für das Laden/Entladen der Module verantwortlich ist. Natürlich könnte man auch das Modul-Interface um ein paar Methoden a la void doIt() oder boolean setData(Object...) erweitern, allerdings bliebt dann immer noch die Frage wie ich diese Methoden des einen Moduls aus einem anderen heraus aufrufe.
Vielleicht sollte ich erstmal erklären was die "Basis" des ganze Systems sein soll :
Das "Grundprogramm" soll später ein einfaches JFrame mit zwei JPanel sein. Eine Seite enthält ein "Menü", die andere ist der Anzeigebereich. Die Funktionsweise soll nachher entsprechend sein das ein Modul sein JPanel enthält (allerdings nicht von diesem erbt), darauf seine Informationen darstellt und sich selbst mit einem JButton im "Menü" "registriert". Warum die Module nicht von JPanel erben sollen wird spätestens klar wenn man auch "Hintergrund-Module" verwenden will, wie z.B. einen zentralen Netzwerk-Stub oder der gleichen. Also auch alles stark MVC orientiert. Und daher ist auch die Kommunikation unter den Module so wichtig.
Der letzte Punkt wäre dann vielleicht noch die Sicherheit :
- welches Modul darf was machen und was nicht
- auf welche Daten hat wer Zugriff
- wer darf wen kontrollieren
- in wie weit hat die "Basis-Struktur" einfluss auf die "Rechtesteuerung"
Ich habe natürlich auch im Rahmen meiner Suche auch von OSGI und "Plugin-Frameworks" gehört, würde das ganze jedoch lieber "selber" machen wollen. Auch wenn es dann nicht so allgemein wird sondern halt nur speziell auf meine Anwendung zugeschnitten ist dürfte es eine gute Grundlage sein.
Hoffentlich habe ich halbwegs zum Ausdruck bringen können was ich vorhabe und wo dabei meine Probleme liegen. Was das posten von Source angeht : eigentlich würden Denkanstöße und pseudo-Codes völlig reichen. Die Umsetzung dessen sollte mit meiner Erfahrung kein Problem sein. Und wenn nicht kann ich ja immer noch nach einem kleinen Beispiel fragen.
-JavaZivi