Eclipse Magazin 3.2009 JPA Mit Eclipselink
Total Page:16
File Type:pdf, Size:1020Kb
Plus CD! Neue Serie: Eclipse-Business-Modelle >> 78 eclipse magazin 3.2009 Deutschland € 9,80 3.09 Österreich € 10,80, Schweiz CHF 19,20 You spoke. We listened. JPA mit EclipseLink Introducing Liferay Enterprise Edition. www.eclipse-magazin.de >> Bonusartikel „Eclipse DataBinding für die Kommunikation zwischen Modell und GUI“ von Ludwig Mittermeier JPA mit >> Persistenz-Frameworks EclipseLink, EMF Teneo, CDO >> Tools & Plug-ins Apache POI, Apache Lucene 2.4.0, Luke – Lucene Index Toolbox EclipseLink >> Modeling Now get the best of both worlds. • Model Query, Net4j RCP bei der Eisenbahn Liferay Enterprise Edition gives you all the benefits of open source with the stability, Weitere Infos S. 3 security, and reliability of an enterprise subscription. And with version 5.1, get the latest in SOA, Social Networking, and Collaboration technology, all at a fraction of the cost of Oracle® or IBM®. Eclipse RCP >> 72 • Spring Dynamic Modules RCP-Einsatz bei den Schweizerischen Bundesbahnen Liferay 5.1 Enterprise Edition Maintenance Subscription Platinum Support (24x7) 2.950 EUR / server / year 19.950 EUR / server / year Spring Dynamic Compare Oracle® WebCenter Suite: 125.000 EUR / processor, support 27.500 EUR / yr, as of 6 / 2008 Modules >> 12 • Eclipse SOA Modularisierung mit Spring DM For more information, email us at [email protected]. • Alle Infos zum Eclipse-Business-Modelle Eclipse SOA >> 80 Was ist guter Service? ab Seite 53 >> 21 EclipseLink als JPA-Provider EUROPEAN HEADQUARTERS - LANGEN, GERMANY 68864 D LIFERAY GMBH — ROBERT - BOSCH - STRASSE 11, 63225 LANGEN, GERMANY XML Binding mit EclipseLink >> 26 TEL: +49 - (0) 6103 - 3018570 Ý FAX: +49 - (0) 6103 - 3018571 „ EclipseLink bietet multiple Persistenzservices“ EclipseLink-Lead Doug Clarke im Gespräch >> 29 DataBinding für UI-Controls Rich Client Platform Foto: P. Rudi Eclipse DataBinding für komplexe UI Controls Quellcode DataBinding für auf CD! Fortgeschrittene HEIKO BARTH UND THORSTEN SCHENKEL >> ellen Informationsquellen ist die Eclipse- In vielen Applikationen wird bereits Eclipse DataBinding für die Tren- DataBinding-Wiki-Seite [1], eine andere nung und Synchronisation von grafischer Benutzeroberfläche und dem sind die zwei Dutzend Beispiele im CVS- Repository [2]. Es gibt jedoch auch ver- Modell eingesetzt. Entsprechende Publikationen befassen sich ausgiebig schiedene Artikel zu diesem Thema, die mit den Grundlagen des DataBindings. Dieser Artikel geht einen Schritt sich im Wesentlichen mit den Grundla- gen des Eclipse DataBinding befassen weiter und zeigt, dass Eclipse DataBinding sehr effizient für komplexe UI (Kasten: „Wo gibt‘s mehr zu Eclipse Da- Controls (z. B. Tabellen) verwendet werden kann. taBinding?“). Im Folgenden werden die fortgeschrittenen Aspekte des Eclipse DataBinding anhand verschiedener Bei- clipse DataBinding etabliert sich Wart- und Testbarkeit steigern wieder- spiele im Detail beleuchtet. Einnerhalb des Eclipse-Ökosystems um die Akzeptanz dieser Vorgehenswei- zunehmend als Standard für die einheit- se in den Reihen der Java-Entwickler. Viewer liche Synchronisation des Graphical Leider reflektiert die aktuell verfüg- JFace erleichtert mit seinen Viewern den User Interface (GUI) mit dem zugrunde bare Dokumentation nicht vollständig Umgang mit komplexeren SWT-Widgets liegenden Datenmodell. Die daraus re- die Möglichkeiten, die in Eclipse Data- wie Table oder Tree. Die Viewer kapseln sultierenden Vorteile in den Bereichen Binding stecken. Eine der wenigen offizi- bestehende SWT-Widgets für eine verein- www.eclipse-magazin.de eclipse magazin 3.09 43 Rich Client Platform DataBinding für UI-Controls Abb. 1: ListViewer Abb. 2: Master-Detail fachte Anbindung eines Datenmodells. feuert. Das Ganze sieht im Code dann Klasse Person liefert toString den Nach- Eclipse DataBinding erweitert dieses wie folgt aus: namen. Konzept durch verschiedene Adaptoren Um eine Änderung innerhalb eines für einen vereinheitlichten Zugriff auf ListViewer viewer = new ListViewer(shell); Personenobjekts automatisch in dem das Datenmodell. Am einfachsten kann viewer.setContentProvider List Widget zu reflektieren, ist ein wei- anhand des List Widgets die Verwen- (new ObservableListContentProvider()); terer Schritt notwendig. Das Modellob- dung von JFace-Viewern und Eclipse List<Person> persons = createPersonsList(); jekt muss eine Schnittstelle anbieten, die DataBinding veranschaulicht werden. In WritableList input = new WritableList es erlaubt, dessen Properties zu über- einem kleinen Beispiel sollen die Namen (persons, Person.class) wachen. Nur auf diese Weise besteht viewer.setInput(input); von Personen in einer Liste angezeigt die Möglichkeit, Änderungen direkt werden. Als Modell liegt eine Liste mit weiterzugeben. Anschließend kann sich Instanzen der Klasse Person vor: Änderungen an der WritableList werden ein spezieller LabelProvider über diesen auf diese Weise sofort in dem UI reflek- Mechanismus an dem Modellobjekt public class Person { tiert. Der ObservableListContentPro- registrieren und die Wertänderungen private String lastName; vider überwacht die Liste und leitet Än- an das User Interface weitergeben. Die public Person(String lastName) { derungen an das Widget weiter. Hierfür Vorgehensweise ist der Überwachung this.lastName = lastName; wird der Quellcode wie folgt erweitert. der WritableList sehr ähnlich. Exemp- } Dem GUI wird ein Button hinzugefügt, larisch erweitern wir nun den Code wie der das selektierte Element aus der Per- folgt: In unserem Beispiel wird zunächst public void setLastName(String lastName) { sonenliste löscht: ein Button hinzugefügt, der den Nach- this.lastName = lastName; } namen komplett in Groß- bzw. Klein- Button removeButton = new Button(shell, SWT.PUSH); buchstaben umwandelt: removeButton.setText("Remove"); public String getLastName() { removeButton.addSelectionListener return lastName; Button changeButton = new Button(shell, SWT.PUSH); (new SelectionAdapter() { } changeButton.setText("Change to upper/lower case"); @Override changeButton.addSelectionListener public void widgetSelected(SelectionEvent e) { @Override (new SelectionAdapter() { if (viewer.getSelection().isEmpty()) { public String toString() { return; return getLastName(); } Wo gibt´s mehr zu } Person p = (Person) ((IStructuredSelection) viewer Eclipse DataBinding? .getSelection()).getFirstElement(); In dieser Ausgabe des Eclipse Magazins: } input.remove(p); „EMF und SWT: Datenmodell und UI effizient } verheiratet!“ von Matthias Heinrich und Für Listen bietet das Eclipse DataBin- }); Henrik Lochmann. ding bereits einen passenden Content- Auf der Heft-CD und auf JAXenter.de: Provider: ObservableListContentPro- Nach dem Löschen des selektierten Ele- „Daten und ihre Bindungen“ von Ludwig vider. Um ihn verwenden zu können, ments wird dieses nicht mehr in der UI- Mittermeier: www.jaxenter.de/artikel/1353, muss dem ListViewer von JFace eine Liste angezeigt: Die Daten wurden von „Eclipse Forms im Härtetest“ von Marco van Liste übergeben werden, die IObser- dem Modell zum User Interface synchro- Meegen: www.jaxenter.de/artikel/1816. vableCollection implementiert. Wir nisiert. Anderswo: „Eclipse DataBinding + Valida- entscheiden uns für eine WritableList, Eine Person wird in der Liste als tion + Decoration“ von Kai Tödter: http:// die eine Liste von Personen kapselt. Der String gerendert, der den Nachnamen eclipse.dzone.com/articles/eclipse-databin- ding-validation, „Eclipse DataBinding with Mehrwert der Kapselung besteht darin, repräsentiert. Der standardmäßige La- Eclipse RCP Applications – Tutorial“ von dass eine IObservableCollection über belProvider des ListViewer ermittelt Lars Vogel: http://www.vogella.de/articles/ das Observer Pattern überwacht wer- den angezeigten Wert über die toString- EclipseDataBinding/article.html den kann und bei Änderungen Events Methode des Modellobjekts. In der 44 eclipse magazin 3.09 www.eclipse-magazin.de DataBinding für UI-Controls Rich Client Platform @Override Master-Detail public void widgetSelected(SelectionEvent e) { Häufig findet man in UIs das folgende if (viewer.getSelection().isEmpty()) { Szenario: Im UI gibt es eine Liste, Ta- return; belle oder einen Baum, wo ein Element } selektiert werden kann. Entsprechend Person p = (Person) ((IStructuredSelection) viewer .getSelection()).getFirstElement(); der Selektion sollen detailliertere Infor- if (p.getLastName().toUpperCase().equals mationen angezeigt und möglicherwei- (p.getLastName())) { se bearbeitet werden. Beispielsweise p.setLastName(p.getLastName().toLowerCase()); kann es sich bei dem selektierten Ele- } else { ment um eine Person handeln, und die p.setLastName(p.getLastName().toUpperCase()); editierbaren Details sind neben dem } Namen auch die Telefonnummer oder } das Geburtsdatum. Für solche Szenari- }); en hat sich der Begriff „Master-Detail“ durchgesetzt. Im nächsten Schritt muss die Klasse Wir wollen unser Beispiel erweitern, Person angepasst werden. Diese Klas- um die Unterstützung von Eclipse Da- se muss um PropertyChangeSupport taBinding bezüglich Master-Details zu erweitert werden. Außerdem wird ein veranschaulichen. Die Klasse Person er- LabelProvider benötig, der sich an ei- hält zwei neue Properties: firstName und nem Objekt als Observer registriert und telephoneNumber. Damit die Details im Events weiterleitet. Eclipse DataBin- GUI angezeigt werden können, fügen wir ding stellt hierfür die Klasse Observ- drei Textfelder hinzu: ableMapLabelProvider zur Verfügung. Der Konstruktor der Klasse erwartet als Text lastName = new Text(shell, SWT.BORDER); Parameter ein IObservableMap.