Hallo Zusammen
Ich benötige für meine Applikation ein Plugin System. Bitte keine Vorschläge wie OSGI und JPF.
Ich habe folgende Anforderungen resp Ausgangslage:
Das Plugin kann X beliebige viele JAR Dateien als Abhängigkeit haben. Jedes Plugin kann andere oder sogar dieselben JAR Dateien als Abhängigkeit haben, oder dieselbe Abhängigkeit mit anderer Version.
Über Java Reflection soll dann das Plugin ausgeführt werden (das geht auch ganz ok, man kann ja über den URLClassloader dies erledigen). Über Interfaces soll das Plugin geschrieben werden (auch kein Problem). Es wird ein Maven Architype dafür geben (Pipifax).
Beispiel:
Plugin 1 (Verzeichnis):
- Plugin1.jar
- log4j-1.2.0.jar
- commons-io-2.5.jar
Plugin 2 (Verzeichnis):
- Plugin2.jar
- log4j-1.0.0.jar
- commons-io-2.0.jar
Plugin 3 (Verzeichnis):
- Plugin3.jar
- commons-math3.jar
Hinweis: Tatsächlich wäre es denkbar neben all den JAR Dateien für das Plugin noch Metadaten in Form einer XML Datei mitzugeben bswp. Klassenname, Methodennamen, usw. Falls darauf verzichtet werden kann, umso besser.
Hinweis 2: Auf Hotdeployment, sowie Start und Stop Automatiken kann verzichtet werden (keine Anforderung).
So dies mal zur Ausgangslage. Jetzt zu den Fragen ;-):
1) Habt ihr eine Idee wie ich das am besten realisiere? Stichworte genügen.
2) Meiner Meinung nach müssen die Plugins einen eigenen Classpath haben, sonst gibt's Wirrwarr oder?
3) Muss ich alle Klassen aus allen JAR Dateien in denselben Classloader bringen oder? Oder gibt's hier eine elegante Lösung, dass ich nur diejenigen lade, die auch tatsächlich verwendet werden? So etwas wie JLink zur Analyse von Abhängigkeiten resp. Imports?
Danke für eure aufgewendete Zeit. Ich wünsche euch allseits eine gute Zeit.
Beste Grüsse
Matthias
Ich benötige für meine Applikation ein Plugin System. Bitte keine Vorschläge wie OSGI und JPF.
Ich habe folgende Anforderungen resp Ausgangslage:
Das Plugin kann X beliebige viele JAR Dateien als Abhängigkeit haben. Jedes Plugin kann andere oder sogar dieselben JAR Dateien als Abhängigkeit haben, oder dieselbe Abhängigkeit mit anderer Version.
Über Java Reflection soll dann das Plugin ausgeführt werden (das geht auch ganz ok, man kann ja über den URLClassloader dies erledigen). Über Interfaces soll das Plugin geschrieben werden (auch kein Problem). Es wird ein Maven Architype dafür geben (Pipifax).
Beispiel:
Plugin 1 (Verzeichnis):
- Plugin1.jar
- log4j-1.2.0.jar
- commons-io-2.5.jar
Plugin 2 (Verzeichnis):
- Plugin2.jar
- log4j-1.0.0.jar
- commons-io-2.0.jar
Plugin 3 (Verzeichnis):
- Plugin3.jar
- commons-math3.jar
Hinweis: Tatsächlich wäre es denkbar neben all den JAR Dateien für das Plugin noch Metadaten in Form einer XML Datei mitzugeben bswp. Klassenname, Methodennamen, usw. Falls darauf verzichtet werden kann, umso besser.
Hinweis 2: Auf Hotdeployment, sowie Start und Stop Automatiken kann verzichtet werden (keine Anforderung).
So dies mal zur Ausgangslage. Jetzt zu den Fragen ;-):
1) Habt ihr eine Idee wie ich das am besten realisiere? Stichworte genügen.
2) Meiner Meinung nach müssen die Plugins einen eigenen Classpath haben, sonst gibt's Wirrwarr oder?
3) Muss ich alle Klassen aus allen JAR Dateien in denselben Classloader bringen oder? Oder gibt's hier eine elegante Lösung, dass ich nur diejenigen lade, die auch tatsächlich verwendet werden? So etwas wie JLink zur Analyse von Abhängigkeiten resp. Imports?
Danke für eure aufgewendete Zeit. Ich wünsche euch allseits eine gute Zeit.
Beste Grüsse
Matthias