1 / 26

Plugin Design Patterns in

Eclipse. Plugin Design Patterns in. Vortrag im Rahmen des Seminars Software Design Patterns 23.06.2004. Einleitung. Inhalt. Allgemein Plugin Vom Starten der Applikation bis zum Benutzen der Plugin Funktionalität Umsetzung bei Eclipse Konzepte in der Plugin Architektur von Eclipse

tannar
Download Presentation

Plugin Design Patterns in

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Eclipse Plugin Design Patternsin Vortrag im Rahmen des Seminars Software Design Patterns 23.06.2004

  2. Einleitung Inhalt • Allgemein Plugin • Vom Starten der Applikation bis zum Benutzen der Plugin Funktionalität • Umsetzung bei Eclipse • Konzepte in der Plugin Architektur von Eclipse • Konzepte • Plugin Patterns

  3. Einleitung Motivation Ein Programm soll um Funktionen erweitert werden können. Diese sind zur Entwicklungszeit des Programms jedoch noch nicht bekannt.

  4. Allgemein Begriffe Plugin: Software, die ein Programm um Funktionalität erweitert Hostanwendung: Software, die erweiterbar sein soll

  5. Allgemein Ladevorgang und Zugriff • Starten der Hostanwendung • Suchen der Plugins • Konfigurationsdatei • Festes Verzeichnis • Laden und Instanziieren der Plugins • Zur Ladezeit der Hostanwendung • Wenn Funktion benötigt (Lazy Loading) • Nutzen der Funktionalität des Plugins • Reflection • Callback Interface

  6. Beispiele Beispiel 1 • Berechnungsklasse • Rechenoperationen als Plugins • Festes Plugin Verzeichnis • Plugins werden zur Ladezeit der Hostanwendung geladen • Suchen der Methoden über Reflection

  7. Beispiele Beispiel 2 • Callback Interfaces anstatt Reflection

  8. Beispiele Beispiel 3 • Laden der Plugins bei Bedarf der Funktionalität (Lazy Loading)  kürzere Ladezeit der Hostanwendung

  9. Umsetzung in Eclipse Ladevorgang und Zugriff in Eclipse (1) • Starten von Eclipse • Durchsuchen eines festgelegten Verzeichnisses nach Plugins (Eclipse/plugins)

  10. Umsetzung in Eclipse Plugin Verzeichnis (1) • ScreenShot Plugin Verzeichnis

  11. Umsetzung in Eclipse Plugin Verzeichnis (2) Verzeichnis: Eclipse/plugins/org.junit_3.8.1 • junit.jar • plugin.xml • Icons • Weitere Ressourcen

  12. Umsetzung in Eclipse Ladevorgang und Zugriff in Eclipse (2) • Parsen der Manifest Datei jedes Plugins • Aufbau der Plugin Registry • Instanziierung über Lazy Loading • Zugriff über Callback Interface

  13. Grundlagen Plugin Begriffe in Eclipse Host Plugin Extender Plugin Extension Points Extension Member1 Member2 Member3 EP kann von mehreren Plugin erweitert werden

  14. Konzepte Plugin Manifest <?xml version="1.0" encoding="UTF-8"?> <plugin id="de.hdm.dp.plugins.helloworld" name="Hello World Plugin" version="1.0.0" class="de.hdm.dp.plugins.example.HelloWorldPlugin"> <requires> <importplugin="org.eclipse.core.resources"/> <importplugin="org.eclipse.ui"/> </requires> <extensionpoint="org.eclipse.ui.actionSets"> <actionSetlabel="My Action Set„ id="de.hdm.dp.plugins.helloworld.actionSet"> <menulabel="My Menu"id="myMenu"> <separatorname="myGroup"/> </menu> <action label="My Action" icon="icons/sample.gif" tooltip="Hello, Eclipse world" class="de.hdm.dp.plugins.example.actions.HelloWorldAction" menubarPath="myMenu/myGroup" id="de.hdm.dp.plugins.actions.HelloWorldAction"> </action> </actionSet> </extension> </plugin> • Extensions • Dependencies • Identifier • GUI Informationen • Konfiguration • Extension Point Definitionen

  15. Konzepte Definition eines Extension Points <?xml version="1.0" encoding="UTF-8"?> <plugin id="org.eclipse.ui" name="Eclipse UI" version="2.1.0" provider-name="Eclipse.org" class="org.eclipse.ui.internal.UIPlugin"> <extension-pointid="actionSets"name="Action Sets" schema="schema/actionSets.exsd"/> </plugin>

  16. Konzepte Extension Point Schema Definition <schematargetNamespace="org.eclipse.ui"> <elementname="actionSet"> <complexType> <sequence> <elementref="menu"minOccurs="0"maxOccurs="unbounded"/> <elementref="action"minOccurs="0"maxOccurs="unbounded"/> </sequence> <attributename="id"type="string"use="required"></attribute> <attributename="label"type="string"use="required"></attribute> <attributename="visible"type="boolean"></attribute> <attributename="description"type="string"></attribute> </complexType> </element> <elementname="action"> <complexType> <choice> <elementref="selection"minOccurs="0"maxOccurs="unbounded"/> <elementref="enablement"minOccurs="0"maxOccurs="1"/> </choice> <attributename="id"type="string"use="required"></attribute> <attributename="label"type="string"use="required"></attribute> <attributename="toolbarPath"type="string"> <attributename="icon"type="string"></attribute> <attributename="tooltip"type="string"></attribute> <attributename="class"type="string"></attribute> </complexType> </element> </schema>

  17. Konzepte Ladevorgang im Detail • Aufbau der Plugin Registry beim Start von Eclipse  aus Plugin Manifest Dateien • Host Plugin muss beim Aufruf sämtliche Extender Plugins instanziieren  Informationen aus Platform API • Aufruf des Default Konstruktors der Callback Klasse • eventuelles setzen der Konfigurationsparameter • Einmal geladene Plugins bleiben bis zum Beendenvon Eclipse aktiv

  18. Konzepte Lazy Loading Problem: • Rekursive Instanziierung aller Callback Klassen  zeitaufwändig Lösung: • Instanziieren „leichter“ Dummy Objekte  instanziieren bei Bedarf eigentlichen Callback Objekte  leiten Aufrufe an Callback Objekte weiter • Auslagern der GUI Informationen in Plugin Manifest

  19. Konzepte Lazy Loading – Virtual Proxy Host Plugin Extender Plugin instantiates

  20. Konzepte Lazy Loading – Virtual Adapter Eclipse Host Plugin Extender Plugin instantiates

  21. Konzepte Service Extension Pattern • Ein Event im Host Plugin bewirkt das Aufrufen von einem Callback Objekt eines Extender Plugins Extender Plugin 1 Host Plugin Event1 Extender Plugin 2

  22. Konzepte Listener Extension Pattern (1) • Art des Observer Patterns • Registrierung als Listener/Observer für ein bestimmtes Event bei einem Host Plugin • Registrierung über das Erweitern eines Extension Points des Host Plugins • Callback Interface entspricht Observer Interface im Observer Pattern

  23. Konzepte Listener Extension Pattern (2) • Ein Event im Host Plugin bewirkt das Aufrufen sämtlicher Callback Objekte der registrierten Extender Plugins Extender Plugin 1 Host Plugin Member 1 Member 2 Event Extender Plugin 2

  24. Fazit Fazit • Heutige Programme kommen an einem Plugin Konzept nicht vorbei. • Eclipse stellt durch seine flexiblen Erweiterungs-möglichkeiten ein sehr mächtiges Plugin Konzept zur Verfügung, das wesentlicher Bestandteil des Erfolges der Eclipse IDE ist.

  25. Quellen • Notes on the Eclipse Plug-in Architecture(Azad Bolour)http://www.eclipse.org/articles/Article-Plug-in-architecture/plugin_architecture.html • Eclipse Platform Technical Overview(Object Technology International, Inc.)http://www.eclipse.org/whitepapers/eclipse-overview.pdf

  26. Fragen Fragen zum Thema?

More Related