Native Windows-FileChooser mit JNative

Swing-FileChooser

Der Swing-FileChooser hat selbst in der Version 6 von Java immer noch nicht das Niveau des nativen FileChoosers erreicht. So steht bespielsweise die wichtige Miniaturansicht für Bilder bei Swing nicht zur Verfügung. Auch das Auswahl “Lasso” bei mehrfach Auswahl fehlt bei der Java-Variante.

JNative

Mit JNative gibt es eine einfache Möglichkeit native Code in Java einzubinden, ohne dafür gleich JNI oder den C/C++ Compiler bemühen zu müssen. Der native Code in der DLL (oder dem SO-Modul) ist generisch und ein Call an eine Betriebsystemfunktion wie “GetOpenFile” wird sozusagen in Java “zusammengebaut”.

Weiterlesen

Veröffentlicht unter Java | Hinterlasse einen Kommentar

DocBook Publishing mit OpenOffice

Einfacher …

Anläßlich einer Anfrage zum meinem Artikel habe ich das damals doch recht komplizierte Zusammenspiel von ANT, Python und Java einmal refakturiert und in eine einfache Java-Anwendung gegossen.

Herausgekommen ist eine kleine Kommandozeilen Applikation, die aus einer OpenOffice-Datei (altes SXW-Format, kein ODT) eine Docbook XML-File erzeugt, alle Bilder extrahiert und die Links anpasst. Weiterhin wird auf Wunsch auch gleich das 1-Seiten-Html und das mehrseitige HTML erzeugt. PDF und weitere lassen sich leicht ergänzen.

Weiterlesen

Veröffentlicht unter Java | Hinterlasse einen Kommentar

Testen mit HttpUnit und Spring

Beim Testen mit HttpUnit und Spring müssen die Servlets und Filter, die über Spring konfiguriert werden mit ihrem Context versorgt werden. Nimmt man hierzu den “normalen” Context-Listener von Spring, hat das den Nachteil, dass bei jedem Start des HttpUnit-ServletContainers der Context neugeladen wird, was unter Umständen viel Zeit in Anspruch nimmt.

Context cachen

Das Zwischenspeichern des Context ist erforderlich und ähnlich wie Spring selbst Basisklassen mit dieser Eigenschaft anbietet, kann auch ein ContextListener geschrieben werden, der den Context speichert und für viele Testruns zu Verfügung stellt.

Weiterlesen

Veröffentlicht unter Java | Hinterlasse einen Kommentar

Generisches Spring-Servlet

Manchmal braucht man neben den MVC Mechanismen von Spring-Web auch ein ganz normales Servlet, welches nicht einem Handler entspricht, der ModelAndView zurückgibt. Leider ist so ein Servlet dann aber selbst keine Spring-Bean, sondern muss sich selbst des Spring-Contexts bedienen, um an die Spring-Beans heranzukommen und Dependencies zu setzen.

Ein generisches Spring-Servlet, welches auf eine Servlet-Spring-Bean delegiert, schafft Abhilfe …

Weiterlesen

Veröffentlicht unter Java | 2 Kommentare

Contract first?

Gestern abend bin ich zufällig über eins der Sub-Projekte von Spring gestolpert: Spring-WS (Spring WebServices). Beim Lesen der Dokumentation stach mir die Behauptung ins Auge "Best Practice made easier", gemeint ist ein Contract-First Ansatz und das Arbeiten direkt mit den XML-Nachrichten.

In einem eigenen Abschnitt wird ausgeführt, warum (speziell im Falle von WebServices) der Contract-First Ansatz der Bessere ist:

Zum einen lassen die Type-Definitionen mit XML Schema Konstruktionen zu, die in Java (um diese Sprache geht es hier ;-) ) gar nicht möglich sind.

Zum anderen lassen bestimmte Sprachkonstrukte, wie zyklische Bezüge nicht einfach so nach XML abbilden.

Deshalb, so die Schlussfolgerung, sei es das Beste, direkt mit den XML-Nachrichten zu arbeiten. Hierfür gibt’s ja schließlich eine Reihe von APIs mit denen sich das einfach bewerkstelligen läßt.

Als krönender Abschluss wird, im Falle einer neuen Version des Contracts und damit anderer XML-Nachrichten, auf die Möglichkeit verwiesen, diese unter Umständen ganz einfach mit XSLT wieder auf die "Old-Style"-Nachricht abzubilden, und somit müßte man nicht mal eine neue Java-Implementierung schreiben.

Geht’s noch …

In der Tat, um mal beim letzten Punkt anzufangen, man braucht keine neue Java-Implementierung und auch kein neues Java-Interface, aber dafür ein XSLT-Stylesheet. Und wenn das dann nicht so arbeitet, wie man gedacht hat, dann baucht man einen Debugger für die Transformation-Engine, damit man sieht wo es schief geht ….

Weiterlesen

Veröffentlicht unter Java | Hinterlasse einen Kommentar

Bytecode Instrumentation mit JavaAgent für Logging und Debugging

JavaAgent

Bereits seit Java 5 besteht die Möglichkeit mit der JVM Option -javaagent eigene Klasse in das Klassenladen der VM einzuklinken und so zu verändern bevor diese ausgeführt werden. AspectJ nutzt das z.B. um Aspekte auf Bytecode Ebene "einzuweben".

Logging und Debugging

Ein schönes OpenSource Tool, welches sich diese Möglichkeit ebenfalls zu Nutze macht, ist: LimpidLog

Weiterlesen

Veröffentlicht unter Java | Hinterlasse einen Kommentar

ImageViewer mit Slideshow und Multiple Monitor Support

Slideshow auf zweitem Monitor?

Leider gibt’s das so gut wie gar nicht, das einzige was ich finden konnte ist der FastStone ImageViewer. Der hat allerdings so seine Macken beim Abspielen von ganzen Verzeichnissen und noch so ein paar Seltsamkeiten. Also was tun? Selber machen!

ImageViewer in Java

Auch für Java ist das Angebot gross, wenn man einen Bildbetrachter sucht, leider kann kein einziger seine Slideshow auch auf einem zweiten Monitor darstellen. Wenn man jedoch die APIs studiert, stellt man fest, dass Bilder laden und anzeigen eh nur ein Zweizeiler ist und auch das Umschalten in der FullScreen-Mode geht seit Java 1.4 ganz einfach …

Weiterlesen

Veröffentlicht unter HomeCinema, Java | Hinterlasse einen Kommentar

JSF Spring Integration

JSF Spring Integration

Bislang gab es vor allem zwei Ansätze JSF und Spring einander näher zu bringen:

  1. Der Spring eigene DelegatingVariableResolver
  2. JSF-Spring

Erstere liefert über einen Custom Variable Resolver die Möglichkeit auf Spring-Beans aus JSF (mit Hilfe der ExpressionLanguage) zuzugreifen.

JSF-Spring fügt dann noch die Möglichkeit hinzu auch von Spring aus auf JSF zugreifen zu können.

Aber mit Spring 2.0 braucht man das eigentlich gar nicht mehr …

Weiterlesen

Veröffentlicht unter Java | 4 Kommentare

Testing Concurrent Java Programs

Beim Testen von Java Programmen die Nebenläufigkeiten und Synchronisation enthalten, bekommt man schnell Probleme. Zum einen stellt man fest, dass es recht schwierig ist Testfälle zu konstruieren, die alle relevanten Codeteile durchlaufen. Und selbst wenn das geschafft ist, kann man noch nicht sicher sein, dass das Programm sich unter realen Bedingung korrekt verhält.

Die zeitlichen Anläufe, der nicht vorhersagbare Wettbewerb vieler Threads lassen sich schlecht oder gar nicht simulieren. Selbst wenn man Tests entwirft, die mit mehreren Threads arbeiten, stellt man schnell fest, das die Testabläufe fast vollkommen deterministisch sind und das zufällige Zeitverhalten einer echten Anwendung in keiner Weise erreicht wird. Deshalb findet man mit solchen "fast" deterministischen Tests auch potentielle Deadlocks oder Race-Conditions meistens nicht. Diese Probleme tauchen dann erst im Betrieb auf …

Zufall einfügen

Was hilft, ist den Test weniger vorhersagbar zu machen, das Zeitverhalten zu variieren. Das kann man erreichen, in dem man etwas "Zufall" in den Code einfügt.

Weiterlesen

Veröffentlicht unter Java | 3 Kommentare

Dependencies anzeigen mit Byecycle

Für Java Projekte gibt es ein schönes Plugin mit dem Dependencies eines Packages graphisch angezeigt werden können: Byecycle.

Es zeigt die insbesondere zyklische Abhängigkeiten in rot an und hilft so, diese zu vermeiden. Die Grafik richtet sich wie mit Gummibänden und Schwerkrafteffekt selbst aus, was auch “fürs Auge” schön anzusehen ist.

Veröffentlicht unter Java | Hinterlasse einen Kommentar