Post on 06-Apr-2015
Markus Block mb48@hdm-stuttgart.deRonald Kutschke rk10@hdm-stuttgart.de
Plugin Design Patternsin
Vortrag im Rahmen des Seminars
Software Design Patterns
23.06.2004
Eclipse
Plugin Design Patterns in Eclipse
Markus Block mb48@hdm-stuttgart.deRonald Kutschke rk10@hdm-stuttgart.de
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 mb48@hdm-stuttgart.deRonald Kutschke rk10@hdm-stuttgart.de
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 mb48@hdm-stuttgart.deRonald Kutschke rk10@hdm-stuttgart.de
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 mb48@hdm-stuttgart.deRonald Kutschke rk10@hdm-stuttgart.de
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 mb48@hdm-stuttgart.deRonald Kutschke rk10@hdm-stuttgart.de
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 mb48@hdm-stuttgart.deRonald Kutschke rk10@hdm-stuttgart.de
7
Beispiel 2
• Callback Interfaces anstatt Reflection
Beispiele
Plugin Design Patterns in Eclipse
Markus Block mb48@hdm-stuttgart.deRonald Kutschke rk10@hdm-stuttgart.de
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 mb48@hdm-stuttgart.deRonald Kutschke rk10@hdm-stuttgart.de
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 mb48@hdm-stuttgart.deRonald Kutschke rk10@hdm-stuttgart.de
10
Plugin Verzeichnis (1)
• ScreenShot Plugin Verzeichnis
Umsetzung in Eclipse
Plugin Design Patterns in Eclipse
Markus Block mb48@hdm-stuttgart.deRonald Kutschke rk10@hdm-stuttgart.de
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 mb48@hdm-stuttgart.deRonald Kutschke rk10@hdm-stuttgart.de
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 mb48@hdm-stuttgart.deRonald Kutschke rk10@hdm-stuttgart.de
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 mb48@hdm-stuttgart.deRonald Kutschke rk10@hdm-stuttgart.de
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 mb48@hdm-stuttgart.deRonald Kutschke rk10@hdm-stuttgart.de
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 mb48@hdm-stuttgart.deRonald Kutschke rk10@hdm-stuttgart.de
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 mb48@hdm-stuttgart.deRonald Kutschke rk10@hdm-stuttgart.de
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 mb48@hdm-stuttgart.deRonald Kutschke rk10@hdm-stuttgart.de
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 mb48@hdm-stuttgart.deRonald Kutschke rk10@hdm-stuttgart.de
19
Lazy Loading – Virtual Proxy
Konzepte
Host Plugin
Extender Plugin
instantiates
Plugin Design Patterns in Eclipse
Markus Block mb48@hdm-stuttgart.deRonald Kutschke rk10@hdm-stuttgart.de
20
Lazy Loading – Virtual Adapter
Konzepte
Host Plugin Extender Plugin
instantiates
Eclipse
Plugin Design Patterns in Eclipse
Markus Block mb48@hdm-stuttgart.deRonald Kutschke rk10@hdm-stuttgart.de
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 mb48@hdm-stuttgart.deRonald Kutschke rk10@hdm-stuttgart.de
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 mb48@hdm-stuttgart.deRonald Kutschke rk10@hdm-stuttgart.de
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 mb48@hdm-stuttgart.deRonald Kutschke rk10@hdm-stuttgart.de
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 mb48@hdm-stuttgart.deRonald Kutschke rk10@hdm-stuttgart.de
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 mb48@hdm-stuttgart.deRonald Kutschke rk10@hdm-stuttgart.de
26
Fragen zum Thema?
Fragen