PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Verständnisfragen Eclipse Equinox (OSGi)


mittelding
2011-06-30, 20:21:05
Hallo!

Versuche mich gerade in Equinox einzuarbeiten. Auf Pluginebene (Bestandteile, Lebenszyklus etc.) konnte ich mir schon einen ganz guten Überblick verschaffen, allerdings macht mir das gesamte Zusammenspiel zwischen Eclipse und den Plugins und den Plugins untereinander noch etwas Probleme. Ich fange einfach mal an:


1.) Betrifft das Laden der Plugins. Klar ruft das Equinox Framework die Activator-Klasse eines Plugins auf, jedoch verstehe ich noch nicht ganz, was davor alles passieren muss. Woher kennt Eclipse die Plugins überhaupt und vor allem, wieviel weiß Eclipse über die Plugins?

Habe vor langer Zeit mal einen Vortrag darüber gehört und sinngemäß habe ich das hier in Erinnerung: Eclipse kennt seine Plugins eigentlich schwach bis garnicht, allerdings kennt es die Namen der Plugins und kann sich über eben diese Namen die jeweiligen Activator-Klassen holen, um den Lebenszyklus der Plugins zu steuern.

Der Begriff Class Loader ist öfters gefallen, allerdings bringt mir Google in diesem Zusammenhang nichts brauchbares.

2.) Wenn ein Plugin B ein anderes Plugin A über dessen Extension Point erweitert, wo kann dann Plugin A festlegen, welche Interfaces bzw. von welchen Klassen B erben muss? Also für bereits existierende Plugins steht das in der Doku, aber wird das technisch auch irgendwo festgelegt?
Von der ganzen Maschinerie bekommt man garnicht so viel mit, wenn man PDE nutzt.


Vielen Dank!

Gast
2011-07-02, 00:22:13
Alles was du suchst findest du in /META-INF/MANIFEST.MF eines Bundles

mittelding
2011-07-02, 10:17:05
Vielen Dank schon mal, aber das wäre zu einfach gewesen :)

Sicherlich stehen in der manifest die Dinge, die ein Plugin ausmachen (Name, Activator-Klasse, dependecies usw.), allerdings kann man deswegen über den Vorgang, welchen Eclipse durchläuft (Frage 1 oben) auch nichts herauslesen.

Klar könnte man vermuten, dass sich Eclipse das manifest-File schnappt und dann einfach die Actovator-Klasse raus holt, aber das ist eben nur eine Vermutung, mehr Details wären wissenswert.

Beispiel: schaut Eclipse in das Manifest und lernt das Plugin so kennen? Oder interessiert Eclipse das Manifest erst mal überhaupt nicht und die Plugins melden sich andersweitig an (eventuell über eine Registry o.ä.) und dann erst holt Eclipse die Infos aus der manifest? Letzteres würde besser zu der Aussage passen, das Eclipse eigentlich erst mal nur den Namen von Plugins kennt und sich anhand des Namens den Activator holt. Aber ob die Aussage überhaupt stimmt ist wieder eine andere Frage, habe sie so grob in Erinnerung von einem Vortrag damals.

Aber danke nochmals!

edit: vielleicht sollte ich das Wort "Eclipse" in meinem Post überall durch "Equinox" ersetzen, aber ich denke, es ist klar was gemeint ist.

peanball
2011-08-02, 13:31:17
Equinox fragt die Metadaten in jedem Plugin ab und untersucht wovon es abhängt und wie stark (z.B. optional dependencies, etc).

Danach werden zumindest bei Eclipse die extension points untersucht, die via einer optionalen plugin.xml-Datei definiert werden können.

Plugins registrieren sich nicht selbst bei OSGi sondern werden aufgefunden. Das ermöglicht mit Metadaten z.B. der plugin.xml, Dinge bereitzustellen ohne ein Plugin zu aktivieren. Man kann damit z.B. Menüs oder buttons in die Workbench hinzufügen ohne dass der Activator läuft. Erste wenn das Plugin tatsächlich benötigt wird, wird es auch aktiviert.

Einen Anfang könnte dir auch die Eclipse PDE Hilfe liefern:
http://help.eclipse.org/indigo/index.jsp?topic=%2Forg.eclipse.platform.doc.isv%2Fguide%2Fruntime_model_bundles. htm