Blog

JavaOne 2008 Tag Zwei

Jeroen van Erp

Aktualisiert Oktober 23, 2025
9 Minuten

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.Es wird auch eine Möglichkeit enthalten, Beans einen Geltungsbereich hinzuzufügen, und er hat eine Erweiterung der EJB 3-Listener und vieles mehr erstellt. Es wird sogar Spring-Unterstützung geben, wenn es fertig ist... also schauen Sie in seinem Blog nach, um den Stand der Dinge zu erfahren... Jeroen auf Scripting Ich hatte heute das Privileg, in unmittelbarer Nähe einiger der Scripting-Gurus der JVM zu sein. Heute fand das Skripting Language Shootout, der "Script Bowl", statt. Das Format war im Stil von American Idol und bestand aus 3 Runden, die Teilnehmer waren:

  • 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 actor ist es einfach, neue Threads zu erzeugen, die keinen veränderbaren Zustand teilen. Das Endergebnis war, dass Charles den Shootout mit JRuby gewonnen hat, aber Guillaume mit Groovy knapp dahinter lag. Wenn Sie einen ausführlicheren Bericht verfolgen möchten, folgen Sie meinem Twitter-Stream. Sie finden mich unter: twiter.com/hierynomus. Marco an seinem Tag @JavaOne Oracle Keynote Eigentlich hatte ich geplant, diese Keynote auszulassen, um ein paar zusätzliche Stunden Schlaf zu bekommen, aber ich konnte es einfach nicht ertragen, meine Begleiter in der Kälte stehen zu lassen, indem ich sie ganz allein durch die gefährlichen Straßen von San Francisco laufen ließ. Wir wurden mit einem netten Bühnenstück verwöhnt, das mich an einen Werbespot für Tell Sell erinnerte. "Wow Mike, Sie sagen also, dass diese coolen 3D-Balken sofort aktualisiert werden, wenn ich diese Bestellungen bearbeite?" Ihr Produkt schien jedoch cool zu sein und war es wert, näher betrachtet zu werden. Wenn ich mir nur den Namen merken könnte ... Erstellen einer Java Platform, Enterprise Edition (Java EE Platform) Appliance, unter Verwendung der Projekte GlassFish, OpenSolaris und Indiana Irgendwann zwischen der Benennung dieser Sitzung und der eigentlichen Präsentation haben die Redner wahrscheinlich beschlossen, dass sie keine Klage riskieren wollten, denn der Name 'Indiana' wurde kein einziges Mal erwähnt. Das ist auch gut so, denn Mr. Jones weiß immer noch, wie man die Peitsche benutzt! Es ging um die Ausführung von Webanwendungen auf Appliances unter Verwendung von ZFS (einer neuen Art von openSolaris-Dateisystem) als Mittel zum Rollback, so dass keine mühsamen Neuinstallationen erforderlich sind. Eine coole Idee, aber ich glaube, ich habe das alles schon einmal gehört. Außerdem haben sie dafür GlassFish v2 verwendet und immer wieder gesagt, wie bedauerlich es sei, dass es nicht modular sei, Ehm, auf die neue Version umsteigen? Open-Source Service-Oriented Architecture mit Service Component Architecture und Apache Tuscany Präsentiert von jemandem, der wie ein junger Martin Sheen aussah, und die Fortsetzung einer Sitzung, die ich gestern besucht habe, hat mein Interesse an diesem Thema noch verstärkt. Für diejenigen, die es nicht wissen: SCA ist ein Entwicklungs- und Bereitstellungstool für SOA, das auf zusammengesetzten Komponenten, den so genannten Composites, basiert, und es könnte durchaus das nächste große Ding in der Welt der SOA werden. Oder vielleicht ist es das auch schon, wer kann schon den Überblick behalten? Es dreht sich alles um die SOA: RESTful Service-Oriented Architecture bei Overstock.com Zeit für ein Geständnis: Ich hatte mich für eine ganz andere Sitzung angemeldet (Java Persistence 2.0), entschied mich dann aber in letzter Minute, das Schiff zu verlassen, was wohl der schönste Moment der ganzen Woche war. Meine Belohnung war eine nette Geschichte darüber, wie einer der größten Online-Händler (so steht es in der Zusammenfassung, also muss es wahr sein) in kürzester Zeit von dem schrecklichen C auf das wunderbare Java umgestiegen ist. Schön zu wissen, dass sie nach all der harten Arbeit nun endlich etwas REST genießen können. Nichts? Wow, ein hartes Pflaster ... Creating a Compelling User Experience Wie wohl alle Niederländer zugeben werden, ist SOA nichts, worüber man lachen sollte. Deshalb war diese Sitzung eine willkommene Abwechslung. Das war bei weitem der größte Spaß, den ich bis jetzt hatte. Außerdem vermittelte sie mir neue Erkenntnisse über Interaktionsdesigner und die heikle Beziehung, die sie zu den Leuten haben, die nur wollen, dass die Dinge schön aussehen. Zwei Daumen und einen großen Zeh nach oben für diese Veranstaltung. JSR 303: From a World of Constraints to Constrain the World Eine weitere Nicht-SOA-Sitzung, die mich in die Zeit zurückversetzte, als ich das Struts Validation Framework zur Modellierung der Geschäftslogik eines großen Versicherungsunternehmens verwendete, was zu mehreren riesigen XML-Dateien führte. Ah, das waren noch Zeiten... Keine großen Überraschungen, was mich ehrlich gesagt etwas enttäuscht hat. Trotzdem eine schöne Präsentation, sogar mit dem starken französischen Akzent. Epilog Einige nette Sitzungen, zwei davon vergingen wie im Fluge, eine schien ewig zu dauern (mentale Notiz: das nächste Mal, wenn Sie eine ganze Dose Limonade verschlungen haben, gehen Sie zuerst auf die Toilette, bevor Sie eine Sitzung besuchen). SCA war wieder einmal das Highlight des Tages, aber die Präsentation über Benutzererfahrung lässt mich immer noch kichern, wenn ich daran denke. Wie auch immer, die Hälfte ist geschafft, mal sehen, was der morgige Tag bringen wird.

Verfasst von

Jeroen van Erp

Contact

Let’s discuss how we can support your journey.