Upload
others
View
1
Download
0
Embed Size (px)
Citation preview
© 2008 by EDV-Beratung Manfred Borzechowski 1
Einführung Eclipse RCPVortrag für die berlin.jar...
der Java-Konferenz 2008 in Berlin
Wer spricht?Manfred Borzechowski
Freier Java-Entwickler, Trainer und Berater
© 2008 by EDV-Beratung Manfred Borzechowski 2
...und worüber?Nicht über Entwicklung mit EclipseKeine step-by-step RCP instructionsKaum Code-BeispieleSondern
Was Eclipse RCP ist, und Was angehende Eclipse RCP-Entwickler erwartet:
„Extensions“Neue GUI-BibliothekenEntscheidungenBauchschmerzen
© 2008 by EDV-Beratung Manfred Borzechowski 3
Eine Geschichte voller „Spannungen“
VisualAge for JavaSmalltalk & RepositoryIBM & WAS & J2EEFrei & Populär AWT & „Features“Fat
WebSphere Studio? & FilesMS & .NETProprietär & LukrativSwing & „Speed“Light
Es standen sich gegenüber:
© 2008 by EDV-Beratung Manfred Borzechowski 4
IDEs für Java und J2EEGemeinsame Basis durch geniale Modularisierung
Frei und LukrativJava-IDE frei: EclipseJ2EE-IDEs für WAS kommerziell
Speed und Features: SWT – eine native UI-Bibliothek
Fat und schnell und LightLazy loading, Update-Mechanismen
Aber wohl kein J2EE und .NET
Die Lösung
http://www.pythonfactory.com/downloads/Interview_Gamma_x_NW02_10.pdf
KompletteEclipse
IDELauncher
© 2008 by EDV-Beratung Manfred Borzechowski 5
Plug-ins und FeaturesDie Module von Eclipse
„Everything is a Contribution“Weit mehr als Firefox Add-onsDebugger, Compiler, Projektverwaltung, CVS,...
Bis auf:Launcher, Konfigurationsdateien
Verzeichnisse und Jars im Verzeichnis plugins
Erich GammaPattern Papst
Launcher
© 2008 by EDV-Beratung Manfred Borzechowski 6
Was braucht man für ein minimales Plug-in?Datei plugin.xml
Kein CodeIn Unterverzeichnis plugins
Oder neuerdings auch dropins
Start von Eclipse liest alle plugin.xmlListe mit Menü Help > About Eclipse Platform, Knopf Plug-in Details
© 2008 by EDV-Beratung Manfred Borzechowski 7
Zwei grundlegende Fakten!Was ist die RCP (Rich Client Platform)?
RCP ist ein rudimentäres Eclipse!Nur die allernotwendigsten Infrastruktur-Plug-ins
Runtime, Workbench, SWT und JFace
Was bedeutet Entwicklung für RCP?
RCP-Entwicklung ist Entwicklung einer Anwendung durch Plug-ins für dieses rudimentäre Eclipse!
völlig unabhängig von der Java-IDE
Launcher
Launcher
© 2008 by EDV-Beratung Manfred Borzechowski 8
Warum sollte ich RCP-Projekte machen?
Kunde braucht ModularitätAusbaustufen und Erweiterbarkeit
UI ist reichhaltig, ansprechend und flottPerspektiven, MPEs, Views, Coolbar, Preferences, Update-Mechanismen
Neue Kompetenz im ProfilAngebote im Gulp-Roboter: Swing 12, RCP 6http://www.gulp.de/robot/seek.html, Stand 2.9.2008
Es gibt auch Gründe dagegen
© 2008 by EDV-Beratung Manfred Borzechowski 9
OSGi – BundlesAbhängigkeiten: MANIFEST.MF definiert
Welche Versionen anderer Bundles verlangt sindWelche eigenen Packages in anderen Bundles sichtbar sind
Lifecycle: Bundles können geladen, gestartet gestoppt und ausgetauscht
„Bei Registrierung erhalten Sie LifecycleEvents“
Nicht durch JVM, sondern ContainerEquinox, Felix, Knopflerfish
„Jar-Sealing done right“
$ java -jar org.eclipse.osgi_3.3.2.R33x_v20080105.jar -consoleosgi> ssFramework is launched.id State Bundle0 ACTIVE org.eclipse.osgi_3.3.2.R33x_v20080105osgi> install file:///workspaces/osgi/tutorial/tutorialbundle.jarBundle id is 4osgi> start 4Apr 17, 2008 11:57:29 AM tutorial.TutorialActivator startINFO: startedApr 17, 2008 11:57:29 AM baselib.BaseService sayHelloINFO: Hello, world!
© 2008 by EDV-Beratung Manfred Borzechowski 10
Plug-ins sind OSGi BundlesHaben also eine MANIFEST.MF
Nennt die zwei benötigten Plug-ins der RCP:
Die ihrerseits weitere Plug-ins benötigen
Warum nur verlangt das Crystal Report Plug-in alte Eclipse-Bundle-Versionen?
© 2008 by EDV-Beratung Manfred Borzechowski 11
Ein RCP Template Projekt
New > Project... > Plug-in Project
... create Rich Client Application
z.B. RCP Mail TemplateGenerierte Projektinhalte
Run As > Eclipse Application
Konfigurations-dateien
© 2008 by EDV-Beratung Manfred Borzechowski 12
Konfiguration mit demPlug-in Manifest Editor
. . . .
.
.
.
Direkteditierung derKonfigurationsdateien
Links zu den Tabsunten links
Hier und daeine UtilityKonsistenz zum
Build Path
BenutztePlug-ins Benutzte
jars Was in die Workbencheingeklinkt wird
Infos für Manifest.MF
© 2008 by EDV-Beratung Manfred Borzechowski 13
I'm so lazy - but for a reason
plugin.xml enthält Beschreibung aller durch die Workbench verwalteten GUI-Elemente
Menüs, Actions, Wizards, Preferences, Views, Editoren, Key Bindings, ...Sogenannte Extensions
"Contributions are only loaded when they are needed"
Minimierung der Startup-ZeitDemo: Schmeiß den Kater 'raus
Erich GammaPattern Papst
Launcher
© 2008 by EDV-Beratung Manfred Borzechowski 14
Extension #1: Die Anwendung selbst
Template erstellt beispielhafte Implementierung
Mit mehreren Konfigurationsobjekten
Application
ApplicationWorkbenchAdvisor
ApplicationWorkbenchWindowAdvisor
ApplicationActionBarAdvisor
● Ruft PlatformUI.createAndRunWorkbench
● Soll die Perspective Bar gezeigt werden?
● Soll es Statusbar und Coolbar geben?
● Welche Actions sollen im Coolbar in jedem Falle vorhanden sein
● Welches ist die ID der ersten Perspektive● Soll sich das Fenster seine Position merken?
© 2008 by EDV-Beratung Manfred Borzechowski 15
Geschenkt: Standard Actions
Im ApplicationActionBarAdvisorErzeugen und registrieren vonInstanzen von Standard-Actions
© 2008 by EDV-Beratung Manfred Borzechowski 16
Extension #2: Die erste Perspektive
Layout der initial enthaltenen Views
Relativ zur EditorAreaViews nur über deren IDs u.U. nur für ersten Aufruf
C D A
B
© 2008 by EDV-Beratung Manfred Borzechowski 17
Extension #3Views
Für Inhalt sind sie selbst verantwortlich
Keine Extensionsondern echter, handgearbeiteter Code
Einsatz von JFaceViewer für Listen, Tabellen, BäumeEditoren nicht in Views
Einsatz von SWTMasken, Controls, Graphiken
Aber: Menüs und Kommandos sind separate Extensions
Behälter fürSWT-GUI
Es gibt ein Common Navigator Framework, aber...
© 2008 by EDV-Beratung Manfred Borzechowski 18
SWT – Simple/Standard Widget Toolkit
„AWT done right“Dünner Layer über native OberflächenkomponentenWindows-Oriented API
Native LibrariesNatives l&F und VerhaltenUnflexibel
„it pissed me off beyond words“http://www.builderau.com.au/news/soa/James-Gosling-Q-A/0,339028227,339176462,00.htm
Dr. André WeinandIBM, Eclipse Comitter
Component
ContainerPanel
FrameWindow
LayoutManager
Widget,Control
Composite
Shell
ButtonCheckbox
Button
TextFieldTextAreaText
FlowLayout
RowLayout
...
...
Layout
AWTSWTJames Gosling
Sun, Schöpfer von Java
© 2008 by EDV-Beratung Manfred Borzechowski 19
Was lernt man schon am ersten SWT-Beispiel?
Keine Beans
Style Bits :-(
Kein separater Thread
Ressourcen müssen disposed werden
Andere Styles
© 2008 by EDV-Beratung Manfred Borzechowski 20
SWT Layouts
RowLayoutähnlich FlowLayout
FillLayoutähnlich AWT GridLayout
GridLayoutähnlich AWT GridBagLayout
FormLayoutähnlich Swing SpringLayout
horizontalSpan = 3horizontalAlignment = GridData.FILLverticalAlignment = GridData.FILLgrabExcessVerticalSpace = trueheightHint = 50
horizontalAlignment = GridData.ENDverticalAlignment = GridData.BEGINNING
horizontalAlignment = GridData.END horizontalSpan=3horizontalAlignment = GridData.FILL
horizontalAlignment = GridData.FILLdata.grabExcessHorizontalSpace = true
data.horizontalAlignment = GridData.FILL;data.verticalAlignment = GridData.FILL;grabExcessVerticalSpace=trueheightHint = 100
Kann gleicheBreiten erzwingen
© 2008 by EDV-Beratung Manfred Borzechowski 21
SWT Listener – AuswahlUntypisiert
Auswahl des interessierenden Events durch Konstante
Von SWT :-(
TypisiertVerifyListener
Texteingabenwidersprechen
HelpListenerBei F1
TraverListener,... Tu es – oder lass es sein!
Suchbild: Findedie Event-Konstante
© 2008 by EDV-Beratung Manfred Borzechowski 22
SWT Ressourcen
Umsetzungs-ratschläge:
http://www.eclipse.org/articles/swt-design-2/swt-design-2.html
Handling mehrfach verwendeterRessourcen:
ResourceManagerRegistries
ResourceManager
JFaceResources
© 2008 by EDV-Beratung Manfred Borzechowski 23
JFace Viewer und ContentProvider
Grob vergleichbar den Models von Swing
IStructuredContentProviderGibt ein Array von anzuzeigenden ObjektenVerwendbar für Listen und Tabellen
Column-spezifisch durch LabelProvider
ITreeContentProviderGibt zusätzlich Kinder und Eltern
IStructuredContentProvider
ITreeContentProvider
IStructuredViewer
TableViewer AbstractListViewer
CheckboxTabelViewer
AbstractTreeViewer
TableTreeViewerTreeViewer
ListViewer ComboViewer
© 2008 by EDV-Beratung Manfred Borzechowski 24
JFace LabelProviderGrob vergleichbar mit den CellRenderern von Swing:
ILabelProviderGibt Text und Image für ein ObjektImage nur in Tabelle sichtbar, nicht in ListeEinfache Implementierung: LabelProvider
ITableLabelProviderGibt spaltenspezifischen Text und Image für ein Objekt
ILabelProvider
LabelProvider
ITabelLabelProvider
© 2008 by EDV-Beratung Manfred Borzechowski 25
Neue Widgets im NebelBrutstätte für neue SWT-Widgets
http://www.eclipse.org/nebula/
Grid hat mich nicht begeistertAlternativ: http://sourceforge.net/projects/ktable
originäre SWT-Lösungrichtig brauchbar
© 2008 by EDV-Beratung Manfred Borzechowski 26
...und ich etwas aus der anderen Welt brauche?
Wenn Bibliotheken Swing-GUIs bieten Einbinden mit Embedded Frames
OpenOffice.orgOOo kombinieren mit NOA – Nice Office Access
JFreeChartBietet selber (experimentellen) SWT-Support
Crystal ReportsAber nicht unter OS XOLE geht wohl auch, aber keine Erfahrung
© 2008 by EDV-Beratung Manfred Borzechowski 27
Views verdrahtenLose Kopplung bevorzugtÜber SelectionService
Viewer ist SelectionProvider View ist Listener
IStructuredSelectionITextSelectionITreeSelectionIMarkSelection
http://www.eclipse.org/articles/Article-WorkbenchSelections/article.html
Sele
ctio
n Se
rvic
e
© 2008 by EDV-Beratung Manfred Borzechowski 28
Extensions #4 bis #6: Command, Handler, Binding
CommandMöglicherweise mehrere Handler
Aber nur ein aktiver wird angesprochenKein Code
HandlerKonkrete Klasse für Command mit
execute-Methodeenabled-PropertyZustandslistenern
Zugriff auf HandlerUtilBinding
Optionale Tastenkombination für Command
© 2008 by EDV-Beratung Manfred Borzechowski 29
Extension #7: MenuSichtbare Einbettung eines Commands
In Views oder Workbench WindowDropdown Menü, Toolbar, Popup Menü
Konfiguriert durch Location URIEventuelle Bedingung durch <visibleWhen
View kann durch andere Plug-ins Einträge erhalten
Ort definiert durch „spezielle“ EinträgemenuManager.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
<menuContribution locationURI="popup:rcpTunes.views.container"><menuContribution locationURI="menu:org.eclipse.ui.main.menu?after=additions">
Ersatz für:actionSetseditorActionspopupMenusviewActions
© 2008 by EDV-Beratung Manfred Borzechowski 30
Extension #8: EditorAngezeigter Inhalt wird wie View erstellt
Dirty-Zustand und Save-MetaphorKann in mehreren Instanzen geöffnet werden
Jeweils für IEditorInput
Kein Notwendigkeit daß es sich um Datei handeltirgendein textueller Inhalt dargestellt und bearbeitet wird
public void createPartControl(Composite parentComposite) {
© 2008 by EDV-Beratung Manfred Borzechowski 31
Extension #9: Preference Page
Von FieldEditorPreferencePage ableitenEditoren mit Label hinzufügen
Außerdem: PreferenceStoreVorinitialisieren Auslesen
© 2008 by EDV-Beratung Manfred Borzechowski 32
Extension #10: ProductSammelsurium von Properties
Zum Gebrauch innerhalb der Anwendung
In separater .product-KonfigurationsdateiSplash-ScreenOptionen für Linux, Solaris, MacOS X, WindowsLauncher-NameIcons
Nötig für den Produktexport
windowImagesaboutImageaboutTextappNamewelcomePage
© 2008 by EDV-Beratung Manfred Borzechowski 33
Extension #11: Helphttp://www.eclipse.org/articles/article.php?file=Article-AddingHelpToRCP/index.html
plugin.xml referenziert toc.xml-DateienNennen Themen und UnterthemenReferenzieren Hilfe-texte im HTML-Format
ActionBarAdvisor registriert HelpActions
Benötigte weitere Plug-ins
showHelpAction = ActionFactory.HELP_CONTENTS.create(window); searchHelpAction = ActionFactory.HELP_SEARCH.create(window); dynamicHelpAction = ActionFactory.DYNAMIC_HELP.create(window);
<toc label="Sample Table of Contents"><topic label="Main Topic" href="html/maintopic.html"> <topic label="Sub Topic" href="html/subtopic.html"/> </topic><topic label="Main Topic 2"/></toc>
© 2008 by EDV-Beratung Manfred Borzechowski 34
Follow me ... which way?
Viele Plug-ins Modularität und SeparationVerzahnung durch eigene Extension Points
Ein Plugin, sonst herkömmliches, programmatisches VorgehenListener, Models, Events, Observer,
Classic Road
Eclipse Avenue
Launcher
Launcher
© 2008 by EDV-Beratung Manfred Borzechowski 35
Bauchschmerzen #1Deklaratives Programmieren in XML
Schema, aber keine API-DOCMuss ich gar das Framework debuggen?Keine Code Completion von CDATA
kleiner Ersatz: Wizard im Plug-in Editor
4 Konfigurationsdateien pro Plug-in müssen zusammenspielen
.classpath, plugin.xml, build.properties, manifest.mfAchtung: mit übergreifenden Abhängigkeiten
Zusätzlich: Launch-Konfiguration
© 2008 by EDV-Beratung Manfred Borzechowski 36
Bauchschmerzen #2Hoher Lernaufwand
auch für sehr erfahrene Java-EntwicklerAbsolutes Overengineering für kleine Anwendungen
Interface > IAdaptable > AdaptorFactoriesEinschränkungen der verfügbaren Widgets
Button mit Icons? Tab disablen?Bugfixes je nach Wichtigkeit für EclipseFeature-Stabilität
3.3 Commands statt Actions3.4 Neuer Update-Mechanismus