Interaktive Landkarten mit JXMapView

Nachdem mich heute ein Leser darauf aufmerksam gemacht hat, dass ein Link zu einem laufenden Beispiel einer JXMapView Anwendung leider mittlerweile offline ist (danke Dieter!), nehme ich dies als Gelegenheit selbst ein kleines Beispiel zu implementieren und einen neuen Artikel dazu zu schreiben.

Bei dem Beispiel handelt es sich um eine Swing Anwendung, die lediglich ein Fenter darstellt, in dem man Wegpunkte auf einer Karte plazieren kann. Diese werden mit einer roten Linie zu einer Rundreise verbunden.

Screenshot der Demoanwendung

Screenshot der Demoanwendung


Read more »

OpenStreetMap in Java-Anwendungen

Im Moment arbeite ich mit einem Kommilitonen an einem Projekt, bei dem wir das Problem des Handlungdreisenden (TSP) mit einem genetischen Algorithmus bearbeiten. Als Visualisierung finde ich OpenStreetMap ganz schick! Bei der Suche nach einer Bibliothek oder etwas ähnlichem, bin ich sehr schnell auf die SwingLabs aufmerksam geworden, die mit JXMapKit eine Swing Componente bereitstellt, die bereits eine scrollbare Karte und viele weitere Funktionen breit stellt.

map
Read more »

Web Services mit Groovy

Auf der Suche nach eine Bibliothek zum Implementieren von Web Services bin ich letztens auf GroovyWS gestoßen. Auf der Projektseite finden sich einige Beispiele, die zeigen wie man mit extrem wenig Code lauffähige Dienste anbieten kann. Leider funktionieren diese Beispiele mit der aktuellen Version der Bibliothek nicht mehr. Nach einer etwas längeren Suche, habe ich mich dazu entschlossen die lauffähige Version an dieser Stelle zu veröffentlichen. Read more »

Wie reagiert die JVM eigentlich auf Multi-Cores?

Wie der Titel schon sagt habe ich mir die Frage gestellt, ob die ganzen Kerne in aktuellen CPUs eigentlich zu einer Leistungsverbesserung von Java Progammen führen. Natürlich müssen die Probleme dafür parallelisierbar sein usw., aber mich interessiert eigentlich mehr, ob z.B. Threads in Java auf alle verfügbaren Prozessoren verteilt oder nur auf einem gerechnet werden. Dabei bin ich auf einen wirklich sehr guten Artikel von Ilya Grigorik gestoßen, in dem er genau dieses Szenario anhand von Ruby, Python und Java ausführt. Kann ich jedem Leser nur empfehlen selbst zu lesen.

Es stellt sich herraus, dass die Java Threads von der JVM auf OS-Threads abbildet und somit eine Verteilung auf die Verfügbaren Kerne realisiert wird. Die Skriptsprachen Pyhton und Ruby hingegen verwenden zur Synchronisierung einen Golobl Interpreter Lock (GIL), um die Nutzung von gemeinsam verwendetem, nicht Thread-sichern Code zu verhindern. Dieser GIL ist der Flaschenhals, auch wenn Ruby Threads mittlerweile 1-zu-1 auf OS-Threads abgebildet werden. Verwendet man JRuby oder Jython dieses Problem übrigens gelöst, da der GIL in diesen Implementierungen nicht benötigt wird.

PostgreSQL installieren und für entfernte JDBC Zugriffe konfigurieren

Heute habe ich mal wieder eine PostgreSQL Datenbank zum aufgesetzt, um ein wenig mit JDBC und JPA zu experimentieren. Wie immer fange ich dann an nach einem Tutorial zu suchen, in dem erklärt wird wie der Datenbankserver einzurichten ist, damit ich von entfernten Rechneren aus damit arbeiten kann. So lässt sich der Server bequem in einer VM installieren und ich kann vom Host aus entwickeln.

In diesem Artikel wird zuerst die Installation und Konfiguration der PostgreSQL Datenbank beschrieben und anschließend wie man damit über JDBC arbeitet. Dazu wird die Eclipse “Database Development” Erweiterung eingerichtet und eine JDBC Template für Java-Anwendungen gezeigt. Read more »

Zusammengesetzter Schlüssel bei 1-zu-N Beziehungen (JPA)

Stößt man bei JPA auf eine bestehende Datenbank für die Entity Mappings erstellt werden sollen, so stößt man mitunter auf Tabellen die sich nicht ohne weiteres umsetzten lassen. Im Moment erstellen ein Kommiliton und ich eine Persistenzschicht für die Sakila DB, eine Beispieldatenbank für MySQL. Read more »

Generische Proxy-Generierung mit Spring

Im Moment arbeite ich an einem generischen Verfahren zum Aufruf von Methoden auf entfernten Objekten. Die genaue Beschreibung wird wahrscheinlich in den nächsten Tagen folgen, ein Problem, für das ich heute eine Coole Lösung gefunden habe kommt aber schon heute: Read more »

Log4j Konfiguration mit Spring initialisieren

In meinem aktuellen Projekt hatte ich ein Problem mit dem Laden der korrekten Konfiguration für Log4J. Im Normalfall sollte eine Datei Namens log4j.properties irgendwo im Classpath liegen, die als Konfigurationsdatei geladen wird. Problematisch wird es, wenn sich in verwendeten Bibliotheken ebenfalls diese Datei befindet. In meinem Fall hat dies zu einer mehrfachen Ausgabe der einzelnen Logeinträge geführt. Nach einiger Suche bin ich auf Spring log4J gestoßen. Dort wird beschrieben wie man mit Hilfe von Spring die Konfiguration setzen kann, indem eine entsprechende Datei samt Pfad angegeben wird.






            config/log4j.xml
        
    

In diesem Fall wird eben die Datei config/log4j.xml zur Initialisierung von Log4J verwendet. Überschneidungen und dadurch entstehende Fehler können so vermieden werden. Auf Rainer Feest Blog wird ausserdem beschrieben, wie eine ähnliche Konfiguration für Web-Projekte vorgenommen wird.

Maven POM.XML Namespace

Bei meinem aktuellen Projekt arbeite ich mit Maven, um mir den Umgang mit Bibliothken zu erleichtern. Das nimmt viel Arbeit ab, vor allem wenn man mit Spring, ActiveMQ usw. arbeitet, da an den benötigten Paketen wieder sehr viele abhängige dran hängen. Wie so oft wird eine XML-Datei, in diesem Fall pom.xml, eingesetzt, um Abhängigkeiten zu deklareien, den Buildprozess zu definieren usw. Hat man den Namensraum, bietet Eclipse die Autovervollständigung an, ein Feature das ich sehr schätzen gelernt hab. Hier ein vorbereitetes XML-Schnipselchen, das den Namespace enthält:


Last.FM Recorder mit Audioscrobbler

Warum sollte man Last.FM oder besser Audioscrobbler in eine Anwendung integrieren? Gut Frage! Dafür gibt es mit Sicherheit einige Gründe, meine liegen aber ganz einfach darin begründet, dass ich dem Benutzer einen Radiostream in einer Anwendung bieten will. Ich werde deswegen Audioscrobbler auch vornehmlich zur Generierung von Playlisten einsetzten, die auf dem Musikgeschmack des Benutzers beruhen. Natürlich soll der Benutzer auch die Möglichkeit erhalten, die Titel die er hört zu bewerten. Dadurch werden dann auch die angesprochenen Playlisten immer besser an seinen Musikgeschmack angepasst. Read more »