2008-09-17 16 views
5

Ich schreibe eine J2SE-Desktop-Anwendung, die eine ihrer Komponenten benötigt, um steckbar zu sein. Ich habe bereits die Java-Schnittstelle für dieses Plugin definiert. Der Benutzer sollte in der Lage sein, zur Laufzeit (über die GUI) auszuwählen, welche Implementierung dieser Schnittstelle er verwenden möchte (z. B. in einem Initialisierungsdialog). Ich stelle mir vor, dass jedes Plugin als JAR-Datei verpackt wird, die die implementierende Klasse plus eventuell benötigte Hilfsklassen enthält.Beste Technologie zum Hinzufügen von Plugin-Unterstützung zu einer J2SE-Anwendung?

Was ist die beste Technologie für diese Art von Sache in einer Desktop-Java-App?

+0

Wie hat JSPF für Sie gearbeitet? Ich habe einen Thread für Feedback erstellt: http://StackOverflow.com/Questions/1613935/ –

+0

Ich habe es noch nicht benutzt, werde es aber hier wieder posten sobald ich es tue. –

Antwort

5

Nach vielen Versuchen für plugin-basierte Java-Architekturen (was genau Sie zu suchen scheinen), fand ich schließlich JSPF, um die beste Lösung für Java5-Code zu sein. Es hat nicht die großen Bedürfnisse von OSGI-ähnlichen Lösungen, ist aber eher einfach zu bedienen.

+0

Ich ging zur Projektseite und schaute mir das Demo-Video an; JSPF scheint sehr einfach zu bedienen und genau das, was ich will! Vielen Dank. –

0

Ein Ansatz, den ich in Erwägung ziehe, ist, dass meine Anwendung einen leichtgewichtigen OSGi-Container startet. Wenn ich das richtig verstehe, könnte ich herausfinden, welche Plugin-JAR-Dateien in einem bestimmten Ordner vorhanden sind der Benutzer zur Auswahl. Ist das machbar?

Ich fand auch this article von Richard Deadman, aber es sieht ein wenig veraltet (2006?) Und erwähnt weder OSGi (zumindest nicht nach Namen) noch das java.util.jar Paket

0

Sie mit OSGi als Plugin Dachten Rahmen? Mit OSGi können Sie Ihre Module bei Bedarf aktualisieren/ersetzen, laden oder entladen.

+0

Hah! Beat dich um eine Minute! Aber ernsthaft; Hast du das selbst gemacht, oder wie ich, ist es etwas, was du denkst * sollte * funktionieren? –

1

Wenn Sie "nur" eine Komponente benötigen, um steckbar zu sein, reicht es aus, die Klassen basierend auf Metainformationen, z. Lies über einen Klassenlader META-INF/Informationen aus den verschiedenen Jars, die sich auf deinem Klassenpfad oder in einem bestimmten Plugin-Verzeichnis befinden.

OSGi auf der anderen Seite bietet Mittel zur Strukturierung Ihrer gesamten Anwendung. Wenn Sie bereits eine große Desktop-Anwendung haben, die ein Teil Pluggable benötigt, wäre dies eine steile Lernkurve. Wenn Sie mit einer Desktop-Anwendung leer ausgehen, bietet OSGi die Möglichkeit, die gesamte Anwendung zu modularisieren. Es geht um "Isolation von Komponenten" und Unabhängigkeit von Modulen.

Apache Felix bietet einen guten Start, wenn Sie OSGi Lane gehen wollen. Es sieht vielleicht kompliziert und schwergewichtig aus, aber das liegt nur daran, dass man nicht an diese Isolationsebene zwischen Modulen gewöhnt ist. Früher war es so einfach, irgendeine öffentliche Methode aufzurufen ...

2

OSGI ist sicherlich ein gültiger Weg. Aber, vorausgesetzt, Sie müssen nicht entladen, um das Plugin neu zu laden, könnte es einen Hammer verwenden, um eine Nuss zu knacken.

Sie könnten die Klassen in "java.util.jar" verwenden, um jede JAR-Datei in Ihrem Plugins-Ordner zu scannen und dann mit einem "java.net.URLClassLoader" den richtigen zu laden.

+0

Hört sich gut an, ich werde es ausprobieren. Prost. –