Markus Block mb48@hdm-stuttgart.de Ronald Kutschke rk10@hdm-stuttgart.de Plugin Design Patterns in...

Post on 06-Apr-2015

109 views 3 download

Transcript of Markus Block mb48@hdm-stuttgart.de Ronald Kutschke rk10@hdm-stuttgart.de Plugin Design Patterns in...

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