Markus Block [email protected] Ronald Kutschke [email protected] Plugin Design Patterns in...

26
Markus Block [email protected] Ronald Kutschke [email protected] Plugin Design Patterns in Vortrag im Rahmen des Seminars Software Design Patterns 23.06.2004 Eclipse

Transcript of Markus Block [email protected] Ronald Kutschke [email protected] Plugin Design Patterns in...

Page 1: Markus Block mb48@hdm-stuttgart.de Ronald Kutschke rk10@hdm-stuttgart.de Plugin Design Patterns in Vortrag im Rahmen des Seminars Software Design Patterns.

Markus Block [email protected] Kutschke [email protected]

Plugin Design Patternsin

Vortrag im Rahmen des Seminars

Software Design Patterns

23.06.2004

Eclipse

Page 2: Markus Block mb48@hdm-stuttgart.de Ronald Kutschke rk10@hdm-stuttgart.de Plugin Design Patterns in Vortrag im Rahmen des Seminars Software Design Patterns.

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

Page 3: Markus Block mb48@hdm-stuttgart.de Ronald Kutschke rk10@hdm-stuttgart.de Plugin Design Patterns in Vortrag im Rahmen des Seminars Software Design Patterns.

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

Page 4: Markus Block mb48@hdm-stuttgart.de Ronald Kutschke rk10@hdm-stuttgart.de Plugin Design Patterns in Vortrag im Rahmen des Seminars Software Design Patterns.

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

Page 5: Markus Block mb48@hdm-stuttgart.de Ronald Kutschke rk10@hdm-stuttgart.de Plugin Design Patterns in Vortrag im Rahmen des Seminars Software Design Patterns.

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

Page 6: Markus Block mb48@hdm-stuttgart.de Ronald Kutschke rk10@hdm-stuttgart.de Plugin Design Patterns in Vortrag im Rahmen des Seminars Software Design Patterns.

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

Page 7: Markus Block mb48@hdm-stuttgart.de Ronald Kutschke rk10@hdm-stuttgart.de Plugin Design Patterns in Vortrag im Rahmen des Seminars Software Design Patterns.

Plugin Design Patterns in Eclipse

Markus Block [email protected] Kutschke [email protected]

7

Beispiel 2

• Callback Interfaces anstatt Reflection

Beispiele

Page 8: Markus Block mb48@hdm-stuttgart.de Ronald Kutschke rk10@hdm-stuttgart.de Plugin Design Patterns in Vortrag im Rahmen des Seminars Software Design Patterns.

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

Page 9: Markus Block mb48@hdm-stuttgart.de Ronald Kutschke rk10@hdm-stuttgart.de Plugin Design Patterns in Vortrag im Rahmen des Seminars Software Design Patterns.

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

Page 10: Markus Block mb48@hdm-stuttgart.de Ronald Kutschke rk10@hdm-stuttgart.de Plugin Design Patterns in Vortrag im Rahmen des Seminars Software Design Patterns.

Plugin Design Patterns in Eclipse

Markus Block [email protected] Kutschke [email protected]

10

Plugin Verzeichnis (1)

• ScreenShot Plugin Verzeichnis

Umsetzung in Eclipse

Page 11: Markus Block mb48@hdm-stuttgart.de Ronald Kutschke rk10@hdm-stuttgart.de Plugin Design Patterns in Vortrag im Rahmen des Seminars Software Design Patterns.

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

Page 12: Markus Block mb48@hdm-stuttgart.de Ronald Kutschke rk10@hdm-stuttgart.de Plugin Design Patterns in Vortrag im Rahmen des Seminars Software Design Patterns.

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

Page 13: Markus Block mb48@hdm-stuttgart.de Ronald Kutschke rk10@hdm-stuttgart.de Plugin Design Patterns in Vortrag im Rahmen des Seminars Software Design Patterns.

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

Page 14: Markus Block mb48@hdm-stuttgart.de Ronald Kutschke rk10@hdm-stuttgart.de Plugin Design Patterns in Vortrag im Rahmen des Seminars Software Design Patterns.

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

Page 15: Markus Block mb48@hdm-stuttgart.de Ronald Kutschke rk10@hdm-stuttgart.de Plugin Design Patterns in Vortrag im Rahmen des Seminars Software Design Patterns.

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

Page 16: Markus Block mb48@hdm-stuttgart.de Ronald Kutschke rk10@hdm-stuttgart.de Plugin Design Patterns in Vortrag im Rahmen des Seminars Software Design Patterns.

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

Page 17: Markus Block mb48@hdm-stuttgart.de Ronald Kutschke rk10@hdm-stuttgart.de Plugin Design Patterns in Vortrag im Rahmen des Seminars Software Design Patterns.

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

Page 18: Markus Block mb48@hdm-stuttgart.de Ronald Kutschke rk10@hdm-stuttgart.de Plugin Design Patterns in Vortrag im Rahmen des Seminars Software Design Patterns.

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

Page 19: Markus Block mb48@hdm-stuttgart.de Ronald Kutschke rk10@hdm-stuttgart.de Plugin Design Patterns in Vortrag im Rahmen des Seminars Software Design Patterns.

Plugin Design Patterns in Eclipse

Markus Block [email protected] Kutschke [email protected]

19

Lazy Loading – Virtual Proxy

Konzepte

Host Plugin

Extender Plugin

instantiates

Page 20: Markus Block mb48@hdm-stuttgart.de Ronald Kutschke rk10@hdm-stuttgart.de Plugin Design Patterns in Vortrag im Rahmen des Seminars Software Design Patterns.

Plugin Design Patterns in Eclipse

Markus Block [email protected] Kutschke [email protected]

20

Lazy Loading – Virtual Adapter

Konzepte

Host Plugin Extender Plugin

instantiates

Eclipse

Page 21: Markus Block mb48@hdm-stuttgart.de Ronald Kutschke rk10@hdm-stuttgart.de Plugin Design Patterns in Vortrag im Rahmen des Seminars Software Design Patterns.

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

Page 22: Markus Block mb48@hdm-stuttgart.de Ronald Kutschke rk10@hdm-stuttgart.de Plugin Design Patterns in Vortrag im Rahmen des Seminars Software Design Patterns.

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

Page 23: Markus Block mb48@hdm-stuttgart.de Ronald Kutschke rk10@hdm-stuttgart.de Plugin Design Patterns in Vortrag im Rahmen des Seminars Software Design Patterns.

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

Page 24: Markus Block mb48@hdm-stuttgart.de Ronald Kutschke rk10@hdm-stuttgart.de Plugin Design Patterns in Vortrag im Rahmen des Seminars Software Design Patterns.

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

Page 25: Markus Block mb48@hdm-stuttgart.de Ronald Kutschke rk10@hdm-stuttgart.de Plugin Design Patterns in Vortrag im Rahmen des Seminars Software Design Patterns.

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

Page 26: Markus Block mb48@hdm-stuttgart.de Ronald Kutschke rk10@hdm-stuttgart.de Plugin Design Patterns in Vortrag im Rahmen des Seminars Software Design Patterns.

Plugin Design Patterns in Eclipse

Markus Block [email protected] Kutschke [email protected]

26

Fragen zum Thema?

Fragen