Markus Block [email protected] Kutschke [email protected]
Plugin Design Patternsin
Vortrag im Rahmen des Seminars
Software Design Patterns
23.06.2004
Eclipse
Plugin Design Patterns in Eclipse
Markus Block [email protected] Kutschke [email protected]
2
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
Einleitung
Plugin Design Patterns in Eclipse
Markus Block [email protected] Kutschke [email protected]
3
Motivation
Ein Programm soll um Funktionen erweitert werden können.
Diese sind zur Entwicklungszeit des Programms jedoch noch nicht bekannt.
Einleitung
Plugin Design Patterns in Eclipse
Markus Block [email protected] Kutschke [email protected]
4
Begriffe
Plugin:
Software, die ein Programm um Funktionalität erweitert
Hostanwendung:
Software, die erweiterbar sein soll
Allgemein
Plugin Design Patterns in Eclipse
Markus Block [email protected] Kutschke [email protected]
5
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
Allgemein
Plugin Design Patterns in Eclipse
Markus Block [email protected] Kutschke [email protected]
6
Beispiel 1
• Berechnungsklasse• Rechenoperationen als Plugins
• Festes Plugin Verzeichnis• Plugins werden zur Ladezeit der Hostanwendung
geladen• Suchen der Methoden über Reflection
Beispiele
Plugin Design Patterns in Eclipse
Markus Block [email protected] Kutschke [email protected]
7
Beispiel 2
• Callback Interfaces anstatt Reflection
Beispiele
Plugin Design Patterns in Eclipse
Markus Block [email protected] Kutschke [email protected]
8
Beispiel 3
• Laden der Plugins bei Bedarf der Funktionalität (Lazy Loading)
kürzere Ladezeit der Hostanwendung
Beispiele
Plugin Design Patterns in Eclipse
Markus Block [email protected] Kutschke [email protected]
9
Ladevorgang und Zugriff in Eclipse (1)
• Starten von Eclipse• Durchsuchen eines festgelegten Verzeichnisses nach
Plugins (Eclipse/plugins)
Umsetzung in Eclipse
Plugin Design Patterns in Eclipse
Markus Block [email protected] Kutschke [email protected]
10
Plugin Verzeichnis (1)
• ScreenShot Plugin Verzeichnis
Umsetzung in Eclipse
Plugin Design Patterns in Eclipse
Markus Block [email protected] Kutschke [email protected]
11
Plugin Verzeichnis (2)
Verzeichnis:
Eclipse/plugins/org.junit_3.8.1
• junit.jar• plugin.xml• Icons• Weitere Ressourcen
Umsetzung in Eclipse
Plugin Design Patterns in Eclipse
Markus Block [email protected] Kutschke [email protected]
12
Ladevorgang und Zugriff in Eclipse (2)
• Parsen der Manifest Datei jedes Plugins• Aufbau der Plugin Registry• Instanziierung über Lazy Loading• Zugriff über Callback Interface
Umsetzung in Eclipse
Plugin Design Patterns in Eclipse
Markus Block [email protected] Kutschke [email protected]
13
Begriffe in Eclipse
HostPlugin
Extender Plugin
Member1Member2Member3
ExtensionExtensionPoints
Grundlagen Plugin
EP kann von mehreren Plugin erweitert werden
Plugin Design Patterns in Eclipse
Markus Block [email protected] Kutschke [email protected]
14
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> <import plugin="org.eclipse.core.resources"/> <import plugin="org.eclipse.ui"/> </requires>
<extension point="org.eclipse.ui.actionSets"> <actionSet label="My Action Set„
id="de.hdm.dp.plugins.helloworld.actionSet"> <menu label="My Menu" id="myMenu"> <separator name="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>
Konzepte
• Extensions• Dependencies• Identifier• GUI Informationen
• Konfiguration• Extension Point
Definitionen
Plugin Design Patterns in Eclipse
Markus Block [email protected] Kutschke [email protected]
15
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="actionSets" name="Action Sets" schema="schema/actionSets.exsd"/></plugin>
Konzepte
Plugin Design Patterns in Eclipse
Markus Block [email protected] Kutschke [email protected]
16
Extension Point Schema Definition<schema targetNamespace="org.eclipse.ui"> <element name="actionSet"> <complexType> <sequence> <element ref="menu" minOccurs="0" maxOccurs="unbounded"/> <element ref="action" minOccurs="0" maxOccurs="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> </complexType> </element> <element name="action"> <complexType> <choice> <element ref="selection" minOccurs="0" maxOccurs="unbounded"/> <element ref="enablement" minOccurs="0" maxOccurs="1"/> </choice> <attribute name="id" type="string" use="required"> </attribute> <attribute name="label" type="string" use="required"> </attribute> <attribute name="toolbarPath" type="string"> <attribute name="icon" type="string"> </attribute> <attribute name="tooltip" type="string"> </attribute> <attribute name="class" type="string"> </attribute> </complexType> </element></schema>
Konzepte
Plugin Design Patterns in Eclipse
Markus Block [email protected] Kutschke [email protected]
17
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
Konzepte
Plugin Design Patterns in Eclipse
Markus Block [email protected] Kutschke [email protected]
18
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
Konzepte
Plugin Design Patterns in Eclipse
Markus Block [email protected] Kutschke [email protected]
19
Lazy Loading – Virtual Proxy
Konzepte
Host Plugin
Extender Plugin
instantiates
Plugin Design Patterns in Eclipse
Markus Block [email protected] Kutschke [email protected]
20
Lazy Loading – Virtual Adapter
Konzepte
Host Plugin Extender Plugin
instantiates
Eclipse
Plugin Design Patterns in Eclipse
Markus Block [email protected] Kutschke [email protected]
21
Service Extension Pattern
• Ein Event im Host Plugin bewirkt das Aufrufen von einem Callback Objekt eines Extender Plugins
Konzepte
Host PluginExtender Plugin 1
Extender Plugin 2
Event1
Plugin Design Patterns in Eclipse
Markus Block [email protected] Kutschke [email protected]
22
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
Konzepte
Plugin Design Patterns in Eclipse
Markus Block [email protected] Kutschke [email protected]
23
Listener Extension Pattern (2)
Konzepte
• Ein Event im Host Plugin bewirkt das Aufrufen sämtlicher Callback Objekte der registrierten Extender Plugins
Host PluginExtender Plugin 1
Extender Plugin 2
Event
Member 1
Member 2
Plugin Design Patterns in Eclipse
Markus Block [email protected] Kutschke [email protected]
24
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.
Fazit
Plugin Design Patterns in Eclipse
Markus Block [email protected] Kutschke [email protected]
25
• 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
Quellen
Plugin Design Patterns in Eclipse
Markus Block [email protected] Kutschke [email protected]
26
Fragen zum Thema?
Fragen