Heute war der zweite Tag der JavaOne 2008. Neben vielen Gesprächen im JavaOne-Pavillon und dem Besuch all der coolen Partys in dieser Nacht, haben wir auch eine Reihe von Sitzungen besucht. Außerdem hatte die NLJug heute das James Gosling Meeting, das wir als größte JUG hier draußen gewonnen haben. Nach einem langen Arbeitstag hatten wir endlich Zeit, uns auf der Adobe-Party und der SDN-Party zu entspannen. Zu den Themen des heutigen Tages gehörten:
- Schließungen
- JavaFx, Groovy und Google Android
- Swing GUI-Tests
- Skripting
Mischa auf einem Teil seines Tages @JavaOne Closures Cookbook Neal Gafter zeigte in seiner Präsentation eine Reihe von Beispielen, die die Kodierung vereinfachen und die Verwendung von Boilerplate-Code minimieren sollen, indem er den"BGGA closure"-Vorschlag verwendet. Es gibt ein paar Beispiele, in denen ich gerne Closures verwenden würde, z.B.: Hinzufügen eines Listeners zu einer Swing-Komponente.
ItemSelectable = ...;
is.addItemListener( { ItemEvent e => doSomething(e,is); });
oder Aggregatoperationen wie z.B. die Ermittlung der höchsten Durchschnittsnote aus einer Liste von Studenten.
final double highestGpa =
Studenten
.filter({ Student s => s.graduationYear==THIS_YEAR })
.map({ Student s => s.getGpa() })
.max();
Die Auswirkungen des BGGA Closure-Vorschlags scheinen jedoch massiv zu sein und die Verwendung könnte zu sehr komplexem Code führen, insbesondere wenn Closures mit Generika kombiniert werden. z.B..
void for eachEntry(Karte m, { K, V ==> void wirft X } block) {
for (Map.Entry e : m.entrySet()) {
block.invoke(e.getKey(), e.getValue());
}
}
Alles in allem wird dies zu einem saubereren Code führen. Aber ich bin noch nicht überzeugt. Going Mobile with JavaFx Script Technology, Groovy, and Google Android Mike Mannion und Dierk König von Canoo berichteten über ihre Erfahrungen mit JavaFx, Groovy und Google Android. Ihre Erfahrungen mit der Entwicklung von JavaFx waren sowohl negativ als auch positiv. Negative Punkte betrafen vor allem die Entwicklungswerkzeuge und die im Vergleich zu Java unterschiedliche Syntax. Andererseits ist die Lernkurve aufgrund des deklarativen Ansatzes recht niedrig und die Produktivität hoch. Ihre Erfahrungen mit Google Android sind recht positiv. Es hat keine wirklichen GUI-Einschränkungen, enthält eine Menge Standardfunktionen und kann leicht mit Java-Bibliotheken erweitert werden. Der einzige Nachteil, den sie gefunden haben, ist das xml-basierte GUI-Layout. Allerdings ist die Lernkurve recht steil. Swing GUI-Tests leicht gemacht Das Testen von GUIs kann schwierig sein. Das liegt an einer Reihe von Dingen:
- Tests sollten automatisiert werden, aber GUIs sind für Menschen konzipiert
- Guis bestehen normalerweise aus mehr als einer Klasse
- Die Anzahl der GUI-Interaktionen kann enorm sein
- Die herkömmliche Testabdeckung reicht nicht aus, um alle Benutzerinteraktionsszenarien abzudecken.
Für das Testen von Swing-GUIs müssen Sie eine Reihe von Anforderungen erfüllen:
- Die Fähigkeit, Benutzereingaben zu simulieren
- Die Notwendigkeit, einen zuverlässigen Mechanismus zum Auffinden von GUI-Komponenten zu haben...
- Die Fähigkeit, Änderungen in Position, Größe, Layout usw. zu tolerieren.
Fest ist eine Open-Source-Bibliothek, die Ihnen diese Möglichkeiten bietet. Sie verfügt über eine gute API, unterstützt die Komponentensuche nach Name und Typ und lässt sich in JUnit und TestNG integrieren. Besonders schön ist, dass Fest automatisch einen Screenshot des Desktops einbetten kann, damit Sie sehen können, wie die GUI aussah, als der Test fehlschlug. Erik Jan über Web Beans Web Beans ist ein Framework, das Gavin King geschrieben hat, um alle Arten von Java-Objekten miteinander verbinden zu können. Es ist aus Seam hervorgegangen, wurde aber weiterentwickelt und es gibt einen JSR dafür. Auch Oracle hat eine ähnliche Lösung dafür. Web Beans zielt darauf ab, 'lose Kopplung mit starker Typisierung' zu verwenden. Um dies zu erreichen, müssen sie Anotationen auf besondere Weise verwenden. Ein einfaches Beispiel für eine Webbean:
öffentlich
@Komponente
Klasse Hallo {
public String hello(String name) {
return "Hallo " + Name;
}
}
Ein einfacher Client
öffentlich
@Komponente
Klasse Printer {
@Current Hallo Hallo;
public void hallo() {
System.out.println( hallo.hallo("Welt") );
}
}
Der Web Beans-Container sucht nun nach einer Komponente, die ein Hello-Objekt ist, und injiziert sie. Er kann auch die Konstruktorinjektion oder eine Initialisierungsinjektion mit einem Parameter verwenden. Was aber, wenn wir zwei Implementierungen derselben Schnittstelle haben, zum Beispiel eine für den Testbetrieb und eine für die Produktion? Für diesen speziellen Fall werden Web Beans die Möglichkeit haben, Deployment-Typen zu spezifizieren, und zwar in einem xml-Dokument.
- Guillaume LaForge (Grails)
- Charles Nutter (JRuby)
- Frank Wierzbecki (Jython)
- Jorge Ortiz (Scala)
In der ersten Runde mussten alle Skript-Gurus einen Twitter-Client in der Skriptsprache ihrer Wahl zeigen und den Code durchsehen. Die besten Clients waren in Groovy und JRuby geschrieben, wobei Charles seinen Client zugegebenermaßen nicht selbst geschrieben hat. Jython und JRuby fielen zurück, aber sie hatten funktionierende Lösungen. Die Jury, der unter anderem Ola Bini angehörte, hielt Groovy für das beste Programm, während JRuby den zweiten Platz belegte. Das Publikum gab JRuby die besten Noten, gefolgt von Groovy.
Die zweite Aufgabe bestand darin, eine Webanwendung auf der Grundlage der MySQL-Beispieldatenbank zu erstellen. Guillaume verwendete das Grails-Framework, während Charles eine Rails-Anwendung präsentierte. Frank hingegen hat nicht alle Funktionen mit Jython implementiert, und Jorge hat überhaupt nichts implementiert und uns deshalb etwas anderes in Scala gezeigt.
Die dritte Runde war die "Show your coolness"-Runde. Guillaume zeigte uns eine HTML-Seite aus dem JBoss Seam-Projekt, die die Dokumentation für die Integration von Seam und Groovy enthielt. Charles hingegen zeigte 2 brillante Demos mit coolen grafischen Effekten! Die von ihm gezeigte App hieß "A face for Stephen Hawking", googeln Sie mal, wenn Sie daran interessiert sind. Hier zeigte uns Jorge, wie einfach es ist, mit Scala Multithreading-Anwendungen zu schreiben. Mit dem Schlüsselwort
Verfasst von

Jeroen van Erp
Contact



