Plugin Design Patterns in Eclipse Vortrag im Rahmen

  • Slides: 26
Download presentation
Plugin Design Patterns in Eclipse Vortrag im Rahmen des Seminars Software Design Patterns 23.

Plugin Design Patterns in Eclipse Vortrag im Rahmen des Seminars Software Design Patterns 23. 06. 2004 Markus Block mb 48@hdm-stuttgart. de Ronald Kutschke rk 10@hdm-stuttgart. de

Plugin Design Patterns in Eclipse Einleitung Inhalt • Allgemein Plugin • Vom Starten der

Plugin Design Patterns in Eclipse 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 Markus Block mb 48@hdm-stuttgart. de Ronald Kutschke rk 10@hdm-stuttgart. de 2

Plugin Design Patterns in Eclipse Einleitung Motivation Ein Programm soll um Funktionen erweitert werden

Plugin Design Patterns in Eclipse Einleitung Motivation Ein Programm soll um Funktionen erweitert werden können. Diese sind zur Entwicklungszeit des Programms jedoch nicht bekannt. Markus Block mb 48@hdm-stuttgart. de Ronald Kutschke rk 10@hdm-stuttgart. de 3

Plugin Design Patterns in Eclipse Allgemein Begriffe Plugin: Software, die ein Programm um Funktionalität

Plugin Design Patterns in Eclipse Allgemein Begriffe Plugin: Software, die ein Programm um Funktionalität erweitert Hostanwendung: Software, die erweiterbar sein soll Markus Block mb 48@hdm-stuttgart. de Ronald Kutschke rk 10@hdm-stuttgart. de 4

Plugin Design Patterns in Eclipse Allgemein Ladevorgang und Zugriff • Starten der Hostanwendung •

Plugin Design Patterns in Eclipse 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 Markus Block mb 48@hdm-stuttgart. de Ronald Kutschke rk 10@hdm-stuttgart. de 5

Plugin Design Patterns in Eclipse Beispiel 1 • Berechnungsklasse • Rechenoperationen als Plugins •

Plugin Design Patterns in Eclipse Beispiel 1 • Berechnungsklasse • Rechenoperationen als Plugins • Festes Plugin Verzeichnis • Plugins werden zur Ladezeit der Hostanwendung geladen • Suchen der Methoden über Reflection Markus Block mb 48@hdm-stuttgart. de Ronald Kutschke rk 10@hdm-stuttgart. de 6

Plugin Design Patterns in Eclipse Beispiel 2 • Callback Interfaces anstatt Reflection Markus Block

Plugin Design Patterns in Eclipse Beispiel 2 • Callback Interfaces anstatt Reflection Markus Block mb 48@hdm-stuttgart. de Ronald Kutschke rk 10@hdm-stuttgart. de 7

Plugin Design Patterns in Eclipse Beispiel 3 • Laden der Plugins bei Bedarf der

Plugin Design Patterns in Eclipse Beispiel 3 • Laden der Plugins bei Bedarf der Funktionalität (Lazy Loading) kürzere Ladezeit der Hostanwendung Markus Block mb 48@hdm-stuttgart. de Ronald Kutschke rk 10@hdm-stuttgart. de 8

Plugin Design Patterns in Eclipse Umsetzung in Eclipse Ladevorgang und Zugriff in Eclipse (1)

Plugin Design Patterns in Eclipse Umsetzung in Eclipse Ladevorgang und Zugriff in Eclipse (1) • Starten von Eclipse • Durchsuchen eines festgelegten Verzeichnisses nach Plugins (Eclipse/plugins) Markus Block mb 48@hdm-stuttgart. de Ronald Kutschke rk 10@hdm-stuttgart. de 9

Plugin Design Patterns in Eclipse Umsetzung in Eclipse Plugin Verzeichnis (1) • Screen. Shot

Plugin Design Patterns in Eclipse Umsetzung in Eclipse Plugin Verzeichnis (1) • Screen. Shot Plugin Verzeichnis Markus Block mb 48@hdm-stuttgart. de Ronald Kutschke rk 10@hdm-stuttgart. de 10

Plugin Design Patterns in Eclipse Umsetzung in Eclipse Plugin Verzeichnis (2) Verzeichnis: Eclipse/plugins/org. junit_3.

Plugin Design Patterns in Eclipse Umsetzung in Eclipse Plugin Verzeichnis (2) Verzeichnis: Eclipse/plugins/org. junit_3. 8. 1 • • junit. jar plugin. xml Icons Weitere Ressourcen Markus Block mb 48@hdm-stuttgart. de Ronald Kutschke rk 10@hdm-stuttgart. de 11

Plugin Design Patterns in Eclipse Umsetzung in Eclipse Ladevorgang und Zugriff in Eclipse (2)

Plugin Design Patterns in Eclipse 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 Markus Block mb 48@hdm-stuttgart. de Ronald Kutschke rk 10@hdm-stuttgart. de 12

Plugin Design Patterns in Eclipse Grundlagen Plugin Begriffe in Eclipse Host Plugin Extender Plugin

Plugin Design Patterns in Eclipse Grundlagen Plugin Begriffe in Eclipse Host Plugin Extender Plugin Extension Points Extension Member 1 Member 2 Member 3 EP kann von mehreren Plugin erweitert werden Markus Block mb 48@hdm-stuttgart. de Ronald Kutschke rk 10@hdm-stuttgart. de 13

Plugin Design Patterns in Eclipse Konzepte Plugin Manifest <? xml version="1. 0" encoding="UTF-8"? >

Plugin Design Patterns in Eclipse 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. Hello. World. Plugin"> <requires> <import plugin="org. eclipse. core. resources"/> <import plugin="org. eclipse. ui"/> </requires> • • Extensions Dependencies Identifier GUI Informationen <extension point="org. eclipse. ui. action. Sets"> <action. Set label="My Action Set„ id="de. hdm. dp. plugins. helloworld. action. Set"> <menu label="My Menu" id="my. Menu"> <separator name="my. Group"/> </menu> <action label="My Action" icon="icons/sample. gif" tooltip="Hello, Eclipse world" class="de. hdm. dp. plugins. example. actions. Hello. World. Action" menubar. Path="my. Menu/my. Group" id="de. hdm. dp. plugins. actions. Hello. World. Action"> </action. Set> </extension> </plugin> • • Konfiguration Extension Point Definitionen Markus Block mb 48@hdm-stuttgart. de Ronald Kutschke rk 10@hdm-stuttgart. de 14

Plugin Design Patterns in Eclipse Konzepte Definition eines Extension Points <? xml version="1. 0"

Plugin Design Patterns in Eclipse 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-point id="action. Sets" name="Action Sets" schema="schema/action. Sets. exsd"/> </plugin> Markus Block mb 48@hdm-stuttgart. de Ronald Kutschke rk 10@hdm-stuttgart. de 15

Plugin Design Patterns in Eclipse Konzepte Extension Point Schema Definition <schema target. Namespace="org. eclipse.

Plugin Design Patterns in Eclipse Konzepte Extension Point Schema Definition <schema target. Namespace="org. eclipse. ui"> <element name="action. Set"> <complex. Type> <sequence> <element ref="menu" min. Occurs="0" max. Occurs="unbounded"/> <element ref="action" min. Occurs="0" max. Occurs="unbounded"/> </sequence> <attribute name="id" type="string" use="required"> </attribute> <attribute name="label" type="string" use="required"> </attribute> <attribute name="visible" type="boolean"> </attribute> <attribute name="description" type="string"> </attribute> </complex. Type> </element> <element name="action"> <complex. Type> <choice> <element ref="selection" min. Occurs="0" max. Occurs="unbounded"/> <element ref="enablement" min. Occurs="0" max. Occurs="1"/> </choice> <attribute name="id" type="string" use="required"> </attribute> <attribute name="label" type="string" use="required"> </attribute> <attribute name="toolbar. Path" type="string"> <attribute name="icon" type="string"> </attribute> <attribute name="tooltip" type="string"> </attribute> <attribute name="class" type="string"> </attribute> </complex. Type> </element> </schema> Markus Block mb 48@hdm-stuttgart. de Ronald Kutschke rk 10@hdm-stuttgart. de 16

Plugin Design Patterns in Eclipse Konzepte Ladevorgang im Detail • Aufbau der Plugin Registry

Plugin Design Patterns in Eclipse 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 Beenden von Eclipse aktiv Markus Block mb 48@hdm-stuttgart. de Ronald Kutschke rk 10@hdm-stuttgart. de 17

Plugin Design Patterns in Eclipse Konzepte Lazy Loading Problem: – Rekursive Instanziierung aller Callback

Plugin Design Patterns in Eclipse 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 Markus Block mb 48@hdm-stuttgart. de Ronald Kutschke rk 10@hdm-stuttgart. de 18

Plugin Design Patterns in Eclipse Konzepte Lazy Loading – Virtual Proxy Host Plugin Extender

Plugin Design Patterns in Eclipse Konzepte Lazy Loading – Virtual Proxy Host Plugin Extender Plugin instantiates Markus Block mb 48@hdm-stuttgart. de Ronald Kutschke rk 10@hdm-stuttgart. de 19

Plugin Design Patterns in Eclipse Konzepte Lazy Loading – Virtual Adapter Eclipse Host Plugin

Plugin Design Patterns in Eclipse Konzepte Lazy Loading – Virtual Adapter Eclipse Host Plugin Extender Plugin instantiates Markus Block mb 48@hdm-stuttgart. de Ronald Kutschke rk 10@hdm-stuttgart. de 20

Plugin Design Patterns in Eclipse Konzepte Service Extension Pattern • Ein Event im Host

Plugin Design Patterns in Eclipse Konzepte Service Extension Pattern • Ein Event im Host Plugin bewirkt das Aufrufen von einem Callback Objekt eines Extender Plugins Host Plugin Extender Plugin 1 Event 1 Extender Plugin 2 Markus Block mb 48@hdm-stuttgart. de Ronald Kutschke rk 10@hdm-stuttgart. de 21

Plugin Design Patterns in Eclipse Konzepte Listener Extension Pattern (1) • Art des Observer

Plugin Design Patterns in Eclipse 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 Markus Block mb 48@hdm-stuttgart. de Ronald Kutschke rk 10@hdm-stuttgart. de 22

Plugin Design Patterns in Eclipse Konzepte Listener Extension Pattern (2) • Ein Event im

Plugin Design Patterns in Eclipse Konzepte Listener Extension Pattern (2) • Ein Event im Host Plugin bewirkt das Aufrufen sämtlicher Callback Objekte der registrierten Extender Plugins Host Plugin Extender Plugin 1 Member 2 Event Extender Plugin 2 Markus Block mb 48@hdm-stuttgart. de Ronald Kutschke rk 10@hdm-stuttgart. de 23

Plugin Design Patterns in Eclipse Fazit • Heutige Programme kommen an einem Plugin Konzept

Plugin Design Patterns in Eclipse Fazit • Heutige Programme kommen an einem Plugin Konzept nicht vorbei. • Eclipse stellt durch seine flexiblen Erweiterungsmöglichkeiten ein sehr mächtiges Plugin Konzept zur Verfügung, das wesentlicher Bestandteil des Erfolges der Eclipse IDE ist. Markus Block mb 48@hdm-stuttgart. de Ronald Kutschke rk 10@hdm-stuttgart. de 24

Plugin Design Patterns in Eclipse Quellen • Notes on the Eclipse Plug-in Architecture (Azad

Plugin Design Patterns in Eclipse 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 Markus Block mb 48@hdm-stuttgart. de Ronald Kutschke rk 10@hdm-stuttgart. de 25

Plugin Design Patterns in Eclipse Fragen zum Thema? Markus Block mb 48@hdm-stuttgart. de Ronald

Plugin Design Patterns in Eclipse Fragen zum Thema? Markus Block mb 48@hdm-stuttgart. de Ronald Kutschke rk 10@hdm-stuttgart. de 26