ich möchte gerne in meinem Programm ein Pluginsystem verwirklichen um ein
bestimmtes Panel mit dem im Plugin realisierten Funktionen auszustatten.
Wie funktioniert das Programmieren von Plugins eingentlich generell (auch
andere Sprachen)? Ich habe dazu bisher keine Docs im Netz gefunden...
Geht das eigentlich mit Java ?
Wenn mir jemand eine URL oder Beispielscode geben könnte wäre ich sehr
dankbar !
Gruß,
Roman Himmes
Roman Himmes wrote:
> Wie funktioniert das Programmieren von Plugins eingentlich generell (auch
> andere Sprachen)? Ich habe dazu bisher keine Docs im Netz gefunden...
> Geht das eigentlich mit Java ?
In der FAQ gibt es ein Minimalbeispiel dazu. Wie das 'in the field'
aussieht, kann man sich z.B. bei Eclipse ansehen.
Viele Gruesse,
Patrick
Im Grunde ist ein Plugin eine Design-Pattern die sich mit jeder Sprache
realisieren lässt. Beispiel Code wird dich allerdings nicht sehr viel
weiter bringen, da es nicht -das- Plugin-System gibt, sondern immer
spezielle Anwendungen. Schau dir mal Eclipse, JEdit oder die IPchains
Linux Firewall Architektur als Beispiele an.
Eine kleine Checkliste:
* Welche Funktionsgruppen habe ich? (Email Versand, Graphische
Darstellung, Loging, ..)
* Welche Integrationspunkte kann ich für meine Plugins bereitstellen?
(Dokument wird ausgewählt, Benutzer logt sich aus, ..)
* Wie sieht mein Contract zwischen meinen Plugins und dem Container aus?
(Müssen sich Plugins beim Laden registrieren?, wie werden die Plugins
initialisiert? -> Lebenszyklus)
* Wie können Plugins sich gegenseitig entdecken und zur Laufzeit
ergänzen? Wie können Abhängigkeiten zwischen Plugins gelöst werden?
Gruß,
Stefan
Da gibt es wahrscheinlich so viele Ansätze wie es Programmierer gibt, aber
in Java kann man ganz schnell Ergebnisse sehen. Der einfachste Weg ist,
einmal das Plugin-Interface zu definieren, z.B.
interface Plugin {
void doIt(Object param);
}
Nun schreibst Du eine Datei, das die Namen aller Plugin-implementierenden
Klassen enthält, z.B.
my.package.Plugin1
my.package.Plugin2
Mittels java.lang.Class.forName wandelst Du die Klassennamen in
Class-Objekte um. Von den Class-Objekten erzeugst Du mittels newInstance()
neue Instanzen. Jetzt hast Du die Plugin-Objekte.
Natürlich beginnt die eigentlich Herausforderung erst jetzt, da wären APIs,
Konfiguration, Sicherheit (siehe SecurityManager), Informations-busse,
Versionierung etc.
Manuel